From: Jihun Park Date: Mon, 21 Sep 2015 08:55:40 +0000 (+0900) Subject: TCT 2.3.1 Release X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Ftizen_2.3.1_wearable;p=test%2Ftct%2Fnative%2Fbehavior.git TCT 2.3.1 Release Change-Id: Icd087d1d2031ddc6e8bc0cd80e96e0ae5d68feec Signed-off-by: Jihun Park --- diff --git a/coretbt_dataprovider/.cproject b/coretbt_dataprovider/.cproject new file mode 100644 index 0000000..3a27c1c --- /dev/null +++ b/coretbt_dataprovider/.cproject @@ -0,0 +1,442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coretbt_dataprovider/.exportMap b/coretbt_dataprovider/.exportMap new file mode 100644 index 0000000..43e310e --- /dev/null +++ b/coretbt_dataprovider/.exportMap @@ -0,0 +1,4 @@ +{ + global: main; + local: *; +}; diff --git a/coretbt_dataprovider/.project b/coretbt_dataprovider/.project new file mode 100644 index 0000000..e0b6bc9 --- /dev/null +++ b/coretbt_dataprovider/.project @@ -0,0 +1,37 @@ + + + coretbt_dataprovider + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + 1433416824096 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-projectRelativePath-matches-false-false-*/.tpk + + + + diff --git a/coretbt_dataprovider/.sdk_delta.info b/coretbt_dataprovider/.sdk_delta.info new file mode 100644 index 0000000..8c06211 Binary files /dev/null and b/coretbt_dataprovider/.sdk_delta.info differ diff --git a/coretbt_dataprovider/.sign/.manifest.tmp b/coretbt_dataprovider/.sign/.manifest.tmp new file mode 100644 index 0000000..c9d0dd6 --- /dev/null +++ b/coretbt_dataprovider/.sign/.manifest.tmp @@ -0,0 +1,4 @@ +bin/coretbt_dataprovider__DEL__vIllCCVSZDIpWPdMGfSLmIy2y7m9Uuh68KRAKYUHjbM= +shared/res/coretbt_dataprovider.png__DEL__1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= +tizen-manifest.xml__DEL__vwsNMQ1h1rUhDZc4X0DTIc7h8Pp6+mg1pAGx7G68dMY= +author-signature.xml__DEL__nLV1df2q6Al5m31Qgj0L9vnJ3aLSHfWDj40FUTYOcOE= diff --git a/coretbt_dataprovider/.sign/author-signature.xml b/coretbt_dataprovider/.sign/author-signature.xml new file mode 100644 index 0000000..06aa1ff --- /dev/null +++ b/coretbt_dataprovider/.sign/author-signature.xml @@ -0,0 +1,66 @@ + + + + + + +vIllCCVSZDIpWPdMGfSLmIy2y7m9Uuh68KRAKYUHjbM= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + +vwsNMQ1h1rUhDZc4X0DTIc7h8Pp6+mg1pAGx7G68dMY= + + + + + + +lpo8tUDs054eLlBQXiDPVDVKfw30ZZdtkRs1jd7H5K8= + + + +jQ+CAvGp+bwJqRi7exEoLS34AHXGDqW/IfMlFr04gUrkWMoYXZBP7uyM4TTX0lWzEtjYSRtBwWJP +5HSMVL7rePyEomMFHgKnP79Z5IAVcrmGm/IzI4uX62hP/OU3w8cFHaVOf7grcDLKutFHRxk7dLcv +fLugn/VQLyPsfvWsjfo= + + + + +MIIClTCCAX2gAwIBAgIGAU295kR9MA0GCSqGSIb3DQEBBQUAMFYxGjAYBgNVBAoMEVRpemVuIEFz +c29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4gRGV2 +ZWxvcGVycyBDQTAeFw0xMjExMDEwMDAwMDBaFw0xOTAxMDEwMDAwMDBaMBExDzANBgNVBAMMBmF1 +dGhvcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAoGQYyPbwYWZV2eMEY8ivWLUV7lIdjuxt +6fIvnEIuCvZ08HyHAJxZUzXHfvg/2Dv0vngWDUqPNND36JDgO/y7wJ93inMpscTkmOfNNac0zSh0 +Q5PAGeYmy8Qj84oIv2BMI8ukD6pP33d0EDYBwUnAaZHck+cIz/DCXtxdboZNG2UCAwEAAaMyMDAw +DAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcN +AQEFBQADggEBAEuk1TKmupri2yltqq5m2dDSN9YxlKlu4b4ud3G24mHCmoI9jZMswMq5lUDZtX4a +AW2MG7Dn00uBQnMMvgPlfrSwty2T/ZbbNhOslZv6sxd09+r7M6kPJelP8vMrn04mP3Weddaq1O2o +O8KDN/+hM6kzTWqDt4pfljAvkXCCudj1QZeir+Gs9PHX+CmoPUFfZS22QmaDKVfKSx+YPILkpx3q +rMlOIBt9NAj2gHJHyYA60FwfYPZETv5dQxRKIdNHx5ArhvnR4kVDXGG2zDa+IayKm0zQqp4im+Jk +QqoUR0yhpU+qa8GeskTe3L+62F6vto+pRqEcMqx6ZQCknjB/x/o= + + +MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRowGAYDVQQKDBFUaXplbiBBc3NvY2lh +dGlvbjEaMBgGA1UECwwRVGl6ZW4gQXNzb2NpYXRpb24xHjAcBgNVBAMMFVRpemVuIERldmVsb3Bl +cnMgUm9vdDAeFw0xMjAxMDEwMDAwMDBaFw0yNzAxMDEwMDAwMDBaMFYxGjAYBgNVBAoMEVRpemVu +IEFzc29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4g +RGV2ZWxvcGVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVGhRGmMIUyBA7o +PCz8Sxut6z6HNkF4oDIuzuKaMzRYPeWodwe9O0gmqAkToQHfwg2giRhE5GoPld0fq+OYMMwSasCu +g8dwODx1eDeSYVuOLWRxpAmbTXOsSFi6VoWeyaPEm18JBHvZBsU5YQtgZ6Kp7MqzvQg3pXOxtajj +vyHxiatJl+xXrHgcXC1wgyG3buty7u/Fi2mvKXJ0PRJcCjjK81dqe/Vr20sRUCrbk02zbm5ggFt/ +jIEhV8wbFRQpliobc7J4dSTKhFfrqGM8rdd54LYhD7gSI1CFSe16pUXfcVR7FhJztRaiGLnCrwBE +dyTZ248+D4L/qR/D0axb3jcCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC +AQEAnOXXQ/1O/QTDHyrmQDtFziqPY3xWlJBqJtEqXiT7Y+Ljpe66e+Ee/OjQMlZe8gu21/8cKklH +95RxjopMWCVedXDUbWdvS2+CdyvVW/quT2E0tjqIzXDekUTYwwhlPWlGxvfj3VsxqSFq3p8Brl04 +1Gx5RKAGyKVsMfTLhbbwSWwApuBUxYfcNpKwLWGPXkysu+HctY03OKv4/xKBnVWiN8ex/Sgesi0M ++OBAOMdZMPK32uJBTeKFx1xZgTLIhk45V0hPOomPjZloiv0LSS11eyd451ufjW0iHRE7WlpR6EvI +W6TFyZgMpQq+kg4hWl2SBTf3s2VI8Ygz7gj8TMlClg== + + + + + \ No newline at end of file diff --git a/coretbt_dataprovider/.sign/signature1.xml b/coretbt_dataprovider/.sign/signature1.xml new file mode 100644 index 0000000..17e971f --- /dev/null +++ b/coretbt_dataprovider/.sign/signature1.xml @@ -0,0 +1,68 @@ + + + + + + +nLV1df2q6Al5m31Qgj0L9vnJ3aLSHfWDj40FUTYOcOE= + + + +vIllCCVSZDIpWPdMGfSLmIy2y7m9Uuh68KRAKYUHjbM= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + +vwsNMQ1h1rUhDZc4X0DTIc7h8Pp6+mg1pAGx7G68dMY= + + + + + + +u/jU3U4Zm5ihTMSjKGlGYbWzDfRkGphPPHx3gJIYEJ4= + + + +TLqX/xZwEbwtKVvNoKlyp1/h7iTteaQ4tvoekEyFHrob+Rp1T9BooJvMu6tJW/C9jj/ROlrNSk8R +GSkIcGrOcxlYlbCWH3gKusgyc+ezblyCxz4aoeb1Z4lFhhXHulaiagu/ixBv9+1e28TUVG0xEtwB +/BG+XsCDTPlUWObzYfc= + + + + +MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV +BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE +CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry +aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS +MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex +IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp +YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK +90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H +mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB +hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez +GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1 +vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc= + + +MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO +MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw +IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj +IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL +MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6 +ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb +VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe +OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp +bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah +2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ +KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+ +yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0 +VhfnkHwPltmrpYVe + + + + + \ No newline at end of file diff --git a/coretbt_dataprovider/.tproject b/coretbt_dataprovider/.tproject new file mode 100644 index 0000000..d7a6d5b --- /dev/null +++ b/coretbt_dataprovider/.tproject @@ -0,0 +1,11 @@ + + + + + wearable-2.3.1 + + + + + + diff --git a/coretbt_dataprovider/Debug/makefile b/coretbt_dataprovider/Debug/makefile new file mode 100644 index 0000000..ae9af92 --- /dev/null +++ b/coretbt_dataprovider/Debug/makefile @@ -0,0 +1,61 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +-include ../makefile.init + +RM := rm -rf + +# All of the sources participating in the build are defined here +-include sources.mk +-include src/subdir.mk +-include subdir.mk +-include objects.mk +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(C++_DEPS)),) +-include $(C++_DEPS) +endif +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +ifneq ($(strip $(CC_DEPS)),) +-include $(CC_DEPS) +endif +ifneq ($(strip $(CPP_DEPS)),) +-include $(CPP_DEPS) +endif +ifneq ($(strip $(CXX_DEPS)),) +-include $(CXX_DEPS) +endif +ifneq ($(strip $(C_UPPER_DEPS)),) +-include $(C_UPPER_DEPS) +endif +endif + +-include ../makefile.defs +-include makefile.sa + +# Add inputs and outputs from these tool invocations to the build variables + +# All Target +all: coretbt_dataprovider secondary-outputs + +# Tool invocations +coretbt_dataprovider: $(OBJS) $(USER_OBJS) + @echo 'Building target: $@' + @echo 'Invoking: C++ Linker' + $(CXX) -o"coretbt_dataprovider" $(OBJS) $(USER_OBJS) $(LIBS) -L"$(PROJ_PATH)/lib" $(TC_LINKER_MISC) $(RS_LINKER_MISC) -pie -lpthread -Xlinker -rpath="/home/developer/sdk_tools/lib" --sysroot="$(SBI_SYSROOT)" -Xlinker --version-script="$(PROJ_PATH)/.exportMap" -L"$(SBI_SYSROOT)/usr/lib" $(RS_LIBRARIES) -Xlinker -rpath="/opt/usr/apps/$(APPID)/lib" -Werror-implicit-function-declaration + @echo 'Finished building target: $@' + @echo ' ' + +# Other Targets +clean: sa_clean + -$(RM) $(MO_FILES)$(OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(AST)$(FNMAP)$(EDJ_FILES)$(CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS) coretbt_dataprovider + -@echo ' ' + +secondary-outputs: $(MO_FILES) $(EDJ_FILES) + +.PHONY: all clean dependents +.SECONDARY: + +-include ../makefile.targets diff --git a/coretbt_dataprovider/Debug/makefile.sa b/coretbt_dataprovider/Debug/makefile.sa new file mode 100644 index 0000000..e39928c --- /dev/null +++ b/coretbt_dataprovider/Debug/makefile.sa @@ -0,0 +1,64 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +SA_C_OPTIONS := -I"pch" -D_DEBUG -I"/home/tizen-2_3_1/workspace_wearable/coretbt_dataprovider/inc" -O0 -g3 -Wall -c -fmessage-length=0 $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIE --sysroot="$(SBI_SYSROOT)" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/libxml2" -I"/home/tizen-2_3_1/tizen-sdk/library" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appcore-agent" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appcore-watch" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/badge" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/base" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/cairo" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ckm" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/content" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/context-manager" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/device" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dlog" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/e_dbus-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/edje-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eet-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efl-extension" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eio-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/embryo-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ethumb-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/evas-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ewebkit2-0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/fontconfig" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/freetype2" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/gio-unix-2.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/glib-2.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/json-glib-1.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/json-glib-1.0/json-glib" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/location" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/media" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/media-content" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/messaging" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/minizip" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/network" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/notification" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/sensor" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/storage" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/system" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/telephony" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ui" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/widget_service" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/widget_viewer_evas" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/lib/dbus-1.0/include" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/lib/glib-2.0/include" -Werror-implicit-function-declaration +SA_CPP_OPTIONS := -I"pch" -D_DEBUG -I"/home/tizen-2_3_1/workspace_wearable/coretbt_dataprovider/inc" -O0 -g3 -Wall -c -fmessage-length=0 -target i386-tizen-linux-gnueabi -gcc-toolchain /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../i386-linux-gnueabi-gcc-4.6/ -ccc-gcc-name i386-linux-gnueabi-g++ -march=i386 -Wno-gnu -fPIE --sysroot="/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/libxml2" -I"/home/tizen-2_3_1/tizen-sdk/library" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appcore-agent" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appcore-watch" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/badge" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/base" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/cairo" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ckm" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/content" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/context-manager" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/device" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dlog" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/e_dbus-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/edje-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eet-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efl-extension" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eio-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/embryo-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ethumb-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/evas-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ewebkit2-0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/fontconfig" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/freetype2" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/gio-unix-2.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/glib-2.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/json-glib-1.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/json-glib-1.0/json-glib" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/location" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/media" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/media-content" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/messaging" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/minizip" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/network" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/notification" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/sensor" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/storage" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/system" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/telephony" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ui" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/widget_service" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/widget_viewer_evas" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/lib/dbus-1.0/include" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/lib/glib-2.0/include" + +REL_C_SRCS = $(filter-out $(wildcard ../*),$(wildcard $(C_SRCS))) +REL_CC_SRCS = $(filter-out $(wildcard ../*),$(wildcard $(CC_SRCS))) +REL_CPP_SRCS = $(filter-out $(wildcard ../*),$(wildcard $(CPP_SRCS))) + +C_AST := $(REL_C_SRCS:../%=%.ast) +C_FN := $(REL_C_SRCS:../%=%.fn) +C_SA := $(REL_C_SRCS:../%=%.sa) + +CPP_AST := $(REL_CC_SRCS:../%=%.ast) $(REL_CPP_SRCS:../%=%.ast) +CPP_FN := $(REL_CC_SRCS:..%=%.fn) $(REL_CPP_SRCS:../%=%.fn) +CPP_SA := $(REL_CC_SRCS:..%=%.sa) $(REL_CPP_SRCS:../%=%.sa) + +CHECKERS=alpha.cplusplus.NewDeleteLeaks,alpha.unix.cstring,alpha.security.ArrayBoundV2,resourceLeak,core,unix,tizen + +$(C_AST): %.ast : ../% + clang -emit-ast -o $@ $< $(SA_C_OPTIONS) + -@echo 'Finished building: $@' + -@echo ' ' + +$(C_FN): %.fn : %.ast + $(RM) $@ + clangFnMapGen -o $@ -ast $< $< -- + -@echo 'Finished generating: $@' + -@echo ' ' + +$(C_SA): %: pre_sa + clang --analyze $(@:%.sa=../%) -Xclang -analyzer-output=$(SA_REPORT_TYPE) -Xclang -analyzer-checker=$(CHECKERS) -Xclang -analyzer-purge=block -o $(SA_REPORT_PATH) $(SA_C_OPTIONS) + -@echo 'Finished Analyzing: $(@:%.sa=../%)' + -@echo ' ' + +$(CPP_AST): %.ast : ../% + clang++ -emit-ast -o $@ $< $(SA_CPP_OPTIONS) + -@echo 'Finished building: $@' + -@echo ' ' + +$(CPP_FN): %.fn : %.ast + $(RM) $@ + clangFnMapGen -o $@ -ast $< $< -- + -@echo 'Finished generating: $@' + -@echo ' ' + +$(CPP_SA): %: pre_sa + clang++ --analyze $(@:%.sa=../%) -Xclang -analyzer-output=$(SA_REPORT_TYPE) -Xclang -analyzer-checker=$(CHECKERS) -Xclang -analyzer-purge=block -o $(SA_REPORT_PATH) $(SA_CPP_OPTIONS) + -@echo 'Finished Analyzing: $(@:%.sa=../%)' + -@echo ' ' + +sa_clean: + $(RM) $(C_AST) $(C_FN) $(CPP_AST) $(CPP_FN) $(wildcard $(SA_REPORT_PATH)/*) + -@echo ' ' + +pre_sa: $(C_AST) $(C_FN) $(CPP_AST) $(CPP_FN) + -$(RM) $(wildcard $(SA_REPORT_PATH)/*) + cat $(C_FN) $(CPP_FN) > $(SA_REPORT_PATH)/externalFnMap.txt + +sa: $(C_SA) $(CPP_SA) + +.PHONY: sa pre_sa sa_clean $(C_SA) $(CPP_SA) diff --git a/coretbt_dataprovider/Debug/objects.mk b/coretbt_dataprovider/Debug/objects.mk new file mode 100644 index 0000000..742c2da --- /dev/null +++ b/coretbt_dataprovider/Debug/objects.mk @@ -0,0 +1,8 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +USER_OBJS := + +LIBS := + diff --git a/coretbt_dataprovider/Debug/org.tizen.coretbt_dataprovider-1.0.0-i386.tpk b/coretbt_dataprovider/Debug/org.tizen.coretbt_dataprovider-1.0.0-i386.tpk new file mode 100644 index 0000000..612944c Binary files /dev/null and b/coretbt_dataprovider/Debug/org.tizen.coretbt_dataprovider-1.0.0-i386.tpk differ diff --git a/coretbt_dataprovider/Debug/sources.mk b/coretbt_dataprovider/Debug/sources.mk new file mode 100644 index 0000000..f0df3ca --- /dev/null +++ b/coretbt_dataprovider/Debug/sources.mk @@ -0,0 +1,33 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +O_SRCS := +PO_SRCS := +CPP_SRCS := +C_UPPER_SRCS := +C_SRCS := +S_UPPER_SRCS := +OBJ_SRCS := +EDC_SRCS := +ASM_SRCS := +CXX_SRCS := +C++_SRCS := +CC_SRCS := +MO_FILES := +OBJS := +C++_DEPS := +C_DEPS := +CC_DEPS := +AST := +FNMAP := +EDJ_FILES := +CPP_DEPS := +EXECUTABLES := +CXX_DEPS := +C_UPPER_DEPS := + +# Every subdirectory with source files must be described here +SUBDIRS := \ +src \ + diff --git a/coretbt_dataprovider/Debug/src/coretbt_dataprovider.d b/coretbt_dataprovider/Debug/src/coretbt_dataprovider.d new file mode 100644 index 0000000..7e969d7 --- /dev/null +++ b/coretbt_dataprovider/Debug/src/coretbt_dataprovider.d @@ -0,0 +1,643 @@ +src/coretbt_dataprovider.d: ../src/coretbt_dataprovider.c \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appcore-agent/service_app.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/app_control.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/app_common.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/app_types.h \ + /home/tizen-2_3_1/workspace_wearable/coretbt_dataprovider/inc/coretbt_dataprovider.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/app.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/app_i18n.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/Elementary.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/Eina.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina_config.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_types.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_main.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_fp.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_f32p32.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_f16p16.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_f8p24.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_fp.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_rectangle.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_rectangle.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_clist.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_clist.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inlist.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_iterator.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_magic.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_error.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_accessor.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_file.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_array.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_array.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_list.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_list.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_hash.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_hash.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_trash.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_trash.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_lalloc.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_module.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_mempool.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_mempool.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_log.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_log.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inarray.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_binshare.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_stringshare.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_stringshare.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_ustringshare.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_unicode.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_ustringshare.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_counter.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_rbtree.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_rbtree.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_benchmark.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_convert.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_cpu.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_sched.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_tiler.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_tiler.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_safety_checks.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_hamster.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_matrixsparse.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_str.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_str.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_strbuf.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_binbuf.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_ustrbuf.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_quadtree.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_simple_xml_parser.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_lock.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_lock_posix.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_prefix.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_refcount.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_mmap.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_xattr.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_value.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_value.x \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_tmpstr.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eet-1/Eet.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/evas-1/Evas.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/evas-1/Evas_GL.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore_Evas.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore_Getopt.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore_Input.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore_File.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore_IMF.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore_Con.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/edje-1/Edje.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/e_dbus-1/E_DBus.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/lib/dbus-1.0/include/dbus/dbus-arch-deps.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-macros.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-address.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-types.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-errors.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-protocol.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-bus.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-connection.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-memory.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-message.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-shared.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-misc.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-pending-call.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-server.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-signature.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-syntax.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-threads.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/Efreet.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_base.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_ini.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_icon.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_desktop.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_menu.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_utils.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_uri.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/Efreet_Mime.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ethumb-1/Ethumb_Client.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ethumb-1/Ethumb.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_intro.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_getting_started.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_authors.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_general.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_tooltip.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_object_item.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_access.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_icon.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_scroller.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_entry.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_list.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_ctxpopup.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_dayselector.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_fileselector_button.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_fileselector_entry.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_fileselector.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_hoversel.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_multibuttonentry.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_naviframe.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_popup.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_actionslider.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_app.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_bg.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_box.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_bubble.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_button.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_cache.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_calendar.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_check.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_clock.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_cnp.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_colorselector.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_config.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_conform.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_cursor.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_datetime.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_debug.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_diskselector.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_finger.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_flip.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_flipselector.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_focus.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_font.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_frame.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_gen.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_gengrid.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_genlist.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_gesture_layer.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_glview.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_grid.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_hover.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_image.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_index.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_inwin.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_label.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_layout.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_macros.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_map.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_mapbuf.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_menu.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_mirroring.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_need.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_notify.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_object.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_panel.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_panes.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_photocam.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_photo.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_plug.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_progressbar.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_radio.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_route.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_scale.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_scroll.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_segment_control.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_separator.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_slider.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_slideshow.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_spinner.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_store.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_table.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_theme.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_thumb.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_toolbar.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_transit.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_video.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_web.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_win.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_deprecated.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/data_control.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/data_control_sql.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/data_control_types.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/data_control_sql_cursor.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/data_control_map.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/data_control_provider.h \ + /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dlog/dlog.h \ + /home/tizen-2_3_1/workspace_wearable/coretbt_dataprovider/inc/logger.h + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appcore-agent/service_app.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/app_control.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/app_common.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/app_types.h: + +/home/tizen-2_3_1/workspace_wearable/coretbt_dataprovider/inc/coretbt_dataprovider.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/app.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/app_i18n.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/Elementary.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/Eina.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina_config.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_types.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_main.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_fp.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_f32p32.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_f16p16.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_f8p24.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_fp.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_rectangle.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_rectangle.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_clist.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_clist.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inlist.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_iterator.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_magic.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_error.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_accessor.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_file.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_array.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_array.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_list.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_list.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_hash.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_hash.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_trash.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_trash.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_lalloc.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_module.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_mempool.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_mempool.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_log.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_log.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inarray.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_binshare.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_stringshare.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_stringshare.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_ustringshare.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_unicode.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_ustringshare.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_counter.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_rbtree.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_rbtree.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_benchmark.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_convert.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_cpu.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_sched.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_tiler.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_tiler.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_safety_checks.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_hamster.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_matrixsparse.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_str.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_str.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_strbuf.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_binbuf.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_ustrbuf.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_quadtree.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_simple_xml_parser.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_lock.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_lock_posix.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_prefix.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_refcount.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_mmap.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_xattr.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_value.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_inline_value.x: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eina-1/eina/eina_tmpstr.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/eet-1/Eet.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/evas-1/Evas.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/evas-1/Evas_GL.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore_Evas.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore_Getopt.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore_Input.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore_File.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore_IMF.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ecore-1/Ecore_Con.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/edje-1/Edje.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/e_dbus-1/E_DBus.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/lib/dbus-1.0/include/dbus/dbus-arch-deps.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-macros.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-address.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-types.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-errors.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-protocol.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-bus.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-connection.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-memory.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-message.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-shared.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-misc.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-pending-call.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-server.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-signature.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-syntax.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dbus-1.0/dbus/dbus-threads.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/Efreet.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_base.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_ini.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_icon.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_desktop.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_menu.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_utils.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/efreet_uri.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/efreet-1/Efreet_Mime.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ethumb-1/Ethumb_Client.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/ethumb-1/Ethumb.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_intro.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_getting_started.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_authors.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_general.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_tooltip.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_object_item.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_access.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_icon.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_scroller.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_entry.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_list.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_ctxpopup.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_dayselector.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_fileselector_button.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_fileselector_entry.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_fileselector.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_hoversel.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_multibuttonentry.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_naviframe.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elc_popup.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_actionslider.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_app.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_bg.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_box.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_bubble.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_button.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_cache.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_calendar.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_check.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_clock.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_cnp.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_colorselector.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_config.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_conform.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_cursor.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_datetime.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_debug.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_diskselector.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_finger.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_flip.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_flipselector.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_focus.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_font.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_frame.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_gen.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_gengrid.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_genlist.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_gesture_layer.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_glview.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_grid.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_hover.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_image.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_index.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_inwin.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_label.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_layout.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_macros.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_map.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_mapbuf.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_menu.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_mirroring.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_need.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_notify.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_object.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_panel.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_panes.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_photocam.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_photo.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_plug.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_progressbar.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_radio.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_route.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_scale.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_scroll.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_segment_control.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_separator.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_slider.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_slideshow.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_spinner.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_store.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_table.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_theme.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_thumb.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_toolbar.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_transit.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_video.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_web.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_win.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/elementary-1/elm_deprecated.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/data_control.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/data_control_sql.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/data_control_types.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/data_control_sql_cursor.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/data_control_map.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/appfw/data_control_provider.h: + +/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/include/dlog/dlog.h: + +/home/tizen-2_3_1/workspace_wearable/coretbt_dataprovider/inc/logger.h: diff --git a/coretbt_dataprovider/Debug/src/subdir.mk b/coretbt_dataprovider/Debug/src/subdir.mk new file mode 100644 index 0000000..0e69669 --- /dev/null +++ b/coretbt_dataprovider/Debug/src/subdir.mk @@ -0,0 +1,24 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../src/coretbt_dataprovider.c + +OBJS += \ +./src/coretbt_dataprovider.o + +C_DEPS += \ +./src/coretbt_dataprovider.d + + +# Each subdirectory must supply rules for building sources it contributes +src/%.o: ../src/%.c + @echo 'Building file: $<' + @echo 'Invoking: C Compiler' + $(CC) -I"pch" -D_DEBUG -I"$(PROJ_PATH)/inc" -O0 -g3 -Wall -c -fmessage-length=0 $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIE --sysroot="$(SBI_SYSROOT)" -I"$(SBI_SYSROOT)/usr/include/libxml2" -I"$(SDK_PATH)/library" -I"$(SBI_SYSROOT)/usr/include" -I"$(SBI_SYSROOT)/usr/include/appcore-agent" -I"$(SBI_SYSROOT)/usr/include/appcore-watch" -I"$(SBI_SYSROOT)/usr/include/appfw" -I"$(SBI_SYSROOT)/usr/include/badge" -I"$(SBI_SYSROOT)/usr/include/base" -I"$(SBI_SYSROOT)/usr/include/cairo" -I"$(SBI_SYSROOT)/usr/include/ckm" -I"$(SBI_SYSROOT)/usr/include/content" -I"$(SBI_SYSROOT)/usr/include/context-manager" -I"$(SBI_SYSROOT)/usr/include/dbus-1.0" -I"$(SBI_SYSROOT)/usr/include/device" -I"$(SBI_SYSROOT)/usr/include/dlog" -I"$(SBI_SYSROOT)/usr/include/ecore-1" -I"$(SBI_SYSROOT)/usr/include/e_dbus-1" -I"$(SBI_SYSROOT)/usr/include/edje-1" -I"$(SBI_SYSROOT)/usr/include/eet-1" -I"$(SBI_SYSROOT)/usr/include/efl-extension" -I"$(SBI_SYSROOT)/usr/include/efreet-1" -I"$(SBI_SYSROOT)/usr/include/eina-1" -I"$(SBI_SYSROOT)/usr/include/eina-1/eina" -I"$(SBI_SYSROOT)/usr/include/eio-1" -I"$(SBI_SYSROOT)/usr/include/elementary-1" -I"$(SBI_SYSROOT)/usr/include/embryo-1" -I"$(SBI_SYSROOT)/usr/include/ethumb-1" -I"$(SBI_SYSROOT)/usr/include/evas-1" -I"$(SBI_SYSROOT)/usr/include/ewebkit2-0" -I"$(SBI_SYSROOT)/usr/include/fontconfig" -I"$(SBI_SYSROOT)/usr/include/freetype2" -I"$(SBI_SYSROOT)/usr/include/gio-unix-2.0" -I"$(SBI_SYSROOT)/usr/include/glib-2.0" -I"$(SBI_SYSROOT)/usr/include/json-glib-1.0" -I"$(SBI_SYSROOT)/usr/include/json-glib-1.0/json-glib" -I"$(SBI_SYSROOT)/usr/include/location" -I"$(SBI_SYSROOT)/usr/include/media" -I"$(SBI_SYSROOT)/usr/include/media-content" -I"$(SBI_SYSROOT)/usr/include/messaging" -I"$(SBI_SYSROOT)/usr/include/minizip" -I"$(SBI_SYSROOT)/usr/include/network" -I"$(SBI_SYSROOT)/usr/include/notification" -I"$(SBI_SYSROOT)/usr/include/sensor" -I"$(SBI_SYSROOT)/usr/include/storage" -I"$(SBI_SYSROOT)/usr/include/system" -I"$(SBI_SYSROOT)/usr/include/telephony" -I"$(SBI_SYSROOT)/usr/include/ui" -I"$(SBI_SYSROOT)/usr/include/widget_service" -I"$(SBI_SYSROOT)/usr/include/widget_viewer_evas" -I"$(SBI_SYSROOT)/usr/lib/dbus-1.0/include" -I"$(SBI_SYSROOT)/usr/lib/glib-2.0/include" -Werror-implicit-function-declaration -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/coretbt_dataprovider/inc/coretbt_dataprovider.h b/coretbt_dataprovider/inc/coretbt_dataprovider.h new file mode 100644 index 0000000..b9ebb1f --- /dev/null +++ b/coretbt_dataprovider/inc/coretbt_dataprovider.h @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + + +/** + * @file coretbt_dataprovider.h + * @brief service app to handle data provider request + * creates database, receives request to manipulate database as per request and sends response of successfully accomplished tasks + * @since_tizen 2.3 + * @author golam kayes(g.kayes@samsung.com), salman rahman(salman.ran) and sheikh jakir hossain(sk.jakir) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + * */ +#ifndef __coretbt_dataprovider_H__ +#define TIZEN_DEBUG_ENABLE 1 + +#include +#include +#include +#include +#include + +#include "logger.h" + +#define DB_PATH "opt/usr/apps/org.tizen.coretbt_dataprovider/data/dataprovider.db" +#define PROVIDER_ID "http://coretbt_dataprovider.com/datacontrol/provider/coretbt_dataprovider" +#define DATA_ID "provider" + +static data_control_provider_sql_cb sql_callback; +static data_control_provider_map_cb map_provider_callback; +sqlite3 *db; +bundle *MapRepository; + +void Initialize_datacontrol_provider(); +void initialize_map_data_control_provider(); + + +#endif /* __coretbt_dataprovider_H__ */ diff --git a/coretbt_dataprovider/inc/logger.h b/coretbt_dataprovider/inc/logger.h new file mode 100644 index 0000000..2d92688 --- /dev/null +++ b/coretbt_dataprovider/inc/logger.h @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file logger.h + * @brief This file provide necessary macro for logging information. + * @since_tizen 2.3 + * @author Amlan Chowdhury (amlan.c@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ + +#ifndef __LOGGER_H__ +#define __LOGGER_H__ + +#include + +#define LOG_TAG_CORE "[coretbt_dataprovider]_" + +#define DLOG(prio, fmt, arg...) dlog_print(prio, LOG_TAG_CORE, "%s (Line: %d) > " fmt, __func__, __LINE__, ##arg) +#define DBG(fmt, arg...) DLOG(DLOG_DEBUG, fmt, ##arg) +#define ERR(fmt, arg...) DLOG(DLOG_ERROR, fmt, ##arg) + +#define RETM_IF(expr, fmt, arg...) \ +{ \ + if (expr) \ + { \ + ERR(fmt, ##arg); \ + return; \ + } \ +} + +#define RETVM_IF(expr, val, fmt, arg...) \ +{ \ + if (expr) \ + { \ + ERR(fmt, ##arg); \ + return (val); \ + } \ +} + +#define SAFE_DELETE(a) if( (a) != NULL ) free (a); (a) = NULL; + +#endif /* __LOGGER_H__ */ diff --git a/coretbt_dataprovider/project_def.prop b/coretbt_dataprovider/project_def.prop new file mode 100644 index 0000000..dd23d3a --- /dev/null +++ b/coretbt_dataprovider/project_def.prop @@ -0,0 +1,11 @@ +APPNAME = coretbt_dataprovider + +type = app +profile = wearable-2.3.1 + +USER_SRCS = src/coretbt_dataprovider.c +USER_DEFS = +USER_INC_DIRS = inc +USER_OBJS = +USER_LIBS = +USER_EDCS = diff --git a/coretbt_dataprovider/shared/res/coretbt_dataprovider.png b/coretbt_dataprovider/shared/res/coretbt_dataprovider.png new file mode 100644 index 0000000..9765b1b Binary files /dev/null and b/coretbt_dataprovider/shared/res/coretbt_dataprovider.png differ diff --git a/coretbt_dataprovider/src/coretbt_dataprovider.c b/coretbt_dataprovider/src/coretbt_dataprovider.c new file mode 100644 index 0000000..7631e26 --- /dev/null +++ b/coretbt_dataprovider/src/coretbt_dataprovider.c @@ -0,0 +1,678 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + + +/** + * @file coretbt_dataprovider.c + * @brief service app to handle data provider request + * creates database, receives request to manipulate database as per request and sends response of successfully accomplished tasks + * + * @author golam kayes(g.kayes@samsung.com), salman rahman(salman.ran) and sheikh jakir hossain(sk.jakir) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + * */ + +#include +#include +#include "coretbt_dataprovider.h" + + +/** + * @function get_data_control_error + * @since_tizen 2.3 + * @description Get Data Control Error + * @parameter int: Int + * @return static char* + */ +static char* get_data_control_error(int err_code) +{ + char* error = NULL; + switch (err_code) { + case DATA_CONTROL_ERROR_NONE: + error = "DATA_CONTROL_ERROR_NONE"; + break; + case DATA_CONTROL_ERROR_IO_ERROR: + error = "DATA_CONTROL_ERROR_IO_ERROR"; + break; + case DATA_CONTROL_ERROR_OUT_OF_MEMORY: + error = "DATA_CONTROL_ERROR_OUT_OF_MEMORY"; + break; + case DATA_CONTROL_ERROR_INVALID_PARAMETER: + error = "DATA_CONTROL_ERROR_INVALID_PARAMETER"; + break; + case DATA_CONTROL_ERROR_PERMISSION_DENIED: + error = "DATA_CONTROL_ERROR_PERMISSION_DENIED"; + break; + case DATA_CONTROL_ERROR_MAX_EXCEEDED: + error = "DATA_CONTROL_ERROR_MAX_EXCEEDED"; + break; + default: + error = "Unknown Error"; + break; + } + + return error; +} + + +/** + * @function insert_request_cb + * @since_tizen 2.3 + * @description Insert Request Cb + * @parameter int: Int, bundle*: Bundle Pointer + * @return static void + */ +static void insert_request_cb(int request_id, data_control_h provider, bundle *insert_data) +{ + char* pszAppId =NULL; + int nRet = 0; + bool bMatch = false; + DBG("Inside insert request cb"); + + nRet = data_control_provider_get_client_appid(request_id, &pszAppId); + if (nRet != DATA_CONTROL_ERROR_NONE) + { + ERR("data_control_provider_get_client_appid failed with error: %s",get_data_control_error(nRet)); + }else{ + DBG("data_control_provider_get_client_appid Successed"); + } + + DBG("Insert request from Client with App Id: %s" , pszAppId); + + bMatch = data_control_provider_match_provider_id (provider, PROVIDER_ID); + if(!bMatch) + { + ERR("data_control_provider_match_provider_id failed"); + int status = data_control_provider_send_error(request_id,"Provider Id Does not match"); + if(status == DATA_CONTROL_ERROR_NONE){ + DBG("data_control_provider_send_error Successed"); + }else{ + ERR("data_control_provider_send_error failed %s", get_data_control_error(status)); + } + + free(pszAppId); + pszAppId = NULL; + return; + + }else{ + DBG("data_control_provider_match_provider_id Successed"); + } + + bMatch = data_control_provider_match_data_id(provider,DATA_ID ); + + if(!bMatch) + { + ERR("data_control_provider_match_data_id failed"); + int status = data_control_provider_send_error(request_id,"Data Id Does not match"); + ERR("data_control_provider_send_error failed with error : %s", get_data_control_error(status)); + free(pszAppId); + pszAppId = NULL; + return; + + } + + char* command = data_control_provider_create_insert_statement(provider, insert_data); + if(command){ + DBG("command: %s" , command); + }else{ + ERR("data_control_provider_create_insert_statement failed "); + } + int ret = sqlite3_exec(db, command, NULL, NULL, NULL); + + long long inserted_row_id = sqlite3_last_insert_rowid(db); + + ret = data_control_provider_send_insert_result(request_id, inserted_row_id); + if (ret != DATA_CONTROL_ERROR_NONE) + { + ERR("insert_send_result failed with error: %s",get_data_control_error(ret)); + } + + free(command); + free(pszAppId); + pszAppId = NULL; + +} + + +/** + * @function delete_request_cb + * @since_tizen 2.3 + * @description Delete Request Cb + * @parameter int: Int, const char*: Const char Pointer + * @return static void + */ +static void delete_request_cb(int request_id, data_control_h provider, const char *where) +{ + char* pszAppId =NULL; + int nRet = 0; + bool bMatch = false; + DBG("Inside delete request cb"); + + nRet = data_control_provider_get_client_appid(request_id, &pszAppId); + if (nRet != DATA_CONTROL_ERROR_NONE) + { + ERR("data_control_provider_get_client_appid failed with error: %s",get_data_control_error(nRet)); + } + + DBG("Delete request from Client with App Id: %s" , pszAppId); + + bMatch = data_control_provider_match_provider_id (provider, PROVIDER_ID); + if(!bMatch) + { + ERR("data_control_provider_match_provider_id failed"); + int status = data_control_provider_send_error(request_id,"Provider Id Does not match"); + ERR("data_control_provider_send_error failed with error : %s",get_data_control_error(status)); + free(pszAppId); + pszAppId = NULL; + return; + + } + + bMatch = data_control_provider_match_data_id(provider,DATA_ID); + if(!bMatch) + { + ERR("data_control_provider_match_data_id failed"); + int status = data_control_provider_send_error(request_id,"Data Id Does not match"); + ERR("data_control_provider_send_error failed with error : %s",get_data_control_error(status)); + free(pszAppId); + pszAppId = NULL; + return; + + } + + char* command = data_control_provider_create_delete_statement(provider, where); + DBG("command: %s" , command); + if(command){ + DBG("command: %s" , command); + }else{ + ERR("data_control_provider_create_delete_statement failed "); + } + int ret = sqlite3_exec(db, command, NULL, NULL, NULL); + if (ret != SQLITE_OK) + { + ERR("data_control_provider_create_delete_statement failed"); + int status = data_control_provider_send_error(request_id, sqlite3_errmsg(db)); + ERR("data_control_provider_send_error failed with error : %s",get_data_control_error(status)); + free(command); + free(pszAppId); + pszAppId = NULL; + return; + } + + ret = data_control_provider_send_delete_result(request_id); + if (ret != DATA_CONTROL_ERROR_NONE) + { + ERR("delete_send_result failed with error: %s",get_data_control_error(ret)); + } + + free(command); + free(pszAppId); + pszAppId = NULL; + +} + + +/** + * @function select_request_cb + * @since_tizen 2.3 + * @description Select Request Cb + * @parameter int: Int, const char*: Const char Pointer, const char*: Const char Pointer + * @return static void + */ +static void select_request_cb(int request_id, data_control_h provider, const char **column_list, int column_count, const char *where, const char *order) +{ + char* pszAppId =NULL; + int nRet = 0; + bool bMatch = false; + DBG("Inside select request cb"); + + nRet = data_control_provider_get_client_appid(request_id, &pszAppId); + if (nRet != DATA_CONTROL_ERROR_NONE) + { + ERR("data_control_provider_get_client_appid failed with error: %s",get_data_control_error(nRet)); + } + + DBG("Select request from Client with App Id: %s" , pszAppId); + + bMatch = data_control_provider_match_provider_id (provider, PROVIDER_ID); + if(!bMatch) + { + ERR("data_control_provider_match_provider_id failed"); + int status = data_control_provider_send_error(request_id,"Provider Id Does not match"); + ERR("data_control_provider_send_error failed with error : %s",get_data_control_error(status)); + free(pszAppId); + pszAppId = NULL; + return; + + } + + bMatch = data_control_provider_match_data_id(provider,DATA_ID ); + if(!bMatch) + { + ERR("data_control_provider_match_data_id failed"); + int status = data_control_provider_send_error(request_id,"Data Id Does not match"); + ERR("data_control_provider_send_error failed with error : %s",get_data_control_error(status)); + free(pszAppId); + pszAppId = NULL; + return; + + } + sqlite3_stmt* sql_stmt = NULL; + + char* command = data_control_provider_create_select_statement(provider, column_list, column_count, where, order); + if(command) + { + DBG("command: %s" , command); + } + else + { + ERR("data_control_provider_create_select_statement failed"); + return; + } + int ret = sqlite3_prepare_v2(db, command, strlen(command), &sql_stmt, NULL); + if (ret != SQLITE_OK) + { + int status = data_control_provider_send_error(request_id, sqlite3_errmsg(db)); + ERR("data_control_provider_send_error failed with error : %s",get_data_control_error(status)); + free(command); + free(pszAppId); + pszAppId = NULL; + return; + } + + ret = data_control_provider_send_select_result(request_id, (void *)sql_stmt); + if (ret != DATA_CONTROL_ERROR_NONE) + { + ERR("select_send_result failed with error: %s",get_data_control_error(ret)); + } + + sqlite3_finalize(sql_stmt); + free(command); + free(pszAppId); + pszAppId = NULL; +} + + +/** + * @function update_request_cb + * @since_tizen 2.3 + * @description Update Request Cb + * @parameter int: Int, bundle*: Bundle Pointer, const char*: Const char Pointer + * @return static void + */ +static void update_request_cb(int request_id, data_control_h provider, bundle *update_data, const char *where) +{ + char* pszAppId =NULL; + int nRet = 0; + bool bMatch = false; + DBG("Inside update request cb"); + + nRet = data_control_provider_get_client_appid(request_id, &pszAppId); + if (nRet != DATA_CONTROL_ERROR_NONE) + { + ERR("data_control_provider_get_client_appid failed with error: %s",get_data_control_error(nRet)); + } + + DBG("Update request from Client with App Id: %s" , pszAppId); + + bMatch = data_control_provider_match_provider_id (provider, PROVIDER_ID); + if(!bMatch) + { + ERR("data_control_provider_match_provider_id failed"); + int status = data_control_provider_send_error(request_id,"Provider Id Does not match"); + ERR("data_control_provider_send_error failed with error : %s",get_data_control_error(status)); + free(pszAppId); + pszAppId = NULL; + return; + + } + + bMatch = data_control_provider_match_data_id(provider,DATA_ID ); + if(!bMatch) + { + ERR("data_control_provider_match_data_id failed"); + int status = data_control_provider_send_error(request_id,"Data Id Does not match"); + ERR("data_control_provider_send_error failed with error : %s",get_data_control_error(status)); + free(pszAppId); + pszAppId = NULL; + return; + + } + + char* command = data_control_provider_create_update_statement(provider, update_data, where); + if(command){ + DBG("command: %s" , command); + }else{ + ERR("data_control_provider_create_update_statement failed"); + } + int ret = sqlite3_exec(db, command, NULL, NULL, NULL); + if (ret != SQLITE_OK) + { + ERR("sqlite3_exec failed with error : %s",get_data_control_error(ret)); + int status = data_control_provider_send_error(request_id, sqlite3_errmsg(db)); + ERR("data_control_provider_send_error failed with error : %s",get_data_control_error(status)); + free(command); + free(pszAppId); + pszAppId = NULL; + return; + } + + ret = data_control_provider_send_update_result(request_id); + if (ret != DATA_CONTROL_ERROR_NONE) + { + ERR("update_send_result failed with error: %d",ret); + } + + free(command); + free(pszAppId); + pszAppId = NULL; +} + + +/** + * @function get_value_request_cb + * @since_tizen 2.3 + * @description Get Value Request Cb + * @parameter int: Int, const char*: Const char Pointer + * @return void + */ +void get_value_request_cb(int request_id, data_control_h provider, const char *key) +{ + int len = 0; + char message[50]; + memset(message,0,50); + DBG("Inside Get response Lenght od the result: %s",key); + char **str_arr=(char**)bundle_get_str_array(MapRepository,key,&len); + RETM_IF(len < 0,"bundle_get_str_array returns array lenth negative!"); + DBG("Inside Get response Lenght od the result: %d",len); + int i; + for( i = 0 ; iset_cb = set_value_request_cb; + + result = data_control_provider_map_register_cb(&map_provider_callback,NULL); + if (result != DATA_CONTROL_ERROR_NONE) + { + ERR("data_control_provider_map_cb failed with error: %s",get_data_control_error(result)); + } +} + + +/** + * @function service_app_create + * @since_tizen 2.3 + * @description Service App Create + * @parameter void*: Void Pointer + * @return bool + */ +bool service_app_create(void *data) +{ + // Todo: add your code here. + Initialize_datacontrol_provider(); + initialize_map_data_control_provider(); + return true; +} + + +/** + * @function service_app_terminate + * @since_tizen 2.3 + * @description Service App Terminate + * @parameter void*: Void Pointer + * @return void + */ +void service_app_terminate(void *data) +{ + // Todo: add your code here. + bundle_free(MapRepository); + int ret = data_control_provider_sql_unregister_cb(); + ERR("data_control_provider_sql_unregister_cb %s",(ret<0?"failed":"Passed")); + ret = data_control_provider_map_unregister_cb(); + ERR("data_control_provider_map_unregister_cb %s",(ret<0?"failed":"Passed")); + //free(map_provider_callback); + //free(sql_callback); + return; +} + + +/** + * @function service_app_control + * @since_tizen 2.3 + * @description Service App Control + * @parameter app_control_h: App Control H, void*: Void Pointer + * @return void + */ +void service_app_control(app_control_h app_control, void *data) +{ + // Todo: add your code here. + return; +} + + +/** + * @function service_app_lang_changed + * @since_tizen 2.3 + * @description Service App Lang Changed + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void service_app_lang_changed(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_LANGUAGE_CHANGED*/ + return; +} + + +/** + * @function service_app_orient_changed + * @since_tizen 2.3 + * @description Service App Orient Changed + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void service_app_orient_changed(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_DEVICE_ORIENTATION_CHANGED*/ + return; +} + + +/** + * @function service_app_region_changed + * @since_tizen 2.3 + * @description Service App Region Changed + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void service_app_region_changed(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_REGION_FORMAT_CHANGED*/ +} + + +/** + * @function service_app_low_battery + * @since_tizen 2.3 + * @description Service App Low Battery + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void service_app_low_battery(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_LOW_BATTERY*/ +} + + +/** + * @function service_app_low_memory + * @since_tizen 2.3 + * @description Service App Low Memory + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void service_app_low_memory(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_LOW_MEMORY*/ +} + + +/** + * @function main + * @since_tizen 2.3 + * @description Main + * @parameter int: Int, char*: Char Pointer + * @return int + */ +int main(int argc, char* argv[]) +{ + char ad[50] = {0,}; + service_app_lifecycle_callback_s event_callback; + app_event_handler_h handlers[5] = {NULL, }; + + event_callback.create = service_app_create; + event_callback.terminate = service_app_terminate; + event_callback.app_control = service_app_control; + + service_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, service_app_low_battery, &ad); + service_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, service_app_low_memory, &ad); + service_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, service_app_orient_changed, &ad); + service_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, service_app_lang_changed, &ad); + service_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, service_app_region_changed, &ad); + + return service_app_main(argc, argv, &event_callback, ad); +} diff --git a/coretbt_dataprovider/tizen-manifest.xml b/coretbt_dataprovider/tizen-manifest.xml new file mode 100644 index 0000000..56c4dbe --- /dev/null +++ b/coretbt_dataprovider/tizen-manifest.xml @@ -0,0 +1,14 @@ + + + + + + coretbt_dataprovider.png + + + + + http://tizen.org/privilege/datasharing + http://tizen.org/privilege/externalstorage.appdata + + diff --git a/coretbt_serviceapp/.cproject b/coretbt_serviceapp/.cproject new file mode 100644 index 0000000..fa4e503 --- /dev/null +++ b/coretbt_serviceapp/.cproject @@ -0,0 +1,442 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coretbt_serviceapp/.exportMap b/coretbt_serviceapp/.exportMap new file mode 100644 index 0000000..43e310e --- /dev/null +++ b/coretbt_serviceapp/.exportMap @@ -0,0 +1,4 @@ +{ + global: main; + local: *; +}; diff --git a/coretbt_serviceapp/.project b/coretbt_serviceapp/.project new file mode 100644 index 0000000..8da48b4 --- /dev/null +++ b/coretbt_serviceapp/.project @@ -0,0 +1,37 @@ + + + coretbt_serviceapp + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + 1433417116298 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-projectRelativePath-matches-false-false-*/.tpk + + + + diff --git a/coretbt_serviceapp/.tproject b/coretbt_serviceapp/.tproject new file mode 100644 index 0000000..d7a6d5b --- /dev/null +++ b/coretbt_serviceapp/.tproject @@ -0,0 +1,11 @@ + + + + + wearable-2.3.1 + + + + + + diff --git a/coretbt_serviceapp/inc/coretbt_serviceapp.h b/coretbt_serviceapp/inc/coretbt_serviceapp.h new file mode 100644 index 0000000..b8720b6 --- /dev/null +++ b/coretbt_serviceapp/inc/coretbt_serviceapp.h @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file coretbt_serviceapp.h + * @brief service app that will be used by TBT for view/pick operation + * @since_tizen 2.3 + * @author golam kayes(g.kayes@samsung.com), salman rahman(salman.ran) and sheikh jakir hossain(sk.jakir) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + * */ +#ifndef __coretbt_serviceapp_H__ + + +#ifndef TIZEN_DEBUG_ENABLE +#define TIZEN_DEBUG_ENABLE +#endif + + +#include "logger.h" + + +#endif /* __coretbt_serviceapp_H__ */ diff --git a/coretbt_serviceapp/inc/logger.h b/coretbt_serviceapp/inc/logger.h new file mode 100644 index 0000000..93e6a02 --- /dev/null +++ b/coretbt_serviceapp/inc/logger.h @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file logger.h + * @brief This file provide necessary macro for logging information. + * @since_tizen 2.3 + * @author Amlan Chowdhury (amlan.c@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ +#ifndef __LOGGER_H__ +#define __LOGGER_H__ + +#include + +#define LOG_TAG_CORE "[coretbt_serviceapp]_" + +#define DLOG(prio, fmt, arg...) dlog_print(prio, LOG_TAG_CORE, "%s (Line: %d) > " fmt, __func__, __LINE__, ##arg) +#define DBG(fmt, arg...) DLOG(DLOG_DEBUG, fmt, ##arg) +#define ERR(fmt, arg...) DLOG(DLOG_ERROR, fmt, ##arg) + +#define RETM_IF(expr, fmt, arg...) \ +{ \ + if (expr) \ + { \ + ERR(fmt, ##arg); \ + return; \ + } \ +} + +#define RETVM_IF(expr, val, fmt, arg...) \ +{ \ + if (expr) \ + { \ + ERR(fmt, ##arg); \ + return (val); \ + } \ +} + +#define SAFE_DELETE(a) if( (a) != NULL ) free (a); (a) = NULL; + +#endif /* __LOGGER_H__ */ diff --git a/coretbt_serviceapp/project_def.prop b/coretbt_serviceapp/project_def.prop new file mode 100644 index 0000000..6794026 --- /dev/null +++ b/coretbt_serviceapp/project_def.prop @@ -0,0 +1,11 @@ +APPNAME = coretbt_serviceapp + +type = app +profile = wearable-2.3.1 + +USER_SRCS = src/coretbt_serviceapp.c +USER_DEFS = +USER_INC_DIRS = inc +USER_OBJS = +USER_LIBS = +USER_EDCS = diff --git a/coretbt_serviceapp/shared/res/coretbt_serviceapp.png b/coretbt_serviceapp/shared/res/coretbt_serviceapp.png new file mode 100644 index 0000000..9765b1b Binary files /dev/null and b/coretbt_serviceapp/shared/res/coretbt_serviceapp.png differ diff --git a/coretbt_serviceapp/src/coretbt_serviceapp.c b/coretbt_serviceapp/src/coretbt_serviceapp.c new file mode 100644 index 0000000..44f9c53 --- /dev/null +++ b/coretbt_serviceapp/src/coretbt_serviceapp.c @@ -0,0 +1,259 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +#include +#include +#include "coretbt_serviceapp.h" + + +/** + * @function service_app_create + * @since_tizen 2.3 + * @description Service App Create + * @parameter void*: Void Pointer + * @return bool + */ +bool service_app_create(void *data) +{ + // Todo: add your code here. + DBG("Service app creating..."); + return true; +} + + +/** + * @function service_app_terminate + * @since_tizen 2.3 + * @description Service App Terminate + * @parameter void*: Void Pointer + * @return void + */ +void service_app_terminate(void *data) +{ + // Todo: add your code here. + DBG("Service app terminating..."); + return; +} + + +/** + * @function get_app_control_error + * @since_tizen 2.3 + * @description Get App Control Error + * @parameter int: Int + * @return char* + */ +char* get_app_control_error(int ret) +{ + char* error = NULL; + switch (ret) { + case APP_CONTROL_ERROR_NONE: + error = "APP_CONTROL_ERROR_NONE"; + break; + case APP_CONTROL_ERROR_INVALID_PARAMETER: + error = "APP_CONTROL_ERROR_INVALID_PARAMETER"; + break; + case APP_CONTROL_ERROR_OUT_OF_MEMORY: + error = "APP_CONTROL_ERROR_OUT_OF_MEMORY"; + break; + case APP_CONTROL_ERROR_APP_NOT_FOUND: + error = "APP_CONTROL_ERROR_APP_NOT_FOUND"; + break; + case APP_CONTROL_ERROR_KEY_NOT_FOUND: + error = "APP_CONTROL_ERROR_KEY_NOT_FOUND"; + break; + case APP_CONTROL_ERROR_KEY_REJECTED: + error = "APP_CONTROL_ERROR_KEY_REJECTED"; + break; + case APP_CONTROL_ERROR_INVALID_DATA_TYPE: + error = "APP_CONTROL_ERROR_INVALID_DATA_TYPE"; + break; + case APP_CONTROL_ERROR_LAUNCH_REJECTED: + error = "APP_CONTROL_ERROR_LAUNCH_REJECTED"; + break; + case APP_CONTROL_ERROR_PERMISSION_DENIED: + error = "APP_CONTROL_ERROR_PERMISSION_DENIED"; + break; + case APP_CONTROL_ERROR_LAUNCH_FAILED: + error = "APP_CONTROL_ERROR_LAUNCH_FAILED"; + break; + case APP_CONTROL_ERROR_TIMED_OUT: + error = "APP_CONTROL_ERROR_TIMED_OUT"; + break; + //case APP_CONTROL_ERROR_IO_ERROR: + //return "APP_CONTROL_ERROR_IO_ERROR"; + default: + error = "Unknown Error"; + break; + } + return error; +} + + +/** + * @function service_app_control + * @since_tizen 2.3 + * @description Service App Control + * @parameter app_control_h: App Control H, void*: Void Pointer + * @return void + */ +void service_app_control(app_control_h control, void *data) +{ + // Todo: add your code here. + int status_1,status_2,status_3; + + + /* Handle the launch request. */ + DBG("app_control"); + + char *category; + status_1 = app_control_get_operation(control,&category); + DBG("app_control_get_operation status=%d Categoty=%s",status_1,category); + RETM_IF(NULL==category, "app_control_get_operation category NULL"); + RETM_IF(status_1 != APP_CONTROL_ERROR_NONE, "app_control_get_operation fails: %s", get_app_control_error(status_1)); + + char *chCaller; + status_3=app_control_get_caller(control,&chCaller); + DBG("app_control_get_caller %d ",status_3); + RETM_IF(NULL==chCaller, "app_control_get_caller chCaller NULL"); + RETM_IF(status_1 != APP_CONTROL_ERROR_NONE, "app_control_get_caller fails: %s", get_app_control_error(status_1)); + + char *chTypeStr; + status_1 = app_control_get_extra_data(control,"type",&chTypeStr); + if(NULL==chTypeStr) + { + DBG("app_control_get_extra_data chTypeStr NULL. app_control_get_extra_data fails: %s", get_app_control_error(status_1)); + } + + bool was_requested; + status_1=app_control_is_reply_requested(control,&was_requested); + RETM_IF(status_1 != APP_CONTROL_ERROR_NONE, "app_control_is_reply_requested fails: %s", get_app_control_error(status_1)); + DBG("app_control_is_reply_requested %d",status_1); + + app_control_h reply; + status_1 = app_control_create (&reply); + DBG("app_control_create=%s",get_app_control_error(status_1)); + + // lets echo back result + status_1 = app_control_add_extra_data ( reply, "from", chCaller); + DBG("app_control_add_extra_data=%s",get_app_control_error(status_1)); + status_1 = app_control_add_extra_data ( reply, "replyRequested", was_requested?"yes":"no"); + DBG("app_control_add_extra_data=%s",get_app_control_error(status_1)); + + //APP_CONTROL_RESULT_SUCCEEDED + app_control_result_e res=APP_CONTROL_RESULT_SUCCEEDED; + status_1 = app_control_reply_to_launch_request(reply,control,res); + DBG("app_control_reply_to_launch_request=%s",get_app_control_error(status_1)); + return; +} + + +/** + * @function service_app_lang_changed + * @since_tizen 2.3 + * @description Service App Lang Changed + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void service_app_lang_changed(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_LANGUAGE_CHANGED*/ + return; +} + + +/** + * @function service_app_orient_changed + * @since_tizen 2.3 + * @description Service App Orient Changed + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void service_app_orient_changed(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_DEVICE_ORIENTATION_CHANGED*/ + return; +} + + +/** + * @function service_app_region_changed + * @since_tizen 2.3 + * @description Service App Region Changed + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void service_app_region_changed(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_REGION_FORMAT_CHANGED*/ +} + + +/** + * @function service_app_low_battery + * @since_tizen 2.3 + * @description Service App Low Battery + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void service_app_low_battery(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_LOW_BATTERY*/ + DBG("Service app running on low battery. app_exiting..."); + service_app_exit(); +} + + +/** + * @function service_app_low_memory + * @since_tizen 2.3 + * @description Service App Low Memory + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void service_app_low_memory(app_event_info_h event_info, void *user_data) +{ + /*APP_EVENT_LOW_MEMORY*/ + service_app_exit(); +} + + +/** + * @function main + * @since_tizen 2.3 + * @description Main + * @parameter int: Int, char*: Char Pointer + * @return int + */ +int main(int argc, char* argv[]) +{ + char ad[50] = {0,}; + service_app_lifecycle_callback_s event_callback; + app_event_handler_h handlers[5] = {NULL, }; + + event_callback.create = service_app_create; + event_callback.terminate = service_app_terminate; + event_callback.app_control = service_app_control; + + service_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, service_app_low_battery, &ad); + service_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, service_app_low_memory, &ad); + service_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, service_app_orient_changed, &ad); + service_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, service_app_lang_changed, &ad); + service_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, service_app_region_changed, &ad); + + return service_app_main(argc, argv, &event_callback, ad); +} diff --git a/coretbt_serviceapp/tizen-manifest.xml b/coretbt_serviceapp/tizen-manifest.xml new file mode 100644 index 0000000..37a2e00 --- /dev/null +++ b/coretbt_serviceapp/tizen-manifest.xml @@ -0,0 +1,8 @@ + + + + + coretbt_serviceapp.png + + + diff --git a/coretbt_uiapp/.cproject b/coretbt_uiapp/.cproject new file mode 100644 index 0000000..086c39d --- /dev/null +++ b/coretbt_uiapp/.cproject @@ -0,0 +1,444 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coretbt_uiapp/.exportMap b/coretbt_uiapp/.exportMap new file mode 100644 index 0000000..43e310e --- /dev/null +++ b/coretbt_uiapp/.exportMap @@ -0,0 +1,4 @@ +{ + global: main; + local: *; +}; diff --git a/coretbt_uiapp/.gitignore b/coretbt_uiapp/.gitignore new file mode 100644 index 0000000..65fa71e --- /dev/null +++ b/coretbt_uiapp/.gitignore @@ -0,0 +1,2 @@ +/Debug +/SA_Report diff --git a/coretbt_uiapp/.package-stamp b/coretbt_uiapp/.package-stamp new file mode 100644 index 0000000..40cbe59 --- /dev/null +++ b/coretbt_uiapp/.package-stamp @@ -0,0 +1 @@ +TPK \ No newline at end of file diff --git a/coretbt_uiapp/.project b/coretbt_uiapp/.project new file mode 100644 index 0000000..5b6326a --- /dev/null +++ b/coretbt_uiapp/.project @@ -0,0 +1,37 @@ + + + coretbt_uiapp + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + 1429866748854 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-projectRelativePath-matches-false-false-*/.tpk + + + + diff --git a/coretbt_uiapp/.rds_delta b/coretbt_uiapp/.rds_delta new file mode 100644 index 0000000..a8584cd --- /dev/null +++ b/coretbt_uiapp/.rds_delta @@ -0,0 +1,10 @@ +#delete +#add +res/edje/wearable_coretbt_uiapp.edj +#modify +author-signature.xml +signature1.xml +bin/coretbt_uiapp +res/edje/coretbt_uiapp.edj +shared/res/coretbt_uiapp.png +tizen-manifest.xml diff --git a/coretbt_uiapp/.sdk_delta.info b/coretbt_uiapp/.sdk_delta.info new file mode 100644 index 0000000..5343003 Binary files /dev/null and b/coretbt_uiapp/.sdk_delta.info differ diff --git a/coretbt_uiapp/.sign/.manifest.tmp b/coretbt_uiapp/.sign/.manifest.tmp new file mode 100644 index 0000000..3260bb3 --- /dev/null +++ b/coretbt_uiapp/.sign/.manifest.tmp @@ -0,0 +1,6 @@ +author-signature.xml__DEL__NSjS/mBw13123b2GQCXephg23gMQ3yDiCZX/3u+9NB8= +bin/coretbt_uiapp__DEL__UWkL+re5rPaUfkz35WGG56QiasFgOmLVsXZRNUu4BiM= +res/edje/coretbt_uiapp.edj__DEL__on3Q3t669LillxxTB8SAwoBOU+Tdg9jaOuKugxytEjk= +res/edje/wearable_coretbt_uiapp.edj__DEL__lVJ0uz21ey6+U0oxpPQtFgZqnQQ4kmB6Sxbw6UVISek= +shared/res/coretbt_uiapp.png__DEL__1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= +tizen-manifest.xml__DEL__4AFqAS6kD3D6SY1W+lTMV0jdG92kE9qDyhCUI/6PA0M= diff --git a/coretbt_uiapp/.sign/author-signature.xml b/coretbt_uiapp/.sign/author-signature.xml new file mode 100644 index 0000000..e5062d3 --- /dev/null +++ b/coretbt_uiapp/.sign/author-signature.xml @@ -0,0 +1,74 @@ + + + + + + +UWkL+re5rPaUfkz35WGG56QiasFgOmLVsXZRNUu4BiM= + + + +on3Q3t669LillxxTB8SAwoBOU+Tdg9jaOuKugxytEjk= + + + +lVJ0uz21ey6+U0oxpPQtFgZqnQQ4kmB6Sxbw6UVISek= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + +4AFqAS6kD3D6SY1W+lTMV0jdG92kE9qDyhCUI/6PA0M= + + + + + + +lpo8tUDs054eLlBQXiDPVDVKfw30ZZdtkRs1jd7H5K8= + + + +PsJHdsGlSCKdfWZSE3xKSUl0+iAz8Ll5rvBfOZ8PnTPVtKi3poWKgSiBWvNkwOQaPZMe5kCRdkHr +h2TfQMbINmAAR8M6HGqr2EPUIz/+6DR9wFiGIr6N/2TC3+rJxll4xO5TDORctYMC0wvZ96BK1jPR +gKD6IBxUySCzp3JZaPA= + + + + +MIIClTCCAX2gAwIBAgIGAU5ODNeJMA0GCSqGSIb3DQEBBQUAMFYxGjAYBgNVBAoMEVRpemVuIEFz +c29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4gRGV2 +ZWxvcGVycyBDQTAeFw0xMjExMDEwMDAwMDBaFw0xOTAxMDEwMDAwMDBaMBExDzANBgNVBAMMBmF1 +dGhvcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzkyjuReYI0aWZDNxPD20fxb4RyZRvGro +KOc0nQ+gRXNw+j0cAQ35K5jDni6j8B586rvLCivj8Egcd3Smpu4QhXZEydZJFWKg5hCZlPqGr0dZ +aKh+j89QqL34rdIfbTJmioCTVa/zXI2Risz3nh8KNJJ8A6C1ZhIdfLGSTxMp0SECAwEAAaMyMDAw +DAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcN +AQEFBQADggEBAEkuGR7cUtIH4j1le0L7oEIhjnB95EMNyppyDKHUd4wMDONN8RD5R4YDDR4uqaY+ +t4fd1H935YkMGr551jfmR0MiDFKkI0eH8ItjBMF4Xklaxi+ObIZFbB62c2E2p4Uxx8XxQUehitCX +oiUsTbQZTq4vZ2ozEkANE+mNWK19gDXWq1jewtycHdVxPktxHUOBccqFSoSyk0q90n8sXL4VlD2i +Mp6+XgMof+04CfkktAtoB+kP++faciVqzS9vfduQ9jBs3SJAQFLHJfQCSXw3p/VqWX7xdQZrFbug +a1XH7cf+T7DI8a99W6M5H4rjpUpl+Pd/D/F+Hs3RyMnQMg8D57k= + + +MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRowGAYDVQQKDBFUaXplbiBBc3NvY2lh +dGlvbjEaMBgGA1UECwwRVGl6ZW4gQXNzb2NpYXRpb24xHjAcBgNVBAMMFVRpemVuIERldmVsb3Bl +cnMgUm9vdDAeFw0xMjAxMDEwMDAwMDBaFw0yNzAxMDEwMDAwMDBaMFYxGjAYBgNVBAoMEVRpemVu +IEFzc29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4g +RGV2ZWxvcGVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVGhRGmMIUyBA7o +PCz8Sxut6z6HNkF4oDIuzuKaMzRYPeWodwe9O0gmqAkToQHfwg2giRhE5GoPld0fq+OYMMwSasCu +g8dwODx1eDeSYVuOLWRxpAmbTXOsSFi6VoWeyaPEm18JBHvZBsU5YQtgZ6Kp7MqzvQg3pXOxtajj +vyHxiatJl+xXrHgcXC1wgyG3buty7u/Fi2mvKXJ0PRJcCjjK81dqe/Vr20sRUCrbk02zbm5ggFt/ +jIEhV8wbFRQpliobc7J4dSTKhFfrqGM8rdd54LYhD7gSI1CFSe16pUXfcVR7FhJztRaiGLnCrwBE +dyTZ248+D4L/qR/D0axb3jcCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC +AQEAnOXXQ/1O/QTDHyrmQDtFziqPY3xWlJBqJtEqXiT7Y+Ljpe66e+Ee/OjQMlZe8gu21/8cKklH +95RxjopMWCVedXDUbWdvS2+CdyvVW/quT2E0tjqIzXDekUTYwwhlPWlGxvfj3VsxqSFq3p8Brl04 +1Gx5RKAGyKVsMfTLhbbwSWwApuBUxYfcNpKwLWGPXkysu+HctY03OKv4/xKBnVWiN8ex/Sgesi0M ++OBAOMdZMPK32uJBTeKFx1xZgTLIhk45V0hPOomPjZloiv0LSS11eyd451ufjW0iHRE7WlpR6EvI +W6TFyZgMpQq+kg4hWl2SBTf3s2VI8Ygz7gj8TMlClg== + + + + + \ No newline at end of file diff --git a/coretbt_uiapp/.sign/signature1.xml b/coretbt_uiapp/.sign/signature1.xml new file mode 100644 index 0000000..5f6a929 --- /dev/null +++ b/coretbt_uiapp/.sign/signature1.xml @@ -0,0 +1,76 @@ + + + + + + +NSjS/mBw13123b2GQCXephg23gMQ3yDiCZX/3u+9NB8= + + + +UWkL+re5rPaUfkz35WGG56QiasFgOmLVsXZRNUu4BiM= + + + +on3Q3t669LillxxTB8SAwoBOU+Tdg9jaOuKugxytEjk= + + + +lVJ0uz21ey6+U0oxpPQtFgZqnQQ4kmB6Sxbw6UVISek= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + +4AFqAS6kD3D6SY1W+lTMV0jdG92kE9qDyhCUI/6PA0M= + + + + + + +u/jU3U4Zm5ihTMSjKGlGYbWzDfRkGphPPHx3gJIYEJ4= + + + +pn5s8jNyb8Ildm1kEdkJU5x18MRcSxB76eM8rLZkzR2yZS1P+TVLUzBnad8YA/Z8G2e5kcu0U/lh +fGVlTetzFGk/p1DIAjYQRBMVS79H8IaFOdtsNKmb0COwz6YdYbadi83W0kKbJO7ZMrt4WhJLNsWM +qVimYfdWAq0oyiS6MIE= + + + + +MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV +BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE +CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry +aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS +MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex +IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp +YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK +90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H +mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB +hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez +GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1 +vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc= + + +MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO +MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw +IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj +IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL +MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6 +ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb +VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe +OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp +bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah +2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ +KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+ +yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0 +VhfnkHwPltmrpYVe + + + + + \ No newline at end of file diff --git a/coretbt_uiapp/.tproject b/coretbt_uiapp/.tproject new file mode 100644 index 0000000..d7a6d5b --- /dev/null +++ b/coretbt_uiapp/.tproject @@ -0,0 +1,11 @@ + + + + + wearable-2.3.1 + + + + + + diff --git a/coretbt_uiapp/LICENSE b/coretbt_uiapp/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/coretbt_uiapp/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/coretbt_uiapp/inc/coretbt_uiapp.h b/coretbt_uiapp/inc/coretbt_uiapp.h new file mode 100644 index 0000000..f8bbcab --- /dev/null +++ b/coretbt_uiapp/inc/coretbt_uiapp.h @@ -0,0 +1,98 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file coretbt_uiapp.h + * @brief ui app that will be used by TBT for view/pick operation + * @since_tizen 2.3 + * @author golam kayes(g.kayes@samsung.com), salman rahman(salman.ran) and sheikh jakir hossain(sk.jakir) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + * */ + +#ifndef __coretbt_uiapp_H__ + +#ifndef TIZEN_DEBUG_ENABLE +#define TIZEN_DEBUG_ENABLE +#endif + +#include +#include +#include +//#include +#include "efl_extension_events.h" +#include +#include +#include "logger.h" + +#if !defined(PACKAGE) +#define PACKAGE "org.tizen.coretbt_uiapp" +#endif + +#define EDJ_FILE_MOBILE "edje/coretbt_uiapp.edj" +#define EDJ_FILE_WEARABLE "edje/wearable_coretbt_uiapp.edj" + +#define GRP_MAIN "main" + +#define KEY_END "XF86Stop" + +typedef enum { + DEVICE_TYPE_WEARABLE, + DEVICE_TYPE_MOBILE, + DEVICE_TYPE_WEARABLE_360_X_480, + DEVICE_TYPE_WEARABLE_320_X_320, + DEVICE_TYPE_WEARABLE_CIRCLE, + + DEVICE_TYPE_NONE, + DEVICE_TYPE_MAX +}device_type_e; + + +static inline device_type_e get_device_type() +{ + int width, height; + device_type_e device_type = DEVICE_TYPE_NONE; + system_info_get_platform_int("tizen.org/feature/screen.width", &width); + system_info_get_platform_int("tizen.org/feature/screen.height", &height); + + if(width == 360 && height == 360) + { + //circle + device_type = DEVICE_TYPE_WEARABLE_CIRCLE; + } + else if(width == 360 && height == 480) + { + device_type = DEVICE_TYPE_WEARABLE_360_X_480; + } + else if(width == 320 && height == 320) + { + device_type = DEVICE_TYPE_WEARABLE_320_X_320; + } + else + { + device_type = DEVICE_TYPE_MOBILE; + + } + +return device_type; + +} + + +#endif /* __coretbt_uiapp_H__ */ diff --git a/coretbt_uiapp/inc/logger.h b/coretbt_uiapp/inc/logger.h new file mode 100644 index 0000000..7d985b8 --- /dev/null +++ b/coretbt_uiapp/inc/logger.h @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file logger.h + * @brief This file provide necessary macro for logging information. + * @since_tizen 2.3 + * @author Amlan Chowdhury (amlan.c@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ +#ifndef __LOGGER_H__ +#define __LOGGER_H__ + +#include + +#define LOG_TAG_CORE "[coretbt_uiapp]_" + +#define DLOG(prio, fmt, arg...) dlog_print(prio, LOG_TAG_CORE, "%s (Line: %d) > " fmt, __func__, __LINE__, ##arg) +#define DBG(fmt, arg...) DLOG(DLOG_DEBUG, fmt, ##arg) +#define ERR(fmt, arg...) DLOG(DLOG_ERROR, fmt, ##arg) + +#define RETM_IF(expr, fmt, arg...) \ +{ \ + if (expr) \ + { \ + ERR(fmt, ##arg); \ + return; \ + } \ +} + +#define RETVM_IF(expr, val, fmt, arg...) \ +{ \ + if (expr) \ + { \ + ERR(fmt, ##arg); \ + return (val); \ + } \ +} + +#define SAFE_DELETE(a) if( (a) != NULL ) free (a); (a) = NULL; + +#endif /* __LOGGER_H__ */ diff --git a/coretbt_uiapp/project_def.prop b/coretbt_uiapp/project_def.prop new file mode 100644 index 0000000..3273382 --- /dev/null +++ b/coretbt_uiapp/project_def.prop @@ -0,0 +1,11 @@ +APPNAME = coretbt_uiapp + +type = app +profile = wearable-2.3.1 + +USER_SRCS = src/coretbt_uiapp.c +USER_DEFS = +USER_INC_DIRS = inc +USER_OBJS = +USER_LIBS = +USER_EDCS = res/edje/coretbt_uiapp.edc diff --git a/coretbt_uiapp/res/edje/coretbt_uiapp.edc b/coretbt_uiapp/res/edje/coretbt_uiapp.edc new file mode 100644 index 0000000..11e991b --- /dev/null +++ b/coretbt_uiapp/res/edje/coretbt_uiapp.edc @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +collections { + group { name: "main"; + + parts { + + part { name: "txt_title"; + type: TEXT; + mouse_events: 0; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 0.1; } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part { name: "txt_title2"; + type: TEXT; + mouse_events: 0; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1 { relative: 0.0 0.1; } + rel2 { relative: 1.0 0.2; } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + + part { name: "list"; + type: SWALLOW; + mouse_events: 1; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1 { relative: 0.0 0.2; } + rel2 { relative: 1.0 0.9; } + color: 255 0 0 255; + } + } + + + + part { name: "button"; + type: SWALLOW; + mouse_events: 1; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1 { relative: 0.0 0.9; } + rel2 { relative: 1.0 1.0; } + color: 255 0 0 255; + } + } + + + } + } +} diff --git a/coretbt_uiapp/res/edje/wearable_coretbt_uiapp.edc b/coretbt_uiapp/res/edje/wearable_coretbt_uiapp.edc new file mode 100644 index 0000000..57d896b --- /dev/null +++ b/coretbt_uiapp/res/edje/wearable_coretbt_uiapp.edc @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#define HEADER_HIGHT 0.0 + +collections { + group { name: "main"; + + parts { + + part { name: "txt_title"; + type: TEXT; + mouse_events: 0; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1 { relative: 0.0 HEADER_HIGHT+0.0; } + rel2 { relative: 1.0 HEADER_HIGHT+0.1; } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part { name: "txt_title2"; + type: TEXT; + mouse_events: 0; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1 { relative: 0.0 HEADER_HIGHT+0.1; } + rel2 { relative: 1.0 HEADER_HIGHT+0.2; } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + + part { name: "list"; + type: SWALLOW; + mouse_events: 1; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1 { relative: 0.0 HEADER_HIGHT+0.2; } + rel2 { relative: 1.0 HEADER_HIGHT+0.65; } + color: 255 0 0 255; + } + } + + + + part { name: "button"; + type: SWALLOW; + mouse_events: 1; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1 { relative: 0.0 0.65; } + rel2 { relative: 1.0 0.80; } + color: 255 0 0 255; + } + } + + + } + } +} diff --git a/coretbt_uiapp/shared/res/coretbt_uiapp.png b/coretbt_uiapp/shared/res/coretbt_uiapp.png new file mode 100644 index 0000000..9765b1b Binary files /dev/null and b/coretbt_uiapp/shared/res/coretbt_uiapp.png differ diff --git a/coretbt_uiapp/src/coretbt_uiapp.c b/coretbt_uiapp/src/coretbt_uiapp.c new file mode 100644 index 0000000..bab7540 --- /dev/null +++ b/coretbt_uiapp/src/coretbt_uiapp.c @@ -0,0 +1,576 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +#include "coretbt_uiapp.h" + + +typedef struct appdata{ + Evas_Object* win; + Evas_Object* layout; + Evas_Object* conform; + + int mode; + int selectionMode; + app_control_h request; + + Evas_Object *list; + Evas_Object *button; + + char **items; + int itemCount; + + char *title1; + char *title2; + + +} appdata_s; + + + + +static bool has_request=false; +static app_control_h _control; +static char *type_str=NULL; +static bool was_requested; +static int status_1,status_2; +static char *caller; + + +/** + * @function get_app_control_error + * @since_tizen 2.3 + * @description Get App Control Error + * @parameter int: Int + * @return static char* + */ +static char* get_app_control_error(int ret) +{ + char* error = NULL; + + switch (ret) { + case APP_CONTROL_ERROR_NONE: + error = "APP_CONTROL_ERROR_NONE"; + break; + case APP_CONTROL_ERROR_INVALID_PARAMETER: + error = "APP_CONTROL_ERROR_INVALID_PARAMETER"; + break; + case APP_CONTROL_ERROR_OUT_OF_MEMORY: + error = "APP_CONTROL_ERROR_OUT_OF_MEMORY"; + break; + case APP_CONTROL_ERROR_APP_NOT_FOUND: + error = "APP_CONTROL_ERROR_APP_NOT_FOUND"; + break; + case APP_CONTROL_ERROR_KEY_NOT_FOUND: + error = "APP_CONTROL_ERROR_KEY_NOT_FOUND"; + break; + case APP_CONTROL_ERROR_KEY_REJECTED: + error = "APP_CONTROL_ERROR_KEY_REJECTED"; + break; + case APP_CONTROL_ERROR_INVALID_DATA_TYPE: + error = "APP_CONTROL_ERROR_INVALID_DATA_TYPE"; + break; + case APP_CONTROL_ERROR_LAUNCH_REJECTED: + error = "APP_CONTROL_ERROR_LAUNCH_REJECTED"; + break; + case APP_CONTROL_ERROR_PERMISSION_DENIED: + error = "APP_CONTROL_ERROR_PERMISSION_DENIED"; + break; + case APP_CONTROL_ERROR_LAUNCH_FAILED: + error = "APP_CONTROL_ERROR_LAUNCH_FAILED"; + break; + case APP_CONTROL_ERROR_TIMED_OUT: + error = "APP_CONTROL_ERROR_TIMED_OUT"; + break; + //case APP_CONTROL_ERROR_IO_ERROR: + //error = "APP_CONTROL_ERROR_IO_ERROR"; + //break; + default: + error = "Unknown Error"; + break; + } + return error; +} + + +/** + * @function layout_back_cb + * @since_tizen 2.3 + * @description Layout Back Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void layout_back_cb(void *data, Evas_Object *obj, void *event_info) +{ + appdata_s *ad = data; + /* Let window go to hide state. */ + elm_win_lower(ad->win); +} + + +/** + * @function app_get_resource + * @since_tizen 2.3 + * @description App Get Resource + * @parameter const char*: Const char Pointer, char*: Char Pointer + * @return static void + */ +static void app_get_resource(const char *edj_file_in, char *edj_path_out, int edj_path_max) +{ + char *res_path = app_get_resource_path(); + if (res_path) { + snprintf(edj_path_out, edj_path_max, "%s%s", res_path, edj_file_in); + free(res_path); + } +} + + +/** + * @function win_delete_request_cb + * @since_tizen 2.3 + * @description Win Delete Request Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void win_delete_request_cb(void *data , Evas_Object *obj , void *event_info) +{ + DBG("win_delete_request_cb"); + + ui_app_exit(); +} + + +/** + * @function update_info + * @since_tizen 2.3 + * @description Update Info + * @parameter appdata_s*: Appdata S Pointer + * @return static void + */ +static void update_info(appdata_s *ad) +{ + DBG("update_info"); + + elm_object_part_text_set(ad->layout, "txt_title", ad->title1); + elm_object_part_text_set(ad->layout, "txt_title2", ad->title2); + + if(ad->mode==0) + { + elm_object_text_set(ad->button, "Return"); + } + else if(ad->mode==1) + { + elm_list_multi_select_set (ad->list, ad->selectionMode==0?EINA_FALSE:EINA_TRUE); + elm_object_text_set(ad->button, ad->selectionMode==0?"Select Single":"Select Multiple"); + + } +} + + +/** + * @function on_return_button_clicked + * @since_tizen 2.3 + * @description On Return Button Clicked + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void on_return_button_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + DBG("on_return_button_clicked"); + + int nStatus; + appdata_s *ad=data; + + if(was_requested) + { + DBG("on_return_button_clicked Reply Requested"); + + app_control_h reply; + nStatus = app_control_create (&reply); + DBG("app_control_create=%s",get_app_control_error(nStatus)); + if(!reply) + { + DBG("reply is Null"); + } + // lets craete reply dta + const Eina_List *items,*l; + Elm_Object_Item *list_it; + + + int selectionCount=0; + DBG("Getting List Items"); + items = elm_list_selected_items_get(ad->list); + DBG("Got List Items"); + + EINA_LIST_FOREACH(items, l, list_it) + { + selectionCount++; + DBG("SELECTED %s",elm_object_item_text_get(list_it)); + } + + char countStr[32]; + snprintf(countStr, sizeof(countStr), "%d",selectionCount); + nStatus = app_control_add_extra_data ( reply, "count", countStr); + DBG("app_control_add_extra_data=%s",get_app_control_error(nStatus)); + + + char *values[selectionCount]; + int now=0; + + + EINA_LIST_FOREACH(items, l, list_it) + { + values[now++]=(char*)elm_object_item_text_get(list_it); + } + nStatus = app_control_add_extra_data_array ( reply, "values", (const char**)values,selectionCount); + DBG("app_control_add_extra_data_array=%s",get_app_control_error(nStatus)); + + + // ************************************ + //APP_CONTROL_RESULT_SUCCEEDED + + app_control_result_e res=APP_CONTROL_RESULT_SUCCEEDED; + nStatus = app_control_reply_to_launch_request(reply,_control,res); + DBG("app_control_reply_to_launch_request=%s",get_app_control_error(nStatus)); + } + + DBG("No reply! Quitting..."); + ui_app_exit(); + + +} + + +/** + * @function create_base_gui + * @since_tizen 2.3 + * @description Create Base Gui + * @parameter appdata_s*: Appdata S Pointer + * @return static void + */ +static void create_base_gui(appdata_s *ad) +{ + DBG("create_base_gui"); + + + char edj_path[PATH_MAX] = {0, }; + + /* Window */ + ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE); + elm_win_conformant_set(ad->win, EINA_TRUE); + elm_win_autodel_set(ad->win, EINA_TRUE); + + if (elm_win_wm_rotation_supported_get(ad->win)) { + int rots[4] = { 0, 90, 180, 270 }; + elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4); + } + + evas_object_smart_callback_add(ad->win, "delete,request", win_delete_request_cb, NULL); + + /* Conformant */ + ad->conform = elm_conformant_add(ad->win); + evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(ad->win, ad->conform); + evas_object_show(ad->conform); + + /* Base Layout */ + if(get_device_type() == DEVICE_TYPE_MOBILE) + { + app_get_resource(EDJ_FILE_MOBILE, edj_path, (int)PATH_MAX); + } + else if(get_device_type() == DEVICE_TYPE_WEARABLE_320_X_320 || + get_device_type() == DEVICE_TYPE_WEARABLE_360_X_480 || + get_device_type() == DEVICE_TYPE_WEARABLE_CIRCLE) + { + app_get_resource(EDJ_FILE_WEARABLE, edj_path, (int)PATH_MAX); + } + + ad->layout = elm_layout_add(ad->win); + elm_layout_file_set(ad->layout, edj_path, GRP_MAIN); + + evas_object_size_hint_weight_set(ad->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_content_set(ad->conform, ad->layout); + + elm_object_part_text_set(ad->layout, "txt_title", "App Test Control"); + elm_object_part_text_set(ad->layout, "txt_title2", "Sample Data : "); + + + // lets create dummy data :D + char *data[]={"Artcell", "Dream Theater", "Pink Floyd","Iron Maiden","SOAD","Prisoners","Poets Of The Fall","Endless River","No room for looser!"}; + ad->items=data; + ad->itemCount=9; + + + + // create list + ad->list = elm_list_add(ad->layout); + evas_object_size_hint_weight_set(ad->list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ad->list, EVAS_HINT_FILL, EVAS_HINT_FILL); + + + elm_list_select_mode_set(ad->list,ELM_OBJECT_SELECT_MODE_ALWAYS); + int i; + for (i = 0; iitemCount; ++i) { + DBG("[%d] data is %d %s ",ad->itemCount,i,data[i]); + elm_list_item_append(ad->list, data[i], NULL, NULL, NULL, ad->win); + } + + elm_list_go(ad->list); + elm_object_part_content_set(ad->layout, "list", ad->list); + + evas_object_show(ad->layout); + evas_object_show(ad->list); + + + + // add button + ad->button = elm_button_add(ad->layout); + evas_object_size_hint_align_set(ad->button, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_text_set(ad->button, "Return"); + elm_object_part_content_set(ad->layout, "button", ad->button); + evas_object_show(ad->button); + evas_object_smart_callback_add(ad->button, "clicked", on_return_button_clicked, ad); + + evas_object_show(ad->win); + + eext_object_event_callback_add(ad->layout, EEXT_CALLBACK_BACK, layout_back_cb, ad); + + update_info(ad); +} + + +/** + * @function app_create + * @since_tizen 2.3 + * @description App Create + * @parameter void*: Void Pointer + * @return static bool + */ +static bool app_create(void *data) +{ + DBG("app_create"); + /* Hook to take necessary actions before main event loop starts + Initialize UI resources and application's data + If this function returns true, the main loop of application starts + If this function returns false, the application is terminated */ + appdata_s *ad = data; + + create_base_gui(ad); + + return true; +} + + +/** + * @function app_control + * @since_tizen 2.3 + * @description App Control + * @parameter app_control_h: App Control H, void*: Void Pointer + * @return static void + */ +static void app_control(app_control_h control, void *data) +{ + appdata_s *ad=data; + + int nStatus=-1; + has_request=false; + + /* Handle the launch request. */ + DBG("app_control"); + + char *category; + nStatus = app_control_get_operation(control,&category); + DBG("app_control_get_operation=%s",get_app_control_error(nStatus)); + if(!category) + { + ERR("category is Null"); + return; + } + ad->title2="Dummy Items : "; + if(strcmp(category,APP_CONTROL_OPERATION_VIEW)==0) + { + ad->mode=0; + // load view mode + ad->title1="View Operation"; + } + else if(strcmp(category,APP_CONTROL_OPERATION_DEFAULT)==0) + { + ad->mode=0; + // load view mode + ad->title1="Default Operation"; + } + else if(strcmp(category,APP_CONTROL_OPERATION_PICK)==0) + { + // load pick mode + ad->mode=1; + ad->title1="Pick Operation"; + + char *selection; + //check for selection mode + nStatus = app_control_get_extra_data(control,APP_CONTROL_DATA_SELECTION_MODE,&selection); + DBG("app_control_get_extra_data=%s",get_app_control_error(nStatus)); + if(!selection) + { + ERR("selection is Null"); + return; + } + + if(nStatus==0 && strcmp(selection,"single")==0) + { + ad->selectionMode=0; + } + else if(nStatus==0 && strcmp(selection,"multiple")==0) + { + ad->selectionMode=1; + } + else + { + ad->selectionMode=0; + ad->title1 = "Pick Operation Unknown"; + } + + } + else + { + ad->mode=0; + + char str[256]; + snprintf(str, sizeof(str), "%s%s", "Operation: ", category); + ad->title1 = str; + + } + + ad->request=control; + + caller=NULL; + status_2=app_control_get_caller(control,&caller); + DBG("app_control_get_caller=%s",get_app_control_error(nStatus)); + if(!caller) + { + DBG("caller is Null"); + } + + + if(status_2==0) + { + ad->title2="Caller App : "; + } + + + nStatus = app_control_get_extra_data(control,"type",&type_str); + DBG("app_control_get_extra_data=%s",get_app_control_error(nStatus)); + if(!type_str) + { + DBG("caller is Null"); + } + + status_1=app_control_is_reply_requested(control,&was_requested); + DBG("app_control_is_reply_requested=%s",get_app_control_error(nStatus)); + + + has_request=true; + nStatus=app_control_clone (&_control, control); + DBG("app_control_clone=%s",get_app_control_error(nStatus)); + if(!_control) + { + DBG("_control is Null"); + } + + + update_info(ad); +} + + +/** + * @function app_pause + * @since_tizen 2.3 + * @description App Pause + * @parameter void*: Void Pointer + * @return static void + */ +static void app_pause(void *data) +{ + /* Take necessary actions when application becomes invisible. */ + DBG("app_pause"); +} + + +/** + * @function app_resume + * @since_tizen 2.3 + * @description App Resume + * @parameter void*: Void Pointer + * @return static void + */ +static void app_resume(void *data) +{ + /* Take necessary actions when application becomes visible. */ + DBG("app_resume"); +} + + +/** + * @function app_terminate + * @since_tizen 2.3 + * @description App Terminate + * @parameter void*: Void Pointer + * @return static void + */ +static void app_terminate(void *data) +{ + /* Release all resources. */ + DBG("app_terminate"); + type_str=NULL; + + has_request=false; +} + + +/** + * @function main + * @since_tizen 2.3 + * @description Main + * @parameter int: Int, char*: Char Pointer + * @return int + */ +int main(int argc, char *argv[]) +{ + DBG("main"); + + has_request=false; + + appdata_s ad = {0,}; + int ret = 0; + + ui_app_lifecycle_callback_s event_callback = {0,}; + + + event_callback.create = app_create; + event_callback.terminate = app_terminate; + event_callback.pause = app_pause; + event_callback.resume = app_resume; + event_callback.app_control = app_control; + + + DBG("main loop starting..."); + ret = ui_app_main(argc, argv, &event_callback, &ad); + if (ret != APP_ERROR_NONE) { + dlog_print(DLOG_ERROR, LOG_TAG, "ui_app_main is failed. err = %d", ret); + } + + DBG("main_end"); + + return ret;} diff --git a/coretbt_uiapp/tizen-manifest.xml b/coretbt_uiapp/tizen-manifest.xml new file mode 100644 index 0000000..6b2c4a4 --- /dev/null +++ b/coretbt_uiapp/tizen-manifest.xml @@ -0,0 +1,8 @@ + + + + + coretbt_uiapp.png + + + diff --git a/docs/Tizen2.3.1_TBT_User_Guide.pdf b/docs/Tizen2.3.1_TBT_User_Guide.pdf new file mode 100755 index 0000000..bf1afdd Binary files /dev/null and b/docs/Tizen2.3.1_TBT_User_Guide.pdf differ diff --git a/release/binary-arm/install.sh b/release/binary-arm/install.sh new file mode 100644 index 0000000..a4ee208 --- /dev/null +++ b/release/binary-arm/install.sh @@ -0,0 +1,33 @@ +############################################################################### + # Copyright (c) 2014 Samsung Electronics Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the License); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ###############################################################################/ + ## + # @file install.sh + # @brief install script for TBT + # + # + # @author nazib ullah(nazib.ullah@samsung.com), nazmus saqib(saqib.nzms@samsung.com) + # @date October, 2014 + + # + + + +sdb install org.tizen.coretbt_dataprovider-1.0.0-arm.tpk +sdb install org.tizen.coretbt_serviceapp-1.0.0-arm.tpk +sdb install org.tizen.coretbt_uiapp-1.0.0-arm.tpk +sdb install org.tizen.tbtcoreapp-1.0.0-arm.tpk +sdb shell launch_app org.tizen.tbtcoreapp diff --git a/release/binary-arm/org.tizen.coretbt_dataprovider-1.0.0-arm.tpk b/release/binary-arm/org.tizen.coretbt_dataprovider-1.0.0-arm.tpk new file mode 100644 index 0000000..f447d3f Binary files /dev/null and b/release/binary-arm/org.tizen.coretbt_dataprovider-1.0.0-arm.tpk differ diff --git a/release/binary-arm/org.tizen.coretbt_serviceapp-1.0.0-arm.tpk b/release/binary-arm/org.tizen.coretbt_serviceapp-1.0.0-arm.tpk new file mode 100644 index 0000000..eb4ab9a Binary files /dev/null and b/release/binary-arm/org.tizen.coretbt_serviceapp-1.0.0-arm.tpk differ diff --git a/release/binary-arm/org.tizen.coretbt_uiapp-1.0.0-arm.tpk b/release/binary-arm/org.tizen.coretbt_uiapp-1.0.0-arm.tpk new file mode 100644 index 0000000..34430b2 Binary files /dev/null and b/release/binary-arm/org.tizen.coretbt_uiapp-1.0.0-arm.tpk differ diff --git a/release/binary-arm/org.tizen.tbtcoreapp-1.0.0-arm.tpk b/release/binary-arm/org.tizen.tbtcoreapp-1.0.0-arm.tpk new file mode 100644 index 0000000..351f6ee Binary files /dev/null and b/release/binary-arm/org.tizen.tbtcoreapp-1.0.0-arm.tpk differ diff --git a/release/binary-x86/install.sh b/release/binary-x86/install.sh new file mode 100644 index 0000000..05ab40b --- /dev/null +++ b/release/binary-x86/install.sh @@ -0,0 +1,33 @@ +############################################################################### + # Copyright (c) 2014 Samsung Electronics Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the License); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ###############################################################################/ + ## + # @file install.sh + # @brief install script for TBT + # + # + # @author nazib ullah(nazib.ullah@samsung.com), nazmus saqib(saqib.nzms@samsung.com) + # @date October, 2014 + + # + + + +sdb install org.tizen.coretbt_dataprovider-1.0.0-i386.tpk +sdb install org.tizen.coretbt_serviceapp-1.0.0-i386.tpk +sdb install org.tizen.coretbt_uiapp-1.0.0-i386.tpk +sdb install org.tizen.tbtcoreapp-1.0.0-i386.tpk +sdb shell launch_app org.tizen.tbtcoreapp diff --git a/release/binary-x86/org.tizen.coretbt_dataprovider-1.0.0-i386.tpk b/release/binary-x86/org.tizen.coretbt_dataprovider-1.0.0-i386.tpk new file mode 100644 index 0000000..deb8220 Binary files /dev/null and b/release/binary-x86/org.tizen.coretbt_dataprovider-1.0.0-i386.tpk differ diff --git a/release/binary-x86/org.tizen.coretbt_serviceapp-1.0.0-i386.tpk b/release/binary-x86/org.tizen.coretbt_serviceapp-1.0.0-i386.tpk new file mode 100644 index 0000000..379906e Binary files /dev/null and b/release/binary-x86/org.tizen.coretbt_serviceapp-1.0.0-i386.tpk differ diff --git a/release/binary-x86/org.tizen.coretbt_uiapp-1.0.0-i386.tpk b/release/binary-x86/org.tizen.coretbt_uiapp-1.0.0-i386.tpk new file mode 100644 index 0000000..2366a35 Binary files /dev/null and b/release/binary-x86/org.tizen.coretbt_uiapp-1.0.0-i386.tpk differ diff --git a/release/binary-x86/org.tizen.tbtcoreapp-1.0.0-i386.tpk b/release/binary-x86/org.tizen.tbtcoreapp-1.0.0-i386.tpk new file mode 100644 index 0000000..5cebb26 Binary files /dev/null and b/release/binary-x86/org.tizen.tbtcoreapp-1.0.0-i386.tpk differ diff --git a/release/readme.txt b/release/readme.txt new file mode 100644 index 0000000..f09aa25 --- /dev/null +++ b/release/readme.txt @@ -0,0 +1,3 @@ +@SDK version : Version : 2.3.1 Build id : 20150320-1725 +@Binary_version : tizen-2.3-wearable_20150325.2_wearable_emulator, tizen-2.3-wearable_20150325.2_wearable_emulator-circle + diff --git a/tbtcoreapp/.cproject b/tbtcoreapp/.cproject new file mode 100644 index 0000000..7e14741 --- /dev/null +++ b/tbtcoreapp/.cproject @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tbtcoreapp/.exportMap b/tbtcoreapp/.exportMap new file mode 100644 index 0000000..43e310e --- /dev/null +++ b/tbtcoreapp/.exportMap @@ -0,0 +1,4 @@ +{ + global: main; + local: *; +}; diff --git a/tbtcoreapp/.externalToolBuilders/org.tizen.nativecore.apichecker.core.builder.launch b/tbtcoreapp/.externalToolBuilders/org.tizen.nativecore.apichecker.core.builder.launch new file mode 100644 index 0000000..bf4d29a --- /dev/null +++ b/tbtcoreapp/.externalToolBuilders/org.tizen.nativecore.apichecker.core.builder.launch @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tbtcoreapp/.package-stamp b/tbtcoreapp/.package-stamp new file mode 100644 index 0000000..40cbe59 --- /dev/null +++ b/tbtcoreapp/.package-stamp @@ -0,0 +1 @@ +TPK \ No newline at end of file diff --git a/tbtcoreapp/.project b/tbtcoreapp/.project new file mode 100644 index 0000000..1c07289 --- /dev/null +++ b/tbtcoreapp/.project @@ -0,0 +1,48 @@ + + + tbtcoreapp + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + org.eclipse.ui.externaltools.ExternalToolBuilder + full,incremental, + + + LaunchConfigHandle + <project>/.externalToolBuilders/org.tizen.nativecore.apichecker.core.builder.launch + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.tizen.nativecore.apichecker.core.tizenCppNature + + + + 1433407750608 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-projectRelativePath-matches-false-false-*/.tpk + + + + diff --git a/tbtcoreapp/.rds_delta b/tbtcoreapp/.rds_delta new file mode 100644 index 0000000..98d7811 --- /dev/null +++ b/tbtcoreapp/.rds_delta @@ -0,0 +1,6 @@ +#delete +#add +#modify +author-signature.xml +signature1.xml +bin/tbtcoreapp diff --git a/tbtcoreapp/.sdk_delta.info b/tbtcoreapp/.sdk_delta.info new file mode 100644 index 0000000..81fbf2a Binary files /dev/null and b/tbtcoreapp/.sdk_delta.info differ diff --git a/tbtcoreapp/.sign/.manifest.tmp b/tbtcoreapp/.sign/.manifest.tmp new file mode 100644 index 0000000..9083a0e --- /dev/null +++ b/tbtcoreapp/.sign/.manifest.tmp @@ -0,0 +1,325 @@ +bin/tbtcoreapp__DEL__M6EoYeHUF3qUZzeuuh6jUg/hKG/a2DpCw2RNicTyMaY= +res/edje/2.3.1/mobile/animation_viewer.edj__DEL__BySKx5JhNZf9x+NGjt6Aob1ovmD9n0MsL2x79bpr3hc= +res/edje/2.3.1/mobile/bluetooth_le_viewer.edj__DEL__G66P0h1v8e8E7KIAEzFgIBnDk0hGdzG61edNJiFOjtQ= +res/edje/2.3.1/mobile/bluetooth_oob_viewer.edj__DEL__xGg0exy7+uCt/tlTop6RkVPFiths5ACNhPp81XFShF0= +res/edje/2.3.1/mobile/bluetooth_viewer.edj__DEL__KUCyGZXaC/gKFQiXdO7eo0BJr3oyOS88h2hcxP0/J4c= +res/edje/2.3.1/mobile/camera_viewer.edj__DEL__NNQT/yEcx6DyTLwr51EF/6cl6Cd3r7MU4aeoqZYrrhk= +res/edje/2.3.1/mobile/custom_button.edj__DEL__+i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= +res/edje/2.3.1/mobile/datacontrol_viewer.edj__DEL__NPjIfX0Zs6KDBZ91tWFuMZ0d1JDtkaDDkNpwSZTF0CQ= +res/edje/2.3.1/mobile/display_viewer.edj__DEL__TBWh7O71HMyR1s4gTZa7awVyFc5ObFwm2Vg27cfJi4U= +res/edje/2.3.1/mobile/efl_callback_viewer.edj__DEL__Yl5pcGC+aaUttFqg3BlmX1T+x3gSwQy6kGwTdy91pA0= +res/edje/2.3.1/mobile/event_viewer.edj__DEL__etSJ4FmglbezOhioAp5jHlnm6qCm5pZgMopSGlc5aw0= +res/edje/2.3.1/mobile/feature_viewer.edj__DEL__qcfEhVFTaIb0CneJGcoExb0fJTV6tDynYUwUqy/L0M0= +res/edje/2.3.1/mobile/gps_viewer.edj__DEL__J98ZfHq4bdWnPOgeCNf3F8qo9dP+uHSdgQObx3rnWDs= +res/edje/2.3.1/mobile/graphics_viewer.edj__DEL__TyIhCQxutHD3GsJVX+WdzaEAIylOU4ntVbL9A6C+pDw= +res/edje/2.3.1/mobile/image_viewer.edj__DEL__ooShq1VkAli/KknKQ+zOnuwJAk9OWn0Bh1lNxZorTI4= +res/edje/2.3.1/mobile/input_viewer.edj__DEL__FAtUDFoqzARGAyDSEvcDbCIznTDicbEEcerY9tNfwE0= +res/edje/2.3.1/mobile/mock_viewer.edj__DEL__E77yN193qtqgrWDb+8jNAnLTtBQo/lKC966Ugl4wywc= +res/edje/2.3.1/mobile/nfc_viewer.edj__DEL__NR+V2/fsamyc3j+o3mEKNueunE9O/cfXU1ps8uMKsbk= +res/edje/2.3.1/mobile/pick_viewer.edj__DEL__uclTKM5yI54wkWVBnSeMA6jtxR9ZpE8ohPAblMpd1Jc= +res/edje/2.3.1/mobile/push_service.edj__DEL__+aI+FVzXr+4QpzvLlgDbjGmwj7Sl7dDa51f8RHb1qMM= +res/edje/2.3.1/mobile/runtimeinfo_viewer.edj__DEL__Eg0Ptn2GtQNTNiU/LJhLayX6x6nCgiGUaddsO5ZH4Ho= +res/edje/2.3.1/mobile/sensor_viewer.edj__DEL__Z5sas4R627HMhGGY/zld99cp4C2/ly247Fab+6Oxg/w= +res/edje/2.3.1/mobile/shortcut_viewer.edj__DEL__1Rg3J58uCm3PjqL6NtAJLBp+qdftrN99Qx43c6AXTAw= +res/edje/2.3.1/mobile/sound_player.edj__DEL__TRZHlKCDnydwFE8V/yPhMzzHUwETZVxKr//3v64imqw= +res/edje/2.3.1/mobile/touch_viewer.edj__DEL__5tH4ucGylosLrGSBOfqi4azmmaoEK4R9alEWCgR6plY= +res/edje/2.3.1/mobile/ui_viewer.edj__DEL__wr1LumUF5WUb5fRnFA5bJ3AGVlIP68BgoezhymIDkm8= +res/edje/2.3.1/mobile/video_player.edj__DEL__mozqsGbt/uHGrPYmoAuXMzS7V/g2CXjm9puRM18VumI= +res/edje/2.3.1/mobile/wifi_viewer.edj__DEL__9cDAk+d9rfNHTSsqhb40l0Wj5qprX7JZ52KpWp4nY9g= +res/edje/2.3.1/mobile/wifidirect_info_viewer.edj__DEL__Nc5BKAvLM8RxA0EvJl+dQ2G0zHimtBENIU80d359HUk= +res/edje/2.3.1/mobile/wifidirect_viewer.edj__DEL__dsqTz9+nsI4j3PKBUo1Q9m/Lx1CRvN2ocyAsBcYmUxE= +res/edje/2.3.1/wearable/animation_viewer.edj__DEL__q6qlTgfTDXCu6LJNjh0OdWrikpIQ2r5y87Ff6gENiE8= +res/edje/2.3.1/wearable/bluetooth_oob_viewer.edj__DEL__zaXYV1izyPjrkTgdFld0Aig8lTdZBmBFHfpLk2Z80yI= +res/edje/2.3.1/wearable/bluetooth_viewer.edj__DEL__jzy79WpT78mq4nDlke/34XEvrKxGUO+2EpR6K7XxfpA= +res/edje/2.3.1/wearable/camera_viewer.edj__DEL__TYc7NLno0IPtZ3vJUSbv7x2egE6uOM+jjT9hLy44SaQ= +res/edje/2.3.1/wearable/custom_button.edj__DEL__+i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= +res/edje/2.3.1/wearable/datacontrol_viewer.edj__DEL__YJsawxBl4v8gOPS2gtOeP2dunWNT2h82VTS4m0PLJuE= +res/edje/2.3.1/wearable/display_viewer.edj__DEL__GEj/x2grCuJ4jyXwtCv0iPWmZMur8uyTxen9ujtchuo= +res/edje/2.3.1/wearable/efl_callback_viewer.edj__DEL__hs7yf+kk/AZ1IfYKYVAabnmDjU9TbEHZp3EmAUmC0E4= +res/edje/2.3.1/wearable/event_viewer.edj__DEL__HxAowejDwPIHR7Juav5eSErD3RkNSJeU3ec/nkkj8Io= +res/edje/2.3.1/wearable/feature_viewer.edj__DEL__6CDrh3wGZ5c4DjHzzLOGxvyGluSW2IbpS6hwxqha8Os= +res/edje/2.3.1/wearable/gps_viewer.edj__DEL__vP3jrgLTrPvh2IjuJJpDko1Be2E53orobcjHGJM+Mws= +res/edje/2.3.1/wearable/graphics_viewer.edj__DEL__S89gYFLEoETwO4asJLop3GCR+4B6hBLVuhRuFJBeh9g= +res/edje/2.3.1/wearable/image_viewer.edj__DEL__4T4P1eYVZ6WUn0tVe8kaIHIisQJallHCR5xRby6EowE= +res/edje/2.3.1/wearable/input_viewer.edj__DEL__9BGi10BCQqVHHZLnZtjSZaw81xd+s8U9cOZxQ3oMA/Y= +res/edje/2.3.1/wearable/mock_viewer.edj__DEL__3vBrkdY8//iJCv3fsQ2CF7dDcFhQZI4LcXf/ek9eQkk= +res/edje/2.3.1/wearable/nfc_viewer.edj__DEL__xtlvroyjhj69h9U4bfVmDYUsCan8/eoXuvIz6+dbLV8= +res/edje/2.3.1/wearable/pick_viewer.edj__DEL__IM4aA5H/BcnHGHoSjHRU+6xpF24MkAJogOpYaS/L71o= +res/edje/2.3.1/wearable/push_service.edj__DEL__xxlnKX11mozHbi4aD2YyH81GP0zK3pp8Xb6ksI3OEbk= +res/edje/2.3.1/wearable/runtimeinfo_viewer.edj__DEL__CUt71aBDXeoFcRsajRWyvd/MuUuYWWZcOV2ILgDKT+A= +res/edje/2.3.1/wearable/sensor_viewer.edj__DEL__krEXlVBUFKl5O3nV1+VsPkCiE9dfSArbJBlz2tX7JEs= +res/edje/2.3.1/wearable/shortcut_viewer.edj__DEL__LcetW8bP+g0JnjfpGKLB/+I/x4VcZumPQhv6PMhBOng= +res/edje/2.3.1/wearable/sound_player.edj__DEL__ft8pnryry1TTGAqf+EkRctr0SlOP2b0dT/SYJuwz8RU= +res/edje/2.3.1/wearable/touch_viewer.edj__DEL__nnaNbWfuxmT2sXlRY07xQEpwMUpn6IFRrOaD3iD9S6Q= +res/edje/2.3.1/wearable/ui_viewer.edj__DEL__sNf2sdccsJI813Oq89pqfpmL0CnkA7Us7s1ECpx2ees= +res/edje/2.3.1/wearable/video_player.edj__DEL__T0C9o1sRz5C6Gd4pTIPa+xysJz66cTkjN015UgppJVQ= +res/edje/2.3.1/wearable/wearable_toolbar.edj__DEL__iHhcpjOZmvOKOBAy+BY1vLlWSTJNpadZAEXaCaKptvE= +res/edje/2.3.1/wearable/wifi_viewer.edj__DEL__g0zOTn7v3LGrlSvNkHct6ScVAJhrR8IV/Zz0y5Eu0v8= +res/edje/2.3.1/wearable/wifidirect_info_viewer.edj__DEL__wV2svWaHFJoyctGj/TEKfpmXqTkU2p+Qgp/Bb597reE= +res/edje/2.3.1/wearable/wifidirect_viewer.edj__DEL__n28YFSI00RbMJPBZSbdP0OQQsvxdNzpn2GWt2+PrbPc= +res/edje/2.3.1/wearable_320_x_320/animation_viewer.edj__DEL__iZsnY+0m52xxT3UdsYZs7ub79A9ABAJUN6KS0HYbd3E= +res/edje/2.3.1/wearable_320_x_320/bluetooth_oob_viewer.edj__DEL__caSciNEjN2lsIvVdJCTjcg2HyVGomOV+b2DwstJyYBo= +res/edje/2.3.1/wearable_320_x_320/bluetooth_viewer.edj__DEL__rxbF+/E2Btkv+4j0fuFUcKmvD1k/9v6mK2a56ALcs3o= +res/edje/2.3.1/wearable_320_x_320/camera_viewer.edj__DEL__7brYAIYlmlbdEVfg0KJ3W3uDQkTGJVVB2uvdo7QR9vQ= +res/edje/2.3.1/wearable_320_x_320/custom_button.edj__DEL__+i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= +res/edje/2.3.1/wearable_320_x_320/datacontrol_viewer.edj__DEL__ITKetacPReViE3blbwqys38IgY/uTIjD+FW0ZE6JCuM= +res/edje/2.3.1/wearable_320_x_320/display_viewer.edj__DEL__62E/o5MuUnOSVBaRZSdKbhv0lscE8Gg/HJ7dTvBQRM0= +res/edje/2.3.1/wearable_320_x_320/efl_callback_viewer.edj__DEL__XMVVYcc56cbDI4Pd8Te6fghAJdUGvO1LlcyCkq8K8Ac= +res/edje/2.3.1/wearable_320_x_320/event_viewer.edj__DEL__cfE5dtbr1Dt80JonqZ2eviZT6EkVxkRBvdwyM+K4EHg= +res/edje/2.3.1/wearable_320_x_320/feature_viewer.edj__DEL__dMlN8mvL+LDi2saM9rpMhc3dQY8zMm05Wz8CZ0HzDfQ= +res/edje/2.3.1/wearable_320_x_320/gps_viewer.edj__DEL__gR9usB6uYVDt3HZLtpUxZUCE3vHAWjanJuSmdFMKyi8= +res/edje/2.3.1/wearable_320_x_320/graphics_viewer.edj__DEL__2DG+dMcV3K2df6ZKeNod2U36JkhJ7R1hx9NNFcWJRbc= +res/edje/2.3.1/wearable_320_x_320/image_viewer.edj__DEL__Ln3hOvkfJZRJvkDnRgtBeA6cD0IaHhYw/aqNhgK3DfA= +res/edje/2.3.1/wearable_320_x_320/input_viewer.edj__DEL__T96MAGkPfpk5fnU9CBPSNaoJY2I1WyGXswczfOTegY4= +res/edje/2.3.1/wearable_320_x_320/mock_viewer.edj__DEL__JoRzHXIx4eiKADLx5JCYN1nYpruJ+PTZDAPG9KkuXNk= +res/edje/2.3.1/wearable_320_x_320/nfc_viewer.edj__DEL__A8aJddz36G+62atWmSC9h3c4C5z6vKpnia8cA6izD/E= +res/edje/2.3.1/wearable_320_x_320/pick_viewer.edj__DEL__EZpzXgDNipUOoTbV1jncvMS47xIl3bXVgx0nQmqqxXo= +res/edje/2.3.1/wearable_320_x_320/push_service.edj__DEL__QXRxNo3bqYcrP7ZY/MMhFxKQs394mdDYGBWLOlCbjCg= +res/edje/2.3.1/wearable_320_x_320/runtimeinfo_viewer.edj__DEL__1a4Z+8YjeWleB8gLQ4qb0BKzlXUrc6tuzmwWht6qTOY= +res/edje/2.3.1/wearable_320_x_320/sensor_viewer.edj__DEL__d7ET4K6A2KNjzLbCco61PQ/yBt2so/sAu/e9vNJnQNU= +res/edje/2.3.1/wearable_320_x_320/shortcut_viewer.edj__DEL__9w/dvumHzD/CZVzjqJnZ3P28gd96j9squ9cVF3YSWHI= +res/edje/2.3.1/wearable_320_x_320/sound_player.edj__DEL__ZqPcxUyCaqCoKnM83oMLcFJiPzw2OBbxaYyiC8XaEAg= +res/edje/2.3.1/wearable_320_x_320/touch_viewer.edj__DEL__Ekq5bnNtaz2PPUJsMiSilVWr0zL9jnd9XNRK0bWO0ao= +res/edje/2.3.1/wearable_320_x_320/ui_viewer.edj__DEL__bZcZXnC8zfD96PXSzOEQV7EjXv9N4DlL5CAtsnfYVN8= +res/edje/2.3.1/wearable_320_x_320/video_player.edj__DEL__BgwtbnUWo5EV/T5E4Oa52Fhoj9DCNhRSXBqU723l81k= +res/edje/2.3.1/wearable_320_x_320/wearable_320_x_320_toolbar.edj__DEL__NKDQqz/0/aWKibG1L0DZpEONakdVB+wgVRmcFau3Ngg= +res/edje/2.3.1/wearable_320_x_320/wearable_circle_toolbar.edj__DEL__S+xJ9zuGNvjQuHPM49Nk2q9DVl6V+EINx4Y5aJc3+SQ= +res/edje/2.3.1/wearable_320_x_320/wifi_viewer.edj__DEL__j+sME2Dw8NDtpAa92xgMyqko3y50O554KWzQnl4eWF4= +res/edje/2.3.1/wearable_320_x_320/wifidirect_viewer.edj__DEL__hGqh8EpwBYy6lCXK6bevIVWaC+h8P2gvmR0mksZghcw= +res/edje/2.3.1/wearable_360_x_480/animation_viewer.edj__DEL__VPGSS9tRUIfOIzsarA2630pPHbpbi81ZatZMzNBHsao= +res/edje/2.3.1/wearable_360_x_480/bluetooth_oob_viewer.edj__DEL__IbT/1bjUs1sPfbvtWLk12Wt4kOHSLb1YTrIEJwQZ2no= +res/edje/2.3.1/wearable_360_x_480/bluetooth_viewer.edj__DEL__kTqQprk+U4Qhoc1vkeZG/U9xg5HCS3PmRQy58taM/vM= +res/edje/2.3.1/wearable_360_x_480/camera_viewer.edj__DEL__fTB8YP2lJRCz7VW/+X8ux7XJcMASb9B89MRQI2q1gpA= +res/edje/2.3.1/wearable_360_x_480/custom_button.edj__DEL__+i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= +res/edje/2.3.1/wearable_360_x_480/datacontrol_viewer.edj__DEL__5JpcH+9FY1NkFIE450HwsjXIvLlgHTBgW0SyuBZ1oxI= +res/edje/2.3.1/wearable_360_x_480/display_viewer.edj__DEL__n6eoAkZhEym1Ps3rLl4uSnLZIj4N8rKsNWDLWD/B4ck= +res/edje/2.3.1/wearable_360_x_480/efl_callback_viewer.edj__DEL__1a0NNIMmYzNch4DaUR9yPYHCRgLBeXUSTjCvB8d5K3k= +res/edje/2.3.1/wearable_360_x_480/event_viewer.edj__DEL__h6HGLOwo/eo9qdNqb49debja5Ps+j6jbKky/g+JE2Qw= +res/edje/2.3.1/wearable_360_x_480/feature_viewer.edj__DEL__7GGLi9Csczo07WUeBysn2qrCUQy6DozG41cRUBJvbso= +res/edje/2.3.1/wearable_360_x_480/gps_viewer.edj__DEL__XU0TY3CwVPAaZh2WboiTsixZumnjNlN/HSOMiDs9R4g= +res/edje/2.3.1/wearable_360_x_480/graphics_viewer.edj__DEL__OROzZj+2lsUrjXvaX3W0mJIHC/OnL1LbgmTx9GTxY+A= +res/edje/2.3.1/wearable_360_x_480/image_viewer.edj__DEL__vmK3Wo7ho61vbOsQ7P6Qto4QLaopCju0jDVit5L+Uac= +res/edje/2.3.1/wearable_360_x_480/input_viewer.edj__DEL__FW0hIktjqK981HDbThhjx5DSIw6ZvaeIL3d+j9YZ4qY= +res/edje/2.3.1/wearable_360_x_480/mock_viewer.edj__DEL__Aq+uq61aGfWxLhizz8az4JyACaEqoFmDNAZSW4O9kFo= +res/edje/2.3.1/wearable_360_x_480/nfc_viewer.edj__DEL__+fFkFnqLZInTzP2NsZITmbzOmQwcX9p+2phSns0uJeE= +res/edje/2.3.1/wearable_360_x_480/pick_viewer.edj__DEL__HVUcqrppgQ+26sx43aoxAA7TRpPdjNALL7X5aDHkuTQ= +res/edje/2.3.1/wearable_360_x_480/push_service.edj__DEL__seRZmeGf7ArxTeYpnmid9lkotaZBEbk4dIXQ6RtZtRE= +res/edje/2.3.1/wearable_360_x_480/runtimeinfo_viewer.edj__DEL__FThjbRvkn9RbbgPg2LjqbceGcS6WENJbDzJj7s/t3FY= +res/edje/2.3.1/wearable_360_x_480/sensor_viewer.edj__DEL__lR0HC4RQ22HBjq4EbwOSJKb25ljqyNJ2iBWoJSX4cSM= +res/edje/2.3.1/wearable_360_x_480/shortcut_viewer.edj__DEL__OpEW9ySn9l8+cbngUauK9PIcDVB8pqgO1dUNgwoD3eA= +res/edje/2.3.1/wearable_360_x_480/sound_player.edj__DEL__6OndEJIbesi3hm4EAUmPpFsPUsWDPeHWpn9zNoI5SME= +res/edje/2.3.1/wearable_360_x_480/touch_viewer.edj__DEL__2HY3YSEv2sa6aYsW2sIXGpM7QwjP7a8TD3+f941VsA4= +res/edje/2.3.1/wearable_360_x_480/ui_viewer.edj__DEL__J4Qti6bvp9yj+3+vAB4RfMsxVQ2vW12G8Gq3Kt/7o4E= +res/edje/2.3.1/wearable_360_x_480/video_player.edj__DEL__VehSwjlGujy1L3rQvWUpqYAOEdxF7SG/57b0A14dm5U= +res/edje/2.3.1/wearable_360_x_480/wearable_360_x_480_toolbar.edj__DEL__Cs1DgAm+j483QxrpTe/SJHGk37O+uXv9grDmLeNhAjI= +res/edje/2.3.1/wearable_360_x_480/wifi_viewer.edj__DEL__xAhB2Xkj/DGsuWeWowQ+zzvdEl0Mb0uwwa6bA9lbDWc= +res/edje/2.3.1/wearable_360_x_480/wifidirect_info_viewer.edj__DEL__JCRihpuU6a+tJVUAZHG3/3xGQRgXklhcq81sxX9cDMo= +res/edje/2.3.1/wearable_360_x_480/wifidirect_viewer.edj__DEL__L9E3bhUQ55TV+i+9MCtTeTfABFFiJDQzaHOQpyKPWlo= +res/edje/2.3.1/wearable_circle/animation_viewer.edj__DEL__ebgGKBkUoePU9rMLITjSouk1bDRq5unGm8SwkPMUH10= +res/edje/2.3.1/wearable_circle/bluetooth_oob_viewer.edj__DEL__Lom9hbNYXt61LGw7B0yNpsUn3gFOBhFPg14hk4Vf1lo= +res/edje/2.3.1/wearable_circle/bluetooth_viewer.edj__DEL__Vem9fbIUnB+85vROnHzWr15p2dhRkGGaKsNYQpCuXsA= +res/edje/2.3.1/wearable_circle/camera_viewer.edj__DEL__xhp8YCSpYmDmCAit1o4zGp4CsFT+aDFIcNxuDmnW7w0= +res/edje/2.3.1/wearable_circle/custom_button.edj__DEL__+i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= +res/edje/2.3.1/wearable_circle/datacontrol_viewer.edj__DEL__uGaYw1TvhYqJTgB2+LW4aEeFFfOXvdrAj7tUfBQKWQ8= +res/edje/2.3.1/wearable_circle/display_viewer.edj__DEL__GJhc9jhIN/QITdrER/Baux08K/9EdoSCIUh2AjunrZg= +res/edje/2.3.1/wearable_circle/efl_callback_viewer.edj__DEL__M79Bh9reqTUhRkjr94XJFphhB0ht7PMscLlgGliYj5Y= +res/edje/2.3.1/wearable_circle/event_viewer.edj__DEL__2NPmuSBrPeApVGu1m8XchSAuseX/ZE7rv9DZDiyyoMA= +res/edje/2.3.1/wearable_circle/feature_viewer.edj__DEL__79AeVMrhqAdXMunOTtyGk9LdZYYHl20eDYGvdbsVN6U= +res/edje/2.3.1/wearable_circle/gps_viewer.edj__DEL__0H1xpLQuq6AkUYei1k8SK+MJvWxb49sC/tc+WqY8xX8= +res/edje/2.3.1/wearable_circle/graphics_viewer.edj__DEL__9l1Lnn8oEN17rpiRG2+7PRZx53yjkrCYdBgE6Cu5aoU= +res/edje/2.3.1/wearable_circle/image_viewer.edj__DEL__8jmEKbpgSsoetkanO3di6fgOqRVBfUzSz1JtqhyykrM= +res/edje/2.3.1/wearable_circle/input_viewer.edj__DEL__PzxWR73/uVzgdLUOPkxXnj+0UFjPdl85pXvBBqp/+S8= +res/edje/2.3.1/wearable_circle/mock_viewer.edj__DEL__F7/yVemsWsf6JdtZbLum7iELn8P9fImnl91fftkdWkk= +res/edje/2.3.1/wearable_circle/nfc_viewer.edj__DEL__HAofdyPkxlDKM6OrA1E7UarBNqsD34PRazUdubOuQJY= +res/edje/2.3.1/wearable_circle/pick_viewer.edj__DEL__BVjAXRYFYd+Kx3+dwooZiRzd1P0FVZ/Jo+ObqXXg4Zo= +res/edje/2.3.1/wearable_circle/push_service.edj__DEL__orWoEj2Hn6dI3gOVOfaNENeV5eaJpkUjGJZuOjaIHwY= +res/edje/2.3.1/wearable_circle/runtimeinfo_viewer.edj__DEL__3pE3FL3QabUV7xzDf3Ug0K2dc5OauDwBGHFa8A8BehY= +res/edje/2.3.1/wearable_circle/sensor_viewer.edj__DEL__snp9Oz5ugwe848GsSdRViZaQazVInlx+DQm6sioxTLo= +res/edje/2.3.1/wearable_circle/shortcut_viewer.edj__DEL__PygyInV4NRBuhCoTWmx6EAxHUmJ6P+H0qgRue6X5s04= +res/edje/2.3.1/wearable_circle/sound_player.edj__DEL__9nLUBdD3cfhNeOeD9EBOxZv+8kZtFanjLPBWZMAN1jQ= +res/edje/2.3.1/wearable_circle/touch_viewer.edj__DEL__CMhH3IjiARn6Jc6i28EB58ch5O7SWtaJgEW4bnpJFLg= +res/edje/2.3.1/wearable_circle/ui_viewer.edj__DEL__TQG/nAb6SXFAth/KVBFFIpXAECs6Lv8Onk/Ikcx2XoE= +res/edje/2.3.1/wearable_circle/video_player.edj__DEL__dA4VvbRLmWbB/dnid+VX8m2uGUm8N2ZUalQF47KcEzk= +res/edje/2.3.1/wearable_circle/wearable_circle_toolbar.edj__DEL__S+xJ9zuGNvjQuHPM49Nk2q9DVl6V+EINx4Y5aJc3+SQ= +res/edje/2.3.1/wearable_circle/wifi_viewer.edj__DEL__Mg2EF4CGIJ71KL307DbesTGfA2M88zF9IdpojV5OqWg= +res/edje/2.3.1/wearable_circle/wifidirect_viewer.edj__DEL__D35yQwKPYx4gMqw8hG8TqUp8VAbsKteVPBKfBZx6pXw= +res/edje/2.4/mobile/animation_viewer.edj__DEL__BySKx5JhNZf9x+NGjt6Aob1ovmD9n0MsL2x79bpr3hc= +res/edje/2.4/mobile/bluetooth_le_viewer.edj__DEL__G66P0h1v8e8E7KIAEzFgIBnDk0hGdzG61edNJiFOjtQ= +res/edje/2.4/mobile/bluetooth_oob_viewer.edj__DEL__xGg0exy7+uCt/tlTop6RkVPFiths5ACNhPp81XFShF0= +res/edje/2.4/mobile/bluetooth_viewer.edj__DEL__KUCyGZXaC/gKFQiXdO7eo0BJr3oyOS88h2hcxP0/J4c= +res/edje/2.4/mobile/camera_viewer.edj__DEL__NNQT/yEcx6DyTLwr51EF/6cl6Cd3r7MU4aeoqZYrrhk= +res/edje/2.4/mobile/custom_button.edj__DEL__+i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= +res/edje/2.4/mobile/datacontrol_viewer.edj__DEL__NPjIfX0Zs6KDBZ91tWFuMZ0d1JDtkaDDkNpwSZTF0CQ= +res/edje/2.4/mobile/display_viewer.edj__DEL__TBWh7O71HMyR1s4gTZa7awVyFc5ObFwm2Vg27cfJi4U= +res/edje/2.4/mobile/efl_callback_viewer.edj__DEL__Yl5pcGC+aaUttFqg3BlmX1T+x3gSwQy6kGwTdy91pA0= +res/edje/2.4/mobile/event_viewer.edj__DEL__etSJ4FmglbezOhioAp5jHlnm6qCm5pZgMopSGlc5aw0= +res/edje/2.4/mobile/feature_viewer.edj__DEL__qcfEhVFTaIb0CneJGcoExb0fJTV6tDynYUwUqy/L0M0= +res/edje/2.4/mobile/gps_viewer.edj__DEL__J98ZfHq4bdWnPOgeCNf3F8qo9dP+uHSdgQObx3rnWDs= +res/edje/2.4/mobile/graphics_viewer.edj__DEL__TyIhCQxutHD3GsJVX+WdzaEAIylOU4ntVbL9A6C+pDw= +res/edje/2.4/mobile/image_viewer.edj__DEL__ooShq1VkAli/KknKQ+zOnuwJAk9OWn0Bh1lNxZorTI4= +res/edje/2.4/mobile/ime_viewer.edj__DEL__Vp29/hnzXgOembUYMP5p9ZrxWtFCUE+QrXuS96GTNOo= +res/edje/2.4/mobile/input_viewer.edj__DEL__gRRHQYx76dbcB/HajVrUPI4vTz4b4sKVBPJvC2qGw8w= +res/edje/2.4/mobile/mock_viewer.edj__DEL__E77yN193qtqgrWDb+8jNAnLTtBQo/lKC966Ugl4wywc= +res/edje/2.4/mobile/nfc_viewer.edj__DEL__NR+V2/fsamyc3j+o3mEKNueunE9O/cfXU1ps8uMKsbk= +res/edje/2.4/mobile/oauth2_info_viewer.edj__DEL__fWsexo76+zPFRRa94E0XrV9j7R8PzA2Opv2qMT7YtPo= +res/edje/2.4/mobile/oauth2_viewer.edj__DEL__a6kSUlRblP8RO9VAdvkgKGgNSYyZGYX1dQgP29atSUk= +res/edje/2.4/mobile/pick_viewer.edj__DEL__uclTKM5yI54wkWVBnSeMA6jtxR9ZpE8ohPAblMpd1Jc= +res/edje/2.4/mobile/push_service.edj__DEL__+aI+FVzXr+4QpzvLlgDbjGmwj7Sl7dDa51f8RHb1qMM= +res/edje/2.4/mobile/runtimeinfo_viewer.edj__DEL__Eg0Ptn2GtQNTNiU/LJhLayX6x6nCgiGUaddsO5ZH4Ho= +res/edje/2.4/mobile/sensor_viewer.edj__DEL__Z5sas4R627HMhGGY/zld99cp4C2/ly247Fab+6Oxg/w= +res/edje/2.4/mobile/shortcut_viewer.edj__DEL__VW7+JUTg+NwsWrgTSt+kefyxpV4nmOv6lh+fPFZ3frA= +res/edje/2.4/mobile/sound_player.edj__DEL__TRZHlKCDnydwFE8V/yPhMzzHUwETZVxKr//3v64imqw= +res/edje/2.4/mobile/touch_viewer.edj__DEL__5tH4ucGylosLrGSBOfqi4azmmaoEK4R9alEWCgR6plY= +res/edje/2.4/mobile/ui_viewer.edj__DEL__wr1LumUF5WUb5fRnFA5bJ3AGVlIP68BgoezhymIDkm8= +res/edje/2.4/mobile/video_player.edj__DEL__mozqsGbt/uHGrPYmoAuXMzS7V/g2CXjm9puRM18VumI= +res/edje/2.4/mobile/wifi_viewer.edj__DEL__9cDAk+d9rfNHTSsqhb40l0Wj5qprX7JZ52KpWp4nY9g= +res/edje/2.4/mobile/wifidirect_info_viewer.edj__DEL__Nc5BKAvLM8RxA0EvJl+dQ2G0zHimtBENIU80d359HUk= +res/edje/2.4/mobile/wifidirect_viewer.edj__DEL__dsqTz9+nsI4j3PKBUo1Q9m/Lx1CRvN2ocyAsBcYmUxE= +res/edje/2.4/wearable/animation_viewer.edj__DEL__q6qlTgfTDXCu6LJNjh0OdWrikpIQ2r5y87Ff6gENiE8= +res/edje/2.4/wearable/bluetooth_oob_viewer.edj__DEL__zaXYV1izyPjrkTgdFld0Aig8lTdZBmBFHfpLk2Z80yI= +res/edje/2.4/wearable/bluetooth_viewer.edj__DEL__jzy79WpT78mq4nDlke/34XEvrKxGUO+2EpR6K7XxfpA= +res/edje/2.4/wearable/camera_viewer.edj__DEL__TYc7NLno0IPtZ3vJUSbv7x2egE6uOM+jjT9hLy44SaQ= +res/edje/2.4/wearable/custom_button.edj__DEL__+i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= +res/edje/2.4/wearable/datacontrol_viewer.edj__DEL__YJsawxBl4v8gOPS2gtOeP2dunWNT2h82VTS4m0PLJuE= +res/edje/2.4/wearable/display_viewer.edj__DEL__GEj/x2grCuJ4jyXwtCv0iPWmZMur8uyTxen9ujtchuo= +res/edje/2.4/wearable/efl_callback_viewer.edj__DEL__hs7yf+kk/AZ1IfYKYVAabnmDjU9TbEHZp3EmAUmC0E4= +res/edje/2.4/wearable/event_viewer.edj__DEL__HxAowejDwPIHR7Juav5eSErD3RkNSJeU3ec/nkkj8Io= +res/edje/2.4/wearable/feature_viewer.edj__DEL__6CDrh3wGZ5c4DjHzzLOGxvyGluSW2IbpS6hwxqha8Os= +res/edje/2.4/wearable/gps_viewer.edj__DEL__vP3jrgLTrPvh2IjuJJpDko1Be2E53orobcjHGJM+Mws= +res/edje/2.4/wearable/graphics_viewer.edj__DEL__S89gYFLEoETwO4asJLop3GCR+4B6hBLVuhRuFJBeh9g= +res/edje/2.4/wearable/image_viewer.edj__DEL__4T4P1eYVZ6WUn0tVe8kaIHIisQJallHCR5xRby6EowE= +res/edje/2.4/wearable/input_viewer.edj__DEL__9BGi10BCQqVHHZLnZtjSZaw81xd+s8U9cOZxQ3oMA/Y= +res/edje/2.4/wearable/mock_viewer.edj__DEL__3vBrkdY8//iJCv3fsQ2CF7dDcFhQZI4LcXf/ek9eQkk= +res/edje/2.4/wearable/nfc_viewer.edj__DEL__xtlvroyjhj69h9U4bfVmDYUsCan8/eoXuvIz6+dbLV8= +res/edje/2.4/wearable/pick_viewer.edj__DEL__IM4aA5H/BcnHGHoSjHRU+6xpF24MkAJogOpYaS/L71o= +res/edje/2.4/wearable/push_service.edj__DEL__xxlnKX11mozHbi4aD2YyH81GP0zK3pp8Xb6ksI3OEbk= +res/edje/2.4/wearable/runtimeinfo_viewer.edj__DEL__CUt71aBDXeoFcRsajRWyvd/MuUuYWWZcOV2ILgDKT+A= +res/edje/2.4/wearable/sensor_viewer.edj__DEL__krEXlVBUFKl5O3nV1+VsPkCiE9dfSArbJBlz2tX7JEs= +res/edje/2.4/wearable/shortcut_viewer.edj__DEL__LcetW8bP+g0JnjfpGKLB/+I/x4VcZumPQhv6PMhBOng= +res/edje/2.4/wearable/sound_player.edj__DEL__ft8pnryry1TTGAqf+EkRctr0SlOP2b0dT/SYJuwz8RU= +res/edje/2.4/wearable/touch_viewer.edj__DEL__nnaNbWfuxmT2sXlRY07xQEpwMUpn6IFRrOaD3iD9S6Q= +res/edje/2.4/wearable/ui_viewer.edj__DEL__sNf2sdccsJI813Oq89pqfpmL0CnkA7Us7s1ECpx2ees= +res/edje/2.4/wearable/video_player.edj__DEL__T0C9o1sRz5C6Gd4pTIPa+xysJz66cTkjN015UgppJVQ= +res/edje/2.4/wearable/wearable_toolbar.edj__DEL__iHhcpjOZmvOKOBAy+BY1vLlWSTJNpadZAEXaCaKptvE= +res/edje/2.4/wearable/wifi_viewer.edj__DEL__g0zOTn7v3LGrlSvNkHct6ScVAJhrR8IV/Zz0y5Eu0v8= +res/edje/2.4/wearable/wifidirect_info_viewer.edj__DEL__wV2svWaHFJoyctGj/TEKfpmXqTkU2p+Qgp/Bb597reE= +res/edje/2.4/wearable/wifidirect_viewer.edj__DEL__n28YFSI00RbMJPBZSbdP0OQQsvxdNzpn2GWt2+PrbPc= +res/edje/2.4/wearable_320_x_320/animation_viewer.edj__DEL__iZsnY+0m52xxT3UdsYZs7ub79A9ABAJUN6KS0HYbd3E= +res/edje/2.4/wearable_320_x_320/bluetooth_oob_viewer.edj__DEL__caSciNEjN2lsIvVdJCTjcg2HyVGomOV+b2DwstJyYBo= +res/edje/2.4/wearable_320_x_320/bluetooth_viewer.edj__DEL__denQwZ0e0PuGnB9morvFKElS+PrAiqXEut2sIEMch0Y= +res/edje/2.4/wearable_320_x_320/camera_viewer.edj__DEL__7brYAIYlmlbdEVfg0KJ3W3uDQkTGJVVB2uvdo7QR9vQ= +res/edje/2.4/wearable_320_x_320/custom_button.edj__DEL__+i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= +res/edje/2.4/wearable_320_x_320/datacontrol_viewer.edj__DEL__B0t/srQ7H6oeF9hA1LpkYZcbS4UVKKAaMYlxAFuXO3E= +res/edje/2.4/wearable_320_x_320/display_viewer.edj__DEL__62E/o5MuUnOSVBaRZSdKbhv0lscE8Gg/HJ7dTvBQRM0= +res/edje/2.4/wearable_320_x_320/efl_callback_viewer.edj__DEL__XMVVYcc56cbDI4Pd8Te6fghAJdUGvO1LlcyCkq8K8Ac= +res/edje/2.4/wearable_320_x_320/event_viewer.edj__DEL__cfE5dtbr1Dt80JonqZ2eviZT6EkVxkRBvdwyM+K4EHg= +res/edje/2.4/wearable_320_x_320/feature_viewer.edj__DEL__dMlN8mvL+LDi2saM9rpMhc3dQY8zMm05Wz8CZ0HzDfQ= +res/edje/2.4/wearable_320_x_320/gps_viewer.edj__DEL__gR9usB6uYVDt3HZLtpUxZUCE3vHAWjanJuSmdFMKyi8= +res/edje/2.4/wearable_320_x_320/graphics_viewer.edj__DEL__2DG+dMcV3K2df6ZKeNod2U36JkhJ7R1hx9NNFcWJRbc= +res/edje/2.4/wearable_320_x_320/image_viewer.edj__DEL__Ln3hOvkfJZRJvkDnRgtBeA6cD0IaHhYw/aqNhgK3DfA= +res/edje/2.4/wearable_320_x_320/input_viewer.edj__DEL__T96MAGkPfpk5fnU9CBPSNaoJY2I1WyGXswczfOTegY4= +res/edje/2.4/wearable_320_x_320/mock_viewer.edj__DEL__JoRzHXIx4eiKADLx5JCYN1nYpruJ+PTZDAPG9KkuXNk= +res/edje/2.4/wearable_320_x_320/nfc_viewer.edj__DEL__A8aJddz36G+62atWmSC9h3c4C5z6vKpnia8cA6izD/E= +res/edje/2.4/wearable_320_x_320/pick_viewer.edj__DEL__EZpzXgDNipUOoTbV1jncvMS47xIl3bXVgx0nQmqqxXo= +res/edje/2.4/wearable_320_x_320/push_service.edj__DEL__QXRxNo3bqYcrP7ZY/MMhFxKQs394mdDYGBWLOlCbjCg= +res/edje/2.4/wearable_320_x_320/runtimeinfo_viewer.edj__DEL__1a4Z+8YjeWleB8gLQ4qb0BKzlXUrc6tuzmwWht6qTOY= +res/edje/2.4/wearable_320_x_320/sensor_viewer.edj__DEL__d7ET4K6A2KNjzLbCco61PQ/yBt2so/sAu/e9vNJnQNU= +res/edje/2.4/wearable_320_x_320/shortcut_viewer.edj__DEL__9w/dvumHzD/CZVzjqJnZ3P28gd96j9squ9cVF3YSWHI= +res/edje/2.4/wearable_320_x_320/sound_player.edj__DEL__ZqPcxUyCaqCoKnM83oMLcFJiPzw2OBbxaYyiC8XaEAg= +res/edje/2.4/wearable_320_x_320/touch_viewer.edj__DEL__Ekq5bnNtaz2PPUJsMiSilVWr0zL9jnd9XNRK0bWO0ao= +res/edje/2.4/wearable_320_x_320/ui_viewer.edj__DEL__bZcZXnC8zfD96PXSzOEQV7EjXv9N4DlL5CAtsnfYVN8= +res/edje/2.4/wearable_320_x_320/video_player.edj__DEL__Eew7dcF/G+r98PbrMKOoAoXbQM1JFYDxP6yQlFYuruE= +res/edje/2.4/wearable_320_x_320/wearable_320_x_320_toolbar.edj__DEL__NKDQqz/0/aWKibG1L0DZpEONakdVB+wgVRmcFau3Ngg= +res/edje/2.4/wearable_320_x_320/wifi_viewer.edj__DEL__j+sME2Dw8NDtpAa92xgMyqko3y50O554KWzQnl4eWF4= +res/edje/2.4/wearable_320_x_320/wifidirect_viewer.edj__DEL__hGqh8EpwBYy6lCXK6bevIVWaC+h8P2gvmR0mksZghcw= +res/edje/2.4/wearable_360_x_480/animation_viewer.edj__DEL__VPGSS9tRUIfOIzsarA2630pPHbpbi81ZatZMzNBHsao= +res/edje/2.4/wearable_360_x_480/bluetooth_oob_viewer.edj__DEL__IbT/1bjUs1sPfbvtWLk12Wt4kOHSLb1YTrIEJwQZ2no= +res/edje/2.4/wearable_360_x_480/bluetooth_viewer.edj__DEL__kTqQprk+U4Qhoc1vkeZG/U9xg5HCS3PmRQy58taM/vM= +res/edje/2.4/wearable_360_x_480/camera_viewer.edj__DEL__03ESu7fr3UI0qrvfWd4Datj5EtHgjYCCiNrrZYQQvKA= +res/edje/2.4/wearable_360_x_480/custom_button.edj__DEL__+i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= +res/edje/2.4/wearable_360_x_480/datacontrol_viewer.edj__DEL__kHQYk81qtwceXcZNxO3PWfTNjW4+rzInp6KBUL7Y5lE= +res/edje/2.4/wearable_360_x_480/display_viewer.edj__DEL__n6eoAkZhEym1Ps3rLl4uSnLZIj4N8rKsNWDLWD/B4ck= +res/edje/2.4/wearable_360_x_480/efl_callback_viewer.edj__DEL__1a0NNIMmYzNch4DaUR9yPYHCRgLBeXUSTjCvB8d5K3k= +res/edje/2.4/wearable_360_x_480/event_viewer.edj__DEL__h6HGLOwo/eo9qdNqb49debja5Ps+j6jbKky/g+JE2Qw= +res/edje/2.4/wearable_360_x_480/feature_viewer.edj__DEL__7GGLi9Csczo07WUeBysn2qrCUQy6DozG41cRUBJvbso= +res/edje/2.4/wearable_360_x_480/gps_viewer.edj__DEL__XU0TY3CwVPAaZh2WboiTsixZumnjNlN/HSOMiDs9R4g= +res/edje/2.4/wearable_360_x_480/graphics_viewer.edj__DEL__OROzZj+2lsUrjXvaX3W0mJIHC/OnL1LbgmTx9GTxY+A= +res/edje/2.4/wearable_360_x_480/image_viewer.edj__DEL__vmK3Wo7ho61vbOsQ7P6Qto4QLaopCju0jDVit5L+Uac= +res/edje/2.4/wearable_360_x_480/input_viewer.edj__DEL__FW0hIktjqK981HDbThhjx5DSIw6ZvaeIL3d+j9YZ4qY= +res/edje/2.4/wearable_360_x_480/mock_viewer.edj__DEL__Aq+uq61aGfWxLhizz8az4JyACaEqoFmDNAZSW4O9kFo= +res/edje/2.4/wearable_360_x_480/nfc_viewer.edj__DEL__+fFkFnqLZInTzP2NsZITmbzOmQwcX9p+2phSns0uJeE= +res/edje/2.4/wearable_360_x_480/pick_viewer.edj__DEL__HVUcqrppgQ+26sx43aoxAA7TRpPdjNALL7X5aDHkuTQ= +res/edje/2.4/wearable_360_x_480/push_service.edj__DEL__seRZmeGf7ArxTeYpnmid9lkotaZBEbk4dIXQ6RtZtRE= +res/edje/2.4/wearable_360_x_480/runtimeinfo_viewer.edj__DEL__FThjbRvkn9RbbgPg2LjqbceGcS6WENJbDzJj7s/t3FY= +res/edje/2.4/wearable_360_x_480/sensor_viewer.edj__DEL__lR0HC4RQ22HBjq4EbwOSJKb25ljqyNJ2iBWoJSX4cSM= +res/edje/2.4/wearable_360_x_480/shortcut_viewer.edj__DEL__OpEW9ySn9l8+cbngUauK9PIcDVB8pqgO1dUNgwoD3eA= +res/edje/2.4/wearable_360_x_480/sound_player.edj__DEL__6OndEJIbesi3hm4EAUmPpFsPUsWDPeHWpn9zNoI5SME= +res/edje/2.4/wearable_360_x_480/touch_viewer.edj__DEL__2HY3YSEv2sa6aYsW2sIXGpM7QwjP7a8TD3+f941VsA4= +res/edje/2.4/wearable_360_x_480/ui_viewer.edj__DEL__J4Qti6bvp9yj+3+vAB4RfMsxVQ2vW12G8Gq3Kt/7o4E= +res/edje/2.4/wearable_360_x_480/video_player.edj__DEL__NMZeiWTWwvadEH9vhXiKjhT9dqrfjuzzMDcP0OC6Tl0= +res/edje/2.4/wearable_360_x_480/wearable_360_x_480_toolbar.edj__DEL__Cs1DgAm+j483QxrpTe/SJHGk37O+uXv9grDmLeNhAjI= +res/edje/2.4/wearable_360_x_480/wifi_viewer.edj__DEL__xAhB2Xkj/DGsuWeWowQ+zzvdEl0Mb0uwwa6bA9lbDWc= +res/edje/2.4/wearable_360_x_480/wifidirect_info_viewer.edj__DEL__JCRihpuU6a+tJVUAZHG3/3xGQRgXklhcq81sxX9cDMo= +res/edje/2.4/wearable_360_x_480/wifidirect_viewer.edj__DEL__L9E3bhUQ55TV+i+9MCtTeTfABFFiJDQzaHOQpyKPWlo= +res/edje/2.4/wearable_circle/animation_viewer.edj__DEL__ebgGKBkUoePU9rMLITjSouk1bDRq5unGm8SwkPMUH10= +res/edje/2.4/wearable_circle/bluetooth_oob_viewer.edj__DEL__Lom9hbNYXt61LGw7B0yNpsUn3gFOBhFPg14hk4Vf1lo= +res/edje/2.4/wearable_circle/bluetooth_viewer.edj__DEL__Vem9fbIUnB+85vROnHzWr15p2dhRkGGaKsNYQpCuXsA= +res/edje/2.4/wearable_circle/camera_viewer.edj__DEL__xhp8YCSpYmDmCAit1o4zGp4CsFT+aDFIcNxuDmnW7w0= +res/edje/2.4/wearable_circle/custom_button.edj__DEL__+i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= +res/edje/2.4/wearable_circle/datacontrol_viewer.edj__DEL__SNGOvL8uw/+Bw5NUV3FBfNTH0ImPDinsBvpDAsupmXI= +res/edje/2.4/wearable_circle/display_viewer.edj__DEL__GJhc9jhIN/QITdrER/Baux08K/9EdoSCIUh2AjunrZg= +res/edje/2.4/wearable_circle/efl_callback_viewer.edj__DEL__M79Bh9reqTUhRkjr94XJFphhB0ht7PMscLlgGliYj5Y= +res/edje/2.4/wearable_circle/event_viewer.edj__DEL__2NPmuSBrPeApVGu1m8XchSAuseX/ZE7rv9DZDiyyoMA= +res/edje/2.4/wearable_circle/feature_viewer.edj__DEL__79AeVMrhqAdXMunOTtyGk9LdZYYHl20eDYGvdbsVN6U= +res/edje/2.4/wearable_circle/gps_viewer.edj__DEL__0H1xpLQuq6AkUYei1k8SK+MJvWxb49sC/tc+WqY8xX8= +res/edje/2.4/wearable_circle/graphics_viewer.edj__DEL__9l1Lnn8oEN17rpiRG2+7PRZx53yjkrCYdBgE6Cu5aoU= +res/edje/2.4/wearable_circle/image_viewer.edj__DEL__8jmEKbpgSsoetkanO3di6fgOqRVBfUzSz1JtqhyykrM= +res/edje/2.4/wearable_circle/input_viewer.edj__DEL__PzxWR73/uVzgdLUOPkxXnj+0UFjPdl85pXvBBqp/+S8= +res/edje/2.4/wearable_circle/mock_viewer.edj__DEL__F7/yVemsWsf6JdtZbLum7iELn8P9fImnl91fftkdWkk= +res/edje/2.4/wearable_circle/nfc_viewer.edj__DEL__HAofdyPkxlDKM6OrA1E7UarBNqsD34PRazUdubOuQJY= +res/edje/2.4/wearable_circle/pick_viewer.edj__DEL__BVjAXRYFYd+Kx3+dwooZiRzd1P0FVZ/Jo+ObqXXg4Zo= +res/edje/2.4/wearable_circle/push_service.edj__DEL__orWoEj2Hn6dI3gOVOfaNENeV5eaJpkUjGJZuOjaIHwY= +res/edje/2.4/wearable_circle/runtimeinfo_viewer.edj__DEL__3pE3FL3QabUV7xzDf3Ug0K2dc5OauDwBGHFa8A8BehY= +res/edje/2.4/wearable_circle/sensor_viewer.edj__DEL__snp9Oz5ugwe848GsSdRViZaQazVInlx+DQm6sioxTLo= +res/edje/2.4/wearable_circle/shortcut_viewer.edj__DEL__PygyInV4NRBuhCoTWmx6EAxHUmJ6P+H0qgRue6X5s04= +res/edje/2.4/wearable_circle/sound_player.edj__DEL__9nLUBdD3cfhNeOeD9EBOxZv+8kZtFanjLPBWZMAN1jQ= +res/edje/2.4/wearable_circle/touch_viewer.edj__DEL__CMhH3IjiARn6Jc6i28EB58ch5O7SWtaJgEW4bnpJFLg= +res/edje/2.4/wearable_circle/ui_viewer.edj__DEL__TQG/nAb6SXFAth/KVBFFIpXAECs6Lv8Onk/Ikcx2XoE= +res/edje/2.4/wearable_circle/video_player.edj__DEL__1C+4xtltuE99m/Ys4sHtQdJAFFaoe3doAUPDI5FqbWo= +res/edje/2.4/wearable_circle/wearable_circle_toolbar.edj__DEL__S+xJ9zuGNvjQuHPM49Nk2q9DVl6V+EINx4Y5aJc3+SQ= +res/edje/2.4/wearable_circle/wifi_viewer.edj__DEL__Mg2EF4CGIJ71KL307DbesTGfA2M88zF9IdpojV5OqWg= +res/edje/2.4/wearable_circle/wifidirect_viewer.edj__DEL__D35yQwKPYx4gMqw8hG8TqUp8VAbsKteVPBKfBZx6pXw= +res/icon/app_failed.png__DEL__fYpjyE+Coh3VdAVMucXLFlr5ZvE21zBI7DeTPu1+T3A= +res/icon/app_not_supported.png__DEL__oxX3kz7Ot/nqJSKn/nUzwMevCidLhyYtyaGDGpI1138= +res/icon/app_not_tested.png__DEL__Kmx0h55Ed3OX+LfpPvK6aAkkbSd+HAcpQG0YJs3e5j8= +res/icon/app_passed.png__DEL__8CwVuc1KIdhqjwJI1c4FOgIJNUgJVlBKxJzdCmhw3OY= +res/images/AGIF/animated.gif__DEL__IVAscuPnZ4wVpmldkPJrq7jKmfVqLk9+u4UtU1n1+PI= +res/images/YUV/dog_1024x960_uyvy.raw__DEL__Hr+XrvjrRcLYvoJG08Mzg9/+GKA7xdKvVMruUS4/LvU= +res/images/YUV/foreman_cif.yuv__DEL__FJxm9+48FVrc3PKCvbO2uJmcmcrAP41hEj4F/xjI4c4= +res/images/arrow_.png__DEL__gQvcj3+fTNB3J8ElU2vrlmN/f7cc/8DdOjDxLBzUNNo= +res/images/audio-icon.png__DEL__649u10Yowy+c8CSRIqoVgRGUg39hgPt/H2NgwHEL31w= +res/images/dial.png__DEL__LKygsuD9H8tSb+gZlp/5WIyzDWSRGjh1ht9h0yejaBw= +res/images/dog_1024_960.gif__DEL__P9zQhWirRATIEPR8/4/vj4qr6sxJy1p3fNwDqPxhTMk= +res/images/giraffe_800_1179.jpg__DEL__PemByZhsVq5SUSdoQz8eT2Cn32CB99VNdrW9My2HXYw= +res/images/home_640_432.png__DEL__X9i7g6euubn9+sjoN1SqXEEiIywqXmx/Rgw2fanPTxY= +res/images/lightoff.png__DEL__SciIKS7ynwuDz9B47+dDBc8wtxjc6I7ttE0martwMsI= +res/images/lighton.png__DEL__vHZwgimbQnp6cTxcY3G71tnj19pWhkAzKsYBS1tIOuI= +res/images/mic.png__DEL__R4IqERvdTsZ/grlYSpJjBMpLwkRUkdBOqzJfz7JfPKw= +res/images/pebble_689_517.jpg__DEL__1/p9dJr33nY1C0XgKEdCpZrZUb8t5qXaihqd6/pCiE4= +res/images/plane_1024_768.png__DEL__HsFpCbHKX3rrw08m0uvLQePPMJFo7jRyhiOciyFA3r0= +res/images/squee.gif__DEL__j6BXQz+viQp8MffUhE/UEL/mKldHk6qama3FZ50Jjso= +res/images/zebra_1024_680.bmp__DEL__u4GpeYBVMfIgd8mMhre2dPJaK0Yopx6LC2ygrg5xcJ8= +res/sounds/PreProcessedAudioAAC.raw__DEL__206uuAe2w6eHcEKoG8TeByiBPK+bDF4/B5kCEZ5h9bo= +res/sounds/PreProcessedAudioAMR.raw__DEL__tmW5EGuSb50QJqkOwuGfcDN5MVn50wh63hiuYbvsq0Q= +res/sounds/PreProcessedAudioPCM.raw__DEL__j4nd57eJ6gN5FWaUwlVl4wudh6saRuzsUeyEU8l5Vd8= +res/sounds/SampleAAC.aac__DEL__64PwPoOGUPlBBpkt2MF8AIVek40pBIs1Y/uSm8K0N1M= +res/sounds/SampleAMR.amr__DEL__Su9TpqYuX1RK9qph0qTlIWoSJA/m/eGw4hVBctMT3iY= +res/sounds/SampleMP3.mp3__DEL__+kvOvmsOCnArB291kMLmUu2a3yqKASzncXz3iduAcx4= +res/sounds/SampleWAV.wav__DEL__uDSQ4I8u18tkS5QMInERJUYcIvDukY8RBY+AtelDQrs= +res/video/sampleH263.3gp__DEL__JG5Ot1y71B5LxwdNMpQsnl92z1puAsLnBCI/na46x5k= +res/video/sampleH264.mp4__DEL__/ANEStYoGJyiETrYIUuNYJg9k6irr0iR4yWtu1zDsPI= +res/video/sampleMPEG4.mp4__DEL__6X8RcJ69rWmrhbKtOmxi06RQ2H6VDBhv1wh8XSJH8Ds= +shared/res/images/giraffe_800_1179.jpg__DEL__PemByZhsVq5SUSdoQz8eT2Cn32CB99VNdrW9My2HXYw= +shared/res/tbtcoreapp.png__DEL__1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= +tizen-manifest.xml__DEL__rckkorXtmaFI0u9RxO76oPTwcC5bDt+nvp92XSLJdwk= +author-signature.xml__DEL__nwPkCU64d5mPCv7++/f3onVoalt+wbwbVrBJ7JD8ddc= diff --git a/tbtcoreapp/.sign/author-signature.xml b/tbtcoreapp/.sign/author-signature.xml new file mode 100644 index 0000000..1955232 --- /dev/null +++ b/tbtcoreapp/.sign/author-signature.xml @@ -0,0 +1,1350 @@ + + + + + + +M6EoYeHUF3qUZzeuuh6jUg/hKG/a2DpCw2RNicTyMaY= + + + +BySKx5JhNZf9x+NGjt6Aob1ovmD9n0MsL2x79bpr3hc= + + + +G66P0h1v8e8E7KIAEzFgIBnDk0hGdzG61edNJiFOjtQ= + + + +xGg0exy7+uCt/tlTop6RkVPFiths5ACNhPp81XFShF0= + + + +KUCyGZXaC/gKFQiXdO7eo0BJr3oyOS88h2hcxP0/J4c= + + + +NNQT/yEcx6DyTLwr51EF/6cl6Cd3r7MU4aeoqZYrrhk= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +NPjIfX0Zs6KDBZ91tWFuMZ0d1JDtkaDDkNpwSZTF0CQ= + + + +TBWh7O71HMyR1s4gTZa7awVyFc5ObFwm2Vg27cfJi4U= + + + +Yl5pcGC+aaUttFqg3BlmX1T+x3gSwQy6kGwTdy91pA0= + + + +etSJ4FmglbezOhioAp5jHlnm6qCm5pZgMopSGlc5aw0= + + + +qcfEhVFTaIb0CneJGcoExb0fJTV6tDynYUwUqy/L0M0= + + + +J98ZfHq4bdWnPOgeCNf3F8qo9dP+uHSdgQObx3rnWDs= + + + +TyIhCQxutHD3GsJVX+WdzaEAIylOU4ntVbL9A6C+pDw= + + + +ooShq1VkAli/KknKQ+zOnuwJAk9OWn0Bh1lNxZorTI4= + + + +FAtUDFoqzARGAyDSEvcDbCIznTDicbEEcerY9tNfwE0= + + + +E77yN193qtqgrWDb+8jNAnLTtBQo/lKC966Ugl4wywc= + + + +NR+V2/fsamyc3j+o3mEKNueunE9O/cfXU1ps8uMKsbk= + + + +uclTKM5yI54wkWVBnSeMA6jtxR9ZpE8ohPAblMpd1Jc= + + + ++aI+FVzXr+4QpzvLlgDbjGmwj7Sl7dDa51f8RHb1qMM= + + + +Eg0Ptn2GtQNTNiU/LJhLayX6x6nCgiGUaddsO5ZH4Ho= + + + +Z5sas4R627HMhGGY/zld99cp4C2/ly247Fab+6Oxg/w= + + + +1Rg3J58uCm3PjqL6NtAJLBp+qdftrN99Qx43c6AXTAw= + + + +TRZHlKCDnydwFE8V/yPhMzzHUwETZVxKr//3v64imqw= + + + +5tH4ucGylosLrGSBOfqi4azmmaoEK4R9alEWCgR6plY= + + + +wr1LumUF5WUb5fRnFA5bJ3AGVlIP68BgoezhymIDkm8= + + + +mozqsGbt/uHGrPYmoAuXMzS7V/g2CXjm9puRM18VumI= + + + +9cDAk+d9rfNHTSsqhb40l0Wj5qprX7JZ52KpWp4nY9g= + + + +Nc5BKAvLM8RxA0EvJl+dQ2G0zHimtBENIU80d359HUk= + + + +dsqTz9+nsI4j3PKBUo1Q9m/Lx1CRvN2ocyAsBcYmUxE= + + + +q6qlTgfTDXCu6LJNjh0OdWrikpIQ2r5y87Ff6gENiE8= + + + +zaXYV1izyPjrkTgdFld0Aig8lTdZBmBFHfpLk2Z80yI= + + + +jzy79WpT78mq4nDlke/34XEvrKxGUO+2EpR6K7XxfpA= + + + +TYc7NLno0IPtZ3vJUSbv7x2egE6uOM+jjT9hLy44SaQ= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +YJsawxBl4v8gOPS2gtOeP2dunWNT2h82VTS4m0PLJuE= + + + +GEj/x2grCuJ4jyXwtCv0iPWmZMur8uyTxen9ujtchuo= + + + +hs7yf+kk/AZ1IfYKYVAabnmDjU9TbEHZp3EmAUmC0E4= + + + +HxAowejDwPIHR7Juav5eSErD3RkNSJeU3ec/nkkj8Io= + + + +6CDrh3wGZ5c4DjHzzLOGxvyGluSW2IbpS6hwxqha8Os= + + + +vP3jrgLTrPvh2IjuJJpDko1Be2E53orobcjHGJM+Mws= + + + +S89gYFLEoETwO4asJLop3GCR+4B6hBLVuhRuFJBeh9g= + + + +4T4P1eYVZ6WUn0tVe8kaIHIisQJallHCR5xRby6EowE= + + + +9BGi10BCQqVHHZLnZtjSZaw81xd+s8U9cOZxQ3oMA/Y= + + + +3vBrkdY8//iJCv3fsQ2CF7dDcFhQZI4LcXf/ek9eQkk= + + + +xtlvroyjhj69h9U4bfVmDYUsCan8/eoXuvIz6+dbLV8= + + + +IM4aA5H/BcnHGHoSjHRU+6xpF24MkAJogOpYaS/L71o= + + + +xxlnKX11mozHbi4aD2YyH81GP0zK3pp8Xb6ksI3OEbk= + + + +CUt71aBDXeoFcRsajRWyvd/MuUuYWWZcOV2ILgDKT+A= + + + +krEXlVBUFKl5O3nV1+VsPkCiE9dfSArbJBlz2tX7JEs= + + + +LcetW8bP+g0JnjfpGKLB/+I/x4VcZumPQhv6PMhBOng= + + + +ft8pnryry1TTGAqf+EkRctr0SlOP2b0dT/SYJuwz8RU= + + + +nnaNbWfuxmT2sXlRY07xQEpwMUpn6IFRrOaD3iD9S6Q= + + + +sNf2sdccsJI813Oq89pqfpmL0CnkA7Us7s1ECpx2ees= + + + +T0C9o1sRz5C6Gd4pTIPa+xysJz66cTkjN015UgppJVQ= + + + +iHhcpjOZmvOKOBAy+BY1vLlWSTJNpadZAEXaCaKptvE= + + + +g0zOTn7v3LGrlSvNkHct6ScVAJhrR8IV/Zz0y5Eu0v8= + + + +wV2svWaHFJoyctGj/TEKfpmXqTkU2p+Qgp/Bb597reE= + + + +n28YFSI00RbMJPBZSbdP0OQQsvxdNzpn2GWt2+PrbPc= + + + +iZsnY+0m52xxT3UdsYZs7ub79A9ABAJUN6KS0HYbd3E= + + + +caSciNEjN2lsIvVdJCTjcg2HyVGomOV+b2DwstJyYBo= + + + +rxbF+/E2Btkv+4j0fuFUcKmvD1k/9v6mK2a56ALcs3o= + + + +7brYAIYlmlbdEVfg0KJ3W3uDQkTGJVVB2uvdo7QR9vQ= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +ITKetacPReViE3blbwqys38IgY/uTIjD+FW0ZE6JCuM= + + + +62E/o5MuUnOSVBaRZSdKbhv0lscE8Gg/HJ7dTvBQRM0= + + + +XMVVYcc56cbDI4Pd8Te6fghAJdUGvO1LlcyCkq8K8Ac= + + + +cfE5dtbr1Dt80JonqZ2eviZT6EkVxkRBvdwyM+K4EHg= + + + +dMlN8mvL+LDi2saM9rpMhc3dQY8zMm05Wz8CZ0HzDfQ= + + + +gR9usB6uYVDt3HZLtpUxZUCE3vHAWjanJuSmdFMKyi8= + + + +2DG+dMcV3K2df6ZKeNod2U36JkhJ7R1hx9NNFcWJRbc= + + + +Ln3hOvkfJZRJvkDnRgtBeA6cD0IaHhYw/aqNhgK3DfA= + + + +T96MAGkPfpk5fnU9CBPSNaoJY2I1WyGXswczfOTegY4= + + + +JoRzHXIx4eiKADLx5JCYN1nYpruJ+PTZDAPG9KkuXNk= + + + +A8aJddz36G+62atWmSC9h3c4C5z6vKpnia8cA6izD/E= + + + +EZpzXgDNipUOoTbV1jncvMS47xIl3bXVgx0nQmqqxXo= + + + +QXRxNo3bqYcrP7ZY/MMhFxKQs394mdDYGBWLOlCbjCg= + + + +1a4Z+8YjeWleB8gLQ4qb0BKzlXUrc6tuzmwWht6qTOY= + + + +d7ET4K6A2KNjzLbCco61PQ/yBt2so/sAu/e9vNJnQNU= + + + +9w/dvumHzD/CZVzjqJnZ3P28gd96j9squ9cVF3YSWHI= + + + +ZqPcxUyCaqCoKnM83oMLcFJiPzw2OBbxaYyiC8XaEAg= + + + +Ekq5bnNtaz2PPUJsMiSilVWr0zL9jnd9XNRK0bWO0ao= + + + +bZcZXnC8zfD96PXSzOEQV7EjXv9N4DlL5CAtsnfYVN8= + + + +BgwtbnUWo5EV/T5E4Oa52Fhoj9DCNhRSXBqU723l81k= + + + +NKDQqz/0/aWKibG1L0DZpEONakdVB+wgVRmcFau3Ngg= + + + +S+xJ9zuGNvjQuHPM49Nk2q9DVl6V+EINx4Y5aJc3+SQ= + + + +j+sME2Dw8NDtpAa92xgMyqko3y50O554KWzQnl4eWF4= + + + +hGqh8EpwBYy6lCXK6bevIVWaC+h8P2gvmR0mksZghcw= + + + +VPGSS9tRUIfOIzsarA2630pPHbpbi81ZatZMzNBHsao= + + + +IbT/1bjUs1sPfbvtWLk12Wt4kOHSLb1YTrIEJwQZ2no= + + + +kTqQprk+U4Qhoc1vkeZG/U9xg5HCS3PmRQy58taM/vM= + + + +fTB8YP2lJRCz7VW/+X8ux7XJcMASb9B89MRQI2q1gpA= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +5JpcH+9FY1NkFIE450HwsjXIvLlgHTBgW0SyuBZ1oxI= + + + +n6eoAkZhEym1Ps3rLl4uSnLZIj4N8rKsNWDLWD/B4ck= + + + +1a0NNIMmYzNch4DaUR9yPYHCRgLBeXUSTjCvB8d5K3k= + + + +h6HGLOwo/eo9qdNqb49debja5Ps+j6jbKky/g+JE2Qw= + + + +7GGLi9Csczo07WUeBysn2qrCUQy6DozG41cRUBJvbso= + + + +XU0TY3CwVPAaZh2WboiTsixZumnjNlN/HSOMiDs9R4g= + + + +OROzZj+2lsUrjXvaX3W0mJIHC/OnL1LbgmTx9GTxY+A= + + + +vmK3Wo7ho61vbOsQ7P6Qto4QLaopCju0jDVit5L+Uac= + + + +FW0hIktjqK981HDbThhjx5DSIw6ZvaeIL3d+j9YZ4qY= + + + +Aq+uq61aGfWxLhizz8az4JyACaEqoFmDNAZSW4O9kFo= + + + ++fFkFnqLZInTzP2NsZITmbzOmQwcX9p+2phSns0uJeE= + + + +HVUcqrppgQ+26sx43aoxAA7TRpPdjNALL7X5aDHkuTQ= + + + +seRZmeGf7ArxTeYpnmid9lkotaZBEbk4dIXQ6RtZtRE= + + + +FThjbRvkn9RbbgPg2LjqbceGcS6WENJbDzJj7s/t3FY= + + + +lR0HC4RQ22HBjq4EbwOSJKb25ljqyNJ2iBWoJSX4cSM= + + + +OpEW9ySn9l8+cbngUauK9PIcDVB8pqgO1dUNgwoD3eA= + + + +6OndEJIbesi3hm4EAUmPpFsPUsWDPeHWpn9zNoI5SME= + + + +2HY3YSEv2sa6aYsW2sIXGpM7QwjP7a8TD3+f941VsA4= + + + +J4Qti6bvp9yj+3+vAB4RfMsxVQ2vW12G8Gq3Kt/7o4E= + + + +VehSwjlGujy1L3rQvWUpqYAOEdxF7SG/57b0A14dm5U= + + + +Cs1DgAm+j483QxrpTe/SJHGk37O+uXv9grDmLeNhAjI= + + + +xAhB2Xkj/DGsuWeWowQ+zzvdEl0Mb0uwwa6bA9lbDWc= + + + +JCRihpuU6a+tJVUAZHG3/3xGQRgXklhcq81sxX9cDMo= + + + +L9E3bhUQ55TV+i+9MCtTeTfABFFiJDQzaHOQpyKPWlo= + + + +ebgGKBkUoePU9rMLITjSouk1bDRq5unGm8SwkPMUH10= + + + +Lom9hbNYXt61LGw7B0yNpsUn3gFOBhFPg14hk4Vf1lo= + + + +Vem9fbIUnB+85vROnHzWr15p2dhRkGGaKsNYQpCuXsA= + + + +xhp8YCSpYmDmCAit1o4zGp4CsFT+aDFIcNxuDmnW7w0= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +uGaYw1TvhYqJTgB2+LW4aEeFFfOXvdrAj7tUfBQKWQ8= + + + +GJhc9jhIN/QITdrER/Baux08K/9EdoSCIUh2AjunrZg= + + + +M79Bh9reqTUhRkjr94XJFphhB0ht7PMscLlgGliYj5Y= + + + +2NPmuSBrPeApVGu1m8XchSAuseX/ZE7rv9DZDiyyoMA= + + + +79AeVMrhqAdXMunOTtyGk9LdZYYHl20eDYGvdbsVN6U= + + + +0H1xpLQuq6AkUYei1k8SK+MJvWxb49sC/tc+WqY8xX8= + + + +9l1Lnn8oEN17rpiRG2+7PRZx53yjkrCYdBgE6Cu5aoU= + + + +8jmEKbpgSsoetkanO3di6fgOqRVBfUzSz1JtqhyykrM= + + + +PzxWR73/uVzgdLUOPkxXnj+0UFjPdl85pXvBBqp/+S8= + + + +F7/yVemsWsf6JdtZbLum7iELn8P9fImnl91fftkdWkk= + + + +HAofdyPkxlDKM6OrA1E7UarBNqsD34PRazUdubOuQJY= + + + +BVjAXRYFYd+Kx3+dwooZiRzd1P0FVZ/Jo+ObqXXg4Zo= + + + +orWoEj2Hn6dI3gOVOfaNENeV5eaJpkUjGJZuOjaIHwY= + + + +3pE3FL3QabUV7xzDf3Ug0K2dc5OauDwBGHFa8A8BehY= + + + +snp9Oz5ugwe848GsSdRViZaQazVInlx+DQm6sioxTLo= + + + +PygyInV4NRBuhCoTWmx6EAxHUmJ6P+H0qgRue6X5s04= + + + +9nLUBdD3cfhNeOeD9EBOxZv+8kZtFanjLPBWZMAN1jQ= + + + +CMhH3IjiARn6Jc6i28EB58ch5O7SWtaJgEW4bnpJFLg= + + + +TQG/nAb6SXFAth/KVBFFIpXAECs6Lv8Onk/Ikcx2XoE= + + + +dA4VvbRLmWbB/dnid+VX8m2uGUm8N2ZUalQF47KcEzk= + + + +S+xJ9zuGNvjQuHPM49Nk2q9DVl6V+EINx4Y5aJc3+SQ= + + + +Mg2EF4CGIJ71KL307DbesTGfA2M88zF9IdpojV5OqWg= + + + +D35yQwKPYx4gMqw8hG8TqUp8VAbsKteVPBKfBZx6pXw= + + + +BySKx5JhNZf9x+NGjt6Aob1ovmD9n0MsL2x79bpr3hc= + + + +G66P0h1v8e8E7KIAEzFgIBnDk0hGdzG61edNJiFOjtQ= + + + +xGg0exy7+uCt/tlTop6RkVPFiths5ACNhPp81XFShF0= + + + +KUCyGZXaC/gKFQiXdO7eo0BJr3oyOS88h2hcxP0/J4c= + + + +NNQT/yEcx6DyTLwr51EF/6cl6Cd3r7MU4aeoqZYrrhk= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +NPjIfX0Zs6KDBZ91tWFuMZ0d1JDtkaDDkNpwSZTF0CQ= + + + +TBWh7O71HMyR1s4gTZa7awVyFc5ObFwm2Vg27cfJi4U= + + + +Yl5pcGC+aaUttFqg3BlmX1T+x3gSwQy6kGwTdy91pA0= + + + +etSJ4FmglbezOhioAp5jHlnm6qCm5pZgMopSGlc5aw0= + + + +qcfEhVFTaIb0CneJGcoExb0fJTV6tDynYUwUqy/L0M0= + + + +J98ZfHq4bdWnPOgeCNf3F8qo9dP+uHSdgQObx3rnWDs= + + + +TyIhCQxutHD3GsJVX+WdzaEAIylOU4ntVbL9A6C+pDw= + + + +ooShq1VkAli/KknKQ+zOnuwJAk9OWn0Bh1lNxZorTI4= + + + +Vp29/hnzXgOembUYMP5p9ZrxWtFCUE+QrXuS96GTNOo= + + + +gRRHQYx76dbcB/HajVrUPI4vTz4b4sKVBPJvC2qGw8w= + + + +E77yN193qtqgrWDb+8jNAnLTtBQo/lKC966Ugl4wywc= + + + +NR+V2/fsamyc3j+o3mEKNueunE9O/cfXU1ps8uMKsbk= + + + +fWsexo76+zPFRRa94E0XrV9j7R8PzA2Opv2qMT7YtPo= + + + +a6kSUlRblP8RO9VAdvkgKGgNSYyZGYX1dQgP29atSUk= + + + +uclTKM5yI54wkWVBnSeMA6jtxR9ZpE8ohPAblMpd1Jc= + + + ++aI+FVzXr+4QpzvLlgDbjGmwj7Sl7dDa51f8RHb1qMM= + + + +Eg0Ptn2GtQNTNiU/LJhLayX6x6nCgiGUaddsO5ZH4Ho= + + + +Z5sas4R627HMhGGY/zld99cp4C2/ly247Fab+6Oxg/w= + + + +VW7+JUTg+NwsWrgTSt+kefyxpV4nmOv6lh+fPFZ3frA= + + + +TRZHlKCDnydwFE8V/yPhMzzHUwETZVxKr//3v64imqw= + + + +5tH4ucGylosLrGSBOfqi4azmmaoEK4R9alEWCgR6plY= + + + +wr1LumUF5WUb5fRnFA5bJ3AGVlIP68BgoezhymIDkm8= + + + +mozqsGbt/uHGrPYmoAuXMzS7V/g2CXjm9puRM18VumI= + + + +9cDAk+d9rfNHTSsqhb40l0Wj5qprX7JZ52KpWp4nY9g= + + + +Nc5BKAvLM8RxA0EvJl+dQ2G0zHimtBENIU80d359HUk= + + + +dsqTz9+nsI4j3PKBUo1Q9m/Lx1CRvN2ocyAsBcYmUxE= + + + +q6qlTgfTDXCu6LJNjh0OdWrikpIQ2r5y87Ff6gENiE8= + + + +zaXYV1izyPjrkTgdFld0Aig8lTdZBmBFHfpLk2Z80yI= + + + +jzy79WpT78mq4nDlke/34XEvrKxGUO+2EpR6K7XxfpA= + + + +TYc7NLno0IPtZ3vJUSbv7x2egE6uOM+jjT9hLy44SaQ= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +YJsawxBl4v8gOPS2gtOeP2dunWNT2h82VTS4m0PLJuE= + + + +GEj/x2grCuJ4jyXwtCv0iPWmZMur8uyTxen9ujtchuo= + + + +hs7yf+kk/AZ1IfYKYVAabnmDjU9TbEHZp3EmAUmC0E4= + + + +HxAowejDwPIHR7Juav5eSErD3RkNSJeU3ec/nkkj8Io= + + + +6CDrh3wGZ5c4DjHzzLOGxvyGluSW2IbpS6hwxqha8Os= + + + +vP3jrgLTrPvh2IjuJJpDko1Be2E53orobcjHGJM+Mws= + + + +S89gYFLEoETwO4asJLop3GCR+4B6hBLVuhRuFJBeh9g= + + + +4T4P1eYVZ6WUn0tVe8kaIHIisQJallHCR5xRby6EowE= + + + +9BGi10BCQqVHHZLnZtjSZaw81xd+s8U9cOZxQ3oMA/Y= + + + +3vBrkdY8//iJCv3fsQ2CF7dDcFhQZI4LcXf/ek9eQkk= + + + +xtlvroyjhj69h9U4bfVmDYUsCan8/eoXuvIz6+dbLV8= + + + +IM4aA5H/BcnHGHoSjHRU+6xpF24MkAJogOpYaS/L71o= + + + +xxlnKX11mozHbi4aD2YyH81GP0zK3pp8Xb6ksI3OEbk= + + + +CUt71aBDXeoFcRsajRWyvd/MuUuYWWZcOV2ILgDKT+A= + + + +krEXlVBUFKl5O3nV1+VsPkCiE9dfSArbJBlz2tX7JEs= + + + +LcetW8bP+g0JnjfpGKLB/+I/x4VcZumPQhv6PMhBOng= + + + +ft8pnryry1TTGAqf+EkRctr0SlOP2b0dT/SYJuwz8RU= + + + +nnaNbWfuxmT2sXlRY07xQEpwMUpn6IFRrOaD3iD9S6Q= + + + +sNf2sdccsJI813Oq89pqfpmL0CnkA7Us7s1ECpx2ees= + + + +T0C9o1sRz5C6Gd4pTIPa+xysJz66cTkjN015UgppJVQ= + + + +iHhcpjOZmvOKOBAy+BY1vLlWSTJNpadZAEXaCaKptvE= + + + +g0zOTn7v3LGrlSvNkHct6ScVAJhrR8IV/Zz0y5Eu0v8= + + + +wV2svWaHFJoyctGj/TEKfpmXqTkU2p+Qgp/Bb597reE= + + + +n28YFSI00RbMJPBZSbdP0OQQsvxdNzpn2GWt2+PrbPc= + + + +iZsnY+0m52xxT3UdsYZs7ub79A9ABAJUN6KS0HYbd3E= + + + +caSciNEjN2lsIvVdJCTjcg2HyVGomOV+b2DwstJyYBo= + + + +denQwZ0e0PuGnB9morvFKElS+PrAiqXEut2sIEMch0Y= + + + +7brYAIYlmlbdEVfg0KJ3W3uDQkTGJVVB2uvdo7QR9vQ= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +B0t/srQ7H6oeF9hA1LpkYZcbS4UVKKAaMYlxAFuXO3E= + + + +62E/o5MuUnOSVBaRZSdKbhv0lscE8Gg/HJ7dTvBQRM0= + + + +XMVVYcc56cbDI4Pd8Te6fghAJdUGvO1LlcyCkq8K8Ac= + + + +cfE5dtbr1Dt80JonqZ2eviZT6EkVxkRBvdwyM+K4EHg= + + + +dMlN8mvL+LDi2saM9rpMhc3dQY8zMm05Wz8CZ0HzDfQ= + + + +gR9usB6uYVDt3HZLtpUxZUCE3vHAWjanJuSmdFMKyi8= + + + +2DG+dMcV3K2df6ZKeNod2U36JkhJ7R1hx9NNFcWJRbc= + + + +Ln3hOvkfJZRJvkDnRgtBeA6cD0IaHhYw/aqNhgK3DfA= + + + +T96MAGkPfpk5fnU9CBPSNaoJY2I1WyGXswczfOTegY4= + + + +JoRzHXIx4eiKADLx5JCYN1nYpruJ+PTZDAPG9KkuXNk= + + + +A8aJddz36G+62atWmSC9h3c4C5z6vKpnia8cA6izD/E= + + + +EZpzXgDNipUOoTbV1jncvMS47xIl3bXVgx0nQmqqxXo= + + + +QXRxNo3bqYcrP7ZY/MMhFxKQs394mdDYGBWLOlCbjCg= + + + +1a4Z+8YjeWleB8gLQ4qb0BKzlXUrc6tuzmwWht6qTOY= + + + +d7ET4K6A2KNjzLbCco61PQ/yBt2so/sAu/e9vNJnQNU= + + + +9w/dvumHzD/CZVzjqJnZ3P28gd96j9squ9cVF3YSWHI= + + + +ZqPcxUyCaqCoKnM83oMLcFJiPzw2OBbxaYyiC8XaEAg= + + + +Ekq5bnNtaz2PPUJsMiSilVWr0zL9jnd9XNRK0bWO0ao= + + + +bZcZXnC8zfD96PXSzOEQV7EjXv9N4DlL5CAtsnfYVN8= + + + +Eew7dcF/G+r98PbrMKOoAoXbQM1JFYDxP6yQlFYuruE= + + + +NKDQqz/0/aWKibG1L0DZpEONakdVB+wgVRmcFau3Ngg= + + + +j+sME2Dw8NDtpAa92xgMyqko3y50O554KWzQnl4eWF4= + + + +hGqh8EpwBYy6lCXK6bevIVWaC+h8P2gvmR0mksZghcw= + + + +VPGSS9tRUIfOIzsarA2630pPHbpbi81ZatZMzNBHsao= + + + +IbT/1bjUs1sPfbvtWLk12Wt4kOHSLb1YTrIEJwQZ2no= + + + +kTqQprk+U4Qhoc1vkeZG/U9xg5HCS3PmRQy58taM/vM= + + + +03ESu7fr3UI0qrvfWd4Datj5EtHgjYCCiNrrZYQQvKA= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +kHQYk81qtwceXcZNxO3PWfTNjW4+rzInp6KBUL7Y5lE= + + + +n6eoAkZhEym1Ps3rLl4uSnLZIj4N8rKsNWDLWD/B4ck= + + + +1a0NNIMmYzNch4DaUR9yPYHCRgLBeXUSTjCvB8d5K3k= + + + +h6HGLOwo/eo9qdNqb49debja5Ps+j6jbKky/g+JE2Qw= + + + +7GGLi9Csczo07WUeBysn2qrCUQy6DozG41cRUBJvbso= + + + +XU0TY3CwVPAaZh2WboiTsixZumnjNlN/HSOMiDs9R4g= + + + +OROzZj+2lsUrjXvaX3W0mJIHC/OnL1LbgmTx9GTxY+A= + + + +vmK3Wo7ho61vbOsQ7P6Qto4QLaopCju0jDVit5L+Uac= + + + +FW0hIktjqK981HDbThhjx5DSIw6ZvaeIL3d+j9YZ4qY= + + + +Aq+uq61aGfWxLhizz8az4JyACaEqoFmDNAZSW4O9kFo= + + + ++fFkFnqLZInTzP2NsZITmbzOmQwcX9p+2phSns0uJeE= + + + +HVUcqrppgQ+26sx43aoxAA7TRpPdjNALL7X5aDHkuTQ= + + + +seRZmeGf7ArxTeYpnmid9lkotaZBEbk4dIXQ6RtZtRE= + + + +FThjbRvkn9RbbgPg2LjqbceGcS6WENJbDzJj7s/t3FY= + + + +lR0HC4RQ22HBjq4EbwOSJKb25ljqyNJ2iBWoJSX4cSM= + + + +OpEW9ySn9l8+cbngUauK9PIcDVB8pqgO1dUNgwoD3eA= + + + +6OndEJIbesi3hm4EAUmPpFsPUsWDPeHWpn9zNoI5SME= + + + +2HY3YSEv2sa6aYsW2sIXGpM7QwjP7a8TD3+f941VsA4= + + + +J4Qti6bvp9yj+3+vAB4RfMsxVQ2vW12G8Gq3Kt/7o4E= + + + +NMZeiWTWwvadEH9vhXiKjhT9dqrfjuzzMDcP0OC6Tl0= + + + +Cs1DgAm+j483QxrpTe/SJHGk37O+uXv9grDmLeNhAjI= + + + +xAhB2Xkj/DGsuWeWowQ+zzvdEl0Mb0uwwa6bA9lbDWc= + + + +JCRihpuU6a+tJVUAZHG3/3xGQRgXklhcq81sxX9cDMo= + + + +L9E3bhUQ55TV+i+9MCtTeTfABFFiJDQzaHOQpyKPWlo= + + + +ebgGKBkUoePU9rMLITjSouk1bDRq5unGm8SwkPMUH10= + + + +Lom9hbNYXt61LGw7B0yNpsUn3gFOBhFPg14hk4Vf1lo= + + + +Vem9fbIUnB+85vROnHzWr15p2dhRkGGaKsNYQpCuXsA= + + + +xhp8YCSpYmDmCAit1o4zGp4CsFT+aDFIcNxuDmnW7w0= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +SNGOvL8uw/+Bw5NUV3FBfNTH0ImPDinsBvpDAsupmXI= + + + +GJhc9jhIN/QITdrER/Baux08K/9EdoSCIUh2AjunrZg= + + + +M79Bh9reqTUhRkjr94XJFphhB0ht7PMscLlgGliYj5Y= + + + +2NPmuSBrPeApVGu1m8XchSAuseX/ZE7rv9DZDiyyoMA= + + + +79AeVMrhqAdXMunOTtyGk9LdZYYHl20eDYGvdbsVN6U= + + + +0H1xpLQuq6AkUYei1k8SK+MJvWxb49sC/tc+WqY8xX8= + + + +9l1Lnn8oEN17rpiRG2+7PRZx53yjkrCYdBgE6Cu5aoU= + + + +8jmEKbpgSsoetkanO3di6fgOqRVBfUzSz1JtqhyykrM= + + + +PzxWR73/uVzgdLUOPkxXnj+0UFjPdl85pXvBBqp/+S8= + + + +F7/yVemsWsf6JdtZbLum7iELn8P9fImnl91fftkdWkk= + + + +HAofdyPkxlDKM6OrA1E7UarBNqsD34PRazUdubOuQJY= + + + +BVjAXRYFYd+Kx3+dwooZiRzd1P0FVZ/Jo+ObqXXg4Zo= + + + +orWoEj2Hn6dI3gOVOfaNENeV5eaJpkUjGJZuOjaIHwY= + + + +3pE3FL3QabUV7xzDf3Ug0K2dc5OauDwBGHFa8A8BehY= + + + +snp9Oz5ugwe848GsSdRViZaQazVInlx+DQm6sioxTLo= + + + +PygyInV4NRBuhCoTWmx6EAxHUmJ6P+H0qgRue6X5s04= + + + +9nLUBdD3cfhNeOeD9EBOxZv+8kZtFanjLPBWZMAN1jQ= + + + +CMhH3IjiARn6Jc6i28EB58ch5O7SWtaJgEW4bnpJFLg= + + + +TQG/nAb6SXFAth/KVBFFIpXAECs6Lv8Onk/Ikcx2XoE= + + + +1C+4xtltuE99m/Ys4sHtQdJAFFaoe3doAUPDI5FqbWo= + + + +S+xJ9zuGNvjQuHPM49Nk2q9DVl6V+EINx4Y5aJc3+SQ= + + + +Mg2EF4CGIJ71KL307DbesTGfA2M88zF9IdpojV5OqWg= + + + +D35yQwKPYx4gMqw8hG8TqUp8VAbsKteVPBKfBZx6pXw= + + + +fYpjyE+Coh3VdAVMucXLFlr5ZvE21zBI7DeTPu1+T3A= + + + +oxX3kz7Ot/nqJSKn/nUzwMevCidLhyYtyaGDGpI1138= + + + +Kmx0h55Ed3OX+LfpPvK6aAkkbSd+HAcpQG0YJs3e5j8= + + + +8CwVuc1KIdhqjwJI1c4FOgIJNUgJVlBKxJzdCmhw3OY= + + + +IVAscuPnZ4wVpmldkPJrq7jKmfVqLk9+u4UtU1n1+PI= + + + +Hr+XrvjrRcLYvoJG08Mzg9/+GKA7xdKvVMruUS4/LvU= + + + +FJxm9+48FVrc3PKCvbO2uJmcmcrAP41hEj4F/xjI4c4= + + + +gQvcj3+fTNB3J8ElU2vrlmN/f7cc/8DdOjDxLBzUNNo= + + + +649u10Yowy+c8CSRIqoVgRGUg39hgPt/H2NgwHEL31w= + + + +LKygsuD9H8tSb+gZlp/5WIyzDWSRGjh1ht9h0yejaBw= + + + +P9zQhWirRATIEPR8/4/vj4qr6sxJy1p3fNwDqPxhTMk= + + + +PemByZhsVq5SUSdoQz8eT2Cn32CB99VNdrW9My2HXYw= + + + +X9i7g6euubn9+sjoN1SqXEEiIywqXmx/Rgw2fanPTxY= + + + +SciIKS7ynwuDz9B47+dDBc8wtxjc6I7ttE0martwMsI= + + + +vHZwgimbQnp6cTxcY3G71tnj19pWhkAzKsYBS1tIOuI= + + + +R4IqERvdTsZ/grlYSpJjBMpLwkRUkdBOqzJfz7JfPKw= + + + +1/p9dJr33nY1C0XgKEdCpZrZUb8t5qXaihqd6/pCiE4= + + + +HsFpCbHKX3rrw08m0uvLQePPMJFo7jRyhiOciyFA3r0= + + + +j6BXQz+viQp8MffUhE/UEL/mKldHk6qama3FZ50Jjso= + + + +u4GpeYBVMfIgd8mMhre2dPJaK0Yopx6LC2ygrg5xcJ8= + + + +206uuAe2w6eHcEKoG8TeByiBPK+bDF4/B5kCEZ5h9bo= + + + +tmW5EGuSb50QJqkOwuGfcDN5MVn50wh63hiuYbvsq0Q= + + + +j4nd57eJ6gN5FWaUwlVl4wudh6saRuzsUeyEU8l5Vd8= + + + +64PwPoOGUPlBBpkt2MF8AIVek40pBIs1Y/uSm8K0N1M= + + + +Su9TpqYuX1RK9qph0qTlIWoSJA/m/eGw4hVBctMT3iY= + + + ++kvOvmsOCnArB291kMLmUu2a3yqKASzncXz3iduAcx4= + + + +uDSQ4I8u18tkS5QMInERJUYcIvDukY8RBY+AtelDQrs= + + + +JG5Ot1y71B5LxwdNMpQsnl92z1puAsLnBCI/na46x5k= + + + +/ANEStYoGJyiETrYIUuNYJg9k6irr0iR4yWtu1zDsPI= + + + +6X8RcJ69rWmrhbKtOmxi06RQ2H6VDBhv1wh8XSJH8Ds= + + + +PemByZhsVq5SUSdoQz8eT2Cn32CB99VNdrW9My2HXYw= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + +rckkorXtmaFI0u9RxO76oPTwcC5bDt+nvp92XSLJdwk= + + + + + + +lpo8tUDs054eLlBQXiDPVDVKfw30ZZdtkRs1jd7H5K8= + + + +Kdx5TKsPXfMZFXI2scaKlZCb2Cnj8s4sOHqwTrpD2bbgodBsS6D2xxW6ZcxiraM6fAkU2h9autCF +Xji6klxrruMEGkXglTFDsb9rJavPqftSHvq4AC6E8g7NNLBcE/BNl0mGHQD4rrhQCMuqPHefuVKs +PhE8plMzMha5Ugr9d9I= + + + + +MIIClTCCAX2gAwIBAgIGAU4upTxpMA0GCSqGSIb3DQEBBQUAMFYxGjAYBgNVBAoMEVRpemVuIEFz +c29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4gRGV2 +ZWxvcGVycyBDQTAeFw0xMjExMDEwMDAwMDBaFw0xOTAxMDEwMDAwMDBaMBExDzANBgNVBAMMBmF1 +dGhvcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAli01Th83wVCdQgtaFl0fIpC0L9+3ZJfc +2fZ2z4cVOkUxnQsVIp9CVqnYlU+lYb28e+AMhCRTonRCF1KCROdDyKi6Aacg/L6e7P32yRnXunPJ +M1HzyudorztfxvrUQSYgpO4Ar5CQH90Hybm0uubFWqn5J5+u/0KupTUkBR6py/cCAwEAAaMyMDAw +DAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcN +AQEFBQADggEBAFw9FQjB2G6BtDovSYOxRhzxs+n/mpndo1V9iY/20f842YqzUgiSWzZNHboyjN1V +vk/YsRScYQv+k9B1U5aUYEpl9xtUvlYLdNafaLowZzySo/beyMBvGtJ4hn4j381/gQ3O5xXSY+CY +aluyIJPqUEBialeeRg5UJrf3Mpo6PI4FLsxGofJkhjX+DWJI80EBEZmWfmQ2IxDNsPCA1E5nBk2T +fAd05oziM8+D+ojXiHBDrdknZ0gVYT3l9VJGTaA9zwfSMgOroMMpC2IHFypFa29+apZsYxI8D8iB +AQri33Ty283o/XnN7SyZ/I0NWMTGKWxp3MWQxRTWtA+1fuJ7uuQ= + + +MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRowGAYDVQQKDBFUaXplbiBBc3NvY2lh +dGlvbjEaMBgGA1UECwwRVGl6ZW4gQXNzb2NpYXRpb24xHjAcBgNVBAMMFVRpemVuIERldmVsb3Bl +cnMgUm9vdDAeFw0xMjAxMDEwMDAwMDBaFw0yNzAxMDEwMDAwMDBaMFYxGjAYBgNVBAoMEVRpemVu +IEFzc29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4g +RGV2ZWxvcGVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVGhRGmMIUyBA7o +PCz8Sxut6z6HNkF4oDIuzuKaMzRYPeWodwe9O0gmqAkToQHfwg2giRhE5GoPld0fq+OYMMwSasCu +g8dwODx1eDeSYVuOLWRxpAmbTXOsSFi6VoWeyaPEm18JBHvZBsU5YQtgZ6Kp7MqzvQg3pXOxtajj +vyHxiatJl+xXrHgcXC1wgyG3buty7u/Fi2mvKXJ0PRJcCjjK81dqe/Vr20sRUCrbk02zbm5ggFt/ +jIEhV8wbFRQpliobc7J4dSTKhFfrqGM8rdd54LYhD7gSI1CFSe16pUXfcVR7FhJztRaiGLnCrwBE +dyTZ248+D4L/qR/D0axb3jcCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC +AQEAnOXXQ/1O/QTDHyrmQDtFziqPY3xWlJBqJtEqXiT7Y+Ljpe66e+Ee/OjQMlZe8gu21/8cKklH +95RxjopMWCVedXDUbWdvS2+CdyvVW/quT2E0tjqIzXDekUTYwwhlPWlGxvfj3VsxqSFq3p8Brl04 +1Gx5RKAGyKVsMfTLhbbwSWwApuBUxYfcNpKwLWGPXkysu+HctY03OKv4/xKBnVWiN8ex/Sgesi0M ++OBAOMdZMPK32uJBTeKFx1xZgTLIhk45V0hPOomPjZloiv0LSS11eyd451ufjW0iHRE7WlpR6EvI +W6TFyZgMpQq+kg4hWl2SBTf3s2VI8Ygz7gj8TMlClg== + + + + + \ No newline at end of file diff --git a/tbtcoreapp/.sign/signature1.xml b/tbtcoreapp/.sign/signature1.xml new file mode 100644 index 0000000..b7baea1 --- /dev/null +++ b/tbtcoreapp/.sign/signature1.xml @@ -0,0 +1,1352 @@ + + + + + + +nwPkCU64d5mPCv7++/f3onVoalt+wbwbVrBJ7JD8ddc= + + + +M6EoYeHUF3qUZzeuuh6jUg/hKG/a2DpCw2RNicTyMaY= + + + +BySKx5JhNZf9x+NGjt6Aob1ovmD9n0MsL2x79bpr3hc= + + + +G66P0h1v8e8E7KIAEzFgIBnDk0hGdzG61edNJiFOjtQ= + + + +xGg0exy7+uCt/tlTop6RkVPFiths5ACNhPp81XFShF0= + + + +KUCyGZXaC/gKFQiXdO7eo0BJr3oyOS88h2hcxP0/J4c= + + + +NNQT/yEcx6DyTLwr51EF/6cl6Cd3r7MU4aeoqZYrrhk= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +NPjIfX0Zs6KDBZ91tWFuMZ0d1JDtkaDDkNpwSZTF0CQ= + + + +TBWh7O71HMyR1s4gTZa7awVyFc5ObFwm2Vg27cfJi4U= + + + +Yl5pcGC+aaUttFqg3BlmX1T+x3gSwQy6kGwTdy91pA0= + + + +etSJ4FmglbezOhioAp5jHlnm6qCm5pZgMopSGlc5aw0= + + + +qcfEhVFTaIb0CneJGcoExb0fJTV6tDynYUwUqy/L0M0= + + + +J98ZfHq4bdWnPOgeCNf3F8qo9dP+uHSdgQObx3rnWDs= + + + +TyIhCQxutHD3GsJVX+WdzaEAIylOU4ntVbL9A6C+pDw= + + + +ooShq1VkAli/KknKQ+zOnuwJAk9OWn0Bh1lNxZorTI4= + + + +FAtUDFoqzARGAyDSEvcDbCIznTDicbEEcerY9tNfwE0= + + + +E77yN193qtqgrWDb+8jNAnLTtBQo/lKC966Ugl4wywc= + + + +NR+V2/fsamyc3j+o3mEKNueunE9O/cfXU1ps8uMKsbk= + + + +uclTKM5yI54wkWVBnSeMA6jtxR9ZpE8ohPAblMpd1Jc= + + + ++aI+FVzXr+4QpzvLlgDbjGmwj7Sl7dDa51f8RHb1qMM= + + + +Eg0Ptn2GtQNTNiU/LJhLayX6x6nCgiGUaddsO5ZH4Ho= + + + +Z5sas4R627HMhGGY/zld99cp4C2/ly247Fab+6Oxg/w= + + + +1Rg3J58uCm3PjqL6NtAJLBp+qdftrN99Qx43c6AXTAw= + + + +TRZHlKCDnydwFE8V/yPhMzzHUwETZVxKr//3v64imqw= + + + +5tH4ucGylosLrGSBOfqi4azmmaoEK4R9alEWCgR6plY= + + + +wr1LumUF5WUb5fRnFA5bJ3AGVlIP68BgoezhymIDkm8= + + + +mozqsGbt/uHGrPYmoAuXMzS7V/g2CXjm9puRM18VumI= + + + +9cDAk+d9rfNHTSsqhb40l0Wj5qprX7JZ52KpWp4nY9g= + + + +Nc5BKAvLM8RxA0EvJl+dQ2G0zHimtBENIU80d359HUk= + + + +dsqTz9+nsI4j3PKBUo1Q9m/Lx1CRvN2ocyAsBcYmUxE= + + + +q6qlTgfTDXCu6LJNjh0OdWrikpIQ2r5y87Ff6gENiE8= + + + +zaXYV1izyPjrkTgdFld0Aig8lTdZBmBFHfpLk2Z80yI= + + + +jzy79WpT78mq4nDlke/34XEvrKxGUO+2EpR6K7XxfpA= + + + +TYc7NLno0IPtZ3vJUSbv7x2egE6uOM+jjT9hLy44SaQ= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +YJsawxBl4v8gOPS2gtOeP2dunWNT2h82VTS4m0PLJuE= + + + +GEj/x2grCuJ4jyXwtCv0iPWmZMur8uyTxen9ujtchuo= + + + +hs7yf+kk/AZ1IfYKYVAabnmDjU9TbEHZp3EmAUmC0E4= + + + +HxAowejDwPIHR7Juav5eSErD3RkNSJeU3ec/nkkj8Io= + + + +6CDrh3wGZ5c4DjHzzLOGxvyGluSW2IbpS6hwxqha8Os= + + + +vP3jrgLTrPvh2IjuJJpDko1Be2E53orobcjHGJM+Mws= + + + +S89gYFLEoETwO4asJLop3GCR+4B6hBLVuhRuFJBeh9g= + + + +4T4P1eYVZ6WUn0tVe8kaIHIisQJallHCR5xRby6EowE= + + + +9BGi10BCQqVHHZLnZtjSZaw81xd+s8U9cOZxQ3oMA/Y= + + + +3vBrkdY8//iJCv3fsQ2CF7dDcFhQZI4LcXf/ek9eQkk= + + + +xtlvroyjhj69h9U4bfVmDYUsCan8/eoXuvIz6+dbLV8= + + + +IM4aA5H/BcnHGHoSjHRU+6xpF24MkAJogOpYaS/L71o= + + + +xxlnKX11mozHbi4aD2YyH81GP0zK3pp8Xb6ksI3OEbk= + + + +CUt71aBDXeoFcRsajRWyvd/MuUuYWWZcOV2ILgDKT+A= + + + +krEXlVBUFKl5O3nV1+VsPkCiE9dfSArbJBlz2tX7JEs= + + + +LcetW8bP+g0JnjfpGKLB/+I/x4VcZumPQhv6PMhBOng= + + + +ft8pnryry1TTGAqf+EkRctr0SlOP2b0dT/SYJuwz8RU= + + + +nnaNbWfuxmT2sXlRY07xQEpwMUpn6IFRrOaD3iD9S6Q= + + + +sNf2sdccsJI813Oq89pqfpmL0CnkA7Us7s1ECpx2ees= + + + +T0C9o1sRz5C6Gd4pTIPa+xysJz66cTkjN015UgppJVQ= + + + +iHhcpjOZmvOKOBAy+BY1vLlWSTJNpadZAEXaCaKptvE= + + + +g0zOTn7v3LGrlSvNkHct6ScVAJhrR8IV/Zz0y5Eu0v8= + + + +wV2svWaHFJoyctGj/TEKfpmXqTkU2p+Qgp/Bb597reE= + + + +n28YFSI00RbMJPBZSbdP0OQQsvxdNzpn2GWt2+PrbPc= + + + +iZsnY+0m52xxT3UdsYZs7ub79A9ABAJUN6KS0HYbd3E= + + + +caSciNEjN2lsIvVdJCTjcg2HyVGomOV+b2DwstJyYBo= + + + +rxbF+/E2Btkv+4j0fuFUcKmvD1k/9v6mK2a56ALcs3o= + + + +7brYAIYlmlbdEVfg0KJ3W3uDQkTGJVVB2uvdo7QR9vQ= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +ITKetacPReViE3blbwqys38IgY/uTIjD+FW0ZE6JCuM= + + + +62E/o5MuUnOSVBaRZSdKbhv0lscE8Gg/HJ7dTvBQRM0= + + + +XMVVYcc56cbDI4Pd8Te6fghAJdUGvO1LlcyCkq8K8Ac= + + + +cfE5dtbr1Dt80JonqZ2eviZT6EkVxkRBvdwyM+K4EHg= + + + +dMlN8mvL+LDi2saM9rpMhc3dQY8zMm05Wz8CZ0HzDfQ= + + + +gR9usB6uYVDt3HZLtpUxZUCE3vHAWjanJuSmdFMKyi8= + + + +2DG+dMcV3K2df6ZKeNod2U36JkhJ7R1hx9NNFcWJRbc= + + + +Ln3hOvkfJZRJvkDnRgtBeA6cD0IaHhYw/aqNhgK3DfA= + + + +T96MAGkPfpk5fnU9CBPSNaoJY2I1WyGXswczfOTegY4= + + + +JoRzHXIx4eiKADLx5JCYN1nYpruJ+PTZDAPG9KkuXNk= + + + +A8aJddz36G+62atWmSC9h3c4C5z6vKpnia8cA6izD/E= + + + +EZpzXgDNipUOoTbV1jncvMS47xIl3bXVgx0nQmqqxXo= + + + +QXRxNo3bqYcrP7ZY/MMhFxKQs394mdDYGBWLOlCbjCg= + + + +1a4Z+8YjeWleB8gLQ4qb0BKzlXUrc6tuzmwWht6qTOY= + + + +d7ET4K6A2KNjzLbCco61PQ/yBt2so/sAu/e9vNJnQNU= + + + +9w/dvumHzD/CZVzjqJnZ3P28gd96j9squ9cVF3YSWHI= + + + +ZqPcxUyCaqCoKnM83oMLcFJiPzw2OBbxaYyiC8XaEAg= + + + +Ekq5bnNtaz2PPUJsMiSilVWr0zL9jnd9XNRK0bWO0ao= + + + +bZcZXnC8zfD96PXSzOEQV7EjXv9N4DlL5CAtsnfYVN8= + + + +BgwtbnUWo5EV/T5E4Oa52Fhoj9DCNhRSXBqU723l81k= + + + +NKDQqz/0/aWKibG1L0DZpEONakdVB+wgVRmcFau3Ngg= + + + +S+xJ9zuGNvjQuHPM49Nk2q9DVl6V+EINx4Y5aJc3+SQ= + + + +j+sME2Dw8NDtpAa92xgMyqko3y50O554KWzQnl4eWF4= + + + +hGqh8EpwBYy6lCXK6bevIVWaC+h8P2gvmR0mksZghcw= + + + +VPGSS9tRUIfOIzsarA2630pPHbpbi81ZatZMzNBHsao= + + + +IbT/1bjUs1sPfbvtWLk12Wt4kOHSLb1YTrIEJwQZ2no= + + + +kTqQprk+U4Qhoc1vkeZG/U9xg5HCS3PmRQy58taM/vM= + + + +fTB8YP2lJRCz7VW/+X8ux7XJcMASb9B89MRQI2q1gpA= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +5JpcH+9FY1NkFIE450HwsjXIvLlgHTBgW0SyuBZ1oxI= + + + +n6eoAkZhEym1Ps3rLl4uSnLZIj4N8rKsNWDLWD/B4ck= + + + +1a0NNIMmYzNch4DaUR9yPYHCRgLBeXUSTjCvB8d5K3k= + + + +h6HGLOwo/eo9qdNqb49debja5Ps+j6jbKky/g+JE2Qw= + + + +7GGLi9Csczo07WUeBysn2qrCUQy6DozG41cRUBJvbso= + + + +XU0TY3CwVPAaZh2WboiTsixZumnjNlN/HSOMiDs9R4g= + + + +OROzZj+2lsUrjXvaX3W0mJIHC/OnL1LbgmTx9GTxY+A= + + + +vmK3Wo7ho61vbOsQ7P6Qto4QLaopCju0jDVit5L+Uac= + + + +FW0hIktjqK981HDbThhjx5DSIw6ZvaeIL3d+j9YZ4qY= + + + +Aq+uq61aGfWxLhizz8az4JyACaEqoFmDNAZSW4O9kFo= + + + ++fFkFnqLZInTzP2NsZITmbzOmQwcX9p+2phSns0uJeE= + + + +HVUcqrppgQ+26sx43aoxAA7TRpPdjNALL7X5aDHkuTQ= + + + +seRZmeGf7ArxTeYpnmid9lkotaZBEbk4dIXQ6RtZtRE= + + + +FThjbRvkn9RbbgPg2LjqbceGcS6WENJbDzJj7s/t3FY= + + + +lR0HC4RQ22HBjq4EbwOSJKb25ljqyNJ2iBWoJSX4cSM= + + + +OpEW9ySn9l8+cbngUauK9PIcDVB8pqgO1dUNgwoD3eA= + + + +6OndEJIbesi3hm4EAUmPpFsPUsWDPeHWpn9zNoI5SME= + + + +2HY3YSEv2sa6aYsW2sIXGpM7QwjP7a8TD3+f941VsA4= + + + +J4Qti6bvp9yj+3+vAB4RfMsxVQ2vW12G8Gq3Kt/7o4E= + + + +VehSwjlGujy1L3rQvWUpqYAOEdxF7SG/57b0A14dm5U= + + + +Cs1DgAm+j483QxrpTe/SJHGk37O+uXv9grDmLeNhAjI= + + + +xAhB2Xkj/DGsuWeWowQ+zzvdEl0Mb0uwwa6bA9lbDWc= + + + +JCRihpuU6a+tJVUAZHG3/3xGQRgXklhcq81sxX9cDMo= + + + +L9E3bhUQ55TV+i+9MCtTeTfABFFiJDQzaHOQpyKPWlo= + + + +ebgGKBkUoePU9rMLITjSouk1bDRq5unGm8SwkPMUH10= + + + +Lom9hbNYXt61LGw7B0yNpsUn3gFOBhFPg14hk4Vf1lo= + + + +Vem9fbIUnB+85vROnHzWr15p2dhRkGGaKsNYQpCuXsA= + + + +xhp8YCSpYmDmCAit1o4zGp4CsFT+aDFIcNxuDmnW7w0= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +uGaYw1TvhYqJTgB2+LW4aEeFFfOXvdrAj7tUfBQKWQ8= + + + +GJhc9jhIN/QITdrER/Baux08K/9EdoSCIUh2AjunrZg= + + + +M79Bh9reqTUhRkjr94XJFphhB0ht7PMscLlgGliYj5Y= + + + +2NPmuSBrPeApVGu1m8XchSAuseX/ZE7rv9DZDiyyoMA= + + + +79AeVMrhqAdXMunOTtyGk9LdZYYHl20eDYGvdbsVN6U= + + + +0H1xpLQuq6AkUYei1k8SK+MJvWxb49sC/tc+WqY8xX8= + + + +9l1Lnn8oEN17rpiRG2+7PRZx53yjkrCYdBgE6Cu5aoU= + + + +8jmEKbpgSsoetkanO3di6fgOqRVBfUzSz1JtqhyykrM= + + + +PzxWR73/uVzgdLUOPkxXnj+0UFjPdl85pXvBBqp/+S8= + + + +F7/yVemsWsf6JdtZbLum7iELn8P9fImnl91fftkdWkk= + + + +HAofdyPkxlDKM6OrA1E7UarBNqsD34PRazUdubOuQJY= + + + +BVjAXRYFYd+Kx3+dwooZiRzd1P0FVZ/Jo+ObqXXg4Zo= + + + +orWoEj2Hn6dI3gOVOfaNENeV5eaJpkUjGJZuOjaIHwY= + + + +3pE3FL3QabUV7xzDf3Ug0K2dc5OauDwBGHFa8A8BehY= + + + +snp9Oz5ugwe848GsSdRViZaQazVInlx+DQm6sioxTLo= + + + +PygyInV4NRBuhCoTWmx6EAxHUmJ6P+H0qgRue6X5s04= + + + +9nLUBdD3cfhNeOeD9EBOxZv+8kZtFanjLPBWZMAN1jQ= + + + +CMhH3IjiARn6Jc6i28EB58ch5O7SWtaJgEW4bnpJFLg= + + + +TQG/nAb6SXFAth/KVBFFIpXAECs6Lv8Onk/Ikcx2XoE= + + + +dA4VvbRLmWbB/dnid+VX8m2uGUm8N2ZUalQF47KcEzk= + + + +S+xJ9zuGNvjQuHPM49Nk2q9DVl6V+EINx4Y5aJc3+SQ= + + + +Mg2EF4CGIJ71KL307DbesTGfA2M88zF9IdpojV5OqWg= + + + +D35yQwKPYx4gMqw8hG8TqUp8VAbsKteVPBKfBZx6pXw= + + + +BySKx5JhNZf9x+NGjt6Aob1ovmD9n0MsL2x79bpr3hc= + + + +G66P0h1v8e8E7KIAEzFgIBnDk0hGdzG61edNJiFOjtQ= + + + +xGg0exy7+uCt/tlTop6RkVPFiths5ACNhPp81XFShF0= + + + +KUCyGZXaC/gKFQiXdO7eo0BJr3oyOS88h2hcxP0/J4c= + + + +NNQT/yEcx6DyTLwr51EF/6cl6Cd3r7MU4aeoqZYrrhk= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +NPjIfX0Zs6KDBZ91tWFuMZ0d1JDtkaDDkNpwSZTF0CQ= + + + +TBWh7O71HMyR1s4gTZa7awVyFc5ObFwm2Vg27cfJi4U= + + + +Yl5pcGC+aaUttFqg3BlmX1T+x3gSwQy6kGwTdy91pA0= + + + +etSJ4FmglbezOhioAp5jHlnm6qCm5pZgMopSGlc5aw0= + + + +qcfEhVFTaIb0CneJGcoExb0fJTV6tDynYUwUqy/L0M0= + + + +J98ZfHq4bdWnPOgeCNf3F8qo9dP+uHSdgQObx3rnWDs= + + + +TyIhCQxutHD3GsJVX+WdzaEAIylOU4ntVbL9A6C+pDw= + + + +ooShq1VkAli/KknKQ+zOnuwJAk9OWn0Bh1lNxZorTI4= + + + +Vp29/hnzXgOembUYMP5p9ZrxWtFCUE+QrXuS96GTNOo= + + + +gRRHQYx76dbcB/HajVrUPI4vTz4b4sKVBPJvC2qGw8w= + + + +E77yN193qtqgrWDb+8jNAnLTtBQo/lKC966Ugl4wywc= + + + +NR+V2/fsamyc3j+o3mEKNueunE9O/cfXU1ps8uMKsbk= + + + +fWsexo76+zPFRRa94E0XrV9j7R8PzA2Opv2qMT7YtPo= + + + +a6kSUlRblP8RO9VAdvkgKGgNSYyZGYX1dQgP29atSUk= + + + +uclTKM5yI54wkWVBnSeMA6jtxR9ZpE8ohPAblMpd1Jc= + + + ++aI+FVzXr+4QpzvLlgDbjGmwj7Sl7dDa51f8RHb1qMM= + + + +Eg0Ptn2GtQNTNiU/LJhLayX6x6nCgiGUaddsO5ZH4Ho= + + + +Z5sas4R627HMhGGY/zld99cp4C2/ly247Fab+6Oxg/w= + + + +VW7+JUTg+NwsWrgTSt+kefyxpV4nmOv6lh+fPFZ3frA= + + + +TRZHlKCDnydwFE8V/yPhMzzHUwETZVxKr//3v64imqw= + + + +5tH4ucGylosLrGSBOfqi4azmmaoEK4R9alEWCgR6plY= + + + +wr1LumUF5WUb5fRnFA5bJ3AGVlIP68BgoezhymIDkm8= + + + +mozqsGbt/uHGrPYmoAuXMzS7V/g2CXjm9puRM18VumI= + + + +9cDAk+d9rfNHTSsqhb40l0Wj5qprX7JZ52KpWp4nY9g= + + + +Nc5BKAvLM8RxA0EvJl+dQ2G0zHimtBENIU80d359HUk= + + + +dsqTz9+nsI4j3PKBUo1Q9m/Lx1CRvN2ocyAsBcYmUxE= + + + +q6qlTgfTDXCu6LJNjh0OdWrikpIQ2r5y87Ff6gENiE8= + + + +zaXYV1izyPjrkTgdFld0Aig8lTdZBmBFHfpLk2Z80yI= + + + +jzy79WpT78mq4nDlke/34XEvrKxGUO+2EpR6K7XxfpA= + + + +TYc7NLno0IPtZ3vJUSbv7x2egE6uOM+jjT9hLy44SaQ= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +YJsawxBl4v8gOPS2gtOeP2dunWNT2h82VTS4m0PLJuE= + + + +GEj/x2grCuJ4jyXwtCv0iPWmZMur8uyTxen9ujtchuo= + + + +hs7yf+kk/AZ1IfYKYVAabnmDjU9TbEHZp3EmAUmC0E4= + + + +HxAowejDwPIHR7Juav5eSErD3RkNSJeU3ec/nkkj8Io= + + + +6CDrh3wGZ5c4DjHzzLOGxvyGluSW2IbpS6hwxqha8Os= + + + +vP3jrgLTrPvh2IjuJJpDko1Be2E53orobcjHGJM+Mws= + + + +S89gYFLEoETwO4asJLop3GCR+4B6hBLVuhRuFJBeh9g= + + + +4T4P1eYVZ6WUn0tVe8kaIHIisQJallHCR5xRby6EowE= + + + +9BGi10BCQqVHHZLnZtjSZaw81xd+s8U9cOZxQ3oMA/Y= + + + +3vBrkdY8//iJCv3fsQ2CF7dDcFhQZI4LcXf/ek9eQkk= + + + +xtlvroyjhj69h9U4bfVmDYUsCan8/eoXuvIz6+dbLV8= + + + +IM4aA5H/BcnHGHoSjHRU+6xpF24MkAJogOpYaS/L71o= + + + +xxlnKX11mozHbi4aD2YyH81GP0zK3pp8Xb6ksI3OEbk= + + + +CUt71aBDXeoFcRsajRWyvd/MuUuYWWZcOV2ILgDKT+A= + + + +krEXlVBUFKl5O3nV1+VsPkCiE9dfSArbJBlz2tX7JEs= + + + +LcetW8bP+g0JnjfpGKLB/+I/x4VcZumPQhv6PMhBOng= + + + +ft8pnryry1TTGAqf+EkRctr0SlOP2b0dT/SYJuwz8RU= + + + +nnaNbWfuxmT2sXlRY07xQEpwMUpn6IFRrOaD3iD9S6Q= + + + +sNf2sdccsJI813Oq89pqfpmL0CnkA7Us7s1ECpx2ees= + + + +T0C9o1sRz5C6Gd4pTIPa+xysJz66cTkjN015UgppJVQ= + + + +iHhcpjOZmvOKOBAy+BY1vLlWSTJNpadZAEXaCaKptvE= + + + +g0zOTn7v3LGrlSvNkHct6ScVAJhrR8IV/Zz0y5Eu0v8= + + + +wV2svWaHFJoyctGj/TEKfpmXqTkU2p+Qgp/Bb597reE= + + + +n28YFSI00RbMJPBZSbdP0OQQsvxdNzpn2GWt2+PrbPc= + + + +iZsnY+0m52xxT3UdsYZs7ub79A9ABAJUN6KS0HYbd3E= + + + +caSciNEjN2lsIvVdJCTjcg2HyVGomOV+b2DwstJyYBo= + + + +denQwZ0e0PuGnB9morvFKElS+PrAiqXEut2sIEMch0Y= + + + +7brYAIYlmlbdEVfg0KJ3W3uDQkTGJVVB2uvdo7QR9vQ= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +B0t/srQ7H6oeF9hA1LpkYZcbS4UVKKAaMYlxAFuXO3E= + + + +62E/o5MuUnOSVBaRZSdKbhv0lscE8Gg/HJ7dTvBQRM0= + + + +XMVVYcc56cbDI4Pd8Te6fghAJdUGvO1LlcyCkq8K8Ac= + + + +cfE5dtbr1Dt80JonqZ2eviZT6EkVxkRBvdwyM+K4EHg= + + + +dMlN8mvL+LDi2saM9rpMhc3dQY8zMm05Wz8CZ0HzDfQ= + + + +gR9usB6uYVDt3HZLtpUxZUCE3vHAWjanJuSmdFMKyi8= + + + +2DG+dMcV3K2df6ZKeNod2U36JkhJ7R1hx9NNFcWJRbc= + + + +Ln3hOvkfJZRJvkDnRgtBeA6cD0IaHhYw/aqNhgK3DfA= + + + +T96MAGkPfpk5fnU9CBPSNaoJY2I1WyGXswczfOTegY4= + + + +JoRzHXIx4eiKADLx5JCYN1nYpruJ+PTZDAPG9KkuXNk= + + + +A8aJddz36G+62atWmSC9h3c4C5z6vKpnia8cA6izD/E= + + + +EZpzXgDNipUOoTbV1jncvMS47xIl3bXVgx0nQmqqxXo= + + + +QXRxNo3bqYcrP7ZY/MMhFxKQs394mdDYGBWLOlCbjCg= + + + +1a4Z+8YjeWleB8gLQ4qb0BKzlXUrc6tuzmwWht6qTOY= + + + +d7ET4K6A2KNjzLbCco61PQ/yBt2so/sAu/e9vNJnQNU= + + + +9w/dvumHzD/CZVzjqJnZ3P28gd96j9squ9cVF3YSWHI= + + + +ZqPcxUyCaqCoKnM83oMLcFJiPzw2OBbxaYyiC8XaEAg= + + + +Ekq5bnNtaz2PPUJsMiSilVWr0zL9jnd9XNRK0bWO0ao= + + + +bZcZXnC8zfD96PXSzOEQV7EjXv9N4DlL5CAtsnfYVN8= + + + +Eew7dcF/G+r98PbrMKOoAoXbQM1JFYDxP6yQlFYuruE= + + + +NKDQqz/0/aWKibG1L0DZpEONakdVB+wgVRmcFau3Ngg= + + + +j+sME2Dw8NDtpAa92xgMyqko3y50O554KWzQnl4eWF4= + + + +hGqh8EpwBYy6lCXK6bevIVWaC+h8P2gvmR0mksZghcw= + + + +VPGSS9tRUIfOIzsarA2630pPHbpbi81ZatZMzNBHsao= + + + +IbT/1bjUs1sPfbvtWLk12Wt4kOHSLb1YTrIEJwQZ2no= + + + +kTqQprk+U4Qhoc1vkeZG/U9xg5HCS3PmRQy58taM/vM= + + + +03ESu7fr3UI0qrvfWd4Datj5EtHgjYCCiNrrZYQQvKA= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +kHQYk81qtwceXcZNxO3PWfTNjW4+rzInp6KBUL7Y5lE= + + + +n6eoAkZhEym1Ps3rLl4uSnLZIj4N8rKsNWDLWD/B4ck= + + + +1a0NNIMmYzNch4DaUR9yPYHCRgLBeXUSTjCvB8d5K3k= + + + +h6HGLOwo/eo9qdNqb49debja5Ps+j6jbKky/g+JE2Qw= + + + +7GGLi9Csczo07WUeBysn2qrCUQy6DozG41cRUBJvbso= + + + +XU0TY3CwVPAaZh2WboiTsixZumnjNlN/HSOMiDs9R4g= + + + +OROzZj+2lsUrjXvaX3W0mJIHC/OnL1LbgmTx9GTxY+A= + + + +vmK3Wo7ho61vbOsQ7P6Qto4QLaopCju0jDVit5L+Uac= + + + +FW0hIktjqK981HDbThhjx5DSIw6ZvaeIL3d+j9YZ4qY= + + + +Aq+uq61aGfWxLhizz8az4JyACaEqoFmDNAZSW4O9kFo= + + + ++fFkFnqLZInTzP2NsZITmbzOmQwcX9p+2phSns0uJeE= + + + +HVUcqrppgQ+26sx43aoxAA7TRpPdjNALL7X5aDHkuTQ= + + + +seRZmeGf7ArxTeYpnmid9lkotaZBEbk4dIXQ6RtZtRE= + + + +FThjbRvkn9RbbgPg2LjqbceGcS6WENJbDzJj7s/t3FY= + + + +lR0HC4RQ22HBjq4EbwOSJKb25ljqyNJ2iBWoJSX4cSM= + + + +OpEW9ySn9l8+cbngUauK9PIcDVB8pqgO1dUNgwoD3eA= + + + +6OndEJIbesi3hm4EAUmPpFsPUsWDPeHWpn9zNoI5SME= + + + +2HY3YSEv2sa6aYsW2sIXGpM7QwjP7a8TD3+f941VsA4= + + + +J4Qti6bvp9yj+3+vAB4RfMsxVQ2vW12G8Gq3Kt/7o4E= + + + +NMZeiWTWwvadEH9vhXiKjhT9dqrfjuzzMDcP0OC6Tl0= + + + +Cs1DgAm+j483QxrpTe/SJHGk37O+uXv9grDmLeNhAjI= + + + +xAhB2Xkj/DGsuWeWowQ+zzvdEl0Mb0uwwa6bA9lbDWc= + + + +JCRihpuU6a+tJVUAZHG3/3xGQRgXklhcq81sxX9cDMo= + + + +L9E3bhUQ55TV+i+9MCtTeTfABFFiJDQzaHOQpyKPWlo= + + + +ebgGKBkUoePU9rMLITjSouk1bDRq5unGm8SwkPMUH10= + + + +Lom9hbNYXt61LGw7B0yNpsUn3gFOBhFPg14hk4Vf1lo= + + + +Vem9fbIUnB+85vROnHzWr15p2dhRkGGaKsNYQpCuXsA= + + + +xhp8YCSpYmDmCAit1o4zGp4CsFT+aDFIcNxuDmnW7w0= + + + ++i2fK4lpmfa5nMi20T0cHlXz2V+VOVC0iWcOaBczKRw= + + + +SNGOvL8uw/+Bw5NUV3FBfNTH0ImPDinsBvpDAsupmXI= + + + +GJhc9jhIN/QITdrER/Baux08K/9EdoSCIUh2AjunrZg= + + + +M79Bh9reqTUhRkjr94XJFphhB0ht7PMscLlgGliYj5Y= + + + +2NPmuSBrPeApVGu1m8XchSAuseX/ZE7rv9DZDiyyoMA= + + + +79AeVMrhqAdXMunOTtyGk9LdZYYHl20eDYGvdbsVN6U= + + + +0H1xpLQuq6AkUYei1k8SK+MJvWxb49sC/tc+WqY8xX8= + + + +9l1Lnn8oEN17rpiRG2+7PRZx53yjkrCYdBgE6Cu5aoU= + + + +8jmEKbpgSsoetkanO3di6fgOqRVBfUzSz1JtqhyykrM= + + + +PzxWR73/uVzgdLUOPkxXnj+0UFjPdl85pXvBBqp/+S8= + + + +F7/yVemsWsf6JdtZbLum7iELn8P9fImnl91fftkdWkk= + + + +HAofdyPkxlDKM6OrA1E7UarBNqsD34PRazUdubOuQJY= + + + +BVjAXRYFYd+Kx3+dwooZiRzd1P0FVZ/Jo+ObqXXg4Zo= + + + +orWoEj2Hn6dI3gOVOfaNENeV5eaJpkUjGJZuOjaIHwY= + + + +3pE3FL3QabUV7xzDf3Ug0K2dc5OauDwBGHFa8A8BehY= + + + +snp9Oz5ugwe848GsSdRViZaQazVInlx+DQm6sioxTLo= + + + +PygyInV4NRBuhCoTWmx6EAxHUmJ6P+H0qgRue6X5s04= + + + +9nLUBdD3cfhNeOeD9EBOxZv+8kZtFanjLPBWZMAN1jQ= + + + +CMhH3IjiARn6Jc6i28EB58ch5O7SWtaJgEW4bnpJFLg= + + + +TQG/nAb6SXFAth/KVBFFIpXAECs6Lv8Onk/Ikcx2XoE= + + + +1C+4xtltuE99m/Ys4sHtQdJAFFaoe3doAUPDI5FqbWo= + + + +S+xJ9zuGNvjQuHPM49Nk2q9DVl6V+EINx4Y5aJc3+SQ= + + + +Mg2EF4CGIJ71KL307DbesTGfA2M88zF9IdpojV5OqWg= + + + +D35yQwKPYx4gMqw8hG8TqUp8VAbsKteVPBKfBZx6pXw= + + + +fYpjyE+Coh3VdAVMucXLFlr5ZvE21zBI7DeTPu1+T3A= + + + +oxX3kz7Ot/nqJSKn/nUzwMevCidLhyYtyaGDGpI1138= + + + +Kmx0h55Ed3OX+LfpPvK6aAkkbSd+HAcpQG0YJs3e5j8= + + + +8CwVuc1KIdhqjwJI1c4FOgIJNUgJVlBKxJzdCmhw3OY= + + + +IVAscuPnZ4wVpmldkPJrq7jKmfVqLk9+u4UtU1n1+PI= + + + +Hr+XrvjrRcLYvoJG08Mzg9/+GKA7xdKvVMruUS4/LvU= + + + +FJxm9+48FVrc3PKCvbO2uJmcmcrAP41hEj4F/xjI4c4= + + + +gQvcj3+fTNB3J8ElU2vrlmN/f7cc/8DdOjDxLBzUNNo= + + + +649u10Yowy+c8CSRIqoVgRGUg39hgPt/H2NgwHEL31w= + + + +LKygsuD9H8tSb+gZlp/5WIyzDWSRGjh1ht9h0yejaBw= + + + +P9zQhWirRATIEPR8/4/vj4qr6sxJy1p3fNwDqPxhTMk= + + + +PemByZhsVq5SUSdoQz8eT2Cn32CB99VNdrW9My2HXYw= + + + +X9i7g6euubn9+sjoN1SqXEEiIywqXmx/Rgw2fanPTxY= + + + +SciIKS7ynwuDz9B47+dDBc8wtxjc6I7ttE0martwMsI= + + + +vHZwgimbQnp6cTxcY3G71tnj19pWhkAzKsYBS1tIOuI= + + + +R4IqERvdTsZ/grlYSpJjBMpLwkRUkdBOqzJfz7JfPKw= + + + +1/p9dJr33nY1C0XgKEdCpZrZUb8t5qXaihqd6/pCiE4= + + + +HsFpCbHKX3rrw08m0uvLQePPMJFo7jRyhiOciyFA3r0= + + + +j6BXQz+viQp8MffUhE/UEL/mKldHk6qama3FZ50Jjso= + + + +u4GpeYBVMfIgd8mMhre2dPJaK0Yopx6LC2ygrg5xcJ8= + + + +206uuAe2w6eHcEKoG8TeByiBPK+bDF4/B5kCEZ5h9bo= + + + +tmW5EGuSb50QJqkOwuGfcDN5MVn50wh63hiuYbvsq0Q= + + + +j4nd57eJ6gN5FWaUwlVl4wudh6saRuzsUeyEU8l5Vd8= + + + +64PwPoOGUPlBBpkt2MF8AIVek40pBIs1Y/uSm8K0N1M= + + + +Su9TpqYuX1RK9qph0qTlIWoSJA/m/eGw4hVBctMT3iY= + + + ++kvOvmsOCnArB291kMLmUu2a3yqKASzncXz3iduAcx4= + + + +uDSQ4I8u18tkS5QMInERJUYcIvDukY8RBY+AtelDQrs= + + + +JG5Ot1y71B5LxwdNMpQsnl92z1puAsLnBCI/na46x5k= + + + +/ANEStYoGJyiETrYIUuNYJg9k6irr0iR4yWtu1zDsPI= + + + +6X8RcJ69rWmrhbKtOmxi06RQ2H6VDBhv1wh8XSJH8Ds= + + + +PemByZhsVq5SUSdoQz8eT2Cn32CB99VNdrW9My2HXYw= + + + +1d0oEZHqPn+QzNzGIHwj9ODby6x9ggFs9uOsav6jPNs= + + + +rckkorXtmaFI0u9RxO76oPTwcC5bDt+nvp92XSLJdwk= + + + + + + +u/jU3U4Zm5ihTMSjKGlGYbWzDfRkGphPPHx3gJIYEJ4= + + + +SeeF1I8qPFaSUG8PCkLmtdAL0Zj58z33lH94+XObH3HZuumQe4SuXcIk7PW3Ae1PtLtpeNINpOtO +FKTEvbC1rgccC5FLT5Y++j3Ae0jNz0gDB43u+L2JZR/lpfj/eSLIQJP00auUfq3QpLeOeDbUJhCD +HigjEFHafzUXDlJjrEg= + + + + +MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV +BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE +CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry +aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS +MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex +IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp +YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK +90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H +mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB +hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez +GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1 +vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc= + + +MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO +MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw +IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj +IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL +MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6 +ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb +VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe +OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp +bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah +2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ +KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+ +yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0 +VhfnkHwPltmrpYVe + + + + + \ No newline at end of file diff --git a/tbtcoreapp/.tproject b/tbtcoreapp/.tproject new file mode 100644 index 0000000..d7a6d5b --- /dev/null +++ b/tbtcoreapp/.tproject @@ -0,0 +1,11 @@ + + + + + wearable-2.3.1 + + + + + + diff --git a/tbtcoreapp/Debug/.gdbcommand b/tbtcoreapp/Debug/.gdbcommand new file mode 100644 index 0000000..ae0b053 --- /dev/null +++ b/tbtcoreapp/Debug/.gdbcommand @@ -0,0 +1,4 @@ +set sysroot /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core +set debug-file-directory /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/lib/debug +set solib-search-path /home/tizen-2_3_1/workspace_wearable/tbtcoreapp/Debug +dir /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-emulator.core/usr/src/debug \ No newline at end of file diff --git a/tbtcoreapp/Debug/.gdbinit b/tbtcoreapp/Debug/.gdbinit new file mode 100644 index 0000000..14de1a6 --- /dev/null +++ b/tbtcoreapp/Debug/.gdbinit @@ -0,0 +1,8 @@ +python +import sys +sys.path.insert(0, "/home/tizen-2_3_1/tizen-sdk/tools/python") +from libstdcxx.v6.printers import register_libstdcxx_printers +register_libstdcxx_printers (None) +from osp.printers import register_osp_printers +register_osp_printers (None) +end diff --git a/tbtcoreapp/Debug/makefile b/tbtcoreapp/Debug/makefile new file mode 100644 index 0000000..e7e2981 --- /dev/null +++ b/tbtcoreapp/Debug/makefile @@ -0,0 +1,74 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +-include ../makefile.init + +RM := rm -rf + +# All of the sources participating in the build are defined here +-include sources.mk +-include src/view/subdir.mk +-include src/utils/subdir.mk +-include src/model/subdir.mk +-include src/subdir.mk +-include res/edje/2.4/wearable_circle/subdir.mk +-include res/edje/2.4/wearable_360_x_480/subdir.mk +-include res/edje/2.4/wearable_320_x_320/subdir.mk +-include res/edje/2.4/wearable/subdir.mk +-include res/edje/2.4/mobile/subdir.mk +-include res/edje/2.3.1/wearable_circle/subdir.mk +-include res/edje/2.3.1/wearable_360_x_480/subdir.mk +-include res/edje/2.3.1/wearable_320_x_320/subdir.mk +-include res/edje/2.3.1/wearable/subdir.mk +-include res/edje/2.3.1/mobile/subdir.mk +-include subdir.mk +-include objects.mk +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(C++_DEPS)),) +-include $(C++_DEPS) +endif +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +ifneq ($(strip $(CC_DEPS)),) +-include $(CC_DEPS) +endif +ifneq ($(strip $(CPP_DEPS)),) +-include $(CPP_DEPS) +endif +ifneq ($(strip $(CXX_DEPS)),) +-include $(CXX_DEPS) +endif +ifneq ($(strip $(C_UPPER_DEPS)),) +-include $(C_UPPER_DEPS) +endif +endif + +-include ../makefile.defs +-include makefile.sa + +# Add inputs and outputs from these tool invocations to the build variables + +# All Target +all: tbtcoreapp secondary-outputs + +# Tool invocations +tbtcoreapp: $(OBJS) $(USER_OBJS) + @echo 'Building target: $@' + @echo 'Invoking: C++ Linker' + $(CXX) -o"tbtcoreapp" $(OBJS) $(USER_OBJS) $(LIBS) $(TC_LINKER_MISC) $(RS_LINKER_MISC) -pie -lpthread -Xlinker -rpath="/home/developer/sdk_tools/lib" --sysroot="$(SBI_SYSROOT)" -Xlinker --version-script="$(PROJ_PATH)/.exportMap" -L"$(SBI_SYSROOT)/usr/lib" $(RS_LIBRARIES) -Xlinker -rpath="/opt/usr/apps/$(APPID)/lib" -Werror-implicit-function-declaration + @echo 'Finished building target: $@' + @echo ' ' + +# Other Targets +clean: sa_clean + -$(RM) $(MO_FILES)$(OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(AST)$(FNMAP)$(EDJ_FILES)$(CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS) tbtcoreapp + -@echo ' ' + +secondary-outputs: $(MO_FILES) $(EDJ_FILES) + +.PHONY: all clean dependents +.SECONDARY: + +-include ../makefile.targets diff --git a/tbtcoreapp/Debug/makefile.sa b/tbtcoreapp/Debug/makefile.sa new file mode 100644 index 0000000..f0b5c48 --- /dev/null +++ b/tbtcoreapp/Debug/makefile.sa @@ -0,0 +1,64 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +SA_C_OPTIONS := -I"pch" -D_DEBUG -I"/home/tizen-2_3_1/workspace_wearable/tbtcoreapp/inc" -O0 -g3 -Wall -c -fmessage-length=0 $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIE --sysroot="$(SBI_SYSROOT)" -mthumb -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/libxml2" -I"/home/tizen-2_3_1/tizen-sdk/library" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/appcore-agent" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/appcore-watch" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/appfw" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/badge" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/base" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/cairo" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/ckm" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/content" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/context-manager" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/dbus-1.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/device" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/dlog" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/ecore-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/e_dbus-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/edje-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/eet-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/efl-extension" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/efreet-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/eina-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/eina-1/eina" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/eio-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/elementary-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/embryo-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/ethumb-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/evas-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/ewebkit2-0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/fontconfig" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/freetype2" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/gio-unix-2.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/glib-2.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/json-glib-1.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/json-glib-1.0/json-glib" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/location" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/media" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/media-content" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/messaging" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/minizip" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/network" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/notification" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/sensor" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/storage" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/system" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/telephony" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/ui" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/widget_service" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/widget_viewer_evas" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/lib/dbus-1.0/include" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/lib/glib-2.0/include" -Werror-implicit-function-declaration +SA_CPP_OPTIONS := -I"pch" -D_DEBUG -I"/home/tizen-2_3_1/workspace_wearable/tbtcoreapp/inc" -O0 -g3 -Wall -c -fmessage-length=0 -target arm-tizen-linux-gnueabi -gcc-toolchain /home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../arm-linux-gnueabi-gcc-4.6/ -ccc-gcc-name arm-linux-gnueabi-g++ -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mtune=cortex-a8 -Wno-gnu -fPIE --sysroot="/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core" -mthumb -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/libxml2" -I"/home/tizen-2_3_1/tizen-sdk/library" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/appcore-agent" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/appcore-watch" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/appfw" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/badge" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/base" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/cairo" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/ckm" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/content" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/context-manager" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/dbus-1.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/device" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/dlog" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/ecore-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/e_dbus-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/edje-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/eet-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/efl-extension" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/efreet-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/eina-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/eina-1/eina" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/eio-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/elementary-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/embryo-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/ethumb-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/evas-1" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/ewebkit2-0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/fontconfig" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/freetype2" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/gio-unix-2.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/glib-2.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/json-glib-1.0" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/json-glib-1.0/json-glib" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/location" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/media" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/media-content" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/messaging" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/minizip" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/network" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/notification" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/sensor" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/storage" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/system" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/telephony" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/ui" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/widget_service" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/include/widget_viewer_evas" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/lib/dbus-1.0/include" -I"/home/tizen-2_3_1/tizen-sdk/tools/smart-build-interface/../../platforms/wearable-2.3.1/rootstraps/wearable-2.3.1-device.core/usr/lib/glib-2.0/include" + +REL_C_SRCS = $(filter-out $(wildcard ../*),$(wildcard $(C_SRCS))) +REL_CC_SRCS = $(filter-out $(wildcard ../*),$(wildcard $(CC_SRCS))) +REL_CPP_SRCS = $(filter-out $(wildcard ../*),$(wildcard $(CPP_SRCS))) + +C_AST := $(REL_C_SRCS:../%=%.ast) +C_FN := $(REL_C_SRCS:../%=%.fn) +C_SA := $(REL_C_SRCS:../%=%.sa) + +CPP_AST := $(REL_CC_SRCS:../%=%.ast) $(REL_CPP_SRCS:../%=%.ast) +CPP_FN := $(REL_CC_SRCS:..%=%.fn) $(REL_CPP_SRCS:../%=%.fn) +CPP_SA := $(REL_CC_SRCS:..%=%.sa) $(REL_CPP_SRCS:../%=%.sa) + +CHECKERS=alpha.cplusplus.NewDeleteLeaks,alpha.unix.cstring,alpha.security.ArrayBoundV2,resourceLeak,core,unix,tizen + +$(C_AST): %.ast : ../% + clang -emit-ast -o $@ $< $(SA_C_OPTIONS) + -@echo 'Finished building: $@' + -@echo ' ' + +$(C_FN): %.fn : %.ast + $(RM) $@ + clangFnMapGen -o $@ -ast $< $< -- + -@echo 'Finished generating: $@' + -@echo ' ' + +$(C_SA): %: pre_sa + clang --analyze $(@:%.sa=../%) -Xclang -analyzer-output=$(SA_REPORT_TYPE) -Xclang -analyzer-checker=$(CHECKERS) -Xclang -analyzer-purge=block -o $(SA_REPORT_PATH) $(SA_C_OPTIONS) + -@echo 'Finished Analyzing: $(@:%.sa=../%)' + -@echo ' ' + +$(CPP_AST): %.ast : ../% + clang++ -emit-ast -o $@ $< $(SA_CPP_OPTIONS) + -@echo 'Finished building: $@' + -@echo ' ' + +$(CPP_FN): %.fn : %.ast + $(RM) $@ + clangFnMapGen -o $@ -ast $< $< -- + -@echo 'Finished generating: $@' + -@echo ' ' + +$(CPP_SA): %: pre_sa + clang++ --analyze $(@:%.sa=../%) -Xclang -analyzer-output=$(SA_REPORT_TYPE) -Xclang -analyzer-checker=$(CHECKERS) -Xclang -analyzer-purge=block -o $(SA_REPORT_PATH) $(SA_CPP_OPTIONS) + -@echo 'Finished Analyzing: $(@:%.sa=../%)' + -@echo ' ' + +sa_clean: + $(RM) $(C_AST) $(C_FN) $(CPP_AST) $(CPP_FN) $(wildcard $(SA_REPORT_PATH)/*) + -@echo ' ' + +pre_sa: $(C_AST) $(C_FN) $(CPP_AST) $(CPP_FN) + -$(RM) $(wildcard $(SA_REPORT_PATH)/*) + cat $(C_FN) $(CPP_FN) > $(SA_REPORT_PATH)/externalFnMap.txt + +sa: $(C_SA) $(CPP_SA) + +.PHONY: sa pre_sa sa_clean $(C_SA) $(CPP_SA) diff --git a/tbtcoreapp/Debug/objects.mk b/tbtcoreapp/Debug/objects.mk new file mode 100644 index 0000000..742c2da --- /dev/null +++ b/tbtcoreapp/Debug/objects.mk @@ -0,0 +1,8 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +USER_OBJS := + +LIBS := + diff --git a/tbtcoreapp/Debug/org.tizen.tbtcoreapp-1.0.0-arm.tpk b/tbtcoreapp/Debug/org.tizen.tbtcoreapp-1.0.0-arm.tpk new file mode 100644 index 0000000..0fc8bae Binary files /dev/null and b/tbtcoreapp/Debug/org.tizen.tbtcoreapp-1.0.0-arm.tpk differ diff --git a/tbtcoreapp/Debug/org.tizen.tbtcoreapp-1.0.0-i386.tpk b/tbtcoreapp/Debug/org.tizen.tbtcoreapp-1.0.0-i386.tpk new file mode 100644 index 0000000..9d692c9 Binary files /dev/null and b/tbtcoreapp/Debug/org.tizen.tbtcoreapp-1.0.0-i386.tpk differ diff --git a/tbtcoreapp/Debug/res/edje/2.3.1/mobile/subdir.mk b/tbtcoreapp/Debug/res/edje/2.3.1/mobile/subdir.mk new file mode 100644 index 0000000..403dfc8 --- /dev/null +++ b/tbtcoreapp/Debug/res/edje/2.3.1/mobile/subdir.mk @@ -0,0 +1,77 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +EDC_SRCS += \ +../res/edje/2.3.1/mobile/animation_viewer.edc \ +../res/edje/2.3.1/mobile/bluetooth_le_viewer.edc \ +../res/edje/2.3.1/mobile/bluetooth_oob_viewer.edc \ +../res/edje/2.3.1/mobile/bluetooth_viewer.edc \ +../res/edje/2.3.1/mobile/camera_viewer.edc \ +../res/edje/2.3.1/mobile/custom_button.edc \ +../res/edje/2.3.1/mobile/datacontrol_viewer.edc \ +../res/edje/2.3.1/mobile/display_viewer.edc \ +../res/edje/2.3.1/mobile/efl_callback_viewer.edc \ +../res/edje/2.3.1/mobile/event_viewer.edc \ +../res/edje/2.3.1/mobile/feature_viewer.edc \ +../res/edje/2.3.1/mobile/gps_viewer.edc \ +../res/edje/2.3.1/mobile/graphics_viewer.edc \ +../res/edje/2.3.1/mobile/image_viewer.edc \ +../res/edje/2.3.1/mobile/input_viewer.edc \ +../res/edje/2.3.1/mobile/mock_viewer.edc \ +../res/edje/2.3.1/mobile/nfc_viewer.edc \ +../res/edje/2.3.1/mobile/pick_viewer.edc \ +../res/edje/2.3.1/mobile/push_service.edc \ +../res/edje/2.3.1/mobile/runtimeinfo_viewer.edc \ +../res/edje/2.3.1/mobile/sensor_viewer.edc \ +../res/edje/2.3.1/mobile/shortcut_viewer.edc \ +../res/edje/2.3.1/mobile/sound_player.edc \ +../res/edje/2.3.1/mobile/touch_viewer.edc \ +../res/edje/2.3.1/mobile/ui_viewer.edc \ +../res/edje/2.3.1/mobile/video_player.edc \ +../res/edje/2.3.1/mobile/wifi_viewer.edc \ +../res/edje/2.3.1/mobile/wifidirect_info_viewer.edc \ +../res/edje/2.3.1/mobile/wifidirect_viewer.edc + +EDJ_FILES += \ +./res/edje/2.3.1/mobile/animation_viewer.edj \ +./res/edje/2.3.1/mobile/bluetooth_le_viewer.edj \ +./res/edje/2.3.1/mobile/bluetooth_oob_viewer.edj \ +./res/edje/2.3.1/mobile/bluetooth_viewer.edj \ +./res/edje/2.3.1/mobile/camera_viewer.edj \ +./res/edje/2.3.1/mobile/custom_button.edj \ +./res/edje/2.3.1/mobile/datacontrol_viewer.edj \ +./res/edje/2.3.1/mobile/display_viewer.edj \ +./res/edje/2.3.1/mobile/efl_callback_viewer.edj \ +./res/edje/2.3.1/mobile/event_viewer.edj \ +./res/edje/2.3.1/mobile/feature_viewer.edj \ +./res/edje/2.3.1/mobile/gps_viewer.edj \ +./res/edje/2.3.1/mobile/graphics_viewer.edj \ +./res/edje/2.3.1/mobile/image_viewer.edj \ +./res/edje/2.3.1/mobile/input_viewer.edj \ +./res/edje/2.3.1/mobile/mock_viewer.edj \ +./res/edje/2.3.1/mobile/nfc_viewer.edj \ +./res/edje/2.3.1/mobile/pick_viewer.edj \ +./res/edje/2.3.1/mobile/push_service.edj \ +./res/edje/2.3.1/mobile/runtimeinfo_viewer.edj \ +./res/edje/2.3.1/mobile/sensor_viewer.edj \ +./res/edje/2.3.1/mobile/shortcut_viewer.edj \ +./res/edje/2.3.1/mobile/sound_player.edj \ +./res/edje/2.3.1/mobile/touch_viewer.edj \ +./res/edje/2.3.1/mobile/ui_viewer.edj \ +./res/edje/2.3.1/mobile/video_player.edj \ +./res/edje/2.3.1/mobile/wifi_viewer.edj \ +./res/edje/2.3.1/mobile/wifidirect_info_viewer.edj \ +./res/edje/2.3.1/mobile/wifidirect_viewer.edj + + +# Each subdirectory must supply rules for building sources it contributes +res/edje/2.3.1/mobile/%.edj: ../res/edje/2.3.1/mobile/%.edc + @echo 'Building file: $<' + @echo 'Invoking: EDC Resource Compiler' + edje_cc -id "$(PROJ_PATH)/edje/images" -id "$(SDK_TOOLPATH)/enventor/share/enventor/images" -sd "$(PROJ_PATH)/edje/sounds" -sd "$(SDK_TOOLPATH)/enventor/share/enventor/sounds" -fd "$(PROJ_PATH)/edje/fonts" -fd "$(SDK_TOOLPATH)/enventor/share/enventor/fonts" "$<" "$@" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/res/edje/2.3.1/wearable/subdir.mk b/tbtcoreapp/Debug/res/edje/2.3.1/wearable/subdir.mk new file mode 100644 index 0000000..6f97d8b --- /dev/null +++ b/tbtcoreapp/Debug/res/edje/2.3.1/wearable/subdir.mk @@ -0,0 +1,77 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +EDC_SRCS += \ +../res/edje/2.3.1/wearable/animation_viewer.edc \ +../res/edje/2.3.1/wearable/bluetooth_oob_viewer.edc \ +../res/edje/2.3.1/wearable/bluetooth_viewer.edc \ +../res/edje/2.3.1/wearable/camera_viewer.edc \ +../res/edje/2.3.1/wearable/custom_button.edc \ +../res/edje/2.3.1/wearable/datacontrol_viewer.edc \ +../res/edje/2.3.1/wearable/display_viewer.edc \ +../res/edje/2.3.1/wearable/efl_callback_viewer.edc \ +../res/edje/2.3.1/wearable/event_viewer.edc \ +../res/edje/2.3.1/wearable/feature_viewer.edc \ +../res/edje/2.3.1/wearable/gps_viewer.edc \ +../res/edje/2.3.1/wearable/graphics_viewer.edc \ +../res/edje/2.3.1/wearable/image_viewer.edc \ +../res/edje/2.3.1/wearable/input_viewer.edc \ +../res/edje/2.3.1/wearable/mock_viewer.edc \ +../res/edje/2.3.1/wearable/nfc_viewer.edc \ +../res/edje/2.3.1/wearable/pick_viewer.edc \ +../res/edje/2.3.1/wearable/push_service.edc \ +../res/edje/2.3.1/wearable/runtimeinfo_viewer.edc \ +../res/edje/2.3.1/wearable/sensor_viewer.edc \ +../res/edje/2.3.1/wearable/shortcut_viewer.edc \ +../res/edje/2.3.1/wearable/sound_player.edc \ +../res/edje/2.3.1/wearable/touch_viewer.edc \ +../res/edje/2.3.1/wearable/ui_viewer.edc \ +../res/edje/2.3.1/wearable/video_player.edc \ +../res/edje/2.3.1/wearable/wearable_toolbar.edc \ +../res/edje/2.3.1/wearable/wifi_viewer.edc \ +../res/edje/2.3.1/wearable/wifidirect_info_viewer.edc \ +../res/edje/2.3.1/wearable/wifidirect_viewer.edc + +EDJ_FILES += \ +./res/edje/2.3.1/wearable/animation_viewer.edj \ +./res/edje/2.3.1/wearable/bluetooth_oob_viewer.edj \ +./res/edje/2.3.1/wearable/bluetooth_viewer.edj \ +./res/edje/2.3.1/wearable/camera_viewer.edj \ +./res/edje/2.3.1/wearable/custom_button.edj \ +./res/edje/2.3.1/wearable/datacontrol_viewer.edj \ +./res/edje/2.3.1/wearable/display_viewer.edj \ +./res/edje/2.3.1/wearable/efl_callback_viewer.edj \ +./res/edje/2.3.1/wearable/event_viewer.edj \ +./res/edje/2.3.1/wearable/feature_viewer.edj \ +./res/edje/2.3.1/wearable/gps_viewer.edj \ +./res/edje/2.3.1/wearable/graphics_viewer.edj \ +./res/edje/2.3.1/wearable/image_viewer.edj \ +./res/edje/2.3.1/wearable/input_viewer.edj \ +./res/edje/2.3.1/wearable/mock_viewer.edj \ +./res/edje/2.3.1/wearable/nfc_viewer.edj \ +./res/edje/2.3.1/wearable/pick_viewer.edj \ +./res/edje/2.3.1/wearable/push_service.edj \ +./res/edje/2.3.1/wearable/runtimeinfo_viewer.edj \ +./res/edje/2.3.1/wearable/sensor_viewer.edj \ +./res/edje/2.3.1/wearable/shortcut_viewer.edj \ +./res/edje/2.3.1/wearable/sound_player.edj \ +./res/edje/2.3.1/wearable/touch_viewer.edj \ +./res/edje/2.3.1/wearable/ui_viewer.edj \ +./res/edje/2.3.1/wearable/video_player.edj \ +./res/edje/2.3.1/wearable/wearable_toolbar.edj \ +./res/edje/2.3.1/wearable/wifi_viewer.edj \ +./res/edje/2.3.1/wearable/wifidirect_info_viewer.edj \ +./res/edje/2.3.1/wearable/wifidirect_viewer.edj + + +# Each subdirectory must supply rules for building sources it contributes +res/edje/2.3.1/wearable/%.edj: ../res/edje/2.3.1/wearable/%.edc + @echo 'Building file: $<' + @echo 'Invoking: EDC Resource Compiler' + edje_cc -id "$(PROJ_PATH)/edje/images" -id "$(SDK_TOOLPATH)/enventor/share/enventor/images" -sd "$(PROJ_PATH)/edje/sounds" -sd "$(SDK_TOOLPATH)/enventor/share/enventor/sounds" -fd "$(PROJ_PATH)/edje/fonts" -fd "$(SDK_TOOLPATH)/enventor/share/enventor/fonts" "$<" "$@" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/res/edje/2.3.1/wearable_320_x_320/subdir.mk b/tbtcoreapp/Debug/res/edje/2.3.1/wearable_320_x_320/subdir.mk new file mode 100644 index 0000000..e90f276 --- /dev/null +++ b/tbtcoreapp/Debug/res/edje/2.3.1/wearable_320_x_320/subdir.mk @@ -0,0 +1,77 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +EDC_SRCS += \ +../res/edje/2.3.1/wearable_320_x_320/animation_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/bluetooth_oob_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/bluetooth_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/camera_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/custom_button.edc \ +../res/edje/2.3.1/wearable_320_x_320/datacontrol_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/display_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/efl_callback_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/event_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/feature_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/gps_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/graphics_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/image_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/input_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/mock_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/nfc_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/pick_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/push_service.edc \ +../res/edje/2.3.1/wearable_320_x_320/runtimeinfo_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/sensor_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/shortcut_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/sound_player.edc \ +../res/edje/2.3.1/wearable_320_x_320/touch_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/ui_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/video_player.edc \ +../res/edje/2.3.1/wearable_320_x_320/wearable_320_x_320_toolbar.edc \ +../res/edje/2.3.1/wearable_320_x_320/wearable_circle_toolbar.edc \ +../res/edje/2.3.1/wearable_320_x_320/wifi_viewer.edc \ +../res/edje/2.3.1/wearable_320_x_320/wifidirect_viewer.edc + +EDJ_FILES += \ +./res/edje/2.3.1/wearable_320_x_320/animation_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/bluetooth_oob_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/bluetooth_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/camera_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/custom_button.edj \ +./res/edje/2.3.1/wearable_320_x_320/datacontrol_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/display_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/efl_callback_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/event_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/feature_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/gps_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/graphics_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/image_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/input_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/mock_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/nfc_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/pick_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/push_service.edj \ +./res/edje/2.3.1/wearable_320_x_320/runtimeinfo_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/sensor_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/shortcut_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/sound_player.edj \ +./res/edje/2.3.1/wearable_320_x_320/touch_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/ui_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/video_player.edj \ +./res/edje/2.3.1/wearable_320_x_320/wearable_320_x_320_toolbar.edj \ +./res/edje/2.3.1/wearable_320_x_320/wearable_circle_toolbar.edj \ +./res/edje/2.3.1/wearable_320_x_320/wifi_viewer.edj \ +./res/edje/2.3.1/wearable_320_x_320/wifidirect_viewer.edj + + +# Each subdirectory must supply rules for building sources it contributes +res/edje/2.3.1/wearable_320_x_320/%.edj: ../res/edje/2.3.1/wearable_320_x_320/%.edc + @echo 'Building file: $<' + @echo 'Invoking: EDC Resource Compiler' + edje_cc -id "$(PROJ_PATH)/edje/images" -id "$(SDK_TOOLPATH)/enventor/share/enventor/images" -sd "$(PROJ_PATH)/edje/sounds" -sd "$(SDK_TOOLPATH)/enventor/share/enventor/sounds" -fd "$(PROJ_PATH)/edje/fonts" -fd "$(SDK_TOOLPATH)/enventor/share/enventor/fonts" "$<" "$@" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/res/edje/2.3.1/wearable_360_x_480/subdir.mk b/tbtcoreapp/Debug/res/edje/2.3.1/wearable_360_x_480/subdir.mk new file mode 100644 index 0000000..6788901 --- /dev/null +++ b/tbtcoreapp/Debug/res/edje/2.3.1/wearable_360_x_480/subdir.mk @@ -0,0 +1,77 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +EDC_SRCS += \ +../res/edje/2.3.1/wearable_360_x_480/animation_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/bluetooth_oob_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/bluetooth_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/camera_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/custom_button.edc \ +../res/edje/2.3.1/wearable_360_x_480/datacontrol_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/display_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/efl_callback_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/event_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/feature_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/gps_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/graphics_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/image_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/input_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/mock_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/nfc_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/pick_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/push_service.edc \ +../res/edje/2.3.1/wearable_360_x_480/runtimeinfo_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/sensor_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/shortcut_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/sound_player.edc \ +../res/edje/2.3.1/wearable_360_x_480/touch_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/ui_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/video_player.edc \ +../res/edje/2.3.1/wearable_360_x_480/wearable_360_x_480_toolbar.edc \ +../res/edje/2.3.1/wearable_360_x_480/wifi_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/wifidirect_info_viewer.edc \ +../res/edje/2.3.1/wearable_360_x_480/wifidirect_viewer.edc + +EDJ_FILES += \ +./res/edje/2.3.1/wearable_360_x_480/animation_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/bluetooth_oob_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/bluetooth_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/camera_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/custom_button.edj \ +./res/edje/2.3.1/wearable_360_x_480/datacontrol_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/display_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/efl_callback_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/event_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/feature_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/gps_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/graphics_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/image_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/input_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/mock_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/nfc_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/pick_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/push_service.edj \ +./res/edje/2.3.1/wearable_360_x_480/runtimeinfo_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/sensor_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/shortcut_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/sound_player.edj \ +./res/edje/2.3.1/wearable_360_x_480/touch_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/ui_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/video_player.edj \ +./res/edje/2.3.1/wearable_360_x_480/wearable_360_x_480_toolbar.edj \ +./res/edje/2.3.1/wearable_360_x_480/wifi_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/wifidirect_info_viewer.edj \ +./res/edje/2.3.1/wearable_360_x_480/wifidirect_viewer.edj + + +# Each subdirectory must supply rules for building sources it contributes +res/edje/2.3.1/wearable_360_x_480/%.edj: ../res/edje/2.3.1/wearable_360_x_480/%.edc + @echo 'Building file: $<' + @echo 'Invoking: EDC Resource Compiler' + edje_cc -id "$(PROJ_PATH)/edje/images" -id "$(SDK_TOOLPATH)/enventor/share/enventor/images" -sd "$(PROJ_PATH)/edje/sounds" -sd "$(SDK_TOOLPATH)/enventor/share/enventor/sounds" -fd "$(PROJ_PATH)/edje/fonts" -fd "$(SDK_TOOLPATH)/enventor/share/enventor/fonts" "$<" "$@" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/res/edje/2.3.1/wearable_circle/subdir.mk b/tbtcoreapp/Debug/res/edje/2.3.1/wearable_circle/subdir.mk new file mode 100644 index 0000000..23dfb3b --- /dev/null +++ b/tbtcoreapp/Debug/res/edje/2.3.1/wearable_circle/subdir.mk @@ -0,0 +1,75 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +EDC_SRCS += \ +../res/edje/2.3.1/wearable_circle/animation_viewer.edc \ +../res/edje/2.3.1/wearable_circle/bluetooth_oob_viewer.edc \ +../res/edje/2.3.1/wearable_circle/bluetooth_viewer.edc \ +../res/edje/2.3.1/wearable_circle/camera_viewer.edc \ +../res/edje/2.3.1/wearable_circle/custom_button.edc \ +../res/edje/2.3.1/wearable_circle/datacontrol_viewer.edc \ +../res/edje/2.3.1/wearable_circle/display_viewer.edc \ +../res/edje/2.3.1/wearable_circle/efl_callback_viewer.edc \ +../res/edje/2.3.1/wearable_circle/event_viewer.edc \ +../res/edje/2.3.1/wearable_circle/feature_viewer.edc \ +../res/edje/2.3.1/wearable_circle/gps_viewer.edc \ +../res/edje/2.3.1/wearable_circle/graphics_viewer.edc \ +../res/edje/2.3.1/wearable_circle/image_viewer.edc \ +../res/edje/2.3.1/wearable_circle/input_viewer.edc \ +../res/edje/2.3.1/wearable_circle/mock_viewer.edc \ +../res/edje/2.3.1/wearable_circle/nfc_viewer.edc \ +../res/edje/2.3.1/wearable_circle/pick_viewer.edc \ +../res/edje/2.3.1/wearable_circle/push_service.edc \ +../res/edje/2.3.1/wearable_circle/runtimeinfo_viewer.edc \ +../res/edje/2.3.1/wearable_circle/sensor_viewer.edc \ +../res/edje/2.3.1/wearable_circle/shortcut_viewer.edc \ +../res/edje/2.3.1/wearable_circle/sound_player.edc \ +../res/edje/2.3.1/wearable_circle/touch_viewer.edc \ +../res/edje/2.3.1/wearable_circle/ui_viewer.edc \ +../res/edje/2.3.1/wearable_circle/video_player.edc \ +../res/edje/2.3.1/wearable_circle/wearable_circle_toolbar.edc \ +../res/edje/2.3.1/wearable_circle/wifi_viewer.edc \ +../res/edje/2.3.1/wearable_circle/wifidirect_viewer.edc + +EDJ_FILES += \ +./res/edje/2.3.1/wearable_circle/animation_viewer.edj \ +./res/edje/2.3.1/wearable_circle/bluetooth_oob_viewer.edj \ +./res/edje/2.3.1/wearable_circle/bluetooth_viewer.edj \ +./res/edje/2.3.1/wearable_circle/camera_viewer.edj \ +./res/edje/2.3.1/wearable_circle/custom_button.edj \ +./res/edje/2.3.1/wearable_circle/datacontrol_viewer.edj \ +./res/edje/2.3.1/wearable_circle/display_viewer.edj \ +./res/edje/2.3.1/wearable_circle/efl_callback_viewer.edj \ +./res/edje/2.3.1/wearable_circle/event_viewer.edj \ +./res/edje/2.3.1/wearable_circle/feature_viewer.edj \ +./res/edje/2.3.1/wearable_circle/gps_viewer.edj \ +./res/edje/2.3.1/wearable_circle/graphics_viewer.edj \ +./res/edje/2.3.1/wearable_circle/image_viewer.edj \ +./res/edje/2.3.1/wearable_circle/input_viewer.edj \ +./res/edje/2.3.1/wearable_circle/mock_viewer.edj \ +./res/edje/2.3.1/wearable_circle/nfc_viewer.edj \ +./res/edje/2.3.1/wearable_circle/pick_viewer.edj \ +./res/edje/2.3.1/wearable_circle/push_service.edj \ +./res/edje/2.3.1/wearable_circle/runtimeinfo_viewer.edj \ +./res/edje/2.3.1/wearable_circle/sensor_viewer.edj \ +./res/edje/2.3.1/wearable_circle/shortcut_viewer.edj \ +./res/edje/2.3.1/wearable_circle/sound_player.edj \ +./res/edje/2.3.1/wearable_circle/touch_viewer.edj \ +./res/edje/2.3.1/wearable_circle/ui_viewer.edj \ +./res/edje/2.3.1/wearable_circle/video_player.edj \ +./res/edje/2.3.1/wearable_circle/wearable_circle_toolbar.edj \ +./res/edje/2.3.1/wearable_circle/wifi_viewer.edj \ +./res/edje/2.3.1/wearable_circle/wifidirect_viewer.edj + + +# Each subdirectory must supply rules for building sources it contributes +res/edje/2.3.1/wearable_circle/%.edj: ../res/edje/2.3.1/wearable_circle/%.edc + @echo 'Building file: $<' + @echo 'Invoking: EDC Resource Compiler' + edje_cc -id "$(PROJ_PATH)/edje/images" -id "$(SDK_TOOLPATH)/enventor/share/enventor/images" -sd "$(PROJ_PATH)/edje/sounds" -sd "$(SDK_TOOLPATH)/enventor/share/enventor/sounds" -fd "$(PROJ_PATH)/edje/fonts" -fd "$(SDK_TOOLPATH)/enventor/share/enventor/fonts" "$<" "$@" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/res/edje/2.4/mobile/subdir.mk b/tbtcoreapp/Debug/res/edje/2.4/mobile/subdir.mk new file mode 100644 index 0000000..c5374a0 --- /dev/null +++ b/tbtcoreapp/Debug/res/edje/2.4/mobile/subdir.mk @@ -0,0 +1,83 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +EDC_SRCS += \ +../res/edje/2.4/mobile/animation_viewer.edc \ +../res/edje/2.4/mobile/bluetooth_le_viewer.edc \ +../res/edje/2.4/mobile/bluetooth_oob_viewer.edc \ +../res/edje/2.4/mobile/bluetooth_viewer.edc \ +../res/edje/2.4/mobile/camera_viewer.edc \ +../res/edje/2.4/mobile/custom_button.edc \ +../res/edje/2.4/mobile/datacontrol_viewer.edc \ +../res/edje/2.4/mobile/display_viewer.edc \ +../res/edje/2.4/mobile/efl_callback_viewer.edc \ +../res/edje/2.4/mobile/event_viewer.edc \ +../res/edje/2.4/mobile/feature_viewer.edc \ +../res/edje/2.4/mobile/gps_viewer.edc \ +../res/edje/2.4/mobile/graphics_viewer.edc \ +../res/edje/2.4/mobile/image_viewer.edc \ +../res/edje/2.4/mobile/ime_viewer.edc \ +../res/edje/2.4/mobile/input_viewer.edc \ +../res/edje/2.4/mobile/mock_viewer.edc \ +../res/edje/2.4/mobile/nfc_viewer.edc \ +../res/edje/2.4/mobile/oauth2_info_viewer.edc \ +../res/edje/2.4/mobile/oauth2_viewer.edc \ +../res/edje/2.4/mobile/pick_viewer.edc \ +../res/edje/2.4/mobile/push_service.edc \ +../res/edje/2.4/mobile/runtimeinfo_viewer.edc \ +../res/edje/2.4/mobile/sensor_viewer.edc \ +../res/edje/2.4/mobile/shortcut_viewer.edc \ +../res/edje/2.4/mobile/sound_player.edc \ +../res/edje/2.4/mobile/touch_viewer.edc \ +../res/edje/2.4/mobile/ui_viewer.edc \ +../res/edje/2.4/mobile/video_player.edc \ +../res/edje/2.4/mobile/wifi_viewer.edc \ +../res/edje/2.4/mobile/wifidirect_info_viewer.edc \ +../res/edje/2.4/mobile/wifidirect_viewer.edc + +EDJ_FILES += \ +./res/edje/2.4/mobile/animation_viewer.edj \ +./res/edje/2.4/mobile/bluetooth_le_viewer.edj \ +./res/edje/2.4/mobile/bluetooth_oob_viewer.edj \ +./res/edje/2.4/mobile/bluetooth_viewer.edj \ +./res/edje/2.4/mobile/camera_viewer.edj \ +./res/edje/2.4/mobile/custom_button.edj \ +./res/edje/2.4/mobile/datacontrol_viewer.edj \ +./res/edje/2.4/mobile/display_viewer.edj \ +./res/edje/2.4/mobile/efl_callback_viewer.edj \ +./res/edje/2.4/mobile/event_viewer.edj \ +./res/edje/2.4/mobile/feature_viewer.edj \ +./res/edje/2.4/mobile/gps_viewer.edj \ +./res/edje/2.4/mobile/graphics_viewer.edj \ +./res/edje/2.4/mobile/image_viewer.edj \ +./res/edje/2.4/mobile/ime_viewer.edj \ +./res/edje/2.4/mobile/input_viewer.edj \ +./res/edje/2.4/mobile/mock_viewer.edj \ +./res/edje/2.4/mobile/nfc_viewer.edj \ +./res/edje/2.4/mobile/oauth2_info_viewer.edj \ +./res/edje/2.4/mobile/oauth2_viewer.edj \ +./res/edje/2.4/mobile/pick_viewer.edj \ +./res/edje/2.4/mobile/push_service.edj \ +./res/edje/2.4/mobile/runtimeinfo_viewer.edj \ +./res/edje/2.4/mobile/sensor_viewer.edj \ +./res/edje/2.4/mobile/shortcut_viewer.edj \ +./res/edje/2.4/mobile/sound_player.edj \ +./res/edje/2.4/mobile/touch_viewer.edj \ +./res/edje/2.4/mobile/ui_viewer.edj \ +./res/edje/2.4/mobile/video_player.edj \ +./res/edje/2.4/mobile/wifi_viewer.edj \ +./res/edje/2.4/mobile/wifidirect_info_viewer.edj \ +./res/edje/2.4/mobile/wifidirect_viewer.edj + + +# Each subdirectory must supply rules for building sources it contributes +res/edje/2.4/mobile/%.edj: ../res/edje/2.4/mobile/%.edc + @echo 'Building file: $<' + @echo 'Invoking: EDC Resource Compiler' + edje_cc -id "$(PROJ_PATH)/edje/images" -id "$(SDK_TOOLPATH)/enventor/share/enventor/images" -sd "$(PROJ_PATH)/edje/sounds" -sd "$(SDK_TOOLPATH)/enventor/share/enventor/sounds" -fd "$(PROJ_PATH)/edje/fonts" -fd "$(SDK_TOOLPATH)/enventor/share/enventor/fonts" "$<" "$@" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/res/edje/2.4/wearable/subdir.mk b/tbtcoreapp/Debug/res/edje/2.4/wearable/subdir.mk new file mode 100644 index 0000000..872ef76 --- /dev/null +++ b/tbtcoreapp/Debug/res/edje/2.4/wearable/subdir.mk @@ -0,0 +1,77 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +EDC_SRCS += \ +../res/edje/2.4/wearable/animation_viewer.edc \ +../res/edje/2.4/wearable/bluetooth_oob_viewer.edc \ +../res/edje/2.4/wearable/bluetooth_viewer.edc \ +../res/edje/2.4/wearable/camera_viewer.edc \ +../res/edje/2.4/wearable/custom_button.edc \ +../res/edje/2.4/wearable/datacontrol_viewer.edc \ +../res/edje/2.4/wearable/display_viewer.edc \ +../res/edje/2.4/wearable/efl_callback_viewer.edc \ +../res/edje/2.4/wearable/event_viewer.edc \ +../res/edje/2.4/wearable/feature_viewer.edc \ +../res/edje/2.4/wearable/gps_viewer.edc \ +../res/edje/2.4/wearable/graphics_viewer.edc \ +../res/edje/2.4/wearable/image_viewer.edc \ +../res/edje/2.4/wearable/input_viewer.edc \ +../res/edje/2.4/wearable/mock_viewer.edc \ +../res/edje/2.4/wearable/nfc_viewer.edc \ +../res/edje/2.4/wearable/pick_viewer.edc \ +../res/edje/2.4/wearable/push_service.edc \ +../res/edje/2.4/wearable/runtimeinfo_viewer.edc \ +../res/edje/2.4/wearable/sensor_viewer.edc \ +../res/edje/2.4/wearable/shortcut_viewer.edc \ +../res/edje/2.4/wearable/sound_player.edc \ +../res/edje/2.4/wearable/touch_viewer.edc \ +../res/edje/2.4/wearable/ui_viewer.edc \ +../res/edje/2.4/wearable/video_player.edc \ +../res/edje/2.4/wearable/wearable_toolbar.edc \ +../res/edje/2.4/wearable/wifi_viewer.edc \ +../res/edje/2.4/wearable/wifidirect_info_viewer.edc \ +../res/edje/2.4/wearable/wifidirect_viewer.edc + +EDJ_FILES += \ +./res/edje/2.4/wearable/animation_viewer.edj \ +./res/edje/2.4/wearable/bluetooth_oob_viewer.edj \ +./res/edje/2.4/wearable/bluetooth_viewer.edj \ +./res/edje/2.4/wearable/camera_viewer.edj \ +./res/edje/2.4/wearable/custom_button.edj \ +./res/edje/2.4/wearable/datacontrol_viewer.edj \ +./res/edje/2.4/wearable/display_viewer.edj \ +./res/edje/2.4/wearable/efl_callback_viewer.edj \ +./res/edje/2.4/wearable/event_viewer.edj \ +./res/edje/2.4/wearable/feature_viewer.edj \ +./res/edje/2.4/wearable/gps_viewer.edj \ +./res/edje/2.4/wearable/graphics_viewer.edj \ +./res/edje/2.4/wearable/image_viewer.edj \ +./res/edje/2.4/wearable/input_viewer.edj \ +./res/edje/2.4/wearable/mock_viewer.edj \ +./res/edje/2.4/wearable/nfc_viewer.edj \ +./res/edje/2.4/wearable/pick_viewer.edj \ +./res/edje/2.4/wearable/push_service.edj \ +./res/edje/2.4/wearable/runtimeinfo_viewer.edj \ +./res/edje/2.4/wearable/sensor_viewer.edj \ +./res/edje/2.4/wearable/shortcut_viewer.edj \ +./res/edje/2.4/wearable/sound_player.edj \ +./res/edje/2.4/wearable/touch_viewer.edj \ +./res/edje/2.4/wearable/ui_viewer.edj \ +./res/edje/2.4/wearable/video_player.edj \ +./res/edje/2.4/wearable/wearable_toolbar.edj \ +./res/edje/2.4/wearable/wifi_viewer.edj \ +./res/edje/2.4/wearable/wifidirect_info_viewer.edj \ +./res/edje/2.4/wearable/wifidirect_viewer.edj + + +# Each subdirectory must supply rules for building sources it contributes +res/edje/2.4/wearable/%.edj: ../res/edje/2.4/wearable/%.edc + @echo 'Building file: $<' + @echo 'Invoking: EDC Resource Compiler' + edje_cc -id "$(PROJ_PATH)/edje/images" -id "$(SDK_TOOLPATH)/enventor/share/enventor/images" -sd "$(PROJ_PATH)/edje/sounds" -sd "$(SDK_TOOLPATH)/enventor/share/enventor/sounds" -fd "$(PROJ_PATH)/edje/fonts" -fd "$(SDK_TOOLPATH)/enventor/share/enventor/fonts" "$<" "$@" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/res/edje/2.4/wearable_320_x_320/subdir.mk b/tbtcoreapp/Debug/res/edje/2.4/wearable_320_x_320/subdir.mk new file mode 100644 index 0000000..21c15b2 --- /dev/null +++ b/tbtcoreapp/Debug/res/edje/2.4/wearable_320_x_320/subdir.mk @@ -0,0 +1,75 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +EDC_SRCS += \ +../res/edje/2.4/wearable_320_x_320/animation_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/bluetooth_oob_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/bluetooth_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/camera_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/custom_button.edc \ +../res/edje/2.4/wearable_320_x_320/datacontrol_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/display_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/efl_callback_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/event_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/feature_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/gps_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/graphics_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/image_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/input_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/mock_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/nfc_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/pick_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/push_service.edc \ +../res/edje/2.4/wearable_320_x_320/runtimeinfo_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/sensor_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/shortcut_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/sound_player.edc \ +../res/edje/2.4/wearable_320_x_320/touch_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/ui_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/video_player.edc \ +../res/edje/2.4/wearable_320_x_320/wearable_320_x_320_toolbar.edc \ +../res/edje/2.4/wearable_320_x_320/wifi_viewer.edc \ +../res/edje/2.4/wearable_320_x_320/wifidirect_viewer.edc + +EDJ_FILES += \ +./res/edje/2.4/wearable_320_x_320/animation_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/bluetooth_oob_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/bluetooth_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/camera_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/custom_button.edj \ +./res/edje/2.4/wearable_320_x_320/datacontrol_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/display_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/efl_callback_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/event_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/feature_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/gps_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/graphics_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/image_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/input_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/mock_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/nfc_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/pick_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/push_service.edj \ +./res/edje/2.4/wearable_320_x_320/runtimeinfo_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/sensor_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/shortcut_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/sound_player.edj \ +./res/edje/2.4/wearable_320_x_320/touch_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/ui_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/video_player.edj \ +./res/edje/2.4/wearable_320_x_320/wearable_320_x_320_toolbar.edj \ +./res/edje/2.4/wearable_320_x_320/wifi_viewer.edj \ +./res/edje/2.4/wearable_320_x_320/wifidirect_viewer.edj + + +# Each subdirectory must supply rules for building sources it contributes +res/edje/2.4/wearable_320_x_320/%.edj: ../res/edje/2.4/wearable_320_x_320/%.edc + @echo 'Building file: $<' + @echo 'Invoking: EDC Resource Compiler' + edje_cc -id "$(PROJ_PATH)/edje/images" -id "$(SDK_TOOLPATH)/enventor/share/enventor/images" -sd "$(PROJ_PATH)/edje/sounds" -sd "$(SDK_TOOLPATH)/enventor/share/enventor/sounds" -fd "$(PROJ_PATH)/edje/fonts" -fd "$(SDK_TOOLPATH)/enventor/share/enventor/fonts" "$<" "$@" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/res/edje/2.4/wearable_360_x_480/subdir.mk b/tbtcoreapp/Debug/res/edje/2.4/wearable_360_x_480/subdir.mk new file mode 100644 index 0000000..9e4ab33 --- /dev/null +++ b/tbtcoreapp/Debug/res/edje/2.4/wearable_360_x_480/subdir.mk @@ -0,0 +1,77 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +EDC_SRCS += \ +../res/edje/2.4/wearable_360_x_480/animation_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/bluetooth_oob_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/bluetooth_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/camera_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/custom_button.edc \ +../res/edje/2.4/wearable_360_x_480/datacontrol_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/display_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/efl_callback_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/event_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/feature_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/gps_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/graphics_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/image_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/input_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/mock_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/nfc_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/pick_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/push_service.edc \ +../res/edje/2.4/wearable_360_x_480/runtimeinfo_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/sensor_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/shortcut_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/sound_player.edc \ +../res/edje/2.4/wearable_360_x_480/touch_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/ui_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/video_player.edc \ +../res/edje/2.4/wearable_360_x_480/wearable_360_x_480_toolbar.edc \ +../res/edje/2.4/wearable_360_x_480/wifi_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/wifidirect_info_viewer.edc \ +../res/edje/2.4/wearable_360_x_480/wifidirect_viewer.edc + +EDJ_FILES += \ +./res/edje/2.4/wearable_360_x_480/animation_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/bluetooth_oob_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/bluetooth_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/camera_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/custom_button.edj \ +./res/edje/2.4/wearable_360_x_480/datacontrol_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/display_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/efl_callback_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/event_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/feature_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/gps_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/graphics_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/image_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/input_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/mock_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/nfc_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/pick_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/push_service.edj \ +./res/edje/2.4/wearable_360_x_480/runtimeinfo_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/sensor_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/shortcut_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/sound_player.edj \ +./res/edje/2.4/wearable_360_x_480/touch_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/ui_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/video_player.edj \ +./res/edje/2.4/wearable_360_x_480/wearable_360_x_480_toolbar.edj \ +./res/edje/2.4/wearable_360_x_480/wifi_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/wifidirect_info_viewer.edj \ +./res/edje/2.4/wearable_360_x_480/wifidirect_viewer.edj + + +# Each subdirectory must supply rules for building sources it contributes +res/edje/2.4/wearable_360_x_480/%.edj: ../res/edje/2.4/wearable_360_x_480/%.edc + @echo 'Building file: $<' + @echo 'Invoking: EDC Resource Compiler' + edje_cc -id "$(PROJ_PATH)/edje/images" -id "$(SDK_TOOLPATH)/enventor/share/enventor/images" -sd "$(PROJ_PATH)/edje/sounds" -sd "$(SDK_TOOLPATH)/enventor/share/enventor/sounds" -fd "$(PROJ_PATH)/edje/fonts" -fd "$(SDK_TOOLPATH)/enventor/share/enventor/fonts" "$<" "$@" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/res/edje/2.4/wearable_circle/subdir.mk b/tbtcoreapp/Debug/res/edje/2.4/wearable_circle/subdir.mk new file mode 100644 index 0000000..f01ef03 --- /dev/null +++ b/tbtcoreapp/Debug/res/edje/2.4/wearable_circle/subdir.mk @@ -0,0 +1,75 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +EDC_SRCS += \ +../res/edje/2.4/wearable_circle/animation_viewer.edc \ +../res/edje/2.4/wearable_circle/bluetooth_oob_viewer.edc \ +../res/edje/2.4/wearable_circle/bluetooth_viewer.edc \ +../res/edje/2.4/wearable_circle/camera_viewer.edc \ +../res/edje/2.4/wearable_circle/custom_button.edc \ +../res/edje/2.4/wearable_circle/datacontrol_viewer.edc \ +../res/edje/2.4/wearable_circle/display_viewer.edc \ +../res/edje/2.4/wearable_circle/efl_callback_viewer.edc \ +../res/edje/2.4/wearable_circle/event_viewer.edc \ +../res/edje/2.4/wearable_circle/feature_viewer.edc \ +../res/edje/2.4/wearable_circle/gps_viewer.edc \ +../res/edje/2.4/wearable_circle/graphics_viewer.edc \ +../res/edje/2.4/wearable_circle/image_viewer.edc \ +../res/edje/2.4/wearable_circle/input_viewer.edc \ +../res/edje/2.4/wearable_circle/mock_viewer.edc \ +../res/edje/2.4/wearable_circle/nfc_viewer.edc \ +../res/edje/2.4/wearable_circle/pick_viewer.edc \ +../res/edje/2.4/wearable_circle/push_service.edc \ +../res/edje/2.4/wearable_circle/runtimeinfo_viewer.edc \ +../res/edje/2.4/wearable_circle/sensor_viewer.edc \ +../res/edje/2.4/wearable_circle/shortcut_viewer.edc \ +../res/edje/2.4/wearable_circle/sound_player.edc \ +../res/edje/2.4/wearable_circle/touch_viewer.edc \ +../res/edje/2.4/wearable_circle/ui_viewer.edc \ +../res/edje/2.4/wearable_circle/video_player.edc \ +../res/edje/2.4/wearable_circle/wearable_circle_toolbar.edc \ +../res/edje/2.4/wearable_circle/wifi_viewer.edc \ +../res/edje/2.4/wearable_circle/wifidirect_viewer.edc + +EDJ_FILES += \ +./res/edje/2.4/wearable_circle/animation_viewer.edj \ +./res/edje/2.4/wearable_circle/bluetooth_oob_viewer.edj \ +./res/edje/2.4/wearable_circle/bluetooth_viewer.edj \ +./res/edje/2.4/wearable_circle/camera_viewer.edj \ +./res/edje/2.4/wearable_circle/custom_button.edj \ +./res/edje/2.4/wearable_circle/datacontrol_viewer.edj \ +./res/edje/2.4/wearable_circle/display_viewer.edj \ +./res/edje/2.4/wearable_circle/efl_callback_viewer.edj \ +./res/edje/2.4/wearable_circle/event_viewer.edj \ +./res/edje/2.4/wearable_circle/feature_viewer.edj \ +./res/edje/2.4/wearable_circle/gps_viewer.edj \ +./res/edje/2.4/wearable_circle/graphics_viewer.edj \ +./res/edje/2.4/wearable_circle/image_viewer.edj \ +./res/edje/2.4/wearable_circle/input_viewer.edj \ +./res/edje/2.4/wearable_circle/mock_viewer.edj \ +./res/edje/2.4/wearable_circle/nfc_viewer.edj \ +./res/edje/2.4/wearable_circle/pick_viewer.edj \ +./res/edje/2.4/wearable_circle/push_service.edj \ +./res/edje/2.4/wearable_circle/runtimeinfo_viewer.edj \ +./res/edje/2.4/wearable_circle/sensor_viewer.edj \ +./res/edje/2.4/wearable_circle/shortcut_viewer.edj \ +./res/edje/2.4/wearable_circle/sound_player.edj \ +./res/edje/2.4/wearable_circle/touch_viewer.edj \ +./res/edje/2.4/wearable_circle/ui_viewer.edj \ +./res/edje/2.4/wearable_circle/video_player.edj \ +./res/edje/2.4/wearable_circle/wearable_circle_toolbar.edj \ +./res/edje/2.4/wearable_circle/wifi_viewer.edj \ +./res/edje/2.4/wearable_circle/wifidirect_viewer.edj + + +# Each subdirectory must supply rules for building sources it contributes +res/edje/2.4/wearable_circle/%.edj: ../res/edje/2.4/wearable_circle/%.edc + @echo 'Building file: $<' + @echo 'Invoking: EDC Resource Compiler' + edje_cc -id "$(PROJ_PATH)/edje/images" -id "$(SDK_TOOLPATH)/enventor/share/enventor/images" -sd "$(PROJ_PATH)/edje/sounds" -sd "$(SDK_TOOLPATH)/enventor/share/enventor/sounds" -fd "$(PROJ_PATH)/edje/fonts" -fd "$(SDK_TOOLPATH)/enventor/share/enventor/fonts" "$<" "$@" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/res/edje/subdir.mk b/tbtcoreapp/Debug/res/edje/subdir.mk new file mode 100644 index 0000000..3c62f57 --- /dev/null +++ b/tbtcoreapp/Debug/res/edje/subdir.mk @@ -0,0 +1,21 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +EDC_SRCS += \ +../res/edje/tbtcoreapp.edc + +EDJ_FILES += \ +./res/edje/tbtcoreapp.edj + + +# Each subdirectory must supply rules for building sources it contributes +res/edje/%.edj: ../res/edje/%.edc + @echo 'Building file: $<' + @echo 'Invoking: EDC Resource Compiler' + edje_cc -id "$(PROJ_PATH)/edje/images" -id "$(SDK_TOOLPATH)/enventor/share/enventor/images" -sd "$(PROJ_PATH)/edje/sounds" -sd "$(SDK_TOOLPATH)/enventor/share/enventor/sounds" -fd "$(PROJ_PATH)/edje/fonts" -fd "$(SDK_TOOLPATH)/enventor/share/enventor/fonts" "$<" "$@" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/sources.mk b/tbtcoreapp/Debug/sources.mk new file mode 100644 index 0000000..f69a018 --- /dev/null +++ b/tbtcoreapp/Debug/sources.mk @@ -0,0 +1,46 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +O_SRCS := +PO_SRCS := +CPP_SRCS := +C_UPPER_SRCS := +C_SRCS := +S_UPPER_SRCS := +OBJ_SRCS := +EDC_SRCS := +ASM_SRCS := +CXX_SRCS := +C++_SRCS := +CC_SRCS := +MO_FILES := +OBJS := +C++_DEPS := +C_DEPS := +CC_DEPS := +AST := +FNMAP := +EDJ_FILES := +CPP_DEPS := +EXECUTABLES := +CXX_DEPS := +C_UPPER_DEPS := + +# Every subdirectory with source files must be described here +SUBDIRS := \ +src \ +src/view \ +src/utils \ +src/model \ +res/edje/2.4/wearable_circle \ +res/edje/2.4/wearable_360_x_480 \ +res/edje/2.4/wearable_320_x_320 \ +res/edje/2.4/wearable \ +res/edje/2.4/mobile \ +res/edje/2.3.1/wearable_circle \ +res/edje/2.3.1/wearable_360_x_480 \ +res/edje/2.3.1/wearable_320_x_320 \ +res/edje/2.3.1/wearable \ +res/edje/2.3.1/mobile \ + diff --git a/tbtcoreapp/Debug/src/model/subdir.mk b/tbtcoreapp/Debug/src/model/subdir.mk new file mode 100644 index 0000000..36ee0b5 --- /dev/null +++ b/tbtcoreapp/Debug/src/model/subdir.mk @@ -0,0 +1,24 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../src/model/tbt-list.c + +OBJS += \ +./src/model/tbt-list.o + +C_DEPS += \ +./src/model/tbt-list.d + + +# Each subdirectory must supply rules for building sources it contributes +src/model/%.o: ../src/model/%.c + @echo 'Building file: $<' + @echo 'Invoking: C Compiler' + $(CC) -I"pch" -D_DEBUG -I"$(PROJ_PATH)/inc" -O0 -g3 -Wall -c -fmessage-length=0 $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIE --sysroot="$(SBI_SYSROOT)" -mthumb -I"$(SBI_SYSROOT)/usr/include/libxml2" -I"$(SDK_PATH)/library" -I"$(SBI_SYSROOT)/usr/include" -I"$(SBI_SYSROOT)/usr/include/appcore-agent" -I"$(SBI_SYSROOT)/usr/include/appcore-watch" -I"$(SBI_SYSROOT)/usr/include/appfw" -I"$(SBI_SYSROOT)/usr/include/badge" -I"$(SBI_SYSROOT)/usr/include/base" -I"$(SBI_SYSROOT)/usr/include/cairo" -I"$(SBI_SYSROOT)/usr/include/ckm" -I"$(SBI_SYSROOT)/usr/include/content" -I"$(SBI_SYSROOT)/usr/include/context-manager" -I"$(SBI_SYSROOT)/usr/include/dbus-1.0" -I"$(SBI_SYSROOT)/usr/include/device" -I"$(SBI_SYSROOT)/usr/include/dlog" -I"$(SBI_SYSROOT)/usr/include/ecore-1" -I"$(SBI_SYSROOT)/usr/include/e_dbus-1" -I"$(SBI_SYSROOT)/usr/include/edje-1" -I"$(SBI_SYSROOT)/usr/include/eet-1" -I"$(SBI_SYSROOT)/usr/include/efl-extension" -I"$(SBI_SYSROOT)/usr/include/efreet-1" -I"$(SBI_SYSROOT)/usr/include/eina-1" -I"$(SBI_SYSROOT)/usr/include/eina-1/eina" -I"$(SBI_SYSROOT)/usr/include/eio-1" -I"$(SBI_SYSROOT)/usr/include/elementary-1" -I"$(SBI_SYSROOT)/usr/include/embryo-1" -I"$(SBI_SYSROOT)/usr/include/ethumb-1" -I"$(SBI_SYSROOT)/usr/include/evas-1" -I"$(SBI_SYSROOT)/usr/include/ewebkit2-0" -I"$(SBI_SYSROOT)/usr/include/fontconfig" -I"$(SBI_SYSROOT)/usr/include/freetype2" -I"$(SBI_SYSROOT)/usr/include/gio-unix-2.0" -I"$(SBI_SYSROOT)/usr/include/glib-2.0" -I"$(SBI_SYSROOT)/usr/include/json-glib-1.0" -I"$(SBI_SYSROOT)/usr/include/json-glib-1.0/json-glib" -I"$(SBI_SYSROOT)/usr/include/location" -I"$(SBI_SYSROOT)/usr/include/media" -I"$(SBI_SYSROOT)/usr/include/media-content" -I"$(SBI_SYSROOT)/usr/include/messaging" -I"$(SBI_SYSROOT)/usr/include/minizip" -I"$(SBI_SYSROOT)/usr/include/network" -I"$(SBI_SYSROOT)/usr/include/notification" -I"$(SBI_SYSROOT)/usr/include/sensor" -I"$(SBI_SYSROOT)/usr/include/storage" -I"$(SBI_SYSROOT)/usr/include/system" -I"$(SBI_SYSROOT)/usr/include/telephony" -I"$(SBI_SYSROOT)/usr/include/ui" -I"$(SBI_SYSROOT)/usr/include/widget_service" -I"$(SBI_SYSROOT)/usr/include/widget_viewer_evas" -I"$(SBI_SYSROOT)/usr/lib/dbus-1.0/include" -I"$(SBI_SYSROOT)/usr/lib/glib-2.0/include" -Werror-implicit-function-declaration -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/src/subdir.mk b/tbtcoreapp/Debug/src/subdir.mk new file mode 100644 index 0000000..a2bdbf1 --- /dev/null +++ b/tbtcoreapp/Debug/src/subdir.mk @@ -0,0 +1,30 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../src/main-app.c \ +../src/main.c \ +../src/window.c + +OBJS += \ +./src/main-app.o \ +./src/main.o \ +./src/window.o + +C_DEPS += \ +./src/main-app.d \ +./src/main.d \ +./src/window.d + + +# Each subdirectory must supply rules for building sources it contributes +src/%.o: ../src/%.c + @echo 'Building file: $<' + @echo 'Invoking: C Compiler' + $(CC) -I"pch" -D_DEBUG -I"$(PROJ_PATH)/inc" -O0 -g3 -Wall -c -fmessage-length=0 $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIE --sysroot="$(SBI_SYSROOT)" -mthumb -I"$(SBI_SYSROOT)/usr/include/libxml2" -I"$(SDK_PATH)/library" -I"$(SBI_SYSROOT)/usr/include" -I"$(SBI_SYSROOT)/usr/include/appcore-agent" -I"$(SBI_SYSROOT)/usr/include/appcore-watch" -I"$(SBI_SYSROOT)/usr/include/appfw" -I"$(SBI_SYSROOT)/usr/include/badge" -I"$(SBI_SYSROOT)/usr/include/base" -I"$(SBI_SYSROOT)/usr/include/cairo" -I"$(SBI_SYSROOT)/usr/include/ckm" -I"$(SBI_SYSROOT)/usr/include/content" -I"$(SBI_SYSROOT)/usr/include/context-manager" -I"$(SBI_SYSROOT)/usr/include/dbus-1.0" -I"$(SBI_SYSROOT)/usr/include/device" -I"$(SBI_SYSROOT)/usr/include/dlog" -I"$(SBI_SYSROOT)/usr/include/ecore-1" -I"$(SBI_SYSROOT)/usr/include/e_dbus-1" -I"$(SBI_SYSROOT)/usr/include/edje-1" -I"$(SBI_SYSROOT)/usr/include/eet-1" -I"$(SBI_SYSROOT)/usr/include/efl-extension" -I"$(SBI_SYSROOT)/usr/include/efreet-1" -I"$(SBI_SYSROOT)/usr/include/eina-1" -I"$(SBI_SYSROOT)/usr/include/eina-1/eina" -I"$(SBI_SYSROOT)/usr/include/eio-1" -I"$(SBI_SYSROOT)/usr/include/elementary-1" -I"$(SBI_SYSROOT)/usr/include/embryo-1" -I"$(SBI_SYSROOT)/usr/include/ethumb-1" -I"$(SBI_SYSROOT)/usr/include/evas-1" -I"$(SBI_SYSROOT)/usr/include/ewebkit2-0" -I"$(SBI_SYSROOT)/usr/include/fontconfig" -I"$(SBI_SYSROOT)/usr/include/freetype2" -I"$(SBI_SYSROOT)/usr/include/gio-unix-2.0" -I"$(SBI_SYSROOT)/usr/include/glib-2.0" -I"$(SBI_SYSROOT)/usr/include/json-glib-1.0" -I"$(SBI_SYSROOT)/usr/include/json-glib-1.0/json-glib" -I"$(SBI_SYSROOT)/usr/include/location" -I"$(SBI_SYSROOT)/usr/include/media" -I"$(SBI_SYSROOT)/usr/include/media-content" -I"$(SBI_SYSROOT)/usr/include/messaging" -I"$(SBI_SYSROOT)/usr/include/minizip" -I"$(SBI_SYSROOT)/usr/include/network" -I"$(SBI_SYSROOT)/usr/include/notification" -I"$(SBI_SYSROOT)/usr/include/sensor" -I"$(SBI_SYSROOT)/usr/include/storage" -I"$(SBI_SYSROOT)/usr/include/system" -I"$(SBI_SYSROOT)/usr/include/telephony" -I"$(SBI_SYSROOT)/usr/include/ui" -I"$(SBI_SYSROOT)/usr/include/widget_service" -I"$(SBI_SYSROOT)/usr/include/widget_viewer_evas" -I"$(SBI_SYSROOT)/usr/lib/dbus-1.0/include" -I"$(SBI_SYSROOT)/usr/lib/glib-2.0/include" -Werror-implicit-function-declaration -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/src/utils/subdir.mk b/tbtcoreapp/Debug/src/utils/subdir.mk new file mode 100644 index 0000000..660bcbe --- /dev/null +++ b/tbtcoreapp/Debug/src/utils/subdir.mk @@ -0,0 +1,36 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../src/utils/gl-types.c \ +../src/utils/gl-utils.c \ +../src/utils/ui-utils.c \ +../src/utils/util_state_object.c \ +../src/utils/xml-util.c + +OBJS += \ +./src/utils/gl-types.o \ +./src/utils/gl-utils.o \ +./src/utils/ui-utils.o \ +./src/utils/util_state_object.o \ +./src/utils/xml-util.o + +C_DEPS += \ +./src/utils/gl-types.d \ +./src/utils/gl-utils.d \ +./src/utils/ui-utils.d \ +./src/utils/util_state_object.d \ +./src/utils/xml-util.d + + +# Each subdirectory must supply rules for building sources it contributes +src/utils/%.o: ../src/utils/%.c + @echo 'Building file: $<' + @echo 'Invoking: C Compiler' + $(CC) -I"pch" -D_DEBUG -I"$(PROJ_PATH)/inc" -O0 -g3 -Wall -c -fmessage-length=0 $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIE --sysroot="$(SBI_SYSROOT)" -mthumb -I"$(SBI_SYSROOT)/usr/include/libxml2" -I"$(SDK_PATH)/library" -I"$(SBI_SYSROOT)/usr/include" -I"$(SBI_SYSROOT)/usr/include/appcore-agent" -I"$(SBI_SYSROOT)/usr/include/appcore-watch" -I"$(SBI_SYSROOT)/usr/include/appfw" -I"$(SBI_SYSROOT)/usr/include/badge" -I"$(SBI_SYSROOT)/usr/include/base" -I"$(SBI_SYSROOT)/usr/include/cairo" -I"$(SBI_SYSROOT)/usr/include/ckm" -I"$(SBI_SYSROOT)/usr/include/content" -I"$(SBI_SYSROOT)/usr/include/context-manager" -I"$(SBI_SYSROOT)/usr/include/dbus-1.0" -I"$(SBI_SYSROOT)/usr/include/device" -I"$(SBI_SYSROOT)/usr/include/dlog" -I"$(SBI_SYSROOT)/usr/include/ecore-1" -I"$(SBI_SYSROOT)/usr/include/e_dbus-1" -I"$(SBI_SYSROOT)/usr/include/edje-1" -I"$(SBI_SYSROOT)/usr/include/eet-1" -I"$(SBI_SYSROOT)/usr/include/efl-extension" -I"$(SBI_SYSROOT)/usr/include/efreet-1" -I"$(SBI_SYSROOT)/usr/include/eina-1" -I"$(SBI_SYSROOT)/usr/include/eina-1/eina" -I"$(SBI_SYSROOT)/usr/include/eio-1" -I"$(SBI_SYSROOT)/usr/include/elementary-1" -I"$(SBI_SYSROOT)/usr/include/embryo-1" -I"$(SBI_SYSROOT)/usr/include/ethumb-1" -I"$(SBI_SYSROOT)/usr/include/evas-1" -I"$(SBI_SYSROOT)/usr/include/ewebkit2-0" -I"$(SBI_SYSROOT)/usr/include/fontconfig" -I"$(SBI_SYSROOT)/usr/include/freetype2" -I"$(SBI_SYSROOT)/usr/include/gio-unix-2.0" -I"$(SBI_SYSROOT)/usr/include/glib-2.0" -I"$(SBI_SYSROOT)/usr/include/json-glib-1.0" -I"$(SBI_SYSROOT)/usr/include/json-glib-1.0/json-glib" -I"$(SBI_SYSROOT)/usr/include/location" -I"$(SBI_SYSROOT)/usr/include/media" -I"$(SBI_SYSROOT)/usr/include/media-content" -I"$(SBI_SYSROOT)/usr/include/messaging" -I"$(SBI_SYSROOT)/usr/include/minizip" -I"$(SBI_SYSROOT)/usr/include/network" -I"$(SBI_SYSROOT)/usr/include/notification" -I"$(SBI_SYSROOT)/usr/include/sensor" -I"$(SBI_SYSROOT)/usr/include/storage" -I"$(SBI_SYSROOT)/usr/include/system" -I"$(SBI_SYSROOT)/usr/include/telephony" -I"$(SBI_SYSROOT)/usr/include/ui" -I"$(SBI_SYSROOT)/usr/include/widget_service" -I"$(SBI_SYSROOT)/usr/include/widget_viewer_evas" -I"$(SBI_SYSROOT)/usr/lib/dbus-1.0/include" -I"$(SBI_SYSROOT)/usr/lib/glib-2.0/include" -Werror-implicit-function-declaration -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/Debug/src/view/subdir.mk b/tbtcoreapp/Debug/src/view/subdir.mk new file mode 100644 index 0000000..ad015f7 --- /dev/null +++ b/tbtcoreapp/Debug/src/view/subdir.mk @@ -0,0 +1,126 @@ +################################################################################ +# Automatically-generated file. Do not edit! +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../src/view/tbt-animation-view.c \ +../src/view/tbt-bluetooth-view.c \ +../src/view/tbt-bluetoothle-view.c \ +../src/view/tbt-bluetoothoob-view.c \ +../src/view/tbt-camera-view.c \ +../src/view/tbt-common-view.c \ +../src/view/tbt-datacontrol-view.c \ +../src/view/tbt-display-view.c \ +../src/view/tbt-efl-callbacks.c \ +../src/view/tbt-event-view.c \ +../src/view/tbt-feature-view.c \ +../src/view/tbt-genlist-view.c \ +../src/view/tbt-gps-view.c \ +../src/view/tbt-graphics-view.c \ +../src/view/tbt-image-view.c \ +../src/view/tbt-ime-view.c \ +../src/view/tbt-input-view.c \ +../src/view/tbt-list-view.c \ +../src/view/tbt-local-view.c \ +../src/view/tbt-mock-view.c \ +../src/view/tbt-nfc-view.c \ +../src/view/tbt-oauth2-info-view.c \ +../src/view/tbt-oauth2-view.c \ +../src/view/tbt-pick-view.c \ +../src/view/tbt-push-view.c \ +../src/view/tbt-runtimeinfo-view.c \ +../src/view/tbt-sensor-view.c \ +../src/view/tbt-shortcut-view.c \ +../src/view/tbt-sound-view.c \ +../src/view/tbt-touch-view.c \ +../src/view/tbt-ui-view.c \ +../src/view/tbt-widget-view.c \ +../src/view/tbt-wifi-view.c \ +../src/view/tbt-wifidirect-info-view.c \ +../src/view/tbt-wifidirect-view.c + +OBJS += \ +./src/view/tbt-animation-view.o \ +./src/view/tbt-bluetooth-view.o \ +./src/view/tbt-bluetoothle-view.o \ +./src/view/tbt-bluetoothoob-view.o \ +./src/view/tbt-camera-view.o \ +./src/view/tbt-common-view.o \ +./src/view/tbt-datacontrol-view.o \ +./src/view/tbt-display-view.o \ +./src/view/tbt-efl-callbacks.o \ +./src/view/tbt-event-view.o \ +./src/view/tbt-feature-view.o \ +./src/view/tbt-genlist-view.o \ +./src/view/tbt-gps-view.o \ +./src/view/tbt-graphics-view.o \ +./src/view/tbt-image-view.o \ +./src/view/tbt-ime-view.o \ +./src/view/tbt-input-view.o \ +./src/view/tbt-list-view.o \ +./src/view/tbt-local-view.o \ +./src/view/tbt-mock-view.o \ +./src/view/tbt-nfc-view.o \ +./src/view/tbt-oauth2-info-view.o \ +./src/view/tbt-oauth2-view.o \ +./src/view/tbt-pick-view.o \ +./src/view/tbt-push-view.o \ +./src/view/tbt-runtimeinfo-view.o \ +./src/view/tbt-sensor-view.o \ +./src/view/tbt-shortcut-view.o \ +./src/view/tbt-sound-view.o \ +./src/view/tbt-touch-view.o \ +./src/view/tbt-ui-view.o \ +./src/view/tbt-widget-view.o \ +./src/view/tbt-wifi-view.o \ +./src/view/tbt-wifidirect-info-view.o \ +./src/view/tbt-wifidirect-view.o + +C_DEPS += \ +./src/view/tbt-animation-view.d \ +./src/view/tbt-bluetooth-view.d \ +./src/view/tbt-bluetoothle-view.d \ +./src/view/tbt-bluetoothoob-view.d \ +./src/view/tbt-camera-view.d \ +./src/view/tbt-common-view.d \ +./src/view/tbt-datacontrol-view.d \ +./src/view/tbt-display-view.d \ +./src/view/tbt-efl-callbacks.d \ +./src/view/tbt-event-view.d \ +./src/view/tbt-feature-view.d \ +./src/view/tbt-genlist-view.d \ +./src/view/tbt-gps-view.d \ +./src/view/tbt-graphics-view.d \ +./src/view/tbt-image-view.d \ +./src/view/tbt-ime-view.d \ +./src/view/tbt-input-view.d \ +./src/view/tbt-list-view.d \ +./src/view/tbt-local-view.d \ +./src/view/tbt-mock-view.d \ +./src/view/tbt-nfc-view.d \ +./src/view/tbt-oauth2-info-view.d \ +./src/view/tbt-oauth2-view.d \ +./src/view/tbt-pick-view.d \ +./src/view/tbt-push-view.d \ +./src/view/tbt-runtimeinfo-view.d \ +./src/view/tbt-sensor-view.d \ +./src/view/tbt-shortcut-view.d \ +./src/view/tbt-sound-view.d \ +./src/view/tbt-touch-view.d \ +./src/view/tbt-ui-view.d \ +./src/view/tbt-widget-view.d \ +./src/view/tbt-wifi-view.d \ +./src/view/tbt-wifidirect-info-view.d \ +./src/view/tbt-wifidirect-view.d + + +# Each subdirectory must supply rules for building sources it contributes +src/view/%.o: ../src/view/%.c + @echo 'Building file: $<' + @echo 'Invoking: C Compiler' + $(CC) -I"pch" -D_DEBUG -I"$(PROJ_PATH)/inc" -O0 -g3 -Wall -c -fmessage-length=0 $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIE --sysroot="$(SBI_SYSROOT)" -mthumb -I"$(SBI_SYSROOT)/usr/include/libxml2" -I"$(SDK_PATH)/library" -I"$(SBI_SYSROOT)/usr/include" -I"$(SBI_SYSROOT)/usr/include/appcore-agent" -I"$(SBI_SYSROOT)/usr/include/appcore-watch" -I"$(SBI_SYSROOT)/usr/include/appfw" -I"$(SBI_SYSROOT)/usr/include/badge" -I"$(SBI_SYSROOT)/usr/include/base" -I"$(SBI_SYSROOT)/usr/include/cairo" -I"$(SBI_SYSROOT)/usr/include/ckm" -I"$(SBI_SYSROOT)/usr/include/content" -I"$(SBI_SYSROOT)/usr/include/context-manager" -I"$(SBI_SYSROOT)/usr/include/dbus-1.0" -I"$(SBI_SYSROOT)/usr/include/device" -I"$(SBI_SYSROOT)/usr/include/dlog" -I"$(SBI_SYSROOT)/usr/include/ecore-1" -I"$(SBI_SYSROOT)/usr/include/e_dbus-1" -I"$(SBI_SYSROOT)/usr/include/edje-1" -I"$(SBI_SYSROOT)/usr/include/eet-1" -I"$(SBI_SYSROOT)/usr/include/efl-extension" -I"$(SBI_SYSROOT)/usr/include/efreet-1" -I"$(SBI_SYSROOT)/usr/include/eina-1" -I"$(SBI_SYSROOT)/usr/include/eina-1/eina" -I"$(SBI_SYSROOT)/usr/include/eio-1" -I"$(SBI_SYSROOT)/usr/include/elementary-1" -I"$(SBI_SYSROOT)/usr/include/embryo-1" -I"$(SBI_SYSROOT)/usr/include/ethumb-1" -I"$(SBI_SYSROOT)/usr/include/evas-1" -I"$(SBI_SYSROOT)/usr/include/ewebkit2-0" -I"$(SBI_SYSROOT)/usr/include/fontconfig" -I"$(SBI_SYSROOT)/usr/include/freetype2" -I"$(SBI_SYSROOT)/usr/include/gio-unix-2.0" -I"$(SBI_SYSROOT)/usr/include/glib-2.0" -I"$(SBI_SYSROOT)/usr/include/json-glib-1.0" -I"$(SBI_SYSROOT)/usr/include/json-glib-1.0/json-glib" -I"$(SBI_SYSROOT)/usr/include/location" -I"$(SBI_SYSROOT)/usr/include/media" -I"$(SBI_SYSROOT)/usr/include/media-content" -I"$(SBI_SYSROOT)/usr/include/messaging" -I"$(SBI_SYSROOT)/usr/include/minizip" -I"$(SBI_SYSROOT)/usr/include/network" -I"$(SBI_SYSROOT)/usr/include/notification" -I"$(SBI_SYSROOT)/usr/include/sensor" -I"$(SBI_SYSROOT)/usr/include/storage" -I"$(SBI_SYSROOT)/usr/include/system" -I"$(SBI_SYSROOT)/usr/include/telephony" -I"$(SBI_SYSROOT)/usr/include/ui" -I"$(SBI_SYSROOT)/usr/include/widget_service" -I"$(SBI_SYSROOT)/usr/include/widget_viewer_evas" -I"$(SBI_SYSROOT)/usr/lib/dbus-1.0/include" -I"$(SBI_SYSROOT)/usr/lib/glib-2.0/include" -Werror-implicit-function-declaration -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<" + @echo 'Finished building: $<' + @echo ' ' + + diff --git a/tbtcoreapp/crash-info/org.tizen.tbtcoreapp_20130116132121.cs b/tbtcoreapp/crash-info/org.tizen.tbtcoreapp_20130116132121.cs new file mode 100644 index 0000000..7022155 --- /dev/null +++ b/tbtcoreapp/crash-info/org.tizen.tbtcoreapp_20130116132121.cs @@ -0,0 +1,681 @@ +S/W Version Information +Model: Wearable-B2 +Tizen-Version: 2.3.1 +Build-Number: Tizen-2.3.1_Wearable-B2_20150617.1326 +Build-Date: 2015.06.17 13:26:56 + +Crash Information +Process Name: tbtcoreapp +PID: 13272 +Date: 2013-01-16 13:21:21+0900 +Executable File Path: /opt/usr/apps/org.tizen.tbtcoreapp/bin/tbtcoreapp +Signal: 11 + (SIGSEGV) + si_code: -6 + signal sent by tkill (sent by pid 13272, uid 5000) + +Register Information +r0 = 0x452a301c, r1 = 0x452a301c +r2 = 0x00000000, r3 = 0x00000000 +r4 = 0x45666008, r5 = 0x452a301c +r6 = 0x000048e7, r7 = 0x0000000b +r8 = 0xbee5aa18, r9 = 0x446a5be0 +r10 = 0x00000032, fp = 0x4518ac78 +ip = 0x43058a10, sp = 0xbee5a960 +lr = 0x401ebb3c, pc = 0x401ebd64 +cpsr = 0x00000010 + +Memory Information +MemTotal: 502336 KB +MemFree: 181220 KB +Buffers: 33100 KB +Cached: 130964 KB +VmPeak: 424604 KB +VmSize: 421208 KB +VmLck: 0 KB +VmPin: 0 KB +VmHWM: 20364 KB +VmRSS: 20360 KB +VmData: 360080 KB +VmStk: 136 KB +VmExe: 24 KB +VmLib: 28184 KB +VmPTE: 62 KB +VmSwap: 0 KB + +Threads Information +Threads: 3 +PID = 13272 TID = 13272 +13272 13273 13298 + +Maps Information +40000000 40006000 r-xp /usr/bin/launchpad_preloading_preinitializing_daemon +4000e000 4002b000 r-xp /lib/ld-2.13.so +40034000 40038000 r-xp /usr/lib/libsys-assert.so +40041000 40045000 r-xp /usr/lib/libappcore-efl.so.1.1 +40050000 4005c000 r-xp /usr/lib/libaul.so.0.1.0 +40065000 40067000 r-xp /usr/lib/libdlog.so.0.0.0 +4006f000 40083000 r-xp /lib/libpthread-2.13.so +4008e000 400a1000 r-xp /usr/lib/libprivilege-control.so.0.0.2 +400a9000 4010b000 r-xp /usr/lib/libsqlite3.so.0.8.6 +40115000 40118000 r-xp /usr/lib/libsmack.so.1.0.0 +40120000 40122000 r-xp /lib/libdl-2.13.so +4012b000 4012e000 r-xp /usr/lib/libbundle.so.0.1.22 +40136000 40160000 r-xp /usr/lib/libdbus-1.so.3.7.2 +40169000 40171000 r-xp /lib/libgcc_s-4.6.4.so.1 +40179000 40294000 r-xp /lib/libc-2.13.so +402a2000 402ac000 r-xp /lib/libunwind.so.8.0.1 +402da000 402f1000 r-xp /usr/lib/libdbus-glib-1.so.2.2.2 +402fa000 40308000 r-xp /usr/lib/libail.so.0.1.0 +40310000 403e0000 r-xp /usr/lib/libglib-2.0.so.0.3200.3 +403e1000 403e6000 r-xp /usr/lib/libxdgmime.so.1.1.0 +403ef000 40405000 r-xp /usr/lib/libecore.so.1.7.99 +4041b000 4043b000 r-xp /usr/lib/libpkgmgr-info.so.0.0.17 +40443000 40445000 r-xp /usr/lib/libiri.so +4044d000 40450000 r-xp /lib/libcap.so.2.21 +40458000 4045f000 r-xp /lib/libcrypt-2.13.so +4048f000 40495000 r-xp /usr/lib/libcapi-base-common.so.0.1.8 +4049e000 404a4000 r-xp /lib/librt-2.13.so +404ad000 40581000 r-xp /usr/lib/libgio-2.0.so.0.3200.3 +4058d000 405c1000 r-xp /usr/lib/libgobject-2.0.so.0.3200.3 +405ca000 405cd000 r-xp /usr/lib/libSLP-db-util.so.0.1.0 +405d5000 405dd000 r-xp /usr/lib/libvconf.so.0.2.45 +405e5000 40625000 r-xp /usr/lib/libeina.so.1.7.99 +4062e000 40697000 r-xp /lib/libm-2.13.so +406a0000 406bb000 r-xp /usr/lib/libpkgmgr_parser.so.0.1.0 +406c3000 4086b000 r-xp /usr/lib/libcrypto.so.1.0.0 +4088b000 4088e000 r-xp /lib/libattr.so.1.1.0 +40896000 40897000 r-xp /usr/lib/libgthread-2.0.so.0.3200.3 +4089f000 408a4000 r-xp /usr/lib/libffi.so.5.0.10 +408ac000 408ae000 r-xp /usr/lib/libgmodule-2.0.so.0.3200.3 +408b6000 408cc000 r-xp /lib/libz.so.1.2.5 +408d4000 408e4000 r-xp /lib/libresolv-2.13.so +408e8000 409b3000 r-xp /usr/lib/libxml2.so.2.7.8 +409c1000 409c2000 r-xp /usr/lib/libjournal.so.0.1.0 +40aca000 40acd000 r-xp /usr/lib/libcapi-appfw-application.so.0.3.1.0 +40ad9000 40c0e000 r-xp /usr/lib/libelementary.so.1.7.99 +40c24000 40c53000 r-xp /usr/lib/libecore_x.so.1.7.99 +40c5d000 40c7e000 r-xp /usr/lib/libecore_evas.so.1.7.99 +40c87000 40d51000 r-xp /usr/lib/libevas.so.1.7.99 +40d76000 40d7a000 r-xp /usr/lib/libappcore-common.so.1.1 +40d83000 40d9c000 r-xp /usr/lib/libeet.so.1.7.99 +40dad000 40db2000 r-xp /usr/lib/libecore_file.so.1.7.99 +40dba000 40dcb000 r-xp /usr/lib/libecore_input.so.1.7.99 +40dd3000 40e30000 r-xp /usr/lib/libedje.so.1.7.99 +40e39000 40f78000 r-xp /usr/lib/libicui18n.so.51.1 +40f88000 4106d000 r-xp /usr/lib/libicuuc.so.51.1 +41082000 4108b000 r-xp /usr/lib/libedbus.so.1.7.99 +41093000 410a9000 r-xp /usr/lib/libefreet.so.1.7.99 +410b2000 410b6000 r-xp /usr/lib/libefreet_mime.so.1.7.99 +410bf000 410c7000 r-xp /usr/lib/libethumb_client.so.1.7.99 +410cf000 410d5000 r-xp /usr/lib/libecore_imf.so.1.7.99 +410dd000 410f6000 r-xp /usr/lib/libecore_con.so.1.7.99 +41100000 41106000 r-xp /usr/lib/libXcursor.so.1.0.2 +4110f000 41110000 r-xp /usr/lib/libXdamage.so.1.1.0 +41119000 4111b000 r-xp /usr/lib/libXcomposite.so.1.0.0 +41123000 41125000 r-xp /usr/lib/libXgesture.so.7.0.0 +4112d000 41130000 r-xp /usr/lib/libXfixes.so.3.1.0 +41138000 41141000 r-xp /usr/lib/libXi.so.6.1.0 +41149000 4114a000 r-xp /usr/lib/libXinerama.so.1.0.0 +41153000 41158000 r-xp /usr/lib/libXrandr.so.2.2.0 +41160000 41166000 r-xp /usr/lib/libXrender.so.1.3.0 +4116e000 41171000 r-xp /usr/lib/libXtst.so.6.1.0 +41179000 4125a000 r-xp /usr/lib/libX11.so.6.3.0 +41265000 4126f000 r-xp /usr/lib/libXext.so.6.4.0 +41277000 4127c000 r-xp /usr/lib/libecore_fb.so.1.7.99 +41285000 41289000 r-xp /usr/lib/libecore_ipc.so.1.7.99 +41291000 41294000 r-xp /usr/lib/libecore_input_evas.so.1.7.99 +4129c000 412f2000 r-xp /usr/lib/libfreetype.so.6.11.3 +412fe000 41311000 r-xp /usr/lib/libfribidi.so.0.3.1 +41319000 41355000 r-xp /usr/lib/libharfbuzz.so.0.940.0 +4135e000 41381000 r-xp /usr/lib/libfontconfig.so.1.5.0 +4138a000 413e0000 r-xp /usr/lib/libpixman-1.so.0.28.2 +413ed000 41403000 r-xp /usr/lib/libsensor.so.1.1.0 +4140c000 4142f000 r-xp /usr/lib/libjpeg.so.8.0.2 +41447000 4144e000 r-xp /usr/lib/libembryo.so.1.7.99 +41456000 4146d000 r-xp /usr/lib/liblua-5.1.so +41476000 41477000 r-xp /usr/lib/libecore_imf_evas.so.1.7.99 +4147f000 4148c000 r-xp /usr/lib/libremix.so.0.0.0 +41494000 41496000 r-xp /usr/lib/libctxdata.so.0.0.0 +4149e000 41532000 r-xp /usr/lib/libstdc++.so.6.0.16 +42aab000 42ab4000 r-xp /usr/lib/libethumb.so.1.7.99 +42abc000 42b00000 r-xp /usr/lib/libcurl.so.4.3.0 +42b09000 42b1c000 r-xp /usr/lib/libxcb.so.1.1.0 +42b24000 42b3c000 r-xp /usr/lib/libpng12.so.0.50.0 +42b44000 42b5a000 r-xp /lib/libexpat.so.1.5.2 +42b63000 42b6a000 r-xp /usr/lib/libsensord-share.so +42b72000 42bb5000 r-xp /usr/lib/libsndfile.so.1.0.25 +42bc2000 42bcc000 r-xp /usr/lib/libcares.so.2.1.0 +42bd4000 42c02000 r-xp /usr/lib/libidn.so.11.5.44 +42c0a000 42c56000 r-xp /usr/lib/libssl.so.1.0.0 +42c63000 42c65000 r-xp /usr/lib/libXau.so.6.0.0 +42c6d000 42d51000 r-xp /usr/lib/libvorbisenc.so.2.0.6 +42d65000 42d87000 r-xp /usr/lib/libvorbis.so.0.4.3 +42d8f000 42d93000 r-xp /usr/lib/libogg.so.0.7.1 +42d9b000 42da0000 r-xp /usr/lib/bufmgr/libtbm_exynos4412.so.0.0.0 +42daa000 42dae000 r-xp /usr/lib/libcapi-appfw-app-control.so.0.3.1.0 +42db6000 42db8000 r-xp /usr/lib/libcapi-appfw-app-common.so.0.3.1.0 +42dc1000 42dc8000 r-xp /usr/lib/libappsvc.so.0.1.0 +42dd0000 42dd8000 r-xp /usr/lib/libcapi-security-privilege-manager.so.0.0.3 +42de0000 42de2000 r-xp /usr/lib/libiniparser.so.0 +42dec000 42e12000 r-xp /usr/lib/ecore/immodules/libisf-imf-module.so +42e1c000 42eea000 r-xp /usr/lib/libscim-1.0.so.8.2.3 +42f01000 42f1e000 r-xp /usr/lib/libsecurity-server-client.so.1.0.1 +42f27000 42f48000 r-xp /usr/lib/libsecurity-server-commons.so.1.0.0 +42f51000 42f5b000 r-xp /lib/libnss_files-2.13.so +42f64000 42fa4000 r-xp /opt/usr/apps/org.tizen.tbtcoreapp/bin/tbtcoreapp +42fb3000 42fb7000 r-xp /usr/lib/libcapi-appfw-preference.so.0.3.1.0 +42fbf000 42fc5000 r-xp /usr/lib/libcapi-data-control.so.1.2.2.3 +42fcd000 42fd8000 r-xp /usr/lib/libcapi-location-manager.so.0.4.5 +42fe0000 42fed000 r-xp /usr/lib/libcapi-media-camera.so.0.1.77 +42ff6000 43003000 r-xp /usr/lib/libcapi-media-player.so.0.2.1 +4300b000 43011000 r-xp /usr/lib/libcapi-media-recorder.so.0.1.44 +43019000 4301d000 r-xp /usr/lib/libcapi-media-sound-manager.so.0.2.27 +43025000 43051000 r-xp /usr/lib/libcapi-network-bluetooth.so.0.1.53 +43059000 4306b000 r-xp /usr/lib/libcapi-network-nfc.so.0.2.0 +43073000 4307e000 r-xp /usr/lib/libcapi-network-wifi.so.1.0.44 +43086000 4308a000 r-xp /usr/lib/libcapi-system-info.so.0.2.0 +43093000 43096000 r-xp /usr/lib/libcapi-system-runtime-info.so.0.0.3 +4309e000 430a2000 r-xp /usr/lib/libcapi-system-sensor.so.0.1.18 +430ab000 430b3000 r-xp /usr/lib/libcapi-system-system-settings.so.0.0.2 +430b4000 430c8000 r-xp /usr/lib/libefl-extension.so.0.1.0 +430d0000 430d4000 r-xp /usr/lib/libstorage.so.0.1 +430dc000 430ea000 r-xp /usr/lib/libdata-control.so.0.2.3.2 +430f3000 43108000 r-xp /usr/lib/libSLP-location.so.0.9.5 +43111000 43164000 r-xp /usr/lib/libmmfcamcorder.so.0.0.0 +43171000 43177000 r-xp /usr/lib/libcapi-media-tool.so.0.1.1 +4317f000 4321a000 r-xp /usr/lib/libgstreamer-0.10.so.0.30.0 +43226000 4322d000 r-xp /usr/lib/libtbm.so.1.0.0 +43235000 43284000 r-xp /usr/lib/libmmfplayer.so.0.0.0 +4328c000 432a3000 r-xp /usr/lib/libmmfsound.so.0.1.0 +432ac000 432b1000 r-xp /usr/lib/libmmfsession.so.0.0.0 +432b9000 432f2000 r-xp /usr/lib/libbluetooth-api.so.1.0.0 +432fb000 43312000 r-xp /usr/lib/libprivacy-manager-client.so.0.0.6 +4331b000 43345000 r-xp /usr/lib/libnfc.so.1.0.0 +4334e000 43362000 r-xp /usr/lib/libnetwork.so.0.0.0 +4336a000 4337b000 r-xp /usr/lib/libefl-assist.so.0.1.0 +43383000 4343b000 r-xp /usr/lib/libcairo.so.2.11200.14 +43446000 4344c000 r-xp /usr/lib/libcapi-appfw-app-manager.so.0.2.4 +43454000 43461000 r-xp /usr/lib/libgstinterfaces-0.10.so.0.25.0 +4346a000 43473000 r-xp /usr/lib/libgstapp-0.10.so.0.25.0 +4347b000 4349b000 r-xp /usr/lib/libexif.so.12.3.3 +434ae000 434b0000 r-xp /usr/lib/libcamsrcjpegenc.so.0.0.0 +434b8000 434bf000 r-xp /usr/lib/libmmutil_imgp.so.0.0.0 +434c7000 434d1000 r-xp /usr/lib/libaudio-session-mgr.so.0.0.0 +434dd000 434e3000 r-xp /usr/lib/libmmfcommon.so.0.0.0 +434ec000 434f3000 r-xp /usr/lib/libdrm.so.2.4.0 +434fc000 434fe000 r-xp /usr/lib/libdri2.so.0.0.0 +43506000 4350a000 r-xp /usr/lib/libmmfsoundcommon.so.0.0.0 +43512000 43515000 r-xp /usr/lib/libpulse-simple.so.0.0.4 +4351e000 43554000 r-xp /usr/lib/libpulse.so.0.16.2 +4355d000 43563000 r-xp /usr/lib/libcapi-appfw-package-manager.so.0.0.49 +4356b000 43599000 r-xp /usr/lib/libnfc-common-lib.so.1.0.0 +435a5000 435bb000 r-xp /usr/lib/libtts.so +435c4000 435c7000 r-xp /usr/lib/libcapi-media-image-util.so.0.1.3 +435d0000 4370d000 r-xp /usr/lib/driver/libMali.so +4371a000 4371b000 r-xp /usr/lib/libxcb-shm.so.0.0.0 +43724000 43729000 r-xp /usr/lib/libxcb-render.so.0.0.0 +43732000 43758000 r-xp /usr/lib/libpkgmgr-client.so.0.1.68 +43761000 437a4000 r-xp /usr/lib/libgstbase-0.10.so.0.30.0 +437ac000 437b2000 r-xp /usr/lib/libjson.so.0.1.0 +437ba000 43802000 r-xp /usr/lib/pulseaudio/libpulsecommon-4.0.so +43803000 43808000 r-xp /usr/lib/libmmutil_jpeg.so.0.0.0 +43810000 43816000 r-xp /usr/lib/libUMP.so +4381e000 43825000 r-xp /usr/lib/libpkgmgr_installer_client.so.0.1.0 +4382d000 4382f000 r-xp /usr/lib/libpkgmgr_installer_status_broadcast_server.so.0.1.0 +43837000 4383e000 r-xp /usr/lib/libminizip.so.1.0.0 +43a46000 43ab0000 r-xp /usr/lib/evas/modules/engines/gl_x11/linux-gnueabi-armv7l-1.7.99/module.so +43ac0000 43aca000 r-xp /usr/lib/evas/modules/engines/software_generic/linux-gnueabi-armv7l-1.7.99/module.so +43ad4000 442d3000 rwxp [stack:13273] +446c5000 446dc000 r-xp /usr/lib/edje/modules/elm/linux-gnueabi-armv7l-1.0.0/module.so +446e8000 446e9000 r-xp /usr/lib/evas/modules/loaders/eet/linux-gnueabi-armv7l-1.7.99/module.so +44919000 4491b000 r-xp /usr/lib/evas/modules/loaders/png/linux-gnueabi-armv7l-1.7.99/module.so +44924000 45123000 rwxp [stack:13298] +452c7000 452c8000 r-xp /usr/lib/edje/modules/feedback/linux-gnueabi-armv7l-1.0.0/module.so +452df000 452e6000 r-xp /usr/lib/libfeedback.so.0.1.4 +45400000 45401000 r-xp /usr/lib/libmmfkeysound.so.0.0.0 +bee3b000 bee5c000 rwxp [stack] +End of Maps Information + +Callstack Information (PID:13272) +Call Stack Count: 19 + 0: strlen + 0x4 (0x401ebd64) [/lib/libc.so.6] + 0x72d64 + 1: __strdup + 0xc (0x401ebb3c) [/lib/libc.so.6] + 0x72b3c + 2: (0x430328b5) [/usr/lib/libcapi-network-bluetooth.so.0] + 0xd8b5 + 3: (0x432d9d1f) [/usr/lib/libbluetooth-api.so.1] + 0x20d1f + 4: g_simple_async_result_complete + 0x68 (0x404fb04d) [/usr/lib/libgio-2.0.so.0] + 0x4e04d + 5: (0x40538d57) [/usr/lib/libgio-2.0.so.0] + 0x8bd57 + 6: g_simple_async_result_complete + 0x68 (0x404fb04d) [/usr/lib/libgio-2.0.so.0] + 0x4e04d + 7: (0x40531e11) [/usr/lib/libgio-2.0.so.0] + 0x84e11 + 8: g_simple_async_result_complete + 0x68 (0x404fb04d) [/usr/lib/libgio-2.0.so.0] + 0x4e04d + 9: (0x404fb101) [/usr/lib/libgio-2.0.so.0] + 0x4e101 +10: (0x40343b9f) [/usr/lib/libglib-2.0.so.0] + 0x33b9f +11: g_main_context_dispatch + 0xbc (0x40345379) [/usr/lib/libglib-2.0.so.0] + 0x35379 +12: (0x403fea27) [/usr/lib/libecore.so.1] + 0xfa27 +13: (0x403f9b7f) [/usr/lib/libecore.so.1] + 0xab7f +14: (0x403fa5d7) [/usr/lib/libecore.so.1] + 0xb5d7 +15: ecore_main_loop_begin + 0x30 (0x403fa8a9) [/usr/lib/libecore.so.1] + 0xb8a9 +16: appcore_efl_main + 0x2a2 (0x400436f3) [/usr/lib/libappcore-efl.so.1] + 0x26f3 +17: ui_app_main + 0xb0 (0x40acbca1) [/usr/lib/libcapi-appfw-application.so.0] + 0x1ca1 +18: app_run + 0x8a (0x42f952ff) [/opt/usr/apps/org.tizen.tbtcoreapp/bin/tbtcoreapp] + 0x312ff +End of Call Stack + +Package Information +Package Name: org.tizen.tbtcoreapp +Package ID : org.tizen.tbtcoreapp +Version: 1.0.0 +Package Type: rpm +App Name: tbtcoreapp +App ID: org.tizen.tbtcoreapp +Type: capp +Categories: + +Latest Debug Message Information +--------- beginning of /dev/log_main +:: state=8 not found! +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_state (152) > util_state_object_add_state :: state=8,'BT_BOND_ERROR_CANCELLED' Adding State +01-16 13:21:03.220+0900 W/UTIL_STATE(13272): util_state_object_get_state (141) > util_state_object_get_state :: state=9 not found! +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_state (152) > util_state_object_add_state :: state=9,'BT_BOND_ERROR_AUTH_FAILED' Adding State +01-16 13:21:03.220+0900 W/UTIL_STATE(13272): util_state_object_get_state (141) > util_state_object_get_state :: state=10 not found! +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_state (152) > util_state_object_add_state :: state=10,'BT_BOND_ERROR_TIMED_OUT' Adding State +01-16 13:21:03.220+0900 W/UTIL_STATE(13272): util_state_object_get_state (141) > util_state_object_get_state :: state=11 not found! +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_state (152) > util_state_object_add_state :: state=11,'BT_BOND_ERROR_REMOTE_DEVICE_NOT_FOUND' Adding State +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_DEACTIVATED] has 1 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_DEACTIVATED] has 2 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_ACTIVATION_ATTEMPTED] has 1 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_ACTIVATION_BY_APP_FAILED] has 1 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_ACTIVATION_ATTEMPTED] has 2 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_ACTIVATED_CLIENT] has 1 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_DISCOVERY_START_REQUESTED] has 1 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_DISCOVERED_DEVICE_CLICKED] has 1 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_DISCOVERED_DEVICE_CLICKED] has 2 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_PAIR_REQUEST_ATTEMPTED] has 1 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_PAIR_REQUEST_ATTEMPTED] has 2 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_PAIR_REQUEST_ATTEMPTED] has 3 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_PAIR_REQUEST_ATTEMPTED] has 4 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_PAIR_REQUEST_ATTEMPTED] has 5 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_BOND_SUCCESSFULLY_CREATED] has 1 transition. +01-16 13:21:03.220+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_UNPAIR_REQUEST_ATTEMPTED] has 1 transition. +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): util_state_object_add_transition (185) > adding transition... +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): util_state_object_add_transition (221) > [bt_client_pair] [BT_SUCCESSFULLY_UNPAIRED] has 1 transition. +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): util_state_object_init (243) > (bt_client_pair,BT_DEACTIVATED) state_object INIT +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): =================== +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --STATE-MACHINE(bt_client_pair) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_DEACTIVATED[0] (2) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--0 => BT_ACTIVATION_ATTEMPTED[3] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--4 => BT_ACTIVATED_CLIENT[2] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_ACTIVATION_ATTEMPTED[3] (2) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--2 => BT_ACTIVATION_BY_APP_FAILED[4] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--1 => BT_ACTIVATED_CLIENT[2] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_ACTIVATED_CLIENT[2] (1) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--5 => BT_DISCOVERY_START_REQUESTED[5] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_ACTIVATION_BY_APP_FAILED[4] (1) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--4 => BT_ACTIVATED_CLIENT[2] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_DISCOVERY_START_REQUESTED[5] (1) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--6 => BT_DISCOVERED_DEVICE_CLICKED[12] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_PAIR_REQUEST_ATTEMPTED[6] (5) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--9 => BT_BOND_SUCCESSFULLY_CREATED[13] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--13 => BT_BOND_ERROR_CANCELLED[8] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--10 => BT_BOND_ERROR_AUTH_FAILED[9] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--11 => BT_BOND_ERROR_TIMED_OUT[10] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--12 => BT_BOND_ERROR_REMOTE_DEVICE_NOT_FOUND[11] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_UNPAIR_REQUEST_ATTEMPTED[7] (1) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--14 => BT_SUCCESSFULLY_UNPAIRED[14] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_DISCOVERED_DEVICE_CLICKED[12] (2) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--7 => BT_PAIR_REQUEST_ATTEMPTED[6] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--8 => BT_UNPAIR_REQUEST_ATTEMPTED[7] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_SUCCESSFULLY_UNPAIRED[14] (1) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--6 => BT_DISCOVERED_DEVICE_CLICKED[12] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_BOND_SUCCESSFULLY_CREATED[13] (1) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--|--6 => BT_DISCOVERED_DEVICE_CLICKED[12] +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_BOND_ERROR_CANCELLED[8] (0) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_BOND_ERROR_AUTH_FAILED[9] (0) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_BOND_ERROR_TIMED_OUT[10] (0) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--BT_BOND_ERROR_REMOTE_DEVICE_NOT_FOUND[11] (0) +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --|--| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): --| +01-16 13:21:03.225+0900 I/UTIL_STATE(13272): =================== +01-16 13:21:03.325+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:03.340+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 447) > I am here !! and current state is 0 +01-16 13:21:03.340+0900 D/[TBT_CORE]_(13272): do_bt_common_feed (Line: 2349) > Feed value is 4 +01-16 13:21:03.340+0900 I/UTIL_STATE(13272): util_state_object_feed (257) > (bt_client_pair,BT_DEACTIVATED) feeding 4 +01-16 13:21:03.340+0900 D/[TBT_CORE]_(13272): _bt_util_state_object_state_changed_cb_client_pair (Line: 2107) > Current state is 2 while previous state is 0 +01-16 13:21:03.345+0900 I/UTIL_STATE(13272): util_state_object_feed (275) > (bt_client_pair,BT_ACTIVATED_CLIENT) Latest +01-16 13:21:03.355+0900 E/EFL (13272): edje<13272> edje_util.c:3592 edje_object_size_min_restricted_calc() group bluetooth_viewer_cancel_check has a non-fixed part 'controlr_part'. Adding 'fixed: 1 1;' to source EDC may help. Continuing discarding faulty part. +01-16 13:21:03.380+0900 E/MALI ( 317): gfx_bo_dri2_priv.c: gfx_bo_dri2_priv_reset(79) > [0317|0317] gfx_bo_dri2_priv_reset(79) error. '!o->mem_info_cache[i].bh_dev_mem'  +01-16 13:21:03.460+0900 E/MALI (13272): gfx_bo_dri2_priv.c: gfx_bo_dri2_priv_reset(79) > [13272|13272] gfx_bo_dri2_priv_reset(79) error. '!o->mem_info_cache[i].bh_dev_mem'  +01-16 13:21:03.940+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping_begin_handler(428) > [PROCESSMGR] ecore_x_netwm_ping_send to the client_win=0x2400003 +01-16 13:21:08.570+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:08.625+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18017724 button=1 +01-16 13:21:08.680+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18017829 button=1 +01-16 13:21:08.690+0900 D/[TBT_CORE]_(13272): _control_button_bluetooth_pressed_cb (Line: 1028) > _control_button_bluetooth_pressed_cb +01-16 13:21:08.690+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc008f7 +01-16 13:21:08.755+0900 D/[TBT_CORE]_(13272): update_bonded_devices (Line: 775) > update_bonded_devices +01-16 13:21:08.850+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:08.880+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 447) > I am here !! and current state is 2 +01-16 13:21:08.885+0900 D/[TBT_CORE]_(13272): do_bt_common_feed (Line: 2349) > Feed value is 4 +01-16 13:21:08.885+0900 I/UTIL_STATE(13272): util_state_object_feed (257) > (bt_client_pair,BT_ACTIVATED_CLIENT) feeding 4 +01-16 13:21:08.885+0900 D/[TBT_CORE]_(13272): _bt_util_state_object_state_changed_cb_client_pair (Line: 2107) > Current state is 2 while previous state is 2 +01-16 13:21:08.890+0900 I/UTIL_STATE(13272): util_state_object_feed (275) > (bt_client_pair,BT_ACTIVATED_CLIENT) Latest +01-16 13:21:08.890+0900 D/[TBT_CORE]_(13272): do_bt_common_feed (Line: 2349) > Feed value is 5 +01-16 13:21:08.890+0900 I/UTIL_STATE(13272): util_state_object_feed (257) > (bt_client_pair,BT_ACTIVATED_CLIENT) feeding 5 +01-16 13:21:08.890+0900 D/[TBT_CORE]_(13272): _bt_util_state_object_state_changed_cb_client_pair (Line: 2107) > Current state is 5 while previous state is 2 +01-16 13:21:08.930+0900 I/UTIL_STATE(13272): util_state_object_feed (275) > (bt_client_pair,BT_DISCOVERY_START_REQUESTED) Latest +01-16 13:21:08.940+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:08.940+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:08.965+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:08.970+0900 E/EFL (13272): edje<13272> edje_util.c:3592 edje_object_size_min_restricted_calc() group bluetooth_viewer_cancel_check has a non-fixed part 'controlr_part'. Adding 'fixed: 1 1;' to source EDC may help. Continuing discarding faulty part. +01-16 13:21:09.105+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:09.105+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:09.105+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:09.150+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:09.175+0900 E/EFL (13272): edje<13272> edje_util.c:3592 edje_object_size_min_restricted_calc() group bluetooth_viewer_cancel_check has a non-fixed part 'controlr_part'. Adding 'fixed: 1 1;' to source EDC may help. Continuing discarding faulty part. +01-16 13:21:09.290+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:09.290+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:09.290+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:09.290+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:09.360+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:09.740+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:09.740+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:09.740+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:09.740+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:09.740+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:09.820+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:09.850+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:09.850+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:09.850+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:09.850+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:09.850+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:09.850+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:09.890+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:09.970+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:09.970+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:09.970+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:09.970+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:09.970+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:09.970+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:09.970+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:10.010+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:10.075+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:10.075+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:10.075+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.075+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.075+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.075+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.075+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.075+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:10.125+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:10.165+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:10.165+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:10.165+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.165+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.165+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:10.195+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:10.250+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:10.250+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:10.250+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.250+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.250+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.250+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.250+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.255+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.255+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:10.290+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:10.445+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:10.450+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:10.455+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:10.455+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.455+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.455+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.455+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.455+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.455+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.455+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.455+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:10.535+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:10.575+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18019605 button=1 +01-16 13:21:10.595+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:10.595+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:10.595+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.595+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.595+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.595+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.595+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:10.625+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:10.655+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:10.655+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:10.655+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.655+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.655+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.655+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.655+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.655+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.655+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.655+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:10.655+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:10.685+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:10.960+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc008f7 +01-16 13:21:10.970+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18020113 button=1 +01-16 13:21:11.180+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:11.180+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:11.180+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.180+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.180+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.180+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.180+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.180+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.180+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.180+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.180+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:11.230+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:11.505+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:11.565+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18020700 button=1 +01-16 13:21:11.595+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:11.595+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:11.595+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.595+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.600+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.600+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.600+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.600+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.600+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.605+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.605+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.605+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:11.660+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:11.735+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:11.785+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:12.070+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc008f7 +01-16 13:21:12.085+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18021225 button=1 +01-16 13:21:12.760+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:12.825+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18021940 button=1 +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:12.910+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:12.970+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:13.285+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc008f7 +01-16 13:21:13.300+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18022437 button=1 +01-16 13:21:13.940+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping_confirm_handler(349) > [PROCESSMGR] last_pointed_win=0xc008f7 bd->visible=1 +01-16 13:21:14.035+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.080+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:14.150+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:14.195+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18023204 button=1 +01-16 13:21:14.480+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc008f7 +01-16 13:21:14.510+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18023635 button=1 +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:14.575+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:14.635+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:15.360+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:15.415+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18024514 button=1 +01-16 13:21:16.090+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc008f7 +01-16 13:21:16.100+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18025241 button=1 +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.480+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:16.560+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:16.630+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:16.655+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:16.715+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:16.770+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18025920 button=1 +01-16 13:21:17.715+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc008f7 +01-16 13:21:17.720+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18026868 button=1 +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): is_new_device_found (Line: 685) > is_new_device_found +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): bluetooth_list_find_func_cb (Line: 1698) > bluetooth_list_find_func_cb +01-16 13:21:18.085+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:18.190+0900 D/[TBT_CORE]_(13272): discovered_devices_list_show (Line: 701) > discovered_devices_list_show +01-16 13:21:19.585+0900 D/[TBT_CORE]_(13272): _adapter_device_discovery_state_changed_cb (Line: 1129) > _adapter_device_discovery_state_changed_cb +01-16 13:21:19.585+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:19.745+0900 E/EFL (13272): edje<13272> edje_util.c:3592 edje_object_size_min_restricted_calc() group bluetooth_viewer_cancel_check has a non-fixed part 'controlr_part'. Adding 'fixed: 1 1;' to source EDC may help. Continuing discarding faulty part. +01-16 13:21:20.600+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:20.665+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18029757 button=1 +01-16 13:21:20.665+0900 D/EFL (13272): ecore_x<13272> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18029813 button=1 +01-16 13:21:20.675+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc008f7 +01-16 13:21:20.690+0900 D/[TBT_CORE]_(13272): _device_item_selected_cb (Line: 1249) > _device_item_selected_cb +01-16 13:21:20.690+0900 D/[TBT_CORE]_(13272): do_bt_common_feed (Line: 2349) > Feed value is 6 +01-16 13:21:20.690+0900 I/UTIL_STATE(13272): util_state_object_feed (257) > (bt_client_pair,BT_DISCOVERY_START_REQUESTED) feeding 6 +01-16 13:21:20.690+0900 D/[TBT_CORE]_(13272): _bt_util_state_object_state_changed_cb_client_pair (Line: 2107) > Current state is 12 while previous state is 5 +01-16 13:21:20.690+0900 D/[TBT_CORE]_(13272): do_bt_state_common_check (Line: 2226) > BT_DISCOVERED_DEVICE_CLICKED +01-16 13:21:20.690+0900 I/UTIL_STATE(13272): util_state_object_feed (257) > (bt_client_pair,BT_DISCOVERED_DEVICE_CLICKED) feeding 7 +01-16 13:21:20.690+0900 D/[TBT_CORE]_(13272): _bt_util_state_object_state_changed_cb_client_pair (Line: 2107) > Current state is 6 while previous state is 12 +01-16 13:21:20.690+0900 D/[TBT_CORE]_(13272): do_bt_state_common_check (Line: 2260) > BT_DISCOVERED_DEVICE_CLICKED +01-16 13:21:20.815+0900 D/[TBT_CORE]_(13272): do_bt_state_common_check (Line: 2265) > The value of Stop Discovery is BT_ERROR_NOT_IN_PROGRESS +01-16 13:21:20.815+0900 D/[TBT_CORE]_(13272): update_view_controls (Line: 386) > update_view_controls +01-16 13:21:20.940+0900 E/EFL (13272): <13272> elm_main.c:1101 elm_object_disabled_set() safety check failed: obj == NULL +01-16 13:21:20.940+0900 D/[TBT_CORE]_(13272): do_bt_state_common_check (Line: 2291) > bt_device_start_service_search +01-16 13:21:21.005+0900 D/[TBT_CORE]_(13272): do_bt_state_common_check (Line: 2296) > [bt_device_create_bond] succeeded. device_bond_created_cb callback will be called. +01-16 13:21:21.005+0900 I/UTIL_STATE(13272): util_state_object_feed (275) > (bt_client_pair,BT_PAIR_REQUEST_ATTEMPTED) Latest +01-16 13:21:21.005+0900 I/UTIL_STATE(13272): util_state_object_feed (275) > (bt_client_pair,BT_PAIR_REQUEST_ATTEMPTED) Latest +01-16 13:21:21.555+0900 D/RESOURCED( 227): proc-monitor.c: proc_dbus_proc_signal_handler(198) > [proc_dbus_proc_signal_handler,198] call proc_dbus_proc_signal_handler : pid = 428, type = 0 +01-16 13:21:21.555+0900 D/AUL_AMD ( 301): amd_launch.c: __e17_status_handler(1911) > pid(428) status(3) +01-16 13:21:21.560+0900 D/RESOURCED( 227): proc-main.c: resourced_proc_status_change(555) > [SECURE_LOG] [resourced_proc_status_change,555] set foreground : 428 +01-16 13:21:21.560+0900 E/RESOURCED( 227): proc-main.c: proc_update_process_state(233) > [proc_update_process_state,233] Current pid (428) didn't have any process list +01-16 13:21:21.560+0900 D/RESOURCED( 227): cpu.c: cpu_foreground_state(92) > [cpu_foreground_state,92] cpu_foreground_state : pid = 428, appname = (null) +01-16 13:21:21.560+0900 D/RESOURCED( 227): cgroup.c: cgroup_write_node(91) > [SECURE_LOG] [cgroup_write_node,91] cgroup_buf /sys/fs/cgroup/cpu/cgroup.procs, value 428 +01-16 13:21:21.565+0900 W/CRASH_MANAGER(13341): worker.c: worker_job(1189) > 1113272746274135831008 diff --git a/tbtcoreapp/crash-info/org.tizen.tbtcoreapp_20130116132205.cs b/tbtcoreapp/crash-info/org.tizen.tbtcoreapp_20130116132205.cs new file mode 100644 index 0000000..c897ad1 --- /dev/null +++ b/tbtcoreapp/crash-info/org.tizen.tbtcoreapp_20130116132205.cs @@ -0,0 +1,667 @@ +S/W Version Information +Model: Wearable-B2 +Tizen-Version: 2.3.1 +Build-Number: Tizen-2.3.1_Wearable-B2_20150617.1326 +Build-Date: 2015.06.17 13:26:56 + +Crash Information +Process Name: tbtcoreapp +PID: 13364 +Date: 2013-01-16 13:22:05+0900 +Executable File Path: /opt/usr/apps/org.tizen.tbtcoreapp/bin/tbtcoreapp +Signal: 6 + (SIGABRT) + si_code: -6 + signal sent by tkill (sent by pid 13364, uid 5000) + +Register Information +r0 = 0x00000000, r1 = 0x00000002 +r2 = 0x4002da14, r3 = 0x00000000 +r4 = 0x44604240, r5 = 0x00000000 +r6 = 0x00000000, r7 = 0x00000094 +r8 = 0x00000000, r9 = 0x00000200 +r10 = 0x00003400, fp = 0x00000000 +ip = 0x00000000, sp = 0xbee595a0 +lr = 0x4024aad0, pc = 0x40236de4 +cpsr = 0x80000010 + +Memory Information +MemTotal: 502336 KB +MemFree: 6360 KB +Buffers: 20168 KB +Cached: 316104 KB +VmPeak: 86936 KB +VmSize: 84996 KB +VmLck: 0 KB +VmPin: 0 KB +VmHWM: 17244 KB +VmRSS: 17240 KB +VmData: 24120 KB +VmStk: 136 KB +VmExe: 24 KB +VmLib: 28148 KB +VmPTE: 56 KB +VmSwap: 0 KB + +Threads Information +Threads: 2 +PID = 13364 TID = 13364 +13364 13368 + +Maps Information +40000000 40006000 r-xp /usr/bin/launchpad_preloading_preinitializing_daemon +4000e000 4002b000 r-xp /lib/ld-2.13.so +40034000 40038000 r-xp /usr/lib/libsys-assert.so +40041000 40045000 r-xp /usr/lib/libappcore-efl.so.1.1 +40050000 4005c000 r-xp /usr/lib/libaul.so.0.1.0 +40065000 40067000 r-xp /usr/lib/libdlog.so.0.0.0 +4006f000 40083000 r-xp /lib/libpthread-2.13.so +4008e000 400a1000 r-xp /usr/lib/libprivilege-control.so.0.0.2 +400a9000 4010b000 r-xp /usr/lib/libsqlite3.so.0.8.6 +40115000 40118000 r-xp /usr/lib/libsmack.so.1.0.0 +40120000 40122000 r-xp /lib/libdl-2.13.so +4012b000 4012e000 r-xp /usr/lib/libbundle.so.0.1.22 +40136000 40160000 r-xp /usr/lib/libdbus-1.so.3.7.2 +40169000 40171000 r-xp /lib/libgcc_s-4.6.4.so.1 +40179000 40294000 r-xp /lib/libc-2.13.so +402a2000 402ac000 r-xp /lib/libunwind.so.8.0.1 +402da000 402f1000 r-xp /usr/lib/libdbus-glib-1.so.2.2.2 +402fa000 40308000 r-xp /usr/lib/libail.so.0.1.0 +40310000 403e0000 r-xp /usr/lib/libglib-2.0.so.0.3200.3 +403e1000 403e6000 r-xp /usr/lib/libxdgmime.so.1.1.0 +403ef000 40405000 r-xp /usr/lib/libecore.so.1.7.99 +4041b000 4043b000 r-xp /usr/lib/libpkgmgr-info.so.0.0.17 +40443000 40445000 r-xp /usr/lib/libiri.so +4044d000 40450000 r-xp /lib/libcap.so.2.21 +40458000 4045f000 r-xp /lib/libcrypt-2.13.so +4048f000 40495000 r-xp /usr/lib/libcapi-base-common.so.0.1.8 +4049e000 404a4000 r-xp /lib/librt-2.13.so +404ad000 40581000 r-xp /usr/lib/libgio-2.0.so.0.3200.3 +4058d000 405c1000 r-xp /usr/lib/libgobject-2.0.so.0.3200.3 +405ca000 405cd000 r-xp /usr/lib/libSLP-db-util.so.0.1.0 +405d5000 405dd000 r-xp /usr/lib/libvconf.so.0.2.45 +405e5000 40625000 r-xp /usr/lib/libeina.so.1.7.99 +4062e000 40697000 r-xp /lib/libm-2.13.so +406a0000 406bb000 r-xp /usr/lib/libpkgmgr_parser.so.0.1.0 +406c3000 4086b000 r-xp /usr/lib/libcrypto.so.1.0.0 +4088b000 4088e000 r-xp /lib/libattr.so.1.1.0 +40896000 40897000 r-xp /usr/lib/libgthread-2.0.so.0.3200.3 +4089f000 408a4000 r-xp /usr/lib/libffi.so.5.0.10 +408ac000 408ae000 r-xp /usr/lib/libgmodule-2.0.so.0.3200.3 +408b6000 408cc000 r-xp /lib/libz.so.1.2.5 +408d4000 408e4000 r-xp /lib/libresolv-2.13.so +408e8000 409b3000 r-xp /usr/lib/libxml2.so.2.7.8 +409c1000 409c2000 r-xp /usr/lib/libjournal.so.0.1.0 +40aca000 40acd000 r-xp /usr/lib/libcapi-appfw-application.so.0.3.1.0 +40ad9000 40c0e000 r-xp /usr/lib/libelementary.so.1.7.99 +40c24000 40c53000 r-xp /usr/lib/libecore_x.so.1.7.99 +40c5d000 40c7e000 r-xp /usr/lib/libecore_evas.so.1.7.99 +40c87000 40d51000 r-xp /usr/lib/libevas.so.1.7.99 +40d76000 40d7a000 r-xp /usr/lib/libappcore-common.so.1.1 +40d83000 40d9c000 r-xp /usr/lib/libeet.so.1.7.99 +40dad000 40db2000 r-xp /usr/lib/libecore_file.so.1.7.99 +40dba000 40dcb000 r-xp /usr/lib/libecore_input.so.1.7.99 +40dd3000 40e30000 r-xp /usr/lib/libedje.so.1.7.99 +40e39000 40f78000 r-xp /usr/lib/libicui18n.so.51.1 +40f88000 4106d000 r-xp /usr/lib/libicuuc.so.51.1 +41082000 4108b000 r-xp /usr/lib/libedbus.so.1.7.99 +41093000 410a9000 r-xp /usr/lib/libefreet.so.1.7.99 +410b2000 410b6000 r-xp /usr/lib/libefreet_mime.so.1.7.99 +410bf000 410c7000 r-xp /usr/lib/libethumb_client.so.1.7.99 +410cf000 410d5000 r-xp /usr/lib/libecore_imf.so.1.7.99 +410dd000 410f6000 r-xp /usr/lib/libecore_con.so.1.7.99 +41100000 41106000 r-xp /usr/lib/libXcursor.so.1.0.2 +4110f000 41110000 r-xp /usr/lib/libXdamage.so.1.1.0 +41119000 4111b000 r-xp /usr/lib/libXcomposite.so.1.0.0 +41123000 41125000 r-xp /usr/lib/libXgesture.so.7.0.0 +4112d000 41130000 r-xp /usr/lib/libXfixes.so.3.1.0 +41138000 41141000 r-xp /usr/lib/libXi.so.6.1.0 +41149000 4114a000 r-xp /usr/lib/libXinerama.so.1.0.0 +41153000 41158000 r-xp /usr/lib/libXrandr.so.2.2.0 +41160000 41166000 r-xp /usr/lib/libXrender.so.1.3.0 +4116e000 41171000 r-xp /usr/lib/libXtst.so.6.1.0 +41179000 4125a000 r-xp /usr/lib/libX11.so.6.3.0 +41265000 4126f000 r-xp /usr/lib/libXext.so.6.4.0 +41277000 4127c000 r-xp /usr/lib/libecore_fb.so.1.7.99 +41285000 41289000 r-xp /usr/lib/libecore_ipc.so.1.7.99 +41291000 41294000 r-xp /usr/lib/libecore_input_evas.so.1.7.99 +4129c000 412f2000 r-xp /usr/lib/libfreetype.so.6.11.3 +412fe000 41311000 r-xp /usr/lib/libfribidi.so.0.3.1 +41319000 41355000 r-xp /usr/lib/libharfbuzz.so.0.940.0 +4135e000 41381000 r-xp /usr/lib/libfontconfig.so.1.5.0 +4138a000 413e0000 r-xp /usr/lib/libpixman-1.so.0.28.2 +413ed000 41403000 r-xp /usr/lib/libsensor.so.1.1.0 +4140c000 4142f000 r-xp /usr/lib/libjpeg.so.8.0.2 +41447000 4144e000 r-xp /usr/lib/libembryo.so.1.7.99 +41456000 4146d000 r-xp /usr/lib/liblua-5.1.so +41476000 41477000 r-xp /usr/lib/libecore_imf_evas.so.1.7.99 +4147f000 4148c000 r-xp /usr/lib/libremix.so.0.0.0 +41494000 41496000 r-xp /usr/lib/libctxdata.so.0.0.0 +4149e000 41532000 r-xp /usr/lib/libstdc++.so.6.0.16 +42aab000 42ab4000 r-xp /usr/lib/libethumb.so.1.7.99 +42abc000 42b00000 r-xp /usr/lib/libcurl.so.4.3.0 +42b09000 42b1c000 r-xp /usr/lib/libxcb.so.1.1.0 +42b24000 42b3c000 r-xp /usr/lib/libpng12.so.0.50.0 +42b44000 42b5a000 r-xp /lib/libexpat.so.1.5.2 +42b63000 42b6a000 r-xp /usr/lib/libsensord-share.so +42b72000 42bb5000 r-xp /usr/lib/libsndfile.so.1.0.25 +42bc2000 42bcc000 r-xp /usr/lib/libcares.so.2.1.0 +42bd4000 42c02000 r-xp /usr/lib/libidn.so.11.5.44 +42c0a000 42c56000 r-xp /usr/lib/libssl.so.1.0.0 +42c63000 42c65000 r-xp /usr/lib/libXau.so.6.0.0 +42c6d000 42d51000 r-xp /usr/lib/libvorbisenc.so.2.0.6 +42d65000 42d87000 r-xp /usr/lib/libvorbis.so.0.4.3 +42d8f000 42d93000 r-xp /usr/lib/libogg.so.0.7.1 +42d9b000 42da0000 r-xp /usr/lib/bufmgr/libtbm_exynos4412.so.0.0.0 +42daa000 42dae000 r-xp /usr/lib/libcapi-appfw-app-control.so.0.3.1.0 +42db6000 42db8000 r-xp /usr/lib/libcapi-appfw-app-common.so.0.3.1.0 +42dc1000 42dc8000 r-xp /usr/lib/libappsvc.so.0.1.0 +42dd0000 42dd8000 r-xp /usr/lib/libcapi-security-privilege-manager.so.0.0.3 +42de0000 42de2000 r-xp /usr/lib/libiniparser.so.0 +42dec000 42e12000 r-xp /usr/lib/ecore/immodules/libisf-imf-module.so +42e1c000 42eea000 r-xp /usr/lib/libscim-1.0.so.8.2.3 +42f01000 42f1e000 r-xp /usr/lib/libsecurity-server-client.so.1.0.1 +42f27000 42f48000 r-xp /usr/lib/libsecurity-server-commons.so.1.0.0 +42f51000 42f5b000 r-xp /lib/libnss_files-2.13.so +42f64000 42fa4000 r-xp /opt/usr/apps/org.tizen.tbtcoreapp/bin/tbtcoreapp +42fb3000 42fb7000 r-xp /usr/lib/libcapi-appfw-preference.so.0.3.1.0 +42fbf000 42fc5000 r-xp /usr/lib/libcapi-data-control.so.1.2.2.3 +42fcd000 42fd8000 r-xp /usr/lib/libcapi-location-manager.so.0.4.5 +42fe0000 42fed000 r-xp /usr/lib/libcapi-media-camera.so.0.1.77 +42ff6000 43003000 r-xp /usr/lib/libcapi-media-player.so.0.2.1 +4300b000 43011000 r-xp /usr/lib/libcapi-media-recorder.so.0.1.44 +43019000 4301d000 r-xp /usr/lib/libcapi-media-sound-manager.so.0.2.27 +43025000 43051000 r-xp /usr/lib/libcapi-network-bluetooth.so.0.1.53 +43059000 4306b000 r-xp /usr/lib/libcapi-network-nfc.so.0.2.0 +43073000 4307e000 r-xp /usr/lib/libcapi-network-wifi.so.1.0.44 +43086000 4308a000 r-xp /usr/lib/libcapi-system-info.so.0.2.0 +43093000 43096000 r-xp /usr/lib/libcapi-system-runtime-info.so.0.0.3 +4309e000 430a2000 r-xp /usr/lib/libcapi-system-sensor.so.0.1.18 +430ab000 430b3000 r-xp /usr/lib/libcapi-system-system-settings.so.0.0.2 +430b4000 430c8000 r-xp /usr/lib/libefl-extension.so.0.1.0 +430d0000 430d4000 r-xp /usr/lib/libstorage.so.0.1 +430dc000 430ea000 r-xp /usr/lib/libdata-control.so.0.2.3.2 +430f3000 43108000 r-xp /usr/lib/libSLP-location.so.0.9.5 +43111000 43164000 r-xp /usr/lib/libmmfcamcorder.so.0.0.0 +43171000 43177000 r-xp /usr/lib/libcapi-media-tool.so.0.1.1 +4317f000 4321a000 r-xp /usr/lib/libgstreamer-0.10.so.0.30.0 +43226000 4322d000 r-xp /usr/lib/libtbm.so.1.0.0 +43235000 43284000 r-xp /usr/lib/libmmfplayer.so.0.0.0 +4328c000 432a3000 r-xp /usr/lib/libmmfsound.so.0.1.0 +432ac000 432b1000 r-xp /usr/lib/libmmfsession.so.0.0.0 +432b9000 432f2000 r-xp /usr/lib/libbluetooth-api.so.1.0.0 +432fb000 43312000 r-xp /usr/lib/libprivacy-manager-client.so.0.0.6 +4331b000 43345000 r-xp /usr/lib/libnfc.so.1.0.0 +4334e000 43362000 r-xp /usr/lib/libnetwork.so.0.0.0 +4336a000 4337b000 r-xp /usr/lib/libefl-assist.so.0.1.0 +43383000 4343b000 r-xp /usr/lib/libcairo.so.2.11200.14 +43446000 4344c000 r-xp /usr/lib/libcapi-appfw-app-manager.so.0.2.4 +43454000 43461000 r-xp /usr/lib/libgstinterfaces-0.10.so.0.25.0 +4346a000 43473000 r-xp /usr/lib/libgstapp-0.10.so.0.25.0 +4347b000 4349b000 r-xp /usr/lib/libexif.so.12.3.3 +434ae000 434b0000 r-xp /usr/lib/libcamsrcjpegenc.so.0.0.0 +434b8000 434bf000 r-xp /usr/lib/libmmutil_imgp.so.0.0.0 +434c7000 434d1000 r-xp /usr/lib/libaudio-session-mgr.so.0.0.0 +434dd000 434e3000 r-xp /usr/lib/libmmfcommon.so.0.0.0 +434ec000 434f3000 r-xp /usr/lib/libdrm.so.2.4.0 +434fc000 434fe000 r-xp /usr/lib/libdri2.so.0.0.0 +43506000 4350a000 r-xp /usr/lib/libmmfsoundcommon.so.0.0.0 +43512000 43515000 r-xp /usr/lib/libpulse-simple.so.0.0.4 +4351e000 43554000 r-xp /usr/lib/libpulse.so.0.16.2 +4355d000 43563000 r-xp /usr/lib/libcapi-appfw-package-manager.so.0.0.49 +4356b000 43599000 r-xp /usr/lib/libnfc-common-lib.so.1.0.0 +435a5000 435bb000 r-xp /usr/lib/libtts.so +435c4000 435c7000 r-xp /usr/lib/libcapi-media-image-util.so.0.1.3 +435d0000 4370d000 r-xp /usr/lib/driver/libMali.so +4371a000 4371b000 r-xp /usr/lib/libxcb-shm.so.0.0.0 +43724000 43729000 r-xp /usr/lib/libxcb-render.so.0.0.0 +43732000 43758000 r-xp /usr/lib/libpkgmgr-client.so.0.1.68 +43761000 437a4000 r-xp /usr/lib/libgstbase-0.10.so.0.30.0 +437ac000 437b2000 r-xp /usr/lib/libjson.so.0.1.0 +437ba000 43802000 r-xp /usr/lib/pulseaudio/libpulsecommon-4.0.so +43803000 43808000 r-xp /usr/lib/libmmutil_jpeg.so.0.0.0 +43810000 43816000 r-xp /usr/lib/libUMP.so +4381e000 43825000 r-xp /usr/lib/libpkgmgr_installer_client.so.0.1.0 +4382d000 4382f000 r-xp /usr/lib/libpkgmgr_installer_status_broadcast_server.so.0.1.0 +43837000 4383e000 r-xp /usr/lib/libminizip.so.1.0.0 +43a46000 43ab0000 r-xp /usr/lib/evas/modules/engines/gl_x11/linux-gnueabi-armv7l-1.7.99/module.so +43ac0000 43aca000 r-xp /usr/lib/evas/modules/engines/software_generic/linux-gnueabi-armv7l-1.7.99/module.so +43ad4000 442d3000 rwxp [stack:13368] +446c5000 446dc000 r-xp /usr/lib/edje/modules/elm/linux-gnueabi-armv7l-1.0.0/module.so +446e8000 446e9000 r-xp /usr/lib/evas/modules/loaders/eet/linux-gnueabi-armv7l-1.7.99/module.so +44919000 4491b000 r-xp /usr/lib/evas/modules/loaders/png/linux-gnueabi-armv7l-1.7.99/module.so +bee3b000 bee5c000 rwxp [stack] +End of Maps Information + +Callstack Information (PID:13364) +Call Stack Count: 11 + 0: fdatasync + 0x44 (0x40236de4) [/lib/libc.so.6] + 0xbdde4 + 1: (0x400c763d) [/usr/lib/libsqlite3.so.0] + 0x1e63d + 2: (0x400df033) [/usr/lib/libsqlite3.so.0] + 0x36033 + 3: (0x400df893) [/usr/lib/libsqlite3.so.0] + 0x36893 + 4: (0x400dfa7f) [/usr/lib/libsqlite3.so.0] + 0x36a7f + 5: (0x400e06d5) [/usr/lib/libsqlite3.so.0] + 0x376d5 + 6: (0x400fc4b5) [/usr/lib/libsqlite3.so.0] + 0x534b5 + 7: sqlite3_step + 0x1cc (0x400e7d51) [/usr/lib/libsqlite3.so.0] + 0x3ed51 + 8: (0x42fb4be3) [/usr/lib/libcapi-appfw-preference.so.0] + 0x1be3 + 9: preference_set_int + 0x5c (0x42fb5179) [/usr/lib/libcapi-appfw-preference.so.0] + 0x2179 +10: xmlUtil_writeResults + 0x5ae (0x42f9498b) [/opt/usr/apps/org.tizen.tbtcoreapp/bin/tbtcoreapp] + 0x3098b +End of Call Stack + +Package Information +Package Name: org.tizen.tbtcoreapp +Package ID : org.tizen.tbtcoreapp +Version: 1.0.0 +Package Type: rpm +App Name: tbtcoreapp +App ID: org.tizen.tbtcoreapp +Type: capp +Categories: + +Latest Debug Message Information +--------- beginning of /dev/log_main +ef00030) : fail to find given key(mod_56) +01-16 13:21:31.060+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_57) +01-16 13:21:31.060+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_58) +01-16 13:21:31.060+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_59) +01-16 13:21:31.060+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_60) +01-16 13:21:31.065+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_61) +01-16 13:21:31.065+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_62) +01-16 13:21:31.065+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_63) +01-16 13:21:31.065+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_64) +01-16 13:21:31.065+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_65) +01-16 13:21:31.065+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_67) +01-16 13:21:31.065+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_68) +01-16 13:21:31.065+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_69) +01-16 13:21:31.065+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_75) +01-16 13:21:31.065+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_71) +01-16 13:21:31.065+0900 E/CAPI_APPFW_PREFERENCE(13364): preference.c: _read_data(279) > NO_KEY(0xfef00030) : fail to find given key(mod_70) +01-16 13:21:31.065+0900 D/[TBT_CORE]_(13364): tbt_list_init (Line: 1258) > __REPORT Reading report done. +01-16 13:21:31.070+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Feature Summary +01-16 13:21:31.070+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 65 index : 65 +01-16 13:21:31.070+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Runtime Info +01-16 13:21:31.070+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 64 index : 64 +01-16 13:21:31.070+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :EFL/Event +01-16 13:21:31.070+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 60 index : 63 +01-16 13:21:31.070+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :UI Test +01-16 13:21:31.070+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 54 index : 59 +01-16 13:21:31.070+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Animation +01-16 13:21:31.070+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 49 index : 53 +01-16 13:21:31.070+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Sensor +01-16 13:21:31.070+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 42 index : 48 +01-16 13:21:31.075+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/sensor.proximity availability value is 0 +01-16 13:21:31.080+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/sensor.gyroscope availability value is 1 +01-16 13:21:31.085+0900 I/CRASH_POPUP(13367): crash.c: load_crash_process_popup(117) > Popup content: tbtcoreapp has closed unexpectedly. +01-16 13:21:31.095+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/sensor.accelerometer availability value is 1 +01-16 13:21:31.105+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Pick/View +01-16 13:21:31.105+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 40 index : 41 +01-16 13:21:31.105+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Data Control +01-16 13:21:31.105+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 34 index : 39 +01-16 13:21:31.105+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :ImageView +01-16 13:21:31.105+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 30 index : 33 +01-16 13:21:31.110+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Local +01-16 13:21:31.115+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 27 index : 29 +01-16 13:21:31.115+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Input Device +01-16 13:21:31.115+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 24 index : 26 +01-16 13:21:31.115+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Graphics +01-16 13:21:31.115+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 23 index : 23 +01-16 13:21:31.115+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Display +01-16 13:21:31.120+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 22 index : 22 +01-16 13:21:31.120+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.nfc availability value is 0 +01-16 13:21:31.135+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :NFC +01-16 13:21:31.135+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 20 index : 21 +01-16 13:21:31.140+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.nfc availability value is 0 +01-16 13:21:31.145+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.wifi availability value is 0 +01-16 13:21:31.145+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Wifi +01-16 13:21:31.145+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 19 index : 19 +01-16 13:21:31.150+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.bluetooth.hid availability value is 0 +01-16 13:21:31.150+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Bluetooth +01-16 13:21:31.150+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 7 index : 18 +01-16 13:21:31.155+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.bluetooth availability value is 1 +01-16 13:21:31.160+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.bluetooth availability value is 1 +01-16 13:21:31.165+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.bluetooth availability value is 1 +01-16 13:21:31.165+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.bluetooth availability value is 1 +01-16 13:21:31.170+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.bluetooth availability value is 1 +01-16 13:21:31.175+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.bluetooth availability value is 1 +01-16 13:21:31.180+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.bluetooth availability value is 1 +01-16 13:21:31.185+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.bluetooth availability value is 1 +01-16 13:21:31.190+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.bluetooth availability value is 1 +01-16 13:21:31.195+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.bluetooth availability value is 1 +01-16 13:21:31.200+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/network.bluetooth availability value is 1 +01-16 13:21:31.205+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/location.gps availability value is 0 +01-16 13:21:31.205+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :GPS +01-16 13:21:31.205+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 6 index : 6 +01-16 13:21:31.205+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Sound +01-16 13:21:31.205+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 4 index : 5 +01-16 13:21:31.210+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/camera.front availability value is 0 +01-16 13:21:31.215+0900 D/[TBT_CORE]_(13364): tbt_list_item_count (Line: 1322) > Parent :Camera +01-16 13:21:31.215+0900 D/[TBT_CORE]_(13364): _gl_expanded_cb (Line: 401) > Item Count : 0 index : 3 +01-16 13:21:31.220+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/camera.front availability value is 0 +01-16 13:21:31.220+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/camera availability value is 1 +01-16 13:21:31.225+0900 D/[TBT_CORE]_(13364): does_feature_exist (Line: 50) > The feature tizen.org/feature/camera availability value is 1 +01-16 13:21:31.280+0900 D/LAUNCH (13364): appcore-efl.c: __before_loop(1047) > [tbtcoreapp:Application:create:done] +01-16 13:21:31.280+0900 D/APP_CORE(13364): appcore-efl.c: __check_wm_rotation_support(752) > Disable window manager rotation +01-16 13:21:31.285+0900 D/APP_CORE(13364): appcore.c: __aul_handler(423) > [APP 13364] AUL event: AUL_START +01-16 13:21:31.285+0900 D/APP_CORE(13364): appcore-efl.c: __do_app(470) > [APP 13364] Event: RESET State: CREATED +01-16 13:21:31.285+0900 D/APP_CORE(13364): appcore-efl.c: __do_app(496) > [APP 13364] RESET +01-16 13:21:31.285+0900 D/LAUNCH (13364): appcore-efl.c: __do_app(498) > [tbtcoreapp:Application:reset:start] +01-16 13:21:31.285+0900 I/CAPI_APPFW_APPLICATION(13364): app_main.c: _ui_app_appcore_reset(642) > app_appcore_reset +01-16 13:21:31.285+0900 D/[TBT_CORE]_(13364): _app_control (Line: 199) > Operation = http://tizen.org/appcontrol/operation/main +01-16 13:21:31.285+0900 D/[TBT_CORE]_(13364): _app_control (Line: 204) > URI = NULL +01-16 13:21:31.285+0900 D/LAUNCH (13364): appcore-efl.c: __do_app(501) > [tbtcoreapp:Application:reset:done] +01-16 13:21:31.300+0900 I/APP_CORE(13364): appcore-efl.c: __do_app(507) > Legacy lifecycle: 0 +01-16 13:21:31.300+0900 I/APP_CORE(13364): appcore-efl.c: __do_app(509) > [APP 13364] Initial Launching, call the resume_cb +01-16 13:21:31.300+0900 I/CAPI_APPFW_APPLICATION(13364): app_main.c: _ui_app_appcore_resume(624) > app_appcore_resume +01-16 13:21:31.300+0900 D/[TBT_CORE]_(13364): _app_resume_cb (Line: 134) > INside main resume cb +01-16 13:21:31.300+0900 D/APP_CORE(13364): appcore.c: __aul_handler(426) > [SECURE_LOG] caller_appid : org.tizen.w-home +01-16 13:21:31.310+0900 D/APP_CORE(13364): appcore-efl.c: __show_cb(826) > [EVENT_TEST][EVENT] GET SHOW EVENT!!!. WIN:2400003 +01-16 13:21:31.310+0900 D/APP_CORE(13364): appcore-efl.c: __add_win(672) > [EVENT_TEST][EVENT] __add_win WIN:2400003 +01-16 13:21:31.335+0900 E/MALI (13364): gfx_bo_dri2_priv.c: gfx_bo_dri2_priv_reset(79) > [13364|13364] gfx_bo_dri2_priv_reset(79) error. '!o->mem_info_cache[i].bh_dev_mem'  +01-16 13:21:31.385+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: groupindex +01-16 13:21:31.385+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: groupindex +01-16 13:21:31.385+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.icon +01-16 13:21:31.390+0900 D/APP_CORE( 428): appcore-efl.c: __update_win(718) > [EVENT_TEST][EVENT] __update_win WIN:1800007 fully_obscured 1 +01-16 13:21:31.390+0900 D/APP_CORE( 428): appcore-efl.c: __visibility_cb(884) > bvisibility 0, b_active 1 +01-16 13:21:31.390+0900 D/APP_CORE( 428): appcore-efl.c: __visibility_cb(898) > Go to Pasue state +01-16 13:21:31.390+0900 D/APP_CORE( 428): appcore-efl.c: __do_app(470) > [APP 428] Event: PAUSE State: RUNNING +01-16 13:21:31.390+0900 D/APP_CORE( 428): appcore-efl.c: __do_app(538) > [APP 428] PAUSE +01-16 13:21:31.390+0900 I/CAPI_APPFW_APPLICATION( 428): app_main.c: _ui_app_appcore_pause(607) > app_appcore_pause +01-16 13:21:31.390+0900 D/W_HOME ( 428): main.c: _pause_cb(601) > Paused +01-16 13:21:31.390+0900 E/W_HOME ( 428): main.c: _pause_cb(604) > paused already +01-16 13:21:31.390+0900 D/APP_CORE( 428): appcore-efl.c: __trm_app_info_send_socket(230) > __trm_app_info_send_socket +01-16 13:21:31.390+0900 E/APP_CORE( 428): appcore-efl.c: __trm_app_info_send_socket(233) > access +01-16 13:21:31.395+0900 D/RESOURCED( 227): proc-monitor.c: proc_dbus_proc_signal_handler(198) > [proc_dbus_proc_signal_handler,198] call proc_dbus_proc_signal_handler : pid = 428, type = 2 +01-16 13:21:31.400+0900 D/AUL_AMD ( 301): amd_launch.c: __e17_status_handler(1911) > pid(13364) status(3) +01-16 13:21:31.400+0900 D/RESOURCED( 227): proc-monitor.c: proc_dbus_proc_signal_handler(198) > [proc_dbus_proc_signal_handler,198] call proc_dbus_proc_signal_handler : pid = 13364, type = 0 +01-16 13:21:31.400+0900 D/RESOURCED( 227): proc-main.c: resourced_proc_status_change(555) > [SECURE_LOG] [resourced_proc_status_change,555] set foreground : 13364 +01-16 13:21:31.400+0900 I/RESOURCED( 227): lowmem-handler.c: lowmem_move_memcgroup(1186) > [lowmem_move_memcgroup,1186] buf : /sys/fs/cgroup/memory/foreground/cgroup.procs, pid : 13364, oom : 200 +01-16 13:21:31.400+0900 E/RESOURCED( 227): lowmem-handler.c: lowmem_move_memcgroup(1189) > [lowmem_move_memcgroup,1189] /sys/fs/cgroup/memory/foreground/cgroup.procs open failed +01-16 13:21:31.420+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: default +01-16 13:21:31.420+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.icon +01-16 13:21:31.420+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.420+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 317) > hoho I m here!!! +01-16 13:21:31.425+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.end +01-16 13:21:31.435+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.435+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.center_check +01-16 13:21:31.435+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.455+0900 D/LAUNCH (13367): appcore-efl.c: __do_app(501) > [crash-popup:Application:reset:done] +01-16 13:21:31.465+0900 D/APP_CORE(13364): appcore.c: __prt_ltime(183) > [APP 13364] first idle after reset: 1221 msec +01-16 13:21:31.470+0900 D/AUL_AMD ( 301): amd_launch.c: __grab_timeout_handler(1212) > pid(13364) ecore_x_pointer_ungrab +01-16 13:21:31.470+0900 D/AUL_AMD ( 301): amd_request.c: __add_history_handler(247) > [SECURE_LOG] add rua history org.tizen.tbtcoreapp /opt/usr/apps/org.tizen.tbtcoreapp/bin/tbtcoreapp +01-16 13:21:31.470+0900 D/RUA ( 301): rua.c: rua_add_history(179) > rua_add_history start +01-16 13:21:31.480+0900 D/RUA ( 301): rua.c: rua_add_history(247) > rua_add_history ok +01-16 13:21:31.480+0900 D/APP_CORE(13364): appcore-efl.c: __update_win(718) > [EVENT_TEST][EVENT] __update_win WIN:2400003 fully_obscured 0 +01-16 13:21:31.480+0900 D/APP_CORE(13364): appcore-efl.c: __visibility_cb(884) > bvisibility 1, b_active -1 +01-16 13:21:31.480+0900 D/APP_CORE(13364): appcore-efl.c: __visibility_cb(887) > Go to Resume state +01-16 13:21:31.480+0900 D/APP_CORE(13364): appcore-efl.c: __do_app(470) > [APP 13364] Event: RESUME State: RUNNING +01-16 13:21:31.480+0900 D/LAUNCH (13364): appcore-efl.c: __do_app(557) > [tbtcoreapp:Application:resume:start] +01-16 13:21:31.480+0900 D/LAUNCH (13364): appcore-efl.c: __do_app(567) > [tbtcoreapp:Application:resume:done] +01-16 13:21:31.480+0900 D/LAUNCH (13364): appcore-efl.c: __do_app(569) > [tbtcoreapp:Application:Launching:done] +01-16 13:21:31.480+0900 D/APP_CORE(13364): appcore-efl.c: __trm_app_info_send_socket(230) > __trm_app_info_send_socket +01-16 13:21:31.480+0900 E/APP_CORE(13364): appcore-efl.c: __trm_app_info_send_socket(233) > access +01-16 13:21:31.490+0900 I/APP_CORE(13367): appcore-efl.c: __do_app(507) > Legacy lifecycle: 0 +01-16 13:21:31.500+0900 I/APP_CORE(13367): appcore-efl.c: __do_app(509) > [APP 13367] Initial Launching, call the resume_cb +01-16 13:21:31.500+0900 D/APP_CORE(13367): appcore.c: __aul_handler(426) > [SECURE_LOG] caller_appid : (null) +01-16 13:21:31.505+0900 D/APP_CORE(13367): appcore-efl.c: __show_cb(826) > [EVENT_TEST][EVENT] GET SHOW EVENT!!!. WIN:2600006 +01-16 13:21:31.505+0900 D/APP_CORE(13367): appcore-efl.c: __add_win(672) > [EVENT_TEST][EVENT] __add_win WIN:2600006 +01-16 13:21:31.555+0900 D/APP_CORE(13367): appcore.c: __prt_ltime(183) > [APP 13367] first idle after reset: 1105 msec +01-16 13:21:31.590+0900 D/APP_CORE(13367): appcore-efl.c: __update_win(718) > [EVENT_TEST][EVENT] __update_win WIN:2600006 fully_obscured 0 +01-16 13:21:31.590+0900 D/APP_CORE(13367): appcore-efl.c: __visibility_cb(884) > bvisibility 1, b_active -1 +01-16 13:21:31.590+0900 D/APP_CORE(13367): appcore-efl.c: __visibility_cb(887) > Go to Resume state +01-16 13:21:31.590+0900 D/APP_CORE(13367): appcore-efl.c: __do_app(470) > [APP 13367] Event: RESUME State: RUNNING +01-16 13:21:31.590+0900 D/LAUNCH (13367): appcore-efl.c: __do_app(557) > [crash-popup:Application:resume:start] +01-16 13:21:31.590+0900 D/LAUNCH (13367): appcore-efl.c: __do_app(567) > [crash-popup:Application:resume:done] +01-16 13:21:31.590+0900 D/LAUNCH (13367): appcore-efl.c: __do_app(569) > [crash-popup:Application:Launching:done] +01-16 13:21:31.590+0900 D/APP_CORE(13367): appcore-efl.c: __trm_app_info_send_socket(230) > __trm_app_info_send_socket +01-16 13:21:31.590+0900 E/APP_CORE(13367): appcore-efl.c: __trm_app_info_send_socket(233) > access +01-16 13:21:31.600+0900 D/AUL_AMD ( 301): amd_launch.c: __e17_status_handler(1911) > pid(13367) status(3) +01-16 13:21:31.600+0900 D/RESOURCED( 227): proc-monitor.c: proc_dbus_proc_signal_handler(198) > [proc_dbus_proc_signal_handler,198] call proc_dbus_proc_signal_handler : pid = 13367, type = 0 +01-16 13:21:31.600+0900 D/RESOURCED( 227): proc-main.c: resourced_proc_status_change(555) > [SECURE_LOG] [resourced_proc_status_change,555] set foreground : 13367 +01-16 13:21:31.600+0900 E/RESOURCED( 227): proc-main.c: proc_update_process_state(233) > [proc_update_process_state,233] Current pid (13367) didn't have any process list +01-16 13:21:31.600+0900 D/RESOURCED( 227): cpu.c: cpu_foreground_state(92) > [cpu_foreground_state,92] cpu_foreground_state : pid = 13367, appname = (null) +01-16 13:21:31.600+0900 D/RESOURCED( 227): cgroup.c: cgroup_write_node(91) > [SECURE_LOG] [cgroup_write_node,91] cgroup_buf /sys/fs/cgroup/cpu/cgroup.procs, value 13367 +01-16 13:21:31.610+0900 D/AUL_AMD ( 301): amd_request.c: __add_history_handler(247) > [SECURE_LOG] add rua history org.tizen.crash-popup /usr/apps/org.tizen.crash-popup/bin/crash-popup +01-16 13:21:31.610+0900 D/RUA ( 301): rua.c: rua_add_history(179) > rua_add_history start +01-16 13:21:31.785+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: groupindex +01-16 13:21:31.790+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: groupindex +01-16 13:21:31.790+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.icon +01-16 13:21:31.790+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: default +01-16 13:21:31.790+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.icon +01-16 13:21:31.790+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.790+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 317) > hoho I m here!!! +01-16 13:21:31.790+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.end +01-16 13:21:31.790+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.790+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.center_check +01-16 13:21:31.790+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.795+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: default +01-16 13:21:31.795+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.icon +01-16 13:21:31.795+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.795+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 317) > hoho I m here!!! +01-16 13:21:31.795+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.end +01-16 13:21:31.805+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.805+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.center_check +01-16 13:21:31.805+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.810+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: default +01-16 13:21:31.830+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.icon +01-16 13:21:31.835+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.835+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 317) > hoho I m here!!! +01-16 13:21:31.835+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.end +01-16 13:21:31.855+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.855+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.center_check +01-16 13:21:31.860+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.860+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: default +01-16 13:21:31.905+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.icon +01-16 13:21:31.925+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.925+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 317) > hoho I m here!!! +01-16 13:21:31.930+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.end +01-16 13:21:31.960+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.965+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.center_check +01-16 13:21:31.970+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:31.970+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: groupindex +01-16 13:21:31.985+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: groupindex +01-16 13:21:32.030+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.icon +01-16 13:21:32.050+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: default +01-16 13:21:32.050+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.icon +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 317) > hoho I m here!!! +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.end +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.center_check +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: default +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.icon +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 317) > hoho I m here!!! +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.end +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.center_check +01-16 13:21:32.055+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.060+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: groupindex +01-16 13:21:32.060+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: groupindex +01-16 13:21:32.060+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.icon +01-16 13:21:32.080+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: groupindex +01-16 13:21:32.080+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: groupindex +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.icon +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: default +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.icon +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 317) > hoho I m here!!! +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.end +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.center_check +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: default +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.icon +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.085+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 317) > hoho I m here!!! +01-16 13:21:32.090+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.end +01-16 13:21:32.090+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.090+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.center_check +01-16 13:21:32.090+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.090+0900 D/[TBT_CORE]_(13364): _gl_text_get_cb (Line: 270) > ITEM STYLE: default +01-16 13:21:32.090+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.icon +01-16 13:21:32.090+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.090+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 317) > hoho I m here!!! +01-16 13:21:32.090+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.end +01-16 13:21:32.090+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.090+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 308) > hoho PART NAME: elm.swallow.center_check +01-16 13:21:32.090+0900 D/[TBT_CORE]_(13364): _gl_content_get_cb (Line: 312) > hoho almost I m here!!! +01-16 13:21:32.650+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:36.470+0900 D/APP_CORE( 428): appcore-efl.c: __do_app(470) > [APP 428] Event: MEM_FLUSH State: PAUSED +01-16 13:21:36.635+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:36.640+0900 I/GESTURE ( 213): gesture.c: GestureRecognize_GroupTap(734) > [GroupTap][F] num_pressed(=0) != prev_num_pressed(=0) OR 0 finger tap event was not grabbed/selected ! +01-16 13:21:36.650+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:36.650+0900 I/GESTURE ( 213): gesture.c: GestureRecognize_GroupTap(734) > [GroupTap][F] num_pressed(=0) != prev_num_pressed(=0) OR 0 finger tap event was not grabbed/selected ! +01-16 13:21:36.665+0900 I/GESTURE ( 213): gesture.c: GestureRecognize_GroupTap(734) > [GroupTap][F] num_pressed(=0) != prev_num_pressed(=0) OR 0 finger tap event was not grabbed/selected ! +01-16 13:21:36.665+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:36.665+0900 I/GESTURE ( 213): gesture.c: GestureRecognize_GroupTap(734) > [GroupTap][F] num_pressed(=0) != prev_num_pressed(=0) OR 0 finger tap event was not grabbed/selected ! +01-16 13:21:36.675+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:36.675+0900 I/GESTURE ( 213): gesture.c: GestureRecognize_GroupTap(734) > [GroupTap][F] num_pressed(=0) != prev_num_pressed(=0) OR 0 finger tap event was not grabbed/selected ! +01-16 13:21:36.685+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:36.685+0900 I/GESTURE ( 213): gesture.c: GestureRecognize_GroupTap(734) > [GroupTap][F] num_pressed(=0) != prev_num_pressed(=0) OR 0 finger tap event was not grabbed/selected ! +01-16 13:21:36.690+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:36.695+0900 I/GESTURE ( 213): gesture.c: GestureRecognize_GroupTap(734) > [GroupTap][F] num_pressed(=0) != prev_num_pressed(=0) OR 0 finger tap event was not grabbed/selected ! +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18041808 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18045753 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18045754 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18045754 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18045756 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18045757 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18045759 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18045759 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18045760 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18045761 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18045761 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18045768 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18045770 button=1 +01-16 13:21:36.700+0900 D/EFL (13367): ecore_x<13367> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18045770 button=1 +01-16 13:21:36.710+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc00980 +01-16 13:21:36.720+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc00980 +01-16 13:21:36.725+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc00980 +01-16 13:21:36.735+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc00980 +01-16 13:21:36.735+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc00980 +01-16 13:21:36.735+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc00980 +01-16 13:21:36.735+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc00980 +01-16 13:21:36.935+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_wininfo_del(141) > [PROCESSMGR] delete anr_trigger_timer! +01-16 13:21:37.000+0900 E/MALI (13364): gfx_bo_dri2_priv.c: gfx_bo_dri2_priv_reset(79) > [13364|13364] gfx_bo_dri2_priv_reset(79) error. '!o->mem_info_cache[i].bh_dev_mem'  +01-16 13:21:37.140+0900 D/RUA ( 301): rua.c: rua_add_history(247) > rua_add_history ok +01-16 13:21:37.480+0900 I/AUL_PAD ( 346): sigchild.h: __launchpad_sig_child(142) > dead_pid = 13367 pgid = 13367 +01-16 13:21:37.480+0900 I/AUL_PAD ( 346): sigchild.h: __sigchild_action(123) > dead_pid(13367) +01-16 13:21:37.480+0900 D/AUL_PAD ( 346): sigchild.h: __send_app_dead_signal(81) > send dead signal done +01-16 13:21:37.480+0900 I/AUL_PAD ( 346): sigchild.h: __sigchild_action(129) > __send_app_dead_signal(0) +01-16 13:21:37.480+0900 I/AUL_PAD ( 346): sigchild.h: __launchpad_sig_child(150) > after __sigchild_action +01-16 13:21:37.520+0900 D/STARTER ( 355): starter_w.c: _w_app_dead_cb(183) > [STARTER/home/abuild/rpmbuild/BUILD/starter-0.5.52/src/starter_w.c:183:D] app dead cb call! (pid : 13367) +01-16 13:21:37.525+0900 I/AUL_AMD ( 301): amd_main.c: __app_dead_handler(262) > __app_dead_handler, pid: 13367 +01-16 13:21:37.525+0900 D/AUL_AMD ( 301): amd_key.c: _unregister_key_event(161) > ===key stack=== +01-16 13:21:37.525+0900 D/AUL ( 301): simple_util.c: __trm_app_info_send_socket(261) > __trm_app_info_send_socket +01-16 13:21:37.525+0900 E/AUL ( 301): simple_util.c: __trm_app_info_send_socket(264) > access +01-16 13:21:37.590+0900 D/W_HOME ( 428): main.c: _dead_cb(543) > PID(13367) is dead +01-16 13:21:37.590+0900 E/W_HOME ( 428): clock_shortcut.c: _shortcut_icon_owner_get(190) > (icon == NULL) -> _shortcut_icon_owner_get() return +01-16 13:21:38.015+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:40.130+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping_confirm_handler(349) > [PROCESSMGR] last_pointed_win=0xc001e8 bd->visible=0 +01-16 13:21:45.230+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:45.245+0900 I/GESTURE ( 213): gesture.c: GestureRecognize_GroupTap(734) > [GroupTap][F] num_pressed(=0) != prev_num_pressed(=0) OR 0 finger tap event was not grabbed/selected ! +01-16 13:21:45.245+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:45.265+0900 I/GESTURE ( 213): gesture.c: GestureRecognize_GroupTap(734) > [GroupTap][F] num_pressed(=0) != prev_num_pressed(=0) OR 0 finger tap event was not grabbed/selected ! +01-16 13:21:45.810+0900 I/GESTURE ( 213): gesture.c: GestureRecognize(2368) > [BackKey][F] Press touch outside 40 pixel area from upper vezel. +01-16 13:21:45.815+0900 I/GESTURE ( 213): gesture.c: GestureRecognize_GroupTap(734) > [GroupTap][F] num_pressed(=0) != prev_num_pressed(=0) OR 0 finger tap event was not grabbed/selected ! +01-16 13:21:45.820+0900 I/GESTURE ( 213): gesture.c: GestureRecognize_GroupTap(734) > [GroupTap][F] num_pressed(=0) != prev_num_pressed(=0) OR 0 finger tap event was not grabbed/selected ! +01-16 13:21:45.830+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc00971 +01-16 13:21:45.830+0900 D/EFL (13364): ecore_x<13364> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18047169 button=1 +01-16 13:21:45.830+0900 D/EFL (13364): ecore_x<13364> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18054314 button=1 +01-16 13:21:45.830+0900 D/EFL (13364): ecore_x<13364> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18054314 button=1 +01-16 13:21:45.830+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc00971 +01-16 13:21:45.830+0900 D/EFL (13364): ecore_x<13364> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18054318 button=1 +01-16 13:21:45.830+0900 D/EFL (13364): ecore_x<13364> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18054319 button=1 +01-16 13:21:45.830+0900 D/EFL (13364): ecore_x<13364> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18054358 button=1 +01-16 13:21:45.830+0900 D/EFL (13364): ecore_x<13364> ecore_x_events.c:531 _ecore_x_event_handle_button_press() ButtonEvent:press time=18054358 button=1 +01-16 13:21:45.830+0900 D/EFL (13364): ecore_x<13364> ecore_x_events.c:683 _ecore_x_event_handle_button_release() ButtonEvent:release time=18054360 button=1 +01-16 13:21:45.835+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc00971 +01-16 13:21:45.835+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping(489) > [PROCESSMGR] ev_win=0xc00034 register trigger_timer! pointed_win=0xc00971 +01-16 13:21:45.965+0900 D/[TBT_CORE]_(13364): tbt_save_report (Line: 1263) > __REPORT Going to Write +01-16 13:21:45.975+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 53) > 1 +01-16 13:21:45.985+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 0 Capture +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 1 Record +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 2 Face Detection +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 3 Camera HDR Capture +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 4 Audio +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 5 Volume +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 6 GPS +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 7 Client Paired +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 8 Server Paired +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 9 OPP Server +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 10 OPP Client +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 11 Handsfree +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 12 Audio Connect +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 13 Authorization +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 14 Bluetooth Profiles +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 15 Bluetooth SDP +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 16 Client Socket +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 17 Server Socket +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 18 HID Connect +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 19 Wifi +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 20 NFC Tag +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 21 NFC P2P +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 22 Display Info +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 23 Graphics +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 24 Number Keypad +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 25 Phone Number Keypad +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 26 IP Keypad +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 27 Mpeg4 Video +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 28 H263 Video +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 29 H264 Video +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 30 ImageView JPEG +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 31 ImageView BMP +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 32 ImageView GIF +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 33 ImageView PNG +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 34 SQL Insert +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 35 SQL Delete +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 36 SQL Update +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 37 SQL Select +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 38 SQL Cursor +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 39 SQL Map +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 40 Operation View +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 41 Operation Pick +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 42 Accelerometer +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 43 Gyroscope +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 44 Proximity +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 45 Light +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 46 Ultraviolet +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 47 Pressure +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 48 Magneotmeter +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 49 Fade Animation +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 50 Point Animation +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 51 Dimension Animation +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 52 Rectangle Animation +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 53 Rotate Animation +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 54 Resize Drawable +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 55 Shape +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 56 Rotate +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 57 Font +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 58 Line Drawable +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 59 Alpha Drawable +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 60 Touch +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 61 Mock Event +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 62 Event View +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 63 EFL Callback +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 64 Runtime Info +01-16 13:21:45.995+0900 D/[TBT_CORE]_(13364): xmlUtil_writeResults (Line: 87) > 3 65 HW-SW Feature Summary +01-16 13:21:46.835+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping_begin_handler(428) > [PROCESSMGR] ecore_x_netwm_ping_send to the client_win=0x2400003 +01-16 13:21:56.845+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping_confirm_handler(349) > [PROCESSMGR] last_pointed_win=0xc00971 bd->visible=1 +01-16 13:21:56.845+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping_confirm_handler(359) > [PROCESSMGR] pointed_win=0xc00971 cwin=0xc00971 +01-16 13:21:56.845+0900 D/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_anr_ping_confirm_handler(362) > [PROCESSMGR] pointed_win=0xc00971 is not response! +01-16 13:21:56.845+0900 E/PROCESSMGR( 317): e_mod_processmgr.c: _e_mod_processmgr_dbus_msg_send(297) > [PROCESSMGR] pointed_win=0x2400003 Send kill command to the ResourceD! PID=13364 Name=tbtcoreapp +01-16 13:21:56.860+0900 E/RESOURCED( 227): proc-monitor.c: proc_dbus_watchdog_handler(403) > [proc_dbus_watchdog_handler,403] Receive watchdog signal to pid: 13364(tbtcoreapp) +01-16 13:21:56.865+0900 E/RESOURCED( 227): proc-monitor.c: proc_dbus_watchdog_handler(411) > [proc_dbus_watchdog_handler,411] just kill watchdog process when debug enabled pid: 13364(tbtcoreapp) +01-16 13:22:00.070+0900 E/CAPI_APPFW_PREFERENCE( 445): preference.c: _initialize(81) > IO_ERROR(0xfffffffb) : fail to open db(unable to open database file) +01-16 13:22:00.070+0900 E/CAPI_APPFW_PREFERENCE( 445): preference.c: _read_data(254) > IO_ERROR(0xfffffffb) : fail to initialize db +01-16 13:22:00.070+0900 E/CAPI_APPFW_PREFERENCE( 445): preference.c: _initialize(81) > IO_ERROR(0xfffffffb) : fail to open db(unable to open database file) +01-16 13:22:00.075+0900 E/CAPI_APPFW_PREFERENCE( 445): preference.c: _read_data(254) > IO_ERROR(0xfffffffb) : fail to initialize db +01-16 13:22:00.075+0900 D/IDLE-CLOCK-DIGITAL( 445): clock_view.c: clock_view_set_info_time(849) > show_date:1 +01-16 13:22:00.075+0900 D/IDLE-CLOCK-DIGITAL( 445): clock_view.c: _get_formatted_date_from_utc_time(678) > [SECURE_LOG] date:(10)[Wed 16 Jan][1358310120] +01-16 13:22:00.185+0900 D/IDLE-CLOCK-DIGITAL( 445): clock_view.c: clock_view_set_info_time(857) > +01-16 13:22:00.185+0900 D/IDLE-CLOCK-DIGITAL( 445): clock_view.c: _get_formatted_ampm_from_utc_time(715) > [SECURE_LOG] ampm:(2)[PM][1358310120] +01-16 13:22:00.185+0900 D/IDLE-CLOCK-DIGITAL( 445): clock_view.c: _get_formatted_time_from_utc_time(756) > [SECURE_LOG] time:(4)[1:22][1358310120] +01-16 13:22:00.185+0900 D/IDLE-CLOCK-DIGITAL( 445): clock_view.c: clock_view_set_info_time(871) > utc_time=1:22, utc_ampm=[2]PM +01-16 13:22:00.185+0900 D/IDLE-CLOCK-DIGITAL( 445): clock_view.c: clock_view_set_info_time(891) > time_str=1:22 PM +01-16 13:22:06.395+0900 W/CRASH_MANAGER(13341): worker.c: worker_job(1189) > 0613364746274135831012 diff --git a/tbtcoreapp/inc/main-app.h b/tbtcoreapp/inc/main-app.h new file mode 100644 index 0000000..7996121 --- /dev/null +++ b/tbtcoreapp/inc/main-app.h @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +#ifndef __MAIN_APP_H__ +#define __MAIN_APP_H__ + +typedef struct _app_data app_data; + +/** + * @brief Create application instance + * @since_tizen 2.3 + * @return Application instance on success, otherwise NULL + */ +app_data *app_create(); + +/** + * @brief Destroy application instance + * @since_tizen 2.3 + * @param[in] app Application instance + */ +void app_destroy(app_data *app); + +/** + * @brief Run Tizen application + * @since_tizen 2.3 + * @param[in] app Application instance + * @param[in] argc argc parameter received in main + * @param[in] argv argv parameter received in main + */ +int app_run(app_data *app, int argc, char **argv); + +#endif /* __MAIN_APP_H__ */ diff --git a/tbtcoreapp/inc/model/tbt-info.h b/tbtcoreapp/inc/model/tbt-info.h new file mode 100644 index 0000000..90115d2 --- /dev/null +++ b/tbtcoreapp/inc/model/tbt-info.h @@ -0,0 +1,334 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file tbt-info.h + * @brief This file provides the basic structure of all modules. + * @since_tizen 2.3 + * @author Amlan Chowdhury (amlan.c@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ +#ifndef __TBT_INFO_H__ +#define __TBT_INFO_H__ + +#include +#include + +typedef struct _tbt_info tbt_info; + +typedef enum{ + TBT_INFO_RESULT_NOT_TESTED=0, + TBT_INFO_RESULT_PASS=1, + TBT_INFO_RESULT_FAIL=2, + TBT_INFO_RESULT_NOT_SUPPORTED=3 +} tbt_info_result; + +/** + * @brief main Item for tbt list + * @since_tizen 2.3 + */ +typedef enum { + TBT_APP_CAMERA_CAPTURE = 0, + TBT_APP_CAMERA_RECORD, + TBT_APP_CAMERA_FACE_DETECT, + TBT_APP_CAMERA_HDR_CAPTURE, + + TBT_APP_SOUND_AUDIO, + TBT_APP_SOUND_VOLUME, + + TBT_APP_GPS_GPS, + + TBT_APP_BT_CLIENT_PAIRED, + TBT_APP_BT_SERVER_PAIRED, + TBT_APP_BT_AUDIO_CONNECT, + TBT_APP_BT_AUDIO_CONNECT_HANDSFREE, + TBT_APP_BT_AUTHORIZATION, + TBT_APP_BT_OPP_CLIENT, + TBT_APP_BT_OPP_SERVER, + TBT_APP_BT_PROFILES, + TBT_APP_BT_SDP, + TBT_APP_BT_SERVER_SOCKET, + TBT_APP_BT_CLIENT_SOCKET, + TBT_APP_BT_HID_CONNECT, + TBT_APP_BT_OOB_PERIPHERAL, + TBT_APP_BT_OOB_DEVICE, + TBT_APP_BT_AVRCP, + TBT_APP_BT_AG, + TBT_APP_BT_HDP, + + TBT_APP_BLE_GATT_CLIENT, + + + TBT_APP_WIFIDIRECT, + TBT_APP_WIFIDIRECT_CONNECTION_CANCEL, + + TBT_APP_WIFI_WIFI, + + TBT_APP_NFC_P2P, + TBT_APP_NFC_TAG, + + TBT_APP_DISPLAY_DISPLAY, + + TBT_APP_GRAPHICS_GRAPHICS, + + TBT_APP_IDEV_NUM_KEYPAD, + TBT_APP_IDEV_PH_NUM_KEYPAD, + TBT_APP_IDEV_IP_KEYPAD, + + TBT_APP_LOCAL_MPEG4, + TBT_APP_LOCAL_H263, + TBT_APP_LOCAL_H264, + + TBT_APP_IMAGEVIEW_JPEG, + TBT_APP_IMAGEVIEW_BMP, + TBT_APP_IMAGEVIEW_GIF, + TBT_APP_IMAGEVIEW_PNG, + + TBT_APP_DC_INSERT, + TBT_APP_DC_DELETE, + TBT_APP_DC_UPDATE, + TBT_APP_DC_SELECT, + TBT_APP_DC_CURSOR, + TBT_APP_DC_MAP, + + TBT_APP_PICK_VIEW_APP, + TBT_APP_PICK_PICK_APP, + + TBT_APP_SENSOR_ACCELEROMETER, + TBT_APP_SENSOR_GYROSCOPE, + TBT_APP_SENSOR_PROXIMITY, + TBT_APP_SENSOR_LIGHT, + TBT_APP_SENSOR_ULTRA_VIOLET, + TBT_APP_SENSOR_MAGNATOMETER, + TBT_APP_SENSOR_PRESSURE, + + + TBT_APP_ANIMATION_FADE, + TBT_APP_ANIMATION_POINT, + TBT_APP_ANIMATION_DIMENSION, + TBT_APP_ANIMATION_RECT, + TBT_APP_ANIMATION_ROTATE, + + TBT_APP_UI_RESIZE, + TBT_APP_UI_SHAPE, + TBT_APP_UI_ROTATE, + TBT_APP_UI_FONT, + TBT_APP_UI_LINE, + TBT_APP_UI_ALPHA, + + TBT_APP_SL_SCREENLOCK, + + TBT_APP_TOUCH_TOUCH, + + TBT_APP_MOCK, + TBT_APP_EVENT_VIEW, + + TBT_APP_FEATURE_SUMMARY, + + TBT_APP_RUNTIME_INFO, + + TBT_APP_OAUTH2, + + TBT_APP_PUSH_SERVICE, + + TBT_APP_MAX, + + TBT_APP_EFL_CALLBACK, + + TBT_APP_SHORTCUT, + + TBT_APP_IME_ALPHABATIC, + + TBT_APP_IME_NUMERIC, + + TBT_APP_IME_EVENT, + + TBT_APP_IME_CONTEXT_GET, + + TBT_APP_WIDGET + +} tbt_app_type_e; + + +/** + * @brief Measurement units for sensors + * @since_tizen 2.3 + */ +typedef enum { + SENSOR_UNIT_METRE_PER_SECOND_SQUARED, + SENSOR_UNIT_MICRO_TESLA, + SENSOR_UNIT_DEGREE, + SENSOR_UNIT_LUX, + SENSOR_UNIT_CENTIMETER, + SENSOR_UNIT_DEGREE_PER_SECOND, + SENSOR_UNIT_HECTOPASCAL, + SENSOR_UNIT_MAX +} sensor_unit_e; + + + +/** + * @brief Extra value getter function + * @since_tizen 2.3 + * @param[in] info Sensor info + * @param[in] values Values received from the sensor + * @return Calculated value + */ +typedef float (*sensor_extra_value_get_cb)(const tbt_info *info, const float *values); + +/** + * @brief Extra value associated with the sensor + * @since_tizen 2.3 + * @details Allows to add value which is not received from the sensor, + * but instead calculated based on sensor values + */ +typedef struct _sensor_extra_value +{ + const char *name; /**< Value name */ + const char *format; /**< Value printf() format for text representation */ + sensor_extra_value_get_cb value_get; /**< Value getter function */ +} sensor_extra_value; + +/** + * @brief Module metadata + * @since_tizen 2.3 + */ +struct _tbt_info +{ + + const char *name; //tbt display name + const char *parent; //tbt display name + tbt_app_type_e apptype; //Values measurement units + tbt_info_result result; //app status: pass or fail + const char *info; //Values measurement units string representation + const char *icon_name; //Values measurement units string representation + const char *file_name; //Values measurement units string representation + const char *extra_file_name; + const char *layout_file; //Values measurement units string representation + const char *layout_group; //Values measurement units string representation + sensor_h sensor; /**< Sensor handle */ + sensor_type_e sensortype; /**< Sensor type, @see sensor_type_e */ + sensor_unit_e units; /**< Values measurement units */ + int sensor_response_interval; + const char **value_names; /**< Value names array of value_count size */ + int value_count; /**< Values count */ + float value_min; /**< Minimal value */ + float value_max; /**< Maximal value */ + float value_range; /**< Values range */ + const char *units_str; /**< Values measurement units string representation */ + const char *value_format; /**< Values printf() format for text representation */ + int axes[3]; /**< Sensor axes directions relative to screen coordinate system */ + sensor_extra_value *extra_values; /**< Sensor variable to retrieve the sensor extra values */ + int extra_value_count; /**< The count of the extra values */ + bool is_push_from_outside; /**< Checks if push data is received or not */ + char* push_operation_id; /**< Operation id of push data */ + app_control_h push_app_control; /**< App conrol handler*/ + int required_features_count; /**< Number of features required */ + int features_required[16]; /**< Index/indexs of features required */ + +}; + +/** + * @brief Feature List + * @since_tizen 2.3 + */ +static char *feature_list[1024] = +{ + "tizen.org/feature/camera", + "tizen.org/feature/camera.back", + "tizen.org/feature/camera.back.flash", + "tizen.org/feature/camera.front", + "tizen.org/feature/camera.front.flash", + "tizen.org/feature/database.encryption", + "tizen.org/feature/fmradio", + "tizen.org/feature/graphics.acceleration", + "tizen.org/feature/input.keyboard", + "tizen.org/feature/input.keyboard.layout", + "tizen.org/feature/location", + "tizen.org/feature/location.gps", + "tizen.org/feature/location.wps", + "tizen.org/feature/microphone", + "tizen.org/feature/multi_point_touch.point_count", + "tizen.org/feature/multi_point_touch.pinch_zoom", + "tizen.org/feature/network.bluetooth", + "tizen.org/feature/network.nfc", + "tizen.org/feature/network.nfc.reserved_push", + "tizen.org/feature/network.push", + "tizen.org/feature/network.secure_element", + "tizen.org/feature/network.telephony", + "tizen.org/feature/network.telephony.mms", + "tizen.org/feature/network.telephony.sms.cbs", + "tizen.org/feature/network.wifi", + "tizen.org/feature/network.wifi.direct", + "tizen.org/feature/opengles.texture_format.3dc", + "tizen.org/feature/opengles.texture_format.atc", + "tizen.org/feature/opengles.texture_format.etc", + "tizen.org/feature/opengles.texture_format.ptc", + "tizen.org/feature/opengles.texture_format.pvrtc", + "tizen.org/feature/opengles.texture_format.utc", + "tizen.org/feature/opengles.version.1_1", + "tizen.org/feature/opengles.version.2_0", + "tizen.org/feature/platform.core.cpu.arch.armv7", + "tizen.org/feature/platform.core.fpu.arch.sse2", + "tizen.org/feature/platform.core.fpu.arch.sse3", + "tizen.org/feature/platform.core.fpu.arch.ssse3", + "tizen.org/feature/platform.core.fpu.arch.vfpv3", + "tizen.org/feature/platform.core.cpu.arch.x86", + "tizen.org/feature/platform.native.osp_compatible", + "tizen.org/feature/screen.auto_rotation", + "tizen.org/feature/sensor.accelerometer", + "tizen.org/feature/sensor.accelerometer.wakeup", + "tizen.org/feature/sensor.gyroscope", + "tizen.org/feature/sensor.gyroscope.wakeup", + "tizen.org/feature/sensor.magnetometer", + "tizen.org/feature/sensor.magnetometer.wakeup", + "tizen.org/feature/sensor.proximity", + "tizen.org/feature/sensor.proximity.wakeup", + "tizen.org/feature/sensor.tiltmeter", + "tizen.org/feature/sensor.tiltmeter.wakeup", + "tizen.org/feature/shell.appwidget", + "tizen.org/feature/network.bluetooth", + "tizen.org/feature/sip.voip", + "tizen.org/feature/speech.recognition", + "tizen.org/feature/speech.synthesis", + "tizen.org/feature/usb.accessory", + "tizen.org/feature/usb.host", + "tizen.org/feature/vision.face_recognition", + "tizen.org/feature/vision.image_recognition", + "tizen.org/feature/vision.qrcode_generation", + "tizen.org/feature/vision.qrcode_recognition", + "tizen.org/feature/bluetooth", + "tizen.org/feature/bluetooth.le", + "tizen.org/feature/network.bluetooth.le", + "tizen.org/feature/bluetooth.audio.media", + "tizen.org/feature/network.bluetooth.audio.media", + "tizen.org/feature/bluetooth.audio.call", + "tizen.org/feature/network.bluetooth.audio.call", + "tizen.org/feature/bluetooth.hdp", + "tizen.org/feature/network.bluetooth.hdp" + "tizen.org/feature/bluetooth.hid", + "tizen.org/feature/network.bluetooth.hid", + "tizen.org/feature/bluetooth.opp", + "tizen.org/feature/network.bluetooth.opp", + "tizen.org/feature/bluetooth.spp", + "tizen.org/feature/network.nfc.p2p", + "tizen.org/feature/network.nfc.tag" +}; + +#endif /* __TBT_INFO_H__ */ diff --git a/tbtcoreapp/inc/model/tbt-list.h b/tbtcoreapp/inc/model/tbt-list.h new file mode 100644 index 0000000..655f63b --- /dev/null +++ b/tbtcoreapp/inc/model/tbt-list.h @@ -0,0 +1,82 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file tbt-list.h + * @brief This file Handles main List of Application. + * @since_tizen 2.3 + * @author Amlan Chowdhury (amlan.c@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ + +#ifndef __TBT_LIST_H__ +#define __TBT_LIST_H__ + +#include "tbt-info.h" + +/** + * @brief Initialize sensor info list + * @since_tizen 2.3 + */ +void tbt_list_init(); + +/** + * Save xml report file for future use + * @since_tizen 2.3 + */ +void tbt_save_report(); + +/** + * @brief Get list of tbt list supported by application + * @since_tizen 2.3 + * @param[out] count tbts list count + * @return Sensor list + */ +const tbt_info *tbt_list_get(unsigned *count); + +/** + * Returns total count of tbt_info; + * @since_tizen 2.3 + */ +const int tbt_info_count(); + +/** + * @brief Get list of tbt list supported by application + * @since_tizen 2.3 + * @param[out] count tbts list count + * @return Sensor list + */ +tbt_info *tbt_list_item_get(int index); + +/** + * @brief Get list item index of tbt list supported by application + * @since_tizen 2.3 + * @param[out] count tbts list count + * @return Sensor list + */ +const int tbt_list_item_index_get_by_app_type(int app_type); +/** + * @brief Get list item count tbt list supported by application + * @since_tizen 2.3 + * @param[out] count tbts list count + * @return Sensor list + */ +const int tbt_list_item_count(int index); + +#endif /* __TBT_LIST_H__ */ diff --git a/tbtcoreapp/inc/utils/app_module_config.h b/tbtcoreapp/inc/utils/app_module_config.h new file mode 100644 index 0000000..69d5d89 --- /dev/null +++ b/tbtcoreapp/inc/utils/app_module_config.h @@ -0,0 +1,155 @@ +#ifndef _EXCLUDE_LIST_H +#define _EXCLUDE_LIST_H + +#define TIZEN_2_3_1 +//#define TIZEN_2_4 + +//#define DEVICE_TYPE_MOBILE +#define DEVICE_TYPE_WEARABLE + +#define TBT_MODULE_CAMERA +#define TBT_MODULE_APP_CAMERA_CAPTURE +#define TBT_MODULE_APP_CAMERA_RECORD +#define TBT_MODULE_APP_CAMERA_FACE_DETECT +#define TBT_MODULE_APP_CAMERA_HDR_CAPTURE + +#define TBT_MODULE_AUDIO +#define TBT_MODULE_APP_SOUND_AUDIO +#define TBT_MODULE_APP_SOUND_VOLUME + +#define TBT_MODULE_GPS +#define TBT_MODULE_APP_GPS_GPS + +#define TBT_MODULE_BT +#define TBT_MODULE_APP_BT_CLIENT_PAIRED +//#define TBT_MODULE_APP_BT_CLIENT_CANCEL_PAIRED +//#define TBT_MODULE_APP_BT_SERVER_PAIRED +//#define TBT_MODULE_APP_BT_OPP_SERVER +//#define TBT_MODULE_APP_BT_OPP_CLIENT +//#define TBT_MODULE_APP_BT_AUDIO_CONNECT_HANDSFREE +#define TBT_MODULE_APP_BT_AUDIO_CONNECT +#define TBT_MODULE_APP_BT_AUTHORIZATION +#define TBT_MODULE_APP_BT_PROFILES +#define TBT_MODULE_APP_BT_SDP +//#define TBT_MODULE_APP_BT_CLIENT_SOCKET +//#define TBT_MODULE_APP_BT_SERVER_SOCKET +#define TBT_MODULE_APP_BT_HID_CONNECT +//#define TBT_MODULE_APP_BT_AG +//#define TBT_MODULE_APP_BT_AVRCP +//#define TBT_MODULE_APP_BT_HDP + +//#define TBT_MODULE_BLE +//#define TBT_MODULE_BLE_GATT_CLIENT + + +//#define TBT_MODULE_BT_OOB +//#define TBT_MODULE_APP_BT_OOB_DEVICE +//#define TBT_MODULE_APP_BT_OOB_PERIPHERAL + +#define TBT_MODULE_WIFI +#define TBT_MODULE_APP_WIFI_WIFI + +//#define TBT_MODULE_WIFIDIRECT +//#define TBT_MODULE_APP_WIFIDIRECT +//#define TBT_MODULE_APP_WIFIDIRECT_CONNECTION_CANCEL + +#define TBT_MODULE_NFC +#define TBT_MODULE_APP_NFC_TAG +#define TBT_MODULE_APP_NFC_P2P + +#define TBT_MODULE_DISPLAY +#define TBT_MODULE_APP_DISPLAY_DISPLAY + +#define TBT_MODULE_GRAPHICS +#define TBT_MODULE_APP_GRAPHICS_GRAPHICS + +#define TBT_MODULE_KEYPAD +#define TBT_MODULE_APP_IDEV_NUM_KEYPAD +#define TBT_MODULE_APP_IDEV_PH_NUM_KEYPAD +#define TBT_MODULE_APP_IDEV_IP_KEYPAD + +#define TBT_MODULE_LOCAL +#define TBT_MODULE_APP_LOCAL_MPEG4 +#define TBT_MODULE_APP_LOCAL_H263 +#define TBT_MODULE_APP_LOCAL_H264 + +#define TBT_MODULE_IMAGEVIEW +#define TBT_MODULE_APP_IMAGEVIEW_JPEG +#define TBT_MODULE_APP_IMAGEVIEW_BMP +#define TBT_MODULE_APP_IMAGEVIEW_GIF +#define TBT_MODULE_APP_IMAGEVIEW_PNG + +#define TBT_MODULE_DC +#define TBT_MODULE_APP_DC_INSERT +#define TBT_MODULE_APP_DC_DELETE +#define TBT_MODULE_APP_DC_UPDATE +#define TBT_MODULE_APP_DC_SELECT +#define TBT_MODULE_APP_DC_CURSOR +#define TBT_MODULE_APP_DC_MAP + +#define TBT_MODULE_APP +#define TBT_MODULE_APP_PICK_VIEW_APP +#define TBT_MODULE_APP_PICK_PICK_APP + +#define TBT_MODULE_SENSOR +#define TBT_MODULE_APP_SENSOR_ACCELEROMETER +#define TBT_MODULE_APP_SENSOR_GYROSCOPE +#define TBT_MODULE_APP_SENSOR_PROXIMITY +#define TBT_MODULE_APP_SENSOR_LIGHT +#define TBT_MODULE_APP_SENSOR_ULTRA_VIOLET +#define TBT_MODULE_APP_SENSOR_PRESSURE +#define TBT_MODULE_APP_SENSOR_MAGNATOMETER + +#define TBT_MODULE_ANIMATION +#define TBT_MODULE_APP_ANIMATION_FADE +#define TBT_MODULE_APP_ANIMATION_POINT +#define TBT_MODULE_APP_ANIMATION_DIMENSION +#define TBT_MODULE_APP_ANIMATION_RECT +#define TBT_MODULE_APP_ANIMATION_ROTATE + +#define TBT_MODULE_UI +#define TBT_MODULE_APP_UI_RESIZE +#define TBT_MODULE_APP_UI_SHAPE +#define TBT_MODULE_APP_UI_ROTATE +#define TBT_MODULE_APP_UI_FONT +#define TBT_MODULE_APP_UI_LINE +#define TBT_MODULE_APP_UI_ALPHA + +#define TBT_MODULE_TOUCH +#define TBT_MODULE_APP_TOUCH_TOUCH + +#define TBT_MODULE_MOCK +#define TBT_MODULE_APP_MOCK + +#define TBT_MODULE_EVENT +#define TBT_MODULE_APP_EVENT_VIEW + +//#define TBT_MODULE_IME +//#define TBT_MODULE_APP_IME_ALPHABATIC +//#define TBT_MODULE_APP_IME_NUMERIC +//#define TBT_MODULE_APP_IME_EVENT +//#define TBT_MODULE_APP_IME_CONTEXT_GET + +//#define TBT_MODULE_WIDGET +//#define TBT_MODULE_APP_WIDGET + +#define TBT_MODULE_EFL +#define TBT_MODULE_APP_EFL_CALLBACK + +//#define TBT_MODULE_SHORTCUT +//#define TBT_MODULE_APP_SHORTCUT + +//#define TBT_MODULE_OAUTH2 +//#define TBT_MODULE_APP_OAUTH2 + +//#define TBT_MODULE_PUSH +//#define TBT_MODULE_APP_PUSH_SERVICE + +//#define TBT_MODULE_RUNTIME +//#define TBT_MODULE_APP_RUNTIME_INFO + +#define TBT_MODULE_FEATURE +#define TBT_MODULE_APP_FEATURE_SUMMARY + + +#endif diff --git a/tbtcoreapp/inc/utils/color-utils.h b/tbtcoreapp/inc/utils/color-utils.h new file mode 100644 index 0000000..febaae5 --- /dev/null +++ b/tbtcoreapp/inc/utils/color-utils.h @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file color-utils.h + * @brief This file provide different color information. + * @since_tizen 2.3 + * @author Amlan Chowdhury(amlan.c@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ +#ifndef __COLOR_UTILS_H__ +#define __COLOR_UTILS_H__ + +/** + * @brief Retrive color component from color mask + * @since_tizen 2.3 + * @param[in] color Integer color representation (i.e. 0xRRGGBB) + * @return Color component + */ +#define RED(color) ((color >> 16) & 0xff) +#define GREEN(color) ((color >> 8) & 0xff) +#define BLUE(color) ((color) & 0xff) + +/** + * @brief Expand color integer representation as comma separated color + * components values + * @since_tizen 2.3 + */ +#define RGB(color) RED(color), GREEN(color), BLUE(color) + +/** + * @brief Expand color integer representation as comma separated color + * components float values (from 0.0 to 1.0) + * @since_tizen 2.3 + */ +#define FRGB(color) RED(color) / 255.0, GREEN(color) / 255.0, BLUE(color) / 255.0 + +#endif /* __COLOR_UTILS_H__ */ diff --git a/tbtcoreapp/inc/utils/config.h b/tbtcoreapp/inc/utils/config.h new file mode 100644 index 0000000..7b385d7 --- /dev/null +++ b/tbtcoreapp/inc/utils/config.h @@ -0,0 +1,329 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file config.h + * @brief This file Configures the Application. + * @since_tizen 2.3 + * @author Kallol Kumar Pal(kallol.kumar@samsung.com) and Amlan Chowdhury(amlan.c@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ +#ifndef CONFIG_H_ +#define CONFIG_H_ + +#include "utils/app_module_config.h" +#include +#include +#include +#include +#include +#include +#include "utils/logger.h" +#include +#include + +#define MAX_LENGTH 1024 + +#define EDJPATH "edje" +#define AUDIOPATH "sounds" +#define VIDEOPATH "video" +#define IMAGEPATH "images" + +extern bool __is_efl_test_running; + +//Push: +#define PUSH_APP_ID "da58f09b7dcd898f" +#define PUSH_APP_SECRET "E55A746761233098DDD1114F652AFE51" + + +// *_X_POS, *_Y_POS, *_WIDTH, *_HEIGHT are virtual (relative) coords of grid widget +#define MAX_WIDTH 100 +#define MAX_HEIGHT 100 + +#define IMAGE_X_POS 0 +#define IMAGE_Y_POS 0 +#define IMAGE_WIDTH MAX_WIDTH +#define IMAGE_HEIGHT 40 + +#define LABEL_X_POS 0 +#define LABEL_Y_POS IMAGE_HEIGHT +#define LABEL_WIDTH MAX_WIDTH +#define LABEL_HEIGHT MAX_WIDTH-IMAGE_HEIGHT + +#define LABEL_MAX_LEN 500 + +#define IMAGES_REL_FOLDER "images" +#define IMAGE_REL_PATH_TEMPLATE "%s/%s" + +#define TOOLBAR_BUTTON_DATA_KEY "button_id" + +#define LABEL_REL_PATH "res/"IMAGES_REL_FOLDER"/" +#define LABEL_TEMPLATE "%s%s
Dimension = %u x %u
Result:E_SUCCESS" + +#define TABLE_PADDING_VERTICAL 20 +#define TABLE_PADDING_HORIZONTAL 20 + +#define NAVI_TOOLBAR_HEIGHT 150 + +#ifdef TIZEN_2_3_1 + #define WINDOW_PREFERED_ENGINE "opengl_x11" +#else + #define WINDOW_PREFERED_ENGINE "3d" +#endif + + +#define PICK_VIEW_APP_PACKAGE_NAME "org.tizen.coretbt_uiapp"; +#define PICK_VIEW_SERVICEAPP_PACKAGE_NAME "org.tizen.coretbt_serviceapp"; + +#define WIDGET_VIEW_APPID "org.tizen.coretbtwidgetapp"; +#define VIEWER_VIEW_APP_PACKAGE_NAME "org.tizen.widget_viewer_sdk"; + +#define DATA_CONTROL_PROVIDER_MAP_ID "MapRepository"; +#define DATA_CONTROL_PROVIDER_DATA_ID "provider"; + +#define DATA_CONTROL_PROVIDER_ID "http://coretbt_dataprovider.com/datacontrol/provider/coretbt_dataprovider"; +#define DATA_CONTROL_MAP_PROVIDER_ID "http://coretbt_dataprovider.com/datacontrol/provider/coretbt_dataprovider_map"; + + +#define BLUETOOTH_SOCKET_UUID "00001101-0000-1000-8000-00805F9B34FB" + +#define DEFINED_WIDTH 480 +#define DEFINED_HEIGHT 800 + +char *TBT_LOGGING_DIR; +char *TBT_MEDIA_DIR; +char XML_REPORT_FILE_PATH[128]; +char MEDIA_FILE_PATH[128]; + + +static inline const char *get_data_path(const char * file_path); +static inline const char *get_resource_path(const char * file_path); +static inline const char *get_shared_resource_path(const char *file_path); + + +typedef enum { + DEVICE_WEARABLE, + DEVICE_MOBILE, + DEVICE_WEARABLE_360_X_480, + DEVICE_WEARABLE_320_X_320, + DEVICE_WEARABLE_CIRCLE, + + DEVICE_NONE, + DEVICE_MAX +}device_type_e; + +static inline device_type_e get_device_type(); + +typedef enum +{ + CURSOR_NONE_PRESSED = -1, + CURSOR_START_PRESSED , + CURSOR_FIRST_PRESSED , + CURSOR_NEXT_PRESSED , + CURSOR_PREVIOUS_PRESSED , + CURSOR_LAST_PRESSED +}_Data_Control_Cursor_State; + +static int _supportedStorageID; +static bool _storage_device_supported_cb(int storage_id, storage_type_e type, storage_state_e state, const char *path, void *user_data) +{ + if(type == STORAGE_TYPE_INTERNAL) + { + // save storage id + _supportedStorageID=storage_id; + return false; + } + return true; +} + +static void +app_get_resource(const char *edj_file_in, char *edj_path_out, int edj_path_max) +{ + char *res_path = app_get_resource_path(); + if (res_path) { + snprintf(edj_path_out, edj_path_max, "%s%s", res_path, edj_file_in); + } +} + +static void +app_get_shared_resource(const char *edj_file_in, char *edj_path_out, int edj_path_max) +{ + char *res_path = app_get_shared_resource_path(); + if (res_path) { + snprintf(edj_path_out, edj_path_max, "%s%s", res_path, edj_file_in); + } +} + +static inline const char *get_edje_path(const char *file_name) +{ +char absolute_path[MAX_LENGTH] = {'\0'}; +char file_path[MAX_LENGTH] = {'\0'}; +#ifdef TIZEN_2_3_1 + #ifdef DEVICE_TYPE_MOBILE + strncat(file_path, "edje/2.3.1/mobile/", sizeof("edje/2.3.1/mobile/")); + #endif + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE) + { + strncat(file_path, "edje/2.3.1/wearable/", sizeof("edje/2.3.1/wearable/")); + } + else if(get_device_type() == DEVICE_WEARABLE_360_X_480) + { + strncat(file_path, "edje/2.3.1/wearable_360_x_480/", sizeof("edje/2.3.1/wearable_360_x_480/")); + } + else if(get_device_type() == DEVICE_WEARABLE_320_X_320) + { + strncat(file_path, "edje/2.3.1/wearable_320_x_320/", sizeof("edje/2.3.1/wearable_320_x_320/")); + } + else if(get_device_type() == DEVICE_WEARABLE_CIRCLE) + { + strncat(file_path, "edje/2.3.1/wearable_circle/", sizeof("edje/2.3.1/wearable_circle/")); + } + #endif +#endif + + + +#ifdef TIZEN_2_4 + #ifdef DEVICE_TYPE_MOBILE + strncat(file_path, "edje/2.4/mobile/", sizeof("edje/2.4/mobile/")); + #endif + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE) + { + strncat(file_path, "edje/2.4/wearable/", sizeof("edje/2.4/wearable/")); + } + else if(get_device_type() == DEVICE_WEARABLE_360_X_480) + { + strncat(file_path, "edje/2.4/wearable_360_x_480/", sizeof("edje/2.4/wearable_360_x_480/")); + } + else if(get_device_type() == DEVICE_WEARABLE_320_X_320) + { + strncat(file_path, "edje/2.4/wearable_320_x_320/", sizeof("edje/2.4/wearable_320_x_320/")); + } + else if(get_device_type() == DEVICE_WEARABLE_CIRCLE) + { + strncat(file_path, "edje/2.4/wearable_circle/", sizeof("edje/2.4/wearable_circle/")); + } + #endif +#endif + + int num = strlen(file_name); + if(strlen(file_path)+strlen(file_name) <= MAX_LENGTH) + { + num = strlen(file_name); + } + else + { + num = MAX_LENGTH-strlen(file_path); + } + + strncat(file_path,file_name, num); + app_get_resource(file_path, absolute_path, (int)MAX_LENGTH); + return strdup(absolute_path); + +} +static inline const char *get_resource_path(const char *file_path) +{ + static char absolute_path[MAX_LENGTH] = {'\0'}; + app_get_resource(file_path, absolute_path, (int)MAX_LENGTH); + return strdup(absolute_path); +} + +static inline const char *get_shared_resource_path(const char *file_path) +{ + static char absolute_path[MAX_LENGTH] = {'\0'}; + app_get_shared_resource(file_path, absolute_path, (int)MAX_LENGTH); + return strdup(absolute_path); +} + +static inline const char *get_storage_image_dir_path() +{ + static char *absolute_path; + // lets set storage devices + storage_foreach_device_supported(_storage_device_supported_cb,NULL); + storage_get_directory(_supportedStorageID,STORAGE_DIRECTORY_IMAGES,&absolute_path); + DBG("Logging_Dir set = %s",absolute_path); + + return strdup(absolute_path); +} + +static inline const char *get_data_path(const char *file_path) +{ + static char* absolute_path = NULL; + static char result[MAX_LENGTH]; + absolute_path = strdup(app_get_data_path()); + strcpy(result, absolute_path); + strcat(result, "/"); + strcat(result, file_path); + DBG("Data Path is %s", result); + return result; +} + +static inline char *gen_data_path(const char *file_path) +{ + char path[128]; + snprintf(path, sizeof(path), "%s%s",app_get_data_path(),file_path); + + return strdup(path); +} + +static inline char *format_string(const char *format, ...) +{ + va_list arg; + char* chTemp; + chTemp= (char*)malloc(1024 * sizeof(char)); + RETVM_IF(!chTemp, NULL,"malloc failed."); + va_start(arg,format); + vsnprintf(chTemp,1024,format,arg); + va_end(arg); + return chTemp; +} + +static inline device_type_e get_device_type() +{ + int width, height; + device_type_e device_type = DEVICE_NONE; + system_info_get_platform_int("tizen.org/feature/screen.width", &width); + system_info_get_platform_int("tizen.org/feature/screen.height", &height); + + if(width == 360 && height == 360) + { + //circle + device_type = DEVICE_WEARABLE_CIRCLE; + } + else if(width == 360 && height == 480) + { + device_type = DEVICE_WEARABLE_360_X_480; + } + else if(width == 320 && height == 320) + { + device_type = DEVICE_WEARABLE_320_X_320; + } + else + { + device_type = DEVICE_MOBILE; + } + +return device_type; + +} + + +#endif /* CONFIG_H_ */ diff --git a/tbtcoreapp/inc/utils/gl-types.h b/tbtcoreapp/inc/utils/gl-types.h new file mode 100644 index 0000000..9bbc07b --- /dev/null +++ b/tbtcoreapp/inc/utils/gl-types.h @@ -0,0 +1,138 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +/** + * @file gl-types.h + * @brief This file provide necessary functions for OpenGl ES 2.0 transformation. + * @since_tizen 2.3 + * @author A. B. M. Nazibullah (nazib.ullah@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ +#ifndef __GL_TYPES_H__ +#define __GL_TYPES_H__ + +#include + + +typedef struct +{ + GLfloat x, y; + +} gl_vector2; + +/** + * @brief 3D vector to represent position and color information in Open GL. + * @since_tizen 2.3 + */ +typedef union +{ + struct + { + GLfloat x, y, z; + }; + struct + { + GLfloat r, g, b; + }; +} gl_vector3; + +/** + * @brief 4D vector to represent position and color information in Open GL. + * @since_tizen 2.3 + */ +typedef union +{ + struct + { + GLfloat x, y, z, w; + }; + struct + { + GLfloat r, g, b, a; + }; +} gl_vector4; + +/** + * @brief 4x4 matrix to perform transformations in 3D space. + * @since_tizen 2.3 + */ +typedef struct +{ + GLfloat m[4][4]; + +} gl_matrix4; + +/** + * @brief Loads identity matrix values to the passed matrix. + * @since_tizen 2.3 + * @param[in] result Pointer to the result matrix. + */ +void gl_matrix4_load_identity(gl_matrix4 *result); + +/** + * @brief Loads frustum projection matrix values to the passed matrix. + * @since_tizen 2.3 + * @param[in] result Pointer to the result matrix. + * @param[in] left The coordinate for the left-vertical clipping plane. + * @param[in] right The coordinate for the right-vertical clipping plane. + * @param[in] bottom The coordinate for the bottom-horizontal clipping plane. + * @param[in] top The coordinate for the top-horizontal clipping plane. + * @param[in] near The distances to the near-depth clipping plane. Must be positive. + * @param[in] far The distances to the far-depth clipping planes. Must be positive. + */ +void gl_matrix4_load_frustum(gl_matrix4 *result, GLfloat left, GLfloat right, + GLfloat bottom, GLfloat top, GLfloat near, GLfloat far); + +/** + * @brief Loads perspective projection matrix values to the passed matrix. + * @since_tizen 2.3 + * @param[in] result Pointer to the result matrix. + * @param[in] fov_deg Field of View angle in degree for minimal dimension (vertical or horizontal). + * @param[in] aspect View-port width to height ratio. + * @param[in] near The distances to the near-depth clipping plane. Must be positive. + * @param[in] far The distances to the far-depth clipping planes. Must be positive. + */ +void gl_matrix4_load_perspective(gl_matrix4 *result, GLfloat fov_deg, + GLfloat aspect, GLfloat near, GLfloat far); + +/** + * @brief Multiplies the passed matrix by a translation matrix. + * @since_tizen 2.3 + * @param[in] result Pointer to the result matrix. + * @param[in] v Translation vector. + */ +void gl_matrix4_translate(gl_matrix4 *result, gl_vector3 v); + +/** + * @brief Multiplies the passed matrix by a rotation matrix. + * @since_tizen 2.3 + * @param[in] result Pointer to the result matrix. + * @param[in] angle_deg The angle of rotation, in degrees. + * @param[in] v Rotation vector. + */ +void gl_matrix4_rotate(gl_matrix4 *result, GLfloat angle_deg, gl_vector3 v); + +/** + * @brief Multiplies the passed matrix by the custom matrix. + * @since_tizen 2.3 + * @param[in] result Pointer to the result matrix. + * @param[in] rv Custom matrix of the multiplication. + */ +void gl_matrix4_mul(gl_matrix4 *result, const gl_matrix4 *rv); + +#endif /* __GL_TYPES_H__ */ diff --git a/tbtcoreapp/inc/utils/gl-utils.h b/tbtcoreapp/inc/utils/gl-utils.h new file mode 100644 index 0000000..cad56e6 --- /dev/null +++ b/tbtcoreapp/inc/utils/gl-utils.h @@ -0,0 +1,141 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +/** + * @file gl-utils.h + * @brief This file provide necessary Util functions for OpenGL operation. + * @since_tizen 2.3 + * @author A. B. M. Nazibullah (nazib.ullah@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ +#ifndef __GL_UTILS_H__ +#define __GL_UTILS_H__ + +#include "gl-types.h" + +/** + * @brief Common shader vertex attribute constants + * @since_tizen 2.3 + */ +enum +{ + SHADER_COORDS_ATTR = 0, + SHADER_COLOR_ATTR = 1 +}; + +/** + * @brief Color shader program structure + * @since_tizen 2.3 + * Object MUST be filled with 0 before using in any of the API functions. + */ +typedef struct +{ + GLuint program; + GLuint vertex_shader; + GLuint fragment_Shader; + GLint u_m4P; + GLint u_m4MV; + +} color_shader; + +/** + * @brief 3D color vertex data + * @since_tizen 2.3 + */ +typedef struct +{ + gl_vector3 coords; + gl_vector4 color; + +} color_vertex3d; + +/** + * @brief 3D color object vertex data + * @since_tizen 2.3 + */ +typedef struct +{ + const color_vertex3d *vertexes; + const GLshort *indexes; + GLuint indexes_length; + +} color_object3d; + +/** + * @brief Initialises color shader object. + * @since_tizen 2.3 + * On failed initialisation object may be partially initialised so MUST be finalised. + * @param[in] obj Pointer to color shader object. + * @param[in] api Pointer to Evas_GL_API structure. + * @return GL_TRUE on success, GL_FALSE otherwise. + */ +GLboolean color_shader_init(color_shader *obj, Evas_GL_API *api); + +/** + * @brief Frees resources associated with shader object. + * @since_tizen 2.3 + * May be called without initialisation. + * May be reinitialised again after the call. + * @param[in] obj Pointer to color shader object. + * @param[in] api Pointer to Evas_GL_API structure. + */ +void color_shader_finalize(color_shader *obj, Evas_GL_API *api); + +/** + * @brief Activates shader so it will be used in rendering + * @since_tizen 2.3 + * @param[in] obj Pointer to color shader object. + * @param[in] api Pointer to Evas_GL_API structure. + */ +void color_shader_activate(color_shader *obj, Evas_GL_API *api); + +/** + * @brief Deactivated shader so it will NOT be used in rendering + * @since_tizen 2.3 + * @param[in] obj Pointer to color shader object. + * @param[in] api Pointer to Evas_GL_API structure. + */ +void color_shader_deactivate(color_shader *obj, Evas_GL_API *api); + +/** + * @brief Loads Projection matrix to use in rendering. Shader MUST be active. + * @since_tizen 2.3 + * @param[in] obj Pointer to color shader object. + * @param[in] api Pointer to Evas_GL_API structure. + * @param[in] matrix Pointer to Projection matrix. + */ +void color_shader_load_p(color_shader *obj, Evas_GL_API *api, const gl_matrix4 *matrix); + +/** + * @brief Loads Model-View matrix to use in rendering. Shader MUST be active. + * @since_tizen 2.3 + * @param[in] obj Pointer to color shader object. + * @param[in] api Pointer to Evas_GL_API structure. + * @param[in] matrix Pointer to Model-View matrix. + */ +void color_shader_load_mv(color_shader *obj, Evas_GL_API *api, const gl_matrix4 *matrix); + +/** + * @brief Draws color 3D object. Appropriate shader MUST be active. + * @since_tizen 2.3 + * @param[in] obj Pointer to color 3D object structure. + * @param[in] api Pointer to Evas_GL_API structure. + */ +void color_object3d_draw(const color_object3d *obj, Evas_GL_API *api); + +#endif /* __GL_UTILS_H__ */ diff --git a/tbtcoreapp/inc/utils/logger.h b/tbtcoreapp/inc/utils/logger.h new file mode 100644 index 0000000..772ceab --- /dev/null +++ b/tbtcoreapp/inc/utils/logger.h @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +/** + * @file logger.h + * @brief This file provide necessary macro for logging information. + * @since_tizen 2.3 + * @author Amlan Chowdhury (amlan.c@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ +#ifndef __LOGGER_H__ +#define __LOGGER_H__ + +#include + +#define LOG_TAG_CORE "[TBT_CORE]_" + +#define DLOG(prio, fmt, arg...) dlog_print(prio, LOG_TAG_CORE, "%s (Line: %d) > " fmt, __func__, __LINE__, ##arg) +#define DBG(fmt, arg...) DLOG(DLOG_DEBUG, fmt, ##arg) +#define ERR(fmt, arg...) DLOG(DLOG_ERROR, fmt, ##arg) + +#define RETM_IF(expr, fmt, arg...) \ +{ \ + if (expr) \ + { \ + ERR(fmt, ##arg); \ + return; \ + } \ +} + +#define RETVM_IF(expr, val, fmt, arg...) \ +{ \ + if (expr) \ + { \ + ERR(fmt, ##arg); \ + return (val); \ + } \ +} + +#define SAFE_DELETE(a) if( (a) != NULL ) free (a); (a) = NULL; + +#endif /* __LOGGER_H__ */ diff --git a/tbtcoreapp/inc/utils/ui-utils.h b/tbtcoreapp/inc/utils/ui-utils.h new file mode 100644 index 0000000..868c2ac --- /dev/null +++ b/tbtcoreapp/inc/utils/ui-utils.h @@ -0,0 +1,221 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +/** + * @file ui-utils.h + * @brief This file provide necessary Util functions UI. + * @since_tizen 2.3 + * @author kallol kumar pal (kallol.kumar@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ + + +#ifndef __UI_UTILS_H__ +#define __UI_UTILS_H__ + +#include "utils/app_module_config.h" + +#include + +#ifdef TIZEN_2_4 + #include +#endif +#ifdef TIZEN_2_3_1 + #include "efl_extension_events.h" +#endif +#include + +#define EVENT_CLICKED "clicked" +#define EVENT_CHANGED "changed" +#define EVENT_UNFOCUSED "unfocused" +#define EVENT_DATETIME_CLICKED "date,btn,clicked" +#define EVENT_PICKER_VALUE_SET "picker,value,set" + +#define SIGNAL_PICKER_ACTION_VALUE_SET "picker,action,value,set" + +#define PART_NAVI_TITLE_RIGHT_BUTTON "title_right_btn" +#define PART_ENTRY_GUIDE "elm.guide" +#define PART_POPUP_TITLE "title,text" +#define PART_TOOLBAR "toolbar" +#define PART_TOOLBAR_MORE_BUTTON "toolbar_more_btn" +#define PART_ENTRY "elm.icon.entry" +#define PART_SWALLOW_CONTENT "elm.swallow.content" +#define PART_SWALLOW_BG "elm.swallow.bg" +#define PART_NAVI_ITEM_TABBAR "tabbar" + +#define STYLE_BUTTON_NAVIFRAME "naviframe/title_text" +#define STYLE_TOOLBAR_TABBAR "tabbar/item_with_title" +#define STYLE_NAVI_ITEM_TABBAR "tabbar" + +enum +{ + TOOLBAR_ITEM_INDEX_PASS = 0, + TOOLBAR_ITEM_INDEX_FAIL, + TOOLBAR_ITEM_INDEX_INFO, + TOOLBAR_ITEM_INDEX_COUNT_MAX +} TOOLBAR_ITEM_INDEXS; + +static const char *caption_ok = "OK"; + +static const char *toolbar_item_names[TOOLBAR_ITEM_INDEX_COUNT_MAX] = { "Pass", + "Fail", + "Info" +}; + +static const int toolbar_item_ids[TOOLBAR_ITEM_INDEX_COUNT_MAX] = { TOOLBAR_ITEM_INDEX_PASS, + TOOLBAR_ITEM_INDEX_FAIL, + TOOLBAR_ITEM_INDEX_INFO +}; + +Evas_Object *ui_utils_icon_create_new(Evas_Object *parent, const char *icon_name); + +void (*_tbt_pause_resume_cb) (bool) ; +void (*_tbt_app_terminate_cb) () ; +/** +* @function DoesFeatureExixts +* @since_tizen 2.3 +* @description Checks if a particular feature exists or not +* @parameter[IN] Feature Key +* @return bool The result of feature search +*/ +bool does_feature_exist(char* feature); + + +/* + * @brief Add naviframe widget + * @since_tizen 2.3 + * @param[in] parent Parent widget + * @param[in] back_cb Hardware back button callback + * @param[in] cb_data Data to pass to back_cb + * @return Naviframe on success, otherwise NULL + */ +Evas_Object *ui_utils_icon_create(Evas_Object *parent, const char *icon_name); + +/* + * @brief Add naviframe widget + * @since_tizen 2.3 + * @param[in] parent Parent widget + * @param[in] back_cb Hardware back button callback + * @param[in] cb_data Data to pass to back_cb + * @return Naviframe on success, otherwise NULL + */ +Evas_Object *ui_utils_create_image(Evas_Object *parent, const char *file_path); + +/* + * @brief Add naviframe widget + * @since_tizen 2.3 + * @param[in] parent Parent widget + * @param[in] back_cb Hardware back button callback + * @param[in] cb_data Data to pass to back_cb + * @return Naviframe on success, otherwise NULL + */ +Evas_Object *ui_utils_navi_add(Evas_Object *parent, Eext_Event_Cb back_cb, void *cb_data); + +/* + * @brief Add layout widget + * @since_tizen 2.3 + * @param[in] parent Parent widget + * @param[in] destroy_cb Layout destroy callback + * @param[in] cb_data Data to pass to destroy_cb + * @return Layout on success, otherwise NULL + */ +Evas_Object *ui_utils_layout_add(Evas_Object *parent, Evas_Object_Event_Cb destroy_cb, void *cb_data); + +/** + * @brief Add button to popup + * @since_tizen 2.3 + * @remarks Added button automatically hides popup when clicked so you don't + * need to hide it in your callback and create callbacks for cancel buttons. + * @param[in] popup Popup widget + * @param[in] text Button text + * @param[in] func Button click callback + * @param[in] data Data to pass to func + * @return true button on success, otherwise NULL + */ +Evas_Object * ui_utils_popup_button_add(Evas_Object *popup, const char *text, Evas_Smart_Cb func, void *data); + +/* + * @brief Add toolbar widget + * @since_tizen 2.3 + * @param[in] parent Parent widget + * @return Toolbar on success, otherwise NULL + */ +Evas_Object *ui_utils_toolbar_add(Evas_Object *parent); + +/* + * @brief Add toolbar widget + * @since_tizen 2.3 + * @param[in] parent Parent widget + * @return Toolbar on success, otherwise NULL + */ +Evas_Object *ui_utils_popup_add(Evas_Object *parent, const char *text); + +/* + * @brief Add toolbar widget + * @since_tizen 2.3 + * @param[in] parent Parent widget + * @return Toolbar on success, otherwise NULL + */ +Evas_Object *ui_utils_push_button_add(void *data, Evas_Object *parent, const char *name, Evas_Smart_Cb cb); + +/* + * @brief Add toolbar widget + * @since_tizen 2.3 + * @param[in] parent Parent widget + * @return Toolbar on success, otherwise NULL + */ +Evas_Object *ui_utils_check_add(void *data, Evas_Object *parent); + +/* + * @brief Add toolbar widget + * @since_tizen 2.3 + * @param[in] parent Parent widget + * @return Toolbar on success, otherwise NULL + */ +void ui_utils_label_set_text(Evas_Object *parent, const char *text, char *alignment); + +/* + * @brief Add toolbar widget + * @since_tizen 2.3 + * @param[in] parent Parent widget + * @return Toolbar on success, otherwise NULL + */ +Evas_Object *ui_utils_label_add(Evas_Object *parent, const char *text); + +/* + * @brief Add toolbar widget + * @since_tizen 2.3 + * @param[in] parent Parent widget + * @return Toolbar on success, otherwise NULL + */ +Evas_Object *ui_utils_entry_add(void *data, Evas_Object *parent, Elm_Input_Panel_Layout keyboard_layout, const char *text); + +/* + * @brief Add toolbar widget + * @since_tizen 2.3 + * @param[in] parent Parent widget + * @return Toolbar on success, otherwise NULL + */ +Evas_Object *ui_utils_progressbar_add(void *data, Evas_Object *parent, Evas_Smart_Cb slider_drag_stop, Evas_Smart_Cb slider_changed); + +/* + * @brief Add toast + * @since_tizen 2.3 + * */ +void ui_utils_show_toast(const char* message, const Evas_Object* data, float timeout); +#endif /* __UI_UTILS_H__ */ diff --git a/tbtcoreapp/inc/utils/util_state_object.h b/tbtcoreapp/inc/utils/util_state_object.h new file mode 100644 index 0000000..a26244d --- /dev/null +++ b/tbtcoreapp/inc/utils/util_state_object.h @@ -0,0 +1,168 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + + +/** + * @file util_state_object.h + * @since_tizen 2.3 + * @author Muntasir (mk.chy@samung.com) + * @since_tizen 2.3 + * @brief + * State machine + * + * @debugtag UTIL_STATE + * + * State machine + * @example + + util_state_object *state_object=util_state_object_create("test1"); + + util_state_object_add_state(state_object,"state1",0); + util_state_object_add_state(state_object,"state2",1); + util_state_object_add_state(state_object,"state3",2); + + util_state_object_add_transition(state_object,0,0,0); + util_state_object_add_transition(state_object,0,1,1); + util_state_object_add_transition(state_object,0,2,2); + + util_state_object_add_transition(state_object,1,0,0); + util_state_object_add_transition(state_object,1,1,1); + util_state_object_add_transition(state_object,1,2,2); + + util_state_object_add_transition(state_object,2,0,0); + util_state_object_add_transition(state_object,2,1,1); + util_state_object_add_transition(state_object,2,2,2); + util_state_object_add_transition(state_object,2,3,1); + + util_state_object_info(state_object); + + util_state_object_init(state_object, 0,on_state_changed,NULL); + util_state_object_feed(state_object, 1, NULL); + util_state_object_feed(state_object, 2, NULL); + util_state_object_feed(state_object, 3, NULL); + util_state_object_feed(state_object, 0, NULL); + util_state_object_feed(state_object, 0, NULL); + util_state_object_feed(state_object, 0, NULL); + util_state_object_feed(state_object, 0, NULL); + + util_state_object_destroy(state_object); + + * + * @todo + * multiple input state machine. Decision based on multiple feed_value + */ + +#ifndef _UTIL_STATE_OBJECT_H_ +#define _UTIL_STATE_OBJECT_H_ + + +#include +#include +#include "logger.h" +#include + +#include + + +typedef struct _util_state_transition util_state_transition; +typedef struct _util_state_info util_state_info; +typedef struct _util_state_object util_state_object; + + +/** + * Callback for state object + * @since_tizen 2.3 + */ +typedef void (*util_state_object_state_changed_cb) (int previous,int now,int feed,void *user_data,void *feed_data); + + +/** + * Create state object + * @since_tizen 2.3 + */ +util_state_object* util_state_object_create(const char *name); + + +/** + * Destroy state object. Cleans all references and memory + * @since_tizen 2.3 + */ +void util_state_object_destroy(util_state_object *object); + + +/** + * Get state info object from state object. + * @since_tizen 2.3 + */ +util_state_info* util_state_object_get_state(util_state_object *object,int state_value); + + +/** + * Add new state to state object. + * @since_tizen 2.3 + */ +util_state_info* util_state_object_add_state(util_state_object *object,const char *name,int state_value); + + +/** + * Get transition object from state if has mapping for feed + */ +util_state_transition* util_state_object_get_transition(util_state_info* state,int feed); + + +/** + * Add new transition to state object. + */ +util_state_transition* util_state_object_add_transition(util_state_object *object,int from_state,int feed_value,int to_state); + + +/** + * Initiates the state object with initial state + */ +bool util_state_object_init(util_state_object *state_object,int initial_state, util_state_object_state_changed_cb state_change_cb,void *user_data); + +/** + * Feed new value to state object + */ +void util_state_object_feed(util_state_object *state_object, int feed_value,void *feed_data); + + +/** + * Dump information of current stage object mapping. (tag:UTIL_STATE) + */ +void util_state_object_info(util_state_object *state_object); + + +/** + * Get current state of state object + */ +int util_state_object_current_state(util_state_object *state_object); + + +/** + * Get the name of current state. + */ +const char* util_state_object_current_state_name(util_state_object *state_object); + + +/** + * Test for this module + */ +void util_state_test1(); + + +#endif // _COMMONUTIL_H_ + diff --git a/tbtcoreapp/inc/utils/xml-util.h b/tbtcoreapp/inc/utils/xml-util.h new file mode 100644 index 0000000..c5233d3 --- /dev/null +++ b/tbtcoreapp/inc/utils/xml-util.h @@ -0,0 +1,83 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +/** + * @file xml-util.h + * @brief This file provide utility funtction's for writing XML Report. + * @since_tizen 2.3 + * @author Muntasir Kabir Chowdhury (mk.chy@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ + +#ifndef XML_UTIL_H_ +#define XML_UTIL_H_ + + +#include "model/tbt-info.h" +#include "utils/logger.h" + +// For xml read/write +#include +#include +#include +#include +#include + + +/** + * Helper function. implementing traditional itoa + * @since_tizen 2.3 + * @param value + * @return + */ +char* xmlUtil_itoa(int value); + + +/** + * Search tbt_info with specified apptype + * @since_tizen 2.3 + * @param infos + * @param len + * @param apptype + * @return + */ +tbt_info *xmlUtil_get_tbtinfo_by_apptype(const tbt_info *infos,const int len,const int apptype); + + +/** + * Write Xml report and save test status in preference + * @since_tizen 2.3 + * @param inputFilePath + * @param moduleList + * @param testDataCount + */ +void xmlUtil_writeResults(const char *inputFilePath,tbt_info *moduleList,const int testDataCount); + + +/** + * Read test status from preference. + * @since_tizen 2.3 + * @param moduleList tbt_info list + * @param len Length of tbt_info list. + * @return Whether its is succeded or not. + */ +bool xmlUtil_readResults(tbt_info *moduleList,const int len); + + + +#endif /* XML_UTIL_H_ */ diff --git a/tbtcoreapp/inc/view/tbt-animation-view.h b/tbtcoreapp/inc/view/tbt-animation-view.h new file mode 100644 index 0000000..1c7783f --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-animation-view.h @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-animation-view.h + * @brief covers rendering of various types of animation + * shows animation of rect, dimension, point and roation animation + * @since_tizen 2.3 + * @author muntasir chowdhury(mk.chy@samsung.com), nazib ullah(nazib.ullah@samsung.com) + * @date October, 2014 + * @bug no known bug + * @credit + */ + +#ifndef __TBT_ANIMATION_VIEW_H__ +#define __TBT_ANIMATION_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_ANIMATION + +#include +#include "model/tbt-list.h" + + +/** + * @typedef animation_viewer_view + * @since_tizen 2.3 + * @brief A animation viewer view handle. + */ +typedef struct _animation_view animation_view; + +/** + * @brief Create tbt animation view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of animation on success, otherwise NULL + */ +animation_view *animation_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_ANIMATION_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-bluetooth-view.h b/tbtcoreapp/inc/view/tbt-bluetooth-view.h new file mode 100644 index 0000000..324cf17 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-bluetooth-view.h @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-bluetooth-view.h + * @brief performs all the bluetooth related operations + * performs operations related to bluetooth adapter, bonding and pairing + * @since_tizen 2.3 + * @author nazib ullah(nazib.ullah@samsung.com), nazmus saqib(saqib.nzms@samsung.com) + * @date October, 2014 + * @bug 1.bluetooth starting application does not work + * @credit + */ + +#ifndef __TBT_BLUETOOTH_VIEW_H__ +#define __TBT_BLUETOOTH_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_BT + +#include +#include "model/tbt-list.h" + + +/** + * @typedef bluetooth_view + * @since_tizen 2.3 + * @brief A bluetooth view handle. + */ +typedef struct _bluetooth_view bluetooth_view; + +/** + * @brief Create tbt bluetooth view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of bluetooth on success, otherwise NULL + */ +bluetooth_view *bluetooth_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_BLUETOOTH_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-bluetoothle-view.h b/tbtcoreapp/inc/view/tbt-bluetoothle-view.h new file mode 100644 index 0000000..21b806e --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-bluetoothle-view.h @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-bluetoothle-view.h + * @brief covers location retrieval + * starts location service using bluetoothle method and continuously updates the current location + * @since_tizen 2.3 + * @author golam kayes(g.kayes@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug location manager does not start in device + * @credit + * + */ + +#ifndef __TBT_BLE_VIEW_H__ +#define __TBT_BLE_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_BLE + +#include +#include "model/tbt-list.h" + + +/** + * @typedef bluetoothle_viewer_view + * @since_tizen 2.3 + * @brief A bluetoothle viewer view handle. + */ +typedef struct _bluetoothle_view bluetoothle_view; + +/** + * @brief Create bluetoothle view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of bluetoothle on success, otherwise NULL + */ +bluetoothle_view *bluetoothle_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_BLE_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-bluetoothoob-view.h b/tbtcoreapp/inc/view/tbt-bluetoothoob-view.h new file mode 100644 index 0000000..752b378 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-bluetoothoob-view.h @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-bluetoothoob-view.h + * @brief Bluetooth OOB + * + * @author A. B. M. Nazibullah(nazib.ullah@samsung.com) + * @date June, 2015 + * @credit + * + */ +#ifndef __TBT_BLUETOOTH_OOB_VIEW_H__ +#define __TBT_BLUETOOTH_OOB_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_BT_OOB + +#include +#include "model/tbt-list.h" +#include +#include + + +/** +* @typedef bluetoothoob_viewer_view +* +* @brief A bluetoothoob_view handle. +*/ +typedef struct _bluetoothoob_view bluetoothoob_view; + +/** +* @brief Create bluetooth oob +* @param[in] navi Parent naviframe +* @param[in] custom structute to hold tbt application information +* @param[in] item of the main tbt menu +* @return Pointer of bluetoothoob_view on success, otherwise NULL +*/ + +bluetoothoob_view *bluetoothoob_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); // module's startup function + +#endif +#endif // __TBT_BLUETOOTH_OOB_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-camera-view.h b/tbtcoreapp/inc/view/tbt-camera-view.h new file mode 100644 index 0000000..e1801f6 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-camera-view.h @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-camera-view.h + * @brief covers camera capture, recorder, camera HDR capture and camera face detection + * captures image using front camera, records using camera recorder, captures camera in HDR mode and and performs camera face detection + * @since_tizen 2.3 + * @author golam kayes(g.kayes@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug camera preview is shown in rotated manner + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __TBT_CAMERA_VIEW_H__ +#define __TBT_CAMERA_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_CAMERA + +#include +#include "model/tbt-list.h" + + +/** + * @typedef camera_viewer_view + * @since_tizen 2.3 + * @brief A camera viewer view handle. + */ +typedef struct _camera_view camera_view; + +/** + * @brief Create tbt camera view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of camera on success, otherwise NULL + */ +camera_view *camera_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_CAMERA_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-common-view.h b/tbtcoreapp/inc/view/tbt-common-view.h new file mode 100644 index 0000000..8bb6d83 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-common-view.h @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-common-view.h + * @since_tizen 2.3 + * @brief A common view defination used by all other view + * @author amlan.c@samsung.com + * @date October, 2014 + * @bug camera preview is shown in rotated manner + * @credit Tizen SDK Version 2.3.0 Sample Example + */ + +#ifndef __TBT_COMMON_VIEW_H__ +#define __TBT_COMMON_VIEW_H__ + +#include +#include "model/tbt-list.h" +#include "system_info.h" + +struct _common_view +{ + Evas_Object *navi; + Elm_Object_Item *navi_item; + tbt_info *tbt_info; + + Evas_Object *layout; + Evas_Object *grid; + + Evas_Object *label; + Evas_Object *text_widget; + Elm_Object_Item *item; + + Evas_Object *toolbar; + Elm_Object_Item* toolbar_items[TOOLBAR_ITEM_INDEX_COUNT_MAX]; + + unsigned int image_id; + + void* app_view; + void (*_app_destroy_cb)(void*); + void (*_app_destroy_before_layout_destroy_cb)(void*); +}; + + +/** + * @typedef common_view + * @since_tizen 2.3 + * @brief A common view handle. + */ +typedef struct _common_view common_view; + +/** + * @brief Add commonr view + * @since_tizen 2.3 + * @param[in] app The pointer to _app_data instance + * @param[in] navi The naviframe object + * @return common view data + */ +common_view *common_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item, common_view *view, void (*_app_destroy_cb)(void*), void* app_view); +void common_view_set_appdestroy_before_layout_destroy_cb(common_view *view,void (*_app_destroy_before_layout_destroy_cb)(void*)); +#endif // __TBT_COMMON_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-datacontrol-view.h b/tbtcoreapp/inc/view/tbt-datacontrol-view.h new file mode 100644 index 0000000..fd82f5b --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-datacontrol-view.h @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-datacontrol-view.h + * @brief This view provide the Apps tested the data control operations. + * Such as : SQL SELECT, UPDATE, DELETE, INSERT; as well some operations of Map type data control. + * @since_tizen 2.3 + * @author Golam Kayas (g.kayes@samsung.com) + * @date October, 2014 + * @bug data_control_sql_remove_cursor() api does not work. + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ +#ifndef __TBT_DATACONTROL_VIEW_H__ +#define __TBT_DATACONTROL_VIEW_H__ + + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_DC + +#include +#include "model/tbt-list.h" + + +/** + * @typedef _datacontrol_view + * @since_tizen 2.3 + * @brief A datacontrol viewer view handle. + */ +typedef struct _datacontrol_view datacontrol_view; + +/** + * @brief Create datacontrol_view_add + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] tbt_info Custom struct contains all the necessary information of the moduales + * @param[in] item Is the selected item of the Application home genlist + * @return Pointer of datacontrol_view on success, otherwise NULL + */ +datacontrol_view *datacontrol_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_DATACONTROL_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-display-view.h b/tbtcoreapp/inc/view/tbt-display-view.h new file mode 100644 index 0000000..2a04319 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-display-view.h @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-display-view.h + * @brief This view provide the Apps shows the dimensions of the device's display. + * @since_tizen 2.3 + * @author Golam Kayas (g.kayes@samsung.com) + * @date October, 2014 + * @bug NA + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __TBT_DISPLAY_VIEW_H__ +#define __TBT_DISPLAY_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_DISPLAY + +#include +#include "model/tbt-list.h" + + +/** + * @typedef display_view + * @since_tizen 2.3 + * @brief A display view handle. + */ +typedef struct _display_view display_view; + +/** + * @brief Create display_view_add + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] tbt_info Custom struct contains all the necessary information of the moduales + * @param[in] item Is the selected item of the Application home genlist + * @return Pointer of display_view on success, otherwise NULL + */ +display_view *display_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_DISPLAY_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-efl-callbacks.h b/tbtcoreapp/inc/view/tbt-efl-callbacks.h new file mode 100644 index 0000000..7ea7784 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-efl-callbacks.h @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-efl-callbacks.h + * @brief Checks eext_object_event_callback_del() and eext_object_event_callback_add() functionality. + * @since_tizen 2.3 + * @author Muntasir (mk.chy@samsung.com) + * @date December, 2014 + * @bug NA + * @credit + * + */ + +#ifndef __TBT_EFL_CALLBACKS_H__ +#define __TBT_EFL_CALLBACKS_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_EFL + +#include +#include "model/tbt-list.h" + + +/** + * @typedef efl_callbacks_view + * @since_tizen 2.3 + */ +typedef struct _efl_callbacks_view efl_callbacks_view; + +/** + * @brief Create EFL test view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of callback on success, otherwise NULL + */ +efl_callbacks_view *efl_callbacks_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_LOCAL_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-event-view.h b/tbtcoreapp/inc/view/tbt-event-view.h new file mode 100644 index 0000000..0b4a165 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-event-view.h @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-event-view.h + * @brief Checks app event callback + * @since_tizen 2.3 + * @author Amlan Chowdhury (amlan.c@samsung.com) + * @date December, 2014 + * @credit + * + */ + +#ifndef __TBT_EVENT_VIEW_H__ +#define __TBT_EVENT_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_EVENT + +#include +#include "model/tbt-list.h" + + +/** + * @typedef event_viewer_view + * @since_tizen 2.3 + * @brief A event viewer view handle. + */ +typedef struct _event_view event_view; + +/** + * @brief Create event view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of event_view on success, otherwise NULL + */ +event_view *event_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_LOCAL_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-feature-view.h b/tbtcoreapp/inc/view/tbt-feature-view.h new file mode 100644 index 0000000..0bf5164 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-feature-view.h @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-feature-view.h + * @brief checks availability of features in device + * @since_tizen 2.3 + * @author A B M Nazibullah(nazib.ullah@samsung.com) + * @date October, 2014 + * @bug NA + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __TBT_FEATURE_VIEW_H__ +#define __TBT_FEATURE_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_FEATURE + +#include +#include "model/tbt-list.h" + + +/** + * @typedef feature_view + * @since_tizen 2.3 + * @brief A feature viewer view handle. + */ +typedef struct _feature_view feature_view; + +/** + * @brief Add feature view + * @since_tizen 2.3 + * @param[in] app The pointer to _app_data instance + * @param[in] navi The naviframe object + * @return Feature viewer view data + */ +feature_view *feature_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_FEATURE_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-genlist-view.h b/tbtcoreapp/inc/view/tbt-genlist-view.h new file mode 100644 index 0000000..aefca3a --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-genlist-view.h @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +/** + * @file tbt-genlist-view.h + * @brief Brief description of file. + * Detailed description of file. + * @since_tizen 2.3 + * @author kallol Kumar (kallol.kumar@samsung.com) + * @date October, 2014 + * @bug No Known bugs + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __TBT_GENLIST_VIEW_H__ +#define __TBT_GENLIST_VIEW_H__ + +#include + +/** + * @brief Create tbt genlist view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @return Pointer of genlist on success, otherwise NULL + */ +Evas_Object *tbt_genlist_view_create(Evas_Object *navi); + +#endif /* __TBT_GENLIST_VIEW_H__ */ diff --git a/tbtcoreapp/inc/view/tbt-gps-view.h b/tbtcoreapp/inc/view/tbt-gps-view.h new file mode 100644 index 0000000..5979331 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-gps-view.h @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-gps-view.h + * @brief covers location retrieval + * starts location service using gps method and continuously updates the current location + * @since_tizen 2.3 + * @author golam kayes(g.kayes@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug location manager does not start in device + * @credit + * + */ + +#ifndef __TBT_GPS_VIEW_H__ +#define __TBT_GPS_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_GPS + +#include +#include "model/tbt-list.h" + + +/** + * @typedef gps_viewer_view + * @since_tizen 2.3 + * @brief A gps viewer view handle. + */ +typedef struct _gps_view gps_view; + +/** + * @brief Create gps camera view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of gps on success, otherwise NULL + */ +gps_view *gps_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_GPS_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-graphics-view.h b/tbtcoreapp/inc/view/tbt-graphics-view.h new file mode 100644 index 0000000..ff2e54d --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-graphics-view.h @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-graphics-view.h + * @brief covers graphics rendring + * initializes the graphics rendering using opengl + * @since_tizen 2.3 + * @author golam kayes(g.kayes@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug no known bug + * @credit + * + */ + +#ifndef __TBT_GRAPHICS_VIEW_H__ +#define __TBT_GRAPHICS_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_GRAPHICS + +#include +#include "model/tbt-list.h" + + +/** + * @typedef graphics_viewer_view + * @since_tizen 2.3 + * @brief A graphics viewer view handle. + */ +typedef struct _graphics_view graphics_view; + +/** + * @brief Create graphics view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of graphics on success, otherwise NULL + */ +graphics_view *graphics_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_GRAPHICS_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-image-view.h b/tbtcoreapp/inc/view/tbt-image-view.h new file mode 100644 index 0000000..4927979 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-image-view.h @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-image-view.h + * @brief shows image using elm APIs + * image of various format are shown of screen using elm at one portion of the screen + * @since_tizen 2.3 + * @author golam kayes(g.kayes@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug no known bug + * @credit + * + */ + +#ifndef __TBT_IMAGE_VIEW_H__ +#define __TBT_IMAGE_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_IMAGEVIEW + +#include +#include "model/tbt-list.h" + + +/** + * @typedef image_viewer_view + * @since_tizen 2.3 + * @brief A image viewer view handle. + */ +typedef struct _image_view image_view; + +/** + * @brief Create tbt image view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of image on success, otherwise NULL + */ +image_view *image_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_IMAGE_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-ime-view.h b/tbtcoreapp/inc/view/tbt-ime-view.h new file mode 100644 index 0000000..efb8516 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-ime-view.h @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-input-view.h + * @since_tizen 2.4 + * @brief Checks the input field is working or not. + * @author Golam Kayas(g.kayes) + * @date JUNE, 2015 + * @bug no known bug + * @credit + * + */ +#ifndef TBT_IME_VIEW_H_ +#define TBT_IME_VIEW_H_ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_IME + +#include +#include "model/tbt-list.h" + + +/** + * @typedef ime_view + * @since_tizen 2.a + * @brief A ime viewer view handle. + */ +typedef struct _ime_view ime_view; + +/** + * @brief Add ime viewer view + * @since_tizen 2.3 + * @param[in] app The pointer to _app_data instance + * @param[in] navi The naviframe object + * @return ime viewer view data + */ +ime_view *ime_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_IME_VIEW_H__ + diff --git a/tbtcoreapp/inc/view/tbt-input-view.h b/tbtcoreapp/inc/view/tbt-input-view.h new file mode 100644 index 0000000..5bd4813 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-input-view.h @@ -0,0 +1,53 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-input-view.h + * @since_tizen 2.3 + * @brief Checks the input field is working or not. + * @author A B M Nazibullah (nazib.ullah@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug no known bug + * @credit + * + */ +#ifndef __TBT_INPUT_VIEW_H__ +#define __TBT_INPUT_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_KEYPAD + +#include +#include "model/tbt-list.h" + + +/** + * @typedef input_view + * @since_tizen 2.3 + * @brief A input viewer view handle. + */ +typedef struct _input_view input_view; + +/** + * @brief Add input viewer view + * @since_tizen 2.3 + * @param[in] app The pointer to _app_data instance + * @param[in] navi The naviframe object + * @return input viewer view data + */ +input_view *input_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_INPUT_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-list-view.h b/tbtcoreapp/inc/view/tbt-list-view.h new file mode 100644 index 0000000..18e8765 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-list-view.h @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-list-view.h + * @since_tizen 2.3 + * @brief creates the main genlist + * @author amlan.c@samsung.com + * @date October, 2014 + * @bug no known bug + * @credit + * + */ + +#ifndef __TBT_LIST_VIEW_H__ +#define __TBT_LIST_VIEW_H__ + +#include + +/** + * @brief Create tbt list view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @return Main layout on success, otherwise NULL + */ +Evas_Object *tbt_list_view_create(Evas_Object *navi); + +#endif /* __TBT_LIST_VIEW_H__ */ diff --git a/tbtcoreapp/inc/view/tbt-local-view.h b/tbtcoreapp/inc/view/tbt-local-view.h new file mode 100644 index 0000000..62e4104 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-local-view.h @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-local-view.h + * @brief This view provide the Apps tested the video playing capability of the device. + * @since_tizen 2.3 + * @author Golam Kayas (g.kayes@samsung.com) + * @date October, 2014 + * @bug No known bug. + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __TBT_LOCAL_VIEW_H__ +#define __TBT_LOCAL_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_LOCAL + +#include +#include "model/tbt-list.h" + + +/** + * @typedef _local_view + * @since_tizen 2.3 + * @brief A local viewer view handle. + */ +typedef struct _local_view local_view; + +/** + * @brief Create local_view_add + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] tbt_info Custom struct contains all the necessary information of the moduales + * @param[in] item Is the selected item of the Application home genlist + * @return Pointer of local_view on success, otherwise NULL + */ +local_view *local_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_LOCAL_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-mock-view.h b/tbtcoreapp/inc/view/tbt-mock-view.h new file mode 100644 index 0000000..74e65bf --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-mock-view.h @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-mock-view.h + * @brief Feeding input event, EFL API mock event test. + * @since_tizen 2.3 + * @author Muntasir Kabir (mk.chy@samsung.com) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __TBT_MOCK_VIEW_H__ +#define __TBT_MOCK_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_MOCK + +#include +#include +#include "model/tbt-list.h" + + +/** + * @typedef mock_view + * @since_tizen 2.3 + * @brief A image viewer view handle. + */ +typedef struct _mock_view mock_view; + +/** + * @brief Create tbt mock view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of touch on success, otherwise NULL + */ +mock_view *mock_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_MOCK_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-nfc-view.h b/tbtcoreapp/inc/view/tbt-nfc-view.h new file mode 100644 index 0000000..a224d40 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-nfc-view.h @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-nfc-view.h + * @brief covers NFC APIs + * covers NFC operations + * @since_tizen 2.3 + * @author A. B. M. Nazibullah(nazib.ullah@samsung.com) + * @date October, 2014 + * @bug None + * @credit + * + */ + +#ifndef __TBT_NFC_VIEW_H__ +#define __TBT_NFC_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_NFC + +#include +#include +#include "model/tbt-list.h" + + +/** + * @typedef nfc_viewer_view + * @since_tizen 2.3 + * @brief A nfc viewer view handle. + */ +typedef struct _nfc_view nfc_view; + +/** + * @brief Create nfc view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of nfc on success, otherwise NULL + */ +nfc_view *nfc_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_NFC_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-oauth2-view.h b/tbtcoreapp/inc/view/tbt-oauth2-view.h new file mode 100644 index 0000000..a4b25ad --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-oauth2-view.h @@ -0,0 +1,70 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-oauth2-view.h + * @brief checks availability of oauth2s in device + * @since_tizen 2.4 + * @author A B M Nazibullah(nazib.ullah@samsung.com) + * @date June, 2015 + * @bug NA + * @credit + * + */ + +#ifndef __TBT_OAUTH2_VIEW_H__ +#define __TBT_OAUTH2_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_OAUTH2 + +#include +#include "model/tbt-list.h" +#include "view/tbt-common-view.h" + +struct _oauth2_info_view +{ + common_view* view; + const char *access_token; + const char *refresh_token; + long long int expire_in; + const char *token_type; + const char *scope; + const char* state; + const char* custom_data; +}; + +/** + * @typedef oauth2_view + * @since_tizen 2.3 + * @brief A oauth2 viewer view handle. + */ +typedef struct _oauth2_view oauth2_view; +typedef struct _oauth2_info_view oauth2_info_view; + +/** + * @brief Add oauth2 view + * @since_tizen 2.3 + * @param[in] app The pointer to _app_data instance + * @param[in] navi The naviframe object + * @return Feature viewer view data + */ +oauth2_view *oauth2_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); +oauth2_info_view *_oauth2_info_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); +void _oauth2_info_show(void* data); + +#endif +#endif // __TBT_OAUTH2_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-pick-view.h b/tbtcoreapp/inc/view/tbt-pick-view.h new file mode 100644 index 0000000..cdccdf9 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-pick-view.h @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-pick-view.h + * @brief pick single and multiple item. + * @since_tizen 2.3 + * @author Muntasir Kabir (mk.chy@samsung.com) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __TBT_PICK_VIEW_H__ +#define __TBT_PICK_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_APP + +#include +#include "model/tbt-list.h" + + +/** + * @typedef pick_view + * @since_tizen 2.3 + * @brief A pick viewer view handle. + */ +typedef struct _pick_view pick_view; + +/** + * @brief Add pick view + * @since_tizen 2.3 + * @param[in] app The pointer to _app_data instance + * @param[in] navi The naviframe object + * @return pick view data + */ +pick_view *pick_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_PCIK_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-push-view.h b/tbtcoreapp/inc/view/tbt-push-view.h new file mode 100644 index 0000000..d3192c7 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-push-view.h @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-push-view.h + * @brief activates the push service and sends a request for push message at a remote server and finally launches the TBT applicatio when the push message is received + * @since_tizen 2.3 + * @author A B M Nazibullah (nazib.ullah@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __TBT_PUSH_VIEW_H__ +#define __TBT_PUSH_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_PUSH + +#include +#include "model/tbt-list.h" +#include +#include +#include +#include +#include +#include +#include +#include + + +/** + * @typedef push_viewer_view + * @since_tizen 2.3 + * @brief A push viewer view handle. + */ +typedef struct _push_view push_view; + +/** + * @brief Create tbt push view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of push on success, otherwise NULL + */ +push_view *push_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_PUSH_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-runtimeinfo-view.h b/tbtcoreapp/inc/view/tbt-runtimeinfo-view.h new file mode 100644 index 0000000..fa16bd3 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-runtimeinfo-view.h @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-runtimeinfo-view.h + * @brief retrieves runtime info + * @since_tizen 2.3 + * @author A. B. M. Nazibullah(nazib.ullah@samsung.com) + * @date October, 2014 + * @bug none + * @credit + * @credit + * + */ + +#ifndef __TBT_RUNTIME_VIEW_H__ +#define __TBT_RUNTIME_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_RUNTIME + +#include +#include "model/tbt-list.h" +#include + + +/** + * @typedef runtimeinfo_viewer_view + * @since_tizen 2.3 + * @brief A runtimeinfo viewer view handle. + */ +typedef struct _runtimeinfo_view runtimeinfo_view; + +/** + * @brief Create runtimeinfo view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of runtimeinfo on success, otherwise NULL + */ +runtimeinfo_view *runtimeinfo_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_RUNTIME_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-sensor-view.h b/tbtcoreapp/inc/view/tbt-sensor-view.h new file mode 100644 index 0000000..e02864a --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-sensor-view.h @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-sensor-view.h + * @since_tizen 2.3 + * @brief checks the sensors works or not + * @author A B M Nazibullah (nazib.ullah@samsung.com) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ +#ifndef __TBT_SENSOR_VIEW_H__ +#define __TBT_SENSOR_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_SENSOR + +#include +#include "model/tbt-list.h" +#include + + +/** + * @typedef sensor_view + * @since_tizen 2.3 + * @brief A sensor viewer view handle. + */ +typedef struct _sensor_view sensor_view; + +/** + * @brief Add sensor viewer view + * @since_tizen 2.3 + * @param[in] app The pointer to _app_data instance + * @param[in] navi The naviframe object + * @return sensor viewer view data + */ +sensor_view *sensor_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif /* __TBT_SENSOR_VIEW_H__ */ diff --git a/tbtcoreapp/inc/view/tbt-shortcut-view.h b/tbtcoreapp/inc/view/tbt-shortcut-view.h new file mode 100644 index 0000000..b88f229 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-shortcut-view.h @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-shortcut-view.h + * @brief create shortcut of application in home screen + * + * @since_tizen 2.3 + * @author Md Nazmus Saqib (saqib.nzms@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug Do not show icon and name of shortcut + * @credit + * + */ + +#ifndef __TBT_SHORTCUT_VIEW_H__ +#define __TBT_SHORTCUT_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_SHORTCUT + +#include +#include "model/tbt-list.h" +#include + + +/** + * @typedef shortcut_view + * @since_tizen 2.3 + * @brief A shortcut view handle. + */ +typedef struct _shortcut_view shortcut_view; + +/** + * @brief Create shortcut view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return create shortcut success, otherwise NULL + */ +shortcut_view *shortcut_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_SHORTCUT_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-sound-view.h b/tbtcoreapp/inc/view/tbt-sound-view.h new file mode 100644 index 0000000..7396b2a --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-sound-view.h @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-sound-view.h + * @brief This view provide the Apps tested the sound playing capability of the device and the volume functionality. + * @since_tizen 2.3 + * @author Golam Kayas (g.kayes@samsung.com) + * @date October, 2014 + * @bug No known bug. + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __TBT_SOUND_VIEW_H__ +#define __TBT_SOUND_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_AUDIO + +#include +#include "model/tbt-list.h" + + +/** + * @typedef _sound_view + * @since_tizen 2.3 + * @brief A sound viewer view handle. + */ +typedef struct _sound_view sound_view; + +/** + * @brief Create sound_view_add + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] tbt_info Custom struct contains all the necessary information of the moduales + * @param[in] item Is the selected item of the Application home genlist + * @return Pointer of sound_view on success, otherwise NULL + */ +sound_view *sound_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_SOUND_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-touch-view.h b/tbtcoreapp/inc/view/tbt-touch-view.h new file mode 100644 index 0000000..80ef376 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-touch-view.h @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-touch-view.h + * @brief covers touch point implementation + * draws line following the starting and ending point on the screen + * @since_tizen 2.3 + * @author Muntasir Kabir (mk.chy@samsung.com) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __TBT_TOUCH_VIEW_H__ +#define __TBT_TOUCH_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_TOUCH + +#include +#include "model/tbt-list.h" + + +/** + * @typedef touch_view + * @since_tizen 2.3 + * @brief A touch view handle. + */ +typedef struct _touch_view touch_view; + +/** + * @brief Create tbt touch view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of touch on success, otherwise NULL + */ +touch_view *touch_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_TOUCH_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-ui-view.h b/tbtcoreapp/inc/view/tbt-ui-view.h new file mode 100644 index 0000000..0c31673 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-ui-view.h @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-ui-view.h + * @brief This view provide the apps to taste the UI resize, shape, drawable, alpha and font features of the elm APIs + * @since_tizen 2.3 + * @author Muntasir Kabir (mk.chy@samsung.com) + * @date October, 2014 + * @bug No known bug. + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __TBT_UI_VIEW_H__ +#define __TBT_UI_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_UI + +#include +#include "model/tbt-list.h" + + +/** + * @typedef ui_view + * @since_tizen 2.3 + * @brief An ui view handle. + */ +typedef struct _ui_view ui_view; + +/** + * @brief Create UI view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return Pointer of UI on success, otherwise NULL + */ +ui_view *ui_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_UI_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-widget-view.h b/tbtcoreapp/inc/view/tbt-widget-view.h new file mode 100644 index 0000000..df76085 --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-widget-view.h @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-widget-view.h + * @since_tizen 2.4 + * @brief Checks the widget app is launching or not. + * @author Md. Rokib Khan(r.khan) + * @date JUNE, 2015 + * @bug no known bug + * @credit + * + */ +#ifndef TBT_WIDGET_VIEW_H_ +#define TBT_WIDGET_VIEW_H_ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_WIDGET + +#include +#include "model/tbt-list.h" + + +/** + * @typedef widget_view + * @since_tizen 2.a + * @brief A widget viewer view handle. + */ +typedef struct _widget_view widget_view; + +/** + * @brief Add widget viewer view + * @since_tizen 2.3 + * @param[in] app The pointer to _app_data instance + * @param[in] navi The naviframe object + * @return widget viewer view data + */ +widget_view *widget_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // TBT_WIDGET_VIEW_H_ + diff --git a/tbtcoreapp/inc/view/tbt-wifi-view.h b/tbtcoreapp/inc/view/tbt-wifi-view.h new file mode 100644 index 0000000..4cee9cc --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-wifi-view.h @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-wifi-view.h + * @brief This view provide the Apps tested the wifi activate/deactivate functionality. + * @since_tizen 2.3 + * @author Golam Kayas (g.kayes@samsung.com) + * @date October, 2014 + * @bug No known bug. + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __TBT_WIFI_VIEW_H__ +#define __TBT_WIFI_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_WIFI + +#include +#include "model/tbt-list.h" + + +/** + * @typedef _wifi_view + * @since_tizen 2.3 + * @brief A wifi viewer view handle. + */ +typedef struct _wifi_view wifi_view; + +/** + * @brief Create wifi_view_add + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] tbt_info Custom struct contains all the necessary information of the moduales + * @param[in] item Is the selected item of the Application home genlist + * @return Pointer of wifi_view on success, otherwise NULL + */ +wifi_view *wifi_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_WIFI_VIEW_H__ diff --git a/tbtcoreapp/inc/view/tbt-wifidirect-view.h b/tbtcoreapp/inc/view/tbt-wifidirect-view.h new file mode 100644 index 0000000..c571f6e --- /dev/null +++ b/tbtcoreapp/inc/view/tbt-wifidirect-view.h @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-wifidirect-view.h + * @brief connect device via Wifi Direct + * @since_tizen 2.3 + * @author Md Nazmus Saqib(saqib.nzms) and salman rahman(salman.ran) + * @date October, 2014 + * @bug NA + * @credit + * + */ + +#ifndef __TBT_WIFIDIRECT_VIEW_H__ +#define __TBT_WIFIDIRECT_VIEW_H__ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_WIFIDIRECT + +#include +#include "model/tbt-list.h" + + +/** + * @typedef wifidirect_viewer_view + * @since_tizen 2.3 + * @brief A wifidirect viewer view handle. + */ +typedef struct _wifidirect_view wifidirect_view; +typedef struct _wifidirect_info_view wifidirect_info_view; + +/** + * @brief Create wifi direct view + * @since_tizen 2.3 + * @param[in] navi Parent naviframe + * @param[in] custom structute to hold tbt application information + * @param[in] item of the main tbt menu + * @return wifi direct view data on success, otherwise NULL + */ +wifidirect_view *wifidirect_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); +wifidirect_info_view *_wifidirect_info_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item); + +#endif +#endif // __TBT_WIFIDIRECT_VIEW_H__ diff --git a/tbtcoreapp/inc/window.h b/tbtcoreapp/inc/window.h new file mode 100644 index 0000000..8dc1f4b --- /dev/null +++ b/tbtcoreapp/inc/window.h @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file window.h + * @brief + * @since_tizen 2.3 + * @author (amlan.c@samsung.com) + * @date October, 2014 + * @bug No known bug. + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#ifndef __WINDOW_H__ +#define __WINDOW_H__ + +#include + +typedef struct _window window; + +/* + * @brief Create application main window + * @since_tizen 2.3 + * @return Window on success, otherwise NULL + */ +window *win_create(); + +/* + * @brief return win handle + * @since_tizen 2.3 + * @return Evas_Object* on success, otherwise NULL + */ +Evas_Object* win_get_win_handle(const window* win); + +/* + * @brief Lower application window to hide application without exiting + * @since_tizen 2.3 + * @param[in] obj Application window + */ +void win_lower(window *obj); + +/* + * @brief Destroy application main window + * @since_tizen 2.3 + * @param[in] obj Application window + */ + +void win_destroy(window *obj); + +/* + * @brief Set content to be displayed in window + * @since_tizen 2.3 + * @param[in] win Application window + * @param[in] content Window content + */ +void win_set_layout(window *win, Evas_Object *layout); + +/* + * @brief Get window layout to use as a parent for window content + * @since_tizen 2.3 + * @param[in] win Application window + * @return Window layout + */ +Evas_Object *win_get_host_layout(const window *win); + +#endif /* __WINDOW_H__ */ diff --git a/tbtcoreapp/project_def.prop b/tbtcoreapp/project_def.prop new file mode 100644 index 0000000..ec6f5e2 --- /dev/null +++ b/tbtcoreapp/project_def.prop @@ -0,0 +1,11 @@ +APPNAME = tbtcoreapp + +type = app +profile = wearable-2.3.1 + +USER_SRCS = src/tbtcoreapp.c +USER_DEFS = +USER_INC_DIRS = inc +USER_OBJS = +USER_LIBS = +USER_EDCS = res/edje/tbtcoreapp.edc diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/animation_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/animation_viewer.edc new file mode 100644 index 0000000..914b967 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/animation_viewer.edc @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "animation_viewer"; + parts{ + part{ + name: "animation_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 1.0; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/bluetooth_le_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/bluetooth_le_viewer.edc new file mode 100755 index 0000000..afa7b3f --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/bluetooth_le_viewer.edc @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "bluetoothle_viewer"; + parts{ + part{ + name: "bluetoothle_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetoothle_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetoothle_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetoothle_list"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/bluetooth_oob_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/bluetooth_oob_viewer.edc new file mode 100644 index 0000000..531b64c --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/bluetooth_oob_viewer.edc @@ -0,0 +1,37 @@ +#define TEXT_HEIGHT 0.08 + + collections + { + base_scale: 1.8; + group + { + name: "bluetooth_oob_viewer"; + parts{ + part{ + name: "bluetooth_oob_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + } + rel2 { + relative: 1.0 1.0 ; } + visible: 1; + + } + } + } + } diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/bluetooth_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/bluetooth_viewer.edc new file mode 100644 index 0000000..71fa2cd --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/bluetooth_viewer.edc @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_viewer"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.90; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetooth_list"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } + + group + { + name: "bluetooth_viewer_cancel_check"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.25 1.0; + to_y: "bluetooth_list"; + } + rel2{ + relative: 0.75 0.90; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/camera_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/camera_viewer.edc new file mode 100644 index 0000000..135df50 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/camera_viewer.edc @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "camera_viewer"; + parts{ + part{ + name: "camera_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "camera_text"; + } + rel2{ + relative: 1.0 0.45; + } + } + } + + part{ + name: "video_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; + to_y: "camera_view"; } + rel2 {relative: 1.0 (0.45 + TEXT_HEIGHT); } + } + } + + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "video_text"; + } + rel2{ + relative: 1.0 0.90; + } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "video_view"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } + + group + { + name: "camera_face"; + parts{ + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative: 1.0 1.0; + } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/custom_button.edc b/tbtcoreapp/res/edje/2.3.1/mobile/custom_button.edc new file mode 100644 index 0000000..7ae12a3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/custom_button.edc @@ -0,0 +1,383 @@ +collections { + + group { name: "elm/button/base/chucknorris"; + + alias: "elm/button/base/default"; + + parts { + + part { name: "border"; + + type: RECT; + + description { state: "default" 0.0; + + color: 0 0 0 255; + + } + + description { state: "in" 0.0; + + color: 50 180 180 255; + + } + + } + + part { name: "base"; + + type: RECT; + + mouse_events: 1; + + description { state: "default" 0.0; + + rel1.to: "border"; + + rel1.offset: 1 1; + + rel2.to: "border"; + + rel2.offset: -2 -2; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + color: 230 230 230 255; + + } + + } + + part { name: "elm.swallow.content"; + + type: SWALLOW; + + mouse_events: 0; + + description { state: "default" 0.0; + + fixed: 1 0; + + visible: 0; + + align: 0.0 0.5; + + rel1.offset: 4 4; + + rel2.offset: 3 -5; + + rel2.relative: 0.0 1.0; + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: 4 -5; + + } + + description { state: "icononly" 0.0; + + inherit: "default" 0.0; + + fixed: 0 0; + + visible: 1; + + align: 0.5 0.5; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: -5 -5; + + rel2.relative: 1.0 1.0; + + } + + } + + part { name: "elm.text"; + + type: TEXT; + + mouse_events: 0; + + scale: 1; + + description { state: "default" 0.0; + + visible: 0; + + rel1.to_x: "elm.swallow.content"; + + rel1.relative: 1.0 0.0; + + rel1.offset: 0 4; + + rel2.offset: -5 -5; + + color: 0 0 0 255; + + text { + + font: "Sans"; + + size: 10; + + min: 0 0; + + text_class: "button"; + + } + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + } + + description { state: "disabled_visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + } + + programs { + + program { name: "button_mouse_in"; + + signal: "mouse,in"; + + source: "base"; + + action: STATE_SET "in" 0.0; + + target: "border"; + + } + + program { name: "button_mouse_out"; + + signal: "mouse,out"; + + source: "base"; + + action: STATE_SET "default" 0.0; + + target: "border"; + + } + + program { name: "button_unclick"; + + signal: "mouse,up,1"; + + source: "base"; + + action: SIGNAL_EMIT "elm,action,click" ""; + + } + + program { name: "button_click"; + + signal: "mouse,down,1"; + + source: "base"; + + } + + program { name: "text_show"; + + signal: "elm,state,text,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "icononly")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + set_state(PART:"elm.text", "visible", 0.0); + + } + + } + + program { name: "text_hide"; + + signal: "elm,state,text,hidden"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + program { name: "icon_show"; + + signal: "elm,state,icon,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + else + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + } + + } + + program { name: "icon_hide"; + + signal: "elm,state,icon,hidden"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "elm.swallow.content"; + + } + + program { name: "disable"; + + signal: "elm,state,disabled"; + + source: "elm"; + + action: STATE_SET "disabled" 0.0; + + target: "base"; + + after: "disable_text"; + + } + + program { name: "disable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.text", "disabled_visible", 0.0); + + else + + set_state(PART:"elm.text", "disabled", 0.0); + + } + + } + + program { name: "enable"; + + signal: "elm,state,enabled"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "base"; + + after: "enable_text"; + + } + + program { name: "enable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "disabled_visible")) + + set_state(PART:"elm.text", "visible", 0.0); + + else + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + } + + } + +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/datacontrol_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/datacontrol_viewer.edc new file mode 100644 index 0000000..4639920 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/datacontrol_viewer.edc @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "datacontrol_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.90; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } + + group + { + name: "cursor_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/display_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/display_viewer.edc new file mode 100644 index 0000000..acd588f --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/display_viewer.edc @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "display_viewer"; + parts{ + part{ + name: "width_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "height_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 2*TEXT_HEIGHT; } + } + } + + part{ + name: "bpp_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 2*TEXT_HEIGHT; } + rel2 {relative: 1.0 3*TEXT_HEIGHT; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/efl_callback_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/efl_callback_viewer.edc new file mode 100644 index 0000000..3269bb6 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/efl_callback_viewer.edc @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "efl_test"; + parts{ + part{ + name: "_title"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.1; } + } + } + + part{ + name: "_callback"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative: 1.0 0.2; + } + } + } + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/event_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/event_viewer.edc new file mode 100644 index 0000000..9538dc2 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/event_viewer.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "event_viewer"; + parts{ + part{ + name: "language_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.0; } + } + } + + part{ + name: "orientation_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 TEXT_HEIGHT*2; } + } + } + + part{ + name: "region_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT*2; } + rel2 {relative: 1.0 TEXT_HEIGHT*3; } + } + } + part{ + name: "low_battery_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT*3; } + rel2 {relative: 1.0 TEXT_HEIGHT*4; } + } + } + part{ + name: "low_memory_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT*4; } + rel2 {relative: 1.0 TEXT_HEIGHT*5; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/feature_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/feature_viewer.edc new file mode 100644 index 0000000..da061a6 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/feature_viewer.edc @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "feature_viewer"; + parts{ + part{ + name: "feature_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 1.0; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/gps_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/gps_viewer.edc new file mode 100644 index 0000000..f84d22c --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/gps_viewer.edc @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "gps_viewer"; + parts{ + part{ + name: "lat_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "lon_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 2*TEXT_HEIGHT; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/graphics_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/graphics_viewer.edc new file mode 100644 index 0000000..9c2460c --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/graphics_viewer.edc @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "graphics_viewer"; + parts{ + part{ + name: "graphics_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 1.0; + } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/image_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/image_viewer.edc new file mode 100644 index 0000000..df6dc9e --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/image_viewer.edc @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "image_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 1.0; + } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/input_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/input_viewer.edc new file mode 100644 index 0000000..0f48a6a --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/input_viewer.edc @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "input_viewer"; + parts{ + part{ + name: "input_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 1.0; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/mock_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/mock_viewer.edc new file mode 100644 index 0000000..566261a --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/mock_viewer.edc @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "mock_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.1; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 1.0 0.9; } + } + } + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + } + rel2 { + relative: 1.0 1.0 ; } + visible: 1; + } + } + } + + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/nfc_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/nfc_viewer.edc new file mode 100644 index 0000000..d41432e --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/nfc_viewer.edc @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "nfc_viewer_tag"; + parts{ + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 0.90; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } + + + group + { + name: "nfc_viewer_p2p"; + parts{ + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 0.90; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/pick_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/pick_viewer.edc new file mode 100644 index 0000000..b1e5e1b --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/pick_viewer.edc @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "pick_viewer"; + parts{ + part{ + name: "pick_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "pick_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "pick_text"; + } + rel2{ + relative:1.0 0.90; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_y: "pick_list"; + relative: 0.0 1.0; + } + rel2 { relative: 1.0 1.0; } + visible: 1; + } + } + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/push_service.edc b/tbtcoreapp/res/edje/2.3.1/mobile/push_service.edc new file mode 100644 index 0000000..78a0009 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/push_service.edc @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "push_service"; + parts{ + part{ + name: "push_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "text_box_first"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "push_text"; + } + rel2{ + relative:1.0 TEXT_HEIGHT*2; + } + } + } + + part{ + name: "text_box_second"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "text_box_first"; + } + rel2{ + relative:1.0 TEXT_HEIGHT*3; + } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + } + rel2 { + relative: 1.0 1.0 ; } + visible: 1; + } + } + + + } +} +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/runtimeinfo_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/runtimeinfo_viewer.edc new file mode 100644 index 0000000..4beb863 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/runtimeinfo_viewer.edc @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 1.0 + +collections +{ + base_scale: 1.8; + group + { + name: "runtimeinfo_viewer"; + parts{ + part{ + name: "info_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.02 0.0; } + rel2 {relative: 0.98 TEXT_HEIGHT; } + } + } + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/sensor_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/sensor_viewer.edc new file mode 100644 index 0000000..e90c320 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/sensor_viewer.edc @@ -0,0 +1,400 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define GL_HEIGHT 0.4 + +collections +{ + base_scale: 1.8; + group + { + name: "sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 0.9; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.9; + } + rel2{ + relative: 1.0 1.0; + } + } + } + + } + } + group + { + name: "accelerometer_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 1.0; + } + } + } + + } + } + + + group + { + name: "gyro_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.35; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.35; + } + rel2{ + relative: 1.0 0.9; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.9; + } + rel2{ + relative: 1.0 1.0; + } + } + } + + } + } + + group + { + name: "magnatometer_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 1.0; + } + } + } + } + } + + +group + { + name: "pressure_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + } + } + + part{ + name: "text_view_label"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.02 0.5; + } + rel2{ + relative:1.0 0.6; + } + } + } + } + } + + + group + { + name: "light_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative:1.0 1.0; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.1; + } + } + } + + } + } + + group + { + name: "ultra_violet_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative:1.0 1.0; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.1; + } + } + } + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/shortcut_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/shortcut_viewer.edc new file mode 100644 index 0000000..9cc8319 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/shortcut_viewer.edc @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.1 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "shortcut_viewer"; + parts{ + + part{ + name: "shortcut_body"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 0.7 0.2; } + } + } + + part{ + name: "shortcut_body2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.7 0.1; } + rel2 {relative: 1.0 0.2; } + } + } + + part{ + name: "shortcut_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2; } + rel2 {relative: 1.0 0.3; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/sound_player.edc b/tbtcoreapp/res/edje/2.3.1/mobile/sound_player.edc new file mode 100644 index 0000000..d761a8e --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/sound_player.edc @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "sound_player"; + parts{ + part{ + name: "sound_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "icon_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "sound_text"; + } + rel2{ + relative:1.0 0.80; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part{ + name: "progressbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + rel1{ + relative: 0.0 1.0; + to: "icon_view"; + } + rel2{ + relative:1.0 0.90; + } + } + } + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_x: "left_padding"; + to_y: "progressbar"; + relative: 1.0 1.0; + } + rel2 { to_x: "right_padding"; + relative: 0.0 1.0; } + visible: 1; + } + } + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/touch_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/touch_viewer.edc new file mode 100644 index 0000000..f90c4f7 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/touch_viewer.edc @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "touch_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; to_y: "cursor_text"; } + rel2 {relative: 1.0 1.0; } + } + } + } + + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/ui_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/ui_viewer.edc new file mode 100644 index 0000000..1088a8c --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/ui_viewer.edc @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + + +collections +{ + base_scale: 1.8; + group + { + name: "ui_viewer"; + parts{ + part{ + name: "ui_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/video_player.edc b/tbtcoreapp/res/edje/2.3.1/mobile/video_player.edc new file mode 100644 index 0000000..970725b --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/video_player.edc @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "video_player"; + parts{ + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.895; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_x: "left_padding"; + relative: 1.0 0.90; + } + rel2 { to_x: "right_padding"; + relative: 0.0 1.0; } + visible: 1; + } + } + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/wifi_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/wifi_viewer.edc new file mode 100644 index 0000000..bccefa5 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/wifi_viewer.edc @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "wifi_viewer"; + parts{ + part{ + name: "wifi_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/wifidirect_info_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/wifidirect_info_viewer.edc new file mode 100644 index 0000000..0744b3e --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/wifidirect_info_viewer.edc @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "info1"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative: 1.0 0.2; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info2"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 1.0 0.3; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info3"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.3; + } + rel2{ + relative: 1.0 0.4; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info4"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info5"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.5; + } + rel2{ + relative: 1.0 0.6; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info6"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.6; + } + rel2{ + relative: 1.0 0.7; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "info7"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.7; + } + rel2{ + relative: 1.0 0.8; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/mobile/wifidirect_viewer.edc b/tbtcoreapp/res/edje/2.3.1/mobile/wifidirect_viewer.edc new file mode 100644 index 0000000..4dc5a9a --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/mobile/wifidirect_viewer.edc @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_info"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 TEXT_HEIGHT*2; } + } + } + + part{ + name: "wifidirect_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_list"; + } + rel2{ + relative: 1.0 0.90; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/animation_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/animation_viewer.edc new file mode 100644 index 0000000..48a5b49 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/animation_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "animation_viewer"; + parts{ + part{ + name: "animation_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/bluetooth_le_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/bluetooth_le_viewer.edc new file mode 100755 index 0000000..39a873e --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/bluetooth_le_viewer.edc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetoothle_viewer"; + parts{ + part{ + name: "bluetoothle_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetoothle_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetoothle_text"; + } + rel2{ + relative: 1.0 0.43; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetoothle_list"; + } + rel2 { + relative: 1.0 63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/bluetooth_oob_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/bluetooth_oob_viewer.edc new file mode 100644 index 0000000..e8ce456 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/bluetooth_oob_viewer.edc @@ -0,0 +1,41 @@ +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_oob_viewer"; + parts{ + part{ + name: "bluetooth_oob_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9 ; } + visible: 1; + + } + } + + WEARABLE_TOOLBAR_PART + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/bluetooth_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/bluetooth_viewer.edc new file mode 100644 index 0000000..c805d0b --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/bluetooth_viewer.edc @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_viewer"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetooth_list"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "bluetooth_viewer_cancel_check"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.70; + } + } + } + + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.25 1.0; + to_y: "bluetooth_list"; + } + rel2{ + relative: 0.75 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/camera_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/camera_viewer.edc new file mode 100644 index 0000000..f7f3822 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/camera_viewer.edc @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "camera_viewer"; + parts{ + part{ + name: "camera_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative: 1.0 0.23; + } + } + } + + part{ + name: "video_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.23;} + rel2 {relative: 1.0 (0.23 + TEXT_HEIGHT); } + } + } + + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 (0.23 + TEXT_HEIGHT); + } + rel2{ + relative: 1.0 0.45; + } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.47; + } + rel2 { + relative: 1.0 0.63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "camera_face"; + parts{ + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative: 1.0 0.9; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/custom_button.edc b/tbtcoreapp/res/edje/2.3.1/wearable/custom_button.edc new file mode 100644 index 0000000..7ae12a3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/custom_button.edc @@ -0,0 +1,383 @@ +collections { + + group { name: "elm/button/base/chucknorris"; + + alias: "elm/button/base/default"; + + parts { + + part { name: "border"; + + type: RECT; + + description { state: "default" 0.0; + + color: 0 0 0 255; + + } + + description { state: "in" 0.0; + + color: 50 180 180 255; + + } + + } + + part { name: "base"; + + type: RECT; + + mouse_events: 1; + + description { state: "default" 0.0; + + rel1.to: "border"; + + rel1.offset: 1 1; + + rel2.to: "border"; + + rel2.offset: -2 -2; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + color: 230 230 230 255; + + } + + } + + part { name: "elm.swallow.content"; + + type: SWALLOW; + + mouse_events: 0; + + description { state: "default" 0.0; + + fixed: 1 0; + + visible: 0; + + align: 0.0 0.5; + + rel1.offset: 4 4; + + rel2.offset: 3 -5; + + rel2.relative: 0.0 1.0; + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: 4 -5; + + } + + description { state: "icononly" 0.0; + + inherit: "default" 0.0; + + fixed: 0 0; + + visible: 1; + + align: 0.5 0.5; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: -5 -5; + + rel2.relative: 1.0 1.0; + + } + + } + + part { name: "elm.text"; + + type: TEXT; + + mouse_events: 0; + + scale: 1; + + description { state: "default" 0.0; + + visible: 0; + + rel1.to_x: "elm.swallow.content"; + + rel1.relative: 1.0 0.0; + + rel1.offset: 0 4; + + rel2.offset: -5 -5; + + color: 0 0 0 255; + + text { + + font: "Sans"; + + size: 10; + + min: 0 0; + + text_class: "button"; + + } + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + } + + description { state: "disabled_visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + } + + programs { + + program { name: "button_mouse_in"; + + signal: "mouse,in"; + + source: "base"; + + action: STATE_SET "in" 0.0; + + target: "border"; + + } + + program { name: "button_mouse_out"; + + signal: "mouse,out"; + + source: "base"; + + action: STATE_SET "default" 0.0; + + target: "border"; + + } + + program { name: "button_unclick"; + + signal: "mouse,up,1"; + + source: "base"; + + action: SIGNAL_EMIT "elm,action,click" ""; + + } + + program { name: "button_click"; + + signal: "mouse,down,1"; + + source: "base"; + + } + + program { name: "text_show"; + + signal: "elm,state,text,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "icononly")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + set_state(PART:"elm.text", "visible", 0.0); + + } + + } + + program { name: "text_hide"; + + signal: "elm,state,text,hidden"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + program { name: "icon_show"; + + signal: "elm,state,icon,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + else + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + } + + } + + program { name: "icon_hide"; + + signal: "elm,state,icon,hidden"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "elm.swallow.content"; + + } + + program { name: "disable"; + + signal: "elm,state,disabled"; + + source: "elm"; + + action: STATE_SET "disabled" 0.0; + + target: "base"; + + after: "disable_text"; + + } + + program { name: "disable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.text", "disabled_visible", 0.0); + + else + + set_state(PART:"elm.text", "disabled", 0.0); + + } + + } + + program { name: "enable"; + + signal: "elm,state,enabled"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "base"; + + after: "enable_text"; + + } + + program { name: "enable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "disabled_visible")) + + set_state(PART:"elm.text", "visible", 0.0); + + else + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + } + + } + +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/datacontrol_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/datacontrol_viewer.edc new file mode 100644 index 0000000..3630d5f --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/datacontrol_viewer.edc @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "datacontrol_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "cursor_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/display_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/display_viewer.edc new file mode 100644 index 0000000..9833963 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/display_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "display_viewer"; + parts{ + part{ + name: "width_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "height_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + } + } + + part{ + name: "bpp_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+3*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/efl_callback_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/efl_callback_viewer.edc new file mode 100644 index 0000000..81c62a8 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/efl_callback_viewer.edc @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "efl_test"; + parts{ + part{ + name: "_title"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + + part{ + name: "_callback"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.2; + } + } + } + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.25; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.42; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/event_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/event_viewer.edc new file mode 100644 index 0000000..85d21b8 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/event_viewer.edc @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "event_viewer"; + parts{ + part{ + name: "language_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "orientation_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + } + } + + part{ + name: "region_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + } + } + part{ + name: "low_battery_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + } + } + part{ + name: "low_memory_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*5; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/feature_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/feature_viewer.edc new file mode 100644 index 0000000..edc51c2 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/feature_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "feature_viewer"; + parts{ + part{ + name: "feature_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.43; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/gps_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/gps_viewer.edc new file mode 100644 index 0000000..86c473b --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/gps_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "gps_viewer"; + parts{ + part{ + name: "lat_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "lon_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 2*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/graphics_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/graphics_viewer.edc new file mode 100644 index 0000000..85b51a6 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/graphics_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "graphics_viewer"; + parts{ + part{ + name: "graphics_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/image_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/image_viewer.edc new file mode 100644 index 0000000..e9aa0df --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/image_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "image_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/input_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/input_viewer.edc new file mode 100644 index 0000000..10aedf4 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/input_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "input_viewer"; + parts{ + part{ + name: "input_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.63; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/mock_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/mock_viewer.edc new file mode 100644 index 0000000..d558f1d --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/mock_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "mock_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.1; } + rel2 {relative: 1.0 HEADER_HIGHT+0.26; } + } + } + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.26; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.43 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/nfc_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/nfc_viewer.edc new file mode 100644 index 0000000..7fb6810 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/nfc_viewer.edc @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "nfc_viewer_tag"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.17; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.46; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "nfc_viewer_p2p"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.17; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.46; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/pick_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/pick_viewer.edc new file mode 100644 index 0000000..5d35cc8 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/pick_viewer.edc @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.2 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "pick_viewer"; + parts{ + part{ + name: "pick_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "pick_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "pick_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.26; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING HEADER_HIGHT+0.43; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 HEADER_HIGHT+0.43; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_y: "pick_list"; + relative: 0.0 1.0; + } + rel2 { relative: 1.0 HEADER_HIGHT+0.43; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/push_service.edc b/tbtcoreapp/res/edje/2.3.1/wearable/push_service.edc new file mode 100644 index 0000000..612dc2e --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/push_service.edc @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.2 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "push_service"; + parts{ + part{ + name: "push_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "text_box_first"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "push_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*2; + } + } + } + + part{ + name: "text_box_second"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "text_box_first"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*3; + } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.46; + } + rel2 { + relative: 1.0 0.63 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/runtimeinfo_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/runtimeinfo_viewer.edc new file mode 100644 index 0000000..4566e2f --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/runtimeinfo_viewer.edc @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 1.0 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "runtimeinfo_viewer"; + parts{ + part{ + name: "info_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.02 0.0; } + rel2 {relative: 0.98 TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/sensor_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/sensor_viewer.edc new file mode 100644 index 0000000..dce8908 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/sensor_viewer.edc @@ -0,0 +1,415 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define GL_HEIGHT 0.13 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.26; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.26; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.43; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + group + { + name: "accelerometer_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.43; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + + group + { + name: "gyro_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+GL_HEIGHT; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.26; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.26; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.43; + } + } + } + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "magnatometer_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + +group + { + name: "pressure_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + } + } + + part{ + name: "text_view_label"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.02 0.5; + } + rel2{ + relative:1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "light_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.43; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "ultra_violet_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.43; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/shortcut_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/shortcut_viewer.edc new file mode 100644 index 0000000..268a28d --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/shortcut_viewer.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.1 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "shortcut_viewer"; + parts{ + + part{ + name: "shortcut_body"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 0.7 0.2; } + } + } + + part{ + name: "shortcut_body2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.7 0.1; } + rel2 {relative: 1.0 0.2; } + } + } + + part{ + name: "shortcut_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2; } + rel2 {relative: 1.0 0.3; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/sound_player.edc b/tbtcoreapp/res/edje/2.3.1/wearable/sound_player.edc new file mode 100644 index 0000000..8731bdf --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/sound_player.edc @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sound_player"; + parts{ + part{ + name: "sound_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "icon_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.18; + } + } + } + + + + part{ + name: "progressbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + rel1{ + relative: 0.0 HEADER_HIGHT+0.18; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.26; + } + } + } + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.28; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.43; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/touch_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/touch_viewer.edc new file mode 100644 index 0000000..e438fdb --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/touch_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "touch_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; to_y: "cursor_text"; } + rel2 {relative: 1.0 HEADER_HIGHT+0.43; } + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/ui_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/ui_viewer.edc new file mode 100644 index 0000000..4428f18 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/ui_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "ui_viewer"; + parts{ + part{ + name: "ui_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/video_player.edc b/tbtcoreapp/res/edje/2.3.1/wearable/video_player.edc new file mode 100644 index 0000000..9eb1969 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/video_player.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "video_player"; + parts{ + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.895; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_x: "left_padding"; + relative: 1.0 0.80; + } + rel2 { to_x: "right_padding"; + relative: 0.0 0.9; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/wearable_toolbar.edc b/tbtcoreapp/res/edje/2.3.1/wearable/wearable_toolbar.edc new file mode 100644 index 0000000..c24834b --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/wearable_toolbar.edc @@ -0,0 +1,14 @@ +#define WEARABLE_TOOLBAR_PART \ +part { name: "wearable_toolbar"; \ + type: SWALLOW; \ + description { \ + state: "default" 0.0; \ + rel1 { \ + relative: 0.0 0.63; \ + } \ + rel2 { \ + relative: 1.0 0.8; \ + } \ + visible: 1; \ + } \ +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/wifi_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/wifi_viewer.edc new file mode 100644 index 0000000..02fcb52 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/wifi_viewer.edc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifi_viewer"; + parts{ + part{ + name: "wifi_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/wifidirect_info_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/wifidirect_info_viewer.edc new file mode 100644 index 0000000..b537011 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/wifidirect_info_viewer.edc @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "info1"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative: 1.0 0.2; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info2"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 1.0 0.3; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info3"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.3; + } + rel2{ + relative: 1.0 0.4; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info4"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info5"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.5; + } + rel2{ + relative: 1.0 0.6; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info6"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.6; + } + rel2{ + relative: 1.0 0.7; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "info7"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.7; + } + rel2{ + relative: 1.0 0.8; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable/wifidirect_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable/wifidirect_viewer.edc new file mode 100644 index 0000000..c00827f --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable/wifidirect_viewer.edc @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_info"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 TEXT_HEIGHT*2; } + } + } + + part{ + name: "wifidirect_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_list"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/animation_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/animation_viewer.edc new file mode 100644 index 0000000..0764e82 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/animation_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "animation_viewer"; + parts{ + part{ + name: "animation_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/bluetooth_le_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/bluetooth_le_viewer.edc new file mode 100755 index 0000000..c6c0364 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/bluetooth_le_viewer.edc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetoothle_viewer"; + parts{ + part{ + name: "bluetoothle_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetoothle_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetoothle_text"; + } + rel2{ + relative: 1.0 0.43; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetoothle_list"; + } + rel2 { + relative: 1.0 63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/bluetooth_oob_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/bluetooth_oob_viewer.edc new file mode 100644 index 0000000..9e937f9 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/bluetooth_oob_viewer.edc @@ -0,0 +1,41 @@ +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_oob_viewer"; + parts{ + part{ + name: "bluetooth_oob_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.43; + } + rel2 { + relative: 1.0 0.6 ; } + visible: 1; + + } + } + + WEARABLE_TOOLBAR_PART + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/bluetooth_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/bluetooth_viewer.edc new file mode 100644 index 0000000..8198b31 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/bluetooth_viewer.edc @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HEIGHT 0.20 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_viewer"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HEIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HEIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 HEADER_HEIGHT+0.40; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetooth_list"; + } + rel2 { + relative: 1.0 HEADER_HEIGHT+0.5; + } + visible: 1; + } + } + + part { name: "wearable_toolbar"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HEIGHT+0.5; + } + rel2 { + relative: 1.0 HEADER_HEIGHT+0.6; + } + visible: 1; + } +} + + + + } + } + + group + { + name: "bluetooth_viewer_cancel_check"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HEIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HEIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 HEADER_HEIGHT+0.30; + } + } + } + + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HEIGHT+0.30; + } + rel2{ + relative: 1.0 HEADER_HEIGHT+0.44; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 HEADER_HEIGHT+0.5; + } + } + } + + + part { name: "wearable_toolbar"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HEIGHT+0.5; + } + rel2 { + relative: 1.0 HEADER_HEIGHT+0.60; + } + visible: 1; + } +} + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/camera_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/camera_viewer.edc new file mode 100644 index 0000000..301aaee --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/camera_viewer.edc @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "camera_viewer"; + parts{ + part{ + name: "camera_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + visible: 1; + rel1{ + relative: 0.0 0.33; + } + rel2{ + relative: 1.0 0.43; + } + } + } + + part{ + name: "video_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.43;} + rel2 {relative: 1.0 0.51; } + } + } + + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.51; + } + rel2{ + relative: 1.0 0.62; + } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.62; + } + rel2 { + relative: 1.0 0.7; + } + visible: 1; + } + } + + part { name: "wearable_toolbar"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.7; + } + rel2 { + relative: 1.0 0.8; + } + visible: 1; + } + } + + } + } + + group + { + name: "camera_face"; + parts{ + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative: 1.0 0.9; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/custom_button.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/custom_button.edc new file mode 100644 index 0000000..7ae12a3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/custom_button.edc @@ -0,0 +1,383 @@ +collections { + + group { name: "elm/button/base/chucknorris"; + + alias: "elm/button/base/default"; + + parts { + + part { name: "border"; + + type: RECT; + + description { state: "default" 0.0; + + color: 0 0 0 255; + + } + + description { state: "in" 0.0; + + color: 50 180 180 255; + + } + + } + + part { name: "base"; + + type: RECT; + + mouse_events: 1; + + description { state: "default" 0.0; + + rel1.to: "border"; + + rel1.offset: 1 1; + + rel2.to: "border"; + + rel2.offset: -2 -2; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + color: 230 230 230 255; + + } + + } + + part { name: "elm.swallow.content"; + + type: SWALLOW; + + mouse_events: 0; + + description { state: "default" 0.0; + + fixed: 1 0; + + visible: 0; + + align: 0.0 0.5; + + rel1.offset: 4 4; + + rel2.offset: 3 -5; + + rel2.relative: 0.0 1.0; + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: 4 -5; + + } + + description { state: "icononly" 0.0; + + inherit: "default" 0.0; + + fixed: 0 0; + + visible: 1; + + align: 0.5 0.5; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: -5 -5; + + rel2.relative: 1.0 1.0; + + } + + } + + part { name: "elm.text"; + + type: TEXT; + + mouse_events: 0; + + scale: 1; + + description { state: "default" 0.0; + + visible: 0; + + rel1.to_x: "elm.swallow.content"; + + rel1.relative: 1.0 0.0; + + rel1.offset: 0 4; + + rel2.offset: -5 -5; + + color: 0 0 0 255; + + text { + + font: "Sans"; + + size: 10; + + min: 0 0; + + text_class: "button"; + + } + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + } + + description { state: "disabled_visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + } + + programs { + + program { name: "button_mouse_in"; + + signal: "mouse,in"; + + source: "base"; + + action: STATE_SET "in" 0.0; + + target: "border"; + + } + + program { name: "button_mouse_out"; + + signal: "mouse,out"; + + source: "base"; + + action: STATE_SET "default" 0.0; + + target: "border"; + + } + + program { name: "button_unclick"; + + signal: "mouse,up,1"; + + source: "base"; + + action: SIGNAL_EMIT "elm,action,click" ""; + + } + + program { name: "button_click"; + + signal: "mouse,down,1"; + + source: "base"; + + } + + program { name: "text_show"; + + signal: "elm,state,text,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "icononly")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + set_state(PART:"elm.text", "visible", 0.0); + + } + + } + + program { name: "text_hide"; + + signal: "elm,state,text,hidden"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + program { name: "icon_show"; + + signal: "elm,state,icon,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + else + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + } + + } + + program { name: "icon_hide"; + + signal: "elm,state,icon,hidden"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "elm.swallow.content"; + + } + + program { name: "disable"; + + signal: "elm,state,disabled"; + + source: "elm"; + + action: STATE_SET "disabled" 0.0; + + target: "base"; + + after: "disable_text"; + + } + + program { name: "disable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.text", "disabled_visible", 0.0); + + else + + set_state(PART:"elm.text", "disabled", 0.0); + + } + + } + + program { name: "enable"; + + signal: "elm,state,enabled"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "base"; + + after: "enable_text"; + + } + + program { name: "enable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "disabled_visible")) + + set_state(PART:"elm.text", "visible", 0.0); + + else + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + } + + } + +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/datacontrol_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/datacontrol_viewer.edc new file mode 100644 index 0000000..1494a28 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/datacontrol_viewer.edc @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "datacontrol_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.60; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.7; + } + visible: 1; + } + } + + part { name: "wearable_toolbar"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.7; + } + rel2 { + relative: 1.0 0.8; + } + visible: 1; + } + } + } + } + + group + { + name: "cursor_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.50; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.7; + } + visible: 1; + } + } + + part { name: "wearable_toolbar"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.7; + } + rel2 { + relative: 1.0 0.8; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/display_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/display_viewer.edc new file mode 100644 index 0000000..6af9b27 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/display_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "display_viewer"; + parts{ + part{ + name: "width_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "height_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + } + } + + part{ + name: "bpp_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+3*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/efl_callback_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/efl_callback_viewer.edc new file mode 100644 index 0000000..441a925 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/efl_callback_viewer.edc @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "efl_test"; + parts{ + part{ + name: "_title"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + + part{ + name: "_callback"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.2; + } + } + } + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.20; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.37; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/event_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/event_viewer.edc new file mode 100644 index 0000000..a457ba3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/event_viewer.edc @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "event_viewer"; + parts{ + part{ + name: "language_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "orientation_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + } + } + + part{ + name: "region_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + } + } + part{ + name: "low_battery_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + } + } + part{ + name: "low_memory_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*5; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/feature_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/feature_viewer.edc new file mode 100644 index 0000000..c93a081 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/feature_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "feature_viewer"; + parts{ + part{ + name: "feature_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.38; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/gps_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/gps_viewer.edc new file mode 100644 index 0000000..afdb3a5 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/gps_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "gps_viewer"; + parts{ + part{ + name: "lat_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "lon_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 2*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/graphics_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/graphics_viewer.edc new file mode 100644 index 0000000..ed4b94b --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/graphics_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "graphics_viewer"; + parts{ + part{ + name: "graphics_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.58; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/image_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/image_viewer.edc new file mode 100644 index 0000000..1114e0c --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/image_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "image_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.58; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/input_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/input_viewer.edc new file mode 100644 index 0000000..801ce89 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/input_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "input_viewer"; + parts{ + part{ + name: "input_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.63; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/mock_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/mock_viewer.edc new file mode 100644 index 0000000..b6722f3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/mock_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "mock_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.1; } + rel2 {relative: 1.0 HEADER_HIGHT+0.21; } + } + } + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.21; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.38 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/nfc_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/nfc_viewer.edc new file mode 100644 index 0000000..f887ca5 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/nfc_viewer.edc @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "nfc_viewer_tag"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.17; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.41; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.58; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "nfc_viewer_p2p"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.17; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.46; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/pick_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/pick_viewer.edc new file mode 100644 index 0000000..79da21e --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/pick_viewer.edc @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.25 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "pick_viewer"; + parts{ + part{ + name: "pick_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "pick_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "pick_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.21; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING HEADER_HIGHT+0.38; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 HEADER_HIGHT+0.38; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_y: "pick_list"; + relative: 0.0 1.0; + } + rel2 { relative: 1.0 HEADER_HIGHT+0.38; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/push_service.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/push_service.edc new file mode 100644 index 0000000..ca41d93 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/push_service.edc @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.2 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "push_service"; + parts{ + part{ + name: "push_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "text_box_first"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "push_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*2; + } + } + } + + part{ + name: "text_box_second"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "text_box_first"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*3; + } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.46; + } + rel2 { + relative: 1.0 0.63 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/runtimeinfo_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/runtimeinfo_viewer.edc new file mode 100644 index 0000000..85a00c7 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/runtimeinfo_viewer.edc @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 1.0 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "runtimeinfo_viewer"; + parts{ + part{ + name: "info_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.02 0.2; } + rel2 {relative: 0.98 TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/sensor_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/sensor_viewer.edc new file mode 100644 index 0000000..6ae107a --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/sensor_viewer.edc @@ -0,0 +1,415 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define GL_HEIGHT 0.13 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.21; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.21; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.38; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + group + { + name: "accelerometer_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.38; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + + group + { + name: "gyro_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+GL_HEIGHT; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.21; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.21; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.38; + } + } + } + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "magnatometer_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.35; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.35; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.35; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.35; + } + rel2{ + relative: 1.0 0.58; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + +group + { + name: "pressure_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.35; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.35; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.35; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.45; + } + } + } + + part{ + name: "text_view_label"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.02 0.5; + } + rel2{ + relative:1.0 0.58; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "light_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.38; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "ultra_violet_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.38; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/shortcut_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/shortcut_viewer.edc new file mode 100644 index 0000000..a312b03 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/shortcut_viewer.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.1 +#define CONTENT_X_PAD 0.15 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "shortcut_viewer"; + parts{ + + part{ + name: "shortcut_body"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 0.7 0.2; } + } + } + + part{ + name: "shortcut_body2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.7 0.1; } + rel2 {relative: 1.0 0.2; } + } + } + + part{ + name: "shortcut_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2; } + rel2 {relative: 1.0 0.3; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/sound_player.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/sound_player.edc new file mode 100644 index 0000000..313d9be --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/sound_player.edc @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sound_player"; + parts{ + part{ + name: "sound_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "icon_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.13; + } + } + } + + + + part{ + name: "progressbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + rel1{ + relative: 0.0 HEADER_HIGHT+0.13; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.21; + } + } + } + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.23; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.38; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/touch_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/touch_viewer.edc new file mode 100644 index 0000000..1ba2fb5 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/touch_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "touch_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; to_y: "cursor_text"; } + rel2 {relative: 1.0 HEADER_HIGHT+0.38; } + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/ui_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/ui_viewer.edc new file mode 100644 index 0000000..248438b --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/ui_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "ui_viewer"; + parts{ + part{ + name: "ui_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/video_player.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/video_player.edc new file mode 100644 index 0000000..d1aa420 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/video_player.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "video_player"; + parts{ + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative:1.0 0.43; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_x: "left_padding"; + relative: 1.0 0.43; + } + rel2 { to_x: "right_padding"; + relative: 0.0 0.6; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/wearable_320_x_320_toolbar.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/wearable_320_x_320_toolbar.edc new file mode 100644 index 0000000..18fe226 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/wearable_320_x_320_toolbar.edc @@ -0,0 +1,14 @@ +#define WEARABLE_TOOLBAR_PART \ +part { name: "wearable_toolbar"; \ + type: SWALLOW; \ + description { \ + state: "default" 0.0; \ + rel1 { \ + relative: 0.0 0.60; \ + } \ + rel2 { \ + relative: 1.0 0.78; \ + } \ + visible: 1; \ + } \ +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/wearable_circle_toolbar.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/wearable_circle_toolbar.edc new file mode 100644 index 0000000..a163621 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/wearable_circle_toolbar.edc @@ -0,0 +1,14 @@ +#define WEARABLE_TOOLBAR_PART \ +part { name: "wearable_toolbar"; \ + type: SWALLOW; \ + description { \ + state: "default" 0.0; \ + rel1 { \ + relative: 0.0 0.6; \ + } \ + rel2 { \ + relative: 1.0 0.8; \ + } \ + visible: 1; \ + } \ +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/wifi_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/wifi_viewer.edc new file mode 100644 index 0000000..529baef --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/wifi_viewer.edc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifi_viewer"; + parts{ + part{ + name: "wifi_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/wifidirect_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/wifidirect_viewer.edc new file mode 100644 index 0000000..cb537ff --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_320_x_320/wifidirect_viewer.edc @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_info"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 TEXT_HEIGHT*2; } + } + } + + part{ + name: "wifidirect_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_list"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/animation_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/animation_viewer.edc new file mode 100644 index 0000000..587efae --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/animation_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "animation_viewer"; + parts{ + part{ + name: "animation_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/bluetooth_le_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/bluetooth_le_viewer.edc new file mode 100755 index 0000000..7b693d9 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/bluetooth_le_viewer.edc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetoothle_viewer"; + parts{ + part{ + name: "bluetoothle_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetoothle_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetoothle_text"; + } + rel2{ + relative: 1.0 0.43; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetoothle_list"; + } + rel2 { + relative: 1.0 63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/bluetooth_oob_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/bluetooth_oob_viewer.edc new file mode 100644 index 0000000..d847174 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/bluetooth_oob_viewer.edc @@ -0,0 +1,41 @@ +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_oob_viewer"; + parts{ + part{ + name: "bluetooth_oob_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9 ; } + visible: 1; + + } + } + + WEARABLE_TOOLBAR_PART + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/bluetooth_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/bluetooth_viewer.edc new file mode 100644 index 0000000..75168e9 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/bluetooth_viewer.edc @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_viewer"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetooth_list"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "bluetooth_viewer_cancel_check"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.70; + } + } + } + + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.25 1.0; + to_y: "bluetooth_list"; + } + rel2{ + relative: 0.75 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/camera_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/camera_viewer.edc new file mode 100644 index 0000000..e8c1df2 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/camera_viewer.edc @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "camera_viewer"; + parts{ + part{ + name: "camera_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; + } + rel2{ + relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT+0.10; + } + } + } + + part{ + name: "video_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.18;} + rel2 {relative: 1.0 HEADER_HIGHT+0.26; } + } + } + + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.26; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.36; + } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.36; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.53; + } + visible: 1; + } + } + + part { name: "wearable_toolbar"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.76; + } + rel2 { + relative: 1.0 0.93; + } + visible: 1; + } + } + + } + } + + group + { + name: "camera_face"; + parts{ + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.53; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/custom_button.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/custom_button.edc new file mode 100644 index 0000000..7ae12a3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/custom_button.edc @@ -0,0 +1,383 @@ +collections { + + group { name: "elm/button/base/chucknorris"; + + alias: "elm/button/base/default"; + + parts { + + part { name: "border"; + + type: RECT; + + description { state: "default" 0.0; + + color: 0 0 0 255; + + } + + description { state: "in" 0.0; + + color: 50 180 180 255; + + } + + } + + part { name: "base"; + + type: RECT; + + mouse_events: 1; + + description { state: "default" 0.0; + + rel1.to: "border"; + + rel1.offset: 1 1; + + rel2.to: "border"; + + rel2.offset: -2 -2; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + color: 230 230 230 255; + + } + + } + + part { name: "elm.swallow.content"; + + type: SWALLOW; + + mouse_events: 0; + + description { state: "default" 0.0; + + fixed: 1 0; + + visible: 0; + + align: 0.0 0.5; + + rel1.offset: 4 4; + + rel2.offset: 3 -5; + + rel2.relative: 0.0 1.0; + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: 4 -5; + + } + + description { state: "icononly" 0.0; + + inherit: "default" 0.0; + + fixed: 0 0; + + visible: 1; + + align: 0.5 0.5; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: -5 -5; + + rel2.relative: 1.0 1.0; + + } + + } + + part { name: "elm.text"; + + type: TEXT; + + mouse_events: 0; + + scale: 1; + + description { state: "default" 0.0; + + visible: 0; + + rel1.to_x: "elm.swallow.content"; + + rel1.relative: 1.0 0.0; + + rel1.offset: 0 4; + + rel2.offset: -5 -5; + + color: 0 0 0 255; + + text { + + font: "Sans"; + + size: 10; + + min: 0 0; + + text_class: "button"; + + } + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + } + + description { state: "disabled_visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + } + + programs { + + program { name: "button_mouse_in"; + + signal: "mouse,in"; + + source: "base"; + + action: STATE_SET "in" 0.0; + + target: "border"; + + } + + program { name: "button_mouse_out"; + + signal: "mouse,out"; + + source: "base"; + + action: STATE_SET "default" 0.0; + + target: "border"; + + } + + program { name: "button_unclick"; + + signal: "mouse,up,1"; + + source: "base"; + + action: SIGNAL_EMIT "elm,action,click" ""; + + } + + program { name: "button_click"; + + signal: "mouse,down,1"; + + source: "base"; + + } + + program { name: "text_show"; + + signal: "elm,state,text,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "icononly")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + set_state(PART:"elm.text", "visible", 0.0); + + } + + } + + program { name: "text_hide"; + + signal: "elm,state,text,hidden"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + program { name: "icon_show"; + + signal: "elm,state,icon,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + else + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + } + + } + + program { name: "icon_hide"; + + signal: "elm,state,icon,hidden"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "elm.swallow.content"; + + } + + program { name: "disable"; + + signal: "elm,state,disabled"; + + source: "elm"; + + action: STATE_SET "disabled" 0.0; + + target: "base"; + + after: "disable_text"; + + } + + program { name: "disable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.text", "disabled_visible", 0.0); + + else + + set_state(PART:"elm.text", "disabled", 0.0); + + } + + } + + program { name: "enable"; + + signal: "elm,state,enabled"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "base"; + + after: "enable_text"; + + } + + program { name: "enable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "disabled_visible")) + + set_state(PART:"elm.text", "visible", 0.0); + + else + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + } + + } + +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/datacontrol_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/datacontrol_viewer.edc new file mode 100644 index 0000000..8e8f7db --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/datacontrol_viewer.edc @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +//#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "datacontrol_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.20; } + rel2 {relative: 1.0 0.50; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.6; + } + visible: 1; + } + } + + part { name: "wearable_toolbar"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.6; + } + rel2 { + relative: 1.0 0.7; + } + visible: 1; + } + } + } + } + + group + { + name: "cursor_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.20; } + rel2 {relative: 1.0 0.40; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.6; + } + visible: 1; + } + } + + part { name: "wearable_toolbar"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.6; + } + rel2 { + relative: 1.0 0.7; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/display_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/display_viewer.edc new file mode 100644 index 0000000..407425b --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/display_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "display_viewer"; + parts{ + part{ + name: "width_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "height_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + } + } + + part{ + name: "bpp_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+3*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/efl_callback_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/efl_callback_viewer.edc new file mode 100644 index 0000000..afeea4e --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/efl_callback_viewer.edc @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "efl_test"; + parts{ + part{ + name: "_title"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + + part{ + name: "_callback"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.2; + } + } + } + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.25; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.42; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/event_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/event_viewer.edc new file mode 100644 index 0000000..6a717aa --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/event_viewer.edc @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "event_viewer"; + parts{ + part{ + name: "language_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "orientation_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + } + } + + part{ + name: "region_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + } + } + part{ + name: "low_battery_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + } + } + part{ + name: "low_memory_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*5; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/feature_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/feature_viewer.edc new file mode 100644 index 0000000..644aff4 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/feature_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "feature_viewer"; + parts{ + part{ + name: "feature_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.43; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/gps_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/gps_viewer.edc new file mode 100644 index 0000000..3f20b0b --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/gps_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "gps_viewer"; + parts{ + part{ + name: "lat_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "lon_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 2*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/graphics_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/graphics_viewer.edc new file mode 100644 index 0000000..f7275e0 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/graphics_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "graphics_viewer"; + parts{ + part{ + name: "graphics_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/image_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/image_viewer.edc new file mode 100644 index 0000000..17f20e7 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/image_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "image_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/input_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/input_viewer.edc new file mode 100644 index 0000000..9bf164b --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/input_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.10 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "input_viewer"; + parts{ + part{ + name: "input_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.63; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/mock_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/mock_viewer.edc new file mode 100644 index 0000000..7ad8435 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/mock_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "mock_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.1; } + rel2 {relative: 1.0 HEADER_HIGHT+0.26; } + } + } + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.26; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.43 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/nfc_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/nfc_viewer.edc new file mode 100644 index 0000000..5ef2025 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/nfc_viewer.edc @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.1 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "nfc_viewer_tag"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.16; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.16; } + rel2 {relative: 1.0 HEADER_HIGHT+0.16+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.60; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + align: 0.0 0.0; + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.76; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "nfc_viewer_p2p"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.16; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.16; } + rel2 {relative: 1.0 HEADER_HIGHT+0.16+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.60; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + align: 0.0 0.0; + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.76; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/pick_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/pick_viewer.edc new file mode 100644 index 0000000..02154e3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/pick_viewer.edc @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.2 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "pick_viewer"; + parts{ + part{ + name: "pick_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "pick_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "pick_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.26; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING HEADER_HIGHT+0.43; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 HEADER_HIGHT+0.43; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_y: "pick_list"; + relative: 0.0 1.0; + } + rel2 { relative: 1.0 HEADER_HIGHT+0.43; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/push_service.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/push_service.edc new file mode 100644 index 0000000..f9965d3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/push_service.edc @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.1 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "push_service"; + parts{ + part{ + name: "push_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "text_box_first"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "push_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*2; + } + } + } + + part{ + name: "text_box_second"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "text_box_first"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*3; + } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.56; + } + rel2 { + relative: 1.0 0.73 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/runtimeinfo_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/runtimeinfo_viewer.edc new file mode 100644 index 0000000..524e83d --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/runtimeinfo_viewer.edc @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 1.0 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "runtimeinfo_viewer"; + parts{ + part{ + name: "info_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.02 0.0; } + rel2 {relative: 0.98 TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/sensor_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/sensor_viewer.edc new file mode 100644 index 0000000..1f6a278 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/sensor_viewer.edc @@ -0,0 +1,415 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define GL_HEIGHT 0.13 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.26; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.26; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.43; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + group + { + name: "accelerometer_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.43; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + + group + { + name: "gyro_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+GL_HEIGHT; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.38; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.38; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.55; + } + } + } + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "magnatometer_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + +group + { + name: "pressure_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + } + } + + part{ + name: "text_view_label"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.02 0.5; + } + rel2{ + relative:1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "light_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.43; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "ultra_violet_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.43; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/shortcut_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/shortcut_viewer.edc new file mode 100644 index 0000000..a81118b --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/shortcut_viewer.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.1 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "shortcut_viewer"; + parts{ + + part{ + name: "shortcut_body"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 0.7 0.2; } + } + } + + part{ + name: "shortcut_body2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.7 0.1; } + rel2 {relative: 1.0 0.2; } + } + } + + part{ + name: "shortcut_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2; } + rel2 {relative: 1.0 0.3; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/sound_player.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/sound_player.edc new file mode 100644 index 0000000..0314931 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/sound_player.edc @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sound_player"; + parts{ + part{ + name: "sound_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "icon_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.18; + } + } + } + + + + part{ + name: "progressbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + rel1{ + relative: 0.0 HEADER_HIGHT+0.18; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.26; + } + } + } + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.28; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.43; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/touch_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/touch_viewer.edc new file mode 100644 index 0000000..cc97605 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/touch_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "touch_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; to_y: "cursor_text"; } + rel2 {relative: 1.0 HEADER_HIGHT+0.43; } + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/ui_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/ui_viewer.edc new file mode 100644 index 0000000..10f9dd5 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/ui_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "ui_viewer"; + parts{ + part{ + name: "ui_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/video_player.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/video_player.edc new file mode 100644 index 0000000..59b9f39 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/video_player.edc @@ -0,0 +1,86 @@ + +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "video_player"; + parts{ + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative:1.0 0.56; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_x: "left_padding"; + relative: 1.0 0.56; + } + rel2 { to_x: "right_padding"; + relative: 0.0 0.73; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/wearable_360_x_480_toolbar.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/wearable_360_x_480_toolbar.edc new file mode 100644 index 0000000..871fc75 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/wearable_360_x_480_toolbar.edc @@ -0,0 +1,14 @@ +#define WEARABLE_TOOLBAR_PART \ +part { name: "wearable_toolbar"; \ + type: SWALLOW; \ + description { \ + state: "default" 0.0; \ + rel1 { \ + relative: 0.0 0.74; \ + } \ + rel2 { \ + relative: 1.0 0.9; \ + } \ + visible: 1; \ + } \ +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/wifi_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/wifi_viewer.edc new file mode 100644 index 0000000..c2265c3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/wifi_viewer.edc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifi_viewer"; + parts{ + part{ + name: "wifi_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/wifidirect_info_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/wifidirect_info_viewer.edc new file mode 100644 index 0000000..fd70980 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/wifidirect_info_viewer.edc @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "info1"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative: 1.0 0.2; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info2"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 1.0 0.3; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info3"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.3; + } + rel2{ + relative: 1.0 0.4; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info4"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info5"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.5; + } + rel2{ + relative: 1.0 0.6; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info6"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.6; + } + rel2{ + relative: 1.0 0.7; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "info7"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.7; + } + rel2{ + relative: 1.0 0.8; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/wifidirect_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/wifidirect_viewer.edc new file mode 100644 index 0000000..03c8d1d --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_360_x_480/wifidirect_viewer.edc @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_info"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 TEXT_HEIGHT*2; } + } + } + + part{ + name: "wifidirect_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_list"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/animation_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/animation_viewer.edc new file mode 100644 index 0000000..69c0679 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/animation_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "animation_viewer"; + parts{ + part{ + name: "animation_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/bluetooth_le_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/bluetooth_le_viewer.edc new file mode 100755 index 0000000..2042707 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/bluetooth_le_viewer.edc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetoothle_viewer"; + parts{ + part{ + name: "bluetoothle_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetoothle_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetoothle_text"; + } + rel2{ + relative: 1.0 0.43; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetoothle_list"; + } + rel2 { + relative: 1.0 63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/bluetooth_oob_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/bluetooth_oob_viewer.edc new file mode 100644 index 0000000..7fd01d2 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/bluetooth_oob_viewer.edc @@ -0,0 +1,41 @@ +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_oob_viewer"; + parts{ + part{ + name: "bluetooth_oob_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9 ; } + visible: 1; + + } + } + + WEARABLE_TOOLBAR_PART + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/bluetooth_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/bluetooth_viewer.edc new file mode 100644 index 0000000..c110ee8 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/bluetooth_viewer.edc @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_viewer"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.45; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetooth_list"; + } + rel2 { + relative: 1.0 0.6; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "bluetooth_viewer_cancel_check"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.30; + } + } + } + + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.25 1.0; + to_y: "bluetooth_list"; + } + rel2{ + relative: 0.75 0.45; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 0.6; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/camera_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/camera_viewer.edc new file mode 100644 index 0000000..c52c10f --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/camera_viewer.edc @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "camera_viewer"; + parts{ + part{ + name: "camera_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; + } + rel2{ + relative: 1.0 0.38; + } + } + } + + part{ + name: "video_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.38;} + rel2 {relative: 1.0 (0.38 + TEXT_HEIGHT); } + } + } + + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 (0.38 + TEXT_HEIGHT); + } + rel2{ + relative: 1.0 0.52; + } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.52; + } + rel2 { + relative: 1.0 0.6; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "camera_face"; + parts{ + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative: 1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/custom_button.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/custom_button.edc new file mode 100644 index 0000000..7ae12a3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/custom_button.edc @@ -0,0 +1,383 @@ +collections { + + group { name: "elm/button/base/chucknorris"; + + alias: "elm/button/base/default"; + + parts { + + part { name: "border"; + + type: RECT; + + description { state: "default" 0.0; + + color: 0 0 0 255; + + } + + description { state: "in" 0.0; + + color: 50 180 180 255; + + } + + } + + part { name: "base"; + + type: RECT; + + mouse_events: 1; + + description { state: "default" 0.0; + + rel1.to: "border"; + + rel1.offset: 1 1; + + rel2.to: "border"; + + rel2.offset: -2 -2; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + color: 230 230 230 255; + + } + + } + + part { name: "elm.swallow.content"; + + type: SWALLOW; + + mouse_events: 0; + + description { state: "default" 0.0; + + fixed: 1 0; + + visible: 0; + + align: 0.0 0.5; + + rel1.offset: 4 4; + + rel2.offset: 3 -5; + + rel2.relative: 0.0 1.0; + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: 4 -5; + + } + + description { state: "icononly" 0.0; + + inherit: "default" 0.0; + + fixed: 0 0; + + visible: 1; + + align: 0.5 0.5; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: -5 -5; + + rel2.relative: 1.0 1.0; + + } + + } + + part { name: "elm.text"; + + type: TEXT; + + mouse_events: 0; + + scale: 1; + + description { state: "default" 0.0; + + visible: 0; + + rel1.to_x: "elm.swallow.content"; + + rel1.relative: 1.0 0.0; + + rel1.offset: 0 4; + + rel2.offset: -5 -5; + + color: 0 0 0 255; + + text { + + font: "Sans"; + + size: 10; + + min: 0 0; + + text_class: "button"; + + } + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + } + + description { state: "disabled_visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + } + + programs { + + program { name: "button_mouse_in"; + + signal: "mouse,in"; + + source: "base"; + + action: STATE_SET "in" 0.0; + + target: "border"; + + } + + program { name: "button_mouse_out"; + + signal: "mouse,out"; + + source: "base"; + + action: STATE_SET "default" 0.0; + + target: "border"; + + } + + program { name: "button_unclick"; + + signal: "mouse,up,1"; + + source: "base"; + + action: SIGNAL_EMIT "elm,action,click" ""; + + } + + program { name: "button_click"; + + signal: "mouse,down,1"; + + source: "base"; + + } + + program { name: "text_show"; + + signal: "elm,state,text,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "icononly")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + set_state(PART:"elm.text", "visible", 0.0); + + } + + } + + program { name: "text_hide"; + + signal: "elm,state,text,hidden"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + program { name: "icon_show"; + + signal: "elm,state,icon,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + else + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + } + + } + + program { name: "icon_hide"; + + signal: "elm,state,icon,hidden"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "elm.swallow.content"; + + } + + program { name: "disable"; + + signal: "elm,state,disabled"; + + source: "elm"; + + action: STATE_SET "disabled" 0.0; + + target: "base"; + + after: "disable_text"; + + } + + program { name: "disable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.text", "disabled_visible", 0.0); + + else + + set_state(PART:"elm.text", "disabled", 0.0); + + } + + } + + program { name: "enable"; + + signal: "elm,state,enabled"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "base"; + + after: "enable_text"; + + } + + program { name: "enable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "disabled_visible")) + + set_state(PART:"elm.text", "visible", 0.0); + + else + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + } + + } + +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/datacontrol_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/datacontrol_viewer.edc new file mode 100644 index 0000000..1eec438 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/datacontrol_viewer.edc @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "datacontrol_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "cursor_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.50; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.85; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/display_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/display_viewer.edc new file mode 100644 index 0000000..0a40cc8 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/display_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.23 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "display_viewer"; + parts{ + part{ + name: "width_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "height_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + } + } + + part{ + name: "bpp_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+3*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/efl_callback_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/efl_callback_viewer.edc new file mode 100644 index 0000000..c85b191 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/efl_callback_viewer.edc @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.2 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "efl_test"; + parts{ + part{ + name: "_title"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + + part{ + name: "_callback"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.2; + } + } + } + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.32; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.4; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/event_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/event_viewer.edc new file mode 100644 index 0000000..1fffe67 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/event_viewer.edc @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "event_viewer"; + parts{ + part{ + name: "language_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "orientation_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + } + } + + part{ + name: "region_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + } + } + part{ + name: "low_battery_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + } + } + part{ + name: "low_memory_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*5; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/feature_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/feature_viewer.edc new file mode 100644 index 0000000..2f76483 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/feature_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.0 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "feature_viewer"; + parts{ + part{ + name: "feature_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 0.6; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/gps_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/gps_viewer.edc new file mode 100644 index 0000000..7a24f36 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/gps_viewer.edc @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.23 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "gps_viewer"; + parts{ + part{ + name: "lat_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "lon_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/graphics_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/graphics_viewer.edc new file mode 100644 index 0000000..2ea1e0b --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/graphics_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.0 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "graphics_viewer"; + parts{ + part{ + name: "graphics_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/image_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/image_viewer.edc new file mode 100644 index 0000000..75f48f0 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/image_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.34 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "image_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/input_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/input_viewer.edc new file mode 100644 index 0000000..2abafc3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/input_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.0 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "input_viewer"; + parts{ + part{ + name: "input_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.40; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/mock_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/mock_viewer.edc new file mode 100644 index 0000000..da42922 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/mock_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "mock_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.1; } + rel2 {relative: 1.0 HEADER_HIGHT+0.32; } + } + } + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.32; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.43 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/nfc_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/nfc_viewer.edc new file mode 100644 index 0000000..ac85e2a --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/nfc_viewer.edc @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.20 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "nfc_viewer_tag"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.08; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.08; } + rel2 {relative: 1.0 HEADER_HIGHT+0.08+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.52; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.6; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "nfc_viewer_p2p"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.08; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.08; } + rel2 {relative: 1.0 HEADER_HIGHT+0.08+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.52; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.6; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/pick_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/pick_viewer.edc new file mode 100644 index 0000000..387045f --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/pick_viewer.edc @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.25 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "pick_viewer"; + parts{ + part{ + name: "pick_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "pick_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "pick_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.28; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING HEADER_HIGHT+0.4; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 HEADER_HIGHT+0.4; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_y: "pick_list"; + relative: 0.0 1.0; + } + rel2 { relative: 1.0 HEADER_HIGHT+0.4; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/push_service.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/push_service.edc new file mode 100644 index 0000000..c8c3ea0 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/push_service.edc @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.25 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "push_service"; + parts{ + part{ + name: "push_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "text_box_first"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "push_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*2; + } + } + } + + part{ + name: "text_box_second"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "text_box_first"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*3; + } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.52; + } + rel2 { + relative: 1.0 0.60 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/runtimeinfo_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/runtimeinfo_viewer.edc new file mode 100644 index 0000000..ac78c3a --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/runtimeinfo_viewer.edc @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 1.0 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "runtimeinfo_viewer"; + parts{ + part{ + name: "info_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.02 0.0; } + rel2 {relative: 0.98 TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/sensor_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/sensor_viewer.edc new file mode 100644 index 0000000..8d7ae16 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/sensor_viewer.edc @@ -0,0 +1,415 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define GL_HEIGHT 0.20 +#define HEADER_HIGHT 0.0 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 52; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.52; + } + rel2{ + relative: 1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + group + { + name: "accelerometer_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + + group + { + name: "gyro_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2; } + rel2 {relative: 1.0 0.2+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2+GL_HEIGHT; + } + rel2{ + relative: 1.0 0.52; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.52; + } + rel2{ + relative: 1.0 0.60; + } + } + } + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "magnatometer_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + +group + { + name: "pressure_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + } + } + + part{ + name: "text_view_label"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.02 0.5; + } + rel2{ + relative:1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "light_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2+0.1; + } + rel2{ + relative:1.0 0.6; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2+0.0; + } + rel2{ + relative:1.0 0.2+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "ultra_violet_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2+0.1; + } + rel2{ + relative:1.0 0.6; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2+0.0; + } + rel2{ + relative:1.0 0.2+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/shortcut_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/shortcut_viewer.edc new file mode 100644 index 0000000..5acdf15 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/shortcut_viewer.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.1 +#define CONTENT_X_PAD 0.15 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "shortcut_viewer"; + parts{ + + part{ + name: "shortcut_body"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 0.7 0.2; } + } + } + + part{ + name: "shortcut_body2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.7 0.1; } + rel2 {relative: 1.0 0.2; } + } + } + + part{ + name: "shortcut_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2; } + rel2 {relative: 1.0 0.3; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/sound_player.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/sound_player.edc new file mode 100644 index 0000000..a4680f1 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/sound_player.edc @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sound_player"; + parts{ + part{ + name: "sound_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "icon_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.22; + } + } + } + + + + part{ + name: "progressbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + rel1{ + relative: 0.0 HEADER_HIGHT+0.22; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.30; + } + } + } + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.32; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.4; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/touch_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/touch_viewer.edc new file mode 100644 index 0000000..79f5b4e --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/touch_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "touch_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; to_y: "cursor_text"; } + rel2 {relative: 1.0 HEADER_HIGHT+0.4; } + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/ui_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/ui_viewer.edc new file mode 100644 index 0000000..d4acf28 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/ui_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "ui_viewer"; + parts{ + part{ + name: "ui_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/video_player.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/video_player.edc new file mode 100644 index 0000000..7bb46c4 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/video_player.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "video_player"; + parts{ + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative:1.0 0.43; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_x: "left_padding"; + relative: 1.0 0.43; + } + rel2 { to_x: "right_padding"; + relative: 0.0 0.6; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/wearable_circle_toolbar.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/wearable_circle_toolbar.edc new file mode 100644 index 0000000..a163621 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/wearable_circle_toolbar.edc @@ -0,0 +1,14 @@ +#define WEARABLE_TOOLBAR_PART \ +part { name: "wearable_toolbar"; \ + type: SWALLOW; \ + description { \ + state: "default" 0.0; \ + rel1 { \ + relative: 0.0 0.6; \ + } \ + rel2 { \ + relative: 1.0 0.8; \ + } \ + visible: 1; \ + } \ +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/wifi_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/wifi_viewer.edc new file mode 100644 index 0000000..8ebe3c2 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/wifi_viewer.edc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifi_viewer"; + parts{ + part{ + name: "wifi_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.3.1/wearable_circle/wifidirect_viewer.edc b/tbtcoreapp/res/edje/2.3.1/wearable_circle/wifidirect_viewer.edc new file mode 100644 index 0000000..d976238 --- /dev/null +++ b/tbtcoreapp/res/edje/2.3.1/wearable_circle/wifidirect_viewer.edc @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_info"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 TEXT_HEIGHT*2; } + } + } + + part{ + name: "wifidirect_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_list"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/animation_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/animation_viewer.edc new file mode 100644 index 0000000..914b967 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/animation_viewer.edc @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "animation_viewer"; + parts{ + part{ + name: "animation_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 1.0; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/bluetooth_le_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/bluetooth_le_viewer.edc new file mode 100755 index 0000000..afa7b3f --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/bluetooth_le_viewer.edc @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "bluetoothle_viewer"; + parts{ + part{ + name: "bluetoothle_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetoothle_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetoothle_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetoothle_list"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/bluetooth_oob_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/bluetooth_oob_viewer.edc new file mode 100644 index 0000000..531b64c --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/bluetooth_oob_viewer.edc @@ -0,0 +1,37 @@ +#define TEXT_HEIGHT 0.08 + + collections + { + base_scale: 1.8; + group + { + name: "bluetooth_oob_viewer"; + parts{ + part{ + name: "bluetooth_oob_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + } + rel2 { + relative: 1.0 1.0 ; } + visible: 1; + + } + } + } + } diff --git a/tbtcoreapp/res/edje/2.4/mobile/bluetooth_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/bluetooth_viewer.edc new file mode 100644 index 0000000..71fa2cd --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/bluetooth_viewer.edc @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_viewer"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.90; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetooth_list"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } + + group + { + name: "bluetooth_viewer_cancel_check"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.25 1.0; + to_y: "bluetooth_list"; + } + rel2{ + relative: 0.75 0.90; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/camera_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/camera_viewer.edc new file mode 100644 index 0000000..135df50 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/camera_viewer.edc @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "camera_viewer"; + parts{ + part{ + name: "camera_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "camera_text"; + } + rel2{ + relative: 1.0 0.45; + } + } + } + + part{ + name: "video_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; + to_y: "camera_view"; } + rel2 {relative: 1.0 (0.45 + TEXT_HEIGHT); } + } + } + + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "video_text"; + } + rel2{ + relative: 1.0 0.90; + } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "video_view"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } + + group + { + name: "camera_face"; + parts{ + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative: 1.0 1.0; + } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/custom_button.edc b/tbtcoreapp/res/edje/2.4/mobile/custom_button.edc new file mode 100644 index 0000000..7ae12a3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/custom_button.edc @@ -0,0 +1,383 @@ +collections { + + group { name: "elm/button/base/chucknorris"; + + alias: "elm/button/base/default"; + + parts { + + part { name: "border"; + + type: RECT; + + description { state: "default" 0.0; + + color: 0 0 0 255; + + } + + description { state: "in" 0.0; + + color: 50 180 180 255; + + } + + } + + part { name: "base"; + + type: RECT; + + mouse_events: 1; + + description { state: "default" 0.0; + + rel1.to: "border"; + + rel1.offset: 1 1; + + rel2.to: "border"; + + rel2.offset: -2 -2; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + color: 230 230 230 255; + + } + + } + + part { name: "elm.swallow.content"; + + type: SWALLOW; + + mouse_events: 0; + + description { state: "default" 0.0; + + fixed: 1 0; + + visible: 0; + + align: 0.0 0.5; + + rel1.offset: 4 4; + + rel2.offset: 3 -5; + + rel2.relative: 0.0 1.0; + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: 4 -5; + + } + + description { state: "icononly" 0.0; + + inherit: "default" 0.0; + + fixed: 0 0; + + visible: 1; + + align: 0.5 0.5; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: -5 -5; + + rel2.relative: 1.0 1.0; + + } + + } + + part { name: "elm.text"; + + type: TEXT; + + mouse_events: 0; + + scale: 1; + + description { state: "default" 0.0; + + visible: 0; + + rel1.to_x: "elm.swallow.content"; + + rel1.relative: 1.0 0.0; + + rel1.offset: 0 4; + + rel2.offset: -5 -5; + + color: 0 0 0 255; + + text { + + font: "Sans"; + + size: 10; + + min: 0 0; + + text_class: "button"; + + } + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + } + + description { state: "disabled_visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + } + + programs { + + program { name: "button_mouse_in"; + + signal: "mouse,in"; + + source: "base"; + + action: STATE_SET "in" 0.0; + + target: "border"; + + } + + program { name: "button_mouse_out"; + + signal: "mouse,out"; + + source: "base"; + + action: STATE_SET "default" 0.0; + + target: "border"; + + } + + program { name: "button_unclick"; + + signal: "mouse,up,1"; + + source: "base"; + + action: SIGNAL_EMIT "elm,action,click" ""; + + } + + program { name: "button_click"; + + signal: "mouse,down,1"; + + source: "base"; + + } + + program { name: "text_show"; + + signal: "elm,state,text,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "icononly")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + set_state(PART:"elm.text", "visible", 0.0); + + } + + } + + program { name: "text_hide"; + + signal: "elm,state,text,hidden"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + program { name: "icon_show"; + + signal: "elm,state,icon,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + else + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + } + + } + + program { name: "icon_hide"; + + signal: "elm,state,icon,hidden"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "elm.swallow.content"; + + } + + program { name: "disable"; + + signal: "elm,state,disabled"; + + source: "elm"; + + action: STATE_SET "disabled" 0.0; + + target: "base"; + + after: "disable_text"; + + } + + program { name: "disable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.text", "disabled_visible", 0.0); + + else + + set_state(PART:"elm.text", "disabled", 0.0); + + } + + } + + program { name: "enable"; + + signal: "elm,state,enabled"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "base"; + + after: "enable_text"; + + } + + program { name: "enable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "disabled_visible")) + + set_state(PART:"elm.text", "visible", 0.0); + + else + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + } + + } + +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/datacontrol_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/datacontrol_viewer.edc new file mode 100644 index 0000000..4639920 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/datacontrol_viewer.edc @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "datacontrol_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.90; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } + + group + { + name: "cursor_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/display_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/display_viewer.edc new file mode 100644 index 0000000..acd588f --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/display_viewer.edc @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "display_viewer"; + parts{ + part{ + name: "width_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "height_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 2*TEXT_HEIGHT; } + } + } + + part{ + name: "bpp_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 2*TEXT_HEIGHT; } + rel2 {relative: 1.0 3*TEXT_HEIGHT; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/efl_callback_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/efl_callback_viewer.edc new file mode 100644 index 0000000..3269bb6 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/efl_callback_viewer.edc @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "efl_test"; + parts{ + part{ + name: "_title"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.1; } + } + } + + part{ + name: "_callback"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative: 1.0 0.2; + } + } + } + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/event_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/event_viewer.edc new file mode 100644 index 0000000..9538dc2 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/event_viewer.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "event_viewer"; + parts{ + part{ + name: "language_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.0; } + } + } + + part{ + name: "orientation_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 TEXT_HEIGHT*2; } + } + } + + part{ + name: "region_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT*2; } + rel2 {relative: 1.0 TEXT_HEIGHT*3; } + } + } + part{ + name: "low_battery_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT*3; } + rel2 {relative: 1.0 TEXT_HEIGHT*4; } + } + } + part{ + name: "low_memory_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT*4; } + rel2 {relative: 1.0 TEXT_HEIGHT*5; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/feature_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/feature_viewer.edc new file mode 100644 index 0000000..da061a6 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/feature_viewer.edc @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "feature_viewer"; + parts{ + part{ + name: "feature_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 1.0; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/gps_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/gps_viewer.edc new file mode 100644 index 0000000..f84d22c --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/gps_viewer.edc @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "gps_viewer"; + parts{ + part{ + name: "lat_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "lon_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 2*TEXT_HEIGHT; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/graphics_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/graphics_viewer.edc new file mode 100644 index 0000000..9c2460c --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/graphics_viewer.edc @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "graphics_viewer"; + parts{ + part{ + name: "graphics_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 1.0; + } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/image_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/image_viewer.edc new file mode 100644 index 0000000..df6dc9e --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/image_viewer.edc @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "image_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 1.0; + } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/ime_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/ime_viewer.edc new file mode 100644 index 0000000..0ceb85c --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/ime_viewer.edc @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "ime_viewer"; + parts{ + part{ + name: "input_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.25; } + } + } + part{ + name: "event_buttons_r1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; + to_y: "input_text"; } + rel2 {relative: 1.0 0.5; } + } + } + part{ + name: "event_buttons_r2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; + to_y: "event_buttons_r1"; } + rel2 {relative: 1.0 0.75; } + } + } + part{ + name: "event_buttons_r3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; + to_y: "event_buttons_r2"; } + rel2 {relative: 1.0 1.0; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/input_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/input_viewer.edc new file mode 100644 index 0000000..a4ee53c --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/input_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "input_viewer"; + parts{ + part{ + name: "input_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.5; } + } + } + part{ + name: "event_button"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; + to_y: "input_text";} + rel2 {relative: 1.0 1.0; } + } + } + } + } + group + { + name: "ime_viewer"; + parts{ + part{ + name: "input_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 1.0; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/mock_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/mock_viewer.edc new file mode 100644 index 0000000..566261a --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/mock_viewer.edc @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "mock_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.1; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 1.0 0.9; } + } + } + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + } + rel2 { + relative: 1.0 1.0 ; } + visible: 1; + } + } + } + + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/nfc_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/nfc_viewer.edc new file mode 100644 index 0000000..d41432e --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/nfc_viewer.edc @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "nfc_viewer_tag"; + parts{ + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 0.90; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } + + + group + { + name: "nfc_viewer_p2p"; + parts{ + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 0.90; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/oauth2_info_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/oauth2_info_viewer.edc new file mode 100644 index 0000000..685f74d --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/oauth2_info_viewer.edc @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "oauth2_viewer"; + parts{ + part{ + name: "oauth2_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "info1"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative: 1.0 0.2; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info2"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 1.0 0.3; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info3"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.3; + } + rel2{ + relative: 1.0 0.4; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info4"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info5"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.5; + } + rel2{ + relative: 1.0 0.6; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info6"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.6; + } + rel2{ + relative: 1.0 0.7; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "info7"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.7; + } + rel2{ + relative: 1.0 0.8; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/oauth2_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/oauth2_viewer.edc new file mode 100644 index 0000000..6e2424f --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/oauth2_viewer.edc @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "oauth2_viewer"; + parts{ + part{ + name: "oauth2_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.4; } + } + } + + part{ + name: "oauth2_pic"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.4; } + rel2 {relative: 0.4 0.8; } + } + } + + part{ + name: "oauth2_description"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.4 0.4; } + rel2 {relative: 1.0 0.8; } + } + } + + part{ + name: "oauth2_btn"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.8; } + rel2 {relative: 0.5 1.0; } + } + } + + part{ + name: "oauth2_info_btn"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.5 0.8; } + rel2 {relative: 1.0 1.0; } + } + } + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/pick_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/pick_viewer.edc new file mode 100644 index 0000000..b1e5e1b --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/pick_viewer.edc @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "pick_viewer"; + parts{ + part{ + name: "pick_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "pick_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "pick_text"; + } + rel2{ + relative:1.0 0.90; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_y: "pick_list"; + relative: 0.0 1.0; + } + rel2 { relative: 1.0 1.0; } + visible: 1; + } + } + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/push_service.edc b/tbtcoreapp/res/edje/2.4/mobile/push_service.edc new file mode 100644 index 0000000..78a0009 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/push_service.edc @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "push_service"; + parts{ + part{ + name: "push_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "text_box_first"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "push_text"; + } + rel2{ + relative:1.0 TEXT_HEIGHT*2; + } + } + } + + part{ + name: "text_box_second"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "text_box_first"; + } + rel2{ + relative:1.0 TEXT_HEIGHT*3; + } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + } + rel2 { + relative: 1.0 1.0 ; } + visible: 1; + } + } + + + } +} +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/runtimeinfo_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/runtimeinfo_viewer.edc new file mode 100644 index 0000000..4beb863 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/runtimeinfo_viewer.edc @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 1.0 + +collections +{ + base_scale: 1.8; + group + { + name: "runtimeinfo_viewer"; + parts{ + part{ + name: "info_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.02 0.0; } + rel2 {relative: 0.98 TEXT_HEIGHT; } + } + } + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/sensor_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/sensor_viewer.edc new file mode 100644 index 0000000..e90c320 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/sensor_viewer.edc @@ -0,0 +1,400 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define GL_HEIGHT 0.4 + +collections +{ + base_scale: 1.8; + group + { + name: "sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 0.9; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.9; + } + rel2{ + relative: 1.0 1.0; + } + } + } + + } + } + group + { + name: "accelerometer_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 1.0; + } + } + } + + } + } + + + group + { + name: "gyro_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.35; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.35; + } + rel2{ + relative: 1.0 0.9; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.9; + } + rel2{ + relative: 1.0 1.0; + } + } + } + + } + } + + group + { + name: "magnatometer_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 1.0; + } + } + } + } + } + + +group + { + name: "pressure_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + } + } + + part{ + name: "text_view_label"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.02 0.5; + } + rel2{ + relative:1.0 0.6; + } + } + } + } + } + + + group + { + name: "light_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative:1.0 1.0; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.1; + } + } + } + + } + } + + group + { + name: "ultra_violet_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative:1.0 1.0; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.1; + } + } + } + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/shortcut_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/shortcut_viewer.edc new file mode 100644 index 0000000..ee2c5e6 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/shortcut_viewer.edc @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.1 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "shortcut_viewer"; + parts{ + + part{ + name: "shortcut_body"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 0.7 0.2; } + } + } + + part{ + name: "shortcut_body2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2; } + rel2 {relative: 1.0 0.3; } + } + } + + part{ + name: "shortcut_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.3; } + rel2 {relative: 1.0 0.4; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/sound_player.edc b/tbtcoreapp/res/edje/2.4/mobile/sound_player.edc new file mode 100644 index 0000000..d761a8e --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/sound_player.edc @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "sound_player"; + parts{ + part{ + name: "sound_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "icon_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "sound_text"; + } + rel2{ + relative:1.0 0.80; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part{ + name: "progressbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + rel1{ + relative: 0.0 1.0; + to: "icon_view"; + } + rel2{ + relative:1.0 0.90; + } + } + } + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_x: "left_padding"; + to_y: "progressbar"; + relative: 1.0 1.0; + } + rel2 { to_x: "right_padding"; + relative: 0.0 1.0; } + visible: 1; + } + } + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/touch_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/touch_viewer.edc new file mode 100644 index 0000000..f90c4f7 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/touch_viewer.edc @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "touch_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; to_y: "cursor_text"; } + rel2 {relative: 1.0 1.0; } + } + } + } + + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/ui_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/ui_viewer.edc new file mode 100644 index 0000000..1088a8c --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/ui_viewer.edc @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + + +collections +{ + base_scale: 1.8; + group + { + name: "ui_viewer"; + parts{ + part{ + name: "ui_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/video_player.edc b/tbtcoreapp/res/edje/2.4/mobile/video_player.edc new file mode 100644 index 0000000..970725b --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/video_player.edc @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +collections +{ + base_scale: 1.8; + group + { + name: "video_player"; + parts{ + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.895; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_x: "left_padding"; + relative: 1.0 0.90; + } + rel2 { to_x: "right_padding"; + relative: 0.0 1.0; } + visible: 1; + } + } + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/wifi_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/wifi_viewer.edc new file mode 100644 index 0000000..bccefa5 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/wifi_viewer.edc @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "wifi_viewer"; + parts{ + part{ + name: "wifi_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/wifidirect_info_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/wifidirect_info_viewer.edc new file mode 100644 index 0000000..0744b3e --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/wifidirect_info_viewer.edc @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "info1"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative: 1.0 0.2; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info2"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 1.0 0.3; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info3"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.3; + } + rel2{ + relative: 1.0 0.4; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info4"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info5"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.5; + } + rel2{ + relative: 1.0 0.6; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info6"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.6; + } + rel2{ + relative: 1.0 0.7; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "info7"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.7; + } + rel2{ + relative: 1.0 0.8; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.9; + + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/mobile/wifidirect_viewer.edc b/tbtcoreapp/res/edje/2.4/mobile/wifidirect_viewer.edc new file mode 100644 index 0000000..4dc5a9a --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/mobile/wifidirect_viewer.edc @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_info"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 TEXT_HEIGHT*2; } + } + } + + part{ + name: "wifidirect_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_list"; + } + rel2{ + relative: 1.0 0.90; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/animation_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/animation_viewer.edc new file mode 100644 index 0000000..48a5b49 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/animation_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "animation_viewer"; + parts{ + part{ + name: "animation_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/bluetooth_le_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/bluetooth_le_viewer.edc new file mode 100755 index 0000000..39a873e --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/bluetooth_le_viewer.edc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetoothle_viewer"; + parts{ + part{ + name: "bluetoothle_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetoothle_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetoothle_text"; + } + rel2{ + relative: 1.0 0.43; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetoothle_list"; + } + rel2 { + relative: 1.0 63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/bluetooth_oob_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/bluetooth_oob_viewer.edc new file mode 100644 index 0000000..e8ce456 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/bluetooth_oob_viewer.edc @@ -0,0 +1,41 @@ +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_oob_viewer"; + parts{ + part{ + name: "bluetooth_oob_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9 ; } + visible: 1; + + } + } + + WEARABLE_TOOLBAR_PART + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/bluetooth_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/bluetooth_viewer.edc new file mode 100644 index 0000000..c805d0b --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/bluetooth_viewer.edc @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_viewer"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetooth_list"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "bluetooth_viewer_cancel_check"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.70; + } + } + } + + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.25 1.0; + to_y: "bluetooth_list"; + } + rel2{ + relative: 0.75 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/camera_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/camera_viewer.edc new file mode 100644 index 0000000..f7f3822 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/camera_viewer.edc @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "camera_viewer"; + parts{ + part{ + name: "camera_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative: 1.0 0.23; + } + } + } + + part{ + name: "video_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.23;} + rel2 {relative: 1.0 (0.23 + TEXT_HEIGHT); } + } + } + + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 (0.23 + TEXT_HEIGHT); + } + rel2{ + relative: 1.0 0.45; + } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.47; + } + rel2 { + relative: 1.0 0.63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "camera_face"; + parts{ + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative: 1.0 0.9; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/custom_button.edc b/tbtcoreapp/res/edje/2.4/wearable/custom_button.edc new file mode 100644 index 0000000..7ae12a3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/custom_button.edc @@ -0,0 +1,383 @@ +collections { + + group { name: "elm/button/base/chucknorris"; + + alias: "elm/button/base/default"; + + parts { + + part { name: "border"; + + type: RECT; + + description { state: "default" 0.0; + + color: 0 0 0 255; + + } + + description { state: "in" 0.0; + + color: 50 180 180 255; + + } + + } + + part { name: "base"; + + type: RECT; + + mouse_events: 1; + + description { state: "default" 0.0; + + rel1.to: "border"; + + rel1.offset: 1 1; + + rel2.to: "border"; + + rel2.offset: -2 -2; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + color: 230 230 230 255; + + } + + } + + part { name: "elm.swallow.content"; + + type: SWALLOW; + + mouse_events: 0; + + description { state: "default" 0.0; + + fixed: 1 0; + + visible: 0; + + align: 0.0 0.5; + + rel1.offset: 4 4; + + rel2.offset: 3 -5; + + rel2.relative: 0.0 1.0; + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: 4 -5; + + } + + description { state: "icononly" 0.0; + + inherit: "default" 0.0; + + fixed: 0 0; + + visible: 1; + + align: 0.5 0.5; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: -5 -5; + + rel2.relative: 1.0 1.0; + + } + + } + + part { name: "elm.text"; + + type: TEXT; + + mouse_events: 0; + + scale: 1; + + description { state: "default" 0.0; + + visible: 0; + + rel1.to_x: "elm.swallow.content"; + + rel1.relative: 1.0 0.0; + + rel1.offset: 0 4; + + rel2.offset: -5 -5; + + color: 0 0 0 255; + + text { + + font: "Sans"; + + size: 10; + + min: 0 0; + + text_class: "button"; + + } + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + } + + description { state: "disabled_visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + } + + programs { + + program { name: "button_mouse_in"; + + signal: "mouse,in"; + + source: "base"; + + action: STATE_SET "in" 0.0; + + target: "border"; + + } + + program { name: "button_mouse_out"; + + signal: "mouse,out"; + + source: "base"; + + action: STATE_SET "default" 0.0; + + target: "border"; + + } + + program { name: "button_unclick"; + + signal: "mouse,up,1"; + + source: "base"; + + action: SIGNAL_EMIT "elm,action,click" ""; + + } + + program { name: "button_click"; + + signal: "mouse,down,1"; + + source: "base"; + + } + + program { name: "text_show"; + + signal: "elm,state,text,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "icononly")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + set_state(PART:"elm.text", "visible", 0.0); + + } + + } + + program { name: "text_hide"; + + signal: "elm,state,text,hidden"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + program { name: "icon_show"; + + signal: "elm,state,icon,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + else + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + } + + } + + program { name: "icon_hide"; + + signal: "elm,state,icon,hidden"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "elm.swallow.content"; + + } + + program { name: "disable"; + + signal: "elm,state,disabled"; + + source: "elm"; + + action: STATE_SET "disabled" 0.0; + + target: "base"; + + after: "disable_text"; + + } + + program { name: "disable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.text", "disabled_visible", 0.0); + + else + + set_state(PART:"elm.text", "disabled", 0.0); + + } + + } + + program { name: "enable"; + + signal: "elm,state,enabled"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "base"; + + after: "enable_text"; + + } + + program { name: "enable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "disabled_visible")) + + set_state(PART:"elm.text", "visible", 0.0); + + else + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + } + + } + +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/datacontrol_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/datacontrol_viewer.edc new file mode 100644 index 0000000..3630d5f --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/datacontrol_viewer.edc @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "datacontrol_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "cursor_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/display_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/display_viewer.edc new file mode 100644 index 0000000..9833963 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/display_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "display_viewer"; + parts{ + part{ + name: "width_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "height_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + } + } + + part{ + name: "bpp_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+3*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/efl_callback_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/efl_callback_viewer.edc new file mode 100644 index 0000000..81c62a8 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/efl_callback_viewer.edc @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "efl_test"; + parts{ + part{ + name: "_title"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + + part{ + name: "_callback"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.2; + } + } + } + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.25; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.42; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/event_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/event_viewer.edc new file mode 100644 index 0000000..85d21b8 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/event_viewer.edc @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "event_viewer"; + parts{ + part{ + name: "language_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "orientation_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + } + } + + part{ + name: "region_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + } + } + part{ + name: "low_battery_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + } + } + part{ + name: "low_memory_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*5; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/feature_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/feature_viewer.edc new file mode 100644 index 0000000..edc51c2 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/feature_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "feature_viewer"; + parts{ + part{ + name: "feature_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.43; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/gps_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/gps_viewer.edc new file mode 100644 index 0000000..86c473b --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/gps_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "gps_viewer"; + parts{ + part{ + name: "lat_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "lon_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 2*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/graphics_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/graphics_viewer.edc new file mode 100644 index 0000000..85b51a6 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/graphics_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "graphics_viewer"; + parts{ + part{ + name: "graphics_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/image_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/image_viewer.edc new file mode 100644 index 0000000..e9aa0df --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/image_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "image_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/input_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/input_viewer.edc new file mode 100644 index 0000000..10aedf4 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/input_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "input_viewer"; + parts{ + part{ + name: "input_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.63; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/mock_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/mock_viewer.edc new file mode 100644 index 0000000..d558f1d --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/mock_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "mock_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.1; } + rel2 {relative: 1.0 HEADER_HIGHT+0.26; } + } + } + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.26; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.43 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/nfc_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/nfc_viewer.edc new file mode 100644 index 0000000..7fb6810 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/nfc_viewer.edc @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "nfc_viewer_tag"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.17; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.46; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "nfc_viewer_p2p"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.17; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.46; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/pick_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/pick_viewer.edc new file mode 100644 index 0000000..5d35cc8 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/pick_viewer.edc @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.2 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "pick_viewer"; + parts{ + part{ + name: "pick_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "pick_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "pick_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.26; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING HEADER_HIGHT+0.43; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 HEADER_HIGHT+0.43; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_y: "pick_list"; + relative: 0.0 1.0; + } + rel2 { relative: 1.0 HEADER_HIGHT+0.43; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/push_service.edc b/tbtcoreapp/res/edje/2.4/wearable/push_service.edc new file mode 100644 index 0000000..612dc2e --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/push_service.edc @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.2 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "push_service"; + parts{ + part{ + name: "push_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "text_box_first"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "push_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*2; + } + } + } + + part{ + name: "text_box_second"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "text_box_first"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*3; + } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.46; + } + rel2 { + relative: 1.0 0.63 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/runtimeinfo_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/runtimeinfo_viewer.edc new file mode 100644 index 0000000..4566e2f --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/runtimeinfo_viewer.edc @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 1.0 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "runtimeinfo_viewer"; + parts{ + part{ + name: "info_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.02 0.0; } + rel2 {relative: 0.98 TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/sensor_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/sensor_viewer.edc new file mode 100644 index 0000000..dce8908 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/sensor_viewer.edc @@ -0,0 +1,415 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define GL_HEIGHT 0.13 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.26; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.26; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.43; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + group + { + name: "accelerometer_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.43; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + + group + { + name: "gyro_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+GL_HEIGHT; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.26; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.26; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.43; + } + } + } + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "magnatometer_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + +group + { + name: "pressure_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + } + } + + part{ + name: "text_view_label"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.02 0.5; + } + rel2{ + relative:1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "light_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.43; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "ultra_violet_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.43; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/shortcut_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/shortcut_viewer.edc new file mode 100644 index 0000000..268a28d --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/shortcut_viewer.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.1 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "shortcut_viewer"; + parts{ + + part{ + name: "shortcut_body"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 0.7 0.2; } + } + } + + part{ + name: "shortcut_body2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.7 0.1; } + rel2 {relative: 1.0 0.2; } + } + } + + part{ + name: "shortcut_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2; } + rel2 {relative: 1.0 0.3; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/sound_player.edc b/tbtcoreapp/res/edje/2.4/wearable/sound_player.edc new file mode 100644 index 0000000..8731bdf --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/sound_player.edc @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sound_player"; + parts{ + part{ + name: "sound_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "icon_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.18; + } + } + } + + + + part{ + name: "progressbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + rel1{ + relative: 0.0 HEADER_HIGHT+0.18; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.26; + } + } + } + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.28; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.43; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/touch_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/touch_viewer.edc new file mode 100644 index 0000000..e438fdb --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/touch_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "touch_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; to_y: "cursor_text"; } + rel2 {relative: 1.0 HEADER_HIGHT+0.43; } + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/ui_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/ui_viewer.edc new file mode 100644 index 0000000..4428f18 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/ui_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "ui_viewer"; + parts{ + part{ + name: "ui_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/video_player.edc b/tbtcoreapp/res/edje/2.4/wearable/video_player.edc new file mode 100644 index 0000000..9eb1969 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/video_player.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "video_player"; + parts{ + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.895; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_x: "left_padding"; + relative: 1.0 0.80; + } + rel2 { to_x: "right_padding"; + relative: 0.0 0.9; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/wearable_toolbar.edc b/tbtcoreapp/res/edje/2.4/wearable/wearable_toolbar.edc new file mode 100644 index 0000000..c24834b --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/wearable_toolbar.edc @@ -0,0 +1,14 @@ +#define WEARABLE_TOOLBAR_PART \ +part { name: "wearable_toolbar"; \ + type: SWALLOW; \ + description { \ + state: "default" 0.0; \ + rel1 { \ + relative: 0.0 0.63; \ + } \ + rel2 { \ + relative: 1.0 0.8; \ + } \ + visible: 1; \ + } \ +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/wifi_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/wifi_viewer.edc new file mode 100644 index 0000000..02fcb52 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/wifi_viewer.edc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifi_viewer"; + parts{ + part{ + name: "wifi_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/wifidirect_info_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/wifidirect_info_viewer.edc new file mode 100644 index 0000000..b537011 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/wifidirect_info_viewer.edc @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "info1"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative: 1.0 0.2; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info2"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 1.0 0.3; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info3"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.3; + } + rel2{ + relative: 1.0 0.4; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info4"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info5"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.5; + } + rel2{ + relative: 1.0 0.6; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info6"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.6; + } + rel2{ + relative: 1.0 0.7; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "info7"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.7; + } + rel2{ + relative: 1.0 0.8; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable/wifidirect_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable/wifidirect_viewer.edc new file mode 100644 index 0000000..c00827f --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable/wifidirect_viewer.edc @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_info"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 TEXT_HEIGHT*2; } + } + } + + part{ + name: "wifidirect_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_list"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/animation_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/animation_viewer.edc new file mode 100644 index 0000000..0764e82 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/animation_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "animation_viewer"; + parts{ + part{ + name: "animation_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/bluetooth_le_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/bluetooth_le_viewer.edc new file mode 100755 index 0000000..c6c0364 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/bluetooth_le_viewer.edc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetoothle_viewer"; + parts{ + part{ + name: "bluetoothle_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetoothle_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetoothle_text"; + } + rel2{ + relative: 1.0 0.43; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetoothle_list"; + } + rel2 { + relative: 1.0 63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/bluetooth_oob_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/bluetooth_oob_viewer.edc new file mode 100644 index 0000000..9e937f9 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/bluetooth_oob_viewer.edc @@ -0,0 +1,41 @@ +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_oob_viewer"; + parts{ + part{ + name: "bluetooth_oob_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.43; + } + rel2 { + relative: 1.0 0.6 ; } + visible: 1; + + } + } + + WEARABLE_TOOLBAR_PART + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/bluetooth_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/bluetooth_viewer.edc new file mode 100644 index 0000000..774ab47 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/bluetooth_viewer.edc @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_viewer"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.43; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetooth_list"; + } + rel2 { + relative: 1.0 0.6; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "bluetooth_viewer_cancel_check"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2+0.0; } + rel2 {relative: 1.0 0.2+TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.28; + } + } + } + + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.25 1.0; + to_y: "bluetooth_list"; + } + rel2{ + relative: 0.75 0.43; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 6.0; + } + visible: 1; + } + } + +WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/camera_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/camera_viewer.edc new file mode 100644 index 0000000..301aaee --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/camera_viewer.edc @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "camera_viewer"; + parts{ + part{ + name: "camera_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + visible: 1; + rel1{ + relative: 0.0 0.33; + } + rel2{ + relative: 1.0 0.43; + } + } + } + + part{ + name: "video_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.43;} + rel2 {relative: 1.0 0.51; } + } + } + + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.51; + } + rel2{ + relative: 1.0 0.62; + } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.62; + } + rel2 { + relative: 1.0 0.7; + } + visible: 1; + } + } + + part { name: "wearable_toolbar"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.7; + } + rel2 { + relative: 1.0 0.8; + } + visible: 1; + } + } + + } + } + + group + { + name: "camera_face"; + parts{ + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative: 1.0 0.9; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/custom_button.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/custom_button.edc new file mode 100644 index 0000000..7ae12a3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/custom_button.edc @@ -0,0 +1,383 @@ +collections { + + group { name: "elm/button/base/chucknorris"; + + alias: "elm/button/base/default"; + + parts { + + part { name: "border"; + + type: RECT; + + description { state: "default" 0.0; + + color: 0 0 0 255; + + } + + description { state: "in" 0.0; + + color: 50 180 180 255; + + } + + } + + part { name: "base"; + + type: RECT; + + mouse_events: 1; + + description { state: "default" 0.0; + + rel1.to: "border"; + + rel1.offset: 1 1; + + rel2.to: "border"; + + rel2.offset: -2 -2; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + color: 230 230 230 255; + + } + + } + + part { name: "elm.swallow.content"; + + type: SWALLOW; + + mouse_events: 0; + + description { state: "default" 0.0; + + fixed: 1 0; + + visible: 0; + + align: 0.0 0.5; + + rel1.offset: 4 4; + + rel2.offset: 3 -5; + + rel2.relative: 0.0 1.0; + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: 4 -5; + + } + + description { state: "icononly" 0.0; + + inherit: "default" 0.0; + + fixed: 0 0; + + visible: 1; + + align: 0.5 0.5; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: -5 -5; + + rel2.relative: 1.0 1.0; + + } + + } + + part { name: "elm.text"; + + type: TEXT; + + mouse_events: 0; + + scale: 1; + + description { state: "default" 0.0; + + visible: 0; + + rel1.to_x: "elm.swallow.content"; + + rel1.relative: 1.0 0.0; + + rel1.offset: 0 4; + + rel2.offset: -5 -5; + + color: 0 0 0 255; + + text { + + font: "Sans"; + + size: 10; + + min: 0 0; + + text_class: "button"; + + } + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + } + + description { state: "disabled_visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + } + + programs { + + program { name: "button_mouse_in"; + + signal: "mouse,in"; + + source: "base"; + + action: STATE_SET "in" 0.0; + + target: "border"; + + } + + program { name: "button_mouse_out"; + + signal: "mouse,out"; + + source: "base"; + + action: STATE_SET "default" 0.0; + + target: "border"; + + } + + program { name: "button_unclick"; + + signal: "mouse,up,1"; + + source: "base"; + + action: SIGNAL_EMIT "elm,action,click" ""; + + } + + program { name: "button_click"; + + signal: "mouse,down,1"; + + source: "base"; + + } + + program { name: "text_show"; + + signal: "elm,state,text,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "icononly")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + set_state(PART:"elm.text", "visible", 0.0); + + } + + } + + program { name: "text_hide"; + + signal: "elm,state,text,hidden"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + program { name: "icon_show"; + + signal: "elm,state,icon,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + else + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + } + + } + + program { name: "icon_hide"; + + signal: "elm,state,icon,hidden"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "elm.swallow.content"; + + } + + program { name: "disable"; + + signal: "elm,state,disabled"; + + source: "elm"; + + action: STATE_SET "disabled" 0.0; + + target: "base"; + + after: "disable_text"; + + } + + program { name: "disable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.text", "disabled_visible", 0.0); + + else + + set_state(PART:"elm.text", "disabled", 0.0); + + } + + } + + program { name: "enable"; + + signal: "elm,state,enabled"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "base"; + + after: "enable_text"; + + } + + program { name: "enable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "disabled_visible")) + + set_state(PART:"elm.text", "visible", 0.0); + + else + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + } + + } + +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/datacontrol_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/datacontrol_viewer.edc new file mode 100644 index 0000000..c5a5d42 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/datacontrol_viewer.edc @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "datacontrol_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "cursor_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/display_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/display_viewer.edc new file mode 100644 index 0000000..6af9b27 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/display_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "display_viewer"; + parts{ + part{ + name: "width_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "height_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + } + } + + part{ + name: "bpp_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+3*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/efl_callback_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/efl_callback_viewer.edc new file mode 100644 index 0000000..441a925 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/efl_callback_viewer.edc @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "efl_test"; + parts{ + part{ + name: "_title"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + + part{ + name: "_callback"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.2; + } + } + } + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.20; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.37; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/event_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/event_viewer.edc new file mode 100644 index 0000000..a457ba3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/event_viewer.edc @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "event_viewer"; + parts{ + part{ + name: "language_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "orientation_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + } + } + + part{ + name: "region_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + } + } + part{ + name: "low_battery_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + } + } + part{ + name: "low_memory_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*5; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/feature_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/feature_viewer.edc new file mode 100644 index 0000000..c93a081 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/feature_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "feature_viewer"; + parts{ + part{ + name: "feature_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.38; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/gps_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/gps_viewer.edc new file mode 100644 index 0000000..afdb3a5 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/gps_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "gps_viewer"; + parts{ + part{ + name: "lat_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "lon_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 2*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/graphics_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/graphics_viewer.edc new file mode 100644 index 0000000..ed4b94b --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/graphics_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "graphics_viewer"; + parts{ + part{ + name: "graphics_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.58; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/image_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/image_viewer.edc new file mode 100644 index 0000000..1114e0c --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/image_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "image_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.58; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/input_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/input_viewer.edc new file mode 100644 index 0000000..801ce89 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/input_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "input_viewer"; + parts{ + part{ + name: "input_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.63; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/mock_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/mock_viewer.edc new file mode 100644 index 0000000..b6722f3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/mock_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "mock_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.1; } + rel2 {relative: 1.0 HEADER_HIGHT+0.21; } + } + } + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.21; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.38 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/nfc_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/nfc_viewer.edc new file mode 100644 index 0000000..f887ca5 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/nfc_viewer.edc @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "nfc_viewer_tag"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.17; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.41; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.58; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "nfc_viewer_p2p"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.17; } + rel2 {relative: 1.0 HEADER_HIGHT+0.17+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.46; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/pick_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/pick_viewer.edc new file mode 100644 index 0000000..79da21e --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/pick_viewer.edc @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.25 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "pick_viewer"; + parts{ + part{ + name: "pick_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "pick_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "pick_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.21; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING HEADER_HIGHT+0.38; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 HEADER_HIGHT+0.38; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_y: "pick_list"; + relative: 0.0 1.0; + } + rel2 { relative: 1.0 HEADER_HIGHT+0.38; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/push_service.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/push_service.edc new file mode 100644 index 0000000..ca41d93 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/push_service.edc @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.2 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "push_service"; + parts{ + part{ + name: "push_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "text_box_first"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "push_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*2; + } + } + } + + part{ + name: "text_box_second"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "text_box_first"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*3; + } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.46; + } + rel2 { + relative: 1.0 0.63 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/runtimeinfo_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/runtimeinfo_viewer.edc new file mode 100644 index 0000000..85a00c7 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/runtimeinfo_viewer.edc @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 1.0 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "runtimeinfo_viewer"; + parts{ + part{ + name: "info_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.02 0.2; } + rel2 {relative: 0.98 TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/sensor_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/sensor_viewer.edc new file mode 100644 index 0000000..6ae107a --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/sensor_viewer.edc @@ -0,0 +1,415 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define GL_HEIGHT 0.13 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.21; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.21; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.38; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + group + { + name: "accelerometer_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.38; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + + group + { + name: "gyro_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+GL_HEIGHT; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.21; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.21; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.38; + } + } + } + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "magnatometer_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.35; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.35; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.35; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.35; + } + rel2{ + relative: 1.0 0.58; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + +group + { + name: "pressure_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.35; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.35; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.35; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.45; + } + } + } + + part{ + name: "text_view_label"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.02 0.5; + } + rel2{ + relative:1.0 0.58; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "light_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.38; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "ultra_violet_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.38; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/shortcut_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/shortcut_viewer.edc new file mode 100644 index 0000000..a312b03 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/shortcut_viewer.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.1 +#define CONTENT_X_PAD 0.15 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "shortcut_viewer"; + parts{ + + part{ + name: "shortcut_body"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 0.7 0.2; } + } + } + + part{ + name: "shortcut_body2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.7 0.1; } + rel2 {relative: 1.0 0.2; } + } + } + + part{ + name: "shortcut_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2; } + rel2 {relative: 1.0 0.3; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/sound_player.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/sound_player.edc new file mode 100644 index 0000000..313d9be --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/sound_player.edc @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sound_player"; + parts{ + part{ + name: "sound_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "icon_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.13; + } + } + } + + + + part{ + name: "progressbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + rel1{ + relative: 0.0 HEADER_HIGHT+0.13; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.21; + } + } + } + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.23; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.38; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/touch_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/touch_viewer.edc new file mode 100644 index 0000000..1ba2fb5 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/touch_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "touch_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; to_y: "cursor_text"; } + rel2 {relative: 1.0 HEADER_HIGHT+0.38; } + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/ui_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/ui_viewer.edc new file mode 100644 index 0000000..248438b --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/ui_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "ui_viewer"; + parts{ + part{ + name: "ui_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/video_player.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/video_player.edc new file mode 100644 index 0000000..1088534 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/video_player.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "video_player"; + parts{ + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.895; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_x: "left_padding"; + relative: 1.0 0.80; + } + rel2 { to_x: "right_padding"; + relative: 0.0 0.9; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/wearable_320_x_320_toolbar.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/wearable_320_x_320_toolbar.edc new file mode 100644 index 0000000..18fe226 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/wearable_320_x_320_toolbar.edc @@ -0,0 +1,14 @@ +#define WEARABLE_TOOLBAR_PART \ +part { name: "wearable_toolbar"; \ + type: SWALLOW; \ + description { \ + state: "default" 0.0; \ + rel1 { \ + relative: 0.0 0.60; \ + } \ + rel2 { \ + relative: 1.0 0.78; \ + } \ + visible: 1; \ + } \ +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/wifi_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/wifi_viewer.edc new file mode 100644 index 0000000..529baef --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/wifi_viewer.edc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifi_viewer"; + parts{ + part{ + name: "wifi_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_320_x_320/wifidirect_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/wifidirect_viewer.edc new file mode 100644 index 0000000..cb537ff --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_320_x_320/wifidirect_viewer.edc @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_320_x_320_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_info"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 TEXT_HEIGHT*2; } + } + } + + part{ + name: "wifidirect_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_list"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/animation_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/animation_viewer.edc new file mode 100644 index 0000000..587efae --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/animation_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "animation_viewer"; + parts{ + part{ + name: "animation_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/bluetooth_le_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/bluetooth_le_viewer.edc new file mode 100755 index 0000000..7b693d9 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/bluetooth_le_viewer.edc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetoothle_viewer"; + parts{ + part{ + name: "bluetoothle_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetoothle_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetoothle_text"; + } + rel2{ + relative: 1.0 0.43; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetoothle_list"; + } + rel2 { + relative: 1.0 63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/bluetooth_oob_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/bluetooth_oob_viewer.edc new file mode 100644 index 0000000..d847174 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/bluetooth_oob_viewer.edc @@ -0,0 +1,41 @@ +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_oob_viewer"; + parts{ + part{ + name: "bluetooth_oob_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9 ; } + visible: 1; + + } + } + + WEARABLE_TOOLBAR_PART + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/bluetooth_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/bluetooth_viewer.edc new file mode 100644 index 0000000..75168e9 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/bluetooth_viewer.edc @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_viewer"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetooth_list"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "bluetooth_viewer_cancel_check"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.70; + } + } + } + + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.25 1.0; + to_y: "bluetooth_list"; + } + rel2{ + relative: 0.75 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/camera_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/camera_viewer.edc new file mode 100644 index 0000000..e2f4c80 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/camera_viewer.edc @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.0 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "camera_viewer"; + parts{ + part{ + name: "camera_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.9; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.29; + } + } + } + + part{ + name: "video_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.29;} + rel2 {relative: 1.0 HEADER_HIGHT+0.39; } + } + } + + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.39; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.59; + } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.69; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.83; + } + visible: 1; + } + } + + part { name: "wearable_toolbar"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.84; + } + rel2 { + relative: 1.0 1.0; + } + visible: 1; + } + } + + } + } + + group + { + name: "camera_face"; + parts{ + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.53; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/custom_button.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/custom_button.edc new file mode 100644 index 0000000..7ae12a3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/custom_button.edc @@ -0,0 +1,383 @@ +collections { + + group { name: "elm/button/base/chucknorris"; + + alias: "elm/button/base/default"; + + parts { + + part { name: "border"; + + type: RECT; + + description { state: "default" 0.0; + + color: 0 0 0 255; + + } + + description { state: "in" 0.0; + + color: 50 180 180 255; + + } + + } + + part { name: "base"; + + type: RECT; + + mouse_events: 1; + + description { state: "default" 0.0; + + rel1.to: "border"; + + rel1.offset: 1 1; + + rel2.to: "border"; + + rel2.offset: -2 -2; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + color: 230 230 230 255; + + } + + } + + part { name: "elm.swallow.content"; + + type: SWALLOW; + + mouse_events: 0; + + description { state: "default" 0.0; + + fixed: 1 0; + + visible: 0; + + align: 0.0 0.5; + + rel1.offset: 4 4; + + rel2.offset: 3 -5; + + rel2.relative: 0.0 1.0; + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: 4 -5; + + } + + description { state: "icononly" 0.0; + + inherit: "default" 0.0; + + fixed: 0 0; + + visible: 1; + + align: 0.5 0.5; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: -5 -5; + + rel2.relative: 1.0 1.0; + + } + + } + + part { name: "elm.text"; + + type: TEXT; + + mouse_events: 0; + + scale: 1; + + description { state: "default" 0.0; + + visible: 0; + + rel1.to_x: "elm.swallow.content"; + + rel1.relative: 1.0 0.0; + + rel1.offset: 0 4; + + rel2.offset: -5 -5; + + color: 0 0 0 255; + + text { + + font: "Sans"; + + size: 10; + + min: 0 0; + + text_class: "button"; + + } + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + } + + description { state: "disabled_visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + } + + programs { + + program { name: "button_mouse_in"; + + signal: "mouse,in"; + + source: "base"; + + action: STATE_SET "in" 0.0; + + target: "border"; + + } + + program { name: "button_mouse_out"; + + signal: "mouse,out"; + + source: "base"; + + action: STATE_SET "default" 0.0; + + target: "border"; + + } + + program { name: "button_unclick"; + + signal: "mouse,up,1"; + + source: "base"; + + action: SIGNAL_EMIT "elm,action,click" ""; + + } + + program { name: "button_click"; + + signal: "mouse,down,1"; + + source: "base"; + + } + + program { name: "text_show"; + + signal: "elm,state,text,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "icononly")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + set_state(PART:"elm.text", "visible", 0.0); + + } + + } + + program { name: "text_hide"; + + signal: "elm,state,text,hidden"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + program { name: "icon_show"; + + signal: "elm,state,icon,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + else + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + } + + } + + program { name: "icon_hide"; + + signal: "elm,state,icon,hidden"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "elm.swallow.content"; + + } + + program { name: "disable"; + + signal: "elm,state,disabled"; + + source: "elm"; + + action: STATE_SET "disabled" 0.0; + + target: "base"; + + after: "disable_text"; + + } + + program { name: "disable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.text", "disabled_visible", 0.0); + + else + + set_state(PART:"elm.text", "disabled", 0.0); + + } + + } + + program { name: "enable"; + + signal: "elm,state,enabled"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "base"; + + after: "enable_text"; + + } + + program { name: "enable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "disabled_visible")) + + set_state(PART:"elm.text", "visible", 0.0); + + else + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + } + + } + +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/datacontrol_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/datacontrol_viewer.edc new file mode 100644 index 0000000..0f6be55 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/datacontrol_viewer.edc @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "datacontrol_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "cursor_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/display_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/display_viewer.edc new file mode 100644 index 0000000..407425b --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/display_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "display_viewer"; + parts{ + part{ + name: "width_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "height_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + } + } + + part{ + name: "bpp_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+3*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/efl_callback_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/efl_callback_viewer.edc new file mode 100644 index 0000000..afeea4e --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/efl_callback_viewer.edc @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "efl_test"; + parts{ + part{ + name: "_title"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + + part{ + name: "_callback"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.2; + } + } + } + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.25; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.42; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/event_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/event_viewer.edc new file mode 100644 index 0000000..6a717aa --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/event_viewer.edc @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "event_viewer"; + parts{ + part{ + name: "language_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "orientation_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + } + } + + part{ + name: "region_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + } + } + part{ + name: "low_battery_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + } + } + part{ + name: "low_memory_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*5; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/feature_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/feature_viewer.edc new file mode 100644 index 0000000..644aff4 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/feature_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "feature_viewer"; + parts{ + part{ + name: "feature_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.43; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/gps_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/gps_viewer.edc new file mode 100644 index 0000000..3f20b0b --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/gps_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "gps_viewer"; + parts{ + part{ + name: "lat_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "lon_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 2*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/graphics_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/graphics_viewer.edc new file mode 100644 index 0000000..f7275e0 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/graphics_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "graphics_viewer"; + parts{ + part{ + name: "graphics_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/image_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/image_viewer.edc new file mode 100644 index 0000000..17f20e7 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/image_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "image_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/input_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/input_viewer.edc new file mode 100644 index 0000000..9bf164b --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/input_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.10 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "input_viewer"; + parts{ + part{ + name: "input_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.63; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/mock_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/mock_viewer.edc new file mode 100644 index 0000000..7ad8435 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/mock_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "mock_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.1; } + rel2 {relative: 1.0 HEADER_HIGHT+0.26; } + } + } + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.26; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.43 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/nfc_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/nfc_viewer.edc new file mode 100644 index 0000000..5ef2025 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/nfc_viewer.edc @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.1 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "nfc_viewer_tag"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.16; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.16; } + rel2 {relative: 1.0 HEADER_HIGHT+0.16+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.60; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + align: 0.0 0.0; + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.76; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "nfc_viewer_p2p"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.16; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.16; } + rel2 {relative: 1.0 HEADER_HIGHT+0.16+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.60; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + align: 0.0 0.0; + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.76; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/pick_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/pick_viewer.edc new file mode 100644 index 0000000..02154e3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/pick_viewer.edc @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.2 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "pick_viewer"; + parts{ + part{ + name: "pick_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "pick_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "pick_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.26; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING HEADER_HIGHT+0.43; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 HEADER_HIGHT+0.43; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_y: "pick_list"; + relative: 0.0 1.0; + } + rel2 { relative: 1.0 HEADER_HIGHT+0.43; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/push_service.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/push_service.edc new file mode 100644 index 0000000..f9965d3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/push_service.edc @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.1 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "push_service"; + parts{ + part{ + name: "push_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "text_box_first"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "push_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*2; + } + } + } + + part{ + name: "text_box_second"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "text_box_first"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*3; + } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.56; + } + rel2 { + relative: 1.0 0.73 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/runtimeinfo_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/runtimeinfo_viewer.edc new file mode 100644 index 0000000..524e83d --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/runtimeinfo_viewer.edc @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 1.0 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "runtimeinfo_viewer"; + parts{ + part{ + name: "info_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.02 0.0; } + rel2 {relative: 0.98 TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/sensor_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/sensor_viewer.edc new file mode 100644 index 0000000..1f6a278 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/sensor_viewer.edc @@ -0,0 +1,415 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define GL_HEIGHT 0.13 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.26; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.26; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.43; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + group + { + name: "accelerometer_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.43; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + + group + { + name: "gyro_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+GL_HEIGHT; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.38; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.38; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.55; + } + } + } + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "magnatometer_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + +group + { + name: "pressure_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + } + } + + part{ + name: "text_view_label"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.02 0.5; + } + rel2{ + relative:1.0 0.63; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "light_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.43; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "ultra_violet_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.43; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/shortcut_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/shortcut_viewer.edc new file mode 100644 index 0000000..a81118b --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/shortcut_viewer.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.1 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "shortcut_viewer"; + parts{ + + part{ + name: "shortcut_body"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 0.7 0.2; } + } + } + + part{ + name: "shortcut_body2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.7 0.1; } + rel2 {relative: 1.0 0.2; } + } + } + + part{ + name: "shortcut_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2; } + rel2 {relative: 1.0 0.3; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/sound_player.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/sound_player.edc new file mode 100644 index 0000000..0314931 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/sound_player.edc @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sound_player"; + parts{ + part{ + name: "sound_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "icon_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.18; + } + } + } + + + + part{ + name: "progressbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + rel1{ + relative: 0.0 HEADER_HIGHT+0.18; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.26; + } + } + } + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.28; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.43; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/touch_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/touch_viewer.edc new file mode 100644 index 0000000..cc97605 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/touch_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "touch_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; to_y: "cursor_text"; } + rel2 {relative: 1.0 HEADER_HIGHT+0.43; } + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/ui_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/ui_viewer.edc new file mode 100644 index 0000000..10f9dd5 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/ui_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "ui_viewer"; + parts{ + part{ + name: "ui_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/video_player.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/video_player.edc new file mode 100644 index 0000000..992abfe --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/video_player.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "video_player"; + parts{ + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.895; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_x: "left_padding"; + relative: 1.0 0.80; + } + rel2 { to_x: "right_padding"; + relative: 0.0 0.9; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/wearable_360_x_480_toolbar.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/wearable_360_x_480_toolbar.edc new file mode 100644 index 0000000..871fc75 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/wearable_360_x_480_toolbar.edc @@ -0,0 +1,14 @@ +#define WEARABLE_TOOLBAR_PART \ +part { name: "wearable_toolbar"; \ + type: SWALLOW; \ + description { \ + state: "default" 0.0; \ + rel1 { \ + relative: 0.0 0.74; \ + } \ + rel2 { \ + relative: 1.0 0.9; \ + } \ + visible: 1; \ + } \ +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/wifi_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/wifi_viewer.edc new file mode 100644 index 0000000..c2265c3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/wifi_viewer.edc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifi_viewer"; + parts{ + part{ + name: "wifi_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/wifidirect_info_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/wifidirect_info_viewer.edc new file mode 100644 index 0000000..fd70980 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/wifidirect_info_viewer.edc @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "info1"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.1; + } + rel2{ + relative: 1.0 0.2; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info2"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 1.0 0.3; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info3"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.3; + } + rel2{ + relative: 1.0 0.4; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info4"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info5"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.5; + } + rel2{ + relative: 1.0 0.6; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + part{ + name: "info6"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.6; + } + rel2{ + relative: 1.0 0.7; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "info7"; + type: TEXT; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.7; + } + rel2{ + relative: 1.0 0.8; + } + text { font: "Tizen:style=regular"; size: 20; min: 1 1; } + color: 0 0 0 255; + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_360_x_480/wifidirect_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/wifidirect_viewer.edc new file mode 100644 index 0000000..03c8d1d --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_360_x_480/wifidirect_viewer.edc @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_360_x_480_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_info"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 TEXT_HEIGHT*2; } + } + } + + part{ + name: "wifidirect_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_list"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/animation_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/animation_viewer.edc new file mode 100644 index 0000000..69c0679 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/animation_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "animation_viewer"; + parts{ + part{ + name: "animation_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/bluetooth_le_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/bluetooth_le_viewer.edc new file mode 100755 index 0000000..2042707 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/bluetooth_le_viewer.edc @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetoothle_viewer"; + parts{ + part{ + name: "bluetoothle_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetoothle_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetoothle_text"; + } + rel2{ + relative: 1.0 0.43; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetoothle_list"; + } + rel2 { + relative: 1.0 63; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/bluetooth_oob_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/bluetooth_oob_viewer.edc new file mode 100644 index 0000000..7fd01d2 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/bluetooth_oob_viewer.edc @@ -0,0 +1,41 @@ +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_oob_viewer"; + parts{ + part{ + name: "bluetooth_oob_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9 ; } + visible: 1; + + } + } + + WEARABLE_TOOLBAR_PART + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/bluetooth_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/bluetooth_viewer.edc new file mode 100644 index 0000000..d4ddf8d --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/bluetooth_viewer.edc @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "bluetooth_viewer"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "bluetooth_list"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "bluetooth_viewer_cancel_check"; + parts{ + part{ + name: "bluetooth_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "bluetooth_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "bluetooth_text"; + } + rel2{ + relative: 1.0 0.70; + } + } + } + + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.25 1.0; + to_y: "bluetooth_list"; + } + rel2{ + relative: 0.75 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/camera_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/camera_viewer.edc new file mode 100644 index 0000000..c52c10f --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/camera_viewer.edc @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "camera_viewer"; + parts{ + part{ + name: "camera_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; + } + rel2{ + relative: 1.0 0.38; + } + } + } + + part{ + name: "video_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.38;} + rel2 {relative: 1.0 (0.38 + TEXT_HEIGHT); } + } + } + + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 (0.38 + TEXT_HEIGHT); + } + rel2{ + relative: 1.0 0.52; + } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.52; + } + rel2 { + relative: 1.0 0.6; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "camera_face"; + parts{ + part{ + name: "camera_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative: 1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/custom_button.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/custom_button.edc new file mode 100644 index 0000000..7ae12a3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/custom_button.edc @@ -0,0 +1,383 @@ +collections { + + group { name: "elm/button/base/chucknorris"; + + alias: "elm/button/base/default"; + + parts { + + part { name: "border"; + + type: RECT; + + description { state: "default" 0.0; + + color: 0 0 0 255; + + } + + description { state: "in" 0.0; + + color: 50 180 180 255; + + } + + } + + part { name: "base"; + + type: RECT; + + mouse_events: 1; + + description { state: "default" 0.0; + + rel1.to: "border"; + + rel1.offset: 1 1; + + rel2.to: "border"; + + rel2.offset: -2 -2; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + color: 230 230 230 255; + + } + + } + + part { name: "elm.swallow.content"; + + type: SWALLOW; + + mouse_events: 0; + + description { state: "default" 0.0; + + fixed: 1 0; + + visible: 0; + + align: 0.0 0.5; + + rel1.offset: 4 4; + + rel2.offset: 3 -5; + + rel2.relative: 0.0 1.0; + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: 4 -5; + + } + + description { state: "icononly" 0.0; + + inherit: "default" 0.0; + + fixed: 0 0; + + visible: 1; + + align: 0.5 0.5; + + aspect: 1.0 1.0; + + aspect_preference: VERTICAL; + + rel2.offset: -5 -5; + + rel2.relative: 1.0 1.0; + + } + + } + + part { name: "elm.text"; + + type: TEXT; + + mouse_events: 0; + + scale: 1; + + description { state: "default" 0.0; + + visible: 0; + + rel1.to_x: "elm.swallow.content"; + + rel1.relative: 1.0 0.0; + + rel1.offset: 0 4; + + rel2.offset: -5 -5; + + color: 0 0 0 255; + + text { + + font: "Sans"; + + size: 10; + + min: 0 0; + + text_class: "button"; + + } + + } + + description { state: "visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + description { state: "disabled" 0.0; + + inherit: "default" 0.0; + + } + + description { state: "disabled_visible" 0.0; + + inherit: "default" 0.0; + + visible: 1; + + text.min: 1 1; + + } + + } + + programs { + + program { name: "button_mouse_in"; + + signal: "mouse,in"; + + source: "base"; + + action: STATE_SET "in" 0.0; + + target: "border"; + + } + + program { name: "button_mouse_out"; + + signal: "mouse,out"; + + source: "base"; + + action: STATE_SET "default" 0.0; + + target: "border"; + + } + + program { name: "button_unclick"; + + signal: "mouse,up,1"; + + source: "base"; + + action: SIGNAL_EMIT "elm,action,click" ""; + + } + + program { name: "button_click"; + + signal: "mouse,down,1"; + + source: "base"; + + } + + program { name: "text_show"; + + signal: "elm,state,text,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "icononly")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + set_state(PART:"elm.text", "visible", 0.0); + + } + + } + + program { name: "text_hide"; + + signal: "elm,state,text,hidden"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.swallow.content", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + program { name: "icon_show"; + + signal: "elm,state,icon,visible"; + + source: "elm"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.swallow.content", "visible", 0.0); + + else + + set_state(PART:"elm.swallow.content", "icononly", 0.0); + + } + + } + + program { name: "icon_hide"; + + signal: "elm,state,icon,hidden"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "elm.swallow.content"; + + } + + program { name: "disable"; + + signal: "elm,state,disabled"; + + source: "elm"; + + action: STATE_SET "disabled" 0.0; + + target: "base"; + + after: "disable_text"; + + } + + program { name: "disable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "visible")) + + set_state(PART:"elm.text", "disabled_visible", 0.0); + + else + + set_state(PART:"elm.text", "disabled", 0.0); + + } + + } + + program { name: "enable"; + + signal: "elm,state,enabled"; + + source: "elm"; + + action: STATE_SET "default" 0.0; + + target: "base"; + + after: "enable_text"; + + } + + program { name: "enable_text"; + + script { + + new st[31]; + + new Float:vl; + + get_state(PART:"elm.text", st, 30, vl); + + if (!strcmp(st, "disabled_visible")) + + set_state(PART:"elm.text", "visible", 0.0); + + else + + set_state(PART:"elm.text", "default", 0.0); + + } + + } + + } + + } + +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/datacontrol_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/datacontrol_viewer.edc new file mode 100644 index 0000000..6e4981c --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/datacontrol_viewer.edc @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "datacontrol_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + group + { + name: "cursor_viewer"; + parts{ + part{ + name: "datacontrol_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.80; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "datacontrol_view"; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/display_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/display_viewer.edc new file mode 100644 index 0000000..0a40cc8 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/display_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.23 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "display_viewer"; + parts{ + part{ + name: "width_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "height_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + } + } + + part{ + name: "bpp_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+2*TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+3*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/efl_callback_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/efl_callback_viewer.edc new file mode 100644 index 0000000..c85b191 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/efl_callback_viewer.edc @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.2 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "efl_test"; + parts{ + part{ + name: "_title"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + + part{ + name: "_callback"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.1; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.2; + } + } + } + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.32; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.4; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/event_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/event_viewer.edc new file mode 100644 index 0000000..1fffe67 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/event_viewer.edc @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "event_viewer"; + parts{ + part{ + name: "language_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "orientation_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + } + } + + part{ + name: "region_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*2; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + } + } + part{ + name: "low_battery_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*3; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + } + } + part{ + name: "low_memory_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT*4; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT*5; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/feature_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/feature_viewer.edc new file mode 100644 index 0000000..2f76483 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/feature_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.0 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "feature_viewer"; + parts{ + part{ + name: "feature_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 0.6; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/gps_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/gps_viewer.edc new file mode 100644 index 0000000..66f2805 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/gps_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "gps_viewer"; + parts{ + part{ + name: "lat_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "lon_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 2*TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/graphics_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/graphics_viewer.edc new file mode 100644 index 0000000..2ea1e0b --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/graphics_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.0 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "graphics_viewer"; + parts{ + part{ + name: "graphics_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+0.0; + } + rel2{ + relative:1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/image_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/image_viewer.edc new file mode 100644 index 0000000..75f48f0 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/image_viewer.edc @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.34 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "image_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/input_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/input_viewer.edc new file mode 100644 index 0000000..2abafc3 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/input_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.0 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "input_viewer"; + parts{ + part{ + name: "input_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.40; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/mock_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/mock_viewer.edc new file mode 100644 index 0000000..da42922 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/mock_viewer.edc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "mock_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.1; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.1; } + rel2 {relative: 1.0 HEADER_HIGHT+0.32; } + } + } + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.32; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.43 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/nfc_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/nfc_viewer.edc new file mode 100644 index 0000000..ac85e2a --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/nfc_viewer.edc @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 +#define HEADER_HIGHT 0.20 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "nfc_viewer_tag"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.08; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.08; } + rel2 {relative: 1.0 HEADER_HIGHT+0.08+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.52; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.6; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "nfc_viewer_p2p"; + parts{ + part{ + name: "nfc_tabbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+0.08; } + } + } + + part{ + name: "nfc_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.08; } + rel2 {relative: 1.0 HEADER_HIGHT+0.08+TEXT_HEIGHT; } + } + } + + part{ + name: "nfc_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "nfc_text"; + } + rel2{ + relative: 1.0 HEADER_HIGHT+0.52; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "nfc_list"; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.6; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/pick_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/pick_viewer.edc new file mode 100644 index 0000000..387045f --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/pick_viewer.edc @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.25 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "pick_viewer"; + parts{ + part{ + name: "pick_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "pick_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "pick_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.28; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING HEADER_HIGHT+0.4; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 HEADER_HIGHT+0.4; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_y: "pick_list"; + relative: 0.0 1.0; + } + rel2 { relative: 1.0 HEADER_HIGHT+0.4; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/push_service.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/push_service.edc new file mode 100644 index 0000000..c8c3ea0 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/push_service.edc @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 +#define HEADER_HIGHT 0.25 +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "push_service"; + parts{ + part{ + name: "push_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "text_box_first"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "push_text"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*2; + } + } + } + + part{ + name: "text_box_second"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "text_box_first"; + } + rel2{ + relative:1.0 HEADER_HIGHT+TEXT_HEIGHT*3; + } + } + } + + part { + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.52; + } + rel2 { + relative: 1.0 0.60 ; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/runtimeinfo_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/runtimeinfo_viewer.edc new file mode 100644 index 0000000..ac78c3a --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/runtimeinfo_viewer.edc @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 1.0 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "runtimeinfo_viewer"; + parts{ + part{ + name: "info_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.02 0.0; } + rel2 {relative: 0.98 TEXT_HEIGHT; } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/sensor_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/sensor_viewer.edc new file mode 100644 index 0000000..8d7ae16 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/sensor_viewer.edc @@ -0,0 +1,415 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 +#define GL_HEIGHT 0.20 +#define HEADER_HIGHT 0.0 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 52; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.52; + } + rel2{ + relative: 1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + group + { + name: "accelerometer_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "gl_view"; + } + rel2{ + relative: 1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + + group + { + name: "gyro_sensor_viewer"; + parts{ + part{ + name: "gl_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2; } + rel2 {relative: 1.0 0.2+GL_HEIGHT; } + } + } + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2+GL_HEIGHT; + } + rel2{ + relative: 1.0 0.52; + } + } + } + + part{ + name: "btn_viewyz"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.52; + } + rel2{ + relative: 1.0 0.60; + } + } + } + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "magnatometer_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + +group + { + name: "pressure_sensor_viewer"; + parts{ + part{ + name: "image_view1"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.0 0.2; + } + rel2{ + relative: 0.33 0.4; + } + } + } + + part{ + name: "image_view2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.33 0.2; + } + rel2{ + relative: 0.66 0.4; + } + } + } + + part{ + name: "image_view3"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.66 0.2; + } + rel2{ + relative:1.0 0.4; + } + } + } + + + part{ + name: "value_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.4; + } + rel2{ + relative: 1.0 0.5; + } + } + } + + part{ + name: "text_view_label"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.5 0.5; + visible: 1; + rel1{ + relative: 0.02 0.5; + } + rel2{ + relative:1.0 0.6; + } + } + } + + WEARABLE_TOOLBAR_PART + } + } + + + group + { + name: "light_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2+0.1; + } + rel2{ + relative:1.0 0.6; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2+0.0; + } + rel2{ + relative:1.0 0.2+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } + + group + { + name: "ultra_violet_sensor_viewer"; + parts{ + part{ + name: "image_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2+0.1; + } + rel2{ + relative:1.0 0.6; + } + } + } + + part{ + name: "text_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.2+0.0; + } + rel2{ + relative:1.0 0.2+0.1; + } + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/shortcut_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/shortcut_viewer.edc new file mode 100644 index 0000000..5acdf15 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/shortcut_viewer.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.1 +#define CONTENT_X_PAD 0.15 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "shortcut_viewer"; + parts{ + + part{ + name: "shortcut_body"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.1; } + rel2 {relative: 0.7 0.2; } + } + } + + part{ + name: "shortcut_body2"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.7 0.1; } + rel2 {relative: 1.0 0.2; } + } + } + + part{ + name: "shortcut_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.2; } + rel2 {relative: 1.0 0.3; } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/sound_player.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/sound_player.edc new file mode 100644 index 0000000..a4680f1 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/sound_player.edc @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.2 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "sound_player"; + parts{ + part{ + name: "sound_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + + part{ + name: "icon_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 HEADER_HIGHT+TEXT_HEIGHT; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.22; + } + } + } + + + + part{ + name: "progressbar"; + type: SWALLOW; + description{ + state: "default" 0.0; + rel1{ + relative: 0.0 HEADER_HIGHT+0.22; + } + rel2{ + relative:1.0 HEADER_HIGHT+0.30; + } + } + } + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 HEADER_HIGHT+0.32; + } + rel2 { + relative: 1.0 HEADER_HIGHT+0.4; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/touch_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/touch_viewer.edc new file mode 100644 index 0000000..79f5b4e --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/touch_viewer.edc @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define HEADER_HIGHT 0.25 +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "touch_viewer"; + parts{ + part{ + name: "cursor_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 HEADER_HIGHT+0.0; } + rel2 {relative: 1.0 HEADER_HIGHT+TEXT_HEIGHT; } + } + } + part{ + name: "touch_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 1.0; to_y: "cursor_text"; } + rel2 {relative: 1.0 HEADER_HIGHT+0.4; } + } + } + + WEARABLE_TOOLBAR_PART + } + + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/ui_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/ui_viewer.edc new file mode 100644 index 0000000..d4acf28 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/ui_viewer.edc @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "ui_viewer"; + parts{ + part{ + name: "ui_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 0.9; } + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/video_player.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/video_player.edc new file mode 100644 index 0000000..84c90ad --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/video_player.edc @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#define LEFT_PADDING 0.02 +#define RIGHT_PADDING 0.02 + +#define CONTENT_X_PAD 0.15 +#define TEXT_HEIGHT 0.08 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "video_player"; + parts{ + part{ + name: "video_view"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 0.0; + } + rel2{ + relative:1.0 0.895; + } + } + } + + part { name: "left_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: 0.0 0.0; } + rel2 { relative: LEFT_PADDING 1.0; } + fixed: 1 0; + } + } + + part { name: "right_padding"; + type: SPACER; + description { + state: "default" 0.0; + rel1 { relative: (1.0 - RIGHT_PADDING) 0.0; } + rel2 { relative: 1.0 1.0; } + fixed: 1 0; + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { to_x: "left_padding"; + relative: 1.0 0.80; + } + rel2 { to_x: "right_padding"; + relative: 0.0 0.9; } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/wearable_circle_toolbar.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/wearable_circle_toolbar.edc new file mode 100644 index 0000000..a163621 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/wearable_circle_toolbar.edc @@ -0,0 +1,14 @@ +#define WEARABLE_TOOLBAR_PART \ +part { name: "wearable_toolbar"; \ + type: SWALLOW; \ + description { \ + state: "default" 0.0; \ + rel1 { \ + relative: 0.0 0.6; \ + } \ + rel2 { \ + relative: 1.0 0.8; \ + } \ + visible: 1; \ + } \ +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/wifi_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/wifi_viewer.edc new file mode 100644 index 0000000..8ebe3c2 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/wifi_viewer.edc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifi_viewer"; + parts{ + part{ + name: "wifi_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part { name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.8; + } + rel2 { + relative: 1.0 0.9; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/edje/2.4/wearable_circle/wifidirect_viewer.edc b/tbtcoreapp/res/edje/2.4/wearable_circle/wifidirect_viewer.edc new file mode 100644 index 0000000..d976238 --- /dev/null +++ b/tbtcoreapp/res/edje/2.4/wearable_circle/wifidirect_viewer.edc @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TEXT_HEIGHT 0.08 +#define CONTENT_X_PAD 0.15 + +#include "wearable_circle_toolbar.edc" + +collections +{ + base_scale: 1.8; + group + { + name: "wifidirect_viewer"; + parts{ + part{ + name: "wifidirect_info"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 0.0; } + rel2 {relative: 1.0 TEXT_HEIGHT; } + } + } + + part{ + name: "wifidirect_text"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1 {relative: 0.0 TEXT_HEIGHT; } + rel2 {relative: 1.0 TEXT_HEIGHT*2; } + } + } + + part{ + name: "wifidirect_list"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_text"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + part{ + name: "check_part"; + type: SWALLOW; + description{ + state: "default" 0.0; + align: 0.0 0.0; + visible: 1; + rel1{ + relative: 0.0 1.0; + to_y: "wifidirect_list"; + } + rel2{ + relative: 1.0 0.80; + } + } + } + + part{ + name: "controlr_part"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to_y: "check_part"; + } + rel2 { + relative: 1.0 9.0; + } + visible: 1; + } + } + + WEARABLE_TOOLBAR_PART + } + } +} diff --git a/tbtcoreapp/res/icon/app_failed.png b/tbtcoreapp/res/icon/app_failed.png new file mode 100644 index 0000000..02200ba Binary files /dev/null and b/tbtcoreapp/res/icon/app_failed.png differ diff --git a/tbtcoreapp/res/icon/app_not_supported.png b/tbtcoreapp/res/icon/app_not_supported.png new file mode 100644 index 0000000..b50a95c Binary files /dev/null and b/tbtcoreapp/res/icon/app_not_supported.png differ diff --git a/tbtcoreapp/res/icon/app_not_tested.png b/tbtcoreapp/res/icon/app_not_tested.png new file mode 100644 index 0000000..4f807d7 Binary files /dev/null and b/tbtcoreapp/res/icon/app_not_tested.png differ diff --git a/tbtcoreapp/res/icon/app_passed.png b/tbtcoreapp/res/icon/app_passed.png new file mode 100644 index 0000000..f261e78 Binary files /dev/null and b/tbtcoreapp/res/icon/app_passed.png differ diff --git a/tbtcoreapp/res/images/AGIF/animated.gif b/tbtcoreapp/res/images/AGIF/animated.gif new file mode 100644 index 0000000..2c62f89 Binary files /dev/null and b/tbtcoreapp/res/images/AGIF/animated.gif differ diff --git a/tbtcoreapp/res/images/YUV/dog_1024x960_uyvy.raw b/tbtcoreapp/res/images/YUV/dog_1024x960_uyvy.raw new file mode 100644 index 0000000..1f80a9e --- /dev/null +++ b/tbtcoreapp/res/images/YUV/dog_1024x960_uyvy.raw @@ -0,0 +1 @@ +pIƒ9r9|Ct9~9rC|9rC|9rC|9p9ƒItH~9pIƒ9rC|9tH~9rC|9rC|9rC|9pC{Cr9|Cr9|Cp9ƒIrC|9p9ƒIp9ƒIuC}=r9|CpIƒ9uC}=t9~9p9ƒIt9~9rC|9t9~9rC|9pIƒ9t9~9t9~9pIƒ9r9|Cr9|CrC|9pIƒ9r9|Cr9|Cr9|Ct9~9r9|CpIƒ9w9=t9~9t9~9q99t9~9q99t9~9v9„6r4†9q99u4ƒ9u4ƒ9w4ƒ-u4ˆ4u4ˆ4w4ƒ-w4ƒ-r9†4t9-u4ˆ4v9~-y-~-t-9t-9y-~-t9-u4ˆ4t-9y-~-t9-t9-t-9y-~-t9-t-9y-~-y-~-t9-y-~-x)„-y-~-y-~-y-~-y-~-y-~-s9†)y-~-y-~-y-~-x)„-x-„)x-„)v9!y-~-y-~-x-„){-!{-!{-!z)„!{!-{-!{-!{-!{!-|!!{-!{-!{-!{-!z!„)|!!{-€{-!{-!|!!|!!|!!|!!|!!}€!}!€{-€}!€}€!}€!~~~~}!€}!€}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!|!!{-!{-!y-~-{-!y-~-y-~-{!-{-!y-~-y-~-y-~-y-~-t9-y-~-t-9t-9t-9t-9t-9y-~-t-9y-~-y-~-y-~-y-~-y-~-{!-{-!{-!{-!{!-{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-{€-{€-{!-|!!{-!y-~-{-!{-!{-!{-!{!-|!!y-~-{!-{-!{-!{-!{!-{!-|!!{-!{-!{-!{-!{-!|!!|!!|!!|!!|!!|!!~}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~}!€}€!}€!~}!€|!!|!!~|!!~~}€!}€!}!€|!!}€!}!€}!€|!!~}€!}€!}€!~}!€}€!}€!}€!~}!€~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!}€!}€!~|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!{!-{!-{!-{!-{!-{!-{!-{!-{-!{-!{-!y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-y-~-{!-{!-y-~-{-!{-!y-~-{-!{-!y-~-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!y-~-|!!|!!y-~-y-~-{!-y-~-{,‚-y-~-y-~-y-~-{6-{6-v9~-v9~-y69v-~9v-~9{6-{6-{-6{-6{-6v-~9{-6{-6{-6{-6{6-v9~-{6-v9~-y69{-6v9~-{6-{6-{,‚-~,…,{-‚,{-‚,}!‚,{-!},‚!|!!|!!|!!|!!|!!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~t9~9pIƒ9rC|9rC|9r9|Cw9=rC|9r9|Ct9~9r9|Ct9~9mICs=„Is=„Ir9|Cs=„Iu=}Ct9~9s=„IrC|9w=9t9~9t9~9s=„It9~9uC}=uC}=p9ƒIw=9rC|9w9=t9~9rC|9t9~9t9~9sI„=t9~9s=„Iu=}Cp9ƒIs=„It9ˆIt9~Hw9=r9|Ct9~9t9~9t9~9q99q99y96u9ƒ4t9~9y96o9„9u9ƒ4v9~-t9~9q99t9~9t9~9u9ƒ4v-~9u4ƒ9t-9w-ƒ4y69y-~-v-~9w4ƒ-v9~-v9~-y-~-t9-w4ƒ-y-~-y-~-y-~-w4ƒ-w4ƒ-y-~-t9-y-~-y-~-t9-y-~-y-~-w4ƒ-y-~-y-~-x)„-y-~-y-~-y-~-y-~-y-~-y-~-y-~-x)„-y-~-y-~-y-~-z)„!y-~-y-~-{-!{!-{!-{!-{-!{-!z)„!|!!{-!|!!{-!{-!{-!|!!|!!{!-|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!{-!{!-{!-{-!{-!{-!{-!y-~-{!-{!-y-~-y-~-y-~-t9-y-~-y-~-t-9v-~9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{-!{-!{-!{-€{-!|!!{-!|!!{-!|!!|!!{!-|!!{-!|!!{-!{!-{!-{!-}€!{!-{!-|!!{-!{-!|!!{!-|!!|!!|!!|!!{-!{-!{-!{-!{-!{-!{-!{-!y-~-{!-{-!{-!},‚!{-!{!-|!!{!-|!!{-!|!!{!-|!!|!!|!!}!€}!€}!€}!€}€!}€!}€!}€!}€!~~}€!}!€~}!€~~}€!~~~}€!~}!€|!!}€!}€!}€!~}!€|!!}€!}€!}€!}€!|!!}!€|!!|!!|!!|!!|!!}!€|!!}!€}!€|!!|!!}!€|!!}€!|!!}€!}€!|!!}€!}€!}!€|!!|!!|!!}€!}!€}!€}!€}!€}!€|!!}€!}€!}€!}€!}€!}€!~}!€~}!€}!€~~}!€}€!~}!€}€!~~~}€!~}€!~~}!€~}!€}€!~~}!€~~~~~~~~~~~~~~~~~}!€}!€~}€!}€!~}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!{-!|!!{-!{!-|!!|!!{-!{!-{!-{-!|!!{-!y-~-{!-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!{!-y-~-y-~-{!-y-~-{!-{!-{!-{!-{!-{-!{-!{!-{!-|!!{-!|!!{-!|!!|!!{!-|!!|!!|!!|!!{-!{-!{-!{!-|!!|!!{!-y-~-|!!y-~-{-‚,{-!y-~-y-~-{-‚,{-6y-~-{6-y-~-{6-{6-{6-{-6v-~9{-6y69y96t9~9}6„6{6-t9~9y96y-=v-~9{6-y96y-~-{-6y-~-{-6y-~-{-6y-~-y-~-~,…,},‚!{-‚,|!!{!-~,…,{-!},‚!{-‚,|!!},‚!|!!|!!~}!€}€!~}€!~~~~~~~~~~~~~~~~~~~~~r9|Ct9~9r9|Ct9~9rC|9pIƒ9rC|9rC|9u=}CpIƒ9pIƒ9uC}=t9~9qC}Hp9ƒIr9|Cr9|Cs=„It9~9t9~Hr9|Cs=„IpIƒ9t9~9p9ƒIq9‰Ft9~9t9~9qF‰9pIƒ9w=9pIƒ9t9ˆIp9ƒIw9=t9~9uC}=pIƒ9mCIw=9p9ƒIt9~9t9~9t9~9pIƒ9qF‰9pIƒ9t9~9t9~9y69t9~9t9~9t9~9v-~9v9~-t9~9t9~9q99v-~9t-9u9ƒ4u9ƒ4v9~-v9~-y=-v9~-t9-u4ˆ4v9~-u4ˆ4y-~-y-~-t9-w-ƒ4y-~-r9†4w4ƒ-t9-t-9y-~-y-~-x-„)t-9y-~-s)†9y-~-y-~-y-~-x-„)y-~-y-~-{!-x)„-y-~-{-!y-~-y-~-{!-y-~-z!„)y-~-{!-y-~-{!-{!-{!-x-„){-!{-!{-!{!-{!-{!-|!!{-!{-!|!!|!!{-!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!{-!{!-|!!{!-|!!{-!{-!y-~-{!-{!-{-!y-~-y-~-{!-{-!y-~-{!-y-~-t9-y-~-y-~-t-9y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{-!y-~-|!!{-!y-~-|!!{!-|!!{-!|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!|!!{-!|!!{!-{!-{!-{!-{!-{!-{!-{-!{!-y-~-{!-{!-{!-{!-{!-{!-{-!{!-{-!{-!{-!y-~-}!‚,{-!{-!{!-{!-|!!|!!|!!|!!|!!|!!|!!}€!~}!€}€!~~}!€}€!~~}!€~}!€}!€~}€!~}!€}!€}€!~}!€~}!€}!€|!!~}!€}!€|!!}€!|!!}€!}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!|!!|!!|!!}€!}€!|!!}€!}!€|!!|!!|!!|!!}€!}!€|!!}!€|!!}!€}!€}€!}!€}!€~|!!}€!~~|!!|!!}€!}!€~|!!~}!€~}!€}!€}!€~}€!~~}!€~}!€}€!~~~~~~~~~~~~~~~~~~}€!~~}€!~~|!!}€!~|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!|!!{-!|!!{!-|!!|!!{-!{-!{!-|!!{-!{-!y-~-{-!y-~-y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{!-y-~-{!-{-!{-!{-!y-~-{!-{!-y-~-{!-|!!{-!{-!{!-{!-|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-{!-{!-{!-|!!y-~-{-!y-~-{-‚,y-~-{-‚,y-~-{,‚-y-~-y-~-}6„6y-~-y-~-{-6v-~9y-~-y96v9~-y69{-6y96v9~-}6„6{6-{6-{6-{6-}6„6{-6{-6{-6{6-{6-{6-{-‚,{-‚,y-~-{-‚,{-‚,{,‚-~,…,{-!|!!{-‚,|!!},‚!|!!|!!~~,ƒ|!!~}€!~~~~~~~~~~~~~~~~~~~~~~r9|Cp9ƒIt9~9pIƒ9rC|9t9~9qI†Cp9ƒIt9~9t9~9u=}Ct9~9pIƒ9w9=sI„=t9~9pIƒ9pIƒ9r9|Ct9~9t9~9w9=t9~9pIƒ9w9=w9=w9=t9~9w9=t9~9w9=t9~9t9~9t9‚=p9ƒIt9~9nF‡Ct9~9t9~9p9ƒIw=9p9ƒIr9|Cq9‰Ft9~9t9~9t9~9q99t9~9rC|9t9~9u4ƒ9u9ƒ4u9ƒ4w9=u4ƒ9v-~9t9~9t9~9o9„9v-~9v9~-q99v9~-u4ƒ9u4ƒ9v-~9v-~9v-~9y-~-t9-t-9w-ƒ4y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-w4ƒ-y-~-y-~-y-~-x)„-y-~-x-„)y-~-y-~-y-~-y-~-y-~-x)„-x)„-x-„)x-„)y-~-y-~-y-~-{-!x)„-{!-x)„-|!!{-!{!-{!-z!„){!-z!„){!-z)„!y-~-{!-|!!{-!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!|!!}€!|!!|!!}€!|!!}€!}!€}!€|!!|!!|!!|!!|!!|!!|!!{!-{-!{-!{!-{!-{!-{!-{-!y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-y-~-|!!{!-|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!{!-|!!{!-{!-|!!{-!{-!{-!{!-{!-{-!{!-{!-{!-|!!y-~-{!-y-~-y-~-{!-{!-y-~-{!-{!-{!-|!!{!-|!!|!!{-!|!!{-!{!-|!!|!!|!!|!!}€!}€!|!!}€!}€!~}!€~}!€}€!~~~~~}!€~~~}€!~}!€}€!}!€}!€}€!}€!}€!}!€}€!~|!!}€!}€!|!!}!€|!!}€!}!€|!!|!!}€!|!!}€!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€|!!}!€|!!|!!}!€|!!}€!}€!}!€|!!}!€|!!}!€}!€}!€}!€}€!}€!~~~|!!}€!~~}!€}!€~~}€!}€!~}!€~~}€!~~~~~~~~~~~~~~~~~~}€!}€!~}€!~~}€!}€!}€!}!€|!!|!!|!!}€!|!!|!!{!-|!!|!!|!!{!-|!!{!-{!-{!-{!-|!!{-!{!-{!-{!-|!!y-~-|!!y-~-{!-{-!{!-y-~-y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-y-~-{!-y-~-{!-y-~-y-~-{-!y-~-y-~-|!!{-!{-!{-!y-~-|!!{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-{!-|!!{!-|!!{-!y-~-{!-{!-{-!y-~-y-~-y-~-y-~-y-~-y-~-~6…,y-~-{6-{6-{6-v9~-y69{-6y96y96y96v-~9y96v-~9y96y96{-6y96{-6v9~-{6-y-~-{6-y-={-‚,{6-{-‚,{-‚,y-~-{,‚-{-!},‚!},‚!},‚!},‚!|!!|!!},‚!}€!~,ƒ~~}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~t9~9t9~9r9|Ct9~9pIƒ9rC|9t9~9rC|9r9|Cr9|Ct9~9r9|Ct9~9rC|9t9~9mCIw9=r9|CtIˆ9t9~9pIƒ9t9~9t9~9t=‚9t=‚9t9~9t9~9t9~9t9~9t9~9s9‰=t=‚9t9~9t=‚9w=9t9~9w=9s=„Ip9ƒIt9~9p9ƒIt9~9qF‰9q99t9~9t=‚9w9=q99q99u4ƒ9u4ƒ9t9~9t9~9t9~9q99t9~9v9~-v6„9u9ƒ4y96v9~-q99v9~-v9~-q99y-~-u9ƒ4y-~-w4ƒ-q99w-ƒ4y-~-y-~-t-9t-9y-~-y-~-y-~-w4ƒ-x-„)y-~-y-~-x-„)w-ƒ4y-~-y-~-x)„-y-~-y-~-y-~-x)„-x)„-x)„-y-~-y-~-y-~-y-~-y-~-x)„-y-~-x)„-y-~-y-~-{!-{-!y-~-x)„-|!!{-!{-!{!-|!!{!-|!!|!!|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!}!€}!€|!!|!!|!!}€!|!!}€!}!€|!!}€!}!€|!!|!!}€!|!!|!!|!!{!-|!!{-!|!!|!!|!!{-!{!-|!!{-!{-!{-!y-~-{-!y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-{!-y-~-|!!{-!{!-{!-|!!{!-|!!{!-|!!{-!{!-|!!|!!|!!|!!{-!|!!|!!|!!{!-{!-|!!{!-{!-|!!{-!{-!{-!{!-{!-|!!{-!{-!{-!{-!{-!{-!{-!{-!{-!y-~-{-!{-!{-!{-!{!-{!-{-!{-!{-!{!-|!!|!!|!!|!!|!!|!!}€!}!€}!€}!€|!!~|!!~}€!}€!~}!€}!€}!€}€!}€!~}€!}€!~}!€}!€}€!~}€!~}!€}!€}!€}€!}€!|!!}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!|!!|!!}€!|!!}€!}€!}€!|!!|!!|!!|!!}!€}!€|!!}€!}€!}€!}!€|!!}!€|!!|!!}€!~}€!}€!~}!€}!€}!€~}!€|!!~~}€!~}€!~}!€}€!~~~~}!€~~~~~~~~~~~~~~~~~~~}!€~}€!~~}€!}€!}€!}€!~}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!{-!{!-{!-{!-{!-{!-{-!{!-{-!{-!y-~-y-~-{-!{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{-!{-!y-~-{-!{-!{-!{-!y-~-{!-{!-{!-{-!{-!y-~-{-!{!-{-!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!{€-|!!|!!{!-{!-{!-{!-{!-|!!{-!{-‚,{-!{,‚-y-~-y-~-{-6y-~-y-~-y-~-y-~-{6-{-6y-={-6v9~-y69{-6v9~-y96y69y=-{6-y96y=-{-6v9~-{-6{-6{-6v9~-{6-{-6y-~-{6-{,‚-{,‚-{-!{,‚-{,‚-~,…,{!-}!‚,{-!},‚!|!!~,ƒ}!€~,ƒ}!€}!€~~~~~~~~~~~~~~~~~~~~~~~t9~9t9~9t9~9p9ƒIt9~9p9ƒIt9~9pIƒ9t9~9pIƒ9s=„Ip9ƒIu=}Cr9|Ct9~9t9~9pIƒ9w9=t9~9pIƒ9t9~9t9‚=q99t9~9y96q99t9~9y96t9~9y69t9~9t9~9t9~9t9~9q99rC|9t9~9t9~9w9=p9ƒIt9~9w=9w=9t9‚=t9~9q99q99t9~9y96t9~9t9~9u9ƒ4{6-v9~-v9„6q99u9ƒ4t9~9v-~9v9~-u9ƒ4v9~-q99u4ƒ9v9~-u9ƒ4v9~-u9ƒ4v9~-y-~-y-~-v9~-t9-y-~-y-~-t-9x)„-t9-y-~-t-9w-ƒ4y-~-y-~-y-~-y-~-y-~-y-~-y-~-x)„-y-~-y-~-y-~-x-„)y-~-{-!y-~-{!-{-!y-~-|!!y-~-{!-|!!{-!x)„-|!!{-!x)„-{!-x)„-|!!{-!|!!{-!{-!{-!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!|!!~|!!}€!}!€}!€|!!}€!}€!}€!|!!|!!|!!|!!|!!{!-{!-|!!{-!|!!{-!{-!{-!{-!{-!{-!y-~-y-~-{-!y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{-!{-!{-!{!-|!!{-!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!{-!{-!{-!{-!{-!{-!{-!{-!{-!y-~-{!-{!-{!-{-!{-!{-!{-‚,|!!y-~-{!-{!-{!-|!!{!-|!!{-!},‚!{-!|!!|!!|!!|!!|!!|!!}!€}!€}€!~~}!€~}€!~~~~~}€!~~}€!}!€}€!~}€!~}!€}!€}!€}€!}!€}!€}€!}€!}€!}!€}!€|!!}!€}!€|!!}€!|!!|!!}€!}€!}€!}!€}!€|!!|!!|!!}€!|!!}!€|!!}€!}€!}€!}!€|!!|!!}!€}!€|!!|!!|!!~|!!~}!€|!!}€!}!€}€!}!€}!€~}!€|!!~~~}!€}!€~~}€!}€!~~}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!}€!|!!}!€|!!}€!|!!|!!|!!|!!{!-|!!{-!|!!|!!{!-{!-{!-|!!|!!{-!|!!{!-|!!{-!{!-{!-{!-{-!y-~-{-!y-~-y-~-{!-{-!y-~-y-~-y-~-{!-y-~-y-~-y-~-y-~-y-~-{-!y-~-{-!y-~-{-!{-!y-~-{!-{!-{!-{!-|!!{!-|!!|!!{-!{-!{!-|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!{-!{-!y-~-{!-{-!y-~-{!-{-!{-‚,{-‚,y-~-y-~-{6-{-6{-6y-~-v-~9{6-v9~-|=‚6y96y96v-~9}6„6y96{-6v-~9{6-{6-{6-y96y-~-{-6{-6{-6{-6y-~-{,‚-{6-{,‚-},‚!},‚!{-!},‚!|!!},‚!}!‚,|!!|!!|!!}€!}!€}€!~}!€~~~~~~~~~~~~~~~~~~~~~q99t9~9t9~9t9~9t9~9t9~9rC|9t9~9pIƒ9t9~9p9ƒIt9~9p9ƒIp9ƒIp9ƒIw=9w9=t9~9t9~9w=9|6‚=q99y69y69w9=t9~9}6„6t9~9t9~9t9~9t9~9y96w9=t9~9t9~9s9‰=t9~9w=9q99t9~9t9~9t9~9q99q99q99t9~9t9~9t9~9t9~9q99y69q99o9„9q99q99v9~-t9~9v-~9u4ƒ9v-~9t9~9t9-u4ƒ9v9~-u9ƒ4v-~9v-~9y-~-y-~-v9~-v,„9w-ƒ4w-ƒ4w-ƒ4x-„)y-~-y-~-y-~-x-„)y-~-y-~-y-~-w4ƒ-y-~-x-„)y-~-y-~-x-„)y-~-x)„-{-!{-!y-~-{-!y-~-y-~-x)„-x-„){!-y-~-{!-x)„-{!-z)„!{-!{-!{-!{-!|!!|!!{-!z)„!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}!€|!!|!!}!€}!€|!!}€!|!!}€!}!€}!€}!€}!€|!!}€!}€!|!!|!!|!!|!!|!!{-!{-!{!-|!!{-!{-!y-~-{!-y-~-{!-{!-{!-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-y-~-y-~-y-~-{-!{-!y-~-y-~-{!-{!-y-~-{-!{!-|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!{-!{!-|!!{!-|!!{-!{-!{!-{!-{!-{!-{!-{!-{!-{-!{-!{-!{-!{!-{!-{,‚-}!‚,{!-{!-|!!{!-|!!{-!|!!|!!|!!}!€|!!|!!}!€}!€}!€}!€}€!|!!~}!€~}€!~}€!~}!€}!€}€!~}€!}€!}€!~~}€!~}!€}!€}!€~|!!}€!}€!|!!}€!|!!}€!}€!}!€|!!}€!}€!}!€|!!|!!|!!|!!}!€}!€|!!|!!}!€}!€|!!}€!}!€|!!|!!|!!}!€|!!}!€|!!}€!|!!}€!}!€}!€|!!}!€|!!}€!~}!€}!€}!€~}!€}€!~~~}€!}€!~~}€!}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~}€!}€!~}!€}!€}€!~}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!{!-|!!{-!{-!{-!{-!{-!{-!{!-{!-{!-{!-{!-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{-!{-!{-!y-~-{!-y-~-{-!{-!y-~-{!-{!-{!-{!-|!!{-!{-!{-!{-!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!|!!{!-{!-|!!{-!{,‚-{!-{,‚-{,‚-y-~-y-~-y-~-{-‚,y-~-y-~-v9~-v-~9{6-y96y-=v-~9{-6y69y96v-~9{-6y96{6-{6-{6-{6-y-~-{6-{6-{-6{-6y-~-{6-{6-{,‚-{,‚-{-‚,{-!},‚!},‚!{,‚-}!‚,},‚!|!!~,ƒ},‚!}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~t9~9t9~9y96t9~9t9~9t9~9t9~9w=9w9=rC|9t9~9rC|9t9~9t9~9w=9t9~9t9~9t9~9t=‚9t9~9t9~9y69t9~9u9ƒ4v9~-t9~9t9~9w4„=u9ƒ4t9~9u4ƒ9t9~9t9~9w4„=y96t9~9t9~9t9~9t9~9t9~9t9~9t9~9y69t9~9q99v9„6q99q99u4ƒ9t9~9t-9t9~9v-~9v9~-t9~9v-~9r9†4u9ƒ4t9~9u4ƒ9w4ƒ-q99t9~9y-~-v9~-t9~9w4ƒ-u9ƒ4v9~-w4ƒ-v9~-w4ƒ-y-~-y-~-y-~-w4ƒ-x-„)y-~-y-~-y-~-x)„-y-~-y-~-x-„)y-~-x-„)y-~-y-~-y-~-y-~-x-„)y-~-{-!y-~-x)„-{!-{!-y-~-y-~-z!„){-!{-!{-!{-!x-„){!-|!!|!!x)„-{!-|!!{-!{-!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!~|!!~|!!}€!}!€|!!~}!€}!€|!!}€!}€!|!!}!€|!!|!!|!!}€!|!!|!!|!!|!!{!-{!-{!-{!-{!-{!-{!-{!-y-~-y-~-y-~-{-!y-~-y-~-{-!y-~-{!-y-~-{!-y-~-y-~-{!-{-!y-~-y-~-{-!y-~-{!-{-!{-!{!-{!-{!-{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!{!-|!!y-~-|!!y-~-|!!{!-|!!{-!{!-|!!{-!y-~-{!-{!-{-!y-~-{!-{-!{-!{!-{!-{!-}!‚,{!-|!!{-‚,|!!{-!{-!|!!|!!{-!|!!}€!}€!|!!}€!}!€}€!}€!}€!~}€!~|!!}€!}€!~}!€~~~~}!€}€!~}€!}€!}€!~|!!~}!€}!€}!€}€!}€!}€!|!!}€!|!!|!!|!!}!€|!!~}!€|!!|!!|!!}!€|!!}€!}€!|!!}€!|!!}!€}!€}€!}€!|!!}€!}€!}€!}!€|!!}€!}€!}€!}€!~}!€}!€}!€}!€~}!€~}!€}€!}€!|!!~}€!}€!}€!~~}€!~}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~}!€~}€!~|!!}€!|!!}€!}€!}!€|!!|!!|!!|!!|!!{-!|!!{!-|!!{!-{!-|!!|!!{!-|!!{!-{!-{!-{!-{!-{-!{-!y-~-{!-{!-{-!{-!{-!{-!y-~-{-!y-~-y-~-{!-y-~-{-!{-!{-!y-~-{!-{!-{-!{-!y-~-{!-{!-{!-|!!{!-|!!{!-|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!{!-{-!{-!y-~-y-~-y-~-{-‚,{-‚,y-~-{,‚-{,‚-y-~-{-6v-~9{-6y-=y-=v9~-{6-v9~-v9~-{6-|=‚6y-=v-~9y69{6-v9~-{-6{-6y-~-{-6{-6y-~-{6-{-6{-‚,y-~-{,‚-~,…,{!-},‚!{-‚,|!!{-!|!!},‚!|!!~~}!€}€!~}!€}!€~~~~~~~~~~~~~~~~~~~~t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9o9Cw9=o9Ct9~9w=9t9~9w=9t9~9w=9t9~9y69t9~9v-~9t9~9t9~9t9~9y96t9~9t9~9q99t9~9t9~9v-~9u9ƒ4t9~9t9~9y96t9~9y96t9~9y69q99w=„4t9~9u4ƒ9y96t9~9y96t9~9t9~9u4ƒ9t9~9u4ƒ9v-~9v6„9t9~9u4ƒ9v9~-t9~9v9~-t9~9v-~9v-~9y-~-q99u4ƒ9w-ƒ4v-~9y-~-t-9y-~-t9-y-~-t-9w-ƒ4w4ƒ-y-~-y-~-s9†)y-~-y-~-x-„)x-„)y-~-x-„)y-~-y-~-y-~-x)„-x)„-{-!y-~-x-„)y-~-{!-{!-y-~-x)„-{-!{-!y-~-{!-{!-z)„!y-~-|!!|!!x-„){!-|!!|!!{-!|!!|!!|!!{!-|!!|!!|!!|!!|!!}€!|!!}!€|!!}€!|!!}!€}€!|!!~}!€}!€}!€|!!}€!}€!}€!}!€}!€}€!}!€}!€|!!}€!|!!|!!|!!|!!{-!|!!|!!{-!{!-|!!y-~-{-!y-~-|!!{-!{-!y-~-y-~-{!-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!v9!y-~-{!-y-~-{!-{-!{-!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!{-!|!!{!-|!!{!-{!-{!-|!!{-!{-!{-!{-!{-!{-!{-!{-!{-!{!-{!-{!-{!-}!‚,{!-|!!{!-|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€}!€}!€|!!~}!€~~~~~}€!}€!~}!€}!€}!€}€!~}!€}€!}€!~|!!}€!~}!€|!!}€!}€!}€!}€!}!€|!!}€!}€!|!!}€!}!€}!€|!!~|!!}€!}!€|!!|!!}€!}€!|!!}€!|!!|!!}!€|!!|!!}!€}!€}!€|!!}!€}!€}!€|!!}€!}€!}€!}€!}€!}€!}€!~}!€~~}€!~}€!~}!€~}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}!€~}!€}!€}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!|!!{!-|!!{-!|!!{-!{-!|!!{-!{!-{!-{!-{!-{-!y-~-{!-y-~-y-~-y-~-y-~-y-~-{-!{-!{-!y-~-|!!y-~-{!-{!-{!-{!-{!-{!-|!!{-!{-!{-!{-!{-!{!-{!-{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!{-!{-!{-!{!-}!‚,y-~-y-~-y-~-y-~-y-~-{-6y-~-{-6{-6v9~-{6-y69{-6y96y69|6‚={-6v9~-}6„6y-~-{6-{6-}6„6{-6{-6{6-{6-{-6y-~-{-6y-~-{,‚-{6-{-!~,…,{-!}!‚,}!‚,|!!},‚!}!‚,}!€},‚!|!!~}!€}!€~~~~~~~~~~~~~~~~~~~~~~t9~9t9~9t9~9t9~9t9~9t9~9t9~9w=9t9~9w=9t9~9w=9t9~9t9~9t9~9t9~9w9=t9~9t9~9t9~9t9~9t9~9v-~9v-~9y96q99y4†6t9~9y=-w=„4y96w9=v-~9t9~9u4ƒ9t9~9u9ƒ4t9~9t9~9v9~-w=9q99q99t9~9v-~9t9~9u9ƒ4y96u9ƒ4t9~9u4ƒ9q99u9ƒ4v-~9w-ƒ4t9~9v-~9t9~9v-~9u4ƒ9u4ƒ9u9ƒ4t9~9v-~9w4ƒ-q99w-ƒ4v-~9y-~-t-9y-~-w4ƒ-y-~-y-~-w-ƒ4y-~-t9-y-~-x-„)v9!y-~-y-~-y-~-y-~-x-„)y-~-x)„-y-~-y-~-x-„){-!y-~-x-„)y-~-x-„)y-~-{!-{!-x)„-{!-{!-|!!{!-|!!y-~-{!-|!!|!!{!-|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!~|!!}!€|!!}!€}€!}€!}!€}€!}!€}!€}!€}€!}€!}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!{-!{-!{!-{!-|!!{!-{!-y-~-{!-y-~-{-!y-~-{!-y-~-{-!y-~-y-~-y-~-{!-y-~-{-!y-~-y-~-{!-y-~-{-!{-!{-!|!!{!-{!-{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!{!-|!!{-!{!-|!!{!-|!!{-!{!-{!-{!-{!-{!-{!-|!!{-!{-!{-‚,{!-{!-{!-{!-{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!}!€}!€~}€!~}!€~}!€}€!~}!€~}!€~~}€!~}€!~}!€}€!}€!}€!}€!}!€}!€}!€|!!}€!}€!|!!}€!}!€}!€}!€|!!}€!}€!}€!}!€|!!}€!}€!|!!}€!}€!|!!}€!}€!}!€}!€}!€|!!}€!}€!}€!}!€}!€}!€}€!}!€}!€}!€}!€}!€}€!~}!€~}!€~}€!}€!~}!€}€!~}€!~}!€~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~}!€}€!}€!~}!€|!!|!!|!!|!!|!!}!€|!!|!!{!-|!!|!!|!!|!!{!-{!-{!-|!!{!-|!!{-!|!!{-!{-!{!-{!-{!-{!-{!-{!-{-!{-!{-!y-~-|!!y-~-{-!y-~-y-~-y-~-{!-y-~-{-!{-!{-!{-!{-!{-!{-!{-!y-~-{!-|!!{!-|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!{!-{!-|!!|!!{-!{!-{!-{!-{!-{-!y-~-{-!y-~-{-!y-~-{-‚,y-~-y-~-{6-y96v-~9y69{-6y69v-~9{6-v9~-y69{6-v9~-y96y-~-{6-y-~-{6-y-~-y-~-{6-{6-{6-{6-{6-y-~-~,…,{-‚,{-!{-‚,{,‚-}!‚,|!!},‚!|!!|!!}!€}!€}!€~}€!~}!€~~~~~~~~~~~~~~~~~~~~v9~-q99t9~9v-~9t9~9t9~9t9~9t9~9t9~9w9=t9~9t9~9t9~9t9~9y96t9~9t9~9t9~9y=-w=9y69y=-t9~9y69u4ƒ9v9~-t9~9v9~-u4ƒ9v-~9t9~9u9ƒ4w9=u4ƒ9t9~9q99t9~9u4ƒ9u9ƒ4t9~9q99y96t9~9u9ƒ4t9~9v-~9t9~9v9~-t9~9t9~9q99{6-u4ƒ9u9ƒ4t9~9t-9v9~-u4ƒ9u4ƒ9v9~-t9~9v-~9u4ƒ9{-6t9~9y-~-v9~-t9-v9~-w4ƒ-y-~-y-~-t9-w-ƒ4y-~-x-„)x-„)y-~-y-~-x-„)y-~-y-~-x)„-x-„)y-~-{!-x-„)y-~-{!-{!-y-~-y-~-{!-{-!y-~-{!-x-„){-!{-!x)„-{!-{!-{-!{-!|!!z)„!{!-{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}€!~}!€}!€}!€}€!}!€}!€}!€}€!}€!|!!}!€}!€|!!}€!}€!|!!|!!|!!|!!{!-{!-|!!|!!{-!{-!{-!{-!{-!{!-{-!{-!y-~-{!-y-~-{!-y-~-{!-{!-y-~-y-~-{-!y-~-{-!{-!{-!y-~-{!-{!-{!-{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!{-!{-!{-!{!-|!!{!-{!-{!-|!!{-!{-!{-!{!-{!-{!-{!-{!-{!-},‚!{-!|!!{-!|!!{-!|!!}!‚,{-!{-!|!!{-!{-!|!!|!!|!!}!€}!€|!!|!!}€!}!€|!!}€!}€!}€!~}!€}€!}!€}€!~}!€}!€}!€}€!~}!€~}!€}!€}€!}€!}€!~}!€~}!€}!€}!€}!€~}!€|!!}!€|!!}€!|!!}!€|!!}€!|!!}€!|!!}€!}!€|!!}€!}!€}!€|!!|!!}€!}€!}!€|!!}€!}€!}€!}€!}!€}!€}!€}!€}!€}!€}!€~}!€~}!€}!€}!€~~~~}!€}€!~}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~}!€|!!}€!}€!}€!}!€|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!{!-|!!{-!{-!{-!{-!y-~-{!-{-!y-~-{!-y-~-{-!y-~-{!-{-!{-!{-!{-!{!-{!-{!-{!-|!!{-!{!-{!-|!!{-!{!-{!-{!-|!!{-!|!!|!!{!-|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!{!-|!!{-!{-‚,{-!{-‚,{-!{-‚,y-~-{-‚,y-~-y69y-~-y69{-6v9~-y69y-~-{6-w9=v-~9{6-{6-}6„6{6-{-6y-~-{6-{6-{6-{6-{6-y-~-{6-{,‚-{-‚,~6…,y-~-{-!~,…,{!-}!‚,}!‚,},‚!},‚!},‚!},‚!|!!}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~q99t9~9t9~9y96t9~9t9~9t9~9t9~9t9~9t9~9t9~9y96t9~9y69t9~9t9~9t9~9t9~9u9ƒ4t9~9u4ƒ9u9ƒ4y69v-~9v9~-y=-v9~-y69t9~9u9ƒ4y96v-~9u9ƒ4t9~9y4†6v-~9y69q99t9~9u9ƒ4v9~-q99v-~9t9~9y4†6u9ƒ4v9~-q99u9ƒ4v9~-t9-t9~9v9~-t9~9u4ƒ9v9~-u4ƒ9v-~9v9~-u9ƒ4v9~-v9~-u9ƒ4v9~-u9ƒ4u9ƒ4v-~9w-ƒ4v-~9t-9t-9w-ƒ4y-~-y-~-w-ƒ4y-~-y-~-y-~-x-„)y-~-x-„)y-~-x-„){-!y-~-x)„-y-~-{!-y-~-x)„-{!-{!-{-!x-„)y-~-{!-{!-{-!y-~-{!-z!„){-!|!!z)„!{-!|!!|!!|!!{!-{!-|!!{!-|!!|!!|!!|!!}€!|!!|!!}€!|!!}€!}€!}€!}€!}€!~}!€}€!}€!}€!~}!€~}!€}€!}!€}!€~}!€}€!~}!€|!!|!!|!!|!!{!-|!!|!!|!!{-!{!-|!!{-!{-!{-!{-!y-~-y-~-{!-y-~-{!-{-!y-~-y-~-y-~-{!-{-!y-~-y-~-{!-y-~-y-~-{!-y-~-{-!{-!{!-{!-{!-{!-|!!{-!|!!|!!|!!|!!|!!}€!|!!{€-}€!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!|!!|!!|!!{-!{!-{!-{!-|!!{!-|!!y-~-|!!{-‚,|!!},‚!{-!{-!{-!{-!{-!{,‚-{!-{,‚-{!-}!‚,{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€|!!}€!}€!~}!€}€!}€!}€!~~}!€}€!~~~}!€~}!€}€!~}€!}!€}€!~}!€}!€}!€|!!}€!|!!}€!|!!}€!}€!}!€}!€}!€|!!}€!}!€|!!}€!|!!~}!€}!€}!€}!€|!!}€!}!€}!€|!!}€!}€!}!€|!!}!€}!€}!€}!€}!€}!€}!€}€!~}!€}€!}€!}€!}€!~}€!}€!}€!}€!~}€!~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€}€!}€!}€!~|!!}!€|!!|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-{!-|!!{!-|!!{!-|!!{-!{!-{!-{-!{!-|!!{-!y-~-{-!y-~-{!-{-!{-!y-~-{!-{!-{!-{!-{!-{!-|!!{-!y-~-{!-{!-|!!{-!{!-|!!|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!}!€|!!}!€}!€|!!}!€}!€|!!}!€|!!|!!|!!|!!|!!{-!|!!|!!{-!{!-{!-y-~-{!-{-‚,{-‚,y-~-y-~-y-~-y-~-y69y-~-y69y-~-y69y69y69{6-}6„6v-~9v-~9{-6y-~-{6-{6-{-6y-~-{-6y-~-{6-{6-{6-{-6y-~-y-~-{,‚-{,‚-{-‚,}!‚,},‚!{-!{-!|!!|!!}!‚,}€!}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~t9~9t9~9v-~9t9~9u4ƒ9t9~9t9~9y-=t9~9t9~9w9=t9~9t9~9t9~9t9~9w9=t9~9w=„4t9~9y=-t9~9v-~9u9ƒ4v9~-v9~-t9~9t9~9v9~-u4ƒ9y-=v-~9v-~9t9~9v9~-t9~9t9~9v-~9v9~-y=-t9~9t9~9q99v9~-v9~-q99t9~9q99{6-t9~9v-~9t9~9v-~9t-9v9~-v9~-v-~9q99v9~-u9ƒ4v9~-u9ƒ4t9~9v-~9t-9v9~-v9~-u9ƒ4t-9y-~-y-~-w4ƒ-y-~-y-~-y-~-w4ƒ-y-~-x-„)y-~-y-~-x)„-y-~-x-„)y-~-y-~-x-„)y-~-x-„)y-~-y-~-{!-{-!x-„)y-~-{!-{-!x-„){-!{-!x)„-z!„){-!|!!{-!{-!|!!|!!{-!z)„!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!}!€}!€}!€}€!}!€}€!}!€}!€}€!}€!|!!~}!€~}€!}€!}€!}!€|!!}!€}!€}!€|!!|!!|!!|!!|!!{-!{!-|!!{-!{!-|!!y-~-{!-{!-|!!y-~-{!-{!-y-~-{-!{-!{-!y-~-{!-{-!{-!y-~-{-!{-!{-!{!-{!-{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!{-!}!€{-!{-!{-!|!!{-!|!!|!!{-!{-!{!-|!!{-!{-!{,‚-{-!{!-{!-{!-}!‚,{!-{-!{-!|!!},‚!{-!|!!{-!{-!},‚!|!!{-!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€}€!}€!~~~}!€~}!€~}!€}!€~}!€}€!~|!!~~}!€}!€}!€}!€}!€~}!€}!€|!!}€!}€!}€!}€!|!!|!!}€!}!€}€!}€!}€!}!€|!!}€!}!€}€!}!€}€!}€!}€!|!!}!€}€!}!€}!€}!€}!€}!€}!€|!!}€!}€!}€!}€!}€!}€!~~~}€!~}!€~~~}€!~~}!€~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~}!€~~}€!}€!}€!}€!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!{!-{!-|!!{!-|!!|!!|!!|!!{-!{-!{!-|!!|!!{-!{!-{-!{-!{-!{-!{-!{-!{-!{-!{-!{-!{-!{-!{-!{!-|!!{-!{-!{-!{!-|!!{!-{-!{-!|!!{-!{-!{!-|!!{-!|!!|!!|!!|!!|!!}€!|!!}€!}€!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!{!-{!-{!-{!-y-~-{,‚-y-~-{-‚,{,‚-{-6y-~-{6-{-6v9~-}6„6v9~-y69y-=v-~9y69y69{-6{6-{-6{6-y-~-{6-y-~-{6-{6-y-~-{-6y-~-{6-{-6{-6{,‚-}6‚!{,‚-~,…,{-!},‚!{!-}!‚,}!‚,|!!}!‚,}€!~}€!~}!€~~~~~~~~~~~~~~~~~~~~~t9-v9~-t9~9t9~9t9~9y96t9~9t9~9y96t9~9v9~-t9~9t9~9t9~9{6-v9~-y4†6v-~9t9~9v-~9w4„=v-~9v9~-v9~-y=-u4ƒ9w4ƒ-u4ƒ9v9~-v9~-u9ƒ4y96v-~9v-~9u4ƒ9v-~9u9ƒ4t9~9v-~9u9ƒ4t-9v-~9v9„6t9~9u4ƒ9u9ƒ4t9~9t9~9u4ƒ9q99v-~9r4†9v9~-y-=q99t9-u9ƒ4t9~9v-~9t9-v9~-u9ƒ4v9~-u4ƒ9v-~9w4ƒ-t9-v9~-w4ƒ-t9-w4ƒ-t9-w-ƒ4x-„)y-~-x-„)t9-x-„)y-~-y-~-x-„)y-~-x-„){-!y-~-{-!y-~-x-„)y-~-x)„-y-~-{-!y-~-z)„!{-!{-!x)„-{!-|!!{-!|!!{-!|!!z!„){-!{!-{!-|!!{!-|!!{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!~|!!}!€}!€}!€}€!}€!}€!~~}€!}€!}€!}€!}€!~}!€~}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-{!-{!-|!!{-!{-!{-!{-!y-~-{!-{!-{!-y-~-y-~-{!-{-!y-~-{!-{!-{!-{-!y-~-|!!{-!{-!{-!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{!-{!-{!-|!!{-!{-!{-!{!-{!-|!!{-!{-‚,{-‚,{!-{!-{-!|!!{!-{!-{!-{!-{!-|!!|!!{!-|!!|!!{-!|!!|!!|!!}!€|!!}€!|!!}!€|!!}€!|!!}!€|!!}€!~}!€}!€~}€!~}!€}!€~}!€}€!~}!€|!!~}!€}!€}€!}!€|!!}€!}!€}!€|!!}€!|!!}!€}!€}!€}!€}!€|!!}€!}€!~|!!}€!}€!}!€|!!}!€}!€}!€}!€}€!|!!}€!}!€}€!}€!}€!}€!~}€!}€!}€!~}!€}€!}€!}!€}€!}€!~}€!~}!€~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~|!!~~}!€}!€}!€}!€}€!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!{-!|!!|!!{-!{-!{-!{!-|!!{!-{!-{!-|!!{-!{-!{-!y-~-{!-{!-{!-{!-|!!{-!{!-|!!{!-{!-{!-{!-|!!|!!|!!{-!|!!{!-|!!|!!{-!|!!|!!|!!|!!}!€|!!}€!}€!|!!}€!~|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!{-!{!-{!-{!-{!-{-!{-!y-~-{!-{-‚,y-~-y-~-{-6{-6v-~9{6-v-~9v-~9{6-v9~-}6„6y-~-v9~-{6-y96y-~-y-~-{6-{6-{6-{,‚-~,…6{-6{-‚,{-6{-‚,{6-{,‚-y-~-~,…,{,‚-{!-}!‚,{!-},‚!|!!|!!|!!}€!}!€|!!~~~~~~~~~~~~~~~~~~~~~~~~q99v-~9v9~-t9~9t9~9v-~9t9~9t9~9t9~9t9~9t9~9t9~9v9~-v9~-t9~9t9~9t9~9w9=v-~9u4ƒ9v-~9v9~-y6†4v9~-u4ƒ9v9~-v-~9t9~9v-~9u4ƒ9y-~-v9~-t9‚=v-~9u9ƒ4t9~9v-~9w4ƒ-u9ƒ4v-~9t9~9v9~-w=„4v9~-q99v-~9t-9t-9v9~-v9~-q99v-~9v-~9w4ƒ-v9~-v9~-v9~-w-ƒ4t9~9v-~9u9ƒ4v-~9u4ƒ9v-~9y-~-w4ƒ-v9~-w4ƒ-v9~-v-~9y-~-x-„)y-~-y-~-y-~-y-~-x)„-y-~-y-~-z!„)y-~-x-„)y-~-x)„-y-~-x-„)y-~-{!-x)„-{-!x-„){-!{-!{-!x-„){-!{-!{-!{-!{-!{!-z)„!z)„!{-!|!!|!!z)„!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}!€}!€|!!}€!~}!€~}!€}!€}€!~}€!~}€!~}€!}€!}€!}€!}€!}!€}!€|!!}€!|!!{€-|!!{!-{!-{!-|!!{-!{!-|!!{!-{-!{-!y-~-{!-y-~-{!-{-!y-~-{-!{-!{-!y-~-{!-{-!{!-{-!{!-{!-{!-|!!{-!|!!{!-|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!{-!{!-|!!|!!|!!|!!{-!{!-{!-|!!{-!{-!{,‚-{!-{!-{!-},‚!|!!{-‚,{-!{-!|!!{-!},‚!{-!{,‚-{!-},‚!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!}€!~}!€~}!€}!€~~}€!~}€!~~}!€}€!~}!€}€!~}!€}!€}!€}€!}€!}€!~~}!€}€!}€!~}!€}!€|!!}€!|!!}!€}!€}!€|!!~|!!~|!!~}!€|!!}€!}€!}!€}!€}!€|!!}!€}!€}!€}!€}€!}€!}!€}€!}€!}€!}€!}€!~~~}!€~~~}!€}!€~}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~}!€~~~}!€~~~}!€}!€|!!}€!|!!}€!}€!|!!|!!|!!|!!|!!{!-|!!|!!|!!{!-|!!|!!|!!|!!|!!{-!|!!{!-|!!{-!{!-{!-{!-|!!{-!{-!{-!{-!{-!{-!{!-{!-|!!{-!{-!{-!{!-{!-|!!|!!|!!{-!{-!{-!{!-{!-|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€|!!|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!{,‚-y-~-{-‚,y-~-y-~-~,…6y-~-y-~-v-~9{-6v-~9{6-{6-v-~9{-6v9~-v-~9}6„6v9~-{6-{-6{-6{-‚,{-‚,{-‚,{-6{-‚,{6-{6-{6-{6-{-‚,{-6{,‚-{,‚-{-‚,{!-}!‚,|!!},‚!},‚!}!‚,|!!|!!}€!}!€}€!~~~~~~~~~~~~~~~~~~~~~~~v9~-u9ƒ4t9~9t9~9v-~9t9~9v-~9t9~9v-~9v-~9t9~9v-~9w=9y69v9~-v9~-u9ƒ4v-~9v-~9y-~-v9~-w4ƒ-v9~-v9~-v9~-v-~9w-ƒ4y-~-v9~-v-~9q99u9ƒ4v9~-u9ƒ4v-~9v-~9u4ƒ9v-~9v-~9u9ƒ4v-~9v-~9t9-q99v-~9u4ƒ9q99t9~9v-~9v9~-v9~-t9-q99q99q99u4ƒ9o9„9t9~9v-~9u9ƒ4v-~9v9~-q99w-ƒ4t9~9v9~-v9~-v9~-v9~-w4ƒ-y-~-t-9y-~-w4ƒ-x-„)y-~-y-~-y-~-y-~-y-~-x)„-x-„)y-~-x-„){-!y-~-{-!y-~-{-!{-!{-!x-„)y-~-{!-{-!{-!z)„!{-!{-!|!!{-!|!!|!!|!!{-!|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!}€!}€!}!€}!€}!€}€!}€!}€!~}!€}€!}€!}!€}!€~~}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!{-!{-!|!!{-!|!!{-!{!-|!!y-~-|!!{-!{-!y-~-|!!{-!{!-{-!y-~-{!-|!!{-!{-!{!-|!!{-!{!-{!-|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!{-!{-!|!!{-!|!!{!-{!-{!-{!-{!-{!-{!-{!-{,‚-{!-}!‚,{!-{!-|!!{-!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}€!}€!}!€}!€}€!}!€}€!~}!€}€!}€!~}€!~}!€}€!~}!€~}!€}€!}!€}!€}€!}€!}!€|!!}!€}€!|!!}€!}!€}!€|!!}!€}€!}!€|!!}€!}!€}!€|!!~|!!}€!}€!~}!€}!€}!€}!€~}€!~}!€}!€}!€}!€~}!€}€!~~~}!€}€!~~~}!€~~~}!€~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~}!€}€!}€!}€!}€!}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{-!{!-|!!|!!{-!|!!{!-|!!{-!{-!{!-{!-{!-{-!{!-{!-|!!{-!{-!{-!{!-|!!|!!{!-|!!|!!{!-{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!}!€}€!|!!}!€|!!}€!~}!€|!!}€!|!!|!!}€!|!!|!!|!!|!!{!-{!-{!-{!-{!-}!‚,{!-y-~-{,‚-y-~-{-‚,{6-{-6v-~9{-6v-~9{-6}6„6{-6{-6y96v-~9{-6y-~-{6-~,…6{-6y-~-{-6y-~-{-6{-‚,y-~-{6-{-6{-6y-~-{-‚,{-‚,}!‚,~,…,{!-},‚!},‚!}!‚,}!€~,ƒ~,ƒ}!€}€!~}€!~~~~~~~~~~~~~~~~~~~~~~y,‚9v9~-v9~-v9~-y=-t9~9y69v-~9t9~9v9~-v9~-t9~9v-~9t9-v9~-y96v-~9v9~-y96q99u4ƒ9y-~-v9~-u4ƒ9y-~-v9~-v9~-v9~-u4ƒ9w-ƒ4v9~-y-~-v9~-v-~9v9~-t9-q99q99v9~-v-~9v9~-t9~9v-~9v9~-v9~-v9~-v9~-v9~-v9~-q99v-~9v-~9y-~-v9~-v-~9v-~9v9~-v-~9{-6v-~9q99v-~9y-~-t9~9w-ƒ4y-~-w4ƒ-w4ƒ-w-ƒ4y-~-t9-s9†)y-~-y-~-x-„)y-~-x)„-x-„)y-~-x)„-x-„)y-~-{-!y-~-{-!{-!y-~-{!-{!-x-„)y-~-{-!{-!{-!{-!{!-{!-{!-|!!x-„)|!!{-!{-!{-!|!!|!!{-!|!!|!!|!!{!-|!!|!!|!!|!!|!!}!€|!!|!!}€!}€!}!€|!!}€!~|!!~|!!~}!€~}!€~}!€}€!~}!€~~}!€|!!}€!}!€}€!}!€|!!|!!|!!|!!{!-|!!{-!|!!{-!{-!{!-{!-{!-{!-{-!{-!{-!{!-{!-{!-{!-{!-{-!{!-|!!y-~-{!-|!!{!-{!-|!!{-!{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!{!-|!!{-!{-!|!!{!-{!-|!!{-!{,‚-{!-|!!{-!{-!{,‚-}!‚,{-!{!-|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!}€!}!€}!€|!!}€!}€!}!€}!€}€!~}€!~~~}!€~}!€}!€}!€~}!€}€!}!€}€!}€!~}€!}€!~}!€}€!~}!€|!!~}€!}€!|!!}!€}!€|!!}€!}€!~}€!~}!€}!€}!€|!!}€!}!€|!!}€!}€!}€!}€!}!€|!!}€!}€!~~~}!€}!€~}!€}€!~~~}€!~~~~}!€~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~}€!~}€!~~~|!!|!!}€!|!!}€!}!€|!!}!€|!!|!!|!!{-!|!!|!!|!!{!-|!!|!!|!!{-!{-!|!!{-!{-!{!-{!-|!!{-!{-!{-!{!-{!-{!-{!-{-!{-!{!-|!!{-!{!-|!!{!-|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}€!}!€|!!}€!|!!}€!|!!}!€|!!|!!|!!|!!|!!{!-|!!|!!{-!y-~-{!-y-~-y-~-y-~-y-~-{,‚-y-~-y-~-{-6v9~-y69{-6v9~-v9~-{6-y=-y96v9~-{6-~6…,{-6y-~-{,‚-{-6y-~-~,…6y-~-{-6{-6y-~-{6-y-~-~,…6y-~-{-‚,y-~-{!-}!‚,}!‚,}!‚,},‚!}!‚,|!!}!‚,}€!}!€}!€~~~~~~~~~~~~~~~~~~~~~~~q99v-~9v-~9v-~9v-~9v9~-v9~-y96v-~9v9~-y=-v9~-v9~-t9~9t9-v9~-v9~-v-~9y-~-y-~-v-~9v-~9w4ƒ-v-~9t-9w-ƒ4v-~9y-~-y-~-v9~-t-9t-9y-~-v9~-v-~9v-~9v-~9y-~-t9~9t-9v9~-t-9v-~9v-~9q99v-~9q99u4ƒ9v-~9v9~-t9-t9~9v-~9o9„9u9ƒ4t-9v-~9r9†4u9ƒ4v9~-u9ƒ4v-~9u9ƒ4t-9v-~9w-ƒ4v9~-q99v9~-t9-w4ƒ-y-~-y-~-w4ƒ-y-~-y-~-x-„)y-~-x-„)y-~-y-~-{!-x)„-{-!x-„)y-~-x)„-y-~-x)„-{!-{!-{!-z)„!{-!x-„){-!{!-{!-|!!|!!{!-|!!|!!|!!|!!{-!|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}€!}!€}!€|!!~|!!~}!€}€!}€!}€!}€!}€!}€!~}€!}€!}€!}€!}€!}!€}€!}!€|!!|!!}€!|!!|!!|!!|!!|!!{-!|!!{!-|!!{-!{!-{!-{!-|!!{-!{-!{-!{-!{-!{-!{!-{!-{!-|!!|!!{-!{-!{-!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!{!-|!!|!!{-!{-!y-~-}!‚,{!-{!-|!!{-!},‚!{-!{-!{!-|!!{-!{!-{!-{!-{!-{!-|!!{-!},‚!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!~}€!}€!~}!€}€!}€!}€!~~}!€~~~}!€~}!€~}!€}!€}!€}!€}!€}!€}!€}!€}!€|!!}€!|!!|!!~}!€|!!~|!!}!€}!€}€!}!€|!!~|!!}€!~}€!}!€}!€}!€}!€}!€}!€}!€~|!!~}€!}€!}€!~}!€}!€~~}!€}€!~~}€!~}!€~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€}€!~~}!€~}!€}€!~}€!}€!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!|!!|!!|!!{-!|!!{-!{!-|!!{-!{!-|!!{!-|!!{-!{!-|!!{-!{!-|!!{-!|!!{-!{-!|!!{!-|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€}!€}!€}!€|!!~|!!}€!~}!€}!€}€!}!€|!!|!!}!€|!!|!!|!!|!!{!-|!!{-!{-‚,{-!{-‚,y-~-{-‚,y-~-{6-v-~9{-6v-~9{6-{-6v-~9y69y-~-y-~-{6-{,‚-{6-y-~-{-6y-~-y-~-{-6y-~-{6-{-6y-~-{-6{-6{-6y-~-~,…6~,…,}!‚,},‚!{-!},‚!},‚!|!!},‚!|!!}!€~,ƒ}€!~}!€~}!€~~~~~~~~~~~~~~~~~~~~y-~-v9~-v9~-v9~-v-~9y-~-t9~9v-~9v9~-v9~-v9~-t9~9v-~9y-~-v-~9y-~-v-~9w4ƒ-t-9v-~9y-~-v9~-v-~9y-~-v9~-v-~9y-~-v9~-t9-y-~-t9-v9~-v-~9y-~-t9-y-~-y-~-v-~9y-~-v9~-v-~9v9~-t-9v-~9y-~-q99y-~-v9~-t9~9v-~9v-~9t-9t-9y-~-v-~9v9~-t=‚9v-~9v-~9t9-t9~9t-9y-~-v9~-r4†9v9~-t9-y-~-y-~-y-~-y-~-y-~-w4ƒ-y-~-x)„-x)„-y-~-y-~-x)„-{-!y-~-x)„-{-!y-~-y-~-{-!{-!{-!{-!{-!x-„){!-{!-z)„!{-!|!!{-!|!!x-„){!-|!!z)„!|!!{-!{-!|!!|!!{-!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!}!€|!!}€!}!€}!€|!!}€!}€!~}€!~}!€~~~~}€!~}!€~}€!~}€!~|!!}€!}!€|!!|!!|!!{!-|!!{!-|!!|!!{!-|!!{-!{!-|!!{-!{!-{!-{!-{!-|!!{-!{!-|!!{-!{!-|!!{-!{-!{-!|!!|!!{!-{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€}!€}!€|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-{!-|!!|!!|!!{-!{-!{-!{-‚,{-!y-~-{!-{!-{!-{!-{!-{,‚-|!!{-!|!!|!!{-!},‚!|!!{-!|!!{!-|!!|!!|!!|!!}!€|!!|!!}€!}!€}€!}€!}€!~~~~}!€}!€}!€}!€}€!~}!€}€!}€!}€!}!€}!€}!€~}!€}!€}€!}!€}€!}!€}€!~|!!}€!~|!!}€!~}!€|!!}€!~|!!}€!~|!!|!!~~~}!€}!€}!€}€!}€!~}€!}!€~}!€}!€~}€!~}!€~~}€!~~~~}!€~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~}€!~}€!~|!!}€!}!€}!€|!!}!€}€!|!!}€!|!!|!!|!!|!!|!!|!!}€!{-!|!!|!!{!-|!!{-!{!-|!!{-!|!!{-!{-!{!-|!!{!-{!-{!-|!!{-!{!-|!!{-!{-!{-!{-!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}€!|!!}€!~}!€}!€}!€~|!!}€!}€!|!!}€!}!€}!€|!!|!!}!€|!!{-!{-!{-!{-‚,{!-y-~-y-~-{-‚,y-~-y-~-y-~-y-~-y69v-~9{-6y-~-{6-y-~-}6„6}6„6y-~-{6-y-~-{-6y-~-y-~-~,…6{-‚,{-‚,{6-{6-{6-{6-y-~-{,‚-{-6{,‚-{-‚,{,‚-},‚!}!‚,|!!|!!}!‚,|!!},‚!|!!}€!}!€}€!~~~~~~~~~~~~~~~~~~~~~~~v-~9y-~-v9~-t9~9v-~9v9~-v9~-t9~9y-=t-9v-~9v-~9y-~-v9~-v9~-v-~9y-~-v9~-v9~-y-~-v9~-y-~-v-~9y-~-y-~-y-~-w-ƒ4y-~-t-9y-~-v9~-y-~-t9-t-9y-~-t9-t9-t9-v9~-v-~9y-~-t-9v9~-v9~-q99v9~-t9~9v-~9y-~-t9-v9~-t9-v9~-t9~9q99v-~9w-ƒ4v9~-t9~9v-~9w4ƒ-v9~-u9ƒ4t-9y-~-y-~-u9ƒ4v9~-t9-w4ƒ-w4ƒ-y-~-y-~-y-~-y-~-x-„)x-„){!-y-~-x)„-y-~-{!-y-~-x)„-|!!x-„)y-~-{!-{-!y-~-|!!{-!{-!{!-z)„!{-!|!!{-!|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!|!!}!€}!€}€!~|!!}€!~~|!!}!€}!€~}!€~}!€~}!€}!€}€!}€!}!€}!€|!!|!!|!!|!!|!!{!-|!!{!-{!-|!!{!-{!-|!!{-!{-!{-!{-!{-!{!-{!-{!-|!!{-!{!-|!!{-!{!-{!-{!-{!-{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!‚,|!!{-!},‚!|!!{!-{!-|!!{-!{!-}!‚,{!-{!-{!-|!!{-!{-!{-!{-!|!!{-‚,}!‚,{-!|!!},‚!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!}€!|!!|!!}€!}!€}!€}€!}€!}€!}€!~~}€!}€!~~}€!~}!€}€!~~}€!}€!}!€}!€}€!}!€}€!}!€}€!}!€|!!}€!|!!|!!~|!!}€!}€!}€!}€!}€!}€!~}€!~~|!!|!!}!€}!€}!€}!€~}!€}!€}!€~}!€}!€~}!€}€!~~}€!~~~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~~~~}€!~~~|!!}€!}€!|!!}€!|!!}€!}€!|!!|!!|!!|!!{-!|!!{-!{-!|!!{!-|!!|!!{!-|!!{-!|!!{!-{-!{-!{-!{!-|!!{-!{-!{!-{!-|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€}!€}!€}!€|!!~}!€}!€~}€!}!€~}!€}€!}€!}€!}€!}!€|!!|!!|!!{!-{!-{!-y-~-{,‚-{!-y-~-y-~-{,‚-{,‚-{6-{-6{-6v-~9{-6v-~9{6-v9~-y-~-{6-{-‚,{6-{-‚,{-‚,{6-y-~-{-6y-~-y-~-{6-~6…,{-6{-6{-‚,{-‚,{-‚,{-‚,{-‚,}!‚,{-!{,‚-}!‚,|!!},‚!|!!}€!|!!}!€~}€!~~~~~~~~~~~~~~~~~~~~~~y-~-t9-v-~9y-~-v9~-v-~9v-~9y-~-v9~-v-~9y-~-y-~-v-~9y-~-y-~-v9~-v-~9y-~-t-9y-~-w4ƒ-y-~-y-~-v-~9y-~-w4ƒ-y-~-y-~-y-~-y-~-y-~-t-9y-~-t9-t9-t9-t-9y-~-t-9y-~-t9~9y-~-v9~-t-9y-~-v-~9t-9v-~9t9-v9~-v9~-q99v-~9v9~-v-~9t-9v9~-t9~9v-~9u4ƒ9w-ƒ4u9ƒ4v-~9t9-t9-r4†9y-~-w4ƒ-y-~-y-~-w-ƒ4y-~-w4ƒ-w4ƒ-y-~-x)„-y-~-x-„){-!x-„)x-„){-!x)„-{!-y-~-y-~-{!-x)„-{!-z)„!y-~-z!„){!-{-!{!-{!-z)„!{-!{-!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!}€!}€!~}!€}!€}!€}!€}!€}!€~~~}€!~}!€~}!€~}€!~~}!€|!!}€!}€!|!!|!!|!!|!!{!-|!!|!!{!-{!-|!!|!!{-!{!-|!!{!-{!-{!-|!!|!!{-!{!-|!!{-!|!!{-!|!!|!!{-!|!!|!!{-!|!!|!!|!!|!!{€-}€!}€!}€!|!!|!!|!!|!!}!€|!!}€!}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!},‚!{-!},‚!{-!{-!{-!{!-|!!y-~-{,‚-}!‚,{!-},‚!{,‚-|!!{-!|!!{-!{!-}!‚,{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€}!€}!€}!€~~~}!€}€!~}€!}€!}€!}€!}€!~}!€}€!}!€}!€}€!~}!€}!€}!€}!€|!!}!€}!€}!€}!€}!€}€!}!€}!€}!€}!€}!€}€!}€!}€!}€!~}!€|!!}€!~}€!}€!}€!~}€!~}!€~}€!}€!~}€!~~~}!€~~~~~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~}€!~}€!~}!€~~}!€|!!}!€}€!}!€}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!{-!{-!|!!|!!{!-|!!{-!|!!{!-|!!|!!{!-|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!|!!|!!|!!}€!}€!}!€|!!~}!€}€!}€!}!€}!€~}!€}€!}!€}!€}!€|!!}€!|!!|!!|!!{-!{!-{-!|!!{-!y-~-y-~-{-‚,{-‚,y-~-y-~-{6-v-~9{-6{-6{-6y-~-y-~-{6-{-6y-~-{,‚-{,‚-{6-{-‚,y-~-{6-{-6~6…,{6-y-~-{-6{,‚-{6-~6…,y-~-{,‚-{,‚-{,‚-{!-|!!{-!|!!|!!}!‚,~ƒ,~~}!€~}€!~~~~~~~~~~~~~~~~~~~~~v-~9y-~-v9~-v9~-v-~9v-~9y-~-v9~-v-~9v9~-v-~9v-~9y-~-v-~9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t-9x-„)y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-t9-t9-t-9y-~-v9~-v-~9q99t-9v9~-v9~-t9-v-~9t-9v-~9t-9y-~-q99v-~9t9-q99v9~-u4ƒ9v-~9v-~9v-~9y-~-v-~9v-~9y-~-v9~-v9~-t9-t9-y-~-x-„)y-~-y-~-y-~-y-~-x)„-y-~-y-~-y-~-y-~-y-~-y-~-x-„){-!{-!{-!x-„)|!!{-!z)„!{-!{-!{!-|!!{-!{!-|!!z!„){-!{-!{-!|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!|!!|!!}€!}!€}€!~}€!~}€!}€!~}!€}€!}€!~|!!~}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!{!-{!-{!-|!!y-~-|!!|!!{-!{-!{-!{-!{!-{!-|!!{!-|!!y-~-|!!|!!{!-|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!{-!{!-{!-|!!|!!y-~-}!‚,{!-{!-},‚!{,‚-},‚!|!!{-!{-‚,{!-{!-{!-{!-{!-{!-|!!{-!|!!}!‚,{-!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}€!}€!}€!}€!~}€!~}!€}!€~~}!€~}€!~}!€}!€}€!~}!€~}€!~}€!}€!~|!!}€!|!!}€!}!€}!€}€!}€!}€!}€!}€!}€!}!€}€!~|!!~}!€~}€!~}!€~|!!~}!€}€!}€!}!€~}€!}!€}€!~~~~~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~~~~~~}!€~~}€!}€!}€!}!€}!€|!!|!!}€!}€!|!!|!!|!!|!!{!-|!!|!!{!-|!!{!-|!!{!-|!!|!!{-!|!!{-!{-!{-!{-!{!-{!-|!!{-!{-!|!!{!-|!!{-!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!~~}!€}€!~~~}€!~}€!~~~|!!}€!|!!}€!|!!{!-{!-|!!y-~-y-~-y-~-{-‚,{-!y-~-y-~-y-~-~,…6{-6y-~-{6-{6-{-6}6„6{-6y-~-{6-{-6y-~-{6-y-~-{-6y-~-{-6y-~-{6-{-6y-~-{6-{-6{-‚,y-~-{,‚-{,‚-{!-|!!},‚!~,…,|!!},‚!},‚!}!€}!€~,ƒ}!€~}!€~~~~~~~~~~~~~~~~~~~~~~t9-v-~9y-~-t-9v-~9y-~-v9~-y-~-v9~-y-~-v9~-y-~-y-~-{-!y-~-y-~-y-~-{-‚,y-~-y-~-y-~-y-~-{-‚,y-~-{-!y-~-y-~-y-~-x)„-x-„)y-~-t9-y-~-y-~-y-~-y-~-y-~-t-9y-~-t9-t9-t9-t-9y-~-v-~9t-9v-~9v-~9t-9v-~9t-9y-~-t9~9y-~-v9~-v9~-v-~9t-9v9~-u9ƒ4v9~-q99u4ƒ9w-ƒ4w4ƒ-v-~9t-9y-~-w4ƒ-y-~-t9-y-~-t9-y-~-s9†)y-~-y-~-{-!t9-x)„-{!-y-~-{!-{!-v!9{!-x-„){-!y-~-{!-{!-{!-|!!x-„){!-|!!{!-|!!{-!|!!|!!|!!{!-|!!|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!}€!}€!}!€|!!}!€|!!~}€!}€!~}!€~}€!}!€}!€~}!€~}!€~~~~}!€}!€}€!|!!}€!}!€|!!|!!|!!|!!{!-|!!|!!|!!|!!{!-{!-{-!|!!|!!{-!{!-{!-{!-|!!{-!|!!{!-|!!|!!{-!{-!{-!|!!{!-{!-|!!}!‚,|!!|!!|!!|!!|!!}!€|!!}€!|!!}!€|!!}!€|!!|!!}€!|!!}!€|!!}€!|!!~|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-{!-|!!{!-}!‚,{-!{!-{-!{!-{-‚,{-!{-‚,{!-{!-}!‚,{-!{-!},‚!},‚!|!!{!-|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€}!€~}€!}!€}€!~}€!~}€!~|!!~}!€}!€~}!€~}!€|!!|!!}!€}!€}!€}€!}!€|!!~}!€}!€|!!}!€}!€}!€~}€!~}€!}€!}€!~}!€}!€|!!}€!|!!~|!!~}!€~}!€}€!~}€!~~~}€!~}€!~}!€~~~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~}!€}€!~~}!€}€!~}!€}!€|!!}€!|!!}!€|!!|!!|!!{-€{-!|!!|!!|!!{!-|!!{!-|!!|!!{-!{!-{!-|!!{-!{!-|!!|!!|!!{-!|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€}€!|!!}!€|!!}!€}€!}!€}€!|!!}€!}€!}€!}!€~~}!€}!€}€!~}€!}€!~}€!}€!~}!€|!!|!!|!!|!!|!!|!!{-!{-!{-!{,‚-y-~-y-~-y-~-{6-y-~-y-~-{-6y-~-y-~-{6-y-~-{,‚-{6-{-6{,‚-{,‚-{-‚,{,‚-y-~-{6-{,‚-{6-y-~-{6-{-6y-~-{6-{,‚-{-6{-6y-~-~,…,~,…,{!-|!!},‚!|!!|!!|!!|!!}!€}€!}€!~~~~~~~~~~~~~~~~~~~~~~~y-~-v9~-t9-v9~-y-~-v9~-v-~9v9~-y-~-y96y-~-y-~-y-~-{,‚-y-~-{-!{,‚-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{,‚-x)„-{-!y-~-{-!y-~-y-~-{!-t9-x-„)y-~-s)†9y-~-y-~-t-9y-~-y-~-t9-v9~-t9-t9-t-9v-~9y-~-v9~-v9~-t9-v9~-t-9t9-t9-t-9v-~9u4ƒ9t-9v-~9v-~9y-~-v-~9t-9t-9t-9y-~-v9~-v9~-t9-y-~-y-~-y-~-x)„-x)„-y-~-y-~-y-~-x)„-y-~-x-„){-!y-~-{!-|!!x)„-{!-{-!{-!{!-{!-|!!{-!z)„!{-!{-!z)„!{!-|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}€!}!€|!!}!€}!€}€!~~}!€~}!€~}€!}€!~}!€}!€}€!~}!€}!€}€!|!!}€!|!!|!!|!!{-!|!!{!-|!!{-!|!!{!-{!-{!-|!!{-!|!!{!-|!!{!-{!-|!!{!-|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}€!|!!|!!}€!|!!|!!}€!}€!|!!}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!{-!|!!{-!}!‚,{-!{-!{-!{!-{,‚-{!-{-‚,{!-}!‚,{-!{-!{-!{-!|!!},‚!{!-}!‚,{!-|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!}!€}€!}€!}€!}€!}€!}!€~~}!€}!€~}!€}!€~~}!€~~}!€}€!}!€}!€}!€}€!}€!~}€!}!€}€!}!€}!€|!!}!€}!€}!€|!!}€!}€!}!€|!!}!€}€!}€!|!!~~}!€}!€~}!€}!€~}!€}€!~}!€~}€!~~~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~}€!~~}€!~}!€}!€}!€|!!}€!|!!}!€|!!}€!}€!|!!|!!|!!{-!{-!{!-|!!{!-|!!|!!|!!{-!|!!{-!|!!{-!{-!{-!{!-{!-|!!{-!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}!€|!!}!€}€!|!!~~}€!}€!}€!~~}!€}€!~~~}!€}€!}€!}€!}€!}€!|!!|!!{!-{-!{-!y-~-y-~-{-!{-‚,y-~-{-!y-~-y-~-{-‚,y-~-}6„6y-~-{6-{-6y-~-y-~-y-~-y-~-y-~-{6-{-6{,‚-y-~-{6-y-~-{6-{6-~6…,{-6{-6y-~-{6-{,‚-{-‚,{-‚,{!-},‚!},‚!}!‚,}!‚,|!!|!!}!€|!!}!€~~~~~~~~~~~~~~~~~~~~~~~~t-9y-~-y-~-y-~-v-~9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-‚,y-~-{-‚,y-~-y-~-{!-y-~-x-„)y-~-{!-y-~-y-~-y-~-x-„)y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t9-t-9t-9y-~-t-9y-~-t-9v-~9y-~-t9-y-~-t9-v-~9y-~-t9-v-~9t-9t-9y-~-v9~-v-~9v9~-u4ƒ9v-~9t9-v9~-v9~-v9~-t-9w-ƒ4y-~-y-~-s)†9x-„)y-~-y-~-y-~-x-„)x-„)y-~-{!-x)„-{!-y-~-x-„)y-~-y-~-{-!{-!{!-x)„-{!-x)„-{!-{!-{!-|!!{-!{!-|!!|!!{!-{!-|!!|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!|!!}€!|!!}€!}€!~}!€}€!}!€~}!€}€!~~}€!~~}!€}!€}€!}€!|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!{!-|!!|!!|!!{!-|!!{-!|!!{-!|!!y-~-|!!{-!{-!|!!|!!{-!{-!{!-{!-|!!|!!{-!|!!},‚!|!!|!!|!!}€!|!!|!!|!!|!!}!€|!!|!!}!€}€!}!€|!!}€!}!€|!!}!€}!€}!€|!!}€!|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!},‚!{-!{!-|!!{-!{-!{-!{!-}!‚,{-!{-!}!‚,y-~-},‚!{-!{,‚-{!-}!‚,{!-|!!{!-|!!|!!}!‚,|!!|!!|!!|!!|!!|!!}€!|!!|!!~}!€}!€~}!€|!!~}€!}€!~|!!}€!~}€!}!€}€!}!€}!€~}!€~}!€}€!}!€|!!}€!}!€}€!}€!~|!!~|!!~}€!}€!}€!~~}!€}€!~}€!}€!}€!~}!€}€!~}!€~~}€!~}€!~|!!~}!€~~~~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~}!€}€!~~}!€~}!€~|!!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!{-!{!-|!!{-!{-!{!-|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}€!}€!|!!~|!!}€!}!€}€!}€!}€!~}!€~~}!€~~}€!~}!€}€!~}!€}€!~|!!}€!|!!|!!{!-{!-{!-},‚!{,‚-y-~-{!-{!-{!-{-‚,y-~-{6-y-~-y-~-{,‚-y-~-{,‚-{-6{,‚-{,‚-{,‚-{,‚-{,‚-y-~-{6-{,‚-}6„6y-~-{-6y-~-{6-{,‚-~6…,y-~-{!-{,‚-}!‚,{!-}!‚,}!‚,|!!},‚!~ƒ,|!!~ƒ,~}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-{-‚,y-~-{!-{,‚-y-~-{-!y-~-{!-{!-{!-{-!{-!y-~-y-~-{!-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-t9-t-9y-~-y-~-t9-v-~9t-9v-~9t-9v-~9t-9y-~-y-~-v9~-q99v-~9t9-v9~-t9-u9ƒ4v-~9t9-y-~-t9-v9~-t-9y-~-t9-y-~-t-9x-„)y-~-y-~-y-~-y-~-y-~-y-~-{!-x-„){-!{-!{-!x)„-{!-{-!{-!{!-z)„!|!!{-!z!„)|!!z)„!{-!z!„){!-{!-|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!}€!|!!}!€}€!}!€}!€|!!}€!}!€}€!}€!}€!~~}!€|!!}€!~~}€!}€!~~|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!{!-|!!{!-|!!|!!|!!{-!{!-|!!|!!|!!|!!|!!{-!{-!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}€!|!!}€!}!€}!€}€!}!€|!!}€!}€!|!!}!€}!€|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!{-!~,…,{!-{!-},‚!{-!{-!y-~-{!-|!!{-‚,{!-|!!{-!{-!|!!{-!{-!}!‚,{-!|!!{!-|!!|!!|!!|!!}!€~,ƒ}!€|!!}€!}!€}€!}€!~~}!€}!€~}!€~~}€!~}€!}!€}€!}€!}€!}€!|!!}€!}!€}€!}€!}€!}€!}!€}!€}!€}!€}€!~|!!~}!€}!€}!€}!€}€!~}!€}!€}!€~}€!}€!~~}€!}€!}€!~}!€}!€}€!~}!€~}!€~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~}!€~}!€~|!!~}!€}€!}!€|!!|!!|!!}€!|!!|!!|!!{!-|!!{-!|!!|!!|!!{-!{-!{!-|!!{-!|!!{!-|!!{!-|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}!€}!€|!!}€!}€!}€!~}!€}!€}!€}!€}€!~~}!€}!€}€!~~}€!}€!~}!€}!€}!€|!!|!!{!-{!-|!!y-~-{!-{!-y-~-{-‚,y-~-y-~-{,‚-{-‚,{-‚,{-6{-‚,{-6y-~-{-‚,{-6{,‚-y-~-{-‚,{-‚,y-~-{-6y-~-y-~-{6-{6-{6-~6…,y-~-{,‚-}6‚!~6…,{!-{-‚,}!‚,},‚!}!‚,|!!|!!~,ƒ|!!}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-{-‚,{-!y-~-y-~-y-~-y-~-{!-{-!y-~-y-~-{-!y-~-{-!y-~-y-~-{-!y-~-y-~-{!-y-~-{!-{!-y-~-{-!y-~-{!-y-~-x-„){!-y-~-x-„)y-~-x)„-y-~-x)„-y-~-y-~-t9-t9-y-~-t9-t-9t-9y-~-t9-o9„9t-9t-9t-9v-~9t-9t-9v-~9y-~-t9-v9~-v-~9v9~-t9-v9~-w-ƒ4v9~-t9-w-ƒ4y-~-w-ƒ4y-~-x-„)y-~-y-~-y-~-x-„)y-~-{!-x)„-x-„)y-~-{!-{!-x-„)y-~-{-!{-!y-~-{!-{!-{!-{!-z)„!{-!{-!{-!{!-|!!{-!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}€!}!€|!!}€!}€!}€!}€!}€!~}!€|!!~}!€}!€}!€~~~}!€}!€}€!}!€|!!}€!}€!}€!|!!}€!|!!|!!|!!|!!|!!{!-|!!|!!|!!{-!{!-|!!{!-|!!{!-|!!{-!{-!{!-|!!|!!|!!|!!{-!|!!{-!}!‚,|!!},‚!|!!|!!|!!|!!|!!|!!}€!}€!}€!}!€|!!}€!}€!|!!}€!}€!}!€}!€}€!~}!€|!!}€!}€!}€!}!€|!!|!!}€!|!!}€!}!€|!!}!€|!!|!!|!!|!!|!!},‚!{!-|!!{-!},‚!{-!{-!},‚!{-!~,…,{-!{-!},‚!y-~-}!‚,{-!{!-}!‚,}!‚,{-!}!‚,{!-|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!}€!}!€}€!}€!}!€}€!~}!€~}!€~}€!}€!}!€~}!€}€!~}€!}€!}€!~}!€}€!}!€|!!}€!}!€}!€|!!}!€|!!}!€|!!}€!}€!~~}!€}!€}!€}€!~~}€!}€!}€!}€!~|!!~}€!~}€!~~~~~~~~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~}!€}!€~~~~~}€!~}!€}€!}!€|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!{-!|!!{-!|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€}!€|!!|!!}!€}!€|!!|!!}€!}€!}€!~}!€~}!€}€!}!€}€!~~}€!~}€!}€!}€!~}!€}€!~|!!|!!|!!|!!|!!{-!},‚!{-!{-‚,{-!{-!y-~-{!-y-~-y-~-y-~-{-‚,y-~-{-‚,y-~-{,‚-y-~-y-~-{,‚-{,‚-{-‚,{-6{,‚-{-6{-6y-~-{6-{-‚,{-6{-6{-‚,{-6y-~-}6‚!~,…,{-!},‚!}!‚,~ƒ,|!!|!!~ƒ,}€!}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-{-!y-~-y-~-x)„-{!-{-!y-~-x)„-{!-y-~-y-~-|!!y-~-{!-x-„){-!y-~-{-!x-„)y-~-y-~-y-~-y-~-y-~-x-„)t9-x)„-y-~-y-~-t9-t9-t-9t-9y-~-y-~-t-9y-~-t9-t-9y-~-t9-t9-v9~-t9-t9-t-9y-~-t9-w-ƒ4v9~-t-9t-9y-~-v9~-t9-y-~-t9-y-~-y-~-x-„)y-~-y-~-y-~-y-~-{!-y-~-x)„-x-„){!-|!!y-~-{!-{!-z!„){!-|!!{-!{!-{!-|!!{-!z)„!{-!|!!{-!{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€|!!}€!}€!}€!~}!€}€!~}€!~}€!}€!~}!€}!€~~|!!}€!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!{-!{-!|!!{!-|!!|!!|!!{!-{!-|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}€!|!!}€!|!!}€!|!!}€!}€!}!€}!€}!€|!!}€!~|!!}!€|!!}€!}€!}€!}€!}€!}€!|!!}€!|!!|!!|!!}!‚,|!!|!!{-!},‚!{!-{!-},‚!{-!{-!~,…,{!-{!-{!-{-!{!-|!!{-!~,…,{-!|!!{!-|!!|!!}!‚,|!!{!-|!!{-!|!!|!!|!!|!!}!€}!€|!!}€!}€!~~}!€}!€}€!~}!€}€!~}!€}€!}€!}€!~}!€}!€}€!~}!€}!€}!€}!€~}€!~}!€}€!}€!~}€!~}€!~|!!}€!~}€!}€!}!€|!!}!€}€!~}!€}€!}€!~}€!~}!€}!€}!€}€!}€!~}!€~~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~}€!~~}€!~~}!€|!!~}!€|!!}€!}€!}€!}€!|!!}!€}!€|!!|!!|!!|!!|!!{!-|!!{-!|!!{!-|!!|!!{-!{!-|!!{-!{!-|!!{-!|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}!€|!!|!!}€!}€!}€!}!€}!€}!€|!!}€!}!€}€!}€!~~~~}!€~}!€~~~}!€~}€!}€!}€!}!€}€!}€!|!!|!!|!!{!-{-‚,{!-{!-{,‚-{,‚-{!-{,‚-{-‚,{-‚,{-‚,y-~-{,‚-{-‚,{-‚,y-~-{,‚-~,…,y-~-{-‚,{6-y-~-y-~-{6-{6-~,…6y-~-{6-{6-{,‚-{,‚-{-‚,{-‚,{!-},‚!},‚!{-!},‚!},‚!}€!~ƒ,~}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-{,‚-{-‚,y-~-y-~-{-!y-~-y-~-y-~-{!-x-„)y-~-y-~-x)„-y-~-{!-{!-{,‚-y-~-{-!{-!y-~-{-!{-!y-~-x-„){!-{!-{!-{-!{-!{-!y-~-{-!y-~-y-~-y-~-y-~-x)„-y-~-w4ƒ-t9-y-~-y-~-t9-y-~-y-~-t9-t9-t-9y-~-t9-t9-t9-t-9v-~9v-~9y-~-t9-q99w-ƒ4v9~-v-~9y-~-u4ƒ9w-ƒ4y-~-y-~-w4ƒ-y-~-y-~-x-„)y-~-x-„)y-~-x)„-x-„)y-~-{-!y-~-{!-y-~-{!-z!„)|!!x-„){!-|!!x-„){!-{!-|!!x-„)|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!~}!€|!!~}!€|!!}!€}€!}!€}€!}€!~}€!~~}€!~}!€}€!|!!~|!!}€!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!{-!{!-|!!|!!|!!{!-|!!|!!{!-{!-|!!|!!|!!{!-|!!|!!|!!}!‚,|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!}!€|!!}€!}!€|!!}€!}€!}€!}€!}!€|!!}€!}€!}€!}€!|!!}€!}€!}€!}!€|!!|!!|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!{-!|!!|!!{-!{-!{!-}!‚,{-!{-!{-!{-!},‚!{,‚-{!-{-‚,{-!{-!{!-{!-},‚!{!-}!‚,|!!{-!|!!|!!|!!{!-|!!|!!|!!}!€|!!}!€}!€}!€}!€}!€}!€}€!}!€~}€!~}€!~}€!~~}!€~}!€}!€|!!}€!~}!€}!€|!!}!€|!!}€!}€!}!€}!€}!€}!€}!€}!€}!€}€!~}!€~}!€~~}!€}!€}!€}€!~~}!€~~~~}!€~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}€!~~~~~}!€}!€|!!}!€|!!}!€|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!|!!{-!|!!|!!|!!{-!|!!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€|!!}€!|!!}€!}€!}!€|!!}!€}€!~}!€~}!€}!€|!!}!€~}!€~}!€}!€~~}€!~~}€!}€!}€!}!€|!!|!!{-!{-!|!!{!-|!!{-!{-!{-‚,{-!{-‚,y-~-{-‚,{-‚,y-~-{,‚-{-‚,{-‚,y-~-y-~-~,…,y-~-{-6{,‚-{6-y-~-{6-{6-{-6{-‚,y-~-{6-{,‚-{,‚-{,‚-~,…,{,‚-{!-},‚!},‚!},‚!}!‚,|!!~ƒ,}€!~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-y-~-{!-y-~-{,‚-{!-y-~-{-!y-~-{!-{-!{!-{-!y-~-{!-|!!{!-{!-{-!{-!y-~-|!!x-„){!-{!-{-!{-!x-„)y-~-{-!{-!y-~-y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-t9-y-~-y-~-t9-t-9t-9y-~-t9-t9-y-~-t-9t-9y-~-t9-t-9y-~-v9~-y-~-q99v-~9t-9v-~9y-~-v-~9t-9y-~-y-~-s)†9x-„)y-~-y-~-y-~-x-„){-!y-~-x)„-x)„-{-!y-~-{!-x-„)y-~-{!-|!!{-!x)„-|!!{-!z)„!{-!|!!{-!{-!{!-|!!{-!|!!|!!{-!|!!|!!{!-{€-}€!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!|!!|!!}!€}!€|!!}€!~|!!}€!}€!}€!}€!}€!~}!€}€!~}€!~~}€!|!!~|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-{!-|!!|!!|!!{-!|!!|!!{!-{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€|!!~|!!}!€|!!}€!}!€}€!}!€|!!}!€}!€}!€}!€|!!~}!€|!!}!€}!€}€!}!€}!€}!€}€!|!!}!€|!!|!!}€!}€!|!!|!!|!!{!-},‚!},‚!}!‚,},‚!{-!{!-{!-{!-{!-{!-},‚!{-!|!!{!-}!‚,{!-|!!{-!},‚!|!!{!-|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!}!€|!!~}!€}!€}!€}!€~}!€}!€}€!}!€}€!~}€!}€!}€!}€!}€!}€!}!€}€!}€!}€!}€!~}!€}!€|!!}€!}€!}€!}€!}€!}€!~}!€}!€}€!~}!€}€!~}!€}!€~}!€~}€!}€!}€!}€!}€!~~~~}!€~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~}!€|!!}€!}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!{!-}€!|!!{!-{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!|!!}€!}€!}€!}!€|!!}€!|!!}€!}€!}€!}!€|!!~|!!}€!~~}€!~}€!}€!~~}!€}€!~}€!}!€}!€~~|!!}!€|!!|!!|!!{-!{-!{-!{-!{-!{-!{,‚-{,‚-{-‚,y-~-{,‚-{-!{-‚,y-~-{-‚,{!-{,‚-y-~-{,‚-{,‚-y-~-{-6{-6y-~-{6-{6-{6-{6-{-6{-6{-‚,{,‚-{,‚-}!‚,},‚!|!!|!!|!!|!!}€!|!!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-{-!y-~-y-~-y-~-{!-y-~-{-!{-!y-~-{!-{!-{!-y-~-{!-{!-{!-y-~-{-!{-!{!-{!-|!!y-~-|!!{-!x-„){!-{!-{!-{!-{!-{-!y-~-z!„)y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t9-y-~-y-~-y-~-y-~-t-9y-~-t-9t-9t-9y-~-t9-t-9y-~-t9-t-9t-9y-~-t-9v9~-t-9v-~9w-ƒ4y-~-w-ƒ4t-9y-~-y-~-y-~-x)„-y-~-x)„-y-~-y-~-y-~-{-!y-~-{!-x)„-{!-|!!y-~-{!-{!-|!!{-!|!!{-!z)„!{!-|!!{!-{-!z)„!|!!{!-z)„!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€}!€}€!}€!}€!}!€|!!}€!}€!~}€!}€!~}!€}!€}€!~}!€}!€}€!}!€}€!}€!}€!}!€}!€|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!{-!|!!|!!{!-},‚!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!}!€|!!~}!€}!€}!€}€!}!€|!!~}€!}!€}€!}!€}!€|!!}€!}!€}€!}€!}!€}!€}!€}€!}!€}!€}€!}!€}!€|!!|!!|!!|!!|!!{-!{!-}!‚,{-!{-!},‚!{-!{-!{-!{,‚-{-!{-!{-‚,{!-~,…,{!-}!‚,}!‚,|!!{-!{-!{-!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!~ƒ,}€!}€!}€!~}!€}€!~}!€}€!~~}€!~}!€}!€}!€}€!~}!€~}!€}!€}€!}!€}!€|!!}€!}€!}€!}!€}!€}€!}€!}€!~~~}!€}!€}!€}!€}!€~~}€!~}!€}!€}!€~~~~~}!€~~~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~}€!~~~~}!€}!€~}!€}€!}€!~}!€}€!}€!}!€}!€}!€}€!}!€|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!{-!{!-|!!|!!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}€!|!!}!€|!!|!!}€!}!€|!!}€!}!€|!!|!!}€!}!€}!€~}!€}€!}€!}€!~~~}!€}€!~}!€}!€~~}!€}!€}!€|!!|!!|!!{!-|!!|!!|!!{-!{-!{!-{!-{-!{-!{-!{-!{-‚,y-~-{-!y-~-~,…,y-~-{,‚-~,…6{-‚,{-‚,{6-{,‚-{6-{6-{-6{-‚,{-6{-‚,{-‚,y-~-{,‚-}!‚,{-!},‚!},‚!},‚!~,ƒ~,ƒ},‚!}€!}€!}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~y-~-{!-y-~-{-!{-!y-~-y-~-{!-{!-y-~-{!-{!-{-!{-!{!-{!-{!-{-!|!!{-!y-~-{!-{!-{!-|!!{-!{-!y-~-{!-{!-{!-{-!y-~-{!-{-!y-~-y-~-y-~-y-~-x)„-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-t9-y-~-t-9y-~-t-9y-~-t9-t-9y-~-t9-t-9y-~-v-~9t-9y-~-t-9v-~9w-ƒ4y-~-t-9y-~-y-~-w-ƒ4y-~-y-~-y-~-x-„)y-~-y-~-{!-{!-{!-x)„-{!-{-!y-~-x)„-z!„){!-z!„){-!x)„-|!!{!-{!-|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}!€|!!|!!|!!}!€}!€}!€}!€}!€}!€|!!~}!€}!€}€!~}!€}!€~}!€|!!}€!}!€}!€}€!|!!|!!}€!}€!|!!|!!|!!|!!{!-{!-|!!},‚!|!!{-!}!‚,|!!|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!}!€|!!}€!|!!|!!}€!}€!~}!€}!€|!!}€!~|!!}€!}€!~}€!}€!}€!}€!|!!}€!}!€}!€}!€}€!|!!}€!|!!}€!|!!|!!|!!{!-{!-|!!{-!{!-{!-{!-},‚!{-!{-!~,…,}!‚,{-!{-!{-!{-!{-‚,{!-|!!{-!|!!|!!},‚!{-!|!!|!!|!!{-!|!!},‚!|!!|!!}!€|!!}€!}!€}!€}€!~}!€}€!~}€!}€!}!€}€!}€!~}€!}!€}€!}€!}€!~}!€}!€}€!}!€}!€|!!}€!}!€}€!}€!}€!}€!~}!€}!€}!€~}€!~}!€}€!}€!}€!~}!€~~~}!€}!€}€!}€!~}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~~~}€!~~~}€!~}!€~}!€|!!}!€|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-€{!-|!!|!!{-!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!}€!}€!}€!}!€|!!|!!}€!}!€|!!~}!€|!!}€!}!€}€!~}!€~}€!~}!€~~~}!€}€!}€!}€!}€!~}€!}!€|!!|!!|!!|!!y-~-{!-|!!{-!{-!{-!{!-{!-{,‚-y-~-{,‚-{-!{-‚,{-‚,y-~-{-‚,y-~-{-‚,{-6{-6y-~-{6-{,‚-y-~-{6-{,‚-{,‚-{,‚-{6-{-‚,{-‚,~,…,{!-},‚!}!‚,|!!|!!}!€}!€}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~{!-y-~-{!-{-!y-~-{-!y-~-{!-y-~-{!-{!-{-!{!-{!-|!!{-!{-!{!-{!-|!!{-!{-!|!!{-!{-!{!-|!!|!!{!-|!!{-!{-!z)„!y-~-x)„-{!-{!-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-t9-y-~-o9„9y-~-y-~-t9-t-9y-~-t9-t-9y-~-t9-t9-t9-v-~9t-9t-9y-~-t-9t-9y-~-t-9y-~-y-~-y-~-s9†)y-~-y-~-{-!y-~-y-~-x-„)y-~-y-~-x)„-{!-{!-|!!x-„){-!{!-{!-|!!{-!{-!|!!{-!|!!{-!{-!{!-|!!|!!|!!|!!|!!{-!|!!}€!{€-|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}€!}€!}!€}!€|!!}€!}€!}€!~}!€|!!}€!~}!€}€!~}!€}€!}!€}€!~}!€|!!}€!}€!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!}!€|!!}€!}!€|!!}!€~|!!~|!!}€!}€!~}!€|!!}€!}€!~}!€|!!}€!}€!}€!~}!€}€!}€!}€!}€!}€!}€!}€!|!!}€!|!!},‚!|!!|!!{-‚,|!!},‚!},‚!{-!{-!{,‚-{!-{!-{-!{!-{!-{!-|!!},‚!}!‚,{-!},‚!}!‚,{!-|!!}!‚,{!-{!-|!!|!!|!!|!!|!!|!!}€!|!!}€!~|!!~}€!~}!€}€!~~}€!~~}€!}!€}€!}€!}€!}€!~|!!}€!}!€}€!}€!}€!}€!}€!}€!}€!}€!~}!€}€!}€!~}!€}!€}!€}€!~~~}!€}€!~~}!€~}€!~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~~~~~~}!€}€!~~~}€!~~~}!€|!!~|!!}€!|!!}€!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€|!!}!€|!!|!!|!!|!!}€!|!!}€!|!!}!€|!!}€!}!€}!€}!€}!€}!€}!€}€!}!€}!€}€!~}!€}!€}€!}€!}€!~~}!€|!!}€!}€!}€!|!!|!!{!-|!!|!!{!-|!!{!-|!!{-!{-‚,{-!{-!{-!{,‚-{-‚,{-‚,{,‚-{,‚-~,…,y-~-y-~-~,…,{-6{-6y-~-{6-{,‚-{6-{6-{,‚-{-!{,‚-}!‚,{-!~,…,|!!},‚!}!‚,|!!|!!|!!}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~{!-x-„)y-~-{!-{!-{!-{-!y-~-{!-{-!|!!{!-{!-{-!{-!{-!{!-|!!{-!{-!{-!{!-y-~-|!!{!-|!!{-!{-!{-!{-!x)„-|!!y-~-{!-{!-x-„){-!y-~-{!-y-~-{-!y-~-t-9y-~-t-9y-~-y-~-y-~-y-~-x-„)t9-o9„9t-9t-9t-9y-~-t9-t-9t-9y-~-v-~9t9-y-~-t9-t-9y-~-y-~-w-ƒ4y-~-w-ƒ4y-~-x)„-y-~-y-~-x-„)y-~-x-„){-!y-~-{-!{-!{-!y-~-|!!{-!{!-z!„){-!|!!{-!x)„-{!-{!-|!!{-!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}!€|!!|!!}€!}!€}!€}!€|!!~}€!~}€!}€!~|!!}€!}€!~}!€}!€}!€~|!!|!!|!!}€!|!!|!!|!!|!!},‚!|!!|!!{!-|!!}!‚,}!‚,|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!}!€|!!~|!!}€!|!!~|!!~}!€}!€}!€}!€~}!€}!€|!!~}!€}!€}!€}!€}!€}€!}€!}€!}!€|!!}€!|!!}€!~|!!|!!|!!}!‚,|!!|!!{-!{!-{!-},‚!{-‚,|!!{,‚-{-!{!-~,…,{!-|!!{-!{-!},‚!|!!{-!{!-|!!{-!|!!|!!|!!|!!{!-|!!}!‚,|!!|!!|!!}!€}!€}!€~}!€}!€}€!~}!€}€!~}€!}!€}!€~}€!~}!€}!€}!€}!€}!€}€!~|!!}€!}!€}€!|!!}€!~}!€|!!~~|!!}€!~~}€!~}€!~}!€}€!~}€!~}!€}!€}€!}€!}€!~}!€}€!~~}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~}!€}€!}€!~~}!€}€!}€!~~|!!~}!€}!€}!€|!!}€!|!!}€!|!!}€!|!!|!!|!!{-!|!!|!!|!!|!!|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}€!|!!~|!!}€!}!€|!!|!!|!!}€!}€!}!€|!!}€!~~|!!}€!}€!~~}!€~~~}!€~~}€!}!€|!!|!!|!!|!!{!-{!-|!!{!-|!!{!-|!!},‚!{-!{-‚,{,‚-{-‚,{,‚-{,‚-y-~-{,‚-y-~-{,‚-{,‚-{-6y-~-{,‚-{-6{-6{-‚,y-~-{,‚-{6-{,‚-{,‚-~,…,{-‚,{!-}!‚,|!!|!!}!€~,ƒ~ƒ,~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~y-~-{!-{!-y-~-{-!{-!{-!{-!{-!{!-y-~-{-!{-!{!-{!-{!-|!!{-!{-!|!!|!!{-!|!!|!!{-!{-!{-!|!!{!-{!-|!!{-!{-!{-!{-!{-!y-~-{!-y-~-y-~-y-~-y-~-x-„)y-~-y-~-y-~-y-~-t9-y-~-t-9y-~-y-~-t-9y-~-t9-t-9y-~-t-9y-~-t-9y-~-y-~-t9-t-9y-~-w4ƒ-r9†4y-~-w-ƒ4y-~-y-~-w4ƒ-x-„)x-„)y-~-y-~-y-~-x-„){!-{!-y-~-x)„-x-„)y-~-z)„!{-!{-!{!-z)„!{-!|!!|!!|!!{-!|!!{!-|!!|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!|!!}€!|!!}€!|!!}€!|!!~}€!~}!€|!!}€!}€!}€!~}!€}!€}!€}€!~~~|!!~}!€}!€}!€}!€}!€}€!|!!}!€|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€}!€}!€|!!}€!}!€}!€}!€}!€}€!}€!}€!~}!€|!!~}!€~}€!}€!}€!}€!~}!€|!!}€!~}!€}!€}!€}!€}€!|!!}€!|!!|!!|!!{!-}!‚,{!-},‚!{-!},‚!{-!{,‚-{-!~,…,{-!{!-}!‚,{!-}!‚,{!-|!!{,‚-|!!},‚!|!!},‚!{-!{-!|!!},‚!}!‚,|!!|!!|!!}!€|!!}€!}€!}€!}!€}!€}!€~}€!~}!€~}!€}€!}€!}!€}!€}!€}!€}!€}!€}€!}€!}!€|!!~}€!}€!}€!}€!}€!}!€}€!~}€!}€!~~|!!}€!~}!€}!€}€!~~}€!~}!€~}€!~~}!€~~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~~}!€}€!~~~~~}!€~~~~}!€}!€}€!}!€|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!}€!|!!}€!}!€|!!}!€|!!|!!|!!|!!}€!|!!}€!}€!}€!}€!~}!€|!!}€!~}€!}€!}€!}!€~}€!}€!}!€}!€}€!}€!}€!}!€}!€|!!|!!|!!{-!|!!{-!|!!{-!|!!},‚!{-!{-!{,‚-{-‚,{!-{-‚,y-~-{,‚-{,‚-{6-{,‚-{-‚,{-‚,{-6{-6{-6y-~-{,‚-{-6{-‚,{-‚,{-‚,~,…,y-~-}!‚,|!!},‚!}!‚,|!!},‚!}€!|!!}€!}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~y-~-{!-y-~-{!-{!-{!-{!-{!-{!-{-!|!!{!-{!-|!!|!!|!!{-!|!!{!-|!!{!-|!!{-!{-!|!!|!!|!!{-!|!!|!!{-!{!-{-!|!!{-!y-~-{!-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-s)†9{-!y-~-y-~-y-~-t-9t-9y-~-t-9t-9y-~-t9-y-~-w4ƒ-t-9t-9y-~-t9-t9-t-9y-~-y-~-t9-t9-y-~-w4ƒ-y-~-y-~-y-~-x-„)x-„){!-x)„-y-~-x-„){!-{-!{-!{!-{!-{!-{!-|!!{-!{!-{!-{!-|!!|!!x)„-}€!{!-|!!|!!|!!{!-|!!|!!{!-|!!|!!|!!{!-|!!|!!|!!|!!}!€|!!|!!|!!|!!}€!|!!}€!|!!}!€}!€|!!~}!€|!!}!€}!€~}!€}!€}!€|!!~|!!~}€!~}!€}€!}!€|!!}!€}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€}!€|!!}€!}!€}!€}€!}€!}€!}€!~}!€}!€}!€}€!~}€!}€!}€!}€!}€!~}!€|!!}€!}€!}€!}€!}€!}!€|!!}€!}!€}!€|!!|!!|!!},‚!}!‚,{!-}!‚,{!-},‚!y-~-{,‚-{!-{,‚-|!!{-‚,{-!{-!{-!{-!{-!{!-|!!},‚!{-!}!‚,|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!}€!|!!}€!~}€!~~}!€~}€!~}!€}!€}€!~}€!~}!€}!€}€!}€!~}€!}€!}!€|!!}€!}€!}€!}€!}€!}€!|!!~}!€}€!~}!€~~~}!€~~}€!~~~~}!€~}€!~~|!!}€!}!€}!€~}!€~~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}!€~}€!~~~}!€~~~~}!€}€!}€!}€!~}!€}!€|!!}!€}!€}!€|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!|!!|!!|!!}!€}!€|!!}€!}!€|!!}!€|!!|!!|!!|!!}€!}!€}!€}!€|!!}€!}€!~|!!}€!}€!~}!€}€!}€!~~~~}!€~~}€!}€!|!!|!!|!!|!!{-!|!!{-!{!-{!-|!!{-!{-‚,},‚!{-‚,{-‚,y-~-{,‚-{,‚-{-‚,{-‚,{6-{,‚-{-6y-~-{,‚-y-~-{6-{6-{,‚-{,‚-{,‚-{-‚,{-‚,{-!{-‚,}!‚,}!‚,|!!|!!|!!|!!}€!}€!~~}!€~~~~~~~~~~~~~~~~~~~~~~~~{-!y-~-|!!{-!{-!{-!{-!{!-{!-|!!{-!{-!|!!{-!{-!{-!{!-{!-|!!{-!{-!{-!|!!|!!{!-|!!{-!|!!{-!{!-|!!{-!{!-{!-{!-{!-{!-{!-x)„-y-~-y-~-x-„)y-~-y-~-t-9y-~-t-9t-9y-~-t9-y-~-y-~-t-9y-~-y-~-t9-t9-y-~-t-9y-~-y-~-t9-w-ƒ4y-~-t9-y-~-t9-y-~-y-~-y-~-y-~-x)„-y-~-y-~-x-„)y-~-y-~-y-~-x)„-{!-{-!x-„){!-{-!{-!{-!{-!{-!{-!x-„)|!!z)„!|!!{-!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€}!€|!!}€!|!!}€!|!!~}!€}!€|!!}€!~}!€}!€~}!€}!€}€!}!€}€!}€!}!€|!!}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€|!!}!€|!!}!€}€!}€!}!€}!€|!!}€!}€!~}!€}!€}!€}€!~~}€!}€!~}!€}!€}€!}€!}!€}!€}!€}!€|!!~}€!}€!}€!}!€|!!|!!|!!{!-|!!{-!|!!{!-|!!|!!}!‚,|!!},‚!{-!|!!{-!},‚!}!‚,|!!{-!|!!{-!}!‚,|!!{-!|!!}!‚,|!!{-!|!!{-!}!‚,|!!|!!|!!|!!}€!|!!}!€}!€}€!}€!}!€}!€}€!~}€!~}€!~}!€}!€}€!}€!}€!}!€}!€}!€}!€|!!}€!}!€|!!}€!}€!~~}!€}!€}!€}!€}!€}!€}€!}€!~~}€!~~}!€~}!€~}€!~~}€!~~~~~~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~}!€}€!}€!~~~~~}€!}€!}€!}!€}!€|!!}!€}!€|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!{-!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!}€!|!!}€!}!€|!!}!€|!!}€!}€!}€!}€!|!!}€!|!!}€!}€!}€!~|!!}€!}€!}€!~}€!}€!}!€}!€|!!}€!~}!€~|!!}€!}€!}!€|!!|!!|!!|!!|!!|!!{!-|!!{!-{!-|!!{-!y-~-y-~-{,‚-{,‚-{-‚,{-‚,y-~-{-‚,{-6y-~-{-6{-6{-6{-‚,{-‚,{6-{,‚-{-‚,y-~-{,‚-}!‚,{!-}!‚,|!!},‚!}!€~,ƒ}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~z!„){-!{-!y-~-{!-{!-{!-{!-{!-{!-|!!|!!{-!{!-|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!{!-|!!{!-|!!{-!y-~-{!-y-~-y-~-{-!{-!y-~-y-~-y-~-y-~-y-~-y-~-t9-y-~-t-9y-~-t9-y-~-y-~-t-9t-9y-~-y-~-t9-t9-w4ƒ-t9-y-~-t9-y-~-y-~-t9-y-~-s9†)y-~-s)†9y-~-y-~-x)„-x)„-y-~-y-~-{!-y-~-{!-{-!y-~-{!-{-!x-„)|!!{-!z)„!z)„!z!„)|!!{-!|!!{-!|!!{-!{!-}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!}€!|!!}€!|!!|!!|!!}€!|!!|!!}!€|!!~}!€}€!}€!}€!}€!~}!€|!!}!€|!!}€!~}!€}!€}!€}!€}!€~}!€}!€~}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!|!!}!€}!€|!!}€!}€!}€!~}€!~}!€}!€}€!}€!~|!!}€!}€!~|!!~}!€}€!}€!}€!}€!~}!€~|!!}€!~|!!}€!~|!!}€!|!!|!!}!‚,|!!{!-{!-}!‚,{-!{,‚-{-‚,{,‚-{,‚-{,‚-}!‚,{-!},‚!{-!},‚!{-!},‚!{-!}!‚,|!!{-!{!-},‚!{-!|!!|!!{-!|!!|!!|!!|!!}!€}!€}!€}!€}!€}!€}!€~~}!€}!€}€!~}!€}!€~}€!~}!€}!€}!€}!€|!!}€!}€!~}!€}!€}!€}!€}!€|!!}€!~}€!~}!€}€!~~~~}!€}!€~~~}!€~}!€~}€!~~~~}€!~~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~}!€~~~~~~~~~~}€!~~}€!~}!€}€!}!€}!€}!€}€!}€!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!}€!|!!}!€}!€}!€|!!}!€|!!}!€|!!}!€|!!}€!|!!}!€|!!}!€}!€|!!|!!}€!}!€}!€}!€|!!}€!}€!}!€|!!}€!}€!~}!€}!€}!€|!!~|!!}€!}€!|!!|!!|!!{-!{!-|!!|!!{-!},‚!|!!y-~-{!-},‚!{-!y-~-y-~-{,‚-y-~-{,‚-{,‚-~6…,~,…6y-~-y-~-{,‚-{6-y-~-{-‚,y-~-~,…,{-‚,{!-{,‚-},‚!},‚!},‚!|!!},‚!}€!|!!}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~{!-{!-{!-|!!{-!{-!{-!{-!{!-|!!{!-|!!{!-|!!{!-|!!|!!{!-|!!|!!{-!|!!{-!|!!{-!|!!|!!|!!|!!{-!{!-|!!{!-{!-z!„){-!z)„!x-„){!-y-~-y-~-{!-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t9-t9-y-~-t-9t-9y-~-y-~-t-9y-~-t9-t-9y-~-w-ƒ4t-9y-~-y-~-t-9y-~-x-„)y-~-y-~-y-~-{-!x-„)y-~-{!-{-!x-„){-!y-~-|!!{-!{!-{!-{!-{!-|!!{-!|!!{-!|!!{-!|!!|!!|!!|!!{-!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}€!}!€}!€|!!}€!}!€|!!}!€|!!~}!€}€!|!!~~}!€~|!!~}!€}€!}!€}€!}!€|!!}€!|!!|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}€!|!!}!€}!€|!!}€!}€!}!€}!€}!€~}!€}€!~~~}€!}!€~~}€!~}!€}!€}€!}€!}€!}€!~~}!€|!!}€!|!!}!€|!!|!!|!!},‚!|!!{-!}!‚,{-!},‚!{-!|!!{-!{!-|!!y-~-}!‚,{!-}!‚,|!!},‚!}!‚,}!‚,|!!{-!}!‚,|!!|!!|!!|!!},‚!|!!|!!|!!|!!}€!|!!}!€|!!}€!~~}€!~}!€~}€!~|!!~}€!~}!€}!€|!!}€!}€!~}!€}!€}!€|!!}!€}!€}!€}!€|!!~}€!~}!€}!€~}!€}€!~~~~~}€!}€!~~~~~~~~}!€}€!~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!}€!~~}!€~~~|!!~}!€}!€~}€!}€!}€!}!€}!€|!!}€!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€}!€|!!}!€|!!|!!|!!|!!|!!}!€|!!~}!€|!!}€!}€!}€!}!€}€!}!€}!€}!€}!€}!€}!€}!€}!€}€!~~}!€~}€!|!!}€!|!!|!!|!!|!!{!-|!!|!!|!!{-‚,|!!{!-{!-}!‚,{,‚-{,‚-{,‚-{-6{,‚-y-~-y-~-y-~-{6-{6-}6‚!}6‚!}6‚!{6-{-‚,y-~-y-~-{,‚-{,‚-}!‚,}!‚,~ƒ,}€!}€!|!!~ƒ,}€!~}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~{!-|!!{-!{-!{-!{-!|!!{!-|!!{!-|!!{!-|!!|!!|!!{!-|!!{-!|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!{-!{!-{-!{-!{!-y-~-{!-{-!x-„)y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-t9-y-~-y-~-t9-y-~-y-~-t-9y-~-t9-y-~-t9-t9-t-9y-~-x-„)t-9y-~-y-~-y-~-y-~-x-„)x-„)y-~-x-„)x-„)y-~-x)„-x-„){-!x-„){-!x)„-z!„){-!x)„-|!!{-!{-!{!-|!!z!„)|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!}!€|!!|!!}!€~|!!}€!}€!}€!~}!€|!!~~|!!}€!~|!!~}!€}!€~|!!}!€}€!~}!€|!!}€!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!~}!€}!€}!€}!€}!€}!€|!!}€!}€!}€!}!€}!€~}!€}!€}!€}!€}!€}€!~}!€}!€}!€}€!~}!€}€!}€!}!€}!€}!€}!€}€!}€!}€!}€!}€!}€!|!!|!!},‚!}!‚,|!!{-!{-!{,‚-{,‚-{!-},‚!},‚!},‚!{!-}!‚,{!-{!-|!!{-!|!!{-!|!!|!!{-!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€|!!~}!€~}!€~}€!}€!~}€!}€!~}€!~}!€~|!!}!€|!!}€!}!€}!€}!€}!€|!!}€!}€!}!€}!€~}€!}!€~}!€}!€}!€}!€~}!€}!€~~~~~}€!~}!€}€!~~}!€}!€~}€!~~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~}€!~}!€~~~~~~}!€~~}!€}€!~~~}€!}€!}!€}!€}!€}!€|!!}!€}!€|!!|!!}!€}!€|!!|!!|!!|!!}!€{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!|!!|!!}€!|!!}€!|!!}€!}€!|!!}!€|!!}!€|!!|!!|!!|!!}!€|!!|!!|!!}!€|!!|!!|!!}€!|!!|!!|!!}!€}!€}!€}!€}€!}€!~}€!}€!}!€}€!~}!€|!!|!!|!!|!!|!!|!!{!-{!-{!-|!!y-~-},‚!{-‚,y-~-y-~-{-‚,{-‚,{-‚,{-‚,{6-{-6{,‚-y-~-{,‚-{-6y-~-{-6{-‚,y-~-~,…,}!‚,{!-},‚!}!‚,|!!},‚!}!‚,}!‚,~}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~y-~-{!-{!-{!-{!-|!!{-!{-!{!-|!!{!-|!!{!-{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!{-!{-!{-!{-!y-~-y-~-y-~-y-~-{!-y-~-y-~-y-~-y-~-t9-y-~-y-~-y-~-y-~-t9-y-~-y-~-w4ƒ-t-9y-~-t9-y-~-t9-y-~-y-~-t9-y-~-t9-y-~-t-9x)„-y-~-t-9y-~-y-~-x-„)y-~-y-~-{!-{!-{-!y-~-{!-{!-{-!{-!{!-|!!{-!|!!{!-|!!{!-{!-|!!{-!|!!{€-}€!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!}!€|!!}€!}!€|!!|!!}€!}€!}€!}!€}!€|!!~}!€|!!~}€!|!!~}!€}€!}€!}!€|!!~}!€}!€}!€}!€}!€}€!}€!}!€|!!}!‚,~ƒ,}€!|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€}!€|!!~}!€}€!~}€!~}!€}!€~}!€~~~}!€~~}!€}!€}!€~}!€~|!!~}€!}€!}!€}€!~|!!}!€|!!|!!|!!|!!{-!{-!}!‚,{!-}!‚,}!‚,{!-{!-{,‚-|!!{-!},‚!{-!|!!{-!}!‚,}!‚,{!-{!-}!‚,|!!}!‚,{!-|!!|!!}!‚,|!!}!‚,|!!|!!|!!}€!}€!|!!}!€~}!€}€!}€!~|!!}€!~}!€}!€~}€!}€!}€!}€!}€!}€!}€!}€!~}€!}€!}€!}€!~}!€~}!€}!€}!€~}!€}!€~}€!~~}!€~~~~}!€~~}€!~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~~}€!}€!~}€!~~~}!€~}!€~}€!}€!}€!~}€!}€!}€!|!!}€!}€!|!!|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€{-€}€!}€!|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!}€!}€!|!!}!€}!€}!€|!!}€!}€!}€!}!€}€!}€!~}!€~}!€|!!}€!|!!|!!|!!{!-|!!{!-|!!|!!|!!},‚!},‚!}!‚,{!-|!!~,…,y-~-{,‚-{,‚-y-~-{,‚-{,‚-{-‚,~6…,{-6{,‚-~,…6y-~-{,‚-~,…,{,‚-{,‚-~,…,}!‚,},‚!},‚!~ƒ,}!€~},‚!}!€~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~|!!{-!{!-|!!{-!{-!{-!|!!{-!{!-|!!|!!|!!|!!{-!{-!|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!{!-{-!{!-{-!x-„)y-~-{-!y-~-y-~-x)„-y-~-x-„)y-~-y-~-x-„)y-~-x-„)t9-y-~-y-~-y-~-t9-y-~-y-~-y-~-t-9y-~-t9-t-9w-ƒ4y-~-x)„-t-9y-~-y-~-w-ƒ4w-ƒ4x-„)y-~-x)„-y-~-y-~-{!-{!-y-~-y-~-{!-x)„-z!„){-!{!-z)„!{-!{-!z)„!{-!z)„!{!-|!!|!!|!!|!!|!!|!!{-€{-!{-!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!}!€|!!}€!}!€}€!}!€|!!}€!}€!}!€}!€}€!}€!~}€!}!€}€!~|!!~}!€~}€!}!€}!€|!!}€!}€!|!!|!!}!€|!!}!€}!€|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!}!€}!€}!€|!!}€!}€!}€!}€!}!€}!€}€!|!!}€!}!€}!€}!€~}!€~}!€~|!!}€!}€!~~~}€!~}!€}€!}!€}€!}!€}!€}€!}!€|!!~|!!|!!~ƒ,}€!},‚!|!!{!-|!!{-!{!-{!-},‚!{-!{-!{-!{!-|!!}!‚,{-!{!-|!!{-!|!!},‚!|!!},‚!{-!|!!|!!{!-|!!|!!|!!}!‚,|!!|!!|!!|!!~}€!|!!}!€~}!€~|!!~~}!€}!€}!€}!€}€!}€!}€!}!€}€!}€!}!€}€!}!€}!€}!€}!€}€!}!€}!€}!€}!€}!€}€!~~}!€~~}€!~~}€!~~~}!€|!!~}€!}€!~~}€!~~~~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}!€}!€~~~}€!~~~}!€~~~~~}!€}!€|!!}!€}!€}€!}€!}!€}€!|!!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!|!!}!€|!!}€!|!!}€!}€!|!!|!!}€!|!!}!€|!!}!€}!€}!€|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!~}!€}!€}!€}!€}€!~}!€}€!~}!€}!€|!!|!!|!!{!-|!!|!!|!!{-!{!-}!‚,{-‚,{!-{,‚-{,‚-{-!{-‚,y-~-{-‚,{-‚,{6-{,‚-y-~-{,‚-y-~-{-‚,{-‚,y-~-{,‚-{-‚,{-‚,{!-},‚!},‚!}!‚,|!!}!‚,|!!~}!€~,ƒ}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~{-!{-!{-!{!-{!-|!!|!!{-!{-!|!!{!-{-!{!-|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!{!-{!-z!„){-!y-~-{!-y-~-{!-y-~-y-~-t-9y-~-y-~-t9-y-~-y-~-y-~-t-9y-~-t9-t9-t9-y-~-y-~-y-~-y-~-t9-y-~-t9-w4ƒ-y-~-w4ƒ-y-~-y-~-y-~-y-~-y-~-y-~-{!-x-„)y-~-{!-x)„-{-!{-!y-~-|!!{-!y-~-{!-|!!{-!{!-{!-z!„)|!!{!-|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}€!}!€}!€}!€~,ƒ}€!|!!}€!}€!|!!}€!}€!}!€}!€|!!}€!}!€~}!€}!€~}!€}€!}!€}!€}€!}€!}€!}€!}€!}€!}€!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!|!!}!€|!!}€!}!€|!!|!!}€!}€!}!€|!!}€!~}!€}!€~~~}€!~}!€~~}€!~}€!~~}!€}!€}!€}€!}€!}€!~}!€}€!~|!!}€!~}!€|!!}€!}€!|!!}!‚,|!!{-!},‚!{-!}!‚,{!-}!‚,{!-}!‚,{!-{!-}!‚,}!‚,{-!}!‚,}!‚,{!-|!!},‚!|!!{-!|!!|!!|!!},‚!},‚!|!!|!!|!!|!!|!!}€!|!!}€!|!!}!€}!€}€!}€!}€!~~}€!|!!~~}€!}€!|!!}€!}€!|!!}€!}!€}€!}€!~}!€}!€}!€}!€}!€}€!~}!€}€!~}!€}!€}€!~}!€~~}!€~~~~~~~~~}€!~~~~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~}!€}!€~~~~~}€!~~}!€~}!€~}!€}!€~~}!€~}€!~}!€}!€|!!}!€|!!}€!}!€}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!|!!|!!}€!}!€}!€|!!|!!|!!|!!|!!}!€}!€|!!}!€|!!}!€}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!|!!}€!|!!~|!!}€!}€!~}€!}!€|!!~}!€}!€|!!|!!}€!|!!|!!|!!|!!{!-{!-|!!|!!{-!|!!{-!{-‚,{-!~,…,y-~-~,…,{-‚,y-~-y-~-{-6{-6{,‚-~,…,{-6{,‚-{,‚-{-‚,y-~-}!‚,{-!},‚!|!!}!‚,|!!}!€|!!~ƒ,}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~{!-|!!{-!{-!|!!{!-{-!|!!|!!{-!|!!|!!|!!{!-|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!{-!z)„!{-!{-!y-~-y-~-y-~-y-~-{-!t9-y-~-y-~-{-!y-~-y-~-y-~-y-~-t-9y-~-t9-y-~-t-9y-~-y-~-t9-t-9s)†9y-~-y-~-t9-y-~-y-~-x-„)y-~-w4ƒ-y-~-t-9x)„-x-„)y-~-y-~-y-~-{!-x)„-{!-{!-z)„!x-„){-!{-!z!„)z!„){!-|!!{-!|!!|!!{!-|!!{!-{€-{!-|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!}!€|!!}€!|!!|!!}€!}!€}!€}€!}!€}!€|!!~}€!}€!}€!~}!€|!!}€!}€!}!€|!!~}!€}€!}!€~}!€}!€}!€}!€|!!}€!|!!|!!}!€|!!}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!}!€|!!|!!|!!}€!}€!}!€|!!|!!}!€}!€}!€}!€}!€}!€}!€}!€|!!}€!}!€|!!}€!|!!~}!€~~}!€}€!}€!}€!~}!€}€!}€!}€!}€!}€!}€!}€!~}!€}€!}€!~}!€}!€~}!€|!!}€!|!!|!!|!!|!!},‚!{!-{!-}!‚,{!-{!-{!-~,…,}!‚,{!-},‚!{-!},‚!{-!|!!{!-}!‚,|!!{-!|!!{-!{-!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!~}!€}€!~}!€~}!€~|!!~}!€~}!€}!€}€!}€!~|!!}€!}€!}€!}€!~}!€}!€}€!}!€}!€}€!~}!€}€!~}!€}!€~~~~~}!€~~~}!€}!€}!€~}€!}€!}€!~~~~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€}!€~~~~}!€~}€!~~}€!~~}!€~}!€~~}!€}!€}€!~}€!}€!}€!}€!}!€}€!}€!|!!}€!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}!€|!!|!!|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}€!}!€}!€|!!}€!}€!~|!!}€!}€!}!€|!!|!!|!!|!!|!!}!€|!!|!!{!-{!-}!‚,{!-|!!{-!{-‚,y-~-{,‚-y-~-{,‚-{-‚,}!‚6y-~-{,‚-{-‚,{6-}6‚!y-~-{-‚,~,…,|!!{,‚-},‚!},‚!},‚!|!!|!!}!€}!€}!€}!€}!€}!€~}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~|!!{-!{-!|!!y-~-|!!|!!{-!|!!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!{-!{-!{-!{-!{!-{!-{!-y-~-x)„-y-~-y-~-y-~-t9-y-~-y-~-y-~-y-~-t9-y-~-t9-y-~-y-~-t-9s)†9y-~-w-ƒ4y-~-w4ƒ-w-ƒ4y-~-y-~-y-~-t9-y-~-y-~-x)„-y-~-y-~-x)„-x)„-x-„)y-~-x-„){-!{-!{-!{-!{!-z!„){!-{-!x)„-{!-|!!{!-{!-|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€}€!|!!}€!}€!~}!€|!!~|!!|!!}€!~}€!}€!~}!€}€!}€!~}€!}€!~}!€|!!}€!}€!}€!}€!}€!}!€|!!~|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!|!!}€!}!€}!€|!!|!!}€!|!!}€!}!€|!!}€!}€!~}!€~~~}!€~}!€}€!~}!€~~}!€}€!~}!€~~}!€}€!~}€!}€!~}!€}€!}€!~|!!}€!}€!|!!}!€},‚!|!!{!-{!-|!!},‚!{-!},‚!{-!},‚!{!-{!-|!!|!!{-!|!!}!‚,}!‚,}!‚,|!!{-!}!‚,{-!|!!{!-}!‚,|!!},‚!|!!|!!|!!|!!|!!}!€|!!}€!}!€|!!}€!}€!}€!}€!~}!€}!€|!!~|!!}€!}€!~}!€}!€|!!}€!}€!~}!€}!€~|!!}€!~}!€~}€!~~}!€}!€}€!~~}!€}!€~}€!~~}€!~~~~~~}!€~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~~}€!~}!€~~~~}!€~}!€}€!~~~~}!€~}€!~}€!}€!}€!~}!€}!€|!!}!€}€!}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!|!!|!!}€!|!!}€!|!!}€!}!€}!€}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}€!}!€}!€|!!~}!€~}!€~}!€}!€}€!}€!|!!|!!|!!|!!{!-|!!},‚!|!!|!!{!-|!!{-‚,{!-{!-{,‚-{-!y-~-{6-{,‚-{6-y-~-{-6{,‚-y-~-{-‚,{-‚,y-~-y-~-~,…,{-!}!‚,|!!}!‚,~ƒ,~ƒ,}!‚,}€!|!!~}!€~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!|!!{-!|!!{!-|!!|!!{!-|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!{-!{-!{-!y-~-{-!y-~-{!-x-„)y-~-y-~-{-!y-~-x)„-y-~-x-„)t9-y-~-s)†9x)„-t9-t-9t-9y-~-t9-t-9y-~-t-9y-~-y-~-w-ƒ4y-~-y-~-y-~-x-„)w-ƒ4y-~-y-~-x)„-y-~-{-!y-~-{!-|!!y-~-x)„-{!-{!-x-„){-!{-!{-!{-!z)„!{-!z)„!|!!|!!{-!|!!|!!|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!|!!}€!}€!|!!}€!}€!}!€|!!}€!}!€|!!}€!~}!€|!!}€!}!€}!€|!!}€!~}!€}!€|!!}€!}!€~}!€}!€}!€|!!}€!}!€}!€|!!}!€|!!|!!}!€|!!}€!}!€}!€|!!|!!|!!}€!|!!}!€|!!|!!}!€|!!|!!|!!|!!}€!}€!}!€}!€|!!}€!}€!}€!}!€|!!}€!}!€}!€}!€}!€}!€~}!€}!€}€!~}!€~}€!~~}!€}!€}€!~}!€}!€}€!}€!}€!~~}!€}!€|!!}€!}€!|!!|!!}!‚,|!!}!‚,{!-}!‚,}!‚,{!-|!!{-‚,{-!{-‚,{!-}!‚,{!-},‚!{-!{-!{!-{!-|!!{-!|!!},‚!|!!|!!|!!|!!{-!|!!{-!|!!|!!}!‚,|!!|!!|!!~}!€}!€~}!€}€!~}!€~}!€~}!€}!€}!€}€!}€!~}!€}€!|!!}€!}€!}€!~}!€|!!}€!~}!€}!€}!€~}€!~~}!€~~}!€~~~}!€}€!}€!~}€!~}€!~~~~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~}!€~~}€!~}€!~~~}!€}€!~}€!~~}!€~}!€~}€!~}€!~|!!}€!}!€}!€|!!|!!}€!}!€}!€}!€}!€|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{-€{-€{-€|!!|!!}€!}€!}€!}€!~|!!}€!~}!€}!€}!€}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!},‚!},‚!},‚!}!‚,{-!{-!{,‚-{!-{,‚-},‚!{,‚-{-6{!-{-‚,{!-{-‚,{-‚,{!-{-‚,},‚!{,‚-}!‚,{-!},‚!},‚!~,ƒ~,ƒ~,ƒ}!€|!!}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~|!!{-!{-!{!-{!-|!!{-!{-!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-{!-{!-{!-{!-{!-{-!y-~-y-~-{!-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-t9-y-~-t9-t-9y-~-t-9y-~-x)„-y-~-y-~-y-~-x)„-y-~-x)„-y-~-x)„-x-„)y-~-x)„-{!-z!„){-!{!-{!-|!!{!-|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}€!|!!|!!}€!}€!}€!}!€}!€}!€}€!}!€}!€}!€|!!}€!}!€}€!}€!}€!~}!€}!€|!!~}€!~}!€|!!~|!!}€!}€!}!€|!!}€!}€!}!€}€!}€!|!!|!!|!!|!!|!!}!€}€!|!!}!€|!!|!!}!€|!!}!€}!€}!€|!!}€!|!!~|!!}!€|!!}€!}€!}€!~|!!~|!!}€!~}€!}€!~}€!~~}!€}!€}!€}€!~}€!~|!!}€!}€!}!€|!!~}!€}!€}!€|!!~}€!}€!|!!~ƒ,|!!|!!{-!{-!},‚!{!-{!-{!-}!‚,{-!},‚!|!!},‚!},‚!{-!}!‚,}!‚,{!-|!!},‚!},‚!},‚!{!-|!!},‚!|!!{!-|!!|!!|!!|!!}!‚,|!!|!!|!!|!!}€!}€!~}!€}!€}€!~}€!}!€|!!~}!€}!€}!€|!!}€!}€!~}!€}!€~}!€}€!}€!}€!}€!~}!€}!€}!€}€!~}€!~}€!~~~}!€}€!~~}!€}!€~~}€!~~}!€~}€!~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~}!€~~~~}€!~~}!€~~~~~~}!€~}!€~}€!~~}!€}!€~}!€}€!}!€}€!}€!}€!}€!|!!|!!}€!|!!}€!}!€}!€}!€|!!|!!}€!|!!|!!|!!|!!~}!€}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}!€|!!|!!|!!{€-{€-{€-{€-|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}€!|!!|!!}€!}!€|!!~}!€|!!~}!€|!!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!{-!}!‚,}!‚,{!-{,‚-~,…,{-‚,{-!{,‚-{,‚-{,‚-{-‚,{-‚,{-!{,‚-{,‚-{,‚-}!‚,{-!},‚!},‚!|!!|!!|!!~,ƒ}!‚,}€!~ƒ,}€!}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~{!-|!!{!-|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!|!!{-!{-!{-!x-„)y-~-x)„-y-~-{!-y-~-y-~-y-~-y-~-y-~-x)„-y-~-y-~-y-~-y-~-t-9t-9t-9t-9t-9y-~-y-~-y-~-y-~-x-„)t-9y-~-x)„-y-~-x)„-y-~-y-~-y-~-y-~-y-~-x)„-y-~-{!-{!-{!-x-„){-!{-!{-!{!-x)„-|!!{!-|!!{!-|!!z)„!{-!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!}!€|!!}!€}!€}€!}€!|!!}€!}€!}€!}!€}€!~}!€}!€|!!~|!!}!€}!€~}€!}!€}!€}!€}!€|!!~}!€}!€}!€|!!}!€|!!|!!|!!}€!}€!|!!}€!|!!|!!|!!|!!}!€}!€|!!|!!}€!|!!}€!|!!|!!}!€}!€}€!|!!}!€}!€}!€|!!}€!~}!€}€!}!€}!€~~}!€~}!€~}€!}!€}!€}!€~~}€!}€!}€!~~}!€}€!}€!}!€}!€}€!~}€!~|!!|!!}!€|!!|!!|!!},‚!|!!{-‚,|!!}!‚,}!‚,{!-}!‚,{!-},‚!{!-|!!{!-|!!},‚!},‚!{-!{-!|!!{!-|!!{!-|!!}!‚,|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!~}€!}!€}!€~~}!€}€!}€!}€!}€!~~}!€|!!}€!~|!!}€!|!!}€!}!€~}!€}!€~}!€}€!}€!}€!}€!~}€!}€!}€!~~}€!}€!}€!~}!€~~~~~}!€~}€!~}!€~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~}!€~~}€!~}€!~~}€!~~}€!~~~}€!~~}!€}!€}€!~~}!€}€!}€!~|!!}€!}€!|!!~|!!}!€|!!}€!}!€}!€|!!|!!}!€{-€|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!}€!}€!}€!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!}€!}!€}!€}!€}!€}!€}€!~}!€}!€~}!€}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!},‚!{-!{!-{-‚,}!‚,{!-y-~-{,‚-{,‚-{,‚-{,‚-{,‚-{!-{,‚-{-‚,},‚!{-‚,}!‚,|!!~,…,}!‚,}!‚,|!!|!!}€!}!€}!€}€!~~~~~}€!~~~~~~~~~~~~~~~~~~~~~~~~|!!{!-|!!|!!{!-{!-|!!|!!{-!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!}€!|!!|!!|!!|!!{!-|!!{-!{-!{-!y-~-x)„-{!-{-!{-!y-~-y-~-{!-y-~-y-~-{-!y-~-y-~-y-~-y-~-x)„-t9-y-~-w-ƒ4y-~-x-„)y-~-y-~-t9-t9-w-ƒ4t-9y-~-w4ƒ-y-~-y-~-t9-x-„)y-~-x-„)y-~-x)„-y-~-|!!x-„){-!{-!{-!{-!{!-z)„!{-!{!-{!-z)„!{-!{-!|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!}€!}!€}!€|!!}!€|!!}€!}€!}€!}!€|!!}€!}€!}€!|!!~|!!~}€!~}€!}€!~}!€}!€}!€}€!}€!}€!}€!|!!}€!|!!|!!}€!}€!|!!|!!}!€|!!}!€}€!}!€|!!}€!|!!}!€}!€|!!}€!}€!}!€|!!}€!|!!}!€}!€}!€|!!}€!}€!}€!|!!}!€}!€}!€}!€}€!}!€~}!€}!€}!€}!€~~~}€!~}!€}€!~}€!}€!}€!~}€!~}€!}!€|!!}€!|!!}!€}!€|!!|!!|!!|!!|!!{-!|!!{-!{-!{-!}!‚,{!-{!-{!-}!‚,{!-~,…,{!-{!-}!‚,|!!},‚!},‚!},‚!}!‚,|!!}!‚,|!!{-!|!!|!!|!!},‚!}!‚,|!!|!!|!!|!!}€!|!!}!€}!€|!!~}€!}€!}€!~}!€~}!€}!€}€!|!!}€!}€!~|!!~}!€~}!€~}!€}!€~}€!}€!~}€!~~~}€!~~~}!€~~~}€!~}!€}!€}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~}€!}€!~}€!~}€!~~~}€!~}!€~}!€}!€~~}€!~~}!€}!€}€!~~|!!}€!~}!€}!€}€!}!€|!!}€!}!€|!!|!!|!!}€!|!!}€!|!!|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!~}!€}!€}!€}!€}!€}€!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!~,…,},‚!}!‚,{!-|!!{,‚-}!‚,{-!{-‚,{-!{-!{-‚,{-!}!‚,}!‚,{-!{,‚-}!‚,|!!|!!|!!}!‚,~ƒ,}€!~ƒ,~ƒ,~}€!}!€}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~{!-|!!{!-|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!{-!{!-|!!{-!y-~-{!-x-„)y-~-{!-y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-w4ƒ-y-~-t9-t-9y-~-t9-w-ƒ4y-~-y-~-y-~-y-~-y-~-t-9y-~-y-~-t-9x-„)y-~-{-!y-~-{-!y-~-y-~-x-„){-!x)„-{!-{-!x-„){!-z)„!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!}!€}!€}!€}!€}!€}!€}€!}€!}€!}!€}€!~}!€}!€|!!~}!€}!€~|!!~}!€}!€}€!}€!}€!}€!}€!~}!€}!€|!!|!!}€!}€!|!!|!!|!!|!!}€!}!€|!!}€!}€!|!!}€!}€!|!!~}!€|!!}€!|!!|!!}€!}€!}€!}!€}!€~}!€}!€}€!~}!€~}!€~~}€!~}€!~}!€~}!€~}!€}€!~}!€}!€}€!}€!~}!€}!€}!€}!€~}!€}!€|!!|!!~ƒ,~ƒ,}!‚,|!!},‚!{!-}!‚,{!-{!-{!-|!!}!‚,{!-}!‚,{!-}!‚,|!!{-!},‚!{-!{!-}!‚,{!-},‚!|!!{-!},‚!{!-|!!},‚!|!!|!!|!!|!!|!!|!!|!!~}!€}!€}€!~~}€!~|!!~}!€~}!€}!€}€!}!€|!!}€!~}!€}€!}€!}€!~}€!}!€~}!€}€!}€!~}€!~}!€~}€!~}€!~}!€~~~~~~~}€!~~}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~}!€~~~~~~}!€~~~~~}!€~}€!}€!~}€!}€!}!€|!!|!!}€!~|!!}€!}€!}!€|!!|!!}!€}!€|!!|!!|!!|!!}€!}€!}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€{-€{-€|!!}!€|!!|!!{!-|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!}!€|!!}!€}!€}!€}!€}!€}!€}€!~}!€}€!}!€}!€}!€|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,{!-}!‚,{,‚-{!-}!‚,{,‚-}!‚,{-‚,{-!{,‚-{,‚-{,‚-},‚!~,…,|!!}!‚,|!!},‚!|!!|!!|!!}€!|!!~~,ƒ~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~|!!{-!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!~|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!x)„-{!-z)„!y-~-{!-{-!x-„)y-~-y-~-y-~-{!-y-~-y-~-x)„-x-„)t-9y-~-t9-y-~-y-~-t9-y-~-w4ƒ-y-~-t9-t-9y-~-t-9y-~-x-„)y-~-x)„-x)„-y-~-x)„-y-~-y-~-x)„-x-„){-!y-~-{!-{-!x-„){!-|!!{-!{!-{!-z!„){!-|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!|!!}!€}!€|!!}!€}!€}!€}!€}!€|!!}€!}!€|!!}€!}€!~}!€}!€}!€}!€}€!~}!€}!€}€!~}!€}!€}!€|!!}€!|!!}€!|!!}€!|!!|!!}!€}!€}!€}!€|!!}!€|!!}!€|!!}€!|!!|!!}€!|!!}!€|!!}!€}!€|!!}€!|!!}€!}€!}€!}€!}!€}!€}!€|!!}€!~}!€}!€}!€~}€!~~~}!€}€!~}!€}!€|!!}€!}€!}!€}€!|!!~}!€}!€}€!}€!}€!}€!}€!}€!|!!}!‚,|!!{!-{!-}!‚,{!-}!‚,}!‚,|!!},‚!{-!{-!{,‚-|!!{-!{-!},‚!{-!},‚!{-!},‚!|!!}!‚,}!‚,|!!|!!|!!},‚!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!~}!€}!€|!!~|!!~}€!}€!}€!}!€}!€}!€~}€!}€!}€!}€!}!€}!€~}!€}!€~}!€}!€}€!~}!€~}!€~}!€~}!€~}!€~~~}!€~}!€}€!~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€}!€}€!~~~~~~}€!~}!€}€!~}!€}€!~~}!€~}!€~}€!~}!€}€!}€!~~}€!}€!~}!€~|!!}!€|!!}!€|!!}€!|!!}!€|!!|!!}€!|!!}€!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!}€!}€!}€!}€!~}!€}!€}€!}€!|!!}€!|!!|!!|!!}€!}!€|!!|!!|!!|!!~ƒ,|!!},‚!}!‚,{!-{!-}!‚,{!-}!‚,{-‚,{!-}!‚,{-!},‚!},‚!{,‚-{!-}!‚,},‚!},‚!|!!|!!|!!|!!~ƒ,}€!}!€}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-{!-|!!{-!{-!{!-{!-{!-{!-{!-y-~-y-~-{!-x)„-y-~-y-~-y-~-x)„-y-~-y-~-y-~-y-~-y-~-w4ƒ-y-~-y-~-t9-y-~-t9-y-~-w-ƒ4w-ƒ4y-~-w-ƒ4t9-y-~-t9-y-~-x-„)y-~-x-„)y-~-y-~-{!-x-„){-!{-!{-!{-!{-!x)„-|!!{-!|!!{-€{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}€!~}!€}!€|!!}!€}!€}!€}!€}€!}€!}€!}€!}!€}!€}€!~}!€}!€}€!}€!}€!}€!}€!~}!€}€!}€!}€!}€!}!€}!€|!!~}€!}€!|!!|!!}€!|!!|!!}€!|!!}!€|!!}€!}€!|!!}€!}€!}€!}!€}€!~|!!}€!}€!~}!€|!!~}!€}!€}€!}€!}€!~}€!}€!~}!€}€!~}!€}!€}!€}€!}€!~}€!~}!€}!€}!€~|!!~}!€}!€}!€}!€|!!|!!}€!|!!|!!},‚!}!‚,|!!}!‚,|!!{-!{-!{-‚,{-!{,‚-{!-|!!{-‚,{-!~,…,{!-}!‚,{!-|!!{-‚,}!‚,|!!{-!{-‚,|!!},‚!|!!},‚!|!!|!!{-!|!!|!!|!!|!!}€!}!€}!€}€!}€!~}!€~}!€}!€}€!}€!}€!}€!}€!}€!}!€}€!~}!€}€!}€!~}!€}!€}!€|!!~}!€}!€~}!€~}!€~}!€~}!€}€!~~}!€~~~}!€~}!€~}€!~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~}€!~}!€~~~~~~~}!€~}!€~}€!~}€!~~~}!€}€!~}!€}€!}€!}!€}!€}!€}€!|!!}€!}!€}!€|!!~|!!|!!}€!|!!}€!|!!}€!}€!}!€|!!}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!|!!{!-|!!|!!|!!{-€|!!{-!|!!|!!|!!}!€|!!|!!}€!}!€~|!!}€!}€!}!€}!€|!!}€!|!!}!€|!!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!}!‚,|!!{-!},‚!{-!{!-}!‚,~,…,{!-|!!{-!},‚!|!!},‚!|!!}!‚,}!‚,|!!~,ƒ~,ƒ}!€}!€}!€|!!}€!~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-{!-z!„){-!{-!{-!y-~-{!-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-x)„-y-~-w4ƒ-t-9y-~-t9-y-~-t9-y-~-t-9y-~-y-~-w-ƒ4y-~-s)†9y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-x)„-{-!{-!{-!z)„!{-!{-!{-!{!-z)„!x-„){!-|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!{-!|!!}!€{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}!€}!€}!€}!€|!!}€!}€!|!!}€!}€!}!€}€!}€!}!€}!€}€!}€!}€!~}!€~}!€}!€}!€|!!}€!}€!}€!}!€|!!}€!|!!}!€}!€|!!}€!}€!}€!}€!|!!}€!}€!}!€}!€|!!}€!}€!|!!}€!}!€}!€|!!}€!}€!}!€|!!}!€}!€}€!}€!}€!}€!~}€!}€!~~}€!}€!}!€}€!~}€!~}€!~|!!}€!}€!}€!~|!!|!!}!€|!!}€!}€!}!€|!!}€!}€!|!!|!!|!!{!-|!!}!‚,{!-{!-}!‚,}!‚,|!!}!‚,{-!},‚!~,…,}!‚,}!‚,{!-}!‚,{!-{,‚-}!‚,{-!{-!y-~-}!‚,|!!},‚!{-!{!-|!!{!-|!!|!!|!!|!!|!!}€!|!!}€!}€!}€!~}!€}!€}€!~}!€}!€~}€!}€!}€!~}€!}!€|!!}€!}€!~}!€~~}€!~}!€}!€}€!}€!~~}€!}€!~}!€~~~}!€}!€}!€~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!}€!~~~}!€}€!~~~}!€~~~~}!€}!€}€!~~}€!~~}!€}€!~}!€}€!~}!€}!€}!€}!€}€!|!!}€!}!€}!€|!!}€!|!!}€!|!!}!€|!!}!€|!!}€!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{€-{€-|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!{!-{!-|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!}€!~}€!}€!}€!}€!~}!€}!€}!€|!!~}!€}!€|!!}€!}!€|!!}!€|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!{-!}!‚,{-!{,‚-{!-|!!~,…,}!‚,}!‚,}!‚,|!!}!‚,|!!|!!|!!}!€~,ƒ|!!~ƒ,}€!~~}!€}!€~}€!~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!}€!|!!}€!}!€|!!|!!|!!}€!|!!}!€|!!}€!|!!|!!{!-|!!|!!|!!{-!{!-|!!{-!{-!x-„){-!{-!y-~-x-„)y-~-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-y-~-y-~-y-~-t-9y-~-t9-t9-y-~-t-9y-~-y-~-w-ƒ4y-~-x)„-x-„)x-„)y-~-x)„-x-„)x-„){-!{-!y-~-x)„-x)„-{!-z!„){!-{!-|!!{!-{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{€-|!!{!-|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!},‚!|!!|!!|!!|!!|!!}!€|!!}!€|!!}€!}€!|!!}€!~}€!}€!}€!~}!€}!€|!!}€!}!€|!!}€!~}€!~}!€}!€}€!}!€}!€}!€}€!~}!€}€!}€!}!€}!€|!!}€!|!!}€!}€!|!!|!!}€!}€!|!!}€!|!!}€!|!!}€!|!!|!!}€!}€!}€!|!!}€!}€!}€!}€!}€!}€!|!!~}!€|!!}€!~}!€}€!~}!€~}€!~}!€}€!}€!}€!}€!}€!}€!}!€|!!}€!~}!€}!€}!€}€!}!€|!!}€!}!€|!!|!!|!!|!!|!!{-!{!-}!‚,}!‚,{!-{!-~,…,{-‚,{!-{,‚-{,‚-{-‚,{-!{-‚,{-‚,{-‚,{!-},‚!}!‚,}!‚,|!!{!-{,‚-{!-}!‚,|!!},‚!{-!|!!},‚!|!!|!!},‚!|!!|!!|!!}€!}€!}!€}!€}€!~}€!}€!}€!}€!}€!~}!€|!!~}!€}€!~}!€|!!}€!}!€}!€}!€}!€~~}!€}€!~|!!~~}€!~}!€|!!~~~~}!€~}!€~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~~~~}€!~~~~~~}€!}€!~~}!€~~}!€~~~}!€~}!€|!!}€!}€!}€!}!€|!!}€!}!€}!€}!€|!!}€!}!€|!!}!€|!!}€!|!!|!!|!!}€!}€!}!€}!€|!!|!!|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!|!!|!!{!-|!!{-!|!!|!!{-!|!!|!!{-!|!!{-!|!!|!!|!!|!!}!€}!€}!€|!!}€!}!€}!€|!!}€!}€!}€!|!!}€!|!!|!!}€!}!€|!!}€!|!!|!!}€!|!!|!!|!!|!!},‚!{!-|!!}!‚,|!!},‚!|!!|!!},‚!}!‚,|!!|!!},‚!|!!~,ƒ|!!},‚!~,ƒ~,ƒ|!!}€!}!€|!!|!!~}!€}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!|!!}!€|!!|!!}€!}!€|!!}€!}!€}!€|!!|!!|!!|!!|!!|!!|!!}!€{-!{!-|!!{!-|!!{-!y-~-{!-x)„-{-!y-~-{!-x)„-y-~-y-~-y-~-y-~-x)„-y-~-y-~-y-~-w-ƒ4t-9y-~-y-~-y-~-y-~-t9-w4ƒ-t-9t-9y-~-y-~-t-9y-~-w4ƒ-y-~-y-~-y-~-{-!y-~-y-~-{!-{-!{-!{-!{-!{-!{-!|!!{-!|!!{-!|!!{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!{!-{!-|!!{!-|!!|!!},‚!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€}!€}!€|!!}€!}!€}!€}!€}!€|!!}€!}€!}!€}€!~~}!€}!€}€!}!€}€!~~}!€}€!~}!€}!€|!!}!€}!€}€!}€!}€!}!€|!!|!!}!€}€!}!€|!!}€!|!!}€!|!!}€!}!€}!€}€!~|!!|!!~|!!}€!}!€}!€|!!}!€}!€~}!€~}!€~}€!}€!}€!~}!€}€!}€!~}!€}!€}!€}!€}!€}!€~}!€|!!}!€|!!~ƒ,}€!}!€|!!|!!|!!|!!|!!|!!|!!}!‚,}!‚,}!‚,{-!},‚!y-~-}!‚,},‚!{,‚-}!‚,{!-},‚!{,‚-|!!{,‚-}!‚,{!-}!‚,{-!~,…,},‚!{-‚,~,…,{-!|!!},‚!},‚!},‚!{-!|!!},‚!{!-|!!|!!|!!|!!}€!}€!}€!~~}!€}!€}€!~}!€}€!~}!€}€!}€!~}!€|!!~}!€}€!~~~}€!~}!€}€!~}!€}!€}!€~}€!~}!€}!€~~}€!}€!~}!€~}!€~}€!~~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}!€~}€!~~~~~~~~~}!€~}€!~~~~}!€~}!€}!€~}€!}€!}€!}€!}!€}!€}!€|!!~|!!}€!}€!|!!}€!}!€}!€|!!}€!|!!}!€|!!}!€|!!}€!}€!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!{!-|!!|!!{-!|!!{-!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!~}!€}€!~}!€|!!}€!}€!|!!|!!}€!}!€|!!}!€}!€}!€|!!}!€|!!|!!|!!|!!|!!|!!}!‚,|!!}!‚,|!!},‚!~,…,}!‚,}!‚,}!‚,}!‚,}€!},‚!},‚!|!!}!€|!!|!!}!€~,ƒ|!!~~~,ƒ~ƒ,~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!}€!|!!}!€|!!|!!|!!}€!}€!}€!}€!}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!{!-|!!{-!{!-z!„){-!{-!{-!{-!y-~-{!-y-~-y-~-y-~-y-~-x-„)y-~-s)†9y-~-w-ƒ4y-~-t9-y-~-y-~-t-9t-9y-~-t9-v-~9y-~-y-~-y-~-w-ƒ4t-9y-~-w-ƒ4y-~-x-„)x-„)y-~-x)„-x)„-{!-{-!{!-{!-z!„){-!{!-z!„){-!z)„!{-!|!!{-!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!}€!|!!}!€}!€|!!}€!~}!€}€!}!€|!!}€!}€!}€!~}!€}!€}!€|!!}€!~}!€~|!!~}!€}€!}€!}€!}€!~}!€}€!}€!}€!|!!}€!}€!}!€|!!}€!}!€|!!~|!!|!!}€!}€!}!€}!€|!!|!!|!!}€!}€!}€!}€!}€!}€!}€!}€!}€!~|!!}€!~}!€|!!~}€!}€!}€!~}!€~|!!~}€!|!!}€!}€!|!!|!!|!!}!€|!!|!!}€!|!!},‚!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!{-!{,‚-}!‚,},‚!y-~-}!‚,{-‚,{-!{-‚,{-!{-‚,{-‚,{-‚,~,…,{-‚,{!-},‚!{-‚,|!!{-!{!-~,…,{!-}!‚,{-!},‚!{-!{!-|!!},‚!|!!|!!|!!}!€|!!}€!}€!}€!}€!}€!}!€}!€}€!~}€!}€!}€!}€!}!€}€!~|!!}€!~}!€}!€}!€}!€}!€}!€}€!~}!€~}!€}!€~}!€~~}!€}!€}!€~~}€!}€!~}€!~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~}€!}€!}€!}€!}€!~~~}!€}!€}!€}!€}!€}€!}€!}€!}€!}!€}€!}€!}!€}€!}!€}!€}!€|!!|!!~|!!}!€}!€}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-{€-}€!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!|!!|!!{!-|!!{!-|!!|!!|!!|!!{-€|!!|!!}!€}!€}!€|!!}!€}€!}!€|!!}€!~}!€}!€}!€}!€|!!|!!~|!!}!€|!!}€!|!!}!€|!!|!!},‚!|!!|!!},‚!},‚!}!‚,}!‚,}!‚,|!!},‚!},‚!|!!},‚!},‚!|!!|!!}!‚,|!!}!‚,}€!|!!}!€|!!}€!~,ƒ}€!}€!}€!~}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!|!!}!€|!!}€!}!€|!!|!!|!!|!!|!!}€!}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!{!-{!-|!!{-!{-!{-!{!-{-!y-~-{!-{!-y-~-x-„)y-~-x)„-x-„)y-~-y-~-y-~-y-~-t-9y-~-t9-y-~-t9-y-~-w4ƒ-t9-t9-t9-y-~-w4ƒ-w-ƒ4y-~-y-~-w4ƒ-y-~-{-!y-~-y-~-y-~-x)„-x-„)x-„){!-|!!x-„)|!!{-!{!-z!„)|!!{-!{!-|!!|!!{!-|!!|!!}!€{-€{-!}€!{€-|!!{!-{!-|!!{-!{!-|!!{!-|!!{!-|!!{!-{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€}!€|!!}€!}!€|!!}€!}€!}!€}!€~|!!}!€}!€|!!}€!~}!€~|!!~}!€~}!€}€!~}!€}€!}€!~}!€}!€}!€}!€|!!}€!}€!|!!}!€}!€|!!}€!}€!|!!}€!}€!|!!}€!}€!~|!!}€!|!!}€!}!€|!!}!€}!€}!€}€!}€!}€!}€!}!€~}!€}!€}!€~}!€}€!}€!~|!!}!€}!€}!€|!!}€!|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!}!‚,}!‚,}!‚,{-!},‚!{-!~,…,{-!{,‚-}!‚,{-!{-‚,{,‚-},‚!{,‚-{-!{,‚-},‚!{-‚,y-~-~,…,{-‚,{,‚-}!‚,{-!{,‚-{!-}!‚,~,…,{-!{-!|!!},‚!|!!|!!|!!|!!}€!}!€}!€}!€}!€~~}!€}€!}€!~}!€}!€}€!}!€|!!~}!€}!€}€!}€!~~~}€!~}€!~}!€~}€!~}!€}!€~~~~}!€|!!~~}!€~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~}!€~~~~~~~~~~~~}!€~}€!~~~~~~~}€!}€!~~~}!€}€!~}!€}!€}!€}!€|!!|!!}€!|!!}€!}€!}€!|!!}!€|!!}!€|!!}€!}!€|!!}€!}!€|!!|!!}€!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!{!-{!-{!-{!-|!!|!!{-!{!-{!-{!-|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!}€!}!€}€!}!€}€!}€!}!€|!!}!€|!!}!€|!!}€!}€!}!€}!€|!!}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!~ƒ,|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!~,ƒ|!!~ƒ,}€!}€!}!€}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!|!!|!!|!!}!€|!!}€!}!€|!!}!€|!!|!!|!!|!!|!!}!€}!€}!€|!!}€!}€!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!{-!z)„!{-!{-!{-!{-!y-~-y-~-x-„)y-~-y-~-y-~-y-~-y-~-w4ƒ-y-~-y-~-y-~-t-9y-~-w4ƒ-w4ƒ-t-9y-~-y-~-t-9w-ƒ4t9-y-~-y-~-y-~-y-~-y-~-x)„-y-~-y-~-{!-x)„-{-!{-!{-!{-!{-!z)„!{-!|!!{-!{!-|!!z)„!|!!|!!{!-|!!|!!|!!|!!|!!|!!{-!{-!|!!{-!|!!{!-|!!|!!{!-|!!{!-|!!{!-|!!|!!|!!|!!{!-|!!|!!|!!|!!}€!|!!}€!}!€}!€|!!}€!}€!~}!€}€!|!!|!!}€!}€!~~}!€}€!~}!€~}€!}€!}€!}€!}!€|!!}€!}!€}!€|!!}€!}€!}€!}!€}!€}!€|!!~|!!}€!}€!}!€|!!}€!|!!~}!€}!€}!€}!€}!€}!€}€!}!€}€!~}€!}€!}€!~}€!}!€}!€}€!}€!~~~}!€}!€}!€}!€|!!}€!}€!}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-{!-{!-}!‚,{-!{,‚-},‚!{-‚,{-‚,{,‚-{,‚-{,‚-{!-{-‚,{-‚,{-‚,{!-},‚!y-~-}!‚,}!‚,{!-{!-},‚!{,‚-{!-},‚!},‚!{!-}!‚,|!!}!‚,|!!|!!|!!|!!|!!|!!}!€}!€~}!€}€!}€!}!€~}!€}!€}!€}!€~}!€}€!}!€}€!~}€!~}!€}€!~}!€~}!€|!!~}!€}!€}!€~~~}!€}!€~}!€}!€~}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~~~~~}€!~~}!€~~}!€}!€~}!€~~}€!~}€!}!€}!€}!€}!€|!!}€!}!€|!!|!!}!€}!€|!!}€!|!!}€!}!€}€!}!€|!!}!€}!€|!!}€!}€!|!!}!€|!!}€!|!!}€!|!!|!!|!!|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{!-{!-|!!{-!|!!|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!}€!}!€}!€}!€|!!|!!}!€~}!€}!€}!€|!!|!!}!€|!!}€!}!€}!€|!!}€!}€!}!€|!!|!!|!!|!!|!!|!!}!‚,~ƒ,~ƒ,|!!}!‚,|!!|!!|!!|!!|!!|!!}!‚,}€!|!!|!!~ƒ,}€!}!€|!!~ƒ,}€!}€!}!€}!€}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!|!!}€!|!!|!!}!€|!!|!!|!!}€!|!!}!€|!!}€!}!€|!!}€!|!!|!!|!!|!!|!!{!-{€-|!!|!!{-!{!-{!-{!-{!-x)„-{!-y-~-x-„)y-~-{!-x)„-y-~-x-„)y-~-y-~-y-~-t-9x)„-t9-w-ƒ4t-9y-~-t-9y-~-v-~9t-9y-~-y-~-y-~-y-~-t9-s)†9y-~-x)„-y-~-x-„)x-„){-!{-!x-„){!-{!-z!„){!-{!-|!!x-„)|!!{-!|!!{-!{-!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!{!-|!!|!!{-!},‚!},‚!}!‚,{-!}!‚,|!!},‚!{!-|!!{-!|!!|!!|!!}€!|!!}€!|!!}€!|!!}€!|!!}€!}!€}!€|!!~}!€}!€}€!}€!}€!}!€}!€}!€}€!}€!~}€!~}!€}€!~}!€}€!}€!~}!€}!€|!!}€!}!€|!!~|!!}€!}€!}€!}€!~}!€}!€}€!}€!|!!}€!}€!}!€}€!}!€}€!|!!}€!}€!}€!}€!}€!~~}!€|!!~}€!~|!!~}€!}€!}€!}!€}!€|!!}€!|!!|!!|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!},‚!}!‚,}!‚,}!‚,{-!{,‚-}!‚,{-‚,{-!{-‚,{!-{,‚-{-‚,{,‚-{,‚-{-‚,{-!{-‚,{-!~,…,{,‚-{-‚,},‚!{,‚-y-~-},‚!},‚!{,‚-{,‚-~,…,{!-},‚!{-!{,‚-|!!|!!|!!|!!}€!}€!}€!}€!~}!€}!€~}€!~}!€~}!€}!€}!€}!€}€!}!€}!€}€!~}!€}!€}!€~}!€}€!~~~~~}!€}!€}€!~~|!!~}!€}!€~}€!~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}!€~~~~~~~}!€~~~~~~~~}!€}€!}€!}€!~~}!€~}!€|!!}€!}€!}€!}!€}!€|!!}€!}!€}!€}!€}!€}!€}€!}!€}!€}!€}!€}!€}!€|!!}€!}€!}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!|!!{-!|!!{-!{-!{-!|!!{-!|!!{-!{-!|!!{-!{!-|!!|!!|!!{-!|!!|!!|!!}€!}!€}!€|!!}!€}€!}€!}€!|!!}€!}€!|!!}!€}!€|!!}!€|!!}€!}!€}€!}€!}!€|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!~ƒ,|!!|!!},‚!}!‚,|!!|!!},‚!|!!}!‚,|!!|!!}!€|!!}€!|!!~}!€|!!}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!|!!|!!|!!|!!}€!|!!}!€|!!}!€|!!}€!}€!~|!!}!€|!!|!!|!!~|!!}!€}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!{!-{!-{!-{!-{!-z!„)y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-w-ƒ4t9-y-~-t9-y-~-t-9y-~-t9-t9-y-~-w4ƒ-t-9w-ƒ4w-ƒ4y-~-y-~-y-~-y-~-x-„)y-~-y-~-x-„)x-„)y-~-{-!x-„){-!{-!|!!x-„)|!!{-!|!!|!!|!!z!„)|!!|!!|!!|!!{-!|!!|!!|!!|!!{-!{!-|!!{-!{!-{!-{!-|!!|!!{-!|!!{-!{!-|!!{-!}!‚,|!!|!!|!!}!‚,|!!}!€|!!}€!}!€|!!~}!€}€!}€!}€!~|!!}€!}€!}!€}!€}!€~}!€}€!~~}€!~}!€}!€}€!}€!~}!€}€!}€!}!€}!€~|!!}€!~|!!}€!|!!|!!|!!}€!|!!}€!}€!}!€}!€~}!€}!€|!!}!€}€!}!€}€!}€!}!€~}€!}€!}€!~}!€}€!~}!€}!€}€!|!!~|!!}€!}€!}€!}!€}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!{-!|!!},‚!}!‚,|!!{!-|!!~,…,|!!{-!~,…,{,‚-{,‚-~,…,{-‚,{,‚-{-‚,{!-~,…,y-~-{,‚-{-‚,{-!{-‚,{!-{-‚,~,…,{!-y-~-{,‚-{!-}!‚,{!-{!-}!‚,|!!{-!|!!{-!|!!|!!|!!}!€}!€}€!}€!}!€}!€}€!}€!~}€!}€!}€!}!€}€!}€!~}€!|!!~}!€}!€}€!~}!€}€!~}!€}€!}€!~}!€}€!~}!€}!€}!€~}!€~~}!€}!€}€!~}!€~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~}€!~~~~~~~~~~~~}!€~}€!~~~~}!€}€!~}!€~~}€!}€!~|!!}€!~}!€|!!}€!}!€}!€|!!}!€|!!}€!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!{-!{!-|!!{!-}€!|!!|!!{-!{-!|!!{-!|!!|!!|!!{-!{!-{!-|!!{-!{-!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!}!€}!€}€!|!!|!!}€!}!€|!!}!€|!!~|!!~}!€}€!}€!}!€|!!|!!|!!|!!|!!|!!}!‚,}€!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€|!!}!‚,~ƒ,}!€|!!|!!~}!€|!!}€!}€!~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!|!!|!!}€!|!!}!€|!!}€!}€!|!!}!€|!!|!!|!!}€!}!€}!€|!!|!!}!€|!!|!!|!!}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!z!„){!-{!-z!„){-!y-~-{-!y-~-y-~-{-!y-~-y-~-x)„-y-~-y-~-y-~-y-~-y-~-y-~-t9-y-~-y-~-y-~-w4ƒ-t-9w4ƒ-y-~-y-~-y-~-x-„)y-~-y-~-y-~-y-~-z)„!y-~-{-!x-„){-!{-!{!-|!!{-!{!-|!!{!-{!-{!-{€-|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!{!-{!-|!!{-!{-!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€|!!}€!}!€}!€}!€}!€}!€}€!}€!~}!€}!€}€!~}!€}€!~}!€}!€}€!}€!~}!€}€!~}!€}!€}€!}€!}€!~|!!}€!}!€}!€}€!~|!!}€!}!€}!€}!€|!!}€!|!!|!!}€!}€!}€!}€!}€!}!€}!€~|!!}€!}€!}€!}!€}!€}€!}€!}€!~}!€~}!€}€!}!€}!€}!€}!€|!!}!€|!!}!€|!!|!!~ƒ,~ƒ,|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!},‚!}!‚,}!‚,{-!}!‚,{-‚,},‚!{-!y-~-{,‚-{,‚-y-~-~,…,~,…,y-~-~,…,~,…,~,…,{,‚-{!-}!‚,{-‚,{-!{,‚-}!‚,{-!},‚!}6‚!~,…,{-!}!‚,{,‚-|!!}!‚,}!‚,|!!|!!}!€|!!|!!}!€}!€~}!€}€!~|!!}!€}€!~}€!}!€}€!}!€}!€~}!€}!€}!€}!€}€!}!€}!€}!€}€!}€!~}€!}€!~}€!~~}!€}!€~~|!!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~~~~~~~}!€~~}!€}€!}€!~}€!}€!~~}!€~}€!~}!€~}€!}€!}€!}€!}€!}€!~|!!}€!}€!}!€}!€|!!}€!}!€}!€|!!|!!~|!!}€!}!€|!!}€!}€!}!€}!€|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!{!-|!!|!!{-!{!-|!!{-!|!!{-!{!-|!!{-!|!!|!!|!!{!-|!!|!!|!!|!!}€!}!€|!!}!€|!!|!!}€!}€!|!!}€!}€!}!€|!!}€!}€!}!€|!!}€!}€!}!€}!€}!€|!!}€!|!!|!!|!!|!!}€!|!!~ƒ,|!!},‚!}€!~,ƒ~,ƒ},‚!|!!|!!},‚!~ƒ,}€!~,ƒ~,ƒ~,ƒ|!!~ƒ,}€!~ƒ,}!€|!!~}€!}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~~}€!|!!}€!|!!|!!|!!}€!|!!|!!}!€|!!}€!}!€|!!}€!}!€|!!}€!}!€|!!}€!}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!{-!{!-{!-{-!{-!{!-{-!y-~-y-~-{!-y-~-{!-y-~-y-~-y-~-y-~-y-~-t-9y-~-t9-t9-t9-t-9t-9y-~-t9-y-~-t9-y-~-t9-t-9s)†9y-~-s9†)y-~-x)„-y-~-y-~-x)„-{!-z)„!{-!x)„-{!-z)„!x)„-|!!{!-|!!z)„!z)„!{-!|!!|!!|!!|!!|!!|!!{-!|!!{-!{-!|!!{-!{-!|!!{-!{-!{-!{!-|!!|!!}!‚,{!-}!‚,{-!{!-{!-|!!{-!{-!|!!|!!|!!|!!|!!}!€|!!}€!|!!~}!€}!€|!!}€!|!!}€!}€!~|!!~|!!}€!}€!~}!€}€!~~}!€}!€~}!€}!€}€!}€!}€!}!€|!!~}!€|!!}!€|!!}€!}€!}!€}€!|!!}€!}€!}€!~}€!}!€~}!€|!!~}€!|!!}€!~}!€}!€~}!€}!€~}€!~|!!}€!~|!!~}€!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!}!‚,|!!{-!},‚!{!-|!!{,‚-}!‚,{,‚-}!‚,{-‚,y-~-~,…,{!-~6…,{-‚,y-~-{,‚-~,…,{-‚,{-‚,y-~-{,‚-{,‚-{,‚-{,‚-{,‚-},‚!{-!{-‚,{-‚,{!-{-!~,…,{-‚,}!‚,{!-|!!|!!},‚!},‚!|!!|!!~}€!~}!€}€!}!€|!!~|!!}€!}!€}!€~}!€}€!}€!~~}€!~}€!~~~}!€}!€~}!€~~|!!}€!~}!€}!€}!€~~~}€!~}€!~}€!~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}!€~~}!€~~}€!~}!€~}!€~~~~}€!~}€!~~}!€~}€!}!€}!€}!€}€!~}!€}!€~|!!}!€|!!}!€}€!}€!}€!}€!}!€}!€|!!}€!}!€}€!}€!|!!}€!}€!|!!}€!|!!|!!{!-|!!|!!|!!|!!{-!|!!{-!|!!|!!|!!|!!{-!{!-{!-|!!{!-{!-|!!{-!|!!{-!{!-{!-|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}!€}!€}!€}€!|!!|!!}!€}!€|!!}€!}€!}€!}!€|!!~}!€}!€}€!|!!~ƒ,}€!|!!~ƒ,~ƒ,|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!~,ƒ|!!|!!|!!|!!~,ƒ}!€|!!}€!~}!€~ƒ,~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!|!!}€!|!!~|!!}€!}!€}€!}!€|!!}€!}!€}!€|!!}!€|!!}€!}!€|!!|!!|!!}€!}€!}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!y-~-{!-{!-{!-y-~-y-~-y-~-y-~-x-„)y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-w4ƒ-r9†4y-~-t9-y-~-t9-t-9y-~-y-~-y-~-t-9y-~-x-„)y-~-{!-y-~-y-~-y-~-x-„){-!{-!{!-|!!{!-{!-|!!{!-|!!|!!{-!{!-|!!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!{-!{!-|!!{!-{!-{!-{-!{!-|!!{!-|!!},‚!|!!},‚!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!}!€|!!|!!}€!}€!}!€}!€|!!}€!}!€~}!€~}!€}€!}€!}€!~}€!}€!}€!~|!!~}!€}!€}!€~}€!~|!!}!€~}€!~|!!}€!}€!}!€}!€}!€}€!}€!}€!}!€}€!}€!}€!~|!!}!€~}!€}!€}!€~}!€}€!}€!}€!}!€}€!~}!€|!!}!€}!€|!!|!!|!!|!!|!!}!€}!€|!!|!!~ƒ,~ƒ,|!!|!!|!!|!!},‚!},‚!|!!}!‚,|!!},‚!|!!{!-|!!}!‚,|!!{,‚-},‚!{,‚-{!-{-!{-‚,~6…,y-~-~,…,{-‚,{-‚,y-~-{,‚-{!-}!‚,{-!{,‚-~,…,{-‚,{!-{,‚-{,‚-{-!~,…,{,‚-},‚!{-‚,{!-{!-}!‚,}!‚,|!!|!!|!!|!!|!!}!€}!€}€!}!€}€!~~}€!~}!€}€!~~}!€}!€}!€}€!~}!€~}!€}€!}€!~~}!€}!€~}!€}!€~~}!€}€!~~|!!}€!}€!~~}!€}€!~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|!!~}!€}!€~}!€}!€}!€}€!}€!}!€~}€!}€!}€!}€!~}!€}!€}!€|!!}€!}€!}!€|!!}€!}€!~}!€}!€}!€}€!}!€}!€}!€}!€|!!}€!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!{-!{!-|!!{!-|!!|!!|!!{-!|!!{!-|!!{!-|!!{!-|!!{!-|!!{!-|!!{-!|!!{-!|!!|!!|!!}€!}!€}!€|!!}€!|!!}€!}€!}€!}!€}!€~|!!|!!}!€|!!~|!!}€!~}!€|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!},‚!|!!|!!}!‚,~ƒ,}€!|!!}€!|!!~ƒ,}€!}!€~,ƒ}!€}!€|!!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~|!!}!€|!!|!!}€!|!!}€!}€!}€!|!!}€!}!€}!€|!!|!!}!€|!!|!!}!€}€!}!€}€!}!€}€!}!€}€!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!{!-{!-{!-z!„){-!{-!y-~-{-!y-~-x)„-y-~-y-~-y-~-y-~-x)„-y-~-y-~-y-~-t9-t9-t-9y-~-t-9t-9t-9y-~-t9-y-~-t-9y-~-t9-x-„)y-~-y-~-x-„)x)„-{-!x-„){!-|!!{-!{!-|!!x-„)|!!z)„!x)„-|!!|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!{!-|!!{-!{!-{!-|!!},‚!{!-}!‚,|!!|!!{!-},‚!{!-|!!{!-|!!},‚!{!-|!!}!‚,|!!|!!|!!|!!|!!}!€|!!|!!~}!€}!€|!!}€!}€!}!€}!€~}€!}!€}€!~~~~}!€}!€|!!~}!€}€!~|!!~}€!}€!}€!}!€}!€}!€}!€|!!|!!}€!}€!}!€}!€}!€}€!}€!}!€}!€}€!~}€!}!€}!€}!€}€!}€!}!€}!€}€!~|!!~}!€}!€}€!~}€!}€!}€!}€!}€!}€!~|!!}€!|!!}€!|!!|!!|!!}€!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!},‚!|!!|!!},‚!},‚!},‚!{-‚,{!-|!!{!-{,‚-~,…,~,…,y-~-~,…,{-‚,y-~-{,‚-{,‚-{,‚-~,…,y-~-{,‚-{!-{,‚-{!-},‚!{-‚,{-‚,}!‚,{,‚-{,‚-}!‚,{-‚,{!-},‚!},‚!},‚!{-!{!-|!!|!!|!!}!€}€!}!€|!!}€!~}€!}€!~}!€~}!€|!!}€!}!€~}€!~}!€}!€|!!}€!}€!~|!!}€!~}€!~}!€}€!}€!~}€!~}€!}€!~~}!€}€!~~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~~~~}€!~}!€~}!€~~}!€~~~~}€!}€!}€!~}!€~}€!~~~}€!~~}€!}!€~~}!€}€!}€!}!€|!!}!€}€!}!€}!€}!€}!€|!!}€!}!€|!!}€!|!!}!€|!!}€!|!!}€!}!€|!!}€!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!{-!|!!|!!{!-|!!{!-{!-|!!{!-{!-|!!{-!{-!{-!{-!{-!{!-|!!{-!|!!|!!{!-|!!{!-}€!|!!|!!|!!|!!|!!}€!~|!!|!!}€!}€!|!!|!!~}!€|!!}!€|!!}€!}€!}!€|!!~}!€}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€},‚!}€!~ƒ,|!!|!!|!!}!‚,~ƒ,~ƒ,}€!~ƒ,}!€|!!~}!€~,ƒ~~}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~}€!|!!}!€}!€|!!}€!|!!|!!}!€}€!}€!}€!}!€}!€}€!}€!}!€}!€|!!|!!}€!}!€}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-{!-{!-|!!y-~-{!-{!-{!-x)„-y-~-y-~-x-„)y-~-y-~-y-~-y-~-y-~-y-~-t9-y-~-y-~-t9-y-~-t9-y-~-w4ƒ-y-~-y-~-w4ƒ-y-~-x)„-x)„-y-~-x-„)y-~-x)„-y-~-{!-y-~-x-„){!-{-!x-„){!-|!!{-!{-!|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!|!!{!-{-!{-!{-!{-!{!-|!!{!-}!‚,|!!},‚!{-!{!-|!!}!‚,|!!|!!|!!~,ƒ~,ƒ|!!|!!}!€}!€|!!}!€}!€~ƒ,}!€|!!}€!}!€|!!}!€}€!~|!!}€!~~}!€}€!~}€!}€!~}€!~}€!}!€}€!}€!}€!~}!€}€!}€!}€!}€!}€!}€!}€!}!€}!€}!€}!€}€!}!€}!€}!€}€!}!€}€!}€!}€!}€!}€!}€!}€!}€!}€!~}€!}€!~|!!}€!}€!}€!}€!}€!}!€|!!|!!}€!|!!|!!|!!|!!},‚!|!!|!!}!‚,|!!|!!}!‚,|!!|!!},‚!|!!{!-}!‚,{!-|!!{!-|!!},‚!{-‚,{,‚-}!‚,{,‚-{,‚-{,‚-{,‚-{,‚-{,‚-{,‚-{,‚-{,‚-y-~-~,…,{-‚,{-‚,{-!~6…,{-‚,{-‚,{!-{,‚-{-!{-‚,{-!{,‚-~,…,{-‚,{-‚,},‚!},‚!{-!}!‚,|!!|!!|!!|!!}€!~}!€}€!}!€}!€}!€}€!}!€}!€~}!€~}!€}!€}!€}!€}€!~}€!~}!€}!€~}€!~|!!~}!€~}€!}!€|!!}€!~~}!€~}!€~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~~}!€~~~~~}!€~~~~~~~}€!}€!~}!€~}€!}!€}€!~|!!|!!~}!€}€!}!€}€!|!!}!€}!€|!!}!€|!!}€!}€!}€!}€!~}!€~}!€}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!|!!{-!{!-|!!{-!{-!|!!{!-|!!|!!{-!{!-{!-{!-|!!|!!{-!{!-{!-|!!{!-|!!{-!}!€|!!|!!}!€}!€}!€}€!}!€|!!}!€}€!}€!|!!}€!}€!}€!}!€|!!}€!}!€}!€|!!}€!}€!~|!!|!!|!!}!€|!!}€!|!!|!!|!!}!€~,ƒ},‚!|!!|!!}!‚,|!!|!!|!!|!!}!€~,ƒ|!!|!!|!!|!!}!€~,ƒ}!€},‚!}!€}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~|!!}!€|!!}€!}€!}!€}!€}!€|!!}!€}!€}!€}!€|!!|!!|!!|!!|!!}!€}!€}!€}!€|!!~}€!|!!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!y-~-|!!x-„)y-~-y-~-{-!y-~-y-~-y-~-y-~-x)„-y-~-y-~-t9-t9-s9†)t9-t9-t-9t-9y-~-t9-y-~-t9-t9-y-~-w4ƒ-t9-y-~-w4ƒ-t-9x)„-y-~-x)„-x-„)x-„)y-~-x)„-{!-z)„!{-!{!-|!!{!-{!-|!!|!!{-!|!!{!-{!-|!!{-!{-!|!!|!!|!!{-!{!-{!-{!-|!!|!!|!!|!!{!-},‚!{-!|!!{-!{!-|!!{!-|!!},‚!{-!}!‚,|!!}!‚,|!!|!!}!€}!€}!€|!!}€!}!€|!!}€!}€!~}!€}!€}!€}€!~}!€~}!€}€!}€!~}!€}!€~}!€}€!~}!€}!€~|!!~}€!|!!}€!}!€}!€}!€}€!}€!}€!}€!}€!}€!}!€}!€}!€}!€|!!}€!}€!~}!€}!€}€!~}€!~~}!€~}!€}!€}!€}!€|!!}€!}€!}€!}€!}€!|!!}€!}!€|!!}!€|!!|!!|!!|!!|!!~,ƒ|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!},‚!}!‚,{!-}!‚,}!‚,{-!{-‚,y-~-{!-{-!y-~-{,‚-{-‚,{-‚,{-‚,y-~-{-‚,{,‚-{,‚-~,…,{-6{,‚-{-!y-~-{,‚-{,‚-~,…,~,…,{!-{!-},‚!{-!},‚!{-!{-!},‚!}!‚,|!!|!!|!!|!!}!€}!€}€!}!€}!€}€!}€!}€!~}€!~}!€}!€}!€}€!}€!}€!}€!~}!€}!€}€!}€!~}!€}€!}€!~~}€!}€!}!€~~}!€}€!}€!}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€}€!~}!€~~}€!~~~~~}€!~}€!}€!~}!€}!€~~~}!€}!€}€!~}€!~~}!€}!€}!€|!!}!€}!€|!!}€!}€!}€!}€!}€!}€!}€!}!€}!€|!!}!€|!!|!!}€!}€!}€!|!!|!!|!!|!!{!-|!!|!!{-€|!!|!!{-!{!-{!-|!!{-!|!!{!-|!!{-!{-!{-!|!!{-!|!!{-!{!-{-!|!!{-!|!!|!!{-!|!!|!!{!-|!!|!!|!!|!!}€!}!€|!!}€!}€!|!!}€!}€!~|!!}€!}€!}€!~}!€|!!~}!€|!!}€!}!€}!€}!€|!!|!!|!!|!!|!!~ƒ,~ƒ,}€!|!!|!!|!!|!!|!!}!‚,~ƒ,|!!|!!}!‚,}€!|!!}€!|!!}€!}!€~,ƒ~}!€~}!€}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~}€!|!!}€!|!!|!!|!!}€!}€!}!€|!!}€!}€!}€!}!€}€!~}!€}!€|!!}!€}€!~|!!}!€|!!|!!}€!}€!|!!|!!}€!|!!|!!|!!|!!|!!{!-|!!|!!y-~-z!„){!-{!-|!!{-!y-~-{-!y-~-y-~-x)„-y-~-y-~-y-~-y-~-w4ƒ-y-~-s9†)t-9y-~-y-~-w-ƒ4y-~-t9-t9-y-~-t-9y-~-w-ƒ4y-~-x-„)y-~-y-~-x)„-x-„)y-~-{!-{-!{-!{!-{!-{!-z)„!{!-|!!|!!{!-{!-{!-{!-|!!|!!|!!|!!|!!{!-|!!|!!|!!{-!|!!{!-|!!{-!{-!{-‚,{!-|!!{-!}!‚,{!-|!!},‚!{-!{!-|!!|!!{-!|!!|!!|!!}!€|!!|!!|!!|!!}!€|!!}€!}!€}!€|!!}€!}€!~}!€}!€}!€}€!~}!€~}!€}€!}€!~}€!~}!€~~|!!}€!~}!€~~}€!}€!}€!}€!}!€|!!}!€|!!}€!}€!}€!}€!~~}!€}!€}€!}!€}€!~|!!~}!€~}!€}€!}!€}!€}€!}!€}!€}!€}!€|!!}!€}!€|!!}€!~ƒ,}€!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!}!‚,|!!|!!|!!},‚!}!‚,{!-}!‚,{!-}!‚,{!-{!-}!‚,{-!},‚!{-‚,~,…,{6-{,‚-{,‚-y-~-y-~-{,‚-{,‚-{,‚-{,‚-{-‚,y-~-}!‚,{-‚,{,‚-{,‚-~,…,y-~-{-‚,{,‚-~,…,{-!{-‚,{-‚,}!‚,{-!}!‚,{!-|!!},‚!|!!|!!}!€|!!}€!~~}!€~}!€}!€}!€}!€}!€~}!€}€!~}!€}!€}!€}!€}€!}€!~}!€}€!~}!€}!€}€!~}!€~}!€}!€~}!€~~}€!}€!~~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~}€!~~~}!€}!€}€!}€!~}!€}!€}!€~}€!~}€!}€!~}!€}!€~}€!}!€}!€|!!~|!!~|!!}€!}!€|!!}!€}€!}€!}€!}€!}€!~}!€|!!|!!|!!|!!|!!{!-|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!{!-|!!{-!{-!|!!|!!{-!{!-|!!y-~-|!!{-!|!!{-!|!!{-!{-!{-!{-!{!-|!!|!!|!!}€!|!!|!!}€!}€!|!!}!€}!€|!!}€!}!€|!!}€!}!€}!€|!!|!!~|!!}€!~}!€}!€|!!|!!}€!|!!}!€|!!}€!|!!|!!|!!}€!|!!|!!|!!~ƒ,|!!|!!~ƒ,|!!|!!},‚!}!€},‚!|!!~ƒ,}€!|!!}€!|!!|!!}€!~}€!}€!}!€~~~~~~~~~~~~~~~~~~~~~~}€!~}€!|!!}!€|!!}€!}€!}!€}!€}€!}€!}€!}!€}€!|!!|!!}€!}€!}€!}!€}!€|!!}!€}!€}!€|!!}€!|!!}€!}€!|!!|!!}!€|!!|!!|!!{-!{!-{!-|!!{-!{-!{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-x)„-x-„)y-~-y-~-t-9y-~-t-9y-~-t-9t-9y-~-t9-y-~-t-9x-„)y-~-t9-x)„-t-9y-~-x-„)y-~-y-~-y-~-x-„)x-„)y-~-x)„-{-!{-!{!-{!-z!„){!-z!„){-!z)„!{!-z!„){!-{!-|!!{!-}€!|!!|!!{!-|!!{!-{!-|!!{!-{!-|!!},‚!{-!{-!{!-{!-}!‚,|!!{!-|!!},‚!{!-|!!|!!},‚!}!‚,|!!|!!|!!|!!}!€}!€|!!|!!}€!~|!!}€!}€!|!!}€!}€!~|!!~}€!~}€!~~~}!€~}!€}€!}€!~~}€!}€!}€!}€!}!€}!€}!€}!€}!€}€!~}!€~|!!~}€!}€!}€!}!€}!€}!€}!€}€!~}!€~|!!}€!}€!}€!~}€!~}!€}€!}€!}€!|!!}€!}€!|!!}!€|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!}!‚,|!!|!!|!!{!-|!!{!-|!!|!!|!!},‚!{-!},‚!{-!{-‚,}!‚,{-‚,{,‚-{,‚-{,‚-{,‚-{,‚-~,…6{-‚,y-~-{-‚,{-‚,y-~-{,‚-{!-{,‚-{-‚,y-~-{,‚-{-!~,…,{!-},‚!y-~-~,…,{-!{-!{-‚,{!-{!-|!!},‚!|!!|!!|!!|!!}€!}€!~}€!~}!€}€!}€!}€!}€!}€!~}!€}!€}!€}!€}€!}€!~}!€~}€!~}!€}!€}€!}€!~}!€}!€}!€}€!~}!€}!€}!€}!€~~~}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~~~}€!~~~}!€~}!€~~}!€~~}!€~}!€~~}€!}!€}!€}!€~}€!|!!}€!|!!}€!}€!|!!}€!}!€}!€}!€}!€}!€|!!|!!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!|!!{!-|!!{!-{!-|!!y-~-|!!{!-|!!|!!{-!|!!{!-|!!y-~-|!!{-!{!-{!-{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€}!€}!€}!€}!€}!€}!€}!€|!!}!€|!!}!€}!€}!€|!!}!€|!!}€!|!!}€!}!€|!!}!€|!!}!€},‚!}!€|!!|!!|!!}!€~,ƒ~,ƒ|!!|!!|!!},‚!|!!|!!}€!|!!}€!|!!}!€|!!~|!!~}!€}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~~}€!|!!|!!|!!}!€|!!}!€}!€|!!|!!~}!€}!€}!€}€!}€!|!!|!!}€!}€!}€!}!€}€!|!!}€!~|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-{!-{!-{!-{!-{!-{!-y-~-{!-{-!y-~-y-~-t-9y-~-t-9y-~-t-9y-~-t9-t9-y-~-t9-t-9y-~-t-9y-~-t9-y-~-t-9y-~-y-~-y-~-y-~-x-„)x-„){-!y-~-{-!y-~-z)„!{-!{-!z)„!{-!{-!{!-|!!{!-|!!{!-z!„)|!!{!-}!€{-!{!-{!-|!!{-!|!!|!!{-!{-!},‚!{-!{-!|!!},‚!{-‚,|!!{-!{,‚-|!!},‚!{!-|!!{-!},‚!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!}€!|!!}!€}!€}!€}€!}€!~}€!~}!€}!€}€!~~}!€}!€}€!}!€~}!€~}!€|!!}€!~}!€}!€}€!}€!}€!}€!}€!}!€}€!}€!}€!~}€!}€!~}!€}€!}€!~~}!€|!!}€!}€!~~~~}!€}!€}!€|!!}€!}!€|!!}€!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!},‚!|!!|!!}!‚,|!!|!!{!-|!!|!!},‚!},‚!{-!}!‚,{-!}!‚,{-!{,‚-~,…,{-‚,{-‚,{-‚,{-‚,{-‚,{-‚,y-~-~,…6{-‚,{-‚,{-‚,y-~-~,…,{-‚,~,…,{-‚,{-‚,{-‚,{-‚,{,‚-{,‚-{-!{,‚-~,…,{,‚-}!‚,{-!},‚!}!‚,|!!|!!|!!|!!|!!|!!}!€}!€}!€}!€}!€}!€~}!€}€!}€!}!€}!€}€!}€!}!€}€!~}€!~}!€}!€}€!}€!~}!€}!€}!€}!€}€!~}!€}!€~~}€!}€!}€!}€!~~~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~}€!~}€!~~~~~}€!~~~~}!€}!€~~~~}!€~}€!~}!€}€!~~}!€}!€}!€}!€}€!}€!}€!~}!€}€!}!€|!!}€!}€!}!€}!€|!!}!€}!€}!€}€!}€!}€!}€!}€!}€!}€!~}!€|!!|!!|!!|!!|!!{-!|!!{!-|!!{!-{!-|!!{-!|!!{!-|!!{-!{!-{!-{!-{!-{-!|!!|!!{-!{-!{-!{-!{!-|!!{!-|!!{-!|!!|!!|!!|!!|!!}!€|!!}!€|!!}€!}!€}!€|!!|!!}€!}€!}€!}€!}€!}€!}€!}!€}€!}€!}€!}!€}€!}!€|!!|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}!€~,ƒ|!!|!!|!!|!!}!€~,ƒ|!!~ƒ,}€!~,ƒ~,ƒ}!€~,ƒ}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!|!!|!!|!!}€!|!!~}!€|!!}€!}!€|!!}€!}€!}€!}€!}!€}!€}!€}€!}!€~|!!}€!}€!}!€~|!!}€!|!!|!!|!!|!!{!-|!!{-!|!!{-!{!-{!-{-!{-!y-~-y-~-{!-y-~-y-~-y-~-x)„-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-r4†9y-~-w4ƒ-t-9y-~-t-9y-~-w4ƒ-y-~-x)„-w4ƒ-s)†9y-~-x)„-y-~-x-„){-!x-„){!-x)„-z!„){-!{!-|!!z)„!{-!{-!{!-z)„!|!!{!-|!!{-!{!-|!!|!!|!!|!!|!!{!-|!!{-!{-!{-!},‚!{!-{!-}!‚,{!-{!-|!!{-!{-!}!‚,{!-|!!|!!|!!{-!},‚!|!!|!!|!!|!!}!€|!!}€!}€!}!€}!€}!€|!!}€!~}!€}!€}!€}€!~~~}!€}!€}€!}€!~~}€!}€!~}!€~}€!}€!}€!}€!}€!~}!€}!€~}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€}€!}€!}!€~~}!€}€!~}€!~~~}!€|!!}€!}€!}!€|!!|!!}€!|!!}!€|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!{!-|!!{-!},‚!{-!}!‚,{-!{-‚,{-!{-!y-~-}6‚!y-~-{,‚-{,‚-{-‚,y-~-{,‚-{,‚-{,‚-{,‚-~,…,{,‚-{-‚,{-‚,{-‚,{-‚,{,‚-~,…,y-~-{,‚-{!-~,…,{-‚,}!‚,}!‚,}!‚,{!-|!!{-!{-!|!!|!!|!!}!€}!€}€!}€!}€!~}!€}!€}€!~}!€~}!€}!€}!€~}!€}!€|!!}€!}€!}€!|!!~}€!~}€!}€!}€!~}!€}€!}€!}€!~}!€~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~~~~~~}€!~}€!~}€!~~}€!~~~~}€!~}!€}!€~}!€}!€}€!}€!~}!€}!€}€!}€!~}!€}!€}!€}!€}€!|!!}€!}€!}€!}!€}!€|!!}€!}€!}€!}€!}!€|!!~}!€}!€}!€}!€}€!|!!|!!}!€}!€|!!|!!{!-|!!|!!{-!|!!{-!|!!{-!{-!{-!{!-|!!{!-|!!|!!{-!|!!|!!{-!{-!|!!{!-|!!|!!{-!{-!|!!{-!|!!{-!|!!|!!|!!}€!|!!}!€}!€}!€}!€|!!}€!}!€}!€|!!}€!}€!}€!}€!}€!~|!!}!€}€!}€!}!€|!!}€!}!€|!!}€!|!!|!!|!!|!!|!!}!€|!!}€!|!!}!‚,}€!},‚!|!!}!€},‚!~ƒ,~ƒ,|!!~ƒ,}!€}!€|!!~|!!~}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~}€!|!!|!!|!!}€!}!€}!€|!!}€!}€!}!€}€!}€!}!€}!€|!!}€!}€!}€!}!€|!!}!€|!!}€!}!€}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!{-!{!-{!-|!!{-!x-„){!-x)„-y-~-y-~-x-„)y-~-y-~-y-~-y-~-y-~-t9-t-9t-9y-~-t-9y-~-t-9y-~-t9-t9-t9-w-ƒ4y-~-t9-y-~-y-~-w4ƒ-x)„-y-~-y-~-x)„-y-~-x)„-{-!{-!{-!{-!{-!{-!{-!|!!z)„!{-!{!-{-!{-€{-!|!!|!!|!!{-!{!-{!-{!-{!-},‚!{!-}!‚,|!!{-!{-!{-!{-‚,|!!{-!{,‚-|!!},‚!{-!|!!},‚!{-!{-!|!!|!!|!!|!!}!€}!€|!!|!!}€!|!!|!!}€!|!!}!€|!!}!€}€!}€!~}€!~}!€}€!}!€}!€~}€!}€!}€!}€!~}!€~}!€~}€!~}!€}€!}€!}€!~|!!}€!}!€}€!}€!}€!}€!~}!€}!€}!€}€!}€!}!€~}€!}€!~~}€!~}!€}!€|!!}€!}€!|!!}€!|!!|!!}!€|!!}!€|!!}!€},‚!|!!|!!|!!|!!|!!},‚!|!!}!‚,|!!},‚!|!!}!‚,|!!},‚!|!!}!‚,|!!{-!|!!},‚!{-!{-!~,…,},‚!{,‚-{-‚,{,‚-}!‚,{,‚-{,‚-{-‚,{,‚-~,…6{,‚-{-‚,{-‚,y-~-{,‚-{,‚-{-‚,{-‚,y-~-{-‚,{-‚,y-~-}!‚,{-‚,{,‚-{,‚-y-~-{-!{,‚-}!‚,|!!},‚!|!!}!‚,|!!|!!|!!}€!}!€~}!€}€!}€!}€!}€!~}€!~|!!}€!~}€!}!€}!€}€!~}!€}!€~~}!€}!€}!€}!€~~}!€}!€}!€~}!€}!€~~}!€~~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~}!€~~~}!€~~~}€!~~~~}!€~~}€!~~}€!~}€!~}!€~~~~}€!~}€!}€!~}!€}€!~}!€}!€~~}!€|!!}€!}€!}€!}!€}€!}€!}€!|!!}€!}€!|!!}€!}€!}€!}€!}!€|!!}€!}!€}!€|!!{€-{€-|!!{-!|!!|!!{-!|!!{!-|!!{-!{!-|!!{!-|!!{-!{-!{-!{!-{!-|!!{-!{-!{-!{-!{-!{!-{!-|!!{!-{!-|!!{!-|!!|!!|!!|!!|!!}!€|!!|!!}€!}€!}!€}!€|!!}€!}€!}!€}!€}!€}!€|!!|!!}€!}!€|!!}€!}!€|!!}€!|!!}€!}€!|!!|!!|!!~ƒ,}€!|!!}€!}!‚,|!!|!!|!!|!!|!!},‚!|!!|!!}!€|!!|!!~ƒ,|!!}€!}€!}€!}!€~,ƒ}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!|!!|!!|!!|!!}!€}!€}!€|!!}€!}€!~}!€|!!}€!}€!}!€}!€}€!~~}!€}!€}!€}!€}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!{!-{!-|!!|!!{-!{-!{!-y-~-{!-y-~-{!-y-~-y-~-x)„-y-~-s9†)t9-y-~-w-ƒ4y-~-t-9y-~-t-9y-~-t-9y-~-y-~-y-~-y-~-w4ƒ-y-~-s)†9y-~-y-~-y-~-x-„)x-„)y-~-x)„-{-!y-~-x)„-{!-z!„){!-z!„){!-{!-{!-{!-|!!|!!{!-|!!{!-{!-|!!|!!|!!|!!|!!|!!{!-|!!{-!{-!},‚!{-‚,{!-{!-}!‚,|!!{-!{-!{-!{!-|!!|!!|!!}!‚,}!‚,|!!}!‚,|!!|!!|!!}!€}!€|!!}€!}€!}!€|!!}€!}€!}€!~}!€}€!~}!€}€!~~~}!€~~}!€~}€!}€!}€!}€!~}!€}€!}€!~}!€}!€}€!}€!~}€!}€!~}!€}€!}€!~}€!}€!}€!}€!~}!€~}!€}€!~}€!}€!~~|!!}€!}!€|!!|!!}€!|!!}€!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!},‚!|!!}!‚,}!‚,|!!},‚!{!-}!‚,{!-{!-},‚!{-‚,y-~-{,‚-y-~-{6-{,‚-y-~-{,‚-{,‚-~6…,y-~-{,‚-{-‚,{-‚,{-‚,y-~-{-‚,y-~-{,‚-{,‚-{,‚-{,‚-},‚!{-!},‚!{,‚-},‚!{!-}!‚,{!-},‚!|!!|!!},‚!}!€|!!~}!€~}!€}!€~}€!}€!~}!€}€!}€!}€!~}€!}€!}€!}!€~}€!}!€}€!}€!~}!€}€!}€!}€!~}!€}!€}€!~}€!~}!€~}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~~~~}!€~~~~}€!~}!€~}!€}€!~~~}!€~}!€~~}!€}€!}€!}€!~|!!}€!~}!€~}!€}€!~|!!}€!}!€}!€}!€|!!}€!~|!!}€!|!!~}!€}!€}!€}€!}!€|!!}€!}€!}€!}!€}!€|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!{!-|!!|!!{-!{-!|!!{-!|!!{-!|!!{-!|!!{!-|!!{-!|!!{-!{-!{-!|!!{-!|!!|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!}€!}€!}!€}€!|!!}!€|!!|!!~|!!}€!}!€}!€}€!}!€}!€}!€}!€|!!}€!|!!}€!|!!|!!}€!}!€},‚!|!!}!‚,~ƒ,|!!}!€|!!|!!}!‚,|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€~,ƒ|!!}!€}!€~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~{€-}€!|!!}€!|!!|!!}€!}€!}!€}!€}!€}!€|!!}€!}!€}!€}!€}€!}!€}€!}€!}!€}!€}!€|!!}€!}€!}!€}!€|!!}!€|!!|!!|!!}!€{-!|!!|!!{-!y-~-{!-{!-y-~-{!-|!!x-„)y-~-y-~-x)„-y-~-y-~-y-~-y-~-t9-y-~-t-9y-~-t9-t9-t-9y-~-t9-t-9x)„-t9-y-~-x)„-t9-y-~-y-~-x-„)y-~-y-~-y-~-{!-x)„-{!-{!-{!-{!-z!„){!-{!-|!!z!„){-!{!-{!-{-!{-!z!„)|!!|!!|!!|!!{-!{!-{!-|!!{-!{-!{!-{!-{!-|!!},‚!{-!{-!},‚!},‚!|!!{!-}!‚,{-!}!‚,{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€|!!}€!}!€}!€}!€}!€}!€}!€}!€}!€~}€!}!€|!!~|!!~}€!~~~~}!€}!€}!€~}€!~}€!}€!}€!}€!~}!€}€!}€!}€!~}!€}!€}€!}€!~|!!~}!€}€!~}!€}!€~}!€}€!~|!!}€!}!€|!!|!!}€!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!}!‚,|!!|!!},‚!|!!},‚!},‚!},‚!}!‚,|!!{!-|!!{!-}!‚,{!-~,…,}!‚,{-!},‚!{-‚,{,‚-{-!{,‚-~,…,y-~-{,‚-~,…,y-~-{,‚-{,‚-{,‚-~6…,{-‚,{,‚-{,‚-}6‚!~,…,{-‚,y-~-{,‚-{,‚-{,‚-{,‚-~,…,y-~-~,…,}!‚,}!‚,},‚!|!!|!!},‚!},‚!|!!|!!|!!|!!}€!}€!}!€~}!€}!€}!€}€!~}!€~}€!}€!}€!}€!~~}!€}!€~}!€}€!~}!€}!€~}€!}!€~}€!~|!!~}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~}€!~}€!}€!~~~~}€!~~~~~}€!~}€!~}!€~}!€~~~~}€!~}!€}€!~}!€~}!€}!€}€!}€!}€!~}!€}!€}€!~}€!}€!}€!}!€}€!|!!}€!~|!!}€!}€!}€!~|!!}€!}€!}!€|!!}€!}!€}!€}€!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!{-!{-!|!!{-!{!-{!-|!!{!-|!!{-!{-!|!!{-!{!-{!-|!!|!!{-!|!!{-!{!-|!!|!!{!-|!!|!!|!!}€!}!€}!€}!€}!€|!!}€!}!€}€!~|!!}!€}!€}!€}!€}!€}!€}!€}!€}!€|!!}€!|!!}!€|!!}€!|!!|!!}!€|!!}!€}!€}!€|!!|!!},‚!}!‚,|!!}!€},‚!|!!|!!~ƒ,}!€}!‚,~ƒ,}€!}!€~ƒ,}!€~ƒ,~~,ƒ}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~}€!~~|!!|!!|!!|!!|!!}€!|!!|!!~}€!}€!}!€~}!€}€!}€!}!€}!€~}!€}!€}€!}€!~}!€|!!|!!}€!|!!}€!|!!}!€|!!|!!|!!|!!{-!{-!|!!|!!{-!z!„)|!!y-~-y-~-y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-w4ƒ-y-~-t-9x)„-t9-y-~-w4ƒ-t9-y-~-y-~-y-~-y-~-x)„-s9†)y-~-y-~-y-~-x)„-x-„)y-~-x-„){-!{-!z)„!{-!{-!{-!x)„-|!!{!-z!„)|!!{!-{!-|!!|!!{!-|!!{-!|!!{-!|!!{-!}!‚,{!-{!-}!‚,|!!{-!{-!{-‚,}!‚,{-!{-!},‚!{-!|!!{!-|!!|!!},‚!|!!},‚!|!!|!!}€!}!€|!!}!€|!!|!!}€!|!!}!€}!€|!!~}€!~~~~}€!~~~}!€~|!!~}!€}€!}!€}€!}€!~}€!}!€}!€}!€}!€|!!~}€!}€!~}!€}!€}€!}€!~}€!~~~~}€!~}€!}€!~~|!!}€!|!!}€!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!{-!|!!|!!}!‚,|!!|!!},‚!|!!|!!|!!|!!|!!}!‚,}!‚,|!!},‚!y-~-|!!{-!},‚!{-‚,{-!{-‚,{,‚-{,‚-{-‚,{-6{,‚-{-‚,{-‚,{6-{-‚,{-‚,y-~-{-‚,{-‚,y-~-~,…,y-~-~,…,{-‚,{-‚,y-~-~,…,{,‚-{,‚-}!‚,{!-{,‚-|!!{-‚,}!‚,|!!|!!|!!|!!}!€~,ƒ|!!}!€}!€~}!€}!€}€!}€!}!€}€!~}!€}!€}€!}!€~}!€}!€}!€}€!}€!~}!€}!€}!€}€!}!€}!€}€!}€!}!€}!€}!€}€!~~}€!~}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~~}!€~~~~}!€}€!}€!}€!~}€!~~~}!€~}!€}!€}€!~~}€!~}!€~~}!€}!€|!!}!€}!€}!€}!€}!€}!€}!€|!!}€!}!€}!€|!!}€!}€!}!€|!!}€!}€!}!€|!!|!!}€!}€!}€!}€!}€!}€!}€!|!!|!!}€!|!!|!!{-!{!-|!!|!!|!!|!!{!-|!!{-!|!!{-!{!-|!!|!!|!!{-!{!-{!-{!-{!-{!-|!!{-!{!-{!-|!!{-!|!!{-!|!!|!!{-€|!!|!!|!!|!!|!!|!!|!!|!!~}!€}!€}!€}!€}!€|!!}!€|!!}€!}€!}€!}€!}€!|!!}!€|!!}€!|!!}!€|!!}€!}€!|!!|!!~ƒ,|!!|!!~,ƒ|!!|!!|!!|!!|!!|!!~,ƒ~,ƒ~,ƒ}!‚,}€!}€!|!!~ƒ,}€!~ƒ,}€!}€!}!€}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!|!!|!!}!€|!!}€!}!€|!!}!€|!!~|!!}€!}!€}!€}€!}€!}€!}!€}!€}!€}€!}€!}€!}€!~|!!}€!}€!}!€|!!|!!|!!|!!|!!|!!{!-{!-|!!{-!{-!y-~-|!!x-„){-!y-~-y-~-y-~-x-„)y-~-y-~-y-~-t-9y-~-t9-t9-t-9y-~-t9-y-~-t-9y-~-y-~-t-9x)„-t9-s)†9y-~-y-~-y-~-s9†){-!y-~-{-!x-„){!-{!-x)„-{!-|!!{-!{-!{!-|!!{-!{-!{-!{-!|!!|!!{-!|!!|!!|!!{-!|!!{-!{!-{!-|!!},‚!{!-{!-{!-{!-}!‚,{!-|!!},‚!{!-}!‚,|!!{-!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!}!€}!€}€!}€!~}!€}!€~}!€}!€}€!}€!}€!~}!€~}!€~}!€}€!~|!!~~}€!~~~}€!~~}€!}!€~|!!~}!€}!€}!€}€!~~}!€~}€!}!€}€!~~}!€}€!~}€!}€!}!€}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,}!‚,|!!|!!},‚!|!!|!!}!‚,|!!|!!{-!{!-|!!},‚!{-!|!!{,‚-}!‚,{!-}!‚,~,…,{,‚-{-‚,{,‚-{,‚-{,‚-{,‚-{-‚,{6-{-‚,{,‚-{,‚-{-‚,{,‚-~,…,{-‚,{-‚,y-~-{-‚,{-‚,{-!{,‚-{,‚-{,‚-}!‚,{,‚-}!‚,}!‚,{,‚-}!‚,|!!|!!},‚!|!!|!!},‚!|!!}!€}€!~}!€}!€}€!~}!€}€!~}!€}€!}€!}€!}€!}€!}€!}€!}€!}!€|!!}€!~}€!}€!~~~}!€}€!}€!~}!€}€!}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~}!€~~~}!€~~~~~~~~~~~}!€~~}!€|!!~}€!~}€!~~}€!}€!~~~}€!~~}!€}€!}€!~}!€~}€!}!€}!€}€!}€!}€!}€!}€!}!€}!€}!€}!€|!!}€!~}!€}!€}!€}!€|!!}€!}€!}!€}!€}€!|!!|!!|!!|!!|!!|!!{-!{-!{!-|!!{-!{!-{!-|!!{-!|!!{-!{-!{!-|!!|!!|!!|!!{-!{!-|!!{-!{-!{-!|!!{-!{-!|!!{-!{€-|!!|!!}€!|!!}€!}!€|!!}€!}€!|!!}€!|!!}!€|!!}€!}€!}!€}!€|!!}€!}!€}€!}€!}€!|!!}€!}€!}€!}!€|!!}!€|!!|!!|!!}!€|!!|!!},‚!|!!|!!}!‚,|!!|!!|!!|!!~ƒ,|!!~ƒ,|!!~ƒ,}!€},‚!}€!}!€}!€}€!}!€~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~|!!}!€|!!|!!|!!|!!}!€|!!~}!€}!€~}!€}!€~|!!|!!~}!€~~}€!}!€|!!~}!€}!€}!€}!€|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!{-!{-!{!-|!!y-~-{!-{!-y-~-{!-y-~-{!-x-„)y-~-w-ƒ4t-9y-~-y-~-y-~-t9-t-9t-9r4†9y-~-w-ƒ4y-~-x)„-t-9x)„-y-~-t-9x)„-y-~-x)„-y-~-x)„-y-~-x)„-x-„){-!{-!{-!x-„)x-„){!-z!„){!-{-!{-!{!-{!-{-!{-!|!!{-!{-!{!-|!!{!-|!!{-!},‚!y-~-{-!{-!{!-}!‚,|!!{-!},‚!{-!{!-},‚!{!-}!‚,|!!{-!},‚!|!!}!‚,|!!|!!|!!|!!}€!|!!}!€|!!|!!}!€~,ƒ}!€}!€}€!~}!€~~~}!€~~~~}!€~}!€}€!}€!~~}€!}€!}€!}€!}!€}!€|!!}€!}€!~~}!€~}!€}€!}!€~}!€}!€}€!~}!€}!€~~}!€}€!~}!€}€!}€!}!€|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!},‚!|!!|!!|!!|!!|!!}!‚,|!!}!‚,|!!|!!},‚!},‚!|!!|!!{!-|!!},‚!},‚!{-!{-‚,{-!},‚!{-‚,{-‚,y-~-~,…,{-‚,{-‚,{-‚,{6-{,‚-{,‚-{-6{-‚,{,‚-{-‚,y-~-~,…,{,‚-~,…,y-~-y-~-{-‚,{-‚,{-‚,{-‚,},‚!y-~-},‚!{-‚,|!!{-!}!‚,{!-|!!},‚!}!‚,}€!|!!|!!}!€}!€~}!€}!€}!€}€!~}€!~}!€}!€}€!}€!}€!~}!€}!€}!€~~}€!}!€~}!€}!€}!€}€!}€!~}€!}!€}!€}!€~}€!~}!€~~~~~~~~~~~~~~~~~~~~~~}€!~~~~~~~~~~}€!~~~}!€}€!~}!€~~~~}!€~~~~}!€~~}€!~}€!~~}!€}!€~}€!~}!€}!€}!€}!€~}!€|!!}€!}€!}€!}!€}€!}€!~|!!}€!}€!}!€}!€|!!}€!}€!}€!}€!|!!}€!}€!|!!}€!}€!|!!}!€}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!{-!|!!{-!|!!{-!|!!|!!{-!{!-{!-{!-{!-{!-|!!{!-|!!{-!{!-|!!|!!{!-|!!|!!{-!|!!|!!|!!}€!|!!}€!}!€|!!}!€}!€}!€~}!€}!€}€!}€!~|!!}€!~}€!}€!}!€|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!}!€},‚!|!!|!!}€!|!!|!!}€!~ƒ,|!!|!!|!!|!!|!!|!!}€!}!€}!€}!€}!€~,ƒ|!!}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~}!€~{!-{!-}!€|!!|!!|!!}€!|!!}€!}!€}!€|!!}!€|!!}!€}!€}€!}€!}€!~}!€}!€}!€~|!!~|!!}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!{-!{-!{-!{-!{-!y-~-{-!y-~-y-~-y-~-y-~-y-~-s9†)t9-t-9t-9t-9y-~-y-~-y-~-y-~-t9-y-~-t-9x-„)t-9x-„)y-~-w4ƒ-w-ƒ4y-~-x)„-x-„)x-„)x-„){-!y-~-z!„){!-|!!|!!{-!{-!{-!|!!{-!|!!},‚!|!!|!!{-!|!!{!-|!!|!!{-!{!-}!‚,{!-|!!|!!{-!{-!{!-{!-|!!{-!{,‚-{-!|!!{-!|!!{-!},‚!|!!|!!}!€~,ƒ},‚!|!!|!!|!!|!!}!€|!!}€!|!!}€!}!€|!!}€!}!€}€!~}!€}!€~}€!}€!~}!€}€!}!€~~~}€!}€!~}€!~}€!}€!~~~}€!}€!}!€}!€}!€}!€~~~~}€!~}!€}€!~~}!€~}!€}€!}€!~|!!}€!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!},‚!|!!|!!|!!|!!|!!},‚!|!!}!‚,|!!}!‚,|!!|!!}!‚,}!‚,}!‚,|!!{!-{!-{!-}!‚,}!‚,{!-{,‚-},‚!{-!{,‚-~,…,y-~-~,…,{-‚,{-‚,y-~-{-‚,{-‚,{,‚-y-~-{,‚-{-‚,y-~-{,‚-y-~-{6-~,…,{-‚,y-~-~,…,{-‚,{-‚,|!!{,‚-|!!{,‚-}!‚,{-!|!!|!!|!!|!!|!!|!!|!!}!€}€!}€!}€!~}€!}€!~}!€}!€}€!~}!€}!€}!€}!€}!€}€!~}!€|!!}!€}!€|!!}€!}€!}€!~~}€!~}€!~}!€}€!~}!€~}!€~~}€!~~~~~~~~~~~~~~~~~~~~~~~}!€}!€~}!€~~~~}!€~~~~~~~~~~}!€~~}!€~}€!}€!~~}!€~}!€~}!€}!€}!€}!€~}!€}€!}€!}€!}!€}!€}!€|!!}€!}€!}€!}!€}!€}!€}!€}!€}!€}!€}!€}!€|!!}€!}!€}!€}!€}!€}!€}!€|!!}€!}€!|!!}€!}€!|!!|!!}!€{-!{-!{!-|!!{-!|!!|!!{-!|!!{-!{!-|!!{!-{!-{!-|!!{-!|!!|!!|!!|!!{-!{!-{-!|!!{-!{!-{!-|!!{!-|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}€!}€!}€!|!!}!€|!!}!€}!€|!!}€!}€!}€!}!€|!!~}!€|!!}€!}€!}€!|!!|!!}!€|!!~ƒ,}€!}!€},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,~ƒ,}€!|!!}!€}€!}!€~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~|!!|!!{!-|!!|!!|!!}!€}!€|!!~}!€}!€~}!€}!€|!!}€!}€!~}!€~}€!}€!}€!~|!!}€!|!!}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!{!-{!-|!!{-!{!-x)„-{!-{!-{!-y-~-y-~-x-„)y-~-y-~-y-~-y-~-y-~-t9-y-~-y-~-t-9t-9t-9y-~-y-~-t9-w-ƒ4y-~-w4ƒ-y-~-y-~-y-~-x)„-y-~-x-„)y-~-{-!y-~-{!-},‚!{,‚-{!-{-‚,{-!{-!x)„-{!-{!-|!!{-!{!-{-!{-!|!!{-!|!!{-!{-!{-!|!!},‚!{-!{-!{-‚,|!!{!-|!!{-‚,{-‚,}!‚,|!!{!-},‚!|!!{-!|!!|!!},‚!},‚!},‚!|!!|!!|!!|!!}!€|!!|!!|!!}!€}!€}!€}!€}!€}!€}€!~}€!~~}€!~~~}€!~~|!!}€!}€!~}€!}€!~~}!€~}!€}!€}€!~}€!~~}€!~}!€}€!~}€!~~~~}€!~~|!!}!€}!€}!€|!!~}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!},‚!{!-}!‚,|!!|!!|!!{!-}!‚,|!!}!‚,{!-}!‚,{-!{-!}!‚,{-‚,{-‚,{,‚-~,…,{,‚-{,‚-{,‚-~,…,{-‚,{,‚-{-6{,‚-{-6y-~-{,‚-{-‚,{,‚-{-‚,{-6{,‚-{-‚,y-~-{!-{,‚-~,…,},‚!{-‚,|!!},‚!}!‚,}!‚,|!!}!‚,|!!|!!}!€}!€|!!~}!€~}€!}€!~|!!}€!~|!!}€!}!€}!€}!€}€!~}!€}!€}€!~~}!€~}€!~}!€}€!}€!}€!}€!}!€~}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~~~}!€}!€}€!~}€!~~}!€~}€!~}€!~~~~}€!~~}€!~~}!€}!€~}!€}€!}€!~~}€!~}!€}!€}€!}€!}€!~}!€}!€}!€}!€}€!}!€|!!}€!}!€}!€}!€}!€|!!}€!}€!}€!}€!}€!}€!}€!|!!}€!|!!}!€}!€}€!}€!|!!}!€|!!|!!{!-|!!|!!|!!{-!|!!y-~-|!!|!!{-!|!!{-€{!-|!!|!!{!-|!!|!!{-!{-!{-!{-!{!-|!!|!!{-!|!!{-!|!!{!-|!!|!!|!!{-€|!!|!!}€!}€!|!!}!€|!!}€!}!€}!€}€!}!€}!€}!€|!!}€!}€!}!€}!€|!!}€!|!!}!€|!!}€!|!!|!!}€!}!€|!!|!!|!!}!€|!!}!€|!!|!!}€!}!‚,|!!~,ƒ~,ƒ},‚!|!!|!!|!!}!€}!€|!!}€!}!€~~,ƒ}!€}!€~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~}!€}!€|!!{!-|!!|!!|!!|!!}€!}€!}!€}€!~}€!}!€}!€}!€}€!~}!€}!€|!!}!€}€!}€!~}!€}!€}!€|!!}!€|!!}!€|!!|!!}!€|!!|!!|!!{!-|!!|!!{!-|!!{-!{-!{-!y-~-y-~-{!-{!-y-~-y-~-y-~-y-~-t-9y-~-y-~-t9-t9-t9-y-~-y-~-y-~-t9-y-~-y-~-w-ƒ4y-~-w4ƒ-t-9x)„-x-„)x-„)y-~-x)„-x-„){!-{-!{-!{-!z)„!|!!{-!{-!{-!{-!{-!{!-|!!{-!|!!|!!{!-|!!},‚!|!!{-!|!!{-!{-!}!‚,|!!},‚!|!!{-‚,{-!|!!|!!{-!{!-|!!{!-{!-|!!~,…,|!!|!!|!!}!‚,|!!|!!|!!}€!|!!}!€}!€|!!}€!}!€|!!}€!}€!}€!~}!€}!€~}!€}!€~}€!~}!€~}!€~~~}€!~~}€!}!€~}!€}€!}€!}€!}€!~~}!€}!€}!€}€!~}!€~~}€!}€!~}!€}€!}€!~~}!€}!€}!€|!!}€!}€!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!}!‚,|!!|!!|!!},‚!|!!|!!|!!|!!}!‚,|!!},‚!|!!~,…,{-!}!‚,{!-}!‚,}!‚,{,‚-y-~-{,‚-{,‚-y-~-{-‚,y-~-{,‚-{-‚,{-6y-~-{,‚-{-‚,{-‚,~,…,{-‚,y-~-~6…,{-‚,{,‚-y-~-{,‚-~,…,{,‚-}!‚,{-!{-!{!-},‚!{-!{-!|!!}!‚,|!!|!!|!!|!!},‚!}€!}€!~}!€}!€}€!}€!~}€!}!€}!€}!€}€!~}€!}!€}€!}€!}€!}!€}!€|!!~|!!~}!€}!€~|!!~~}€!~}!€}!€}!€}!€}!€~}€!~~~~~~~~~~~~~~~~~~~~~~~~~}!€~}!€}€!~~}!€}€!~~}!€~}!€~~~}€!~~}€!~}!€}€!~}!€}€!~}€!}€!~~~}€!~}!€}€!~}€!~|!!}!€|!!}!€}!€}!€}!€}!€~}!€}!€}!€|!!}€!}!€|!!}€!}€!}€!}!€}!€|!!}!€}€!|!!~|!!}€!|!!}€!~|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!{!-{!-|!!{-!{-!{-!{-!{!-|!!{!-{!-|!!|!!|!!{-!{-!{-!{!-{!-{!-|!!{!-|!!|!!{-€{-!|!!|!!|!!|!!|!!}!€|!!~|!!}€!}€!}!€}€!}€!}€!}€!}!€}!€}€!}€!~}!€}!€}!€}!€|!!}€!}€!}!€|!!}!€~,ƒ|!!|!!|!!|!!|!!|!!},‚!|!!},‚!|!!|!!~ƒ,|!!~,ƒ~,ƒ},‚!}!€~,ƒ~,ƒ}!€},‚!}€!}€!}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~~~}€!~~~|!!|!!|!!|!!|!!}€!|!!|!!}€!}!€}€!~|!!}!€}!€}!€}!€~}!€~}€!~~|!!~}€!}€!}€!}€!}!€|!!}!€}€!|!!|!!|!!|!!{-!|!!{-!{-!{!-|!!{-!y-~-{!-{-!t9-{-!y-~-y-~-x-„)t9-y-~-t-9t9-y-~-y-~-t-9y-~-t-9y-~-y-~-t9-t-9y-~-y-~-y-~-x-„)t9-y-~-y-~-y-~-{!-y-~-{-!x-„)x-„)y-~-{!-y-~-z!„){!-{!-|!!x)„-{-!{-!|!!{-!{-!{-!{!-|!!{!-|!!y-~-}!‚,{!-{!-}!‚,{!-{,‚-|!!{!-{!-{!-}!‚,{!-{!-|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€}€!~}!€~}!€~}€!~~}€!~}!€}€!~~~|!!~}!€~}€!}€!~~~}!€}€!~~~}!€}€!~~~}!€}!€}€!~}!€~~}!€~}!€~}!€}€!}€!}€!}€!}!€|!!|!!}!€|!!|!!|!!|!!|!!{!-|!!|!!{-!}!‚,}!‚,|!!|!!|!!|!!}!‚,|!!|!!},‚!}!‚,|!!|!!},‚!},‚!},‚!{!-{!-|!!{-!|!!},‚!{-!~,…,{!-{!-}!‚,}!‚,{-‚,{,‚-~,…,{-‚,{-‚,{-6{-6{-‚,{,‚-{6-~,…,y-~-{-‚,{-‚,}6‚!y-~-{,‚-{-‚,~,…,{-‚,{-‚,{-‚,},‚!}!‚,}!‚,},‚!},‚!}!‚,|!!},‚!|!!|!!|!!|!!|!!}€!}!€}€!~}€!~~~}€!}!€}!€}€!}€!}!€|!!}€!~}!€}!€~}€!}€!~}!€}!€}!€}!€~}!€}!€}!€|!!}!€~}€!~}€!~~}!€~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~~}€!~~~~}!€~}€!}€!~}!€~~~~~~~~}€!}€!~}€!~~}!€}€!~~|!!}€!~}!€}€!~~|!!}€!~|!!}!€}€!}€!}€!}€!|!!}€!}€!|!!}€!~}!€|!!}!€|!!}€!|!!}€!}!€}!€|!!|!!}!€|!!|!!|!!|!!|!!{-!|!!{-€|!!|!!|!!|!!{-!|!!|!!{-!|!!{!-|!!|!!|!!{-!|!!|!!{!-{!-{!-|!!|!!{-!{-!|!!|!!{-!{-!|!!{-!{!-|!!|!!|!!|!!|!!|!!}€!}!€|!!}€!|!!}€!~|!!}€!}!€}!€}€!}€!~|!!}€!}!€|!!|!!|!!}€!|!!}!€|!!}!€|!!}€!~,ƒ|!!|!!|!!|!!|!!~ƒ,}€!|!!|!!|!!~,ƒ|!!|!!|!!}€!}!‚,}€!|!!|!!}€!}!€}!€}!€}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~{€-{!-{!-|!!|!!|!!}!€}!€}!€~|!!}€!}€!~}!€}€!~|!!~~|!!~|!!~}€!}€!}€!|!!}€!}€!}!€|!!|!!}€!|!!|!!|!!|!!|!!{-!|!!{-!y-~-|!!|!!{-!y-~-|!!y-~-x-„)y-~-y-~-y-~-w-ƒ4y-~-y-~-y-~-t9-y-~-t9-y-~-t-9x)„-w4ƒ-x)„-x-„)t9-y-~-t9-y-~-y-~-{!-x)„-x)„-w)‰)y-~-{!-{!-{!-x)„-z!„){!-{-!{-!{!-|!!|!!x-„){-!{!-|!!|!!|!!{!-|!!{,‚-|!!{-!{-!},‚!{-!{-!|!!{!-|!!{-!}!‚,{-!},‚!},‚!},‚!},‚!|!!}!‚,|!!|!!},‚!|!!},‚!|!!|!!|!!|!!|!!}€!}€!|!!|!!~|!!~|!!~~~~~~~~~}€!}€!}€!~}€!}€!~~~}!€}€!}€!}€!~}!€|!!}€!}€!~}€!~}!€~}€!~~~~}!€~~~}!€}!€~}!€}!€}!€|!!}€!|!!|!!|!!|!!},‚!|!!},‚!|!!|!!},‚!|!!|!!|!!},‚!|!!}!‚,}!‚,|!!|!!|!!|!!|!!|!!}!‚,|!!|!!{!-|!!|!!},‚!}!‚,{-!{-!~,…,{!-}!‚,},‚!{-‚,{-!{,‚-y-~-{,‚-y-~-~,…,{-‚,{,‚-{,‚-{-‚,~,…6y-~-{-‚,{-‚,{-‚,{-6{-‚,{-‚,y-~-y-~-{!-{,‚-}!‚,{-‚,},‚!{,‚-{!-}!‚,},‚!},‚!|!!},‚!}!‚,|!!},‚!|!!|!!}€!}!€}!€~}€!}€!|!!}!€}€!~}!€}!€}€!}€!}€!}!€}€!}€!}€!}!€}!€}!€~}€!}€!~}!€}!€}!€}!€~~}!€}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~}!€~~}€!~~}€!~~~~~}!€~~}!€~}€!~}€!~~~~~}!€}€!}!€}€!~~~}€!}€!~}€!|!!}€!~}!€~~|!!}€!}!€}!€}!€|!!}!€}€!}!€|!!}€!}!€}€!~}!€}!€|!!|!!|!!|!!}€!}€!}€!}€!|!!|!!|!!|!!|!!{!-{!-{!-|!!{-!|!!{-!{-!|!!{-!|!!{!-|!!{-!|!!{!-|!!{-!|!!|!!{!-{!-|!!{!-{!-{!-|!!|!!{-!|!!|!!}!€{-!|!!}!€|!!}€!}€!}€!}€!}!€}!€}!€|!!}!€}!€}€!}€!}!€}€!}€!~}!€}!€}€!}!€|!!}!€}!€|!!|!!|!!}€!|!!}€!|!!}€!}€!|!!~ƒ,|!!|!!}!€},‚!|!!|!!}!‚,|!!},‚!}!‚,}€!|!!~ƒ,}€!}€!~~,ƒ}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€}€!~}!€}€!~}!€}!€}€!~}€!~}!€~}!€|!!~|!!~|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!{-!{!-{!-|!!{!-{-!y-~-y-~-{!-y-~-{-!y-~-{-!y-~-t9-y-~-t-9y-~-t9-y-~-t9-y-~-t9-y-~-t9-y-~-y-~-y-~-w-ƒ4y-~-x)„-x)„-s)†9y-~-y-~-x)„-y-~-x)„-{-!{-!{-!{-!{-!{-!z)„!{-!{-!x)„-|!!{-!|!!{-!{!-|!!{-!|!!{-!|!!{!-|!!{-!{-!|!!{!-},‚!|!!{-!{!-|!!|!!{-!}!‚,|!!{-!{-!|!!|!!},‚!|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!}!€}!€|!!}!€}!€~}!€}!€~~}€!~~~~~~~~}!€~}€!}!€~~}€!~~}!€~~~~}!€~~~}!€~~}€!}€!~~~}€!}€!~}€!}!€}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!~,…,|!!|!!|!!|!!}!‚,|!!|!!}!‚,{!-|!!{-!}!‚,{!-|!!{-!},‚!{-‚,}!‚,~,…,{-‚,{!-{,‚-{,‚-{,‚-{,‚-y-~-~,…,{,‚-{-‚,{,‚-{6-~,…,}6‚!y-~-{,‚-{,‚-~,…,{-‚,{-‚,y-~-~,…,{-!{-‚,|!!},‚!{-!{!-|!!},‚!|!!|!!|!!|!!|!!}!€|!!}!€}€!}€!}!€~~~}!€|!!}!€}!€}!€}!€}!€|!!}!€}!€}!€}€!~}€!}€!~|!!}€!}€!}!€}€!~|!!}€!}€!~}!€}€!~}!€~~~~}!€~~~~~~~~~~~~~~~~~~}!€~~~}!€}€!~~}!€~}!€}€!~~~}!€}€!}€!~~}!€~~}!€}!€}€!~}!€}!€}€!}!€~}!€}€!~}!€}!€}€!}!€}!€}!€}€!~}!€}€!|!!}€!}!€|!!}!€|!!}€!}€!}€!~}!€|!!|!!}€!}!€|!!}€!|!!|!!|!!}!€|!!}€!|!!}€!|!!}!€|!!}€!|!!}€!{!-|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!{-!{-!|!!{-!|!!{-!{-!|!!|!!{!-{!-|!!|!!{!-{!-{!-{!-{!-|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!}€!~}!€}!€}€!|!!}€!}!€}!€}!€|!!}€!}€!|!!}€!|!!~}!€}€!|!!}!€|!!}€!|!!}€!|!!|!!}!‚,|!!|!!|!!|!!},‚!}!‚,|!!}!‚,|!!|!!|!!}€!}€!}!‚,}€!}€!~ƒ,}!€~,ƒ}€!}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~}!€~~}!€~{-!{-!{-!|!!|!!|!!|!!|!!~}€!}!€}!€|!!}€!}€!~}!€}!€}€!~}!€~}!€}€!~}!€}€!|!!}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-{!-|!!{-!{!-y-~-{!-y-~-y-~-t-9y-~-y-~-y-~-y-~-t9-y-~-t9-w-ƒ4t-9y-~-y-~-y-~-t-9y-~-t-9y-~-y-~-y-~-y-~-x-„)x-„)y-~-y-~-x-„){-!y-~-x-„)y-~-{!-x)„-|!!{-!x-„){!-|!!{-!{-!{-!{!-|!!|!!},‚!{-!{!-|!!{-!|!!{!-|!!}!‚,|!!{!-}!‚,|!!},‚!},‚!{-!{!-|!!{!-|!!}!‚,|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!}!€~}!€}!€~~~~~~~~}!€~~}!€}!€~}€!~}€!~}€!~~}€!~}!€~~}!€~~}!€}!€~~}€!~~~~}€!~~}€!~}!€}€!~|!!}!€|!!}€!|!!|!!}!‚,|!!|!!|!!|!!|!!{-!|!!{!-}!‚,{!-}!‚,|!!},‚!}!‚,|!!|!!|!!|!!},‚!},‚!},‚!{-!|!!},‚!}!‚,}!‚,}!‚,}!‚,}!‚,}!‚,},‚!{,‚-}!‚,{!-{!-{!-~,…,{,‚-{-‚,{-‚,{,‚-{-6{-‚,{-‚,{-‚,{-‚,{-‚,y-~-{!-~,…,{-‚,{-‚,y-~-{-‚,{6-},‚!{-!}!‚,y-~-}!‚,{-!},‚!|!!},‚!|!!}!‚,|!!|!!|!!},‚!|!!|!!}!€}!€~~}!€}!€}!€}!€~}!€~}€!}!€}!€}!€|!!}€!}€!}!€|!!}!€}!€|!!~}€!~~}!€}!€}!€~}!€}!€~~~}€!~~}!€~~~~~~~~~~~~~~~~~~}€!~~~}!€~~~~}€!~}!€~~}!€}!€~}€!~~}€!~}€!~}!€~}€!~}!€~}€!~~}!€}€!~}!€}!€}€!}!€~|!!~}€!~|!!}€!~}!€}€!}€!~}€!}€!|!!}€!}€!|!!}!€}!€|!!}€!}€!|!!}€!}€!}€!|!!}€!|!!}€!}!€}!€}€!}€!}!€|!!{-!|!!|!!{-€{!-|!!|!!{-!|!!{!-|!!{!-|!!|!!{!-|!!{-!|!!|!!{!-{!-|!!|!!|!!{-!{-!{-!|!!|!!|!!{!-|!!|!!{-!}!€{-!|!!|!!}€!}€!|!!}€!}!€}€!}€!}€!}!€}!€}!€|!!}€!}€!~~}!€}!€|!!~|!!}€!}!€}!€|!!}€!|!!}€!}!‚,}€!|!!}€!|!!|!!|!!|!!|!!|!!~ƒ,|!!}!‚,}€!~ƒ,|!!~,ƒ|!!}€!|!!~,ƒ}€!}€!}!€~}€!~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~|!!|!!{-!{!-|!!|!!}!€}!€|!!}€!~|!!}€!~~}!€}!€~}!€}!€}€!}€!}€!}€!}€!}€!~}€!}€!|!!|!!|!!}€!}€!}€!|!!|!!{!-|!!{!-|!!{-!{-!{-!y-~-{-!y-~-y-~-y-~-{-!y-~-y-~-y-~-y-~-t9-y-~-t9-t-9y-~-y-~-y-~-t-9y-~-y-~-s)†9x-„)y-~-w4ƒ-y-~-w4ƒ-y-~-{-!y-~-z)„!y-~-x-„)x-„){!-z)„!{-!{-!x-„){!-{!-{!-{!-|!!|!!{!-|!!{!-{-!{!-|!!{-!}!‚,}!‚,{!-|!!},‚!{-!{-!{-!|!!{-!|!!|!!},‚!}!‚,{!-|!!}!‚,|!!}!‚,|!!|!!|!!|!!},‚!|!!~ƒ,|!!}€!|!!}!€}!€|!!}€!}€!}!€}!€~}!€~}!€~~~}!€~~}€!~~~}€!~}€!~}!€}!€}€!}€!~}€!}€!}€!}€!~|!!}€!~~}€!~~~}!€~}!€~}!€}!€~}!€}€!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!},‚!|!!},‚!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!{-!|!!|!!|!!|!!{!-|!!{-!|!!{-!},‚!{!-{-!{!-{-!{,‚-}!‚,{-‚,{,‚-y-~-~,…,}!‚6y-~-~,…,{-‚,{-‚,{-‚,y-~-{6-{,‚-{-‚,~,…6}!‚6},‚!}6‚!{-‚,{,‚-{!-{-‚,~,…,},‚!},‚!{-!},‚!{-!},‚!{!-},‚!{-!}!‚,|!!|!!|!!|!!|!!}€!}€!}€!}€!~}!€}!€}€!}€!}€!|!!~}€!}€!~}!€}!€}!€~}!€~}!€}!€}€!}€!}€!}€!~}!€}!€}!€}!€}€!}€!}€!~~~~~~~~~~~~~~~~~~~~}€!}€!~~~~}!€~}€!~~~}!€~~}€!~~~}!€}!€~}€!~~~~~|!!~~}€!~}!€~|!!~}!€~}!€~~}€!}€!~}€!~}€!}€!~|!!}!€}€!}€!|!!~}!€~|!!|!!~|!!}€!}!€}!€}!€|!!}€!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-{!-|!!{!-|!!{!-|!!{-!{!-|!!|!!{-!{!-|!!|!!|!!{-!|!!{!-|!!{!-|!!{-!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}€!}€!|!!}€!}!€|!!}€!}€!~}!€}!€|!!}€!}€!~}!€|!!}€!}!€|!!}€!}!€}!€}!€},‚!}€!|!!}!€|!!|!!|!!~ƒ,~ƒ,}€!},‚!|!!}€!|!!},‚!},‚!}€!|!!~,ƒ}!€~,ƒ|!!}!€|!!}€!}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~{-!{-!|!!|!!|!!|!!|!!|!!~|!!}€!}!€}€!|!!|!!}€!}€!}€!}€!}€!~~}!€~}€!}!€}!€}!€}!€}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!{-!{-!{!-{-!{-!{!-{!-{!-{-!{!-y-~-{-!y-~-y-~-y-~-y-~-y-~-t-9y-~-w4ƒ-y-~-t9-s9†)t-9s)†9y-~-t9-w4ƒ-t-9x-„)y-~-x)„-y-~-{-!x-„){-!x)„-{!-{-!x-„){!-{-!{-!x-„){-!|!!x-„){!-{-!{-!{!-|!!{!-|!!{-!{-!{-!{!-|!!{-!{-!|!!},‚!|!!},‚!{!-}!‚,|!!{-!{-!|!!{-!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€}!€}!€~}!€~~~~~~~}!€}€!~~}!€}!€~}€!~}!€}€!~~}!€}€!~~~~~~}!€}€!~}!€}€!~~~}!€~~~}€!}!€}!€}!€}!€}!€}!€|!!|!!|!!|!!|!!|!!},‚!|!!{-!|!!|!!|!!|!!},‚!|!!|!!}!‚,{!-|!!|!!|!!|!!},‚!}!‚,|!!}!‚,|!!}!‚,|!!|!!},‚!}!‚,|!!{!-|!!},‚!{-!}!‚,{-!{,‚-}!‚,{-!~,…,y-~-{-6{-‚,y-~-~,…,{-‚,{-‚,{-‚,{-‚,{-‚,y-~-{-‚,y-~-{-‚,{-‚,y-~-{,‚-{,‚-{!-{,‚-{-‚,{-!}!‚,{-!}!‚,}!‚,|!!|!!|!!}!‚,|!!},‚!|!!|!!|!!|!!}!€}!€}€!~}!€}€!|!!}€!}!€~}!€|!!}€!}!€}€!~|!!}€!~|!!~}!€}!€~}!€}€!}€!~}!€~}!€}!€}!€~~~}€!~}€!~~~~~~~~}€!~~~~~~~~~~~}!€~~~}€!}€!}€!~}€!~~~}!€}!€~~}€!}€!~~~}!€}!€~~}!€}!€}!€~|!!~}€!~}!€}!€}€!}!€}!€~|!!}!€}!€}€!}!€|!!}€!}€!}!€}!€}€!|!!}€!|!!}!€}€!|!!}€!}!€}!€|!!}!€}!€|!!}!€}!€|!!}!€|!!}!€|!!}€!|!!}€!|!!{-!|!!{!-{!-|!!{!-|!!{-!{!-|!!{-!{-!|!!{-!|!!{!-|!!{!-|!!|!!{-!|!!|!!|!!{-!{!-{!-|!!{!-|!!{-!{!-|!!|!!{-!|!!|!!|!!|!!}€!|!!}€!}!€}!€}€!}!€~|!!~}!€|!!}€!~}!€}!€~|!!}€!}€!~}€!}!€}!€|!!}€!|!!}€!}!€|!!|!!|!!}!€}!‚,|!!}!€},‚!}€!|!!},‚!|!!|!!}!€},‚!|!!~ƒ,|!!}€!}€!~ƒ,~}!€~}€!~~~~~~~~~~~~~~~~~~~~~~~~}€!}€!~}€!|!!{-!{-€|!!{-!|!!|!!|!!|!!}!€}!€}€!}!€}!€}€!~~}!€~~}!€|!!~}!€}!€}€!}€!}!€|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!{!-{-!y-~-y-~-y-~-y-~-y-~-x-„)y-~-x)„-y-~-w-ƒ4y-~-x-„)y-~-t9-t9-w-ƒ4y-~-y-~-y-~-y-~-y-~-y-~-x-„)y-~-y-~-x-„)x-„)x-„)y-~-x-„)y-~-x-„){-!{-!{-!x)„-{!-|!!{!-{-!},‚!{-!z)„!|!!{-!{!-|!!{-!}!‚,|!!{!-{!-}!‚,}!‚,|!!{,‚-|!!},‚!{-!|!!|!!y-~-|!!|!!},‚!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!|!!}€!}€!}€!}€!}€!~~~~~~~~~~}!€~~~}!€~~~}!€}€!~~}€!~}!€~}!€}!€~~}!€}€!~~~}!€~~}!€}!€}!€}!€~}!€|!!}€!|!!|!!|!!~ƒ,~ƒ,|!!|!!|!!|!!}!‚,|!!{-!|!!{!-}!‚,|!!},‚!{-!|!!|!!{!-|!!|!!},‚!|!!|!!|!!|!!|!!|!!}!‚,|!!{-!{-!},‚!{-!},‚!{-!},‚!},‚!{-!{-!{-‚,{-‚,y-~-{,‚-},‚!{,‚-{,‚-y-~-{,‚-{,‚-{,‚-{,‚-y-~-~,…,{,‚-{,‚-y-~-{,‚-{,‚-{,‚-~,…,~,…,{-!}!‚,{!-},‚!}!‚,},‚!{-!},‚!}!‚,}!‚,|!!|!!|!!|!!|!!}!€}!€}!€}!€}€!}€!~}!€~}!€}€!|!!}€!}€!}€!}€!~}!€}€!~}!€}!€|!!~}!€}!€~}!€}!€}!€}!€}!€~~~}!€~}!€~~~~~~~~~~~~~~~~~~~}€!~~~~}!€}€!~~~~}€!~}€!~~~~~}!€~~}€!~}!€~}€!}€!~~}!€~}!€~}€!~}!€}€!~}!€~}€!}€!~}!€}€!}!€}!€}!€}!€|!!}€!|!!}€!}€!}!€}!€|!!}€!}!€|!!|!!|!!}€!}!€|!!}!€|!!}€!|!!}€!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!{-!{-!|!!{-!{!-|!!|!!{-!{!-|!!{-!{!-|!!{!-{!-|!!{-!|!!{-!{!-|!!|!!{!-|!!{-!|!!|!!{-!{-!|!!{-!|!!|!!|!!|!!}€!}!€|!!}€!~}€!|!!}€!}€!}!€}€!}€!|!!~}!€}!€}!€|!!}€!|!!}!€|!!}€!|!!}!€|!!}!€|!!}!€|!!|!!}!‚,}€!|!!~,ƒ|!!},‚!|!!|!!~,…,}€!}!‚,}€!~,ƒ|!!~ƒ,}€!|!!}€!~ƒ,~~ƒ,~}€!~~~~~~~~~~~~~~~~~~~~~~~~~}€!~|!!{-!{!-|!!|!!|!!|!!}!€}!€}!€|!!}€!~}!€}!€}€!}€!}€!~}!€}!€~}!€~}€!~}!€}€!}€!}!€}!€}!€|!!}€!|!!|!!|!!|!!{!-|!!{-!{!-{!-{!-{!-{!-{-!y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-t9-y-~-y-~-y-~-t-9y-~-t9-y-~-s9†)y-~-t-9y-~-y-~-y-~-y-~-y-~-{!-{!-{!-|!!x)„-y-~-{!-z!„){!-{!-{-!{!-|!!|!!{-!{-!{!-|!!|!!|!!{!-{!-{!-}!‚,|!!{-!{!-|!!{!-}!‚,|!!|!!{-!|!!|!!|!!},‚!|!!},‚!|!!},‚!|!!},‚!|!!|!!|!!|!!|!!|!!}!€|!!}!€}€!}€!}€!}!€~}!€~~~~~~~~~~~}€!~~}€!}€!}€!~~}!€}€!~}!€}!€~}€!~~~}!€~}!€~~}!€~}!€}!€~~}!€}€!}€!~}!€}!€}!€}!€|!!|!!|!!{-!|!!{-!{!-|!!}!‚,|!!{!-|!!|!!|!!}!‚,|!!|!!},‚!|!!|!!},‚!|!!}!‚,|!!}!‚,|!!},‚!}!‚,|!!{-!|!!|!!{-!}!‚,|!!{,‚-}!‚,}!‚,|!!~,…,{!-}!‚,{-!~6…,{-‚,{-‚,y-~-{,‚-{,‚-{,‚-{-‚,{-‚,~6…,{-‚,y-~-{,‚-{,‚-y-~-{,‚-{,‚-{,‚-{,‚-}!‚,{-‚,},‚!},‚!},‚!{-!{!-}!‚,{!-|!!|!!},‚!|!!},‚!|!!|!!|!!}!€~}!€~}€!}€!}€!~}€!}€!~}!€}!€}!€|!!}€!}€!}!€}€!~}!€}€!}€!}!€}€!}€!}€!~}€!~}!€}!€}!€~}!€}€!~~~~~}!€~~~~~~~~~~~}€!~~~}€!~}!€}€!~~}!€~}!€~~~~}!€}!€}€!}€!~}€!}€!}€!~~}€!~~~}€!~}!€~}€!~}!€}€!~}!€}!€|!!}€!}€!}€!}€!}!€}€!~|!!}!€}€!}!€|!!}!€|!!}€!|!!}€!|!!}€!}€!}!€|!!}€!}€!}!€}!€|!!}€!}€!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!|!!{-!{!-|!!|!!{-!{-!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!{!-{!-|!!{!-|!!{!-{-!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€}!€|!!~}!€}!€}€!}€!}€!~}€!}€!}€!~|!!~}€!|!!}€!}€!}€!}!€|!!}!€~,ƒ|!!~ƒ,}!€}!€},‚!|!!|!!|!!~ƒ,}!€~,ƒ}!€|!!|!!|!!|!!|!!|!!~ƒ,~~,ƒ}€!}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~~}!€~}€!~~{!-|!!{-!{-€|!!|!!|!!|!!|!!|!!~}!€}!€|!!~}!€}!€}!€}!€}!€}!€~~}!€}!€}€!}€!}€!~|!!|!!}€!}€!|!!|!!|!!|!!|!!{-!|!!{-!{-!{-!y-~-{-!y-~-{!-{!-y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t9-y-~-t9-y-~-t-9y-~-t9-x-„)y-~-v4‰)x-„)y-~-x)„-y-~-x)„-y-~-y-~-{-!z)„!x-„){-!{-!x-„)z!„){-!{-!y-~-|!!{!-|!!{!-|!!{-!y-~-|!!},‚!{-!}!‚,{!-|!!|!!{-!|!!{-!{-!|!!},‚!},‚!|!!|!!|!!|!!|!!|!!|!!~ƒ,|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!}€!~|!!~~~~~~~~~~}!€}€!~~}!€~~~}€!~~}!€}€!~~}!€}!€}€!~}!€}!€~~}!€~~~~~}€!~~}€!}€!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!},‚!},‚!|!!|!!}!‚,|!!|!!{-!{!-|!!},‚!|!!|!!|!!},‚!}!‚,|!!}!‚,|!!{-!}!‚,|!!{-!}!‚,{!-{!-{!-~,…,{!-}!‚,{-!{,‚-{!-{,‚-{,‚-~,…,y-~-{,‚-{-‚,y-~-y-~-{,‚-{,‚-{-‚,{-‚,{-‚,{-‚,{,‚-{,‚-}!‚,{!-{,‚-},‚!{-‚,{!-},‚!}!‚,|!!|!!|!!}!‚,|!!|!!|!!|!!},‚!|!!|!!}!€}!€}€!}€!~}€!}€!}€!}€!~}!€}€!}!€}€!~}!€|!!~|!!}€!}€!~}!€~}!€}!€}!€}€!~}!€}!€~~~~~}€!~~~~~~~~~~~}!€~~~}€!~}€!~~~~~~~}!€~}!€~}!€}!€}€!}€!~~~~~}!€~~}!€}€!~}€!~}!€~}€!}€!}€!}!€}€!}€!}!€}€!~}!€~}!€}!€}€!}!€}€!}€!}!€}!€|!!}!€|!!}€!}€!}€!|!!}!€|!!|!!|!!}€!}!€|!!}€!}!€|!!|!!}€!|!!}!€|!!}€!}€!|!!}€!|!!|!!|!!|!!{!-|!!{!-|!!{-!{-!{-!{-!|!!{-!{-!{-!|!!{!-{!-|!!{!-{!-|!!{!-{!-{!-|!!{!-|!!|!!{!-|!!{!-|!!|!!{-!{!-{!-}€!{-€|!!|!!}€!|!!}€!}!€|!!}!€}€!}!€}!€}!€}!€}!€}€!}!€}€!~}€!}!€}€!|!!}!€}!€}!€}!€|!!}€!}!€|!!~},‚!}€!~ƒ,|!!}!€}!€},‚!}€!},‚!}!‚,~ƒ,|!!}!‚,}€!|!!~ƒ,}€!|!!}!€~,ƒ|!!}!€~}!€|!!~~~~~~~~~~~~~~~~~~~~~~~~}!€~}!€~{-!{!-|!!{!-|!!|!!|!!|!!}!€}!€}!€|!!}€!}€!}€!~}!€~}!€}!€}€!~}€!~}€!}€!}€!~|!!~}!€|!!}€!}€!|!!|!!|!!|!!|!!{-!{-!{!-{!-{!-{!-{!-y-~-{-!y-~-y-~-x)„-x-„)y-~-t-9x)„-y-~-y-~-y-~-y-~-t-9x)„-t9-y-~-s9†)y-~-y-~-x-„)t9-y-~-y-~-y-~-{!-x-„)x-„){-!x-„){-!x)„-x-„)y-~-{!-{!-|!!{-!{!-z)„!|!!{!-{!-|!!{-!{!-|!!|!!{!-}!‚,|!!{-!|!!{-!},‚!{!-|!!|!!}!‚,|!!},‚!|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!}€!~}€!~}€!~~~~~~~~~~~~~~}!€~}!€~}!€}!€~~~}!€~~~~}!€~~~~~}!€}!€}!€~}!€}!€|!!~}!€}!€}!€}!€}€!|!!|!!|!!|!!}!‚,}!‚,}!‚,{!-}!‚,|!!{-!|!!|!!}!‚,|!!{!-|!!},‚!}!‚,|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!|!!},‚!|!!}!‚,{!-}!‚,|!!{-!{-!{-!},‚!{-!}!‚,{!-{!-{,‚-~,…,{-‚,{-‚,y-~-~,…,{-‚,y-~-{!-{,‚-y-~-{,‚-},‚!y-~-{,‚-{-‚,y-~-{!-~,…,{-!{-!{-!{-!|!!{-!},‚!{,‚-}!‚,}!‚,|!!|!!},‚!},‚!},‚!~ƒ,}€!}€!}!€}!€}!€~}€!~}!€}€!}€!}€!|!!}!€}!€}!€|!!}€!}!€|!!}€!}€!~}!€}€!}€!~}!€}€!~}!€}€!}€!~}!€}!€~}€!~~~~~~~~}€!~~~~~}€!~}!€~~~}!€~~}!€}!€~}€!}€!~}€!~}€!~~~}€!}€!}€!~~~}!€~}!€}€!~~~}!€}!€}€!~~}!€}!€~}!€}!€}€!|!!}€!}€!}€!}€!}!€}!€}€!}€!~|!!}!€|!!}€!|!!}!€|!!}€!|!!|!!}!€|!!|!!}€!}€!}€!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!|!!|!!|!!{!-|!!{!-|!!{!-{!-|!!{-!|!!{-!|!!|!!{!-|!!|!!|!!{!-|!!{!-{!-|!!{!-|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!}€!}€!}€!}!€}!€}€!}!€}€!~}!€}!€~}!€}€!~}!€|!!}€!}!€|!!}€!}!€|!!}€!|!!|!!}!€~,ƒ},‚!~},‚!}!€|!!|!!},‚!|!!},‚!|!!}!‚,~ƒ,}€!}€!}€!|!!}€!|!!~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€}€!~{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!}€!}€!~~}!€}!€}€!}€!~~}!€}€!}€!}€!}€!~}!€}!€}!€|!!|!!}€!|!!|!!|!!|!!|!!{-!|!!|!!{!-|!!{!-{-!{!-{-!{-!y-~-{-!y-~-y-~-y-~-y-~-x-„)y-~-x)„-y-~-y-~-t-9y-~-t9-y-~-y-~-t-9x-„)t9-y-~-y-~-x)„-y-~-x-„)y-~-x)„-y-~-{-!{-!x-„){-!{-!{-!{-!x)„-{!-|!!x-„){!-z!„){-!},‚!x)„-|!!{-!{!-|!!},‚!{-!},‚!{-!{-!{!-|!!|!!{!-|!!},‚!|!!|!!},‚!|!!|!!|!!|!!},‚!|!!|!!|!!|!!}€!|!!|!!|!!|!!}!€}!€}!€}!€}!€|!!~}€!~}!€~~~~~~~~~}!€~~~~}!€}€!~~~}€!~}€!~}!€~}€!}€!~}!€}!€~~~~~~}!€~}!€~}!€}!€|!!}€!|!!|!!}!€|!!|!!}!‚,|!!|!!|!!|!!|!!{-!|!!},‚!{-!|!!{!-|!!}!‚,|!!{-!}!‚,|!!},‚!|!!~,…,|!!|!!|!!},‚!},‚!{!-}!‚,|!!|!!{!-}!‚,}!‚,|!!},‚!{-!},‚!{-!{-!},‚!{-‚,{!-{,‚-{,‚-{,‚-{-‚,y-~-~,…,{-‚,{-‚,}!‚,{-‚,{-‚,{,‚-},‚!y-~-},‚!},‚!{-‚,{-‚,{-‚,|!!~,…,~,…,|!!{-!|!!|!!{-!|!!},‚!|!!|!!|!!|!!|!!|!!|!!~|!!}€!~}!€}!€}!€}€!}!€}!€|!!}€!}!€}!€}!€}€!~}!€}!€}!€}!€}!€}!€}€!~}!€}!€}€!}€!~}€!~~~}!€}€!~~~~~~~~~}€!~~}!€~~~}!€}€!~~}!€~~~~~~}€!~~~}€!~~~~~~}!€}!€}!€}!€~~}!€}€!~~}€!}€!}€!}!€~|!!}€!}!€}!€}€!}€!}€!}€!}!€}!€}!€|!!}!€}!€|!!}!€|!!}€!}€!|!!}€!}!€|!!}€!~|!!}€!}€!|!!|!!}!€|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!{!-|!!{!-|!!{-!|!!|!!|!!{-!{-!|!!{-!{-!|!!{!-|!!|!!{-!|!!|!!|!!{-!|!!{-!{-!|!!|!!{!-|!!|!!|!!|!!|!!}€!}€!}€!}!€|!!}€!~}!€}!€}€!}€!~}€!~}!€}!€}!€}€!}€!~|!!}€!}€!}€!}€!}€!}!€|!!}€!}€!|!!}€!|!!|!!|!!}!‚,|!!},‚!|!!~,ƒ|!!|!!}€!|!!|!!}!€~,ƒ~,ƒ|!!~}€!~}€!~}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~|!!{!-{-!{-!{-!{!-|!!|!!|!!}€!}!€|!!}!€}!€|!!}€!~}!€}€!}€!}!€}€!}€!~}€!~}€!}€!}!€|!!}€!}€!}€!}!€}!€|!!|!!|!!|!!{-!{!-|!!{-!{-!{-!{-!{-!{!-{-!y-~-y-~-y-~-y-~-x)„-y-~-y-~-y-~-x-„)t9-x)„-y-~-y-~-s9†)t-9y-~-t9-w4ƒ-y-~-w-ƒ4y-~-x-„)y-~-x-„){-!{-!x-„)x-„)y-~-{!-{!-{!-x)„-z!„){-!x-„){!-|!!{-!},‚!|!!|!!},‚!|!!{-!{,‚-|!!{!-{!-|!!}!‚,|!!{-!{-!|!!},‚!|!!|!!},‚!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!}€!}€!}€!~}!€~~~~~~~~~~~~~~~~~~~}€!}€!~}€!~~~}!€~~}€!~~}!€}!€~~~}!€~~}€!}€!}€!}€!}!€}!€|!!}€!}€!|!!}!‚,|!!|!!|!!},‚!},‚!},‚!|!!{-!|!!|!!{!-|!!{-!|!!},‚!|!!|!!{-!|!!},‚!|!!|!!}!‚,|!!{!-|!!},‚!|!!{-!},‚!{-!|!!{-!{!-}!‚,{!-{!-}!‚,}!‚,{-!{,‚-~,…,{-‚,{,‚-{,‚-{,‚-{-‚,{-‚,{-‚,y-~-{,‚-{-‚,{-‚,y-~-{,‚-{-!{-‚,{-‚,{-!{,‚-}!‚,~,…,{!-|!!{-!}!‚,|!!},‚!|!!},‚!|!!},‚!|!!|!!|!!|!!|!!}!€|!!~}!€}!€}!€|!!}€!}€!}€!}€!}€!}€!}€!}€!}€!|!!}€!}€!}€!~}!€}!€}!€}€!}€!~}!€}!€}€!}€!~}€!~}!€}€!~~}!€}!€~~~}€!~}€!~}!€}€!~}!€~}!€~~}€!~~}€!}€!~}!€}!€}!€~~}!€~~}!€~}!€~}€!}€!}€!~~~}!€}!€}€!~}€!~}!€~~~}!€~}!€}!€}!€}!€|!!}!€}!€|!!}€!}€!}!€|!!|!!|!!}€!}!€|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!|!!|!!{-!{!-|!!{-!{!-{!-|!!{-!|!!|!!{-!|!!|!!{!-|!!{!-|!!|!!|!!{-!{-!|!!{-!|!!|!!{-!{!-|!!{!-|!!|!!|!!}€!}!€|!!|!!}€!}€!}€!}!€|!!~}!€}!€}!€}!€}€!}€!~|!!}€!}€!|!!~}€!}!€}€!}!€|!!}€!}€!}!€|!!|!!|!!}!€|!!|!!|!!}€!|!!},‚!}!€~,ƒ},‚!},‚!|!!~,ƒ~,ƒ|!!|!!}!€~,ƒ|!!}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~}!€}!€|!!{-!|!!|!!{-€|!!|!!|!!|!!}!€}!€|!!}€!}!€}!€}€!}€!~~}!€}!€~}!€}!€~}!€~}€!~|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-{!-{!-{!-{-!y-~-y-~-{!-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-t9-w-ƒ4y-~-t-9y-~-y-~-y-~-y-~-x-„)y-~-y-~-x)„-x-„)y-~-x-„)y-~-{!-{!-{!-x)„-{!-|!!{-!{-!|!!z)„!{-!{!-{!-|!!{-!|!!{!-}!‚,{!-|!!{-‚,|!!}!‚,{!-|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}€!}!€}€!~}€!}!€~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~}€!~}!€~~}!€~}€!~~}!€~}!€}€!}€!}€!|!!}€!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!},‚!|!!{-!{-!|!!|!!|!!},‚!|!!{-!|!!|!!},‚!}!‚,|!!},‚!|!!}!‚,|!!|!!{-!|!!|!!}!‚,}!‚,|!!},‚!}!‚,{!-}!‚,|!!},‚!{-!},‚!{-!{-‚,{-!y-~-~,…,{-!y-~-{,‚-y-~-{,‚-{,‚-},‚!y-~-{-!{,‚-~,…,{,‚-}!‚,{,‚-},‚!y-~-|!!{-‚,|!!}!‚,{!-}!‚,}!‚,{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}€!}€!}€!}€!~|!!}€!}€!}€!}!€}!€}!€}!€}!€}€!}€!~|!!}€!}€!}€!}€!}€!~}!€}€!}€!}!€~}€!~}!€~~}€!~}€!~~~~~~}!€~~~~~~~}!€~~}€!~~~}€!~~~}€!~~}!€~~}!€~~}!€~}€!~}€!}€!~}!€~}!€~}!€~}!€}€!}€!}€!}€!}€!}€!~}!€}€!}€!}€!}€!}€!}!€}€!}!€}!€|!!}!€|!!}€!}!€|!!}€!|!!}!€}!€}!€|!!}!€|!!}!€|!!}!€}!€}!€|!!}!€|!!|!!}€!|!!|!!|!!|!!{!-|!!|!!{-!|!!{-!{-!|!!|!!{-!|!!{-!|!!{-!{!-{!-|!!{-!|!!{-!|!!|!!|!!{-!|!!{!-|!!{!-|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€}!€}!€}!€}!€}!€}!€}€!~}€!~}€!~~}!€}!€}€!}€!}€!~}!€}!€}!€|!!}€!}!€}!€}!€|!!|!!}!€~,ƒ|!!~,ƒ}!€|!!|!!|!!}!€|!!|!!}€!|!!}€!}€!}€!|!!}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}!€}€!y-~-{-!{-!{-!{!-|!!|!!|!!|!!|!!|!!}!€~}!€|!!}€!~|!!}€!~}€!}€!~}!€}!€}€!}€!}!€}!€|!!}€!}!€|!!}€!|!!|!!|!!|!!|!!{-!|!!{-!{-!{-!y-~-{!-{!-{!-{!-y-~-y-~-y-~-y-~-{!-y-~-x-„)y-~-y-~-y-~-y-~-w-ƒ4y-~-w-ƒ4y-~-y-~-x-„)t9-y-~-y-~-y-~-{-!y-~-y-~-{!-x)„-x)„-{-!{-!{-!x)„-z!„){!-x)„-{!-|!!{-!|!!{!-{!-{!-|!!{!-|!!{-!|!!}!‚,{-!}!‚,{!-}!‚,|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}€!}!€|!!}€!}!€~}!€}!€}!€~~~~~~~~~~~~~~~~~~~~~}€!~}!€~~}€!~}!€~}!€~~}!€}€!~~}€!}€!}€!}€!}€!}€!}€!}€!}!€|!!}!€~,ƒ|!!|!!|!!}!‚,|!!{-!}!‚,}!‚,|!!},‚!|!!}!‚,{!-|!!},‚!|!!{-!|!!},‚!},‚!}!‚,|!!{-!|!!{-!{-!|!!},‚!|!!}!‚,}!‚,{!-|!!},‚!}!‚,{!-|!!},‚!{,‚-}!‚,}!‚,{-‚,}!‚,{-!~,…,{-‚,y-~-{-‚,~,…,y-~-}!‚,{-‚,{-‚,{-‚,{-‚,{-‚,y-~-{,‚-}!‚,{-‚,{-!~,…,|!!~,…,}!‚,}!‚,{-!},‚!},‚!|!!|!!}!‚,|!!}!‚,|!!}!‚,|!!|!!}!€|!!}!€}!€}!€~}!€}!€}!€|!!}!€}!€|!!}€!}€!}!€|!!}!€}!€|!!}€!}€!}!€}!€}!€}!€|!!}€!~}!€~|!!~}!€~}!€}€!~}!€}!€~}€!~~}!€}!€~}€!~~}€!}€!~}!€~}€!}€!~}!€}€!}€!~}€!~}!€~~~}€!}€!~~}!€}!€~}€!~}€!}!€~}€!~}!€}€!}€!~}!€}€!}€!~}€!~}€!}€!~|!!}€!|!!|!!}€!|!!}€!|!!}€!}!€}!€|!!|!!}€!|!!}€!|!!}€!|!!|!!|!!}!€|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€{-!|!!{!-|!!{-!|!!{-!|!!{!-{!-|!!|!!{-!|!!{-!{!-|!!{-!{-!|!!{!-|!!|!!|!!{!-|!!{-!|!!{!-|!!{!-}!€{-!|!!|!!|!!}€!|!!}€!}€!|!!~}!€}€!}€!}€!~|!!}€!}€!}!€}!€}!€|!!}€!}€!}€!}€!|!!}!€}!€|!!|!!}€!}€!|!!|!!}!‚,}€!|!!|!!|!!|!!},‚!}!‚,|!!|!!}!€~,ƒ~,ƒ|!!~ƒ,|!!}!€}!€}!€}€!|!!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~}€!}!€{!-{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€~}!€}!€~}€!}€!~~}!€}€!~~}!€}€!}€!}!€}!€|!!}€!|!!|!!|!!|!!{!-|!!{-!{!-{!-{!-{!-|!!{-!y-~-{!-y-~-{!-y-~-y-~-{!-y-~-v!9y-~-x-„)y-~-y-~-y-~-y-~-y-~-y-~-t-9s)†9y-~-y-~-x-„)x-„)y-~-x-„)x-„){-!{-!{-!y-~-z)„!y-~-z)„!{-!{-!{-!|!!{-!z)„!{-!{-!{-!|!!|!!{-!}!‚,|!!{!-{!-|!!{!-|!!|!!|!!{-!},‚!|!!|!!},‚!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!}!€|!!}€!|!!|!!|!!}!€|!!|!!}€!}!€}!€}!€}€!~}!€~~~~~~~~~~~~~~~~~~~~~~}€!~~}!€~}€!~~~}!€~~}!€~}!€}!€~~}€!~|!!}€!}!€|!!}!€|!!}€!|!!|!!|!!|!!}!‚,|!!|!!|!!{!-|!!{-!},‚!|!!},‚!|!!},‚!|!!}!‚,|!!|!!},‚!},‚!|!!|!!|!!|!!{-!}!‚,{!-}!‚,}!‚,|!!{!-{!-|!!},‚!},‚!},‚!{-!{!-|!!{!-},‚!{-‚,{!-},‚!{-‚,{!-{,‚-{-‚,{,‚-{-‚,{-‚,{,‚-{,‚-},‚!{-‚,y-~-{,‚-{!-{!-{-‚,},‚!{-!},‚!},‚!|!!}!‚,|!!},‚!},‚!|!!}!‚,|!!}!‚,|!!}€!|!!|!!|!!|!!}€!}€!}€!~}!€}€!}€!|!!}!€}!€|!!}€!}€!}!€}!€|!!~}€!~}!€}€!~}!€~}!€|!!}€!}€!~}!€}€!~}€!~}€!~}€!~}!€~~~~}€!~}€!~~~}€!~}!€}!€~~~}!€~}!€}!€}€!~}!€~}€!~~~}!€~~}!€}!€}!€}!€~}!€}!€~}!€}!€}€!~}€!}€!~|!!~|!!~}!€}€!}€!}€!~}€!}!€}!€}!€}!€|!!}!€|!!|!!}€!|!!}€!}!€|!!|!!}€!}€!|!!|!!|!!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!|!!{-!{-!{-!{!-|!!{-!|!!{-!{-!{!-|!!{!-|!!{!-|!!|!!{-€|!!|!!{-!{!-|!!{-!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!}!€}!€}!€}!€~|!!}€!}€!~|!!}€!~}!€~~~}!€~~}!€~~}€!~|!!}€!~|!!}€!|!!}€!}€!|!!}!€},‚!|!!|!!|!!|!!}€!~,ƒ|!!|!!|!!}!‚,}€!~ƒ,~ƒ,}!€~,ƒ|!!~}€!~}€!~~~~~~~~~~~~~~~~~~~~~}!€~~~}!€}!€y-~-{!-{!-{!-{!-{!-|!!{-!|!!|!!}!€|!!}€!}€!}€!}€!}!€|!!}!€~}!€~}!€}€!~}€!}€!}€!~}!€|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!{-!|!!{-!{-!{-!{-!{-!y-~-{!-y-~-{!-{!-y-~-y-~-x-„)y-~-y-~-y-~-s)†9x)„-t-9y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-x)„-y-~-{-!x-„)y-~-x)„-{!-{!-z)„!y-~-{!-{!-|!!z)„!{!-|!!{-!|!!|!!{-!{-!{-!{-!{-!{-!},‚!},‚!{-!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}!€}!€}!€}!€}€!}€!}!€}!€~}€!~~~~~~~~~~~~~~~~~~~~~}€!~~}€!~~~}!€~~}!€~~~~~}!€}!€}!€|!!~}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!},‚!{-!},‚!|!!|!!|!!}!‚,|!!{!-|!!{-!},‚!|!!{-!|!!|!!}!‚,|!!|!!},‚!|!!|!!|!!},‚!|!!|!!{-!|!!},‚!{-!{!-}!‚,}!‚,}!‚,}!‚,},‚!{!-{!-{,‚-~,…,{-‚,{,‚-{-!{-‚,{-‚,{-!~,…,{-‚,{-!{-‚,{-‚,}!‚,{-!{-!},‚!},‚!{-!},‚!{-!{-!},‚!},‚!{-!{-!|!!|!!},‚!}!‚,|!!|!!},‚!|!!|!!|!!}!€|!!~}!€}!€|!!}€!}!€}!€|!!|!!}€!}€!}!€}!€}!€}€!}€!|!!}€!}€!}!€|!!~}!€}€!~}!€}€!~}!€~}€!}!€}€!}€!~~~~}€!~}€!}€!~}€!~~}!€~~~~~}!€}€!}€!~~~~~}!€~}€!~~}€!}€!~~}€!~~}!€~}!€~~}!€}€!~}!€}!€}!€~}!€~}€!~~}!€}!€}€!}!€|!!}!€}!€|!!}!€|!!}!€|!!}!€}!€|!!}€!|!!|!!}!€|!!}!€|!!}€!}€!}!€|!!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{!-|!!{!-{!-|!!|!!{!-|!!{-!|!!{-!|!!{!-|!!{-!|!!{!-|!!|!!|!!|!!{-!|!!{!-|!!|!!|!!{!-|!!{!-|!!{!-|!!|!!|!!|!!}!€}!€|!!}€!}!€|!!~}€!}!€|!!~~~~}!€~}!€~|!!}€!~}€!~}!€}€!}!€}!€}!€|!!}€!}!€|!!}!€~,ƒ|!!}€!|!!}!€|!!~ƒ,|!!}€!~,ƒ~,ƒ}!€}!€|!!}€!}!€|!!~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}€!}€!y-~-y-~-{!-{-!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€}!€}€!~}€!}€!}€!~~|!!}€!~}€!}€!}€!}€!}€!|!!}€!|!!}!€|!!|!!{!-|!!{-!{!-{!-{!-|!!{-!{-!{-!{-!y-~-{!-y-~-y-~-y-~-x)„-y-~-y-~-y-~-y-~-y-~-w-ƒ4y-~-t-9y-~-t9-y-~-y-~-x-„)y-~-y-~-y-~-{!-y-~-x)„-{!-{!-z)„!y-~-{!-z)„!z!„){!-{!-{!-|!!{-!z)„!{-!{-!|!!|!!|!!|!!|!!{!-{!-|!!},‚!|!!|!!},‚!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}!€|!!}€!|!!}€!}€!}€!~~}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~}!€~}€!~~}€!~}€!~}€!}€!~}!€}€!~~}!€}€!|!!|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!},‚!}!‚,|!!|!!{-!},‚!|!!|!!{-!|!!},‚!{!-|!!}!‚,}!‚,|!!},‚!{-!|!!|!!{-!{-!|!!{-!|!!},‚!},‚!},‚!},‚!{-!{-!}!‚,}!‚,},‚!{-!{,‚-{!-},‚!~,…,{-!y-~-{,‚-{-!{-!y-~-},‚!y-~-{,‚-}!‚,~,…,{!-{!-}!‚,}!‚,|!!{-!|!!{-!|!!|!!},‚!},‚!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}!€}!€|!!}€!}€!}€!}€!}€!}!€|!!}€!}!€}!€}!€|!!~}!€}!€}€!~}!€}!€}!€}!€}!€}€!}€!}!€}!€~~~~~}€!~~~}€!~~}€!~}!€}!€~}!€}€!}€!~}€!~}!€~}€!}€!~~~~}!€~}€!~~~~}!€~~}!€~}!€}€!~}!€}€!~~~}!€~}!€}€!~}!€|!!}€!}!€|!!}!€}!€}!€|!!}!€}!€|!!}€!}€!}€!|!!|!!|!!|!!}€!}€!}€!|!!|!!|!!|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!|!!{!-|!!|!!{-!{!-{!-|!!{!-|!!{!-|!!{-!|!!{-!|!!{-!{!-|!!|!!|!!|!!{-!|!!{-!|!!{-!|!!|!!|!!|!!|!!}!€|!!|!!}!€}!€|!!~|!!~}€!~}€!}€!}€!~~}!€~|!!~}€!}€!~|!!}€!}!€}€!}€!}€!}!€~,ƒ}!€~,ƒ|!!|!!~ƒ,}€!~ƒ,}!€~,ƒ},‚!}€!|!!|!!~ƒ,~ƒ,~ƒ,}€!~,ƒ~,ƒ|!!~ƒ,~ƒ,~}!€~}!€~~~~~~~~~~~~~~~~~~~~}€!}€!}€!}€!~}!€}!€y-~-{!-{!-{!-{!-{!-|!!{-!{!-|!!|!!|!!}€!}€!~}!€|!!}€!}€!~}!€~}!€~~}€!~}!€}!€}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!{!-{€-{!-{!-{!-{-!{-!{-!y-~-y-~-{-!y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-x-„)y-~-y-~-x-„)y-~-y-~-x-„)y-~-x-„)y-~-x)„-{-!y-~-y-~-{!-z)„!{-!{-!{-!{-!z!„){-!{-!|!!{-!z)„!|!!{!-{!-{!-{!-{!-|!!|!!{!-|!!{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!|!!}!€|!!}!€}!€|!!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~~~~~}!€}!€}!€}!€}!€}€!~|!!}€!}€!|!!}!€|!!|!!|!!},‚!|!!}!‚,|!!}!‚,}!‚,|!!}!‚,|!!}!‚,|!!|!!{!-|!!},‚!}!‚,|!!{!-|!!},‚!|!!|!!|!!|!!|!!},‚!{-!|!!|!!}!‚,|!!}!‚,|!!{-!|!!{-!},‚!{!-},‚!},‚!{-!{,‚-}!‚,~,…,{,‚-{,‚-~,…,{-‚,{-!~,…,{,‚-{,‚-~,…,{-!},‚!{,‚-{!-{!-}!‚,{!-|!!{-‚,|!!},‚!},‚!},‚!},‚!|!!|!!},‚!|!!}!€},‚!|!!}!€~,ƒ~,ƒ|!!}€!~}!€|!!~}!€}!€}!€|!!}!€}€!|!!~}!€|!!}!€}!€}!€}!€}€!~}!€|!!}€!}€!~|!!~}!€~~}€!}€!~~}€!~}€!~}!€~~}€!~}€!~~}!€}!€~~}!€~}!€~~}!€~}€!~}!€~~}!€~~}€!~}!€~}€!}!€~}!€~}!€~}€!~}€!}€!}!€}!€|!!}€!~}€!~}€!}€!}€!~}!€|!!}!€}!€}€!}!€}!€}!€|!!|!!}!€}!€|!!}€!|!!|!!|!!}!€|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{€-|!!|!!{!-|!!|!!{-!|!!|!!|!!{!-|!!{-!{-!{!-|!!{-!|!!{-!|!!|!!{!-|!!|!!{-!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!~}€!}€!}!€}!€}!€~~~~~~~}€!}!€~}€!~~~|!!}€!}!€|!!~|!!}!€}!€|!!|!!}!€|!!|!!|!!}!€~,ƒ~,ƒ~,ƒ~,ƒ|!!|!!}€!|!!}€!}!€}!€}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~}!€}!€{-!y-~-{-!{-!{-!|!!{-!|!!|!!|!!|!!}€!|!!}€!}€!~}!€~~}!€~}€!~~}€!~}!€~}€!}€!}!€|!!|!!}€!|!!|!!|!!{!-|!!|!!{-!|!!{-!{-!{-!{-!{-!{-!{-!y-~-y-~-y-~-y-~-y-~-{!-y-~-x)„-x)„-x-„)y-~-y-~-t-9y-~-y-~-y-~-x-„)t9-y-~-y-~-{!-x-„){-!x)„-z!„){!-|!!y-~-{!-z)„!{-!{-!{-!z!„){!-{!-|!!{!-}!‚,|!!|!!|!!|!!}!‚,{!-{!-|!!{-!},‚!|!!{-!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}€!|!!}!€}€!~}!€~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~}!€~}!€}!€~}€!~}€!}€!}€!|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!}!‚,|!!}!‚,|!!},‚!},‚!|!!{!-|!!|!!{-!|!!|!!{!-|!!},‚!|!!},‚!},‚!|!!},‚!},‚!|!!{-!|!!{-!{-!}!‚,{-!}!‚,}!‚,|!!}!‚,{!-},‚!~,…,{!-{!-{-‚,{!-{,‚-{!-{,‚-y-~-},‚!{!-},‚!{-‚,{-!{-‚,{!-},‚!{-!{-‚,}!‚,}!‚,|!!},‚!|!!|!!{!-},‚!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!~|!!}!€|!!}!€|!!|!!}!€~|!!}€!~}!€}€!}€!}!€}!€}!€}!€~|!!~}€!}€!}€!}€!}€!}!€~~}€!}€!~}€!~~}€!}€!}€!~}!€~}!€~~~~}!€~}!€~}!€}!€~}!€}!€~~}!€~~~~~~~~~~}!€}€!~~}!€}!€~~}€!~}€!~}!€}€!~}!€}!€}€!~}!€|!!~}€!|!!|!!}€!|!!}€!}!€|!!|!!|!!}!€|!!}€!}€!}€!|!!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!{-!{!-|!!|!!{!-|!!{!-{!-{!-{!-|!!{!-|!!|!!{-!|!!{!-|!!|!!{!-|!!|!!{!-|!!|!!{!-|!!|!!|!!{-!|!!{!-|!!{-€|!!|!!}€!|!!|!!}€!~|!!}€!~~~}!€}!€}!€~~~~~~~}!€~}€!}€!}€!~}!€}!€|!!}!€}!€|!!|!!}€!}€!|!!|!!}!€}!‚,}€!}!€|!!}€!|!!}!€|!!}!€}!€~,ƒ|!!}€!}€!}€!~~}€!~~~~~~~~~~~~~~~~~~~~~~}!€}€!}€!~|!!y-~-y-~-{-!{-!{-!{-!|!!|!!|!!|!!}€!}!€|!!|!!|!!}€!}€!}€!}!€~}€!~~}€!~}!€~}€!}€!}€!}!€}!€}€!|!!|!!|!!|!!|!!|!!{-!{!-{!-|!!{!-{!-|!!{-!{-!y-~-y-~-{!-y-~-z)„!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-x)„-y-~-x)„-x-„)y-~-{!-y-~-y-~-x)„-x)„-z!„){-!{!-z!„){!-|!!{-!{-!z!„)|!!{-!|!!|!!{-!{!-}!‚,|!!{-!|!!},‚!{!-|!!|!!|!!}!‚,|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}€!~|!!}!€}!€}€!|!!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}!€}!€~}!€~}€!~~}€!}!€}€!|!!}€!}!€}!€}!€}!€|!!|!!}!€|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!}!‚,|!!|!!},‚!|!!},‚!|!!|!!{-!|!!{!-|!!},‚!{!-|!!{-!|!!|!!},‚!|!!|!!}!‚,|!!|!!},‚!|!!{-!|!!{-!{-!},‚!{!-}!‚,{!-}!‚,{-‚,},‚!{,‚-~,…,{-!{-‚,{-!}!‚,{-!{,‚-y-~-{-!{,‚-}!‚,},‚!{!-{,‚-}!‚,{-!},‚!},‚!{-!|!!~,…,|!!|!!|!!},‚!|!!}!€},‚!|!!}!€|!!|!!|!!}€!}€!~|!!~|!!}€!}€!}!€}!€}€!}!€}!€|!!}!€}!€}!€}!€}!€}€!~}€!}!€}!€~|!!}€!~}€!}€!}€!}!€~}!€}€!}€!~}!€~~~~~~~~}!€}€!~}!€~}!€}!€}€!~~}!€~}€!~}€!~}€!}€!~}€!~}!€}€!}€!~}!€~}!€}!€}!€~~|!!}€!~}!€}€!~~}!€}!€}€!}€!}!€}€!}!€}€!}€!}!€~}!€|!!}!€|!!|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!}€!}!€|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!{!-|!!{!-|!!|!!|!!|!!{!-|!!{-!{!-|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!|!!{-!|!!|!!|!!|!!}€!}!€|!!~}!€}!€}!€}!€}!€|!!}€!~~~~~~~~~}€!}€!}€!~}!€~}!€}!€}€!~|!!~ƒ,}€!|!!~ƒ,}!€~,ƒ|!!~ƒ,}€!~ƒ,~ƒ,}!€~,ƒ}!€|!!|!!~ƒ,|!!|!!~ƒ,~~,ƒ}€!~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~|!!~y-~-y-~-y-~-y-~-|!!{-!{!-{!-|!!|!!|!!|!!}!€|!!~}!€}!€}!€}€!}€!~}!€~~~~|!!}!€~}!€}!€|!!}€!}€!|!!|!!|!!|!!|!!{!-|!!{!-{!-|!!{!-{!-{-!y-~-{!-{!-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-x)„-y-~-x)„-t9-x)„-s9†)t9-y-~-y-~-y-~-x-„)y-~-y-~-x)„-{!-z)„!{-!{-!{-!x-„){-!{-!{-!z)„!|!!|!!{-!{!-|!!{-!{!-|!!|!!|!!{-!},‚!{!-|!!}!‚,|!!{-!|!!|!!|!!|!!|!!|!!}€!|!!}!‚,~ƒ,|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!}€!}!€}!€~}!€}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~}€!~~~~}€!~~}€!}€!~}€!~}!€~}€!~|!!}!€|!!|!!}!€|!!|!!}€!}!€|!!|!!|!!|!!}!‚,|!!},‚!},‚!},‚!|!!|!!},‚!|!!|!!|!!},‚!|!!}!‚,|!!},‚!|!!|!!|!!}!‚,|!!},‚!|!!|!!{-!},‚!},‚!}!‚,}!‚,|!!},‚!}!‚,}!‚,|!!}!‚,{!-|!!},‚!|!!{-‚,|!!{-!}!‚,{!-{!-},‚!{-‚,{-‚,}!‚,},‚!},‚!{!-{,‚-},‚!{-‚,}!‚,|!!}!‚,|!!{-!{-!|!!{-‚,|!!},‚!}!‚,|!!|!!},‚!}!‚,}€!|!!|!!|!!|!!|!!|!!}!€}!€}!€|!!}!€}!€~,ƒ}€!}€!|!!}€!|!!}€!}€!}€!}€!}€!}€!}!€|!!}!€|!!}€!}!€}€!~}€!}!€~~~}!€}€!~~~~~|!!~~}!€}!€~}!€~~}€!~}!€~~~~}!€~}!€~}€!~~~~~~~~~~~}€!~~~}€!}€!~~~}!€}€!~}€!~}€!~|!!~}€!}!€}!€}!€}!€|!!|!!}€!}€!|!!}!€|!!}€!|!!|!!|!!}!€|!!}€!|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!{-!|!!|!!{!-|!!{!-{!-|!!{-!|!!{!-|!!|!!|!!|!!{!-{!-|!!|!!{-!{-!|!!{!-|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€}!€}!€~~~~}!€}!€~~~~~~~~~~}!€}€!}€!}€!}€!}€!}€!}!€}€!}€!|!!}€!|!!}€!}!€~,ƒ|!!|!!}!€}!€~,ƒ~,ƒ~,ƒ|!!}!€|!!}!€|!!}€!}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~}!€|!!~|!!y-~-y-~-{!-{!-{!-|!!{-!|!!|!!{!-}€!|!!}€!|!!}€!}€!}€!~|!!~}!€~}€!~~}!€~}€!}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!{!-|!!{-!y-~-|!!{-!{-!y-~-y-~-{!-{!-y-~-x-„)y-~-y-~-y-~-y-~-y-~-y-~-y-~-t9-y-~-x-„)x-„)y-~-x)„-y-~-{-!y-~-z)„!{-!{-!x-„){!-z)„!{-!{!-|!!|!!{-!x-„){!-|!!{-!|!!{!-|!!{!-|!!{!-|!!{!-|!!}!‚,|!!{-!{-!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}€!|!!|!!|!!}!€|!!}€!}€!}€!}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~~}!€}€!}€!}€!}€!}!€|!!|!!}€!|!!}€!|!!|!!|!!|!!~ƒ,|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!{-!|!!},‚!}!‚,{!-|!!|!!}!‚,{!-|!!|!!|!!},‚!},‚!},‚!|!!|!!}!‚,|!!|!!{-!|!!|!!|!!},‚!},‚!}!‚,|!!},‚!{-‚,{-!{,‚-}!‚,{,‚-},‚!~,…,}!‚,}!‚,}!‚,{,‚-{-‚,y-~-{,‚-|!!}!‚,{!-|!!},‚!{-‚,{!-}!‚,{!-},‚!|!!{!-}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!}€!|!!}!€}€!}!€~,ƒ}!€~|!!}€!}€!~|!!}!€}!€}!€}€!~}!€~}€!}€!~}!€|!!}€!~}!€}!€}€!~}€!}€!~}€!~~}€!}!€~~~~~}€!~~}€!~}€!~}!€~}!€~}€!~}!€~~~~~~}€!~}€!}€!~}!€}!€}!€}!€~}!€|!!}€!~}!€}!€}!€}!€}!€}!€~}€!}€!}€!}€!}!€|!!}!€}€!}€!|!!}€!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!}€!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!|!!{-!{!-|!!|!!{-!|!!|!!{-!|!!{-!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{!-|!!{-!|!!|!!|!!}!€}!€|!!}€!}€!}€!}€!}€!}!€}!€~~~~~~~~~~~}!€~}€!~~}!€|!!}€!}€!}!€}!€}!€|!!}€!}!€~,ƒ|!!}€!}!€},‚!~ƒ,}€!|!!}€!~ƒ,}€!}!€|!!}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~~}!€}!€}€!~|!!y-~-y-~-y-~-y-~-{!-{-!{!-|!!{-!|!!|!!|!!|!!}€!}€!}!€}!€}€!~}!€~}!€~~}!€}€!}€!~}!€}!€}!€|!!}€!|!!|!!|!!|!!{-!|!!|!!|!!|!!{!-{!-{!-|!!y-~-{!-{!-{!-{!-y-~-y-~-{-!y-~-y-~-x)„-{!-y-~-x)„-x-„)y-~-y-~-y-~-y-~-y-~-y-~-x-„)x-„)y-~-{-!y-~-x)„-{-!{-!x-„){!-z)„!{-!x)„-{!-|!!|!!|!!|!!|!!{-!|!!|!!|!!{!-|!!}!‚,|!!}!‚,|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!~,ƒ|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}€!}€!}!€|!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}!€}€!~~}!€}!€~}!€~}!€}€!}!€}!€|!!}€!}€!}!€|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!}!‚,|!!},‚!},‚!|!!|!!}!‚,|!!{-!|!!},‚!|!!{!-|!!|!!|!!}!‚,{-!},‚!|!!|!!},‚!}!‚,}!‚,|!!}!‚,|!!}!‚,}!‚,},‚!},‚!|!!},‚!},‚!},‚!},‚!|!!},‚!{-!},‚!},‚!y-~-{-!{-‚,y-~-{!-},‚!{-!},‚!{-‚,~,…,{-!~,…,}!‚,}!‚,},‚!},‚!},‚!|!!}!‚,},‚!|!!|!!{-!|!!},‚!}!‚,|!!}!‚,|!!|!!|!!|!!|!!|!!}!€}€!}!€}€!}€!}!€}!€}!€|!!|!!}!€|!!}€!}€!}!€}!€|!!}€!}!€}!€|!!}!€}!€}€!}!€}€!~}€!}!€}€!~}!€}€!~~}!€~}!€}!€~~|!!~}!€~~~~}€!~~}!€}€!~~~}!€~~~~}!€~~~}!€~~}!€~~~~}!€}€!~~~}!€}€!~}€!}€!}€!~}!€}!€}!€|!!}€!~}€!}!€}!€|!!}!€}!€}!€}!€|!!|!!}€!|!!}€!}€!|!!}€!}€!|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!{!-|!!|!!{!-|!!{!-{!-{!-|!!|!!|!!|!!{-!{!-|!!{-!{-!|!!{!-|!!{!-|!!|!!|!!{!-|!!{!-|!!|!!|!!|!!}!€|!!|!!|!!}€!}€!~}!€~~}€!~}€!~~~~~~~~~}€!~}!€~}!€}!€|!!}€!}€!|!!|!!|!!}€!}!€~,ƒ|!!~ƒ,}€!},‚!}€!}€!|!!}!€|!!~,ƒ~,ƒ|!!~ƒ,~~,ƒ~ƒ,~ƒ,~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~}€!}!€|!!{!†!v-~9y-~-y-~-{-!y-~-|!!{-!{-!|!!|!!|!!|!!}!€|!!}!€|!!}€!}!€}!€~}!€~~}!€}€!~~}!€}!€}!€}!€}!€}!€}!€|!!|!!|!!|!!|!!{-!{-!|!!{-!|!!{-!{-!{-!y-~-{!-{-!{-!y-~-|!!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-x-„)y-~-y-~-y-~-x)„-y-~-y-~-y-~-x)„-y-~-{!-x-„)y-~-|!!{-!{!-|!!{-!|!!x)„-{!-|!!{!-},‚!|!!|!!{!-{!-|!!}!‚,|!!{!-|!!},‚!{!-|!!},‚!|!!|!!|!!|!!|!!~ƒ,~ƒ,|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}!€|!!|!!}!€|!!}€!}€!~}!€}!€~}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~~}€!~}€!}€!~}!€}€!}!€|!!|!!}€!|!!}€!}!€}!€|!!|!!|!!|!!|!!|!!}!€~,ƒ},‚!},‚!|!!|!!|!!|!!},‚!|!!{-!|!!},‚!{-!|!!},‚!}!‚,|!!|!!{-!|!!|!!|!!|!!},‚!}!‚,|!!},‚!}!‚,|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!},‚!}!‚,},‚!}!‚,{-‚,},‚!{-!},‚!~,…,{-!},‚!{,‚-}!‚,}!‚,{,‚-}!‚,{!-}!‚,},‚!{-!{-!{,‚-}!‚,|!!{-!},‚!{!-},‚!|!!}!‚,{-!|!!|!!}!‚,|!!~ƒ,|!!|!!|!!}!€|!!|!!}!€}!€|!!}€!}€!}!€|!!~}!€}€!~}!€}!€}€!}€!}€!}€!~}€!}€!}€!}€!}€!}€!}€!|!!}!€~}!€}€!}€!~}€!}!€~}!€~~}!€}€!~~~}!€}!€}€!}€!~~~}!€~~}€!~~~~}!€}!€~~~~~~}!€~}!€}€!~}!€~~|!!}€!}!€~}!€}!€}€!~}!€}€!~}!€}€!~}€!~}!€}€!|!!}€!~|!!|!!|!!}!€|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!}!€}!€|!!|!!}€!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!{!-|!!|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!}€!|!!}€!}€!}€!~~~~~~~~~~~}€!~~}!€~}!€~}!€}€!}€!}€!}€!~ƒ,}!€}€!~ƒ,}€!}!€|!!~~,ƒ~,ƒ|!!}!€~,ƒ}€!}€!}!€}!€},‚!~}!€}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~}€!}€!|!!y-~-y-~-y-~-y-~-{!-y-~-|!!{!-|!!|!!{!-|!!|!!|!!}€!}€!}!€}!€~}!€~}!€~~~}!€}!€}€!}€!}!€}!€}€!}!€|!!}€!|!!|!!|!!{!-|!!|!!{!-|!!{-!{!-{!-|!!{-!{!-y-~-y-~-y-~-y-~-{!-{-!y-~-y-~-x-„)y-~-y-~-y-~-y-~-y-~-{!-x-„)y-~-y-~-{!-{-!y-~-y-~-{!-x-„){!-|!!{-!x-„){-!{!-z!„){-!|!!|!!x)„-|!!|!!{!-{!-|!!|!!|!!{!-{!-|!!{!-|!!|!!|!!|!!},‚!}!‚,|!!},‚!|!!}!€~,ƒ|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}!€|!!}€!}€!}€!}!€}!€}!€}!€}€!}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€~}€!~}€!~}!€~}€!~}€!}€!~}€!}€!~|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!},‚!|!!|!!|!!|!!},‚!}!‚,|!!}!‚,},‚!|!!},‚!}!‚,|!!},‚!|!!},‚!|!!|!!},‚!|!!},‚!|!!},‚!}!‚,|!!}!‚,|!!},‚!}!‚,|!!|!!},‚!}!‚,{!-},‚!{-‚,}!‚,~,…,{-‚,}!‚,{,‚-},‚!y-~-},‚!{-!},‚!{-‚,}!‚,},‚!},‚!{!-}!‚,},‚!}!‚,|!!|!!},‚!|!!|!!{-!|!!|!!}!‚,|!!~ƒ,|!!|!!}!‚,|!!}€!|!!}€!}€!}€!|!!}€!~|!!}€!}€!|!!}!€|!!}€!~}!€|!!}€!}!€}!€}€!}!€}€!}€!~~}€!~}€!}!€~}€!~}€!~~}!€~~}!€}€!}€!~~~~~}!€}€!~~}!€}€!~~~}€!~~~~}!€}!€~~~~}!€~~~~}!€}!€~}!€}€!~}!€}€!}!€~}€!}€!}€!~}!€}!€}€!|!!~|!!}€!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}€!|!!}€!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{!-|!!|!!|!!{-!|!!|!!{-!|!!|!!|!!{-!{-!{!-{!-|!!|!!|!!{!-|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{-!|!!|!!|!!}€!}!€}!€|!!~}!€}!€~}€!}€!~~~~~~~~~~~}€!~}!€}!€}€!}!€}€!}€!}!€|!!}€!}€!}€!~,ƒ}!€|!!~ƒ,}€!},‚!~~,ƒ~,ƒ~,ƒ|!!~,ƒ}!€~,ƒ}!€}€!}!‚,}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~}€!}€!}€!~}!€|!!y-~-t-9y-~-y-~-y-~-|!!{-!{-!{-!{-!|!!|!!|!!}!€|!!}!€}!€~|!!~~~~~}!€~~}!€}€!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!{!-|!!{-!{!-{!-{-!{-!{-!{-!y-~-y-~-y-~-y-~-x-„)y-~-y-~-x)„-x)„-y-~-x-„)y-~-y-~-{-!y-~-x-„)y-~-{-!x-„)y-~-{!-{!-{!-x)„-|!!{!-z)„!{!-|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!},‚!{!-|!!},‚!{-!|!!|!!|!!|!!|!!|!!|!!}!€},‚!|!!|!!|!!|!!|!!|!!|!!}€!}!‚,}€!|!!|!!}€!}!€}!€}!€~}!€~~}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~}!€}€!~|!!~}€!~~}!€}€!}€!}!€}!€|!!}!€}€!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!}!‚,|!!|!!|!!},‚!|!!},‚!}!‚,}!‚,}!‚,|!!|!!},‚!|!!|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!},‚!|!!|!!|!!},‚!}!‚,}!‚,|!!}!‚,}!‚,}!‚,{!-}!‚,}!‚,}!‚,{-!{!-|!!{-!{-!{!-},‚!},‚!~,…,{-!{!-},‚!{-!{-!},‚!{-!}!‚,|!!{-!{,‚-}!‚,|!!}!‚,|!!},‚!}!‚,|!!|!!|!!}€!|!!|!!}€!|!!}!€|!!|!!}!€|!!}€!}!€}!€|!!}!€}!€}€!}!€|!!}!€}€!}€!|!!~}!€}!€}€!}!€}!€}€!}!€}€!}€!~}€!}€!~}!€}!€}!€}!€}!€~}!€}€!~~~}!€}!€}!€~~}!€}€!~~~}!€}!€~}!€}!€~}€!~~~}€!}!€~}€!~~|!!}€!}€!~}€!}€!~}!€}!€~~}!€|!!}€!~}!€|!!~}!€}!€}€!}€!~}!€|!!}€!|!!}€!}€!|!!}€!}€!}!€}€!}!€|!!|!!}!€|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!{-!{-!{!-|!!{!-|!!|!!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!}!€}!€}!€}€!}€!~~~~~~~~~~~~~~~~}€!~}€!}!€}!€}€!}€!}€!|!!|!!}€!}!‚,}€!}€!}€!}!€|!!|!!}€!|!!}!€}!€},‚!}€!}€!}!€}!€}€!~}!€~~}!€~~~~~~~~~~~~~~~~~~~~}€!~~}!€|!!}€!|!!t-9y-~-y-~-y-~-y-~-y-~-{-!{-!|!!|!!|!!|!!|!!}€!}!€}!€}€!}!€~}€!~~}!€~~}!€}€!}€!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!{!-{!-{!-{!-{!-{!-{!-{-!y-~-{!-{!-{!-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-x-„)y-~-x)„-x-„)y-~-{-!{-!{-!{-!{-!{-!z)„!{-!{!-|!!{-!|!!{!-|!!|!!},‚!|!!|!!|!!},‚!{-!|!!},‚!{-!|!!{-!{!-|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}€!|!!}€!|!!|!!~|!!~}!€}!€}€!}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}€!}€!}€!~}€!}€!}€!|!!}€!|!!}!€~,ƒ|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!|!!|!!},‚!},‚!}!‚,|!!|!!{-!|!!|!!|!!|!!},‚!|!!},‚!|!!},‚!|!!},‚!|!!}!‚,|!!}!‚,|!!|!!~,ƒ},‚!},‚!|!!},‚!|!!}!‚,}€!}!‚,|!!~,…,{!-{!-},‚!{-‚,~,…,}!‚,{,‚-~,…,~,…,{!-},‚!{-‚,}!‚,},‚!{!-}!‚,{!-}!‚,}!‚,|!!{,‚-|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!~}!€|!!}€!}€!}!€}!€}!€}!€}!€}!€}€!}€!}€!}!€}!€}!€|!!}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€~|!!~}!€}!€~~~}!€~}!€~}!€}!€~~~}!€~~~}€!}€!~~~}!€~~}!€~~~~~~}!€~}€!~~~}!€}!€~}!€}!€}!€}!€}!€}!€~~}!€}€!~}€!~}€!}€!~}!€|!!}€!}€!|!!}€!|!!|!!}€!|!!}!€|!!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-{€-|!!{!-|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!|!!{-!|!!|!!|!!{-!|!!|!!|!!{-!{!-|!!{!-}€!|!!}!€|!!}!€}!€}!€}!€}€!~}€!}€!}€!~~~~~~~~~~~}€!~~}!€}!€~}!€}!€}!€}!€}!€|!!}€!}!€~|!!~,ƒ~,ƒ}€!}!€}!€}!€|!!}€!|!!}!€~,ƒ~,ƒ~,ƒ~,ƒ~,ƒ}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~}€!}€!}€!y-~-y-~-v9~-y-~-y-~-{!-{!-|!!{-!{!-|!!}€!|!!|!!}!€}€!}!€}€!}!€~~}!€~}!€}€!}€!~}!€}!€}€!~|!!}€!~|!!}!€|!!|!!|!!|!!}!€{-!{!-{!-{!-|!!{-!{!-{!-{!-y-~-y-~-{!-y-~-y-~-y-~-{-!y-~-y-~-y-~-y-~-x)„-y-~-s9†)x-„)y-~-y-~-y-~-{!-{-!x)„-{!-x)„-{!-z!„){!-{!-{!-{!-z)„!{!-{!-z)„!|!!{-!|!!|!!}!‚,|!!|!!|!!{!-|!!|!!{-!{!-|!!}!‚,|!!}!‚,|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!~|!!}€!|!!}€!~|!!}€!}!€}€!~}€!~~~~~~~~~~~~~~~~~~~~~}€!~~~~}!€~}€!~}€!~}!€}€!~}!€}€!~}!€|!!|!!}!€|!!}€!|!!}€!}!€|!!}€!|!!|!!}!€|!!}€!|!!|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!},‚!},‚!|!!}!‚,}!‚,}!‚,}!‚,|!!|!!}!‚,|!!|!!}!‚,|!!|!!|!!~ƒ,|!!},‚!|!!}!‚,|!!|!!},‚!|!!}!‚,}!‚,}!‚,|!!}!‚,|!!{-‚,|!!},‚!}!‚,{-!{,‚-|!!},‚!{-!},‚!y-~-{!-{!-{!-}!‚,}!‚,},‚!},‚!},‚!{!-|!!}!‚,|!!},‚!}!‚,{!-}!‚,|!!|!!},‚!}!‚,|!!|!!|!!|!!|!!}€!}€!|!!}€!}€!}€!}€!|!!}€!}€!}€!}!€|!!}!€}€!}!€|!!}€!}€!}€!}€!|!!}€!}€!}!€}!€}!€~}!€}!€}!€}!€}€!~~}€!~}!€}€!~~}€!~}!€}!€}€!}€!~}!€}€!}€!~~}€!~~~~}!€~~}!€}€!}€!~~~~}!€}€!~}!€}!€}!€}!€}!€}!€}!€}€!~}€!}!€}!€}€!~|!!~|!!}€!}€!}!€|!!}€!|!!|!!}€!}!€|!!}€!}!€|!!|!!}!€}!€|!!}!€|!!}!€}€!|!!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!|!!|!!{-!{!-|!!{-!{!-|!!|!!|!!|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{€-}€!|!!|!!}€!}€!}€!}€!}€!}€!~~~~~~~~~~~}€!~}!€}€!~~}€!}!€}!€|!!}€!}€!~}!€}!€},‚!}€!}€!~~,ƒ}!€}!‚,~ƒ,~}!€~,ƒ}€!}!€}!€}!€}!€~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!}€!}€!|!!v9~-v9~-y-~-y-~-y-~-y-~-{-!y-~-|!!{-!|!!{-!|!!}!€|!!|!!}€!~}€!~~~~~~}€!}€!~|!!}€!}!€}€!}!€|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!{!-{!-{!-{!-{!-{!-|!!y-~-{-!y-~-y-~-{!-y-~-y-~-{!-y-~-y-~-y-~-x-„){-!y-~-x-„){-!y-~-y-~-y-~-{-!y-~-z!„){!-x)„-|!!|!!z)„!|!!{!-z!„)|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!{!-|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!~,ƒ|!!}!€}!€|!!|!!|!!|!!|!!}!€|!!}€!|!!}!€|!!|!!}€!}€!}!€|!!}€!}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~}!€~~~}!€~~}!€}€!~}!€}!€}€!~}!€|!!}€!~~,ƒ|!!}€!}!€}!€|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!}!‚,|!!|!!}!‚,|!!|!!}!‚,|!!}!‚,|!!|!!|!!~,ƒ},‚!|!!},‚!|!!},‚!|!!|!!}!‚,|!!|!!},‚!{!-}!‚,}!‚,}!‚,{!-}!‚,{,‚-{!-},‚!y-~-}!‚,}!‚,},‚!},‚!{,‚-|!!{-‚,|!!{-!},‚!|!!},‚!{-!|!!|!!|!!|!!}!‚,|!!|!!}!‚,~ƒ,}€!}€!|!!|!!|!!}!€}!€|!!|!!|!!~|!!}!€}!€}!€}€!~}!€}!€|!!}€!}€!~|!!}€!~|!!}!€}!€}!€|!!}!€}€!}€!~}!€~}!€}!€}€!~}€!~}!€~}!€~~}€!~~}€!~~~}€!}€!~~}!€~~~}€!~~}!€~}€!}€!~~~}!€}€!~}!€}!€~}€!~}€!~|!!~}!€}!€}!€}!€}€!}€!}€!}€!~}€!}!€}€!}€!}€!}!€|!!|!!}€!|!!}!€|!!|!!|!!}€!|!!}€!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-{!-{!-|!!|!!{!-|!!|!!{-!|!!{-!{!-|!!|!!{-!|!!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€}€!}€!~}!€}!€}!€~~~~~~~~~~~~~~~}!€}€!}€!~}€!}€!}!€}!€}!€|!!~ƒ,}€!}€!}!€|!!}!€~,ƒ~,ƒ}!€|!!}!‚,|!!~ƒ,}€!|!!}!€}!€~,ƒ~,ƒ}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~}€!}€!~}!€|!!~v-~9y-~-t-9y-~-y-~-y-~-y-~-|!!{-!{!-|!!|!!|!!|!!|!!}€!}€!}!€~~~~~~}€!~}!€}€!~}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!{!-{!-{!-|!!{-!y-~-|!!y-~-{!-{-!y-~-y-~-{!-y-~-y-~-{!-y-~-y-~-y-~-{-!y-~-y-~-y-~-x)„-{!-{!-x)„-{!-{!-|!!{!-{!-|!!{!-|!!|!!|!!{!-|!!|!!}!‚,|!!|!!}!‚,|!!|!!},‚!},‚!}!‚,}!‚,|!!|!!},‚!|!!|!!|!!},‚!|!!|!!|!!|!!}!‚,|!!|!!|!!}!€|!!}€!|!!|!!}€!}€!}€!}€!}€!}!€}€!~}€!~}!€}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~}!€~}!€}€!}€!~}!€~}€!~~}€!}!€}!€}!€|!!|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!},‚!},‚!|!!|!!~,…,|!!|!!}!‚,|!!|!!}!‚,|!!},‚!|!!},‚!},‚!|!!|!!},‚!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!}!€},‚!},‚!|!!}!‚,|!!}!‚,}!‚,}!‚,{-!{-!},‚!{,‚-|!!},‚!},‚!},‚!{!-{-‚,|!!{,‚-|!!{,‚-|!!},‚!},‚!|!!{,‚-|!!},‚!{!-|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!}!€}!€}€!|!!}€!}€!|!!}€!}!€|!!}!€}!€|!!~}!€}!€}!€}!€|!!}!€}!€}!€}€!}!€}€!}€!}!€}!€}€!}€!}€!~}!€}!€}!€}!€}!€}!€~~}!€}!€~}!€~~}€!~~~~~~~}€!}€!~~}€!~~~~}€!}€!}€!~~}!€}€!~}!€}!€}€!}!€}!€}€!}€!}!€}!€}!€}€!}!€}!€|!!~}!€}€!}€!}!€}!€}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-€{-!{!-|!!|!!|!!|!!{!-|!!{!-|!!|!!{-€{-!|!!{-!{!-|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!{-!|!!|!!|!!|!!}!€|!!}!€|!!|!!}€!}€!}!€~}!€}€!}€!~~~~~~~~~~~~}€!~~~}!€}€!}!€}!€}€!}!€|!!}€!}€!}€!}!€}!€~,ƒ|!!}!€}!€|!!}€!~}!€|!!}€!~ƒ,~ƒ,}€!}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~|!!}€!}€!|!!t9-v-~9y-~-y-~-y-~-y-~-{-!y-~-{!-|!!{!-}€!|!!|!!}€!}!€}!€}€!}€!~}!€~~}€!~~}€!}€!}€!~}€!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!{-!{-!{-!{-!{-!y-~-{-!y-~-y-~-{-!y-~-y-~-y-~-x)„-y-~-{-!y-~-y-~-y-~-x)„-y-~-{!-y-~-x-„)y-~-{!-{!-z)„!{-!z)„!z)„!{!-|!!z)„!{-!{!-|!!{!-|!!|!!|!!|!!|!!|!!},‚!|!!|!!},‚!|!!{!-|!!|!!}!‚,|!!|!!|!!|!!|!!|!!}!€~,ƒ|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}€!}€!}€!~|!!}€!~~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}€!}€!}€!~}!€~}!€|!!}€!}€!|!!|!!}!€|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!},‚!|!!}!‚,}€!|!!}!‚,|!!|!!|!!}!‚,}!‚,|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!}!‚,}!‚,|!!|!!},‚!|!!|!!},‚!}!‚,}!‚,{!-},‚!{-‚,}!‚,},‚!{-‚,{!-},‚!},‚!{!-{,‚-{!-},‚!},‚!}!‚,{!-}!‚,}!‚,|!!|!!|!!},‚!|!!|!!}!‚,|!!}!‚,}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€}!€}!€}!€|!!}€!}!€}€!~|!!|!!}!€|!!|!!|!!}!€|!!}!€}!€|!!}€!}!€}!€}!€}!€}!€}!€}!€}!€~}€!}!€~}!€~}€!~}!€}!€~~~}!€}!€}!€}!€~~}€!~}!€~}!€~~~~~~}!€}€!~~~~}€!~}!€}!€~}!€}!€}!€~}!€}!€~}€!~|!!~}!€}!€}!€}!€}€!}€!}!€}!€|!!}€!}€!}€!|!!|!!}!€|!!}!€|!!|!!|!!}€!}!€}!€|!!|!!}€!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-{!-|!!|!!{-!{-!|!!|!!{-!|!!|!!|!!{-!|!!|!!{!-}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!~|!!}€!}€!~~}!€~~~~~~~~~~~~}€!~}€!}€!~}€!~}!€}€!}!€}€!}€!}€!}€!}!€}!‚,}€!}!€}!€}!€},‚!~ƒ,|!!~,ƒ~ƒ,~ƒ,}€!}!€}!€|!!~|!!~~}!€~~~~~~~~~~~~~~~~~~~~~~}!€}€!}€!~|!!}!€z)…t9~9v9~-t9~9v-~9t9-y-~-y-~-{-!{-!{!-{!-{!-|!!|!!|!!}!€}!€}!€}!€}€!}€!~}!€~}!€}€!~}!€}!€|!!|!!}€!}€!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!{!-|!!{-!{!-{!-{!-{!-{!-{-!{-!y-~-y-~-y-~-{-!{-!y-~-y-~-y-~-y-~-x-„)y-~-y-~-y-~-x)„-{-!y-~-{!-{!-z!„){-!{!-|!!{-!{!-z)„!z)„!{-!{!-|!!z!„)|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!{-!|!!},‚!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}€!}€!}€!|!!|!!~|!!}€!~|!!~}!€~~~~~~~~~~~~~~~~~~~}€!~~}!€~~}€!}€!}€!}€!~}€!~~}€!}€!~|!!}€!}€!}!€|!!|!!}€!|!!}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!},‚!},‚!|!!},‚!}!‚,|!!},‚!|!!}!‚,|!!|!!|!!|!!}!‚,|!!}!‚,|!!|!!|!!},‚!|!!|!!|!!}!‚,|!!},‚!},‚!|!!},‚!{-!|!!{,‚-}!‚,{!-}!‚,}!‚,{-!{,‚-{!-{,‚-|!!},‚!{,‚-}!‚,{-!|!!},‚!{-!{-!{,‚-},‚!}!‚,}!‚,{!-|!!}!‚,|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!}€!}€!}!€|!!}€!|!!}€!}!€|!!|!!|!!}€!|!!~}!€~|!!}€!}!€}!€}!€}!€}!€}!€}€!}!€}€!~}€!}€!}€!}€!}€!~}!€}!€~}!€}€!~~}€!~~~~~~~}€!~~~~~~}€!}€!~}€!~}€!~}€!~~}!€~}!€~}!€}€!~}€!}€!}€!}€!~|!!}€!}€!~|!!~}€!}!€}€!}!€}!€|!!}€!}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!}€!}€!|!!|!!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{!-|!!|!!|!!{-!|!!|!!|!!{-!|!!{-!{!-|!!|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!}€!}€!}!€}!€|!!}€!}€!}€!}!€}€!~~~~~~~~~~~~~~~~~~}!€}€!~}!€}!€}!€}!€|!!~}€!~|!!~~,ƒ~,ƒ}€!~}€!~ƒ,}!€}!€}!€|!!}!€~,ƒ|!!}€!}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~}€!}€!{!†!}€!v9~-t9~9y-~-y-~-y-~-y-~-y-~-{!-{-!{-!|!!|!!|!!|!!}€!|!!}€!}€!~}!€~}!€~~~}!€}!€~}!€}€!~}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!{-!{!-{-!{-!{-!y-~-{!-{-!y-~-{!-y-~-y-~-{-!y-~-z!„)y-~-y-~-{!-{!-{-!y-~-x)„-{-!{-!y-~-{!-{!-|!!{-!|!!z)„!|!!{!-|!!|!!z!„)|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}€!|!!}!€}!€|!!}!€}!€}€!}€!}!€}€!}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}€!~}!€}!€~}€!}€!~}€!}!€|!!}€!}!€|!!}€!|!!|!!|!!}!€|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,}!‚,|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!},‚!~,…,|!!},‚!{-‚,{!-}!‚,{!-},‚!{-‚,}!‚,},‚!{-!}!‚,{!-}!‚,{!-}!‚,|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!}€!}€!|!!~|!!}€!}€!~}!€~|!!}€!|!!}€!|!!~|!!}€!|!!}€!}€!~}€!}€!|!!~|!!~|!!~}€!~}!€|!!}€!}€!~}!€~}€!~~}!€}!€}€!~~~~}€!~~}!€}!€~~~~~}!€~}€!~}€!}!€}€!}!€}€!}!€}!€}€!~}!€}!€}€!}€!~}€!}€!~|!!}€!}€!~|!!}€!~|!!}!€|!!|!!|!!|!!}!€|!!}!€|!!|!!|!!|!!}!€}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{!-|!!{-!{!-|!!{!-|!!|!!{-!{!-|!!|!!|!!|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!}!€}€!|!!}!€}!€}€!}!€}!€}€!~~}!€~}!€~~~~~~~~~~~~}€!~}!€~}!€}!€}€!}€!}€!}€!~}€!|!!}€!|!!~|!!~|!!|!!~ƒ,~}!€|!!|!!{!†!|!‡~,ƒ}!€}€!~}!€~}€!~~}!€~~~~~~~~~~~~~~~~~~~~}!€}!€|!!}!€|!!|‡!t9~9v9~-t9~9v9~-v9~-y-~-y-~-y-~-{!-{!-|!!{-!|!!|!!|!!}€!}€!~}!€~~}€!}€!}€!}!€~~}€!}!€}€!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!{!-|!!{-!{!-{!-{!-{!-{!-y-~-{!-y-~-y-~-{!-y-~-y-~-y-~-y-~-y-~-y-~-y-~-x)„-{!-{-!x-„)y-~-{!-|!!x)„-|!!x-„){!-{!-{!-|!!{!-{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!}!€|!!|!!~|!!}€!}!€}€!}€!}!€}!€}!€}€!~}!€~~~~~~~~~~~~~~~~~}€!~~}€!~}€!~}€!~~}!€}!€}€!~~}€!}€!~}!€}€!~|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€~,ƒ|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!|!!|!!},‚!|!!|!!|!!},‚!}!‚,}!‚,|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!{-!}!‚,{-!},‚!},‚!{-!},‚!{,‚-|!!{-!{-!~,…,{!-|!!{!-|!!}!‚,|!!},‚!},‚!},‚!},‚!{!-|!!},‚!|!!},‚!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}€!}€!}€!}!€}!€|!!}€!|!!}€!}!€}!€}!€}!€|!!}€!}€!}€!}€!}€!}€!}!€}!€}€!~}!€|!!~}!€}!€}€!~~~~~}€!}€!~}€!~~}€!~~~~}!€~~}!€~~~~}!€~}!€}€!~~}!€}!€}€!~}€!~}€!~}!€|!!}€!}€!}€!}€!}!€}!€}€!}!€}!€}€!}€!|!!~}!€|!!}€!}!€|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!|!!|!!{-!|!!{!-|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!~}!€}!€}€!}€!~}!€~~~~~~~~~~~~~~~~~~}€!}!€}!€}!€}!€|!!~ƒ,}€!}€!~~ƒ,~}!€~,ƒ}!€}!€~ƒ,}€!}€!}!€|!!}€!}!€~ƒ,}!€|!!}€!}!€~}€!~~~~~~~~~~~~~~~~~~~~~}!€}€!~}!€}!€|!!}€!t9~9t9~9v-~9y-~-y-~-t9-y-~-{!-{-!{-!{!-|!!|!!|!!}€!}!€}!€|!!~}!€}€!~~~~}!€}€!~}€!~}!€|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!y-~-{!-{!-{!-{-!{-!{-!y-~-y-~-{!-y-~-{!-y-~-{!-{-!x-„){-!y-~-y-~-y-~-x-„){-!y-~-z!„)x-„){-!{-!y-~-z)„!|!!|!!|!!{!-|!!z!„)|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!}€!}!€|!!}€!~}!€}!€}!€}€!}€!}€!~}!€~}!€~~~~~~~~~~~~~~~~~~~~}€!~}€!~~}!€~}!€~|!!}€!~}!€}€!}€!}!€|!!}€!}!€|!!}!‚,}€!|!!|!!}€!}€!}!€|!!}!€|!!}€!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!}!‚,|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€},‚!|!!},‚!},‚!{!-}!‚,{!-{!-}!‚,~,…,|!!~,…,}!‚,|!!{-!{-‚,}!‚,},‚!},‚!},‚!{-!{!-|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}!€}!€|!!}€!|!!~|!!}!€}!€}!€}€!}€!}!€}!€}!€|!!}€!}!€|!!}!€}!€|!!}€!|!!}!€}!€|!!~}!€}!€}€!}€!}€!~~}€!~}!€~~}€!~}€!~~~~~~~}!€~~}€!~}!€}!€~}!€~~}€!~~}€!~}€!~}!€}!€}€!}€!~|!!~}€!}€!~|!!}!€}!€}!€}!€}!€~|!!}€!}!€}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!{!-{!-|!!{!-{!-|!!{-!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!~|!!}!€~|!!~~~~~~~~~~~~~~~}€!~}€!~~}!€|!!~}€!}€!~}€!~}!€~}!€~,ƒ|!!}€!~,ƒ}€!|!!~,ƒ|!!~ƒ,}€!}€!}!€|!!}€!}!€}€!~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~}!€}€!}!€}!€|!!t9~9t9~9v9~-v9~-v9~-y-~-y-~-y-~-{!-{-!{!-|!!|!!|!!}!€|!!}€!~}€!}€!~~}€!}€!~}€!~}€!}€!}€!}!€}€!~|!!|!!|!!|!!|!!|!!|!!|!!{€-|!!{-!|!!{!-|!!{!-|!!{-!{!-{!-y-~-|!!y-~-y-~-{!-y-~-{!-{-!y-~-y-~-y-~-y-~-{!-{!-{-!y-~-x)„-y-~-{!-{!-|!!z)„!|!!{-!{-!z)„!{-!z!„)|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!|!!}!€}!€}!€}!€}!€|!!~}€!~~~~~~~~~~~~~~~~~~~~~~~}€!~}!€~}!€}!€~}!€~}!€}!€~}€!~}!€}!€}€!}€!|!!}€!|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!}!‚,|!!|!!|!!},‚!|!!|!!|!!}!€|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-}!‚,}!‚,{!-},‚!},‚!},‚!{-!},‚!{-!|!!{,‚-}!‚,|!!{,‚-|!!{!-|!!}!‚,|!!}!‚,|!!},‚!{-!|!!|!!|!!|!!|!!}!‚,~ƒ,|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}€!|!!}!€|!!}€!}!€|!!}!€|!!|!!}€!}€!|!!}€!}!€}!€|!!}€!}€!~}€!}!€}!€}!€}!€}!€}€!~}!€}€!}€!~~}€!~~}!€}€!~}!€~}!€}!€~}€!~~~}!€~~~~~}€!~}!€}!€}€!}€!~}!€}!€}!€}€!}€!}€!}!€}€!}€!}€!~|!!}!€}€!}€!}€!~|!!}€!}€!~}!€}!€|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{!-|!!|!!|!!|!!{-!|!!{!-|!!|!!{-!{-!{-€{-!{!-|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€}!€}€!}€!~}€!~}!€~~~~~~~~~~~~~}!€~}€!~~~}€!~}!€}€!}!€|!!~}!‚,}€!}€!}€!}€!|‡!}!€}!€}!€|!!|!!}€!~,ƒ|!!}€!~,ƒ}!€}!€~,ƒ}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~}!€}!€|!!~}!€|!!{!†!{!†!t9~9t9~9t9~9v9~-v-~9y-~-y-~-y-~-{-!{!-|!!{!-|!!|!!|!!}!€}!€|!!~~}€!~}!€}€!~}!€}!€~}!€}€!}€!}€!|!!}€!}€!|!!|!!|!!|!!|!!{!-|!!|!!|!!{-!|!!{-!{-!{-!{-!{-!{-!{!-y-~-{-!{-!y-~-y-~-y-~-y-~-{!-{-!x-„)y-~-{!-y-~-{!-{-!{-!{!-{-!{-!{-!{-!z)„!{!-|!!|!!z!„)|!!{-!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€|!!|!!}€!}€!}€!}!€|!!}€!|!!}€!}€!~|!!~~~~~~~~~~~~~~}€!~~~~~}€!~~}!€}!€~~}!€~}€!}€!~}!€~}€!~}€!}€!}€!}€!~}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!}!‚,~ƒ,|!!|!!},‚!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!‚,|!!{-!},‚!{-!{!-},‚!},‚!{-‚,}!‚,}!‚,|!!{!-~,…,|!!}!‚,|!!}!‚,|!!{!-|!!{!-|!!|!!},‚!}!‚,|!!~,ƒ|!!},‚!|!!|!!},‚!|!!|!!|!!}€!|!!}€!|!!}€!|!!}€!}!€}!€|!!|!!}€!}€!}!€|!!}€!}€!|!!|!!}€!|!!}!€}!€}!€}!€}!€|!!}€!}€!}€!}€!}€!}!€}!€}!€}€!~}€!}!€}!€~~~~~}€!~~~}€!~~~~~~}€!}€!}€!~}!€~}€!~~}!€~}€!~~}€!}€!}€!}€!}€!}!€}!€}!€|!!~|!!~}!€}!€|!!~|!!}€!}€!~|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-€|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!{-!|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!~}!€|!!~}!€~}!€~~~~~~~~~~~~~~~~~~~~}!€}€!~}€!}€!}€!~}!€}!€}!€|!!}!€}!€}€!|!!}€!{!†!}€!}€!~ƒ,~|!!}€!}!€}€!~}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~}€!~~}€!~|!!}€!{!†!|!!|!!r9|Ct9~9y=-v9~-v9~-v9~-y-~-{-!y-~-{-!y-~-|!!|!!|!!}!€|!!}€!~}€!~}!€~~}€!~~~}!€}!€~|!!~|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!y-~-{!-|!!{-!{-!y-~-{!-{!-{-!y-~-y-~-{-!y-~-{!-x-„)y-~-y-~-z!„)y-~-{-!x-„)x-„)y-~-{-!x)„-{!-|!!{-!{-!{-!x-„){-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!}!€}!€}€!}€!}€!}€!~}!€}!€}!€}!€~~~~~~~~~~~~~~~~~~~~~}€!~~}!€}!€~~~}€!~}!€}!€}!€}€!}€!|!!}€!}€!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!}!‚,|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}€!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!‚,|!!},‚!},‚!}!‚,{!-|!!{,‚-|!!},‚!{-!~,…,{-!|!!}!‚,{-!~,…,{!-|!!}!‚,|!!}!‚,|!!},‚!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!|!!}€!}!€|!!}€!|!!}!€|!!}€!|!!}!€}!€}!€}!€}!€}€!}€!}!€|!!}!€}!€|!!}!€}!€}!€}€!~|!!}€!~}€!~~}€!~~}!€~~~~~}!€~~~~~~}!€~~~~~}€!~~}€!~}!€}!€~}!€|!!~}!€}€!}!€~|!!}€!~|!!}!€}€!}!€}€!~|!!~|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!|!!|!!{-!|!!{-!{!-|!!|!!|!!|!!{-!|!!|!!{-!{!-|!!|!!{-!{-!|!!|!!|!!|!!}!€|!!}€!}€!|!!}€!~}!€}!€}!€}!€~~~~~~~~~~~~~~~~~}!€~~~~}€!}€!}€!}€!}!€|!!}€!}!€}€!}€!~~,ƒ}€!}!€~ƒ,}€!}!€}!€}!‚,}€!}!€~ƒ,~ƒ,}€!}!€}!€}!€}€!~}!€~~~~~~~~~~~~~~~~~~~~}€!~~{!†!}!€}!€|!!|!!t9~9t9~9t9~9t9~9y-~-y-~-v9~-y-~-{!-{-!|!!{-!|!!|!!|!!}!€}!€|!!~}€!~}€!~~}€!~}!€}€!~|!!}€!}€!}€!|!!}!€|!!}!€|!!|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!{-!{!-{!-{!-{!-{!-{-!y-~-{!-{!-y-~-y-~-{!-{-!y-~-y-~-{-!y-~-z)„!y-~-{-!z)„!{-!{-!x)„-|!!|!!|!!|!!|!!{-!{!-|!!{-!|!!|!!~ƒ,}€!|!!|!!}€!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!}€!}€!}€!}€!}!€}!€}!€}!€}!€}!€~}!€}€!~~~~~~~}!€}!€~}!€~~~~~~~~}!€}€!~}!€~|!!~}€!~}!€}€!}!€}€!~|!!}€!}!€}!€}!€|!!}!€|!!|!!|!!~ƒ,~ƒ,|!!|!!|!!|!!|!!|!!|!!|!!}!€},‚!|!!}€!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}€!|!!|!!}€!|!!|!!|!!|!!}€!}€!}!€|!!}€!|!!|!!|!!}!€|!!|!!|!!}!‚,{!-},‚!{-!},‚!},‚!{-!{!-}!‚,|!!{-!}!‚,{!-|!!},‚!|!!|!!}!‚,|!!|!!|!!},‚!|!!|!!},‚!|!!|!!},‚!|!!|!!}!‚,|!!|!!|!!}€!|!!|!!}!€|!!|!!}€!}€!}!€|!!}€!|!!}€!}€!}€!}!€|!!|!!}!€|!!|!!}€!}!€|!!|!!}€!|!!|!!}€!}€!}€!}€!}!€}!€}!€}€!~}!€}€!}€!~~}!€~~}!€~~~~~~~~~~~}€!~}!€~}!€~}€!~}!€}!€~}!€}!€|!!~}!€}!€}!€}€!}€!}€!}€!}€!}€!}€!}€!}€!}!€}!€}!€|!!}€!}€!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!{-!|!!{!-|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€}€!}€!~}!€}€!~}€!}€!~~~}!€~~~~~~~~~~~~~~}!€~~}!€}!€}!€}€!~}€!~}€!}!€~,ƒ|!!}€!}!€}!€|!!~}!€|!!~|!!~ƒ,}€!~}!€~ƒ,~}!€}!€}!€~~}!€~~~~~~~~~~~~~~~~~~}!€}€!}!€}!€}€!|!!}€!}!€uC}=t9~9t9~9v9~-t9~9t-9y-~-y-~-y-~-|!!y-~-|!!|!!|!!|!!}!€|!!}€!}!€}!€}!€~~}!€~}!€}!€}!€}€!~}€!}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-{!-{!-{!-{!-{!-{!-{!-{-!y-~-{-!y-~-y-~-y-~-{!-{!-y-~-y-~-{!-{!-x-„){!-y-~-|!!x)„-{-!{-!z)„!{-!x)„-{!-|!!z)„!|!!z)„!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}€!|!!}€!}€!}!€}€!|!!}€!}!€}!€}!€}!€~~~~~}€!~~~~~~~~~~}!€~}!€}€!~~~~~}!€~}€!~}!€}€!}!€}!€}!€}!€}€!~}€!}!€}!€}!€|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!~ƒ,}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!},‚!|!!|!!},‚!}!‚,}!‚,}!‚,}!‚,{!-}!‚,}!‚,|!!},‚!}!‚,|!!}!‚,}!‚,|!!},‚!},‚!},‚!|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!|!!|!!}€!}!€|!!|!!|!!}!€|!!}!€}€!}!€|!!}€!}!€|!!}€!}€!}€!}€!}€!}!€}€!|!!}€!}€!}€!}€!~}!€}€!~~~}!€~~~~~}€!~}!€}€!~~~~~}!€~~}€!~~}€!~}!€~}€!}€!~~~}!€}!€}€!}€!~|!!}€!}€!}!€}!€}!€|!!}€!}€!|!!}€!}!€}!€|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!{€-}€!|!!}€!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!|!!{-!{!-|!!|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}€!}€!}!€}!€}€!}€!~~~}!€~~~~~~~~~~~~~~~~}€!~}!€~}!€}€!}€!}€!}€!~|!!}€!}€!}€!}€!}€!|!!}!€~,ƒ},‚!~ƒ,~ƒ,}!€}!€|!!}!€|!!}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~|!!~}€!}€!{!†!}€!{!†!|!!t9~9rC|9t9~9v-~9y-~-v9~-y-~-y-~-{-!{-!|!!{-!{!-}€!}!€|!!}€!~}€!~}€!}€!~~}!€~}!€~}!€|!!}!€}€!~|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!|!!|!!|!!{-!{!-|!!{!-|!!{!-{!-{!-{!-{!-{!-{-!y-~-{!-{-!{-!y-~-{!-{-!y-~-y-~-{-!{-!{-!{-!{!-|!!|!!{-!{-!|!!|!!{-!|!!|!!|!!|!!|!!}€!}€!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€|!!}!€}€!}€!}!€|!!}€!}€!}€!~}!€}!€}€!}€!~~~~~~~}€!~~~~~~~~~}€!~~}€!~}!€}!€|!!}€!}!€~}!€}!€}€!}€!}€!~}€!}€!|!!}€!~}!€}!€|!!}!€|!!}€!|!!|!!}€!|!!|!!|!!}!€|!!|!!|!!}!€|!!|!!}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!|!!}!€|!!}!€|!!}!€}€!}€!}!€|!!|!!}!€|!!|!!}€!|!!},‚!},‚!}!‚,{!-},‚!{-!},‚!}!‚,{!-|!!},‚!}!‚,|!!},‚!},‚!|!!}!‚,|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!~}!€|!!|!!}€!}!€}!€|!!}€!}!€|!!|!!}€!}€!|!!}!€|!!}€!}€!|!!}€!}!€|!!|!!~}!€}!€}€!}€!}€!}€!~}€!~~~~~~~~~~~~~~~~~~}!€~~~}€!~}!€~}!€}!€~}!€|!!~|!!}€!~}!€}€!}€!~}€!}€!}€!}€!}€!}!€|!!~}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-}€!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{!-{!-|!!|!!|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!}!€}€!}€!}€!~}!€}!€}!€~~}!€~}€!~}!€~~~~~~~~~~~~~~~~~~~}€!}!€~}!€}€!}€!}€!}€!~}!€}€!~ƒ,}€!}!€}€!~}€!~}!€}!€|!!}!€}!€}!€}!€{!†!}!€~}!€}!€~~~~~~~~~~~~~~~~~~~}€!~~}€!|!!}€!|!!{!†!|!!z!„)rC|9w=9t9~9t9~9v9~-v9~-v9~-y-~-y-~-y-~-{-!{!-|!!|!!|!!}!€}!€|!!}!€}€!}!€~~~~}!€}€!}€!}€!~}!€}!€}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!{!-{!-|!!{-!{-!{-!{-!{-!{-!{-!{-!{-!{-!{-!y-~-{!-{-!{!-x)„-{-!y-~-{!-|!!{-!{-!y-~-z!„){-!{-!{!-z)„!|!!|!!{!-|!!|!!|!!|!!}!‚,|!!|!!|!!|!!}!€|!!|!!}€!|!!}!€|!!|!!}€!}!€}!€}!€|!!|!!|!!|!!|!!}€!}!€|!!|!!}€!|!!|!!|!!|!!}€!|!!}!€|!!}!€}€!}€!}!€|!!}€!~}!€~}€!~~~~}!€}!€~~~~~~~~~~~}!€}€!~~~}!€~~}€!}!€}!€}!€}€!}€!~}€!}€!~}!€}!€|!!}€!|!!}€!}€!}€!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€|!!}!€}!€}€!}€!|!!}€!}€!}€!}!€|!!}€!}!€|!!|!!}€!|!!|!!|!!},‚!},‚!|!!}!‚,|!!}!‚,}!‚,}!‚,}!‚,}!‚,|!!}!‚,|!!|!!~,…,|!!|!!}!‚,|!!|!!|!!|!!},‚!|!!}!‚,|!!},‚!}!‚,|!!|!!},‚!|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!}€!|!!}€!|!!|!!}!€|!!}!€|!!|!!|!!}€!}€!}€!|!!}€!}€!}€!}!€|!!}€!}!€}!€|!!~~}!€}€!~~~~~~~~~~~}€!~}!€}€!~~~~~~~}€!~}!€~}€!}€!}€!}€!}!€}!€}!€}!€}€!~|!!~}!€}!€}!€}!€}!€|!!}€!}€!}€!}!€|!!|!!~|!!}€!}€!}€!}€!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!{-!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€}!€}!€|!!~|!!~}€!~}€!~~~~~~~~~~~~~~~~~~~}€!~}€!~~~}€!~}!€}€!~|!!~ƒ,}€!}€!}€!~ƒ,}€!|!!}!€},‚!}!€}!€}!€~ƒ,}€!|!‡|!!}€!}€!}!€~~}!€~~~~~~~~~~~~~~~~~~~}!€}€!}!€}€!{!†!}€!}€!}!€|!!r9|Cr9|Cr9|Ct9~9t9~9y-~-y-~-y-~-y-~-|!!{-!{-!|!!|!!}€!|!!}€!}€!~}!€}€!}€!}!€}€!}€!}€!~}!€}!€}!€}€!}!€|!!}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!{!-{-€|!!{!-|!!{-!{-!{-!{!-{!-{!-{-!y-~-{-!y-~-|!!y-~-{!-y-~-{!-{-!y-~-{-!y-~-x)„-z!„)|!!{-!z!„){-!|!!{-!{!-|!!{-!|!!|!!}!‚,|!!|!!|!!}!€|!!}€!}€!|!!}€!|!!}!€|!!|!!}€!|!!}€!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€|!!}€!}€!}!€|!!}€!}€!}€!}€!}!€}!€~~~~~~~~~~}!€~~~~~}€!~~~~}!€}!€~}!€}€!~}€!~}€!~}!€}!€|!!}€!}€!}€!~|!!}€!}€!|!!|!!}!€|!!|!!|!!}!€|!!|!!|!!}!€|!!}€!~,ƒ|!!|!!|!!|!!|!!|!!}!€|!!~,ƒ|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€}!€|!!}€!}€!}€!}!€|!!}€!}€!|!!|!!}€!}!€|!!}€!}!€|!!}€!|!!|!!|!!|!!}!‚,}!‚,}!‚,}!‚,|!!|!!},‚!|!!},‚!},‚!|!!}!‚,|!!|!!}!‚,}€!|!!|!!},‚!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!|!!}€!}!€|!!|!!|!!}!€|!!}€!|!!}€!|!!}€!|!!|!!}!€|!!}!€|!!}€!}€!}€!|!!}!€}€!~~~}!€}!€}€!~~~~~~~~~~~}!€}!€~~}€!~~}€!}€!~~~~~~}€!~}!€|!!}€!}€!~}!€}€!|!!|!!}€!}€!}!€}€!}!€|!!}€!}!€}!€}€!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!{-!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!{-!{!-|!!|!!{-!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€}€!~}!€}€!}!€}€!~~~~~~~~~~~~~~~~~~~~~~}!€~}€!}€!}!€~}€!~}!€}!€}!€}!€}!€}€!~}€!~}!€}€!}€!}€!}!€|!!~|!!}!€~}!€~}!€~~~~~~~~~~~~~~~~~~~~}!€~}!€}€!}€!}€!|!!{!†!|!!{!†!rC|9rC|9t9~9t9~9y-~-t9~9v-~9y-~-y-~-y-~-{!-{!-|!!|!!|!!}!€|!!}!€|!!}€!}€!~}€!~}!€~}!€~|!!}€!~|!!~|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-{!-}!€{-!{!-|!!{!-{!-|!!{-!{!-{!-{!-{-!y-~-{!-{!-|!!{!-{!-{!-x)„-|!!{-!{-!y-~-z!„){-!|!!{-!|!!z)„!z!„)|!!|!!|!!|!!|!!}!€|!!}€!}!€|!!|!!}€!|!!|!!}€!|!!}€!|!!}!€|!!|!!~|!!|!!|!!|!!}€!|!!|!!}!€|!!}€!}!€|!!}€!|!!}€!|!!~}!€|!!}€!~|!!~}!€}!€}€!}€!~}€!~~~}!€}!€~}!€~}€!~~~}!€~}€!~~}€!}€!~}!€}!€}€!}€!}€!}€!}€!~}!€~}€!~}€!~}!€}!€}€!}€!}!€|!!}€!|!!}€!|!!}!‚,~ƒ,}€!}!€|!!|!!|!!|!!}!€},‚!|!!}!€}!€|!!|!!|!!}!€|!!}!€}€!}€!}€!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!}€!}!€|!!}€!|!!}€!|!!}€!|!!}€!|!!~|!!~}!€}!€}!€}!€}!€|!!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!},‚!},‚!|!!|!!|!!|!!},‚!|!!|!!}!‚,|!!|!!|!!|!!}€!|!!|!!},‚!|!!|!!},‚!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€|!!}€!|!!}€!|!!}!€}!€|!!}!€|!!}€!}€!}€!|!!}!€|!!}€!|!!}€!}!€}!€}!€|!!}!€}!€|!!}€!~}€!~}!€}!€}!€~~}!€~~~~~~~}€!~}€!~~~}€!}€!~}€!}€!~~}€!}!€}!€}€!}€!}€!~}!€}€!~}€!}€!}€!}€!}€!~~|!!}!€|!!|!!}€!}!€}!€}!€|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{-!|!!|!!|!!{!-|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{!-|!!{!-{!-|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!}!€}€!}!€}!€}€!}€!}!€}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~~}!€}!€~}€!~ƒ,~|!!}€!}€!}€!}€!}€!}!€|!!|!!~ƒ,}€!|!!}!€~,ƒ~ƒ,~|!!}€!~}!€}!€}€!}!€}€!}€!~~~~~~~~~~~~~~~~}€!~}€!}€!}!€}€!}!€}€!~|!!}€!|!!u=}CrC|9r9|Ct9~9t9~9y-~-y-~-y-~-y-~-y-~-|!!{!-|!!{!-}!€|!!}€!~}€!~}€!}!€}€!~}€!~}€!}!€}€!~|!!}€!}!€}!€}€!}€!}€!|!!|!!{!-|!!{-€|!!|!!|!!|!!{!-{!-{!-{!-|!!{-!{-!y-~-|!!{-!y-~-{!-{-!{-!{-!y-~-{-!x-„){-!x-„)y-~-{!-{!-|!!{-!{!-|!!{-!{-!{-!|!!|!!},‚!|!!}!‚,}€!|!!|!!|!!|!!}!€}!€|!!~}!€}!€|!!}!€}!€|!!|!!}€!|!!}!€}€!}!€|!!|!!|!!}€!}!€|!!|!!|!!}€!}!€}!€}!€}€!}!€}!€}!€}!€}€!}€!}€!}!€}€!~~~~~~~~~~~}!€~~~~~}!€~~|!!~~}€!~}€!}€!}€!~}!€~|!!}€!}!€}€!}!€}€!}€!|!!}€!}€!~|!!}€!|!!|!!~ƒ,}!€}!€|!!|!!|!!}!€}!€|!!}!€}!€|!!}€!|!!|!!|!!}!€|!!|!!}€!~ƒ,|!!|!!}€!|!!}€!|!!|!!|!!}!€|!!}!€}€!}€!|!!}€!}!€|!!}€!~}!€}!€|!!}€!~}€!}!€}!€|!!}€!}€!}€!~|!!~}€!}€!}€!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!~,ƒ},‚!|!!|!!|!!},‚!|!!~ƒ,~ƒ,|!!|!!},‚!},‚!|!!|!!},‚!~,ƒ|!!~,ƒ},‚!|!!|!!},‚!|!!|!!}€!}€!|!!|!!}!€|!!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}!€|!!|!!|!!}€!}!€}!€}!€}€!|!!}€!~}!€~~~}!€~~~~~~~~~}€!~}€!~~}!€~}€!~~~~}!€~}€!~}!€}!€}!€}€!~|!!~}€!}€!}€!~}!€}!€}!€|!!}!€}€!|!!}€!|!!|!!}!€|!!}€!}!€|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-{!-|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!}€!}€!~~}!€}€!~}!€}!€~~~~}€!~~}€!~~~~~~~~~~}€!~~}!€~~~}!€~}!€}!€}!€}!€}!€~ƒ,}€!}€!}€!}!€}!€}!€}!€}€!|!!}€!}!€|!!}€!~}!€~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~}€!}!€}€!}!€z)„!}€!}€!w)‰)rC|9pC{Ct9~9w9=v-~9t9~9v9~-v9~-y-~-y-~-{-!{-!|!!|!!|!!|!!}€!|!!~}!€}!€~}€!}€!~}!€}!€}!€}!€}!€|!!~}!€|!!}!€|!!}!€|!!|!!|!!|!!|!!{-!|!!{!-{!-|!!{-!|!!{-!{!-{!-{!-|!!{-!{-!{!-{!-{!-{!-{!-{!-{!-|!!y-~-{!-|!!{-!{-!z)„!{-!{-!{!-z!„)|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}!€}!€}!€|!!|!!|!!}€!}€!|!!}€!|!!|!!|!!}€!}!€}!€|!!}€!}€!}!€}!€}€!}€!}€!}€!}€!}!€}€!~}!€}€!~}!€}€!~~~~}€!~~~~}€!~~~}!€~~~}€!~~~|!!~|!!~}€!~}!€~|!!}€!~}!€}!€}€!}!€|!!}€!|!!}!€|!!|!!}€!|!!}!€}!€|!!}€!|!!}!€|!!}!€}!€|!!~}!€}!€|!!|!!|!!}€!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€|!!}€!~~|!!}€!}€!~}€!}€!}!€}€!}€!~~}!€}!€}€!~}!€}!€}!€}!€|!!|!!|!!|!!|!!}€!|!!},‚!~ƒ,|!!},‚!|!!|!!},‚!|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€|!!|!!}€!}€!}!€|!!|!!}!€}!€|!!}!€}!€}!€|!!|!!}€!}!€~}!€}!€}!€}!€}!€}!€}€!~~}!€}!€~}!€~}!€~~~~~}€!~~~~~~}!€}€!~}!€}!€~}!€}€!~}!€}€!}€!|!!~}!€|!!}€!}€!|!!~|!!|!!}€!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!{-!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!{!-|!!|!!{-!|!!|!!|!!{-!{-!|!!|!!|!!|!!|!!|!!{-!}!€{-!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}!€}!€}€!}!€}!€}€!}€!~~}!€~~}€!~~}!€}€!~~}!€~~~~~~~~~~~~~~~}!€}!€~}!€~}!€}€!~}!€}!€}!€~,ƒ}!€}€!}€!|!!}€!}!€|!!~}!€}!€~,ƒ}!€|!!}€!}!€~~~~~~~~~~~~~~~~~~~~~~}!€}!€}!€~}!€|!!~|!!{!†!~rC|9r9|Cw9=t9~9v9~-v9~-y-~-y-~-y-~-{-!y-~-{!-|!!|!!|!!~|!!~|!!~~|!!~}€!~}€!~}!€}€!}€!~|!!}€!}€!}!€|!!|!!|!!|!!|!!|!!{!-|!!{-!{-!|!!|!!|!!{-!{!-{-!|!!{-!{-!{!-{!-{-!{!-{!-{!-{-!|!!{-!y-~-{!-{!-{!-{-!{-!{-!z)„!z)„!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!~ƒ,}€!}!€}!€}€!}!€}!€}!€|!!}!€}€!}€!|!!~}!€}!€|!!|!!}!€|!!|!!|!!}€!~|!!}€!}€!}€!}!€}!€|!!|!!}!€|!!}€!}€!~}!€}!€}€!~~~}!€}€!~~~~~~}€!~}!€}€!}€!~~~}!€}!€}!€}€!}€!}€!~}€!~|!!~}!€|!!}!€}€!}€!}€!}!€|!!}!€|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!}€!|!!}€!|!!}!€},‚!|!!}!€|!!|!!|!!|!!}€!}!€|!!|!!|!!}€!}€!}€!~|!!~~|!!~}!€}€!}€!}€!~}€!}€!}€!~}!€}!€}!€}€!}!€~}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€|!!|!!}€!|!!|!!}€!|!!|!!}!‚,}€!|!!}!€|!!}!€|!!}€!|!!}!€}€!}!€}!€|!!}€!}€!}€!}!€}!€}€!~}!€~~~~}!€~~~~~~~~~~}€!~~}€!~}€!}€!}!€~}€!}€!~}!€}!€~|!!~}€!~~}!€}!€}!€}€!}!€}!€|!!|!!}€!~}!€|!!}€!}€!}€!|!!}!€|!!|!!|!!|!!|!!|!!{-!{-!|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!{!-|!!{-!|!!|!!|!!|!!{-€{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!~}!€}€!~}!€}!€}!€}€!~~~~~~~~~}!€~~~~~~~~~~~~~~~~~~}!€}€!}€!~|!!}!€|!!}€!~}€!}!€~,ƒ~,ƒ}€!}!€|!!}€!~ƒ,~}!€}€!}€!}€!~}!€}!€}€!}€!~~~~~~~~~~~~~~~~~~}!€~~}€!}€!}!€}!€|!!}€!}!€}!€pC{CrC|9rC|9t9~9t9~9v-~9t9~9t-9y-~-y-~-{!-|!!{-!|!!|!!|!!}!€|!!~}€!}!€}€!}€!~}€!}!€~~}!€}€!|!!}€!}€!}!€}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!{!-|!!{!-{!-{!-|!!{-!{-!|!!{-!{-!{-!{!-{-!{-!{-!z)„!{-!{-!x)„-{!-{!-{!-|!!x-„){!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!|!!}€!|!!|!!}€!}€!}€!}€!~}!€|!!}€!}€!}€!}€!}€!}€!~}!€|!!}€!}!€}!€}!€}!€}!€}€!}€!}€!~|!!~|!!}€!}€!~~}!€~~~~~}€!~~}€!~~~~~}€!~}!€~}!€}€!~}€!~}!€|!!~}€!}€!}€!~}€!}€!~}!€}€!~}€!}!€|!!|!!}€!|!!}€!|!!|!!}€!|!!}!€|!!}€!|!!|!!}€!}!€|!!}!€|!!|!!}€!}!€|!!}!€|!!}!€}!€|!!|!!}!€|!!|!!}€!|!!|!!|!!}!€}€!}€!~}€!}€!~}€!~~|!!~~}!€}!€}€!~~}€!}€!}€!~}€!}€!~|!!}!€}€!}€!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!},‚!|!!|!!|!!},‚!|!!|!!|!!|!!|!!}!‚,|!!}!‚,|!!|!!}!€|!!}!€~ƒ,|!!|!!}!€|!!}!€|!!|!!}!€|!!}!€}€!}!€|!!|!!}€!}€!|!!}!€|!!|!!}€!}!€}!€}!€}€!}€!~~}€!}€!~~}!€}€!~~~~}€!~~~~~}€!~~~~~}€!~~}€!~}!€~}!€~~|!!~|!!}!€|!!}€!~|!!}€!}!€}€!}!€}!€}!€}!€|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€{-!{-!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!{!-|!!{!-|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€|!!|!!|!!}!€}!€}€!}€!|!!~}!€}€!~~}!€~}!€}!€~}€!~~~}!€~~~~~~~~~~~~~~}!€~}€!~}!€~}€!}!€}!€~}!€}€!}€!~ƒ,}!€|!!}€!~}!€~,ƒ~}!€}!€},‚!}€!}!€|!!}€!}€!~~}!€~~~~~~~~~~~~~~~~~~~~~}!€|!!~|!!}€!}€!|!!}€!z!„)uC}=pC{Ct9~9rC|9t9~9v9~-v9~-y-~-y-~-y-~-|!!{-!{!-|!!|!!}!€|!!~}!€}!€~}!€~}!€}!€}€!}€!}!€|!!~}€!}€!~|!!~}!€|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!|!!|!!|!!{!-{-!{-!{!-{!-{!-{!-y-~-|!!{-!{-!{-!{!-{!-{!-{!-z!„)y-~-{!-z!„){!-|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}€!}€!}€!|!!}€!}€!}!€}!€|!!}!€}!€}!€|!!}€!}!€|!!~}!€|!!}!€}€!}€!}!€|!!~}!€|!!}!€}!€}!€~|!!~~~}!€~~~~}€!~~~}€!}€!~~~~~}!€~~}!€}€!~}€!}€!}€!}€!}€!~}!€}!€}€!}€!}€!}€!}€!}!€}€!}!€|!!}!€}!€~}!€|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€|!!}!€}€!|!!|!!}!€}!€|!!}€!}€!|!!}€!|!!|!!}€!|!!}€!}€!~}!€}!€}!€~}!€~}!€~}€!~~}€!~}!€~~}€!}€!~~~}!€}!€}!€}€!~}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!~ƒ,}€!|!!}!€~,ƒ|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!}€!|!!|!!}€!~ƒ,}€!|!!|!!}€!|!!|!!}€!}!€|!!}€!}!€}€!}€!}€!~~~~~~~~~}€!~~~~}!€~}€!~}€!}!€}!€~}!€}!€}!€}€!}!€}!€~}!€}€!~}€!}€!}!€~}€!}€!}!€|!!}€!|!!}!€}!€|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!{-!|!!|!!{!-|!!{-!|!!{!-|!!|!!|!!|!!{!-{€-}!€|!!|!!|!!{!-|!!{!-|!!{-!{!-|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}!€}!€}!€}€!}€!~}€!~~}€!}€!~~~~~}!€}€!~~~~~~~~~~~~~~~~~~~|!!~~}€!}!€~ƒ,~}!€~}€!}€!}!€}!€~,ƒ}€!~ƒ,}€!}€!~}!€}€!}!€}€!}€!}€!~~}!€~~~~~~~~~~~~~~~~~~~}!€~}€!}€!}€!}!€}€!}€!}!€w)‰)uC}=uC}=r9|Ct9~9t9~9v-~9v-~9t9-y-~-y-~-y-~-|!!{-!|!!|!!|!!}!€}!€}!€|!!~}!€}€!~}!€~}!€}€!~}!€}!€}€!|!!}€!}€!|!!|!!}€!|!!}!€{-!{!-|!!{-!|!!|!!{!-{!-|!!{-!|!!|!!{-!{-!{-!{-!|!!{-!{-!{!-{!-{-!{-!{-!{-!{!-{!-|!!{-!{-!z)„!{-!{!-|!!{-!|!!|!!|!!|!!|!!}€!|!!|!!}€!}!€}!‚,}€!}!€|!!}€!}€!|!!~}!€}!€}!€}!€}!€~}!€}!€}!€}€!}€!}€!}€!|!!~}€!}!€}!€}€!}!€|!!}€!}€!~}€!}!€|!!~}€!~}!€~}€!}€!~~~}€!~}€!~~}€!}€!~}!€}!€~}!€}€!}€!~}!€}!€}€!~}!€}€!}€!~}!€}!€}€!}€!~}€!}€!}!€}!€}!€}€!|!!|!!|!!}€!|!!|!!}€!|!!|!!}!€|!!}!€|!!}!€|!!|!!}€!|!!}€!}!€|!!}!€}!€|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}€!}€!}€!}!€}!€}!€~}!€~~~}€!~~}€!~}€!~~}!€~~~}!€}€!~~}€!~}!€}!€~|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!}!‚,~ƒ,|!!|!!|!!|!!|!!|!!|!!|!!~,ƒ|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!~ƒ,}€!|!!}!€|!!|!!}€!|!!}€!}!€~,ƒ|!!}!€|!!}€!}€!|!!|!!}€!}!€}!€|!!}!€}!€}€!}€!~}!€~}!€~}€!~~~~~}!€~~~~~}€!~~~~}!€}€!~~~}!€~}€!~}!€~}€!}€!}€!~}€!}€!}!€}€!|!!}!€|!!}€!}€!}€!~|!!|!!}!€|!!}!€|!!|!!}€!|!!{€-{!-|!!|!!{!-|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{!-|!!{!-|!!|!!{!-|!!{!-|!!|!!{-€{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!~}!€~~}!€~~}!€~~~}€!~}!€~~~~~~~~~~~}!€~~~~}€!~~}€!}€!~~}!€}€!}€!~}!€}!€|!!}!‚,}€!~ƒ,}€!}!€}!€}€!|!!~}€!}€!|!!}!€~ƒ,}€!~~~}!€~~~~~~~~~~~~~~~~~~}!€~}€!~}!€}!€}!€}€!|!!{!†!{!†!{!†!pC{CrC|9rC|9t9~9t9~9t9~9v9~-v-~9y-~-y-~-y-~-{-!{!-|!!|!!|!!|!!}!€|!!~}!€}!€}!€}!€}€!}€!}€!}€!}€!~}!€}!€}!€}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!{!-|!!{-!{!-|!!{-!{!-{!-{-!{!-{!-|!!{-!{!-{!-|!!{-!{-!{!-{!-{!-|!!{-!{-!{-!z)„!z!„){!-|!!}!‚,|!!|!!|!!|!!}€!}!€|!!~|!!}!€}!€}!€}€!}€!}!€}!€}€!}!€}€!~}!€}!€|!!~}!€}!€}!€}!€}!€|!!}€!}€!}€!}!€}!€}!€}!€}€!}€!}!€~}!€}!€}!€}!€}€!}€!~~~}!€~~~~}€!~~~~~~}!€}€!~~}€!~}!€}!€}€!|!!~~}!€}!€}!€}!€}!€|!!}!€}!€|!!}€!}€!}!€}€!}!€|!!}!€|!!|!!|!!}!€|!!|!!|!!|!!|!!}€!|!!}!€|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!}!€|!!}€!|!!}€!}!€|!!}€!}!€}!€|!!~}!€}€!~~~~~}€!~~}€!~~}€!~}!€}!€}€!~}!€}!€}!€}!€}€!}!€}!€}!€|!!|!!}!€|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}!€},‚!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!}!€|!!}!€~,ƒ|!!|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!}€!|!!}€!|!!|!!}!€|!!}!€|!!}!€}!€}!€|!!}€!}€!}€!}€!}€!}€!}€!~~}€!~~}!€~~~~~~}!€~~~}!€}!€~}€!}€!~}!€}€!}!€~~}€!}!€}!€}!€}€!}€!}€!~}€!}€!~|!!}€!}€!}€!}€!|!!}€!}€!}€!|!!}€!|!!|!!|!!|!!|!!}€!{!-|!!|!!|!!|!!{!-|!!|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{!-|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!}!€|!!|!!|!!|!!}€!}!€|!!|!!}€!}€!}€!}€!~~~}!€~}€!~}!€~~~~~~~}!€~~}!€~~~~~~~}!€~~}!€}!€~~|!!~}!€}!€}!€|!!}€!}€!~}!€}€!}€!}€!}!€~,ƒ}!€}!‚,~}!€~}!€}!€~}€!~ƒ,~~}€!~~~~~~~~~~~~~~~~~~~~}€!~~}!€{!†!}!€|!!}!€z!„)qH}Cu=}Cr9|Ct9~9t9~9t9~9v-~9t-9y-~-{-!{-!{!-|!!{-!|!!|!!|!!}€!}!€}€!}€!~}€!~}!€}!€}€!~}€!}€!}!€}€!}€!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!{-!|!!{-!{!-|!!{-!{-!{!-{!-|!!{-!{!-{!-|!!{-!{!-|!!x-„)|!!{-!{!-|!!|!!z)„!{!-|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}!€|!!|!!}€!|!!}€!}€!}€!}!€}!€}€!}!€|!!~~}!€}!€}!€}!€}€!}€!}€!}!€}!€}!€~}!€}!€}€!~}!€}€!}€!~}!€~|!!~~~}!€}!€~}€!~~}!€~}€!~~}!€}!€}!€~}€!}€!~}!€}€!}€!~}€!}€!}€!|!!~}!€}!€}€!}€!~~}!€}€!}€!}!€}€!}!€}€!}!€|!!|!!}!€|!!|!!}€!|!!}€!|!!}€!|!!}!€|!!}€!}!€|!!}!€|!!|!!}€!}€!}!€}!€|!!}€!}€!}!€}!€|!!}!€}!€|!!}€!}!€}!€}€!~~~~~~~~}€!~}€!}€!~~}!€}€!~~}€!}€!}€!}€!~~}!€}€!}€!}!€|!!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!}!‚,}€!~ƒ,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}!€}!€|!!}!€|!!|!!}€!}€!}!€|!!|!!}€!}€!}€!~}€!~~}€!~~~~~~~~~~}€!~~}!€~~}€!~}€!~}!€~}€!}€!}€!}!€}€!}€!~}!€|!!~}!€}!€}!€}€!~}€!}!€|!!}!€}€!}€!|!!|!!}!€|!!|!!|!!|!!{€-|!!{-!{!-|!!{!-{!-{!-|!!|!!{!-|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!{!-{€-|!!|!!|!!|!!{-!{!-{!-|!!{-!|!!{-!{-!{-!|!!|!!{-!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}€!}€!~}!€}!€~}!€}€!~~}!€~}!€~~}!€~}€!~~~~~~~}€!~~~~~~~~~~~}€!~~~~|!!}€!~~}!€~ƒ,~ƒ,}!€}!€~,ƒ}€!}!€|!!}!€~ƒ,~},‚!{!†!}€!~}!€~}!€}€!~~~~~~~~~~~~~~~~~~~~}!€}€!~}!€}!€}!€|!!}€!z…)|!!pC{CrC|9rC|9r9|Cw=9v9~-t9~9y-~-v9~-y-~-y-~-{!-|!!|!!|!!|!!|!!}€!}€!}€!}€!~}!€}!€~}!€}!€}!€}!€}€!}€!}€!}€!~|!!}€!|!!}€!|!!|!!|!!|!!|!!{-!|!!|!!{-!{-!|!!{-!{!-|!!{-€{-!|!!{!-|!!{!-{!-{!-{!-{!-{!-{!-{!-{!-{!-z!„){!-|!!{-!{-!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!~}!€}!€}€!}!€}!€}!€}!€}!€~}!€}€!}€!~|!!}€!}€!}€!}!€}!€}€!~}!€}!€}!€}!€}€!}€!}€!}€!}€!}€!}€!~}!€~}!€~}!€~~}!€~~}!€~~~}€!~~~~}!€}€!~}€!}€!~}!€}!€}!€}!€}€!~|!!}€!}€!}€!~}!€|!!}€!}€!}€!}€!}!€|!!|!!}€!}€!}€!|!!}€!}!€|!!}!€|!!|!!}!€}!€|!!|!!}!€|!!}!€|!!|!!}€!|!!|!!}€!}!€|!!|!!|!!|!!}€!}!€|!!|!!}€!}!€}!€}€!~~~~~~~~}!€~}€!~~}!€}!€~}!€}!€}€!}€!}€!~~}!€}!€}€!}€!}€!}€!|!!~}€!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€~,ƒ|!!}!€|!!}!€},‚!|!!}€!|!!|!!|!!|!!|!!~ƒ,|!!|!!|!!|!!|!!|!!|!!}!€}!€~,ƒ|!!|!!}€!|!!}€!|!!~ƒ,}€!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€}!€}!€}!€}!€}!€~}!€}€!~~~~}!€~~~~~~~~~}€!}€!~}€!}€!~}€!~}€!~}!€}€!~}€!~}!€}€!}€!}€!}€!}€!}€!}!€}€!|!!}€!|!!~}!€}!€|!!}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!|!!|!!{!-|!!|!!|!!|!!{!-|!!|!!|!!|!!{-!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!}!€}!€}!€}€!~}!€}!€}!€}!€}€!~}€!~~}!€}€!~}!€~}€!~}€!~~~~~~~~}!€~~~~~~~~}!€}!€}!€}€!}!€}€!~ƒ,}€!~ƒ,~}!€{!†!~ƒ,}€!}!€}!€}€!~ƒ,}!€|!!}€!}€!|‡!}!‚,~~}€!}€!~~~~~~~~~~~~~~~~~~~}€!~~~}€!}€!}!€}!€|!!}!€|!!pC{CpC{Cr9|Ct9~9t9~9t9~9v9~-v-~9t-9y-~-y-~-{!-|!!{!-|!!|!!}€!}!€|!!~}€!}€!~}!€}€!~}!€}€!~}!€}€!}€!}€!}€!}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{!-|!!|!!|!!{!-|!!{-!{-!{-!{-!|!!{-!{-!|!!|!!{-!|!!{!-|!!{-!{-!{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€|!!|!!|!!}€!}!€}!€}€!~}€!}€!|!!~}€!~}!€~}!€~}!€~}!€}€!}€!~|!!}€!}€!}€!~}!€}€!~}€!~}!€~}!€}€!~~~}!€~~~~}€!~}€!~~}!€}€!}€!}€!~~}!€~|!!~}!€}€!}€!}€!}€!~}€!}€!}€!}€!}€!~~|!!}€!}€!}€!}!€}!€|!!|!!|!!}€!|!!}!€|!!}€!}!€}!€|!!|!!}€!}!€|!!|!!|!!}!€|!!|!!}€!}€!}!€|!!|!!}€!}€!}!€|!!}€!|!!~|!!~}€!~}!€~~~~~~~}!€}€!~}€!}€!~}€!~~~}!€~}!€~|!!}€!}€!}€!~}!€|!!~|!!|!!}€!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!|!!}!€|!!|!!}€!}!€}!€}€!|!!|!!}€!}€!}!€|!!}€!}!€}€!}!€~}!€~}€!~}€!~~~}!€~}!€~}€!~}!€~~~~~}€!~}€!~}!€}€!}€!}€!~}€!~}!€~}!€}!€~}!€|!!}€!~}!€|!!}€!}!€|!!}€!}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!{-!{-!|!!|!!{-!|!!|!!|!!|!!{-!|!!|!!|!!{!-|!!|!!{!-|!!|!!{-!|!!{-!{-!{-!{!-|!!{-!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}!€}!€}!€}!€|!!}€!}!€}!€}€!~~}€!~}€!~}€!}€!}€!~~}€!~}!€}!€~}€!~}€!~~~~~~~~~~~~}!€}!€~}€!~}!€~~,ƒ}!€}!€}!€{!†!|!!}!€|!!}€!}€!}!€~,ƒ|!!}€!}€!}€!~|!!~}!€}€!~~~~~~~~~~~~~~~~~~~~~~}€!}€!}€!}€!~}!€|!!}€!}!€z!„)qH}Cu=}Cu=}Cu=}Ct9~9t9~9v-~9y-~-y-~-y-~-{-!{-!{-!|!!|!!|!!|!!}!€}!€}€!}!€}!€}€!}€!}!€}!€}!€}!€|!!}€!~~}!€|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!{!-|!!|!!{-!{-!{-!|!!|!!|!!{!-|!!|!!|!!|!!y-~-{!-|!!{-!{-!{!-|!!|!!|!!{!-{!-{!-{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!~}!€}!€}€!}€!}€!}€!}€!~}€!}!€}€!}€!}!€}€!}€!}€!}€!}€!}€!}€!~~~}!€}!€}€!}€!|!!}€!~}!€}!€}€!~}!€}!€}€!~~~}!€}!€}€!~}€!~~}€!}€!~}€!~|!!}€!~}!€}!€}!€}€!}!€~}!€}€!}€!~}!€}!€}!€}!€}€!}!€}€!}€!}€!}€!}€!|!!}€!}!€}!€|!!~|!!}€!|!!}€!}!€}!€|!!|!!|!!}!€|!!|!!|!!}€!}€!}€!|!!}€!|!!}€!}€!}€!}!€}!€}!€}!€|!!}€!}!€}!€}!€~~~~~~~~~}!€}€!~~}!€~}!€}!€}!€~}!€}€!}!€~}€!~}!€}!€}!€}!€|!!}€!}€!|!!}€!}!€}!€|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!~,ƒ|!!|!!|!!}€!|!!|!!|!!|!!}!€|!!}!€|!!|!!|!!}€!|!!|!!|!!}!€}!€|!!|!!~}!€}!€}!€}!€}!€}€!~}!€}!€~~~~}€!~~~~}!€~~~}!€}€!}€!}€!}€!~}€!~}!€~}!€~}!€}!€}!€|!!~}!€}!€}!€}€!}!€}!€|!!}€!}€!~}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!{!-|!!{-!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}€!}€!}!€}!€}€!~~}!€}!€}€!~}!€~}!€}€!~}€!~}!€~~~~}!€}!€~~~~~~~~~}!€~~~}!€~~}!€~}!€}€!}€!}€!}€!|!!}€!|!!~|!!~}!€~,ƒ|!!}€!}€!}€!~ƒ,~|!!~}€!}€!~}!€~}!€}!€~~~~~~~~~~~~~~~~~~~~}!€~|!!~{!†!|!!}€!x)‹!pC{CpC{CrC|9r9|Ct9~9t9~9v-~9t-9t9-y-~-{!-{-!{!-|!!|!!|!!|!!}€!|!!}€!~|!!~}!€}€!~}€!~~~}!€}!€}€!~|!!}€!|!!}€!|!!|!!|!!|!!{!-|!!|!!|!!{!-|!!|!!{-!|!!|!!|!!{!-|!!{!-|!!{-!{-!|!!{-!|!!|!!{!-|!!{!-|!!|!!y-~-{!-|!!|!!|!!|!!|!!}!‚,|!!|!!|!!}€!|!!}€!}€!|!!}€!}€!}€!}!€|!!}!€}!€}€!~}!€~}!€~}!€}€!~~}€!~}!€~}!€~}!€}€!|!!}€!|!!~}!€}!€}!€~}!€}!€}!€}€!~}!€~}€!~~}!€}!€~~~}€!~}€!}€!~~}€!~~~~}!€}!€}!€|!!}€!~}€!}!€}€!~}!€}!€}!€}€!}!€}!€}!€|!!}!€}!€|!!}!€}!€|!!}€!|!!}€!|!!|!!|!!}€!|!!|!!|!!}€!|!!|!!}€!}!€|!!}€!|!!}€!}!€}!€|!!}€!|!!|!!}€!|!!}!€|!!}!€}!€|!!~}!€}!€~~~~~~~~~~~}€!}!€}€!}€!~}€!}€!}€!~}!€}€!}€!}€!}€!~}€!}€!}€!}€!}!€|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!~ƒ,}€!}€!|!!|!!|!!|!!}€!}!€|!!}!€|!!}!€|!!}!€|!!|!!}!€|!!}€!|!!}!€|!!|!!}!€}!€|!!}€!}€!}€!}!€~~}!€}!€~}€!~~~~~~~}€!~}€!~}!€~~}!€}!€}!€}!€}!€~}!€~}!€}!€~}!€}!€}!€}!€}!€}€!}€!}!€}!€}!€|!!}€!|!!}!€}€!}!€|!!}€!}€!}€!|!!|!!|!!{-!|!!{!-|!!{!-|!!{!-|!!|!!{-!|!!|!!{€-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!{-!{-!|!!{-!|!!y-~-|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!}!€}!€}!€}!€}!€}€!}€!~}€!}!€}€!~}!€~~}€!~}!€~~}€!}€!}€!~~}€!~~~~~~~~~~~~~~}!€~}!€}€!~}!€}!€}!€~}!€~|!!}€!~ƒ,}!€}!€~,ƒ~~,ƒ}€!}!€|!!}€!~}!€}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~}!€}€!}!€}!€}€!}!€}!€|!!|‡!qH}CpC{Cr9|Ct9~9t9~9t9~9v-~9y-~-y-~-y-~-y-~-|!!{-!{!-|!!|!!}!€}!€}€!}€!}€!~}!€}!€~|!!}€!}€!}!€}!€}€!}€!}€!}€!~}!€}!€|!!|!!|!!|!!{!-|!!|!!|!!{!-|!!|!!{-!{!-|!!{-€{!-}€!{!-|!!{-!|!!|!!{-!{!-{!-|!!{-!{!-|!!{-!{-!|!!{-!{-!{-!{!-|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}!€|!!}€!}€!~}€!}€!|!!~}€!~~}!€}!€~}!€}€!~}!€}€!~}€!}!€}€!~}€!~~}!€}€!}€!~|!!}€!}€!~}!€~}€!~~~}€!~}€!~~~~}€!~~~}!€}!€}€!}€!}€!~}!€}!€~}!€}!€}!€}!€~|!!~|!!}!€}€!~}€!}€!}!€~|!!}€!}€!}€!|!!}€!|!!}€!|!!}€!}€!|!!|!!}€!}€!}!€|!!~|!!}!€|!!}!€|!!}€!}!€|!!}!€|!!}€!}€!}€!|!!}€!|!!}€!}€!}€!~}!€}€!~~~~~~~~~~}!€}!€}!€~}!€~}€!~~~}!€}!€~}!€}!€}!€|!!}€!}€!}€!}!€|!!~}!€}!€|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!}€!}!€}!€|!!}€!}!€}€!~~~}!€~~~~~~}!€~}!€~~}€!~}!€~~~}!€~~~}!€~}!€}!€}!€}!€}€!~|!!~}!€~}!€}!€}!€~}!€|!!}€!}!€|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!{-€|!!{!-|!!{!-|!!{!-|!!|!!|!!|!!{-!}€!|!!|!!|!!|!!|!!{-!|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!{-!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!}!€|!!}€!}€!}€!~}!€}€!}€!~~~}€!~}€!}€!~~~}!€~~~~}€!}!€~}€!~}€!~~~~~~~~}€!}€!~~}!€}€!}€!}€!}€!~}!€~,ƒ|!!|!!}€!}!€}!€}!€|!!~ƒ,}€!~},‚!}€!{!†!}€!}€!}€!~~}€!~~~~~~~~~~~~~~~~~~~~~}!€~}!€}€!}€!}!€}€!{!†!{!†!|!!pC{CuC}=uC}=rC|9t9~9t9~9t9~9t-9y-~-y-~-y-~-y-~-|!!{-!|!!|!!|!!}€!}!€}€!}€!}€!}!€}€!}!€~}!€}!€~}!€}!€~}!€}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{!-|!!|!!|!!|!!{-!|!!|!!{!-{!-|!!{-!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!|!!}!€|!!|!!~~}€!~}!€~}!€}!€}€!}€!~}!€}€!~|!!~}!€}€!}!€}!€}!€}!€|!!}€!}€!}€!~}!€~}!€~}€!~}€!}!€}€!~~~~}!€}!€}€!~}!€}!€|!!~}€!~~}!€}€!}€!~}!€}!€}€!}€!}€!}€!}€!}€!~~}!€}!€}!€}!€~|!!~}!€}!€}!€}!€|!!}€!|!!}!€|!!}!€|!!}€!|!!}!€|!!}!€|!!}!€|!!}!€|!!}€!|!!}€!}!€|!!|!!}€!|!!|!!}€!}€!}!€}!€}!€}!€|!!}€!~~~~~~~~~~~~~~}!€~}€!~}€!~}!€}!€}!€}!€}!€~}€!~~}!€}€!}€!~|!!}!€|!!}!€}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!~ƒ,}€!|!!|!!|!!|!!}!€|!!|!!|!!}€!}!€|!!|!!|!!}!€|!!}€!}!€}!€|!!|!!|!!}€!|!!}€!}€!~}!€}€!~}€!}€!~}!€}!€~~~~}!€~~~}!€}!€}!€~}!€}!€}!€~}€!~}!€}€!~}!€}!€}!€}€!}€!}!€}€!}€!}€!}!€|!!}€!}€!}€!}!€|!!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!{!-{!-|!!{!-|!!{-!|!!|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!{-!|!!{-!|!!{!-|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}!€}!€~}!€}€!~}!€}!€}€!~}€!~}!€}!€}!€}€!~~}!€}€!~|!!}€!~}!€}!€~}!€~~~~~~~~~~}€!~~~}€!~}€!~}!€}!€}!€|!!}€!}€!~}!€|!!}€!~ƒ,}€!~|!!|!!}€!{!†!~}!€}!€}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~}€!}€!~}!€}€!}€!|!!}!€|!!}!€qH}CpC{Cr9|Cr9|Ct9~9t9~9y-~-v9~-y-~-y-~-{-!{-!{-!|!!|!!|!!|!!}!€|!!~}!€}!€}€!}€!}€!~~}!€}!€~}€!}!€}€!}!€}€!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!{-!{!-|!!|!!{!-}€!{-!|!!{!-|!!|!!{-!{!-|!!{-!|!!|!!|!!|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!|!!}€!}€!}€!~~}!€}€!}€!}€!~}!€}€!~~~}!€~}!€}!€~}!€}€!}!€}€!~}€!~~}€!~}!€}!€}€!}!€|!!}€!}€!}€!~~}€!}€!~}!€}!€~}€!~~~~~}!€~}€!}!€}€!~|!!}€!~|!!}€!~}€!~}!€}!€|!!}€!}€!}€!~|!!}€!}!€}!€}€!|!!}€!}!€}!€|!!}€!}€!}€!|!!}€!}€!|!!|!!}!€|!!}!€|!!}!€|!!}€!}!€}!€|!!}€!}!€}!€}!€}!€}!€}!€|!!}€!}!€}€!}!€}!€}!€}!€~~~~~~~~~~~~~}€!}€!~}€!~}!€}€!}€!}€!~}!€}€!}!€}€!~}!€}!€~|!!}!€|!!|!!}!€~,ƒ|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!~ƒ,}€!|!!|!!|!!|!!}!€|!!|!!}!€|!!}€!|!!}€!|!!}€!|!!}€!}€!}!€}!€}!€}€!~}!€}!€~~~~}!€~~~}€!~}!€~}€!}€!~~~}€!}!€~~}€!}€!}€!}€!}!€}€!}€!}€!}€!}€!~}!€|!!~}!€}!€}!€}€!}€!}€!}!€|!!|!!|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!{-€{-!|!!|!!{-!{!-|!!{!-|!!|!!|!!{!-|!!{!-|!!|!!|!!{!-|!!|!!{!-|!!{-!|!!{!-|!!|!!|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!}!€|!!}!€|!!}€!|!!}!€|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€|!!}!€|!!}€!~}€!~~}!€}!€}!€}!€~}!€}€!~}!€}!€}!€}!€~}!€}€!~~}!€~}!€~~~}!€~~~}€!~~}€!~}€!~~}!€}€!}€!~}€!}!€~}!€~,ƒ|!!}€!~ƒ,}€!}!€~,ƒ|!!~}!€}!€|!!}€!}€!~}!€}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~}!€}!€}!€}€!}€!}€!|!‡pC{CuC}=pC{Cr9|Ct9~9t9~9t9~9t9-y-~-y-~-{-!y-~-{!-{!-|!!|!!|!!}€!}!€|!!}€!}€!}€!~}€!|!!}!€}!€}!€}!€}!€~}€!~}!€|!!}€!}€!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!{!-|!!|!!{-!|!!{!-|!!|!!{-!{-!{-!{-!{!-|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}!€}!€|!!}€!}€!}!€~~~}€!~}!€}!€}!€}€!}€!~}€!~}€!~~}!€|!!}!€~}!€}!€}€!}!€~}!€}!€~~~~~}€!~~}€!~~}€!~}€!~}!€}€!}€!~|!!}€!~}!€}€!~}!€}!€}€!~}!€}!€|!!~}!€~}€!}€!}€!}€!}€!}€!}€!}€!}!€}€!~}!€}€!}€!}€!|!!}€!|!!}€!}!€}€!}!€|!!}€!|!!}!€|!!}!€}!€|!!|!!~|!!}€!}€!}!€|!!}€!|!!}!€|!!}€!}€!}€!~}€!}€!~~~~~~~~~~~}€!~~~}!€}!€~}€!~}€!~}!€|!!~~}!€}!€~}!€|!!}!€|!!}!€}!€|!!}€!}€!|!!|!!}!€|!!}!€|!!|!!}!€|!!}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€},‚!|!!|!!}!€|!!}€!|!!|!!}€!|!!|!!}€!|!!|!!|!!}€!|!!}€!|!!}!€}!€|!!}€!}€!}€!}€!}€!}€!~}€!~~~~~}!€}!€~~~~~~~}!€}!€}!€~}!€}!€}!€}!€}€!~}€!}!€}€!~}!€}!€}!€}!€}€!}!€}!€|!!}€!}!€}!€|!!}€!}!€}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{-!|!!{-!|!!{!-|!!{-!|!!{-!|!!{-!{-!{-!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}!€|!!}€!~}!€}€!~}!€}!€}!€|!!}!€}€!~}!€~}!€}€!~}!€}!€~}!€}€!~}!€}!€}€!}€!~}€!~}€!~~~~~}€!~~}€!~~~~}!€}€!}€!~}!€}!€}!€~,ƒ|!!~}!€~ƒ,}€!}€!}!€|!!}€!~ƒ,}!€}!€}!€|!!~}€!~}!€}!€~}€!~~~~~~~~~~~~~~~~~~~~}!€}!€~}!€}!€}!€|!!}!€|!!qC}HpC{CrC|9rC|9t9~9t9~9t-9t-9t-9y-~-{!-{-!|!!|!!|!!|!!|!!|!!}€!~|!!~}€!}€!}!€~}€!}€!~~}€!}!€}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!{!-|!!{-!|!!|!!{-!|!!|!!|!!|!!|!!{!-|!!|!!{!-}€!|!!|!!|!!}€!}€!|!!}€!}€!}!€|!!}!€|!!}€!~|!!}€!}€!}€!}€!}!€~~~~~}!€~}€!~}!€~}€!}!€}!€~~|!!~|!!~}€!}€!}€!}€!~}!€}€!}€!}!€~}€!~}€!~}!€~}€!~}€!~}!€~}€!~~}!€}€!}!€}!€}!€}!€}!€|!!~}!€~}!€}!€}!€}!€~}!€}!€}!€}!€}!€}!€}€!}!€|!!}€!|!!|!!}!€|!!}€!}!€}€!|!!}!€|!!}€!}!€|!!}€!|!!}!€|!!}€!}€!|!!}!€|!!}!€|!!|!!}€!}!€}€!|!!}!€~~}!€}€!~~~~~~~~~~~~~~}!€~~}€!~}!€}€!~}!€~}€!}€!}€!~}€!}€!~~}!€}!€}€!|!!}€!|!!|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!}!€}!€},‚!}!€|!!|!!}!€|!!|!!|!!}€!|!!|!!}!€|!!~}!€}!€|!!~~~~}€!~}!€~~}€!~}!€~~}€!~}€!}€!~}€!~}€!}€!~}!€|!!}€!}€!}€!}€!}€!}€!~}!€}€!}€!~|!!}€!}€!}€!}€!}€!|!!}€!|!!|!!}€!}€!|!!|!!}!€|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!|!!{-!{-!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!{-!|!!{-!|!!|!!|!!|!!{!-|!!|!!}!€}!€|!!|!!|!!|!!|!!}€!}€!|!!}!€}!€|!!}!€|!!|!!|!!}€!}!€|!!}€!}€!}!€}€!~}€!~}€!~~~~|!!~|!!~}!€}€!}!€}!€}!€}!€}!€}€!~}!€~~|!!~}€!~}!€~~~~}!€~~~}€!~}!€~}!€}!€}€!~}!€}!€}!€}€!~~,ƒ|!!}!€~,ƒ}€!}€!|!!}€!~|!!~ƒ,~}!€~,ƒ}!€}!€~~}€!~~~~~~~~~~~~~~~~~~~~~~}€!}€!~}€!}!€}!€|!!|!!qH}CpC{Cu=}Cr9|Ct9~9q99t9~9t-9y-~-y-~-y-~-{-!y-~-{!-|!!|!!}!€|!!}€!}!€}!€}!€}!€}!€~}€!}€!~~}!€}€!~}!€|!!}€!}!€}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{-!|!!{!-|!!|!!|!!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!~}!€}!€}!€}€!~}!€~~}€!}€!~}!€}€!}€!}€!}!€~}!€}€!~}€!~|!!}€!~|!!~}!€}!€}€!~}!€}€!~}€!~}€!~}!€}€!~}€!~}!€}!€~}!€~~}!€|!!~}!€}€!}!€}!€}€!}!€}€!}€!~}!€}!€|!!~}€!}€!~}!€}!€}€!}!€}€!~}€!}!€}!€}!€|!!}€!}€!}€!|!!}!€|!!}!€}!€|!!}!€|!!|!!}!€|!!}!€}€!}€!}€!|!!}!€}€!}!€|!!}€!}€!}€!}€!|!!}€!~}!€}!€~}€!~~~~~~~~~~~~~~~}!€}€!~}€!~}€!}€!~}!€}!€}€!~}€!}€!~}!€}!€}€!}€!|!!}€!|!!}€!}€!|!!|!!|!!|!!|!!}!€~,ƒ|!!|!!|!!|!!}€!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!}!€|!!}€!}!€}!€}!€}!€|!!}€!}!€|!!~}!€}€!}!€}!€~}!€}€!}€!~~}€!~~}€!~}€!}€!~~}!€}€!}!€}!€}€!~}!€~}!€}€!}€!~}!€}€!~}!€}!€}€!}!€}!€}!€}!€}!€}!€}!€|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{!-|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{!-|!!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!}€!}!€}!€|!!}!€}!€}!€}!€|!!}!€}!€}!€~|!!}€!}!€~}€!~}!€}!€}!€~}!€~}!€}€!~}!€}€!}!€}!€}€!}€!~~}€!~~}€!~~~~~~~~}!€~}€!~~}!€}€!}!€|!!}€!~}!€}€!}€!~ƒ,~ƒ,~~,ƒ},‚!}€!}€!}€!}!€}€!~}!€}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~}€!}€!}€!}€!|!!|!!sH~HpC{CrC|9rC|9t9~9t9~9y-~-v9~-y-~-y-~-{!-|!!{-!|!!|!!|!!|!!}!€|!!}€!}€!}€!}€!~|!!~}!€}€!}€!~}!€|!!}!€~}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!{-!{!-{!-|!!|!!|!!|!!{-€|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}€!}!€}€!}!€}€!~}!€}!€}€!}€!}€!}€!~~~}€!~~~}€!}€!}€!}!€~}!€}!€~}!€}!€~|!!~}!€}!€}!€}!€~}€!~~}€!}€!~}!€~}!€~}!€~}!€~}!€}!€~~}!€~~}€!}€!}!€}€!}!€}€!|!!~}!€}!€|!!}€!}!€|!!}€!~}!€}€!}!€|!!}!€}€!}€!}€!}€!~}!€|!!}€!}€!}!€|!!}!€}!€}!€}!€|!!}€!}€!|!!|!!}€!}€!}!€|!!}!€}!€}€!|!!}!€|!!|!!~}!€}€!}€!}€!~~~~~~~~~~~~~~}!€~~~}!€}€!~}€!}!€~}€!}€!~}!€}€!~}!€}!€}!€}!€}!€}!€}€!}!€|!!|!!|!!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!},‚!|!!|!!},‚!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}!€~|!!~}!€~~}!€~}!€~}€!~}!€}€!~}!€}!€}!€~}€!}!€~}!€~}!€}!€}!€~}!€}€!}€!}€!}!€}!€}!€|!!}€!~}€!~}!€}!€|!!|!!}€!}€!}€!|!!}€!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!{-!{-!{!-|!!{-!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!{-!{-!{!-|!!{!-|!!{-!|!!|!!{-!|!!|!!|!!{!-|!!|!!|!!|!!|!!}!€}€!}€!|!!|!!}!€}!€}!€}!€|!!}!€}!€|!!|!!}€!|!!}€!}€!~}!€}€!~}€!~|!!}€!~}!€~}!€}!€}!€~}€!~}!€}!€}!€}€!}!€}!€}!€~}€!~}!€~}€!~~~~~~~~}!€~}!€~}!€~~}!€}!€}€!}€!}€!}!€~}!€},‚!|!!|!!}€!}!€}!€}€!}!€}!€~,ƒ}!€}!€}€!}!€}€!~~~}!€}!€~~~~~~~~~~~~~~~~~~~}!€~}!€}€!~}!€|!!{!†!|‡!|!!pC{CpC{Cr9|Cr9|Ct9~9t9~9t9~9y-~-t9-y-~-y-~-y-~-|!!{!-|!!|!!|!!}€!}!€}!€}!€}!€}!€}!€}€!~~}!€}!€}!€}€!~}!€}!€}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!}€!}!€}!€|!!}€!|!!}€!}€!~}!€}!€~~}€!~}!€~}!€|!!}€!~}!€~~|!!}€!~}!€}!€}!€|!!~}€!}!€}€!}€!}€!}!€}€!~|!!}!€~~~|!!~}!€~}!€~}!€~}€!}€!}€!~}!€}!€|!!~}€!}!€}€!}!€}!€}€!}€!~}€!~}€!~}!€}!€}!€}€!|!!~}!€}€!}!€}!€}!€|!!}!€}!€}€!}!€|!!}€!}€!|!!}!€|!!}€!}!€}!€|!!}€!|!!|!!}€!}€!}€!|!!|!!}€!}€!}€!~}!€}!€}!€~~}!€}!€~~~~~~~~~~~~~~}€!~~~}€!~}€!}€!}!€~}€!}!€~}!€~~~}€!}!€|!!}€!}€!}€!}!€|!!|!!|!!|!!|!!|!!}!€}!€},‚!|!!|!!|!!|!!}€!|!!|!!},‚!~ƒ,|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!}!‚,}€!|!!}€!|!!|!!|!!|!!}!€}!€|!!}!€}!€|!!}€!|!!~|!!}€!~|!!~}€!~}!€}!€~}!€~}!€}!€}!€~~}!€~~~~}!€~}!€}!€}€!~~}!€}!€|!!}€!}€!}!€~|!!}€!~}!€|!!}!€}€!|!!}!€}€!}€!}€!|!!|!!}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!{!-{€-{€-|!!|!!|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!{€-}€!}!€|!!|!!|!!}!€~}€!}!€|!!~}!€}!€}!€}!€}!€}€!~}!€}!€}€!~~}!€}€!}!€|!!}€!~}€!~|!!~}€!~}!€~}€!~}€!~}€!~~}!€}!€~}!€~~~~~~}!€~~~~}!€}!€~}!€}!€}!€|!!~ƒ,~|‡!~}€!{!†!}€!~ƒ,}!€}€!}!€}!€}€!~ƒ,}!€}€!}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~}!€}€!~}!€~}!€}€!}!€x-„)qH}CpC{CuC}=r9|Ct9~9t9~9t9-v9~-y-~-y-~-y-~-{!-{!-|!!|!!|!!|!!}!€|!!}€!}€!~}€!}€!}!€}!€}!€~~~}!€~}!€}€!|!!}€!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!|!!|!!}€!}!€}!€|!!}€!}!€|!!~}!€}€!}€!}!€~}!€}!€~~~~~~~~}!€}!€}€!~}!€}!€|!!}€!~~|!!}!€|!!}€!~~}!€}!€}!€~~}!€}€!~~~~}!€~}!€~}!€~}€!~~}€!}€!~|!!}€!}€!}!€}€!}€!~|!!}!€}!€}!€}!€}€!}€!}€!}€!~~}!€}!€}!€}€!}€!}€!}€!}!€}!€|!!}€!|!!}!€|!!}€!}€!}!€|!!}€!|!!}!€}€!}!€}!€|!!}€!|!!~}!€|!!|!!}€!|!!}€!}€!~}!€~}€!~~~~~~~~~~~~~}!€~~~}€!}€!~}!€}€!~~|!!~}€!~}!€}€!}€!}€!~}€!}€!}€!}!€|!!~ƒ,}€!}€!|!!|!!}!€|!!|!!|!!|!!}€!|!!}€!|!!},‚!}!€|!!|!!|!!|!!|!!|!!|!!},‚!|!!},‚!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!|!!}!€|!!|!!}€!|!!}€!}!€}!€}!€|!!}€!~}!€}!€~}€!~~}!€~~~}!€~~}!€~~|!!~}!€~}€!}€!}€!}!€}!€}€!~}!€}€!~}!€~|!!}!€}!€}€!}!€}!€~}€!}!€|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!{-!}€!{!-|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!}!€|!!|!!|!!}!€}!€|!!~}!€}!€|!!|!!}!€}!€}!€|!!}!€|!!}€!~|!!~}!€}€!}€!~}€!}€!}€!~~~~}€!~}€!}€!}!€~}€!~}!€}!€}€!~}!€}!€}€!}€!~~~~~}€!~}€!~}€!~~}€!~}€!~}€!}€!}€!}€!~}€!}€!|!!|!!}!€~,ƒ}!€}!€~,ƒ~ƒ,}!€|!!~ƒ,}€!}€!~}!€}€!}€!}!€}€!~~~~~~~~~~~~~~~~~~~~~~~}!€}!€}€!}€!}!€|!!}!€|!!qH}CqH}Cr9|CrC|9t9~9v-~9t9~9t-9y-~-y-~-{!-{-!{-!|!!{!-|!!|!!}!€|!!}€!}€!}€!}!€|!!~}€!~|!!}€!}!€}€!}!€}€!}!€}!€|!!}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!|!!|!!{!-|!!|!!|!!|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€|!!|!!}€!|!!}!€}!€}€!~}!€}€!~|!!}€!~}!€~~}!€}!€}€!~}€!~}€!~}!€}€!}€!~~|!!|!!~}€!}€!~}!€|!!}€!~}!€}€!}!€}€!~}!€~}!€}€!}!€}!€~}!€~}!€}!€~}!€}!€|!!}€!~}!€}!€~}!€}!€}!€}€!~}!€~}!€}!€}€!}€!}€!}€!}€!}€!}€!}€!}!€}!€}€!}!€}€!}€!}!€}!€~|!!~}!€|!!}€!}€!}€!}€!}€!}!€}!€|!!}€!}!€|!!}€!|!!~}!€}€!~}!€}!€}€!~~~~~~~~~~~~~~~}€!}€!}€!~}!€~~~}€!~}!€}€!~}!€~|!!}€!~~}€!}€!}€!~|!!}€!}€!}!€|!!}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!‚,}!€|!!|!!|!!},‚!}!‚,|!!},‚!|!!},‚!|!!|!!~,ƒ},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!}!€|!!}€!|!!}!€|!!~}€!~|!!~}€!~~~~}!€}!€~}!€}€!~}€!}€!~}!€}!€}!€}!€}!€~}€!}!€|!!}€!}€!}€!}€!}!€}!€}!€~|!!}€!~}!€|!!|!!}€!}€!|!!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!{-!|!!|!!{!-{€-|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}€!}€!|!!}€!|!!|!!|!!}€!}!€}!€}!€|!!}€!}!€}!€}!€|!!~}€!~}!€}!€}€!}!€}€!~}€!}€!}€!}€!~}€!~}!€}€!}€!}!€}!€}€!}€!~}€!}€!~}!€~}€!}€!~~}!€~~~~~~}!€~~}!€}€!}€!~~~|!!~ƒ,~|!!~}!€}!€}!€}!€|!!}€!~ƒ,}€!~}!€{!†!|!!}€!}€!~~~~}€!~~~~~~~~~~~~~~~~~~~~~~}!€}!€}!€}€!}!€|!!|!!pH|PpC{CrC|9t9~9t9~9q99v9~-t9-t-9{!-y-~-{-!{!-|!!|!!|!!|!!|!!}!€|!!}€!}!€|!!}€!}!€}!€}!€~~}€!~}€!}!€}!€}€!}!€}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!}€!}!€}€!|!!~|!!|!!~}!€}!€~~}€!~}!€}!€~~~}!€}!€}€!}!€}!€}!€}!€~|!!}!€}€!~|!!}!€}€!}€!~}!€}!€}!€|!!~~}!€}€!~}!€}€!~~}€!~}€!~~}€!}€!~}€!}€!~}!€|!!}€!}!€}!€}€!}€!}€!}€!~}!€}€!}€!}€!~|!!}€!~|!!}€!~|!!}€!}!€}!€}!€}!€~|!!}!€}!€}€!}€!~|!!}€!~|!!}!€}!€}!€}!€}!€}€!}€!}€!}€!}!€}!€}!€~~~}!€}€!~~~~~~~~~~~~~~~~~}€!~}€!}€!~~}!€}!€~}!€~}€!~~}!€}€!~~}€!}€!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}!‚,|!!}!‚,|!!|!!|!!|!!|!!|!!|!!},‚!|!!}!‚,|!!}!‚,|!!|!!|!!|!!|!!}€!}€!}!€~,ƒ|!!}€!|!!|!!|!!}!€|!!}!€~,ƒ|!!~}!€}!€|!!}!€}!€~~}!€~}!€}€!~~}!€}!€}!€}!€}!€~~}€!~}€!}€!}€!~|!!~}€!~}!€}!€}€!}!€}!€|!!}€!|!!~|!!}€!}!€}!€}!€|!!}!€}!€|!!}€!}€!|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{-€|!!{-!|!!{-!|!!|!!{-!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!{-!{-!|!!|!!|!!|!!{!-{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!~|!!|!!}!€|!!}€!|!!}€!}!€|!!}€!}€!}€!}€!}€!~}!€}!€}!€}€!~}!€|!!}€!}!€}!€}€!~}!€}!€}!€}!€}€!~}€!}€!}€!~}!€}!€}!€~|!!~}!€}!€~}€!~~~}!€}€!}€!~}!€~}!€}!€~~~}!€}!€}!€}!€}€!}!€|!!}€!}!€~,ƒ}€!~,ƒ}!€|!!~}€!}!€}€!}€!~}!€}!€}€!}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~}!€~~}€!}€!|!!}€!}!€{!†!qH}CqH}Cu=}Cr9|Ct9~9t9~9v-~9t-9y-~-y-~-{-!y-~-|!!{-!|!!|!!|!!|!!}€!}!€}!€}€!}€!~}€!~}!€~}!€~}!€}!€}€!}€!}€!}€!}€!}€!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}!€|!!}€!|!!|!!}€!}€!}€!}€!~}€!}€!~~|!!}€!~~}!€}€!~}!€}!€~~}!€~}€!}€!}€!}!€}!€}€!}€!}€!}€!}€!}!€|!!}!€}!€|!!}€!~}!€|!!~}!€~}!€}!€}€!~}!€}!€~}€!}€!~~}!€}!€}€!|!!}!€~|!!}€!~|!!}€!}!€}€!}€!}€!}€!}€!~|!!}€!}€!}!€}!€}€!}€!}€!~}!€}€!~}!€|!!}€!}€!|!!|!!}!€|!!}!€|!!}€!}€!}€!}€!}!€}!€}€!}€!}!€}!€~}!€|!!~}!€|!!}!€~~}!€~~~~~~~~~~~~}!€~}€!}€!~}!€}!€~}€!}€!~~}€!~}!€}!€}€!}€!}€!~}€!}€!~}!€|!!}€!}€!}€!}!€}!€|!!|!!}!€|!!|!!~,ƒ|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!},‚!|!!}!‚,|!!|!!},‚!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}!€}!€|!!}€!}€!}!€}€!|!!}€!}!€}!€~}€!}€!}€!~}!€}€!~|!!~~~~~}!€}!€}€!~}€!}€!~}!€}€!~|!!~|!!}€!}€!}!€}€!}€!~}!€}€!|!!}€!}!€|!!}€!}€!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!|!!{-!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!|!!|!!{!-|!!|!!{!-|!!|!!|!!{!-}€!|!!|!!}€!|!!}!€|!!}!€|!!}!€}€!|!!}!€}!€|!!}€!}!€}!€}!€}€!}€!}€!|!!|!!|!!}€!}€!}€!}€!}€!}€!}€!~~~}€!~}!€~}!€}€!}€!~}€!}€!~}!€~}!€~}!€~}€!~}!€}€!}€!~}!€~}!€~}!€~~~}€!~~~~}!€|!!}€!~}!€}€!}€!}!€}!€|!!}€!}!€~,ƒ}!€},‚!|‡!|!!}!€~ƒ,}€!}!€}€!~}!€}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~}€!~}!€~}!€|!!z!„)qH}CpC{CrC|9rC|9t9~9v9~-q99y-~-y-~-y-~-{-!{-!{-!|!!|!!|!!|!!}!€}!€}!€}!€|!!}€!}€!}€!}!€}€!}!€}€!~}!€}€!~|!!}€!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!{-€{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!}€!}!€|!!~}€!}!€}!€}!€}!€}!€}!€~}!€}€!}!€}€!~}€!~}!€}€!~}€!}€!~}!€~|!!}€!}€!}€!}€!}!€}!€|!!}€!}€!}!€}!€|!!}€!}€!~}!€}€!}!€}€!~~|!!~}!€}!€~}!€}!€}!€}!€}€!}!€}!€|!!|!!}€!}€!|!!}€!}€!}!€}!€|!!}€!~}!€|!!~}!€~}!€|!!~}!€}!€|!!}€!}€!|!!}€!}€!}!€}€!~}€!}€!}€!}€!}!€}!€}!€}!€}€!}€!}!€}!€}!€~~}!€}!€~}!€~~~}!€~~~~~~~~~~~~~~~~~~~~}€!}€!~~}€!~}!€}€!}€!~~~~}€!}€!~}!€}€!}€!}€!}€!}!€|!!}€!}€!}€!|!!|!!}€!~ƒ,~ƒ,}€!|!!}€!|!!|!!|!!|!!}!‚,~ƒ,|!!~,ƒ},‚!}!‚,|!!|!!},‚!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}!€|!!}!€|!!|!!|!!}€!}!€|!!}€!}€!}€!~}!€~}€!~}!€~}!€|!!}€!}€!}€!~~}€!}€!}€!~}!€}!€}!€}€!~|!!~}!€}€!}€!}!€}!€|!!}!€}!€}!€|!!}€!}€!|!!}!€|!!}€!}€!|!!|!!}€!}€!}€!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}!€|!!|!!|!!}!€|!!}€!|!!}€!}€!}€!}€!}€!}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€}€!~}!€}!€}!€}€!}€!}€!}!€}!€}!€}!€}!€}€!}€!}!€}!€}!€}€!}€!}€!~}!€~|!!~}!€~}!€}€!~|!!~}€!}€!~~}€!~}€!}€!~}€!~}!€}€!}€!}€!|!!}€!}€!}€!~}!€}!€~|!!}€!}€!~}!€}!€}!€|!!~~}€!~~~~~~~~~~~~~~~~~~~~~~~~}!€~|!!}€!|!!z…)}!€|!!nCzPqH}Cr9|Ct9~9t9~9q99v9~-t-9y-~-y-~-y-~-y-~-{!-{!-{!-|!!|!!|!!|!!|!!}!€}!€~}€!~~}!€~}!€}!€}€!}!€|!!}€!}€!}€!}!€}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€~,ƒ|!!}!€|!!}!€}!€|!!}!€}!€|!!}€!}!€}€!|!!}€!~}!€}€!}!€}€!~}€!~}!€~}!€~}!€}€!}!€}€!}€!}!€|!!~|!!}!€|!!}€!}€!|!!}!€|!!~}!€|!!}€!}€!}€!}€!}€!}€!~}!€|!!}€!~}€!~~}!€}!€~~}€!~}!€}€!}€!}€!}€!}€!}€!}€!}€!~}!€~}!€|!!}!€}!€|!!}!€}!€}!€}!€|!!}€!~}!€}€!}€!~|!!}€!}!€}!€}€!|!!}€!}€!}€!}€!}€!|!!}€!}€!~}€!~}€!}!€|!!}€!}€!}€!~}€!}!€}!€}€!~~~~~~~~~~~~~~~~~~}€!}€!~~}€!~}!€}!€~}!€~}€!}€!~}!€}€!~}!€~}!€}!€}!€}!€|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!}!‚,|!!|!!|!!|!!},‚!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!}!€}!€}!€}!€}€!}€!~}!€}!€}!€~}!€~~}€!~~~}!€}!€}€!~}€!~}€!~}!€|!!~}!€|!!}!€}€!}€!|!!~}!€|!!}!€}!€|!!}€!}€!}€!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!~|!!}€!}€!}!€|!!}€!}€!}!€|!!|!!}€!}!€}!€}€!}!€|!!}€!}€!}!€}!€}!€}€!~}!€}!€|!!~}€!~}!€}!€}!€}€!~~}!€}€!}€!}€!~~|!!~}!€~}!€|!!}€!~}€!~}!€~}!€}€!~~}!€~~}€!~~}!€}€!~}!€}€!}€!~}!€~}!€~|,‰!}€!|!!}!€|!!|!!|!!~},‚!~ƒ,}€!}€!}€!~~~,ƒ}!€~}€!~~~~~~~~~~~~~~~~~~~~}€!~}€!~~}!€{!†!}!€|!!z)„!qH}CpC{CrC|9rC|9t9~9v9~-v9~-v9~-t-9y-~-|!!{-!|!!|!!|!!|!!|!!}!€}!€}!€}€!}!€}!€}!€}!€}!€~}!€}!€}€!~}!€}€!~}€!}!€}!€|!!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!~|!!}!€}!€~}!€}€!}€!~}!€}€!~}€!~}!€}€!~}€!~}€!}€!~|!!~|!!}€!}€!}!€|!!}€!}€!}!€|!!~|!!}€!|!!}€!}!€}€!}€!~|!!}€!~~}€!~}!€}!€~}€!}€!}€!~}€!|!!}€!}€!}€!}!€|!!}!€}!€}!€}!€|!!|!!}€!~}€!}!€~~}!€}!€}!€}€!}€!}€!}€!}€!}€!}€!~}!€}€!|!!}€!~|!!}€!}€!}€!~~}!€}!€}!€}€!}€!~}€!~}!€}!€}!€}!€~~~}!€~}!€~~~~~~~~~~~~~~~~~~}€!~~}€!~~}!€}€!}€!~~}!€~}!€}€!~}!€}!€}€!|!!~|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!},‚!}!‚,},‚!|!!|!!{-!|!!},‚!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€}!€|!!}€!}€!}!€|!!|!!}€!}€!}€!}€!~}!€}€!}€!~}€!~|!!}€!}!€}€!}€!}€!}€!~}€!~}!€}!€|!!}€!}!€}€!~|!!|!!}€!}€!}!€}!€~|!!}€!~}€!|!!}€!}€!|!!|!!|!!}€!|!!}€!|!!}€!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!}!€}!€|!!}€!}€!}€!}!€|!!}€!~|!!}!€~}!€~}!€}€!}€!}€!}€!}!€~}!€~|!!~}€!~}!€}€!~}!€|!!}€!~}!€~}€!~}!€}!€}!€}!€}€!~}€!~~}!€~}!€~}!€}€!~}€!}€!}!€~~}!€~~~}€!~}!€}€!}€!}€!~~,ƒ}€!}!€}€!|!!}€!}€!}!€|!!|!!~|!!}€!~}!€}€!~}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~}€!}€!}€!}!€}!€|!!|!!pC{CuC}=rC|9r9|Ct9~9t9~9v9~-t9-y-~-y-~-y-~-{!-{-€{-!|!!|!!|!!|!!}€!}!€|!!~|!!~}!€|!!}€!~|!!}!€}!€}€!~}!€}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!}€!|!!|!!}€!|!!}€!}€!~|!!}!€}!€}!€}!€}!€}€!~}!€}!€~}€!~}!€}!€~}!€}€!}!€}!€}!€|!!}€!}€!}€!}€!|!!|!!|!!}€!}€!|!!}€!~}!€}€!}!€|!!}€!}!€}€!|!!~}!€}€!~}€!~}!€~~}!€}!€}!€|!!}€!}!€|!!}€!}€!~}!€}!€}€!~}€!}€!}!€~}!€|!!}€!}!€|!!}€!}!€}€!}€!}€!}€!}!€|!!}€!}!€}!€}!€|!!~}!€}!€}!€}!€}!€}!€|!!~}!€}!€}€!~}!€}!€}€!~}!€}!€}!€}!€~~~~~~~~~~~~~~~~~}!€~}€!}€!~}!€}€!~}€!~~~~}!€}!€~}!€~~}€!~~}!€}!€|!!}!€}!€}!€|!!}€!|!!}!€|!!~,ƒ|!!|!!|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!}!‚,|!!},‚!|!!|!!|!!},‚!}!‚,|!!},‚!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!}€!}!€}!€}€!}€!~}!€}€!}!€~}!€}€!}!€}!€}!€}!€}€!}€!}!€}!€}€!~}!€}€!}!€|!!~}!€}!€}!€}€!}!€|!!}!€}€!|!!}!€}€!}€!}!€}!€}!€}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€}!€}!€|!!}€!}€!|!!}!€|!!|!!}!€|!!}!€}!€|!!}!€}€!}!€|!!}!€}!€|!!}!€}€!~}€!}€!~}!€|!!}€!}€!}€!~}!€}!€}!€}!€}!€}€!~|!!}€!}€!}€!~}€!~}!€|!!}€!}€!}!€}€!}€!~}!€}!€~}!€}€!~~}!€}!€~}€!~|!!~}!€}!€}€!~~,ƒ}!€}!€}€!}€!~}€!}!€~,ƒ}!€}€!~~,ƒ}!€~ƒ,}€!}!€~,ƒ}€!~}€!}€!~~~~~~~~~~~~~~~~~~~~~~~}!€}!€}!€}!€{!†!|!!|!!qH}CpC{CuC}=rC|9t9~9t9~9y-~-t9-y-~-y-~-y-~-{!-{!-|!!{-!|!!|!!}€!|!!}€!}!€}!€}!€}€!}€!~~~~~}!€|!!}€!}!€|!!~}!€}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{€-}€!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!}€!|!!|!!|!!}!€}!€}!€|!!}!€|!!}€!}!€}!€}€!}€!~}!€}€!}!€}!€}€!}€!}€!~}!€}€!}€!}€!}!€}!€}!€}!€|!!}€!|!!}!€|!!}!€|!!|!!|!!}€!}€!}€!|!!|!!|!!}!€}!€}!€}!€}!€}!€}!€|!!}!€}€!~}€!}€!~}!€}!€}!€}€!}€!|!!~}!€|!!~|!!|!!}€!}!€|!!|!!}!€}!€}!€|!!}€!}€!~}!€|!!}!€}!€}!€}!€}!€~}!€}€!~}!€}!€}!€}€!}€!}€!}€!~}!€}€!~}€!}!€}€!~~|!!~~}!€}€!~~~~}!€~~~~~~~~~~~~~~}€!}€!~}€!~}€!~~~}€!~~}!€~}!€~}!€}!€~}€!}€!~}!€|!!}€!}!€}!€|!!|!!|!!|!!|!!}€!~ƒ,|!!~ƒ,}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!},‚!}!‚,|!!|!!|!!}!‚,}!‚,}!‚,|!!},‚!|!!|!!|!!}!‚,|!!|!!},‚!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!}!€}!€}!€}!€}!€}€!}!€}!€~|!!}€!~}€!}€!}€!~}€!~}€!~}€!~}€!}€!~}!€}!€}!€}€!~|!!~|!!}€!}!€}!€}!€|!!}!€}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!~|!!}!€|!!}€!|!!}€!|!!}€!~~|!!}€!}!€|!!}€!}€!}€!}!€}€!}€!}€!|!!~}€!}!€}!€}!€}€!}!€}!€~}!€~~}!€}!€}€!}€!~}€!}€!~}€!}!€}€!~}!€}!€}!€~~}!€}!€}!€~}€!~~~}!€~}!€}€!~~~}!€~}€!~}!€}!€}€!}€!}!€}!€}!€}!€~,ƒ}!€~,ƒ~,ƒ}€!}!€~ƒ,}€!}€!}€!}€!}€!~~}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~}!€~}€!}€!}€!|!!|!!{!†!pC{CqH}Cr9|Ct9~9t9~9v9~-q99t-9y-~-{!-y-~-{!-{!-|!!|!!|!!|!!|!!}€!|!!}€!}!€}!€}!€~}€!}€!}€!~}!€|!!}€!~}€!~|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€|!!}!€}!€|!!}!€|!!}€!~}!€|!!}!€}!€}!€|!!}€!}€!~}!€}!€}€!~}!€}!€~}!€}€!~}!€}€!}€!}!€|!!}€!}!€}!€|!!|!!}€!|!!}!€|!!|!!|!!|!!}!€|!!}€!}€!}!€|!!}€!}€!}!€}€!~}€!~}!€}!€}!€}€!}€!~}!€}!€}!€}!€|!!}€!}€!|!!}!€}!€}!€|!!}€!}€!}€!}€!}!€}!€}!€|!!}!€}€!~~}!€}!€}!€}!€|!!}€!}!€}€!}€!}€!}€!|!!}€!~}!€}!€|!!~}!€~}€!~}!€}€!~}!€}!€}€!~~}!€~~~~~~~~~~~~~~}€!~~~~~~~~~~}!€}!€}!€}!€~}!€~}!€~}€!~}!€~}!€}€!}!€}!€~}!€}!€|!!}!€}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!},‚!},‚!|!!|!!},‚!|!!},‚!}!‚,|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€}!€}!€|!!}€!}!€}!€}!€}!€}!€~}!€~}!€}€!}€!~}!€|!!}€!}€!}€!}€!~}!€}€!}€!}€!}!€}€!}€!}!€}!€}!€|!!}€!}€!|!!}€!}€!|!!}€!}€!}€!}€!}!€|!!}!€|!!}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}!€}!€|!!}€!}€!}!€}!€|!!|!!|!!}!€}€!}!€}!€}!€}!€}!€}€!}!€}!€}!€~}€!}!€}€!~}€!~}€!}€!}€!~|!!}€!}€!}€!}!€}!€~}!€}!€}!€}!€}€!}!€}!€}€!~}€!}€!}€!}€!~}€!}€!~}€!}€!}€!}€!~}!€~~}!€}!€~~}!€}€!}€!~}!€}!€}€!}€!}€!}€!}€!}€!{!†!}€!|!!~ƒ,}€!~}!€}!€}!€}!€}€!~ƒ,}€!}€!~~,ƒ~}!€~~~~~~~~~~~~~~~~~~~~~~}€!}€!}€!}!€|!!}€!z!„)qH}CpC{Cr9|Cr9|Ct9~9v9~-v9~-y-~-y-~-y-~-{-!y-~-|!!{-!{!-|!!|!!|!!|!!}€!}€!}€!~}€!}!€}!€}€!~}!€}€!~~|!!}€!}€!}€!}€!}€!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!}!€|!!}!€|!!|!!}!€|!!}!€|!!}!€}!€}!€|!!}€!|!!}€!~}!€~}€!~}!€}€!~}€!}!€~}!€}!€}€!}!€}!€|!!|!!}€!|!!|!!}!€}!€|!!}!€|!!}!€}!€|!!}€!|!!}€!}!€|!!}€!}!€|!!}€!}!€}!€|!!}!€}€!}€!}€!~}!€~}!€}€!}€!}€!}€!}€!}!€|!!}€!|!!}€!}!€}!€}!€}!€}!€}!€}!€}!€}€!}€!}!€}!€}!€}!€}€!}€!}€!~}€!}€!~|!!~}!€|!!~|!!}€!~}!€~}€!}€!}€!~}!€}€!}!€}!€~~}!€~~~}€!~~~~~~~~~~~~~~~~~~~}!€~~~}!€~~~~}!€~}€!}€!}€!~~}!€}€!~}!€~}€!|!!|!!|!!}!€|!!|!!}!€|!!|!!}!‚,}€!|!!}!€|!!|!!|!!|!!}!‚,|!!|!!},‚!|!!|!!|!!},‚!},‚!|!!|!!{-‚,|!!|!!}!‚,|!!{-!|!!},‚!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!}€!}€!}!€}!€|!!}€!}€!}€!}!€}!€|!!}!€}!€}€!}€!}€!~}€!~}!€}€!}!€}€!}€!~}!€|!!}!€|!!}€!|!!}€!}€!}€!}!€|!!}€!}!€}€!|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€}€!}€!}!€|!!}€!}€!}€!}!€}!€|!!}!€|!!}!€}!€}!€}!€}!€}€!}€!}!€|!!~}€!}€!}!€|!!}€!~}€!~}€!~}!€}!€~}!€}€!}!€}!€}€!}€!~}!€~}!€}!€}!€}!€}!€}€!}€!}€!}!€~}€!}€!~~~~~}!€}!€~}!€}€!}€!~}!€}!€}€!}!€}!€~|!!}!€}!€|!!|!!}€!}€!~}!€|!!~ƒ,}€!}€!}€!~ƒ,}€!}€!}€!|‡!}!€~~~}!€~~~~~~~~~~~~~~~~~~~}€!~}!€}!€{!†!|!!{!†!|!!|!!pC{Cu=}CrC|9t9~9t9~9t9~9v-~9t9-y-~-y-~-y-~-{-!{!-{!-|!!|!!|!!|!!}!€|!!|!!~}!€|!!~}€!~}!€~}!€~}!€}!€}€!}€!}!€|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!~ƒ,}€!|!!}!€}!€|!!}€!}€!}!€}!€|!!|!!}€!}€!~}!€|!!}€!|!!}€!~}!€}!€|!!~}!€}€!~|!!}€!}!€|!!}€!}€!}€!}€!}€!}€!|!!}€!|!!|!!}€!|!!|!!|!!}!€|!!}€!|!!}€!}!€}!€|!!}€!}!€}!€~}!€}€!~}!€}€!}€!~}€!}!€}!€|!!}€!}€!|!!|!!}€!}!€}!€|!!}!€}€!|!!}!€}€!}!€|!!~|!!~|!!}€!}€!~|!!}€!~}€!}€!~}!€}!€}€!}€!~}!€|!!}€!}€!~}!€}€!~~~~}€!~}€!~}!€~~~~~~~~~~~~~~~~~~}!€~~~~~~}!€~~~}€!}€!~~}!€~~~}€!}€!~}!€}!€}€!|!!}€!~}€!}€!}€!}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!},‚!|!!|!!|!!},‚!},‚!|!!|!!},‚!},‚!}!‚,|!!},‚!|!!}!‚,|!!|!!|!!}!‚,|!!},‚!|!!|!!|!!|!!}!€|!!}€!|!!|!!|!!}!€|!!|!!~|!!}!€}!€}€!~|!!}€!~}€!}€!}€!}€!}€!}€!}!€}!€}!€}€!}€!}€!~}!€}!€}€!}€!}€!}€!}€!}€!}€!|!!}€!}€!}!€|!!|!!|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!~|!!}€!}€!}!€}€!}!€|!!}€!}!€|!!}€!}€!}€!}!€|!!}!€}!€}!€|!!}€!~|!!~|!!}€!}!€~}€!}€!}€!}€!}€!}€!}€!~}!€}!€}€!}!€}€!}€!}!€~}!€}!€}!€}!€}€!}€!~}€!~}€!~}€!}€!~~}€!~}!€}€!~}!€~}!€~}!€~}!€}!€~}!€}€!~~,ƒ}!€~ƒ,}€!}€!}€!|!!}€!|!!~ƒ,~}!€}!€{!†!|!!}!€~}!€~}!€}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~}€!~|!!}€!|!!|!!x-„)qH}CpC{Cr9|Cr9|Ct9~9v-~9v9~-t-9y-~-y-~-{-!{-!{-!|!!|!!|!!|!!}!€}!€|!!}€!}€!}!€~}!€}!€}!€~}!€}!€|!!}€!~}!€}!€}!€}!€|!!}€!}!€|!!|!!|!!|!!}€!}!€|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}€!}!€|!!}!€}!€}!€|!!}!€|!!}€!}€!}!€}€!}€!}€!}€!}€!~}!€}€!}!€|!!}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€}!€|!!|!!|!!}!€|!!}€!}€!}€!}!€}!€}!€|!!}€!}€!~}!€~}!€~|!!}!€}€!}!€}€!}€!|!!}€!}!€|!!}€!}!€}!€|!!}€!}€!}€!}!€}€!}!€|!!}!€|!!}€!}€!}!€}!€}€!~|!!|!!}€!}€!}€!}€!~}!€|!!~~~}!€}€!}€!~}!€}!€~}!€~}€!}!€~}!€}!€~~~~~~~~~~~~~~~~~~}!€~}!€}!€~}€!~}!€~~~~~}€!}€!}€!}€!~}!€~}!€}€!}€!}€!}€!}!€|!!}!€}€!|!!|!!}€!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!}!‚,|!!|!!}!‚,|!!{-!}!‚,},‚!}!‚,|!!|!!},‚!},‚!}!‚,}!‚,|!!~,ƒ|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€|!!}!€}€!}!€|!!}€!~|!!}€!~}!€}!€}!€}!€}!€~}!€}!€}€!~~|!!}€!}€!}!€}!€}!€|!!}€!}!€|!!}€!}!€}!€}!€}!€|!!}€!|!!}!€|!!|!!}€!}!€|!!|!!|!!|!!}!€|!!|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}!€|!!|!!}€!}!€}!€}!€|!!~}!€|!!}!€}€!}€!}€!}€!~}€!~}!€|!!~|!!}€!}€!}€!}€!~|!!}€!}€!~}€!}!€}!€}€!}€!~}!€}!€~~}!€}!€}€!}€!~}!€}!€|!!}€!}€!}€!}€!~}€!}€!}!€}!€}€!}€!~}€!~~~}!€~}!€~}€!}€!}€!}!€}!€}!€|!!}€!}€!|!!}€!}€!}!€}€!}€!}!€~,ƒ~ƒ,}€!~|!!~ƒ,}€!}€!}€!}€!~~}€!~~~~~~~~~~~~~~~~~~~~~}!€~}€!}€!{!†!|!!|!!z!„)pC{Cr9|CrC|9t9~9t9~9q99v-~9t-9y-~-y-~-{!-y-~-|!!{-!{!-|!!|!!|!!|!!|!!}€!}!€}€!}!€~}!€}€!}€!~}!€}€!}€!}€!|!!|!!}€!}€!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}€!}€!|!!}€!~|!!|!!}€!|!!}€!}!€}!€}!€|!!}€!|!!}!€}!€}!€|!!~}!€}!€}!€}!€}!€}!€}!€~|!!}€!~}!€}!€|!!|!!}€!|!!|!!|!!}€!}!€|!!|!!|!!|!!|!!}€!|!!}!€}!€}€!|!!}€!|!!|!!}!€}€!}!€|!!}€!}!€}!€}!€}!€}!€}!€|!!~}€!}€!}€!}!€}!€}!€}!€|!!|!!}!€}!€|!!|!!}€!}€!}!€}€!}!€}!€}!€}!€|!!}€!|!!~|!!}€!}€!}!€~|!!}€!}€!}€!}€!}!€}€!}€!}€!}!€~}!€~}!€~~}!€}€!}€!~~~~~~~~~~~~~~~~~~~~~~}!€~}!€~~~~~~~}€!}€!}€!~~~~~}!€~}€!~}!€}€!~}!€}!€}!€}€!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!},‚!}!‚,|!!{-!}!‚,|!!{!-|!!}!‚,}!‚,|!!|!!|!!|!!|!!|!!},‚!|!!|!!}!‚,|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!}€!|!!}€!|!!}€!~}!€|!!}€!~}€!}€!}€!}!€}!€|!!}!€}!€}!€~}!€|!!}€!}€!}€!}€!}€!|!!}€!}€!|!!}€!}€!}€!}!€|!!|!!|!!|!!{€-}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!|!!}€!|!!}!€~}!€}!€}!€|!!}€!}€!}€!}€!}€!}€!}€!}!€}€!}€!}€!}€!}€!}!€}€!~~|!!}€!~}€!}€!}€!~}€!~}€!}!€~}!€}!€}!€}!€}!€}!€}!€|!!}€!}€!~~|!!~~~~}!€|!!~}€!}!€}!€}€!}€!~}€!}€!~~}!€}!€}€!}€!}€!}€!}!€}!€}!€~}€!}€!~|!!~ƒ,~}€!}€!~ƒ,}€!}€!}€!}!€}!€}!€}€!}!€}!€}!€}!€}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~}€!}€!|!!|!‡|!!z!„)z!„)|!!pC{CrC|9t9~9rC|9t9~9t9~9o9„9y-~-y-~-y-~-y-~-{!-{-!{!-|!!|!!|!!|!!|!!}!€}!€}!€}!€}€!}€!}€!~}!€}!€}€!~|!!~}€!~}€!}!€|!!}€!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!}€!}€!|!!}€!|!!}€!|!!}€!}!€}€!}!€|!!}€!}€!}€!}€!|!!}!€}€!}€!}€!}€!|!!|!!}!€}€!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€}!€}€!}!€|!!}€!}€!~}!€}!€}€!~}!€}!€|!!|!!|!!|!!|!!|!!}!€}€!}€!|!!}€!}!€}!€}!€|!!}!€}!€|!!}€!}€!}!€}!€}!€|!!~}!€}!€}!€|!!}€!~}!€}!€}!€~}!€}!€}!€}€!}€!~}!€}€!~~~~~~~~~~~~}!€~~~~}€!~~~~~~~}€!~~~~~}!€}€!~}!€~~}!€~~~}!€}!€}!€}!€}!€}!€}!€}€!}€!}€!}€!}!€}!€|!!}€!}!€|!!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!},‚!|!!}!‚,}!‚,}!‚,|!!{-!}!‚,|!!~,…,|!!},‚!}!‚,|!!}!‚,|!!},‚!|!!~,ƒ}!‚,|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€|!!}€!~|!!}€!~|!!~|!!~}!€}!€}€!}€!~|!!~|!!}€!~}!€}!€}!€}!€}!€}!€}€!|!!}€!}!€|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!}!€}!€|!!}€!|!!|!!}!€}!€|!!}!€}!€}€!|!!}€!}€!}€!}€!}!€}!€|!!}€!|!!}€!~|!!}€!}€!}€!}€!~}!€|!!~|!!~}€!|!!~}!€|!!~}!€|!!~}!€}!€}!€}€!~|!!~}!€}!€}!€}€!}€!~|!!~}!€}!€}!€}!€}!€}€!~}!€~~}!€}€!}€!~~}€!~~~}€!}€!~}!€}!€}!€}!€~,ƒ}!€}!€}!€}€!}€!|!!~,ƒ}!€|!!}!€~,ƒ}!€}!‚,}€!|!!}!€}!€~,ƒ}!€|!!~}€!~}!€~~~~~~~~~~~~~~~~~~~~~~}€!~}!€|!!{!†!|!!|!!w)‰)rC|9pC{CrC|9t9~9t9~9t9~9v-~9t-9y-~-{-!{-!y-~-{!-|!!|!!|!!|!!|!!}€!}€!}!€|!!}€!}€!~}!€}€!~}!€}€!~}!€|!!}€!}!€|!!}€!}!€}!€|!!|!!}€!}€!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€}!€|!!}€!}€!|!!}€!|!!~|!!}€!|!!~|!!}€!}!€}!€}!€}€!}€!}!€}!€~}!€}!€}!€|!!}!€|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!}€!}€!}!€}!€|!!|!!|!!}!€|!!}€!|!!}€!}€!}€!~}!€}€!~|!!}€!}!€}!€|!!~}!€|!!|!!|!!}€!}!€}!€|!!}€!}€!}!€}!€}!€}!€|!!}€!}€!}!€}!€|!!}!€}!€}€!~~}!€}!€~|!!}!€}!€}!€~}!€~}!€~}!€~~}€!~}!€~~}€!~~~~~~~~}€!~~~~~~~}!€~~}!€~~~}€!~~}€!~}!€~}!€}€!~~~~~~~}€!}!€}!€}!€}!€}!€}!€}€!}!€|!!}!€|!!|!!}!€|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!|!!|!!|!!{-!|!!|!!}!‚,}!‚,|!!},‚!|!!}!‚,|!!},‚!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}!€|!!}!€}!€}€!}!€}!€}!€|!!~|!!}€!}€!}€!}!€}!€}!€|!!|!!~}€!~}!€|!!}€!}€!}!€|!!~|!!}€!~}!€}!€|!!}!€|!!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}!€|!!|!!}!€}!€}!€}!€}!€~}!€}€!}€!~}!€}!€|!!}€!}!€|!!~}!€}!€}!€}!€}!€}!€~}€!~}!€}!€~}!€}!€~}!€~~}!€}!€}!€}€!}€!}€!~}!€}!€~}!€}!€}€!}€!~}€!~}!€}!€}€!~}!€}€!~|!!}!€~}!€}!€}€!}€!}€!~}!€}€!~}€!}€!~~}!€}!€}€!~~ƒ,}!€~ƒ,~}!€}!€|!!}!€}€!}€!|!!}!€}!€}!€}€!}!€}€!}€!~}!€}!€~~}!€~~~~~~~~~~~~~~~~~~~~~}!€}!€|!!}€!|!!|!!z)„!|!!uC}=rC|9r9|Cq99t9~9t9-v9~-y-~-y-~-y-~-y-~-|!!{-!{!-|!!|!!|!!|!!}€!}!€}€!}!€|!!~}!€}€!~}!€}€!}€!}€!}!€}!€}!€|!!}!€}!€|!!|!!|!!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!}!€}!€|!!}€!|!!}€!}!€}!€|!!}!€}€!}!€}!€|!!}€!~~|!!}€!}€!~|!!~|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!}!€|!!|!!|!!}€!}€!}€!}!€}!€}!€}!€}!€}€!}€!}€!~|!!~}!€|!!|!!~|!!|!!|!!|!!}€!}!€|!!}!€}€!|!!}€!~|!!}€!}€!}€!}!€|!!~~}!€}€!}€!}!€|!!}!€|!!~}!€}!€}€!}€!~}!€}€!~}€!}€!}€!~~~~}€!~~~~~~~~}€!~~~~~~~~~~}€!~~}€!~~~~}€!~}!€~}€!~~}!€}€!}€!}€!}€!}€!}€!}!€~}!€}!€~}!€|!!}€!}!€|!!}€!}€!}!€}!€|!!|!!|!!}!€},‚!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!}!‚,|!!}!‚,|!!},‚!{!-|!!},‚!},‚!},‚!{-!|!!|!!|!!},‚!}!‚,|!!},‚!}!‚,|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€}€!}!€}!€}!€|!!}€!|!!}€!}€!}!€}!€|!!}!€}!€~|!!}€!}!€}!€|!!}€!}€!}€!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!}!€|!!}!€|!!}€!}€!}€!}!€|!!}!€|!!}!€}!€|!!}€!}!€}!€}!€}!€}!€|!!}€!}!€}!€}!€}€!}€!}€!}€!}€!}!€|!!}€!~|!!~|!!}€!}€!~}€!}!€}€!}€!~|!!}€!~}!€}!€~|!!~}€!~}!€}€!}€!~}!€|!!~}€!~~}!€~}!€~}!€~}€!~}!€}!€~~}€!}€!~|!!}€!}€!~}€!|!!~ƒ,}€!}€!}€!~ƒ,}€!}€!}!€|!!~,ƒ}!‚,~|!!}€!}€!}€!~}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~|!!}€!|!!z…)|!!|!!w)‰)r9|Cr9|Ct9~9t9~9t9~9t9~9y-~-t9-y-~-y-~-{-!y-~-{!-{-!|!!|!!|!!|!!}!€|!!}!€}€!~}€!}€!}!€|!!}€!}€!~~}€!}€!}!€}!€|!!|!!|!!}€!}!€|!!|!!|!!}€!|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€}!€|!!}!€}!€|!!}!€|!!}!€|!!|!!}€!}!€|!!}€!}€!}€!}!€|!!}€!|!!}€!}!€|!!}€!}!€}€!}!€}€!|!!}!€}!€|!!|!!}€!}€!|!!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!}!€}!€}!€}!€|!!|!!|!!}€!}!€}!€}€!}€!}€!}€!}€!}!€}€!}!€|!!}€!|!!|!!|!!}€!}!€|!!|!!}!€}€!|!!}€!}!€|!!~|!!}!€|!!~}!€|!!|!!}€!}€!~}€!}€!}€!}€!}!€|!!~|!!~}!€}€!}€!~}!€~~~~}€!~~~~~~~~}€!~~~~~~~}€!~~~~~~~~}€!~}!€}€!}€!}€!~~~~}!€}€!~}€!~~~~~}!€~}!€|!!~|!!~|!!}!€|!!}!€|!!}€!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!},‚!},‚!},‚!|!!|!!},‚!}!‚,|!!}!‚,|!!|!!}!‚,|!!|!!},‚!|!!|!!}!‚,|!!|!!},‚!|!!|!!|!!|!!|!!}!€}!€}!€|!!}€!}€!}!€}!€}!€}!€}!€~}!€}!€|!!}€!}€!}€!~|!!}!€}€!}!€|!!}€!}€!}!€|!!}€!}€!}!€|!!}€!|!!}€!}€!}!€}!€|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!|!!}!€|!!}€!}€!}!€|!!~}!€}!€}!€}!€}!€}!€}!€}!€}€!}€!}!€}!€}!€}!€}€!}!€~}!€}!€~}!€}€!~}!€~|!!~}€!~}!€~}€!~}!€}€!~}!€~}!€|!!~}€!}!€}€!}€!~}!€|!!~|!!}€!~~}!€}!€}!€}€!}€!}€!~}!€~}€!~~~}€!}€!}!€}!€}!€}!€}!€~|!!~ƒ,~|!!}€!}€!|!!}€!}!€}!€|!!~ƒ,}€!}€!}€!}€!}€!}€!}€!~}!€~}!€}!€~~~~~~~~~~~~~~~~~~~~~}€!}€!|‡!}!€{!†!|!!x)‹!z)„!|!!rC|9rC|9t9~9rC|9v9~-t9~9q99t-9y-~-y-~-{!-{!-{-!|!!|!!|!!|!!|!!}€!~}!€}!€}!€}!€}!€~~~}€!}€!}!€}!€}!€}!€}!€}!€}!€}!€|!!|!!}€!|!!}€!}!€|!!|!!}€!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}€!|!!}€!|!!}!€|!!|!!}€!}!€}!€}!€|!!}€!}!€|!!}!€}!€}!€}!€}!€}!€}!€}€!~}!€}!€|!!}€!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!~}!€}!€|!!}€!}!€|!!~}!€}!€}€!}€!}€!}€!}!€|!!}€!|!!|!!|!!}!€}€!}€!}!€}!€}!€}!€}!€|!!~}!€}!€}!€|!!}€!}€!}€!}€!}€!}!€}!€}!€}€!}€!~}!€~}!€|!!~~~}€!~~~~~~~~}€!~~~~~~~}!€~~~~~~~~~~~}€!~~~~~~~~}!€~}!€~~}!€~}€!~}€!}€!~}€!}€!~~|!!}€!}€!}!€}€!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!},‚!|!!}!‚,|!!|!!}!‚,|!!}!‚,|!!{!-{!-|!!}!‚,|!!{!-|!!}!‚,}!‚,|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!},‚!|!!|!!}€!|!!|!!|!!}!€|!!}!€|!!~}€!~}!€}!€}!€}!€}!€|!!}!€}!€|!!~~|!!~}!€}!€}!€|!!}€!}€!|!!}€!|!!}€!}€!}!€|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!~|!!}!€|!!|!!}€!}€!}€!~}€!}€!~}!€}!€}€!}€!}!€}€!}€!}€!}!€}€!~}€!}!€~~}!€}!€}!€~}€!}€!~}€!~}!€}!€}!€}!€}€!}€!}!€}€!}€!~}€!~}€!}!€}!€}!€}!€|!!~~|!!~}!€}€!}!€~}!€}€!~~~}€!}€!}€!~}€!}€!}!€}!€~}€!}€!}€!}€!}€!}!€|!!}!€}€!~}€!~}!€~,ƒ|!!}!€~,ƒ|!!}!€|!!}!€}!€|!!~ƒ,}!€}€!}€!~ƒ,~}!€}€!~~~~~~~~~~~~~~~~~~~~~}€!}€!|!!|!!z!„)|!!|!!z)„!pC{Cr9|CrC|9t9~9q99v9~-t9-y-~-y-~-y-~-{-!{-!{-!|!!{-!|!!|!!|!!}!€|!!}!€}!€|!!~~}!€}!€}€!}€!~|!!~|!!}€!}€!}€!|!!}€!}!€}€!}!€|!!|!!|!!|!!}€!|!!|!!}!€}!€|!!|!!}€!}€!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}€!|!!}€!|!!}€!|!!}€!}€!|!!|!!|!!|!!}€!}!€|!!}!€|!!}€!|!!}€!}€!}!€}!€}!€|!!}€!}€!}!€|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!{!-{€-|!!|!!{-!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}!€|!!|!!}!€}!€|!!}€!|!!}€!}€!|!!}€!}€!}€!~}!€}!€{-€|!!|!!|!!|!!}€!}!€|!!}€!}€!}!€}!€|!!}€!|!!}€!~|!!}€!}€!}€!}!€}!€|!!~|!!}!€}!€|!!}€!}!€}€!~}!€|!!}€!~}€!}€!}€!~~}!€~}€!~~~~~~~~~~}€!~~}!€~~}!€~}€!~~~~~~~}!€~~}€!}€!}€!~~~~}!€}€!~}€!~}€!}€!~}€!~}!€}€!}!€|!!}€!}!€|!!|!!}€!|!!}€!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!}!‚,|!!|!!{-!|!!{!-},‚!{!-|!!}!‚,}!‚,|!!}!‚,|!!|!!|!!|!!|!!|!!|!!}!‚,}!‚,|!!},‚!|!!|!!},‚!|!!|!!|!!~ƒ,}!€},‚!|!!}€!}€!}€!}€!}€!|!!}!€|!!}€!~}!€}€!}€!}!€~|!!~|!!|!!~|!!}€!}€!}€!}€!}€!}!€|!!}€!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}€!|!!}!€}€!}!€}!€}!€}!€}!€}!€}!€}!€|!!~|!!}€!}€!}€!}€!}€!}!€}€!}!€}!€}!€}€!~}!€}!€~}!€}!€}!€}€!}€!}€!}€!~}€!}€!}€!~}€!~|!!}€!}€!}!€}€!}!€}€!~}€!~~}€!}€!~}€!~}!€}€!}€!}€!~}€!~}!€~}!€}!€}!€}€!~~~|!!}!€~}!€}!€}€!}€!}!€~ƒ,}€!}!€~,ƒ~,ƒ|!!~ƒ,~|!!|!!}€!|!!}!€~ƒ,}!€|!!~}€!}€!}!€}!€}!€~~}!€~~~~~~~~~~~~~~~~~~~}€!}€!}€!{!†!{!†!{!†!|!!z!„)z!„)rC|9rC|9t9~9t9~9t9~9t9~9v9~-o9„9y-~-y-~-{!-{-!{!-|!!|!!|!!|!!}€!}€!}!€}!€}!€~}€!~}!€}!€}!€}€!~~}!€}€!|!!|!!}€!}€!|!!}€!|!!|!!|!!}€!}€!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}!€}!€|!!}€!|!!~}!€}!€}!€}!€}!€}!€}!€|!!}!€|!!}€!}!€|!!}!€~|!!}!€|!!}!€}!€}!€}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!{-€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!|!!|!!}€!}€!|!!}!€|!!}€!}€!}!€}!€|!!~}!€|!!}€!}€!}€!|!!}€!|!!}€!|!!}€!}!€|!!|!!}€!|!!}€!}€!~|!!|!!}€!|!!}!€|!!}€!}€!}€!|!!~}€!}€!}€!|!!~}!€}!€}!€~}€!}€!}€!}€!~~}!€~~}!€~~~~}!€~}€!}!€}€!~}€!~~~~}!€~~~~~~~}!€}!€}€!~~~}€!~~}!€}!€~}!€}!€}!€}€!~}!€}!€~}!€}!€}€!~}!€}€!|!!}€!}€!}€!}!€|!!}€!|!!}€!|!!|!!}!‚,|!!|!!}!€}!‚,|!!|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!|!!|!!},‚!|!!{!-}!‚,|!!{-!{!-|!!},‚!}!‚,}!‚,|!!}!‚,}!‚,}!‚,}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!~|!!|!!|!!|!!|!!}!€}!€|!!}!€}!€|!!}€!}!€}!€}€!}!€}!€|!!~|!!|!!~}!€}!€|!!}!€|!!}€!}€!}€!}€!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!|!!~}€!|!!|!!}!€|!!}€!}!€}!€}!€}!€}!€}!€}€!}€!}€!}!€|!!}€!}€!}!€|!!~}!€}!€|!!}€!}€!~|!!}€!~}€!}!€}€!}€!}€!~}!€}€!~~|!!~}!€}!€~}!€}!€}!€}€!~}€!~|!!}€!~~}!€}!€}!€}!€}!€~}!€}€!}!€}€!~}!€}!€~}€!~}€!|!!}!€~}€!}€!~}€!}!€|!!}€!}!€}!€}!€}!€|!!}!€}!€}!‚,~}!€|!!}€!~ƒ,|!!~ƒ,}€!}!‚,}€!}!€}€!~~~}!€~~~~~~~~~~~~~~~~~~~~~}!€|!!|!!|!!z)„!z!„)|!!|!!r9|Cr9|Ct9~9t9~9v9~-v9~-q99y-~-y-~-y-~-y-~-{!-|!!{-!|!!|!!|!!|!!|!!|!!~|!!~}!€}!€}!€}!€}!€}!€}!€}!€}!€|!!~}!€}!€|!!}€!|!!}!€|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}€!}!€|!!|!!|!!}€!|!!|!!}!€|!!}€!}€!|!!}€!|!!~|!!|!!|!!}€!}€!|!!~|!!}€!|!!}€!}!€|!!}!‚,}€!}€!}!€}€!}€!~ƒ,~}€!}!€}€!|!!}€!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}!€}€!}!€}!€|!!}!€}!€|!!}€!|!!}€!}!€}€!}!€|!!}€!|!!}€!|!!~|!!|!!|!!~}!€|!!}€!}!€|!!}€!}!€}!€}!€}€!}€!}€!|!!}€!}€!}€!}!€}!€}!€~|!!}€!}€!}!€|!!~}!€}!€~}!€}!€~~}!€~~~}!€}!€~~~}€!~}€!~}€!~~~~~~~}!€~}€!~}!€}€!~}€!}€!}€!~~}!€~~}!€~~~~}!€~~}!€~}€!~|!!}€!}€!~|!!}!€}!€|!!}€!|!!|!!|!!|!!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!},‚!}!‚,{!-}!‚,|!!|!!},‚!}!‚,|!!|!!},‚!},‚!|!!},‚!|!!|!!|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!}!€},‚!}€!|!!}!€}!€}€!|!!|!!}!€}€!~}!€}!€}€!}!€}!€}€!}€!}!€}!€}€!}€!|!!}€!}€!}!€|!!}€!}€!}!€{-€}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!{!-{€-|!!|!!{!-|!!|!!{-!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!~|!!|!!}€!}€!}€!}€!}€!~|!!~|!!}€!}!€}!€}!€~}€!~}!€}!€~}€!}€!}€!}€!~~}!€}!€}€!~}!€|!!}€!~}!€~}!€}€!~~}!€}€!}€!~}!€|!!~}!€}€!}€!}!€~}!€~}!€}!€|!!~}!€}!€~}€!}€!~}!€}€!}€!~}!€~}!€}!€}€!~~~}!€}!€~|!!~ƒ,}€!}!€}€!|!!|!!~ƒ,}€!}!€}!€|!!}!€},‚!~ƒ,}!€~,ƒ~,ƒ}€!|!!}!€~}!€~ƒ,~}!€|!!}!€~~~~~~~~~~~~~~~~~~~~~}€!|!‡~}!€|!!|!!}!€{-!z!„)rC|9rC|9rC|9t9~9t9~9t9-v9~-t-9y-~-y-~-{!-{-!{-!|!!|!!|!!|!!|!!}!€~}!€}€!}€!~}€!~}!€}€!}€!}!€|!!~|!!|!!}!€}!€}!€}!€|!!}€!|!!}€!~{-€}!€|!!}!€|!!}€!}!€}!€|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}!€|!!~~,ƒ|!!}€!}!€|!!}!€}!€|!!}€!}!€}€!|!!}!€}€!}€!|!!}!€|!!}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!|!!|!!|!!|!!}€!}!€|!!|!!}€!}!€|!!}!€}!€}€!|!!}€!}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€}€!}€!|!!}€!}€!|!!}€!|!!}€!}€!}€!~}!€}!€}!€}€!|!!}!€}!€}!€}!€}€!}€!}€!~}!€~~}€!~}!€~~}!€~~~~}€!~~}€!~}!€}€!}€!~~}€!}€!}€!~}€!}€!~~~~}€!~~~}!€}!€}€!}€!}€!~}!€}!€|!!~~}!€}€!}€!}€!~}€!~}€!~|!!~|!!}€!}€!|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!{!-|!!|!!}!‚,}!‚,|!!}!‚,}!‚,|!!},‚!}!‚,|!!|!!|!!~,…,|!!},‚!|!!|!!|!!}!‚,|!!}!‚,|!!|!!|!!},‚!|!!|!!|!!}€!|!!|!!|!!|!!|!!}€!~|!!}€!}€!}€!|!!}!€}€!}€!|!!}€!}€!}!€|!!}€!}€!}€!}€!}€!}€!|!!|!!|!!}€!|!!|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!}€!|!!|!!}€!|!!}€!|!!}€!}!€}€!~|!!~}!€}€!}€!}€!}!€}!€}!€}!€|!!}€!|!!}€!}!€}!€|!!~}!€}€!~}!€~~}€!}!€|!!}€!}€!~}!€}€!}€!}€!~}!€~~}!€~}!€}!€}€!}!€}!€}!€}€!~}!€}€!}€!}!€}!€}!€~}!€}€!~~}€!~}!€~}!€}!€}€!~}€!}€!}€!}!€}!€}!€}!€}!€~,ƒ}!€}€!}€!}€!~ƒ,~ƒ,|!!}!€|!!}!€}!€}!€}!€~,ƒ}!€|!!~,ƒ~,ƒ}!€}!€}€!~~}!€~~~~~~~~~~~~~~~~~~~~|!!}€!|!!|!!{!†!|!!z)„!|!!z)„!rC|9rC|9t9~9t9~9v9~-t9~9t9-t9-y-~-y-~-{!-{!-{!-{!-|!!|!!}!€}!€|!!|!!}€!~}!€}€!~}€!}€!}€!}!€~}!€|!!~|!!}€!|!!}€!|!!|!!|!!}€!|!!|!!}€!}€!|!!|!!|!!|!!}€!|!!}!€}!€}!€|!!|!!|!!}!€|!!|!!|!!}!€}€!|!!}€!}!€}!€}!€|!!}€!}!€}!€|!!}€!|!!}€!|!!}!€|!!}!€|!!}€!|!!}€!|!!}€!}!€~,ƒ~|!!|!!|!!}€!~|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!{-!{€-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!}€!|!!|!!}!€|!!}!€|!!}€!}€!|!!}!€}€!~|!!|!!}!€|!!}€!|!!}€!|!!}€!}€!}€!}€!|!!}€!|!!|!!}€!~}!€}!€}!€}!€|!!|!!}!€|!!}!€|!!}€!|!!}€!}€!}!€}!€}€!}€!}€!~}€!~}!€}€!~}€!~~~~~~~}€!~~|!!~~~}!€~}!€}€!~~~}!€}€!~}€!~}!€}€!~~|!!~~}€!}€!~~}!€~~~}!€~}€!~~~}!€}€!~}!€|!!~}!€}!€}€!|!!}€!|!!|!!}€!|!!}!€|!!|!!~ƒ,|!!|!!|!!}!‚,}!‚,|!!|!!|!!}!‚,}!‚,|!!~,…,|!!}!‚,|!!},‚!}!‚,{-‚,|!!|!!},‚!~,…,|!!}!‚,|!!},‚!|!!|!!|!!}!‚,}!‚,|!!|!!|!!|!!}!‚,|!!},‚!|!!|!!|!!|!!|!!{!†!}€!}€!|!!}!€|!!}€!}€!}!€|!!}!€}!€}€!}!€|!!}€!}€!}!€}!€|!!}€!}€!}!€}!€}!€}!€|!!~}€!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!{!-|!!|!!|!!}!€|!!{-!{!-|!!|!!|!!{-!|!!|!!|!!|!!}€!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}€!}!€}!€|!!}€!}!€~|!!|!!~}!€|!!}€!~}!€}€!}€!}€!}€!}€!}!€}!€}!€}€!}€!~}!€}!€}!€}!€~|!!}€!~~~~~~}!€~}!€~}€!}€!}€!}€!}€!}€!~}!€~}!€}!€}€!~}€!~}!€~}€!}€!}€!~}€!~~}€!~~~}!€~|!!~}€!~}!€}!€~}!€}€!~}!€~}!€~,ƒ|!!~ƒ,~}!€}€!~ƒ,}€!~ƒ,~ƒ,}€!~,ƒ|!!~ƒ,}!€}!€}€!}€!~}!€}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~}€!|!‡{!†!}!€|!!z!„)z!„)|!!t9~9t9~9t9~9q99t9~9v9~-t9-t-9y-~-y-~-{-!{-!{-!|!!|!!|!!|!!|!!}!€}!€}!€}!€}€!}€!}€!}€!}€!~}€!}!€}€!~}!€}!€}!€}!€|!!}€!}€!|!!}!€}!€|!!}!€|!!}!€}!€|!!}!€|!!}!€|!!|!!|!!}€!|!!}!€|!!}!€|!!}€!|!!|!!|!!}!€|!!|!!}€!}!€}!€|!!|!!}!€}!€~ƒ,}€!}€!}€!}€!}€!}!€}!€|!!}€!}€!|!!|!!}€!|!!}€!}!€}€!}!€|!!}€!~|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!}!€}!€|!!}!€|!!}€!|!!}!€}!€|!!}!€|!!}€!}€!{€-}€!|!!}!€|!!}€!|!!|!!|!!}!€|!!}€!}€!~}!€|!!}!€}!€|!!|!!}!€}!€|!!~|!!}€!|!!~}!€}€!}€!}€!}!€}€!}€!}€!}!€~~~}€!~}€!~}!€~~}!€~~~}!€~~}€!~~}!€~~}!€}€!~~}!€~~~~}!€}€!}€!~~}!€}!€~}!€}!€}!€}!€}!€}€!}€!}€!~~}€!}€!~}!€}€!}€!~|!!~|!!}!€}€!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!},‚!|!!{!-|!!|!!|!!{!-},‚!|!!|!!}!‚,|!!}!‚,|!!},‚!},‚!|!!},‚!|!!|!!},‚!|!!},‚!|!!|!!|!!{!-}€!|!!|!!|!!|!!{!†!|!!}!€|!!}!€|!!}€!}!€}!€|!!}€!|!!}€!}!€}!€}!€|!!}!€}!€|!!}!€}€!}€!|!!}!€}!€|!!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!|!!|!!|!!{!-|!!|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€}€!|!!|!!}!€|!!|!!}€!}€!}€!|!!}!€}!€~}!€}€!}€!}!€}!€}!€}!€|!!}!€}!€}!€}€!}€!~}!€}!€}!€}€!~}!€~}!€~~}!€}!€}€!}€!}€!}€!~}!€}!€}!€~}!€~}!€}!€}€!}€!}€!}€!~}€!~}!€}!€}€!}€!}!€}!€~}!€}€!}€!}€!~}!€}!€|!!~~}!€~}!€}!€}€!~}!€}!€}!€|!!}€!}!‚,~ƒ,}€!~|!!|!!}!‚,}€!~,ƒ~ƒ,}€!|!!|!!}!€|!!|!!}!€~ƒ,}€!}!€}!€~ƒ,~}€!~}!€~}€!~~~~~~~~~~~~~~~~~|!!}€!}!€}!€}€!|!!z)…|!!}!€z)„!pC{CrC|9rC|9t9~9t9~9t-9v9~-t9-y-~-y-~-{!-{-!{-!{-!|!!|!!|!!}!€|!!}€!}€!~}!€}!€}!€}!€}!€}!€}!€}!€}!€|!!}!€}!€}!€|!!}€!|!!}!€}!€|!!|!!|!!|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!}€!}!€|!!}€!|!!}€!|!!|!!}€!}!€|!!}€!|!!}€!}!€|!!}!€}!€}!€}!€}!€}!€}!€|!!|!!|!!}!€|!!}€!}!€|!!|!!}!€~}!€|!!}€!}€!}!€}€!}€!}!€|!!|!!}€!}!€|!!|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!~|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!|!!}!€|!!}€!}€!}!€}!€}!€|!!}€!}!€|!!}€!|!!|!!|!!}!€|!!}!€}!€}!€|!!}€!|!!}€!}!€}!€|!!}!€}€!}€!|!!}!€|!!}!€}!€}!€}€!}€!}€!}€!}!€}!€}!€}!€}!€~}!€}!€}€!}€!~}!€~~~}€!~}€!}€!~}€!~}€!~~}€!~}€!}€!~~~}!€}!€}!€}€!~}!€}!€}€!~~}€!~}€!}€!~~~~~~~~}!€}€!}!€~}!€}€!}!€}!€}€!}!€|!!|!!}€!|!!}€!}!€}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!}!‚,|!!{!-|!!},‚!|!!|!!{-!|!!},‚!},‚!|!!|!!|!!|!!|!!|!!|!!},‚!|!!}!‚,|!!}!‚,|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!|!!}€!}€!~|!!|!!}€!}€!}!€}!€}!€|!!|!!}€!|!!}!€}!€|!!}€!}!€}!€|!!}€!}!€}€!|!!|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!}!€|!!}€!}€!}!€|!!}!€}!€}€!}€!}!€}!€|!!~}€!}!€}!€}!€}!€}€!}!€}€!}€!}!€}!€}!€}€!}€!}€!}€!}€!}€!}!€~}€!~}€!}€!}€!~~~}!€~~}!€~}!€~}€!}€!~}!€~}!€}€!}€!~}€!~}!€~}€!}€!~}€!~}€!}€!~~~}€!~}!€}€!~|!!~}!€}€!}€!}€!}€!|!!}€!}€!}!€}!‚,}€!}€!{!†!}€!{!†!|!!}!€~,ƒ}!€|!!~ƒ,}!€|!!|!!}€!}€!~ƒ,~}!€}€!~~~~~~~~~~~~~~~~~~~~~~}!€}€!}€!{!†!}!€|!!z)…z)„!z)„!t9~9t9~9t9~9t9~9q99t-9y-~-y-~-y-~-y-~-{-!{-!{-!{!-|!!|!!|!!}€!|!!}€!}€!}€!}€!}€!}€!~}!€}!€}€!}!€|!!~|!!}€!|!!|!!|!!}€!|!!|!!}€!}€!}€!}!€|!!|!!|!!|!!|!!}!€}!€|!!}€!}!€|!!}!€|!!}!€|!!}€!|!!|!!|!!|!!|!!}!€|!!}€!}!€|!!|!!|!!}€!|!!|!!}€!~|!!~}!€}!€|!!}€!~}!€|!!|!!|!!}!€}!€|!!}€!}!€}!€|!!~ƒ,~~,ƒ|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!}€!|!!|!!}€!}!€|!!}€!|!!}€!}!€|!!}!€}!€|!!}€!|!!|!!}!€|!!}€!}€!|!!}!€|!!}!€|!!~|!!~}€!|!!}!€}!€}!€}!€}!€}€!}€!~|!!}€!~}!€~~~~~}!€}!€~~~~~}!€~}!€}€!~}€!~}€!~~}€!}!€~}!€~~|!!}€!~}!€}!€}€!~}!€}!€~~}!€}!€}!€}€!}€!}€!}€!~}€!~~}!€}!€}!€}€!}€!~}!€}!€}!€}!€}!€|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!{-!|!!|!!|!!},‚!}!‚,|!!},‚!~,…,},‚!},‚!|!!{-!|!!|!!},‚!|!!},‚!}!‚,|!!|!!},‚!|!!},‚!|!!|!!|!!|!!{-!|!!}!‚,|!!{!-}€!|!!|!!|!!|!!}€!|!!|!!}€!~|!!|!!}€!}€!}!€|!!}!€|!!}€!~|!!}!€|!!}€!}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-€|!!|!!|!!|!!{-!|!!|!!|!!{!-{€-|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!{-!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!|!!}€!}€!}€!~|!!}!€}!€}!€}!€}!€~}!€}!€}€!}€!}!€}€!}€!~}!€|!!}€!}!€|!!}€!}!€}€!~}!€~}€!}€!~}!€}!€~~}!€}€!}€!~}!€}!€}€!}€!}€!}!€~}!€}€!}€!}€!~}!€}€!}€!~}!€~|!!~~}€!~}!€~}!€}!€}!€}!€~}!€|!!~~}€!~}!€}!€}!€|!!}€!}€!}€!}€!~ƒ,}€!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!~ƒ,}€!~~,ƒ}€!}€!{!†!}!€~}€!}!€~}!€~~~~~~~~~~~~~~~~~}€!~}!€}!€|!!{!†!|!!|!!z!„){!-rC|9rC|9t9~9t9~9v-~9t9~9t-9y-~-y-~-{!-y-~-{!-|!!|!!|!!|!!}€!|!!~|!!}!€}€!}€!}€!~}!€}!€}!€}!€}€!~}€!}€!}!€}!€}€!}€!}!€}!€|!!|!!|!!|!!}€!}!€}!€|!!}€!}!€|!!|!!}€!|!!}€!}!€|!!}!€|!!|!!|!!}!€|!!|!!}€!}!€|!!}€!|!!}€!}!€|!!}€!|!!}!€|!!}€!|!!}!€|!!|!!|!!}!€|!!|!!}€!}!€|!!}!€}!€}€!}!€}!€|!!}€!|!!}!€}!€|!!|!!|!!|!!|!!{!-{!-|!!}!€{!-}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!}€!}!€|!!|!!}€!}€!}!€|!!~|!!|!!}€!~|!!|!!}€!}€!}€!}€!}€!|!!~}!€}€!}€!}!€|!!}€!}€!|!!}€!}€!}!€|!!|!!|!!}!€}€!}!€}!€}!€|!!}€!}!€}!€~}!€}!€}€!~~}!€}!€}€!~}!€}€!~}€!~~~~}€!~~}!€}!€~}€!}€!~~}€!~}!€}!€~~}!€~~~}€!~~}€!}!€~~}€!~~~~}€!~}!€}!€|!!~}€!}€!}€!}€!~|!!}€!}€!|!!}€!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!{-!}!‚,|!!|!!|!!}!‚,},‚!|!!}!‚,|!!|!!},‚!|!!|!!|!!},‚!|!!|!!}!‚,|!!}!‚,|!!},‚!|!!|!!|!!|!!{!†!|!!}€!|!!}€!}!€|!!}€!}€!|!!|!!}!€}€!|!!}!€|!!}!€}!€|!!}€!}€!}!€}€!}!€|!!}€!}€!|!!}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!z!„)|!!|!!{!-|!!{!-|!!|!!|!!{!-{!-|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}!€}!€|!!|!!|!!~|!!}!€}!€|!!}€!}€!}€!}!€}€!}€!~}!€}!€|!!~}!€}€!}€!}!€}!€~}!€}!€}€!}!€}!€~}!€~}!€}!€}!€~}!€~}!€~}€!~~}!€~}!€~}!€~}!€}!€~}!€}!€}€!}€!}€!~}!€}€!~}!€~}!€}!€~~~}!€~~}€!}€!~}!€}!€}!€}!€}!€}!€~,ƒ|!!}€!}€!}€!{!†!}€!|!!|!!}!€~,ƒ|!!|!!}!‚,}€!|!!}!€~,ƒ|!!}€!~ƒ,}€!~}!€}!€}!€~~~~~~~~~~~~~~~~~~~~~}€!}€!z…)~}!€z)„!{!†!|!!z!„)r9|Cr9|Ct9~9t9~9v9~-v9~-y-~-t9-y-~-y-~-{!-{-!{-!{-!|!!|!!}!€|!!|!!}€!}€!~}!€}€!}€!}€!}€!}€!}€!}€!|!!}€!~}!€|!!|!!}€!|!!|!!}€!}!€|!!}€!|!!|!!|!!}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!}!€}!€}!€|!!|!!|!!}!€|!!}€!}!€}!€}!€|!!}€!}€!}!€|!!}€!}€!}!€|!!|!!~|!!|!!}€!}€!|!!|!!}€!|!!}€!}!€}!€}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!{!-}€!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€|!!|!!|!!}!€|!!}€!|!!}€!}!€|!!~}!€}!€|!!}€!}€!|!!|!!|!!|!!}€!}!€|!!~|!!|!!}€!}€!|!!}!€}!€|!!}€!}€!|!!}€!~}€!}!€}!€}!€}!€}!€}!€~}!€|!!~}€!}€!~}€!~}!€}!€}€!~~~}!€~}€!}€!}!€}!€~}!€}!€~}!€~~}!€}€!~~}€!~~}!€}€!}€!}€!~~}!€}€!~~}€!}€!~~}€!~~~}€!}€!~}€!}€!}!€}€!~|!!|!!}€!}€!}!€}!€|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!{-!|!!|!!},‚!|!!},‚!|!!},‚!{!-}!‚,|!!{-‚,|!!}!‚,|!!},‚!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!}!‚,|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!{!†!|!!~}!€|!!}€!}!€|!!}€!}!€|!!|!!~}!€|!!|!!|!!}€!}€!|!!|!!}€!}€!{!†!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!{-€|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}!€}!€|!!}€!}€!}€!}!€}!€}!€}!€}€!}€!}€!}€!}€!}!€}€!}€!}€!}€!}€!|!!~}!€}!€}!€}€!}€!~}!€}!€~}!€~~}!€~~}€!}€!~~~~}€!~}!€~}!€~}!€}€!}€!~}!€|!!}€!~}!€~}€!~}!€~}€!~~}!€~|!!~}!€}!€}€!}€!~}!€}€!}€!~|!!}€!}€!}€!}€!}!€}!€~,ƒ|!!}€!|!!}!€|!!|!!}€!|!!|!!|!!}!€}!€~,ƒ}€!}!€~,ƒ}!€}!€}!€}!€~~~}€!~~~~~~~~~~~~~~~~~~}€!{!†!|‡!}!€{!†!|!!|!!z!„)|!!z)„!rC|9t9~9t9~9q99t9~9q99t-9y-~-y-~-y-~-{!-|!!{-!|!!|!!|!!|!!}!€}!€}!€|!!|!!}€!|!!}€!}€!}€!}€!|!!}€!}€!}!€|!!~}!€}!€|!!}€!}€!|!!}€!|!!}€!|!!}!€|!!|!!}€!|!!|!!}!€|!!}€!|!!|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€}!€|!!}€!}€!}!€}!€|!!}€!}!€}!€|!!}€!}€!}€!|!!}€!}!€|!!~}!€|!!}€!}!€}!€|!!}€!}!€|!!}€!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}!€}!€}!€|!!}€!~|!!}€!}!€|!!|!!}!€}!€}!€}!€|!!|!!~}!€|!!}!€}!€|!!}!€|!!}!€}€!}!€|!!|!!}€!|!!|!!}€!}!€}!€}!€}€!}!€}!€}!€}!€}€!~~}€!~}€!~~~~}!€}!€~}!€~~~}€!~}!€}€!}!€}!€}!€}!€~}!€}€!}€!~~}!€~~~~}!€}€!}€!~}!€}€!~~~}€!~~~}€!~~}€!~}!€}€!}€!}€!}!€~}!€}!€|!!|!!}€!|!!}€!}€!|!!|!!|!!|!!|!!|!!},‚!|!!|!!},‚!|!!|!!|!!|!!|!!|!!},‚!}!‚,}!‚,|!!|!!|!!{-!|!!{!-|!!}!‚,|!!},‚!|!!},‚!}!‚,}!€},‚!|!!},‚!},‚!},‚!},‚!|!!|!!}!‚,|!!|!!}!€|!!|!!|!!|!!|!!}€!}!€}!€|!!|!!|!!}!€|!!{!†!}€!|!!z…)}€!}€!|!!|!!|!!}€!z…)}€!|!!}€!}!€|!!|!!}!€|!!z!„)}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!{-!|!!{!-|!!{!-{!-|!!{-!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}€!}€!}!€}!€|!!}!€}!€}!€}€!}€!}€!}€!}€!}€!~}!€}€!}€!}€!}!€}!€}!€}€!}€!}!€}€!}€!}€!}!€}!€}!€~}!€~}€!~}!€}€!}€!~~~~~}!€}€!~}€!}€!}€!~}€!~}!€}€!}€!~}€!}€!~}!€~}!€}€!}€!}€!}€!~~}€!~}€!~}!€}!€~~}€!}€!~|!!~}!€}!€|!!}!€}€!}€!}!€|!!}€!}!€|!!}!€|!!}!‚,|!!}€!}!€~,ƒ~,ƒ~ƒ,|!!}€!}€!}!€~ƒ,}!€}!€|!!~|!!~~~~~~~~~~~~~~~~~~}€!~}€!}!€}€!}!€}!€|!!|!!|!!|!!r9|Ct9~9t9~9v9~-v9~-v9~-t9-y-~-y-~-y-~-y-~-{!-{!-|!!{-€|!!|!!}€!|!!~}!€}!€|!!~~}!€}!€}!€}€!|!!}€!}!€}!€|!!}€!}!€|!!|!!}!€|!!|!!}€!}!€}!€|!!}!€|!!|!!}€!}€!|!!}€!}€!}!€}!€}!€|!!}€!|!!}!€}!€|!!}€!}!€|!!}€!}€!}!€|!!}€!|!!}€!}!€}!€|!!}!€|!!|!!}€!|!!}€!|!!}!€|!!}€!}€!|!!}€!|!!|!!}€!}!€}!€|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€|!!|!!|!!|!!}!€|!!|!!}€!}!€|!!}€!}!€}!€|!!|!!}€!}€!}€!}€!|!!}€!}!€|!!}€!}€!}€!}!€|!!|!!|!!}€!|!!}!€}!€}!€}€!}€!}€!}€!}€!}€!~}!€}!€}!€}€!}€!~}€!~}€!~}!€}!€~}€!~}!€}!€}!€}€!}!€}€!~}!€~~}€!~}!€~}!€}€!~}!€}€!}€!}€!}€!~}!€}!€~~~~~}!€}!€~~~}€!~}!€}!€}!€}€!}€!~}€!}€!~}!€|!!}!€}!€}!€|!!}€!|!!|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!},‚!|!!|!!},‚!{!-|!!|!!|!!},‚!{!-{!-}!‚,|!!},‚!},‚!}!‚,|!!|!!|!!},‚!|!!|!!}!‚,~ƒ,|!!|!!|!!|!!|!!},‚!}!‚,|!!|!!}!‚,|!!},‚!|!!}!€z)„!|!!|!!|!!|!!}!€|!!}€!}€!}!€|!!|!!~|!!|!!}!€|!!{!†!|!!}€!|!!}€!}€!|!!}€!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{!-|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!|!!{-!|!!{-€{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€}!€}€!}!€|!!}€!}€!}!€}!€}!€}€!}!€~}!€}€!~}€!}€!}€!~|!!}€!}!€}!€}!€~}!€~}!€}€!}€!~~}€!~~~}€!~}!€~~~}€!~~~}€!~}!€~}!€}€!}€!~~}!€~}!€}€!~~~~}€!~}!€~}€!}€!~~}!€}!€~}!€|!!}€!}€!}€!}€!~}€!~,ƒ|!!}€!}€!~,ƒ|!!{!†!|!!{!†!}€!|!‰,~ƒ,~ƒ,}€!|!!~,ƒ}!€~ƒ,~|!!~}!€}!€}€!}€!~~~~~~~~~~~~~~~~~~~~}€!~}€!|!‡{!†!{!†!|!!|!!|!!z!„)t9~9rC|9q99t9~9q99y-~-t9-y-~-y-~-{!-{-!y-~-{!-|!!|!!|!!|!!|!!}€!|!!}€!~}!€}!€}!€}!€}!€|!!}!€}€!}€!}€!|!!}!€}!€}!€}!€}!€|!!}!€}!€|!!|!!|!!}€!}€!|!!}€!|!!|!!}€!|!!}!€|!!}€!|!!}€!|!!}!€|!!|!!}!€|!!}€!|!!|!!}!€|!!}€!|!!}!€}!€|!!|!!~|!!|!!}€!|!!}€!}€!}!€}!€}!€|!!|!!}!€|!!}€!}€!|!!}€!|!!}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!}€!}!€}!€|!!}!€}€!|!!}€!}€!}!€}!€|!!}!€}!€|!!}€!}!€}!€}!€|!!}€!|!!}!€}!€|!!}€!|!!~}€!}!€|!!}€!}€!}€!}!€}!€}!€}!€}!€~}!€}€!}€!}€!~~}€!~}€!~}€!~~}!€~~}!€}!€~}!€~}!€}!€}!€}€!~~}!€}!€}!€}!€~}!€}!€}!€~}!€~}€!~}€!~}!€}€!~~~~~~}!€}!€~~~}€!~}!€}!€}!€}!€|!!}€!}€!}€!}!€|!!|!!|!!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!{!-{!-}!‚,}!‚,|!!|!!},‚!|!!{!-|!!},‚!|!!},‚!|!!}!‚,|!!|!!|!!|!!}!‚,|!!|!!},‚!|!!|!!|!!},‚!|!!},‚!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!|!!|!!}€!|!!z)„!}!€}!€|!!}!€|!!}€!|!!|!!|!!}€!}€!|!!|!!|!!|!!|!!|!!z)…{-!z!„)|!!|!!|!!{-!|!!|!!|!!{-!{!-z!„)|!!{-!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!}!€|!!}€!}!€|!!}!€}!€}!€}€!}€!~|!!}€!}€!}€!|!!}€!}€!}€!}€!|!!}€!}€!~}€!}€!}€!}€!}€!}€!~~~}€!~~}€!~~~~}!€}!€~}!€~}€!}€!}€!~|!!}€!~}€!~}!€|!!~}!€}€!}€!}€!~}!€}€!~}€!~}!€}!€~}!€}!€}!€~}!€}!€}!€}€!~|!!}€!~ƒ,~|!!~|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!~ƒ,}€!|!!~~,ƒ}!€}!€}€!~}€!}€!~~~~~~~~~~~~~~~~~~~{!†!}€!}€!|!!}€!{!†!|!!z)„!z)„!r9|Ct9~9t9~9t9~9v-~9v9~-y-~-y-~-y-~-{-!y-~-|!!{-!|!!|!!|!!}!€}!€|!!}€!|!!}€!}€!}€!}€!}!€~}!€|!!}!€}!€|!!}€!}!€}!€|!!|!!|!!}€!|!!}€!|!!~}!€|!!|!!}!€|!!}€!}!€|!!}!€|!!|!!}€!}€!|!!}€!|!!}!€|!!|!!|!!|!!}€!}€!|!!}!€|!!}€!}€!|!!}!€|!!|!!}!€|!!}€!}€!}!€|!!}€!|!!|!!}€!}€!}€!}€!}!€}!€|!!|!!}€!}!€}€!}!€|!!}€!~ƒ,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}!€|!!}!€|!!}€!}!€}!€|!!}€!|!!}€!~|!!~}!€|!!}!€|!!}€!}€!|!!}€!}!€}!€|!!|!!}€!~|!!}!€}!€|!!}€!}€!}€!~|!!}!€}!€}!€}€!}€!~~}€!~}!€}€!}€!}€!~}!€}!€}€!}€!~}!€}!€}!€}€!~}!€}!€}€!~}€!~~}!€}€!~}!€|!!~}!€~}!€}€!~~}!€}€!}€!~~}€!~~~}!€~}!€~}!€~}!€}!€~|!!}€!}€!}!€|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!{-!|!!}!‚,|!!|!!|!!|!!}!‚,|!!}!‚,}!‚,}!‚,|!!|!!},‚!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!z…)}!€}!€}!€|!!{!†!}!€}!€|!!}€!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!z!„)|!!{!-|!!|!!|!!|!!|!!|!!{-!{!-|!!{!-|!!|!!{!-|!!|!!{-!|!!{!-|!!{!-|!!{-!{!-}€!{-!|!!{-!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€|!!}€!}!€|!!}€!}€!}!€}!€}!€}!€|!!~~}!€}!€}€!}€!}€!~}€!~}!€}!€}!€|!!}€!~}!€~}!€}!€}!€}€!~}!€}!€~}€!~}!€~~}€!~~}!€}!€~~}!€~~|!!}€!}€!}€!~}!€}!€~}!€}€!}€!~~~~}!€~}€!~~~}€!}€!}€!~}€!~}!€}€!}€!|!!}€!}€!}!‚,}€!|!!|!!|!!}€!}!€|!!|!!|!!}!€},‚!|!!}!€|!!|!!}!€~,ƒ|!!}€!}€!}€!}!€}!€~~~~~~~~~~~~~~~~~~~~~~}!€}€!}€!{!†!|!!{!†!}!€z)„!t9~9t9~9t9~9v-~9v9~-t9-t9-y-~-y-~-y-~-{-!{-!|!!{!-|!!}!€|!!|!!}€!}!€|!!}€!}€!}!€}!€}€!}€!}€!}€!}€!}!€|!!}€!}€!|!!}€!}€!}€!|!!}€!}!€|!!|!!|!!}!€}!€|!!}!€|!!|!!}!€}!€|!!}€!|!!|!!}!€}!€}!€|!!}€!}!€|!!|!!}€!|!!}!€}!€}!€|!!|!!}!€|!!}€!}!€}!€|!!|!!}!€}!€|!!|!!}€!}€!|!!}€!|!!}!€|!!|!!}€!}€!}!€|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!}€!|!!|!!}!€}!€}!€}€!}!€}!€}!€}!€}!€|!!}!€}€!}€!~}!€|!!}!€}!€}!€}!€|!!}!€|!!}€!|!!|!!|!!}€!}!€}!€|!!}€!~|!!~~~}€!~~~}!€}!€}!€~~~~}!€}!€}€!~~}!€}!€}€!~}!€}€!}!€}€!~}!€}€!~}!€}!€}!€}!€~~}!€}€!}!€}!€}€!~~}€!~}!€}€!}€!~}!€~~~}!€~}!€}€!}!€}€!}€!}€!}!€}€!}!€|!!}€!|!!}€!|!!}!€|!!}€!|!!|!!|!!|!!|!!},‚!|!!|!!{-!|!!|!!},‚!|!!{-‚,|!!{-!},‚!{!-|!!{-!{!-|!!{-!},‚!|!!},‚!}€!|!!},‚!|!!}!‚,|!!|!!},‚!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!z)„!|!!|!!|!!|!!|!!|!!|!!{!†!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!z)„!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!}!€{-!|!!|!!{!-|!!{!-|!!{-!|!!|!!{!-|!!|!!{!-|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!}!€}!€}!€}!€}!€}!€}!€}!€}!€|!!}€!}€!}!€}!€}!€}!€}!€|!!}€!}!€}€!~}!€}!€}!€}€!}!€}!€}!€~~~~~~~~~~~~}!€~~}!€~~}€!~}!€}€!}€!~}!€~~~~~}€!~~~~~}!€~~}€!}!€~}!€}€!~~}!€}€!}!€}!€}!€|!!}€!}€!|!!~ƒ,~|!!}!€|!!}!€~,ƒ|!!|!!~ƒ,}!€},‚!{!†!|!!~ƒ,}!€{!†!|!!}€!}!€|!!}€!}€!~}!€}!€}!€~~~~~~~~~~~~~~~~~~~}!€}!€{!†!}!€|!!|!‡|!!|!!z!„)t9~9t9~9t9~9t9~9v-~9y-~-y-~-y-~-{!-{-!{-!{-!{-!|!!|!!|!!}!€}!€|!!}€!}!€}€!}€!}€!}!€}!€}!€}€!|!!}€!}!€}€!}€!|!!|!!|!!|!!|!!}€!|!!}!€}!€|!!}€!}€!|!!}€!|!!}€!}€!|!!|!!}!€|!!}€!|!!}€!|!!|!!|!!}€!}!€}!€}!€|!!}€!}€!|!!}!€|!!}€!}€!}!€}!€}!€|!!}€!}!€}!€|!!}€!}!€|!!}!€|!!}!€|!!}€!}!€}!€|!!}€!|!!}!€|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€{-€|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!~|!!}€!|!!|!!|!!}€!}€!}€!}€!}€!~|!!}€!}€!}!€~}!€}€!|!!}!€|!!~|!!}€!}!€|!!}€!}€!}€!}€!}€!}€!}€!}€!~}!€}!€}!€}!€}€!}€!}!€~}€!~~}!€|!!}€!~}!€}!€}€!}€!~}!€}!€}€!}€!~}€!}€!}€!~}!€}€!}€!}€!~}!€}!€}!€}€!~}!€~~}€!~}!€~}€!~~}!€~}€!~}!€}€!~}€!}!€}€!}!€~~~}!€}!€~|!!}€!|!!~|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!}!‚,}!‚,|!!|!!},‚!}!‚,|!!|!!~,ƒ}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!}!‚,|!!|!!},‚!|!!|!!},‚!{-€},‚!|!!z!„)|!!|!!|!!|!!{!†!}€!}€!|!!|!!|!!}!€|!!{!†!|!!z)„!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-€{-!|!!{!-|!!|!!z)„!{!-|!!z)„!{-!|!!{!-|!!|!!|!!|!!{-!|!!{!-|!!|!!|!!|!!{!-|!!{-!|!!|!!{-!|!!|!!{-!{-!|!!{-€|!!{-!|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!}€!|!!}!€}!€}!€}€!}!€}!€|!!}€!}€!~}€!}€!}€!~}!€|!!}€!}€!}!€}€!~}!€}€!~}€!~}€!~}€!~}!€~}!€~}!€}€!~~}€!~}!€}€!~}!€}€!~}!€~}!€}€!}€!~}!€}€!}!€~}€!}€!}€!~~~|!!~~~}!€~}!€~}!€}€!}€!~}!€|!!}!€}€!}!€}!€}!€{!†!|!!~ƒ,}€!|!!|!!|!‰,}€!}!€|!!|!!|!!|!!|!!~ƒ,}€!|!!}!€|!!~}!€~,ƒ}!€~~~}!€~~~~~~~~~~~~~~~~~~}!€}€!}€!}€!}!€|!!{!†!|!!w)‰)r9|Ct9~9v9~-v9~-q99y-~-t9-y-~-y-~-y-~-{!-|!!{!-{!-|!!|!!|!!|!!|!!|!!~|!!}!€}€!}!€}€!}€!}!€}!€}!€}!€}!€|!!}!€|!!}€!}!€}!€|!!}!€}!€|!!|!!|!!}!€|!!|!!}€!|!!|!!|!!~|!!}€!|!!}€!|!!}!€|!!~|!!|!!|!!}!€|!!}!€|!!}€!|!!|!!|!!|!!}€!|!!}€!}!€}!€|!!|!!}€!}!€|!!|!!}€!}!€|!!}€!|!!}€!|!!}€!|!!}€!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€{-!|!!|!!|!!|!!|!!|!!|!!|!!{!-{€-|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€~|!!~}!€}!€|!!}!€}!€}!€}!€}!€|!!}€!|!!~|!!}€!|!!}!€|!!}€!}€!}€!|!!~}!€}!€}!€}!€}!€}!€}!€}€!~~}!€~}€!}€!~}€!~}!€~~}€!}€!~}!€}!€}!€}!€}!€}€!~}€!|!!}€!~~}!€}!€}!€~}€!}€!~}€!~}!€~}!€}€!~}!€}!€}€!~~}!€}!€~~~~~~}!€}€!~~|!!|!!}!€|!!}€!|!!}!€}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!}!‚,}!‚,|!!~,…,{!-|!!|!!|!!},‚!|!!}!‚,|!!},‚!}!‚,|!!},‚!},‚!|!!},‚!},‚!|!!}!‚,|!!}!‚,|!!|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!z)„!|!!{!†!|!!|!!|!!z)„!|!!z)…|!!z)„!|!!|!!|!!|!!|!!z!„)|!!z!„)|!!|!!z)„!|!!|!!|!!z!„)|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!{-!{!-{!-|!!{-!|!!{-!{!-z)„!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!|!!|!!{!-|!!|!!|!!|!!{€-|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€|!!~}!€|!!}€!~|!!}€!}!€}!€}!€~}!€}!€}!€|!!~}!€}!€}!€~}!€}€!}€!~}!€}!€}€!}€!~}€!~~~~~~~}!€~~}€!~~}!€}€!~}!€~}!€}€!~}€!}€!}€!~}!€}€!~}€!}€!~}!€~}!€}!€}!€~}€!}€!~}€!}€!~}!€}!€}!€~}!€|!!~}€!}!€}!€|!!}€!|!!|!!}€!|!!}€!|!!|!!|!!}!‚,}!€~,ƒ|!!}!€|!!|!!|!!}€!~ƒ,}€!~ƒ,~}!€~}€!~}!€~~~~~~~~~~~~~~~~~~~~}!€|!‡}€!{!†!}€!{!†!|!!|!!t9~9t9~9t9~9v-~9y-~-t9-y-~-y-~-{!-{-!y-~-{!-|!!|!!|!!|!!|!!}€!}€!~|!!}€!}€!}!€|!!|!!}€!}€!}!€|!!}€!}!€}!€|!!}!€|!!}€!|!!|!!}€!|!!}€!}!€}!€|!!}!€|!!}!€|!!}€!}!€|!!}€!}€!}€!}€!}€!}€!}€!|!!}!€|!!}€!}€!}!€|!!|!!}!€|!!}€!}!€}!€|!!}€!|!!|!!}€!|!!}€!|!!}€!}!€}!€|!!}€!}€!|!!~|!!}€!}!€}€!}€!}!€|!!}€!}!€}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}!€|!!}!€}€!}!€~}!€|!!}€!}€!}€!}!€}€!|!!}€!~}!€}!€|!!}€!|!!}€!}€!}!€|!!}€!|!!}€!|!!}€!}€!}!€}!€}!€}!€|!!~}€!~~}!€~}€!}€!~}!€}€!}€!}€!}!€}!€}€!~}!€}€!~}€!~}!€}!€~~}!€}!€}€!~}€!}€!}!€~}!€~}!€}€!}€!}€!}!€}€!}€!~}€!}€!~~~}!€}!€~}€!~}!€}!€}€!}€!}!€~}€!~}!€}!€}!€|!!|!!}€!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-{!-{!-|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!}!‚,|!!|!!|!!|!!{-!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!z)„!|!!}!€|!!|!!z)…|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!z)„!|!!|!!|!!{!-|!!}!€z)„!|!!|!!z)„!{!-|!!z)„!|!!z)„!{-!|!!{-!|!!{-!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{!-}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}!€}!€}!€}!€}!€}€!}€!}€!}!€}!€}!€|!!}€!~}!€}€!}€!}€!}€!}€!}€!}€!}!€}!€}€!~}!€}!€}!€}€!~}!€~~~}€!~~}!€}!€}€!~~~}!€~}!€~}!€~}!€~}€!~}€!}!€|!!~~}!€}€!~~~~~~~}!€~}!€}€!~}€!}€!}!€}€!~|!!}!€|!!}€!|!!|!!}€!|!!|!!~ƒ,{!†!|!!|!!|!!z!„)~ƒ,}€!}!€~,ƒ~,ƒ}!€|!!|!!}!€|!!~}!‚,~}!€~}!€~~~~~~~~~~~~~~~~~~~~}€!}€!}€!~|!!|‡!|!!|!!w)‰)t9~9t9~9t9~9t9~9v-~9y-~-y-~-y-~-y-~-{!-{!-|!!|!!|!!|!!|!!}€!|!!}!€}!€|!!}€!}€!}€!}€!~|!!}€!~|!!}!€}!€}!€}!€|!!}€!|!!}!€}€!|!!}!€|!!}!€|!!}!€}!€}!€}!€}!€}!€|!!}!€|!!}€!}!€}!€|!!}!€|!!}€!|!!}€!|!!}€!}€!|!!}€!}!€}!€|!!}€!|!!}!€}!€|!!}€!}€!}€!}!€}!€|!!|!!}€!|!!|!!}!€|!!|!!}!€}!€|!!|!!}!€}!€}!€}!€|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!~}€!|!!}€!}€!}!€}€!}€!}€!~}!€}!€}€!|!!}€!}!€|!!}€!|!!}€!}!€|!!|!!|!!}!€}!€}€!}€!}€!~}!€}!€}€!}€!~}€!}€!~}!€}€!}!€~~}!€}€!}€!~}!€~}!€}!€}€!}€!}!€}!€}!€}!€}€!~}!€|!!}€!}€!~}!€~}!€}€!~}!€}€!~}€!~~~}!€~}€!~~~~~~}€!~~}€!}€!}€!~~~|!!}€!}€!}!€~}!€|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!}!‚,|!!},‚!{!-},‚!}!‚,|!!},‚!|!!|!!},‚!|!!}!‚,}!‚,|!!}!‚,|!!|!!|!!},‚!|!!|!!},‚!|!!},‚!|!!},‚!|!!|!!},‚!{!-{!-|!!|!!|!!|!!|!!|!!{-!|!!|!!z!„)|!!|!!|!!|!!z)„!|!!|!!|!!|!!|!!|!!|!!|!!z)„!{!-|!!|!!|!!{!-|!!|!!z)„!z!„)|!!|!!|!!{-!|!!{-!{-!|!!|!!{-!|!!{-!{-!{!-z)„!|!!{!-|!!{-!|!!{!-z)„!{-!{!-|!!{-!{-!{!-|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€|!!|!!}!€}€!}€!}!€|!!}€!}!€}!€}!€}!€}!€}€!}€!}€!}€!|!!~|!!~|!!~}€!~~}€!~}!€~}€!~~~~~~}€!~~~~~~}€!~}€!}€!~}!€~~}!€~}!€|!!}€!~~~}€!}€!}€!~}€!}€!}€!}€!~}!€}!€~}!€~}€!~}!€~|!!}!€}€!}!€|!!}€!}!€|!!}€!|!!|!!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!{!†!|!!}!‚,}!€}!€~ƒ,}€!}!€}!€~ƒ,}€!|!!}€!~}!€}!€~~~~~~~~~~~~~~~~~~}€!~{!†!}!€|!!|!!}€!z)„!t9~9t9~9v9~-v-~9t9-t9-y-~-y-~-{-!{-!{-!{!-{!-|!!|!!|!!|!!}€!|!!}€!|!!|!!|!!}!€|!!}!€}!€}!€|!!~}€!|!!}€!|!!}!€|!!}!€|!!}!€|!!}!€}!€|!!|!!}€!|!!|!!|!!|!!|!!}!€|!!}€!}!€|!!|!!}!€}!€}!€|!!}!€|!!|!!|!!}€!}€!}!€|!!|!!}!€|!!}!€|!!|!!|!!}!€|!!}!€|!!|!!}€!}€!|!!}€!}€!|!!~}!€}€!}€!}€!}€!}€!}!€|!!}€!}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}!€}€!}!€|!!}€!}!€}!€}!€}!€}!€}€!}€!}€!}!€|!!}€!|!!}€!}€!}!€}!€}!€}!€}!€|!!}!€}!€}!€|!!}€!}€!}!€}!€}€!~}!€}€!~~~|!!~~}!€}€!}€!}!€}!€~}!€}!€~}!€}!€}!€}€!}€!}€!~}!€~}!€}!€}€!~}!€|!!}€!~}!€}€!}€!}€!~}!€|!!}€!~}€!}€!}€!~}€!}€!~}€!}€!~~}!€}!€|!!}€!~}!€}!€|!!|!!}€!}€!|!!}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!{-!|!!|!!{!-|!!},‚!{-!}!‚,{-!{!-|!!|!!|!!}!‚,|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!z)„!{!-|!!|!!|!!|!!}!‚,{!-|!!{-!z)„!x)„-|!!z!„)|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!z)„!|!!z!„)|!!{-€|!!z)„!|!!z!„)|!!|!!|!!|!!|!!z!„)|!!z)„!|!!|!!z!„)|!!{-!z)„!|!!{-!|!!{!-z!„)|!!{-!{!-{!-|!!{-!{-!|!!|!!{-!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!{!-}€!{-€|!!{!-|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€}€!}€!|!!|!!}€!}€!~}!€}!€~}!€}€!}!€}!€}€!}€!}!€~|!!~}!€~|!!~|!!}€!|!!~}!€}!€~~}!€~~~~~~~~~~~~}€!~~}!€}€!}€!|!!}€!}€!}€!~~}€!~}€!~~~}!€~}!€~~~~~}€!}€!}€!~~}!€}!€}€!}€!}€!}€!~|!!}€!}!€|!!}€!|!‰,}€!},‚!|!!}!‚,{!†!}!‚,}€!|!!|!‰,~ƒ,|!!|!!}€!|!!}!‚,}€!}!€}!€}!€}€!~~}€!~~~~~~~~~~~~~~~~~~~~~}€!~}!€{!†!|!!{!†!z)„!z!„)t9~9t9~9t9~9v9~-q99t-9y-~-y-~-{-!y-~-{-!|!!{-!|!!|!!|!!|!!}€!}!€|!!}€!}€!}€!}€!}!€}!€}!€}!€}!€|!!}!€|!!}!€}!€|!!|!!}€!|!!|!!|!!}!€|!!~}!€|!!}!€}€!}!€|!!}€!}€!}€!|!!}€!}!€}!€}€!|!!}€!}!€|!!|!!}€!}€!|!!}!€|!!|!!}!€|!!}!€|!!|!!}€!~|!!}€!}!€|!!}€!|!!|!!}€!|!!}€!}€!|!!|!!|!!|!!|!!}€!}!€|!!}!€|!!}!€|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!|!!}€!}!€}€!}!€}€!~}!€}€!~}!€}!€}!€|!!~}!€}!€}!€}!€}€!|!!}!€|!!}€!}!€}€!}!€}€!}€!}!€|!!}€!}€!}€!~}!€}!€}€!}€!~~}!€}!€~}€!}€!}€!~}!€}€!~}!€}!€}!€}€!}€!}€!}!€}!€~~}!€}€!}€!~}€!~}!€~~}€!}€!~}!€}€!~}€!~~}€!}€!}!€~~}!€}!€~~}€!~}€!}!€}€!}€!~}!€}!€}€!}€!}€!}€!}!€|!!~|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!{!-|!!}!‚,|!!}!‚,|!!},‚!}!‚,|!!|!!|!!},‚!|!!|!!|!!},‚!|!!|!!}!‚,|!!|!!|!!|!!{-!{-!}!‚,|!!|!!},‚!}!‚,|!!|!!z!„)|!!|!!|!!|!!z!„)|!!|!!|!!|!!|!!z)„!|!!z)„!|!!z!„)|!!|!!z)„!z!„)|!!{!-|!!|!!z)„!|!!{-!z)„!{-!|!!|!!x-„)|!!{-!|!!|!!|!!{!-|!!{!-|!!{!-{!-{!-|!!z)„!{!-|!!|!!|!!{-!|!!{!-|!!{!-|!!{-!{-!{!-{!-|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€}!€|!!|!!|!!}€!}€!}€!}!€|!!}€!}€!|!!}!€}!€}!€|!!}€!}€!}€!|!!~}!€}!€}!€~}€!~~~~~~}€!~~~~~~~~}!€}€!~}!€}€!}€!~~}!€~~}!€~}€!~~}!€}€!~}€!~~}!€}€!~|!!~}€!~}€!~}!€}!€}!€~}!€}!€}!€~}!€}!€|!!~|!!}!€}€!|!!{!†!|!!|!!|!!z!Œ!|!!|!!|!!|!!z)„!|!!|!!|!!|!!{!†!|!!}!€}!€}€!~},‚!~}€!~}€!~}€!~~~~~~~~~~~~~~~~~~~~~}€!|!‡}!€}€!|!!|!!|!!t9~9v-~9v-~9v-~9y-~-y-~-t9-y-~-{!-{-!{!-|!!|!!|!!|!!}!€|!!}!€|!!}€!}€!|!!}!€|!!}€!|!!}!€|!!}€!}!€}€!}!€|!!|!!}€!|!!}!€|!!}€!}!€|!!}€!|!!|!!}!€|!!}!€|!!}!€|!!}!€}!€}!€}!€}!€|!!|!!}!€}!€|!!}€!|!!}€!}€!~|!!}!€|!!}€!}!€|!!}€!}€!|!!|!!|!!}€!|!!}€!}!€~}!€|!!}!€}!€|!!}€!}€!}€!}€!}!€|!!}€!}€!}€!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!}€!|!!~|!!~|!!}€!}€!~}!€|!!|!!}!€}!€|!!|!!~}€!}€!|!!|!!}!€|!!}€!}€!}!€}!€}€!}!€}!€}!€}!€~}!€~}!€}!€~}€!}€!}€!~}!€}!€}€!~}€!~}!€~}!€}€!~~}!€|!!}€!}€!}!€}!€}!€}!€}!€}!€}!€}!€}!€~}€!~}€!}€!~|!!}€!~~}€!}€!~}!€}€!}€!}€!~}€!~}€!~~}€!~}€!|!!}€!}!€}!€}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!},‚!}!‚,{-!|!!},‚!|!!}!‚,|!!},‚!|!!},‚!}!‚,{!-|!!|!!}!‚,|!!|!!|!!},‚!|!!|!!|!!},‚!|!!{!-z!„)|!!|!!{!-|!!|!!},‚!{!-|!!{-!|!!{-!z!„)|!!|!!z!„)z!„)|!!z)„!{!-|!!|!!|!!z)„!|!!z!„)|!!|!!{!-|!!z)„!z)„!x)„-|!!z)„!|!!|!!|!!{!-|!!{!-|!!|!!{-!{!-{!-|!!{-!z)„!z)„!{-!|!!z)„!{-!{-!{-!{!-|!!{!-|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!{-!|!!{!-{!-|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!}!€|!!}€!}€!}!€}!€}!€}!€}€!}€!~}€!}!€}!€}!€}!€~}€!}€!}€!}€!~}!€|!!~}!€}!€}€!}!€}!€~~~~~~~~}€!~~~}€!~~~}€!~~}!€}€!~}€!~}€!~~}!€}!€}!€}!€~~~~}!€}€!}!€}€!~}€!~~|!!~~~|!!}€!}!€}!€}€!|!!}€!~ƒ,}!€}!€|!!}!€|!!|!!|!!|!!|!!}!‚,}€!|!!|!!|!!|!!}€!},‚!|!!}!‚,}€!~,ƒ|!!~~,ƒ~,ƒ|!!}€!~~}€!~}!€~~~~~~~~~~~~~~~~~~~}!€{!†!}!€}!€}!€w)‰)t9~9t9~9t9~9v9~-v9~-t9-y-~-y-~-y-~-{!-{-!{-!{-!|!!|!!|!!}!€|!!|!!}€!|!!}!€|!!}€!}!€}!€}€!}€!}€!}€!}€!|!!}!€|!!}!€}!€|!!}€!|!!}€!}€!}€!}!€}!€|!!}!€|!!}!€|!!}€!}€!}€!}€!}!€|!!}!€}€!}€!}!€}!€}!€}!€|!!}!€|!!}!€}€!}€!}!€|!!}€!}€!~ƒ,}€!~}!€|!!}!€}!€|!!|!!|!!}!€|!!|!!~ƒ,~ƒ,}€!|!!}!€|!!}!€}!€|!!|!!}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€}!€|!!}€!~|!!}€!}€!~}!€}!€}€!~}!€}€!}€!}€!}!€}€!|!!|!!|!!}!€}!€}!€}!€|!!}!€}!€}€!}!€}€!}€!~}!€|!!~|!!~}!€}!€}€!~}!€}€!~}€!~}!€}€!}€!}€!}€!}€!}€!~}!€}!€~}!€~}!€}€!}€!}€!}€!~~~~}!€}!€~}!€~}€!~~}!€}!€}!€~}!€}€!}€!~~}!€}!€|!!}!€~|!!}€!}€!}€!}!€}!€}€!}€!|!!}€!}€!}€!}€!}!€|!!|!!|!!|!!},‚!|!!|!!},‚!|!!|!!|!!},‚!|!!{!-|!!|!!},‚!{!-{!-},‚!{-!{!-|!!|!!|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!}!‚,}!‚,|!!|!!x-„)|!!|!!},‚!{!-|!!x-„)|!!{-!|!!|!!z)„!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!{-!|!!{!-|!!|!!|!!|!!|!!z)„!|!!|!!{!-|!!z)„!{-!{-!z)„!z)„!{-!z)„!z)„!{!-z)„!|!!x-„)|!!{-€{!-|!!{!-|!!{!-|!!|!!{-!y-~-|!!{-!|!!{-!|!!|!!{-!{-!{!-|!!|!!{-!{-!|!!}!€{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€}€!}€!}!€}!€|!!}!€}!€}!€}!€|!!}€!}€!}€!|!!}!€|!!~}€!|!!~}!€}!€}€!}!€}!€~~}€!}€!~~~~~~~~~~~~}!€}!€}!€}€!~}€!~|!!~}!€~~}!€}!€}!€~~}!€}!€}€!}€!~}!€~~}€!~~}!€~~}!€}!€}€!~}€!}€!}!€}!€}€!}€!}!€|!!}!€|!!|!!}€!|!!|!!{!†!|!!z)„!|!!|!!z)„!{!†!},‚!}!€|!!}!€~,ƒ}!€~,ƒ}!€}!€}!€|!!~}!€}!€~~~~~~~~~~~~~~~~~~~~~}!€}€!}€!}€!|!‡{!†!{!†!t9~9v9~-v9~-t9~9y-~-v9~-y-~-y-~-y-~-{!-{!-|!!{!-|!!|!!|!!|!!}!€}!€|!!}!€|!!|!!}€!|!!}!€}!€}!€}!€|!!}!€}!€|!!}!€|!!}€!}!€}€!|!!|!!|!!|!!}€!|!!}!€|!!}!€}€!}!€|!!}!€|!!}!€}!€}€!}€!}€!}€!}€!|!!}!€|!!}€!}!€|!!}!€|!!}!€|!!}!€|!!|!!}!€|!!},‚!|!!}€!}€!|!!~}!€}!€|!!}!€}!€|!!}€!}€!}€!|!!}€!}€!|!!}€!}€!}!€|!!|!!}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!|!!}€!|!!}!€|!!|!!}!€}!€}!€}!€}!€~}!€}€!~}!€}!€|!!}!€}!€|!!}!€|!!}!€}!€}!€|!!}€!}!€|!!}€!}€!}€!}€!}!€}€!}€!}€!~~}!€}!€~~}€!~~}!€}€!~}!€}!€}€!}€!~}!€}€!~}€!~}!€}€!}€!~~}€!}€!}€!~}!€~}!€}!€}€!}€!~~}!€~}!€}!€}€!~}€!}€!~}!€~}!€~}!€}€!~~}!€}€!~}€!}€!~}!€}€!}€!}!€}!€|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!},‚!}!‚,|!!|!!},‚!}!‚,|!!{!-|!!|!!},‚!{-!|!!|!!}!‚,|!!|!!{-!{-!|!!{-!z!„)|!!{-!{)‡,{!-|!!}!‚,z!„)z!„)|!!{!-{!-|!!z!„)|!!z!„)|!!{-!z!„)|!!z!„)|!!{!-|!!x)„-|!!{-€{!-z!„){!-|!!z)„!{-€|!!z)„!{!-z!„)|!!{!-|!!z)„!{!-|!!|!!{-!{!-{-!{-!{-!{!-{!-{!-{!-|!!|!!{-!z)„!x)„-|!!{-!{!-|!!{!-|!!{!-|!!|!!|!!{-!{!-|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!}€!}!€|!!~~}!€}!€}€!}€!~}!€|!!~}€!}€!}€!}€!~~|!!~}€!}!€~~~~~~}€!~~~~~}!€~~}!€~~~~~}!€}!€~~~}€!}€!}€!~~~}€!}€!~~~}!€}€!~~}!€~~}€!}€!}€!~|!!~}€!~}€!}€!}€!}€!}€!|!!}!€}€!}!€|!!~,ƒ|!!~,ƒ|!!}!‚,|!!|!!|!!|!!}!‚,|!!|!!|!!}!‚,{!†!|!!}€!|!!}!€}!‚,}€!}€!}€!~|!!}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~}€!~|!!{!†!}!€t9~9t9~9v9~-v9~-t9-y-~-y-~-{-!y-~-y-~-{!-{!-|!!|!!|!!|!!|!!}€!|!!~|!!}€!}!€|!!}€!}€!}€!}!€|!!~|!!}!€}!€|!!|!!}!€|!!}!€}!€}!€|!!}€!|!!}!€|!!~|!!~|!!}€!}€!}!€}€!|!!}!€|!!}!€}!€|!!}€!}€!}!€|!!}!€}€!|!!|!!}€!}!€|!!}€!}€!}!€|!!~}!€|!!|!!}€!|!!|!!}!€|!!}€!}!€}!€}!€|!!}!€|!!}€!|!!}€!|!!~|!!|!!~|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€}€!}€!}!€}!€}€!}!€~}!€|!!}€!}€!}€!~|!!~}€!}€!}!€|!!|!!}€!}!€|!!}€!}!€|!!}!€|!!}€!}€!~}!€|!!}€!}€!}€!}€!}€!~}€!~}!€}!€}€!~}€!~~}€!}!€}!€}!€}!€}!€}!€}!€}€!}€!}€!}€!~}€!}€!~}!€~}!€}!€~}€!}€!}€!}€!}€!~}!€}€!~~}€!~}!€~~}!€}!€}€!~}!€~|!!~}!€}€!}!€}!€}!€~}!€}!€|!!}€!}!€|!!}€!|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!}!‚,|!!|!!{!-}!‚,}!‚,|!!{-!},‚!},‚!},‚!{-!},‚!{!-},‚!|!!|!!|!!}!‚,|!!|!!|!!}!‚,|!!|!!|!!{-!}!‚,|!!z)„!},‚!}!‚,{!-},‚!},‚!|!!{!-{!-z)„!{!-|!!{-!z!„)|!!z)„!|!!{-!|!!x-„){!-|!!z!„)|!!{-!z!„){!-|!!w)‰){!-|!!{!-|!!}!‚,|!!{!-z)„!{-!z)„!{-!{€-|!!{-!|!!{-!{!-z)„!z)„!{-!|!!{-!{!-{!-z!„)|!!{-!{-!{!-|!!{!-|!!{-!{!-|!!|!!{-!{!-|!!{-!{-!{-!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!|!!}€!|!!}€!}€!}!€|!!}!€|!!|!!~|!!}!€}!€|!!~}!€|!!}€!}€!}€!}€!}€!}€!}!€}€!~}!€}€!~}!€~~~~~~~~~~}€!~}€!}€!~}€!~}€!~}€!}€!}€!}€!~}€!}€!~}!€}!€}!€~~}!€}€!~}!€}!€}!€}!€}!€}!€}!€}€!~}!€~}€!}€!~|!!~}!€}!€~,ƒ}!€|!!|!!{!†!|!!}€!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!~,ƒ|!!~ƒ,}€!~}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~}€!}€!|!‡|!!}€!~z!„)v-~9v9~-t9~9v-~9y-~-t9-y-~-y-~-{-!|!!{-!|!!{-!|!!|!!|!!|!!|!!}€!}!€|!!}€!}€!}!€}!€}!€}!€}€!}€!|!!}!€}€!}€!|!!}€!}€!}€!}€!|!!|!!}!€|!!}€!}!€|!!}€!|!!|!!}!€}!€}!€}€!}!€}!€}€!}€!|!!}€!}!€}!€}€!}€!|!!|!!}!€}€!|!!}€!|!!}€!|!!|!!}€!|!!|!!}!€}!€|!!}!€}!€}!€|!!}!€|!!}€!}!€|!!}!€|!!}!€|!!}€!}€!}€!~ƒ,}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}!€|!!}!€|!!}!€|!!}€!|!!}!€~}!€}!€}€!}!€}€!}€!}€!}!€}!€|!!}€!|!!}!€}!€}€!}€!}€!|!!}€!~|!!}€!}€!}€!}€!}€!}€!}€!~}€!~~}€!}€!~}!€}€!}€!~}€!~}!€}!€}!€|!!~|!!}€!~}!€~}!€~}!€~}!€}€!}!€}!€}!€}€!~}!€}!€~}€!~~~~}€!}€!~~}€!}!€}!€}!€}€!}€!~~}€!~}!€}€!}€!~}!€|!!~|!!}€!}€!|!!|!!}€!|!!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!}!‚,|!!|!!|!!}!‚,|!!{!-|!!{!-|!!|!!|!!|!!},‚!|!!},‚!|!!{!-|!!|!!|!!{!-{!-|!!|!!{-!{!-|!!{!-|!!|!!|!!}!‚,|!!},‚!|!!z!„)|!!z!„)|!!{-!z!„)|!!{-!{!†!z)„!|!!z!„){!-|!!},‚!z)„!z)„!z!„){!-|!!z!„){!-{!-z)„!{-!{-!z)„!{!-{!-|!!z)„!{-!},‚!z)„!{-!z)„!z)„!{!-|!!x)„-z!„)z!„){-!{-!{!-z!„)|!!{!-z!„){-!z!„){!-z!„){-!{-!{-!|!!{-!{-!|!!|!!{-!{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}!€|!!|!!}€!}!€}!€}!€}€!~|!!~}!€}!€}€!}€!}!€}€!}€!}€!}!€}!€}!€}€!~}!€}!€~~~~}€!~~~~~~~~~~}€!~~}€!~}€!~}!€}!€~~~}!€}!€~}€!~~~}!€}€!~}!€}€!~~~~}!€~~}!€}€!~}!€~~}!€}!€}!€}!€}!€}€!~}!€}!€|!!}€!|!!}!€|!!z!„)|!!}!‚,|!!|!!z!„)|!!|!!|!!|!!|!!|!!{!†!|!!}€!~,ƒ|!!~ƒ,}€!~ƒ,~|!!~}!€}!€~~~~~~~~~~~~~~~~~~~~~}!€|‡!}!€z!„)~t9~9t9~9v9~-v9~-t9-y-~-y-~-y-~-{!-y-~-{-!{-!|!!|!!|!!|!!}€!}€!}!€|!!}!€|!!|!!}€!}!€|!!}€!|!!}€!}€!}€!}!€|!!|!!}!€|!!}!€}!€|!!}€!}€!}€!|!!}€!}!€|!!}€!|!!}€!}€!}€!}€!~}!€}!€|!!}€!~}!€}!€|!!|!!}€!~|!!|!!}!€}!€|!!|!!}!€}!€|!!|!!~|!!|!!}!€|!!}€!|!!|!!}€!|!!|!!|!!}€!}€!|!!}€!|!!}€!|!!|!!}€!}€!}!€|!!~|!!|!!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€|!!}€!|!!}€!}€!|!!}!€}!€}!€}€!}!€~}€!}€!}€!~}!€}!€}!€}€!}!€|!!|!!}!€}!€|!!~|!!}€!~|!!}€!}€!~}!€}!€}€!}€!~}!€}!€}€!~}!€}!€}!€}!€}€!~}!€}!€~}!€~}!€}€!}€!~}€!~|!!~}!€}€!~}€!}€!~}!€~}€!}!€}!€}€!}€!}€!~}!€}!€}!€}!€}€!~}€!~~}!€}!€}!€}€!~}€!}€!}€!}€!~}!€}!€}€!}!€}!€}!€}!€|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!~ƒ,|!!|!!|!!|!!|!!{!-|!!|!!|!!},‚!{-!}!‚,|!!{,‚-|!!},‚!{,‚-}!‚,|!!|!!},‚!|!!},‚!|!!}!‚,|!!{-!|!!z)„!z!„){!-|!!},‚!{!-z)„!{!-}!‚,{!-{!-|!!{!-z)„!{-!{-!},‚!|!!z)„!{-!|!!z)„!{-!z!„){!-|!!z)„!{!-|!!{!-{!-|!!z)„!{-!{-!{-!z!„){!-z!„){!-|!!{-!z)„!{-!y-~-z!„){!-z!„)}!‚,|!!{-!{-!{-!{-!{!-|!!{-!z)„!{-!{-!{!-z)„!{-!{!-|!!{-!{-!z)„!{!-{!-{!-|!!|!!{-!x-„)|!!{-!{-!{-!{!-{!-|!!|!!{-!|!!|!!|!!}€!}!€|!!|!!|!!}!€}!€}!€|!!}€!}€!}€!}!€|!!}!€|!!~}!€~}!€|!!}!€}!€}!€}!€}!€~|!!}€!}!€}!€}€!}€!}!€~}€!~~~~~~~~~~}!€~~~}€!~~}!€~}!€~}€!~}!€}!€}€!}!€}!€}€!~}!€}€!~}€!}€!~}€!}€!~}!€~|!!}€!~}!€}!€~}!€}!€}€!~}€!}€!}€!}!€|!!}!€~,ƒ|!!}€!}€!|!!z)„!|!!|!!|!!|!!|!!|!!|!!~ƒ,|!!},‚!|!!|!!|!!~,ƒ~,ƒ}€!}!€|!!~~|!!~}€!~~~~~~~~~~~~~~~~~~~~~~}€!}€!}€!}€!~|‡!t9~9v9~-v9~-v9~-t-9t-9y-~-y-~-{-!{-!{-!{!-{€-|!!|!!|!!|!!|!!|!!}!€|!!}€!~|!!}€!}!€}!€|!!}!€}€!}!€|!!|!!}€!|!!}!€|!!}!€|!!}€!|!!}!€}!€|!!}€!}!€}!€~}!€|!!}€!}€!}€!}€!}€!}€!}!€}!€}!€}!€}!€}!€|!!|!!~}!€|!!|!!}€!}!€|!!}!€}!€|!!}!€}!€}€!|!!}€!|!!}€!}!€|!!~|!!}€!|!!}!€|!!}!€}!€}!€|!!}€!|!!}!€|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!}!€|!!|!!}€!}€!}!€}!€}!€}€!}€!}€!~}€!}€!}€!}€!}€!}€!}!€|!!}€!}!€|!!|!!}€!|!!}€!}€!}€!~}!€}€!}€!}!€}!€}€!}€!~}!€}!€~|!!}€!~}!€}!€}€!}€!~}€!}!€~}!€}€!~}!€|!!~|!!}€!}€!~}!€}!€}!€}€!}€!}!€}!€~}€!}€!~}€!~}!€~~|!!}€!}€!}€!}€!~}!€}€!~}!€}!€}€!}!€}!€}!€}!€}!€}!€|!!}!€}€!}!€}!€|!!}!€|!!|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!},‚!|!!|!!{-!{!-|!!},‚!|!!|!!|!!{!-}!‚,|!!{-!|!!},‚!},‚!}!‚,z!„){-!}!‚,}!‚,|!!},‚!|!!},‚!}!‚,z!„){-!},‚!x)„-{!-{!-|!!},‚!{!-|!!x-„)|!!z)„!},‚!{!-z!„){-!z!„){!-{!-|!!z)„!{-!z)„!x)„-{!-z!„)z!„)x-„)},‚!{-!x)„-|!!{-‚,{-!{-!x-„)z!„){!-z!„){!-|!!{-!z)„!z)„!{!-}!‚,{-!x)„-z!„){!-|!!{-!{-!{!-|!!z)„!{!-|!!{-!{!-|!!|!!|!!{-!{-!|!!{!-|!!{-!|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!|!!}€!|!!}€!}€!~|!!}€!|!!}€!}€!|!!~}!€}!€}€!}€!|!!}€!}€!}€!~}!€}!€}!€}!€}!€~~~~~~~~~~~~}!€}!€~}!€~~}€!~~}!€}!€}€!~~~~}€!~}!€~}€!~}!€}€!~}!€~~}€!}€!~}€!~}!€~}!€}!€}!€~|!!}€!~}!€}!€|!!~}!€{!†!~,ƒ|,‰!|!!|!!|!!|!!|!!},‚!}!‚,|!!|!!{-!{!-}€!}!‚,|!!|!!|!!}!‚,}€!}!€|!!~ƒ,~}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~z…)~|!!|!!v9~-t9~9v-~9v-~9t-9y-~-y-~-y-~-y-~-{!-{!-{!-{-!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!~|!!}€!}!€~|!!|!!~|!!}!€|!!}€!|!!}!€|!!}€!}!€|!!}!€|!!}€!}!€|!!}!€|!!|!!}€!}€!}€!|!!}€!}!€}!€}€!}!€|!!}€!}€!}!€}€!}!€|!!}!€}!€|!!}!€|!!}€!}€!|!!}!€|!!|!!|!!}!€|!!}!€}!€|!!}€!|!!|!!}€!}€!}€!}!€|!!|!!}€!}€!}€!}€!~|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!|!!|!!|!!}!€|!!}!€}!€}!€}€!}!€}€!}€!}!€}€!}€!~}!€}€!}€!~}!€}!€}!€}!€}!€}!€|!!~}!€|!!}€!}€!~}!€}!€}!€}!€|!!}€!}€!}€!~}€!}€!~}!€}!€}!€}!€~~~}!€}!€}!€~}!€}€!}€!}€!}€!}€!}€!}!€~}!€}!€~|!!}€!}€!}€!~}!€~}!€|!!}!€}!€~}!€}!€~}!€}!€|!!~~~}!€}!€}€!}€!~}€!}€!~}!€}€!~}!€}!€}€!}€!}€!}€!}!€}!€|!!}€!}€!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!}!‚,{-!}!‚,|!!},‚!|!!},‚!{-!}!‚,|!!{-!}!‚,|!!{!-z)„!},‚!}!‚,{!-|!!{!-|!!|!!{-!{-!{!-}!‚,|!!{-!{!-}!‚,{!-z)„!{!-|!!},‚!x-„)|!!{-!x)„-z!„){-!z)„!{,‡){-!z)„!z)„!x-„){!-z)„!x)„-|!!{-!x)„-{!-{-!{-‚,{!-},‚!x-„){-!x)„-z!„)},‚!{-!{-!{!-{!-{!-z)„!{-!x-„)},‚!{-!z!„)|!!{-!{-!{!-{-!{!-z!„){-!{-!{-!{!-|!!{-!{!-{!-{!-|!!{-!{!-{!-|!!{-!{!-{!-{!-{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€|!!|!!}€!}€!~|!!}!€~}!€}€!}€!}€!}€!~}!€}€!~}!€}!€~}!€~~~~~~~~~~~~~}!€~~}!€~}€!}€!~}!€}€!~}€!~}€!}€!}!€}€!~}!€}€!}€!~}!€}€!~}!€~}!€}!€~}!€}!€~|!!~}!€}!€~}!€}!€}!€}!€}!€}!€|!!~|!!}€!|!!|!!|!!|!!|!!|!!}!‚,z)„!z!„)|!!}!‚,|!!z)„!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}€!}€!|‡!}!€~}!€~~~~~~~~~~~~~~~~~~~~~}€!~}!€{!†!}€!v9~-v9~-q99v-~9y-~-y-~-y-~-y-~-{!-|!!{-!|!!|!!|!!|!!|!!|!!}€!}€!|!!}!€|!!}€!|!!}€!}!€|!!}!€}!€}!€|!!}!€|!!|!!}€!}!€}!€}!€}!€|!!~|!!}!€}€!|!!}€!}!€}!€}!€}!€}!€}!€~|!!}€!~}!€}!€}!€}!€}!€|!!}!€}€!}€!|!!|!!}€!}€!}€!}!€|!!}€!|!!}€!}€!}!€|!!}!€}€!}!€}!€|!!}€!~ƒ,}€!|!!}€!}€!}!€|!!|!!|!!}€!|!!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!|!!}!€|!!|!!}!€|!!|!!|!!|!!}€!}€!|!!}€!}€!~|!!}€!~}!€}€!~}!€}€!|!!}!€}!€}€!|!!}!€|!!}!€|!!}€!}!€}!€|!!}!€}€!}€!}!€}€!}€!}!€~}!€}!€}€!~}!€}!€}€!}€!~}!€}€!}€!}€!}!€}€!}!€}!€}!€~}€!}!€|!!}€!}€!~}€!~}€!~}!€}!€~}!€~}€!}€!}€!}€!~~~~}€!~}!€~}€!~}!€}€!}€!~}!€}!€|!!~}!€~}!€}!€}!€}€!}€!}€!}!€|!!|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!‚,|!!},‚!{!-|!!|!!{!-|!!},‚!|!!{-!}!‚,|!!{-‚,|!!}!‚,|!!{-!},‚!|!!}!‚,|!!|!!|!!|!!|!!{!-|!!},‚!{-!z)„!{!-{-!}!‚,{-!{-!},‚!{-!},‚!}!‚,{-!x)„-z)„!{-!{)‡,{!-|!!{-!{!-{!-{!-}!‚,{-!{,‡){!-}!‚,{!-{-!x)„-}!‚,{-!x-„){!-x)„-{!-x)„-x)„-{!-z)„!y-~-x)„-x)„-{!-{-!{,‡)x)„-{!-z)„!{-!x-„)y-~-{-!y-~-{!-{!-{,‡)z!„){-!{-!{!-|!!x)„-|!!{!-|!!{-!{-!{!-{!-|!!{-!|!!{!-|!!{-!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}€!}!€|!!|!!}€!}!€}€!}€!}€!}!€}!€}€!}!€|!!~}!€}!€|!!}€!}€!}!€}!€~|!!~}!€~~~~~~}!€~~~~~~~~~~}!€~~~~}!€}!€~~}!€~}€!~}!€~}!€~}€!~}!€}€!~}!€}€!}€!}€!}€!~}!€~}!€}€!}€!}€!~}!€}€!|!!}€!}€!}€!}€!}€!}!€|!!}€!|!!|!!{!†!|!!|!!|!!|!!|!!|!!|!!|!!z!„)}!‚,|!!}!‚,|!!|!!}€!}!€~,ƒ~~~,ƒ}€!~}!€}!€~}!€~~~~~~~~~~~~~~~~~~~}€!}!€{!†!}€!~{!†!v-~9v9~-v9~-t-9y-~-y-~-{-!y-~-y-~-y-~-{!-|!!{-!|!!|!!|!!}€!|!!|!!|!!}€!}€!|!!}€!~}!€}!€}!€}!€|!!}!€|!!}€!|!!}!€}€!}€!}!€|!!}!€|!!|!!}€!|!!}€!}€!~|!!}€!}€!}!€|!!}€!}€!~|!!}€!~}!€}!€}!€|!!}€!}!€}!€|!!}€!}!€|!!|!!}!€}!€|!!}!€|!!}€!|!!}€!}€!|!!}€!|!!|!!}!€}!€}!€|!!}!€}!€}!€|!!~}€!}!€|!!~ƒ,}€!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}!€}!€|!!}€!}!€|!!|!!}€!~}!€}€!~}!€}€!~}!€}€!~}!€}€!}€!}€!}!€|!!}€!}!€|!!~}!€~}!€}€!~}€!~}€!}€!~}€!}€!~}!€~}€!}€!}€!}€!~}!€|!!~}€!}!€}!€~}€!}€!~|!!}€!~~}!€}€!}€!~}!€}!€}!€}€!}€!}€!~}€!}€!}€!~~~}€!}!€|!!}€!}€!~~}!€}!€~}!€}!€}€!~}!€}€!}!€}!€|!!}€!}!€|!!}!€|!!}€!}!€~ƒ,}€!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!}!‚,}!‚,{-!{,‚-|!!{!-{!-|!!},‚!|!!}!‚,|!!{-!{-!{!-{!-}!‚,z!„)|!!x-„)}!‚,{!-{,‡){!-x)„-{!-{)‡,{!-{!-z!„)x-„)w)‰){-!{,‚-}!‚,{!-}!‚,{!-{)‡,z)„!{,‡)},‚!{-!z)„!{-!x-„){-!x-„){!-{,‚-{-‚,{)‡,{,‡)x-„){-‚,{,‚-x-„){,‚-x)„-{-‚,{-!{-!x-„)x-„)x)„-{!-{-!{-!{-!{-‚,{!-z!„){-!{-!y-~-z)„!{!-{!-|!!{-!{-!x)„-{!-{!-z!„){-!x-„){!-{!-z!„){!-z)„!{-!{-!{!-{!-{!-|!!|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€|!!}!€|!!}!€}!€}!€|!!}€!}!€}€!~|!!|!!}€!}€!}€!}€!~}!€}!€~~~~~~~~~~~~~~~~~~~}!€}€!~}€!}€!}€!~~}!€|!!~}!€}!€~}€!~}€!}€!}€!}€!~}!€}!€}€!}€!~~~}!€}€!}€!~}!€}€!~}!€}€!~~}!€|!!}€!}!€|!!|!!}€!|!!|!!|!!|!!}!‚,|!!|!!},‚!}!‚,|!!}!‚,|!!}!‚,|!!|!!|!!|!!~ƒ,}!‚,}€!|!!~ƒ,|!!|!!}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~}€!z…)}€!v9~-v9~-v9~-t9-t9-y-~-y-~-y-~-{!-|!!{-!{!-}€!|!!|!!|!!|!!}€!}€!|!!|!!}!€}!€}!€|!!}€!}!€|!!}€!}€!}€!|!!|!!}€!|!!|!!}€!}€!~|!!}!€}!€}!€}!€|!!}!€|!!~|!!}€!}€!}€!}!€~}!€}!€}!€|!!}€!}€!}€!}€!}€!|!!}€!}!€}!€}!€}!€}!€}!€|!!}!€|!!}!€|!!}€!|!!}€!}€!}€!}€!}€!|!!}€!}!€|!!}€!|!!}€!}!€|!!}!€}!€}!€}!€|!!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{€-}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€}!€|!!}!€}!€}!€}!€}!€}!€}!€~}!€}€!}€!}!€}!€}€!}!€}!€|!!}€!}€!}€!}€!}€!}€!|!!|!!}€!}€!}€!}!€}€!~}!€}!€}!€|!!}€!~|!!~}!€}€!~}!€}!€~}!€}!€}€!}!€|!!}€!}€!}€!~|!!}€!~}!€}!€}!€}!€}!€}!€}!€~}!€}!€}€!}€!~}€!}€!}€!~}!€~~}!€~}!€|!!~}!€}€!}€!}€!~|!!~}!€}€!}€!}€!~}€!~|!!~|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!}!‚,|!!|!!|!!|!!}!‚,}!‚,|!!},‚!{-!},‚!|!!{-!z!„){!-}!‚,z!„){-!}!‚,{!-}!‚,|!!{-!{-!},‚!{-!{!-{!-{-!x)„-}!‚,{!-}!‚,{-!z)„!x-„){-!x)„-{!-{!-x)„-{!-{)‡,x)„-{-!{,‡){-!{,‡){-‚,{,‚-x)„-{!-x)„-{-‚,x)„-x-„)x-„){,‚-x)„-{,‡){,‡){-‚,{-‚,{!-{,‚-{-!y-~-{!-x)„-{,‚-{!-{-!x-„){-!x-„)}!‚,y-~-{-!{-‚,{-!{-!z)„!{-!z!„)z!„){-!{!-{!-z!„){!-{!-|!!{!-z!„)|!!{-!|!!x-„){-!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!}!€|!!}!€|!!}€!|!!}!€}!€}!€|!!}!€}!€}!€~}!€}!€}!€}!€}!€~}!€~}!€~~~~~~~~~~~~~~~~}!€~~}€!~~~~}!€}!€~}!€}!€~}!€~|!!~~~~|!!}€!~~}€!}€!}!€}!€~}€!~}€!~~}!€~}!€|!!~}!€}!€}!€|!!{!†!|!!|!!~ƒ,}€!|!!},‚!z!„)|!!z)„!|!!|!!|!!},‚!|!!z)„!|!!}!‚,|!!}!‚,}!€}!€|!!}€!}€!}!€|!!}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~}!€}!€}€!z…)v-~9t9-v-~9y-~-y-~-y-~-{-!{-!y-~-{-!{-!{-!{-!|!!|!!|!!}€!|!!|!!~}!€}!€|!!}€!}€!}!€}€!}!€|!!}€!}!€|!!}€!}€!}!€}!€}!€|!!}€!}€!}!€}!€|!!|!!|!!}€!}€!|!!}€!}€!}€!}€!}€!}!€|!!}€!}€!~}!€}!€}!€}!€|!!~}!€}!€|!!|!!}€!}!€|!!}€!}€!}!€|!!}!€|!!}€!|!!}€!}!€|!!}!€|!!|!!}€!|!!|!!}€!}€!}€!}!€}!€|!!|!!}!€|!!}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!}!€|!!|!!|!!}!€|!!}€!}!€}!€|!!}€!}!€}!€~}!€}€!}!€}!€}!€}€!~|!!}€!}€!}€!|!!}€!}€!}!€|!!}!€|!!}€!}€!}!€}!€}!€}€!}€!}!€}!€}€!|!!}€!}€!}€!~}!€}€!}!€~}!€}!€}!€|!!~}!€}!€}€!~}!€}!€}!€~}!€}!€}!€}!€}!€}!€}€!~}!€}€!}€!~}!€}!€}€!~}€!~}!€~}!€}!€}€!}!€}!€~~}€!}!€}€!}€!}!€~}€!}€!}€!}€!}€!}€!}!€|!!~|!!}!€|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!},‚!|!!},‚!|!!|!!}!‚,|!!},‚!|!!|!!{-!},‚!{!-}!‚,{!-},‚!},‚!{-!{!-|!!},‚!}!‚,{!-}!‚,|!!},‚!|!!{-!|!!},‚!{-!},‚!{-!{-!{,‚-}!‚,{!-{,‚-x)„-{)‡,x-„)x)„-{-‚,{-!x-„){-‚,x)„-}!‚,x-„){,‡){-!{,‡){-!{-!x-„){-‚,x-„){,‡)y-~-~,…,{-‚,{,‚-{-‚,y-~-{,‚-{-‚,y-~-w4ƒ-y-~-{-‚,y-~-{-‚,y-~-x-„){,‚-x)„-x-„){-‚,x)„-{,‚-{!-x-„)y-~-{!-{,‚-{)‡,y-~-x-„)}!‚,|!!x-„){-!{-!y-~-{!-{-!{-!{-!z!„){-!x-„){-!x-„){-!{-!x-„){!-{!-|!!{!-{!-|!!{!-{!-|!!|!!z)„!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}€!}€!}!€}!€|!!}€!}!€~}€!}€!~|!!~}!€}!€}€!}€!~}!€}!€~}€!~~~~~~~~~~~~}€!~}!€~~}!€~~}€!~}€!~~}€!~~}€!}€!}€!~}!€|!!~|!!~~}!€}!€}!€~~~}!€}!€~}!€~}!€}!€}!€}!€}!€|!!}€!}€!}€!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!}!‚,|!!}!‚,|!!|!!}!‚,|!!},‚!|!!|!!|!!~ƒ,|!!~ƒ,|!!|!!}€!}!€}€!~}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~|‡!}!€|!!v9~-t9~9t-9v-~9y-~-y-~-y-~-y-~-{-!{!-|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}€!|!!~|!!}€!}€!|!!|!!}€!}!€|!!}!€|!!|!!}€!|!!|!!}€!|!!}€!}€!}!€|!!}€!}€!}€!}€!}€!}€!}€!}!€}€!~}!€}!€|!!~|!!}€!}€!}€!}€!}!€|!!}€!|!!}€!}€!}€!}€!}!€}€!|!!}!€}!€|!!}!€|!!}€!}!€|!!}€!}€!}€!}€!}!€|!!|!!}€!}!€}!€|!!|!!}€!}!€|!!|!!}!€|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€|!!}!€|!!}€!|!!}€!}€!}€!}!€}!€~}€!}!€}!€}!€}!€}€!}€!~|!!}€!~|!!~|!!}€!}!€|!!}€!}€!}€!~}!€~}€!}!€}€!}€!}€!}€!}!€}!€~}!€|!!~|!!~}!€}€!}€!~|!!}€!~}!€}!€|!!}€!}!€}!€}!€|!!}€!}€!~}€!}€!~~}!€}!€}!€}!€~~~}€!}!€}€!~}!€}€!~~~}!€~|!!}€!|!!}!€}€!~}!€}€!}!€}€!~|!!}€!}€!}€!}€!}!€|!!}€!}€!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!},‚!|!!|!!},‚!{!-|!!{!-}!‚,|!!{-!{-!{!-{!-|!!},‚!{-!},‚!{-!}!‚,{!-}!‚,|!!{-!{-‚,x)„-{!-{,‚-x)„-{!-},‚!x-„){-‚,{-!{-‚,x)„-~,…,y-~-x)„-{,‡)x-„){!-{)‡,x)„-{,‡){-‚,{,‡){-‚,{-‚,{-‚,{,‚-w4ƒ-y-~-{,‚-w-ƒ4{-‚,{,‚-w4ƒ-{-‚,y-~-y-~-y-~-y-~-y-~-{,‚-z,‡4y-~-{,‚-{,‚-{,‚-{-‚,x)„-{,‚-x)„-x-„)x-„)y-~-{!-x)„-{!-y-~-y-~-{!-{!-x)„-|!!x-„){!-{!-w)‰){-!{!-{!-{!-|!!{!-{!-{!-{-!{-!{-!{-!|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!|!!}!€}!€|!!}€!}€!}€!|!!}!€}!€}!€}€!}€!~}!€~}€!~~}!€}€!~~~}!€~~~~~~~~~~~~}!€}!€~}!€~}!€}€!~}€!~}!€}!€~}!€~~}!€~}€!~}€!}€!}!€}€!~}!€}!€}!€}!€~}€!}€!~}€!}€!~}!€}!€}€!}€!}€!}!€}!€|!!}€!}€!{!†!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!|!!z!„)},‚!}!‚,}!€}!€~,ƒ~|!!{!†!~ƒ,~}!€}!€~}!€~}€!~~~~~~~~~~~~~~~~~~~~}!€}!€|!!|!‡t-9v9~-t9-y-~-y-~-y-~-y-~-{!-{!-{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!}!€}!€|!!}€!|!!}€!~|!!}!€|!!}!€}!€}!€}!€|!!|!!}€!|!!}!€|!!}!€|!!}€!}!€}!€}€!}€!}€!}!€|!!}€!~}!€}!€|!!~}!€|!!}!€}€!}!€}!€}!€|!!}!€}!€|!!|!!|!!~|!!}€!}€!}!€|!!}€!}€!|!!}€!|!!|!!|!!|!!}€!|!!}€!|!!}€!}€!}!€|!!}!€|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€}!€|!!}!€|!!|!!|!!}€!|!!}€!}!€}!€|!!|!!~}!€}!€~}€!}€!~}€!~}€!}€!~|!!}€!}!€|!!}!€}!€}!€}!€}€!}!€}€!|!!}€!}€!}!€|!!~}!€|!!}!€}!€}€!}€!}€!}€!}€!}€!}€!}€!~~}!€}!€}!€~|!!~}€!~}€!~}!€}€!}!€}!€}!€}€!~}!€~}€!|!!~}€!~~}!€}€!~}€!}€!}!€|!!~|!!}€!~~}€!|!!~}€!~}€!}!€}!€~}!€}€!}€!}!€}!€}!€}!€}!€|!!}!€}€!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!{-!{!-}!‚,{!-{!-|!!{-‚,|!!{-!{-!{-!},‚!{!-},‚!{!-}!‚,|!!}!‚,{!-}!‚,}!‚,{!-{!-{)‡,{!-}!‚,{!-{!-x)„-{,‚-{,‚-{,‚-{,‚-{,‚-x)„-~,…,y-~-{,‡){-‚,x-„)~,…,{-‚,{-‚,y-~-{-‚,y-~-w-ƒ4{,‚-w4ƒ-w4ƒ-q99w9=u4ˆ4v-~9t9~9t9~9q99y96u4ˆ4y69|=‚6r9†4u4ˆ4u4ˆ4u4ˆ4y-~-w4ƒ-x-„)y-~-y-~-{,‚-y-~-y-~-{,‚-{,‚-{,‚-x-„)x-„)x-„)y-~-x)„-z)„!y-~-z)„!{-!{-‚,{-!x-„)y-~-{!-{!-x)„-{!-|!!x-„){-!|!!{-!|!!{-!{!-|!!{-!{!-{!-|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}€!}!€}€!}!€}!€|!!}€!}€!~}!€}!€}!€}!€}€!}€!~}!€}!€~~~~}!€~~~~~~~~}€!~~}€!~~~~~}!€~~}€!~}!€~~}!€~}€!}€!}€!}€!~|!!}€!~~}!€}!€~}€!~~}€!}€!~~}!€~}€!~}€!~}!€}€!}!€|!!}!€|!!|!!|!!|!!}!‚,|!!}!‚,|!!},‚!},‚!}!‚,|!!z)„!|!!|!!|!!},‚!|!!|!!|!!~ƒ,}!‚,{!†!|!!|!!}€!}!€}!€}!€~}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~~~v9~-v-~9v9~-t9-t9-y-~-y-~-{-!{-!{!-|!!|!!{-!|!!|!!|!!}€!}!€}!€}!€}!€|!!}€!}€!}!€|!!}€!|!!}€!}€!}!€|!!}€!}€!|!!|!!|!!}€!}€!}€!}€!}€!}!€|!!|!!}€!|!!~|!!~}!€}!€|!!~|!!}!€|!!~}!€}€!}€!~}!€|!!}!€}!€|!!}!€|!!}!€}!€|!!}€!|!!}€!}€!|!!}€!}!€|!!}!€}!€|!!}€!|!!~}!€|!!}€!|!!}€!|!!}!€|!!}€!}€!}!€}!€~,ƒ|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}€!}!€}!€}!€|!!}€!~|!!}€!}€!}€!}€!~}!€}€!}€!|!!~}!€}!€~|!!~}€!}!€}!€|!!}€!|!!}!€}!€}!€}!€|!!~}!€|!!}€!}€!}€!}!€}!€}!€}€!|!!}!€}!€}!€}!€}!€}!€}€!}€!}!€|!!}€!~|!!}!€}!€}€!}!€}€!}€!}€!}!€}!€}!€|!!~}€!}€!}€!}!€}!€}€!~|!!}€!~}€!}€!}€!~}!€}!€|!!}!€~|!!}!€|!!}€!}€!}€!}!€}€!}!€}!€}!€|!!}!€|!!}€!}!€}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!}!‚,|!!{!-|!!},‚!{!-}!‚,{!-}!‚,{-!},‚!{-!{!-{!-{!-{!-z!„){-!},‚!{-!}!‚,{!-{!-{!-{!-{,‡){-‚,{,‚-{,‡){-‚,y-~-{,‚-{-‚,z4‡,y-~-x)„-{,‚-{,‚-{,‚-y-~-~,…,y-~-{,‚-w4ƒ-v9~-w4ƒ-w4ƒ-w9=sH~HyZ…xi‡…urb}HoZˆƒn‘‹–n‘„Œn‘„Œm‚€xpb|bnu‰‚h–ސnx|VsH~HrV}bqf|PtH~9t9~9v9„6r9†4r4†9u4ˆ4w-ƒ4w-ƒ4t9-w-ƒ4{-‚,{-‚,y-~-y-~-{)‡,{-‚,y-~-x)„-y-~-x-„){-!y-~-{!-{!-{-!y-~-{!-x)„-{-!{-!{!-x)„-{!-{-!{!-{!-{!-|!!{-!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!}!€}!€}!€}!€}!€}!€}€!}€!}€!}€!~}!€~~}!€~~~~~~}!€~~~~~~~~}!€~~~}€!~~}€!~~}€!~}!€}!€~}!€}€!~~}!€}!€~}!€}€!~}!€}€!}€!}!€}€!}€!~~}€!}€!}€!~}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€|!!}€!{!†!~,ƒz!„)|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!|!!},‚!|!!}!‚,|!!{!†!|!!}€!|!!}!€}!€~}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~~}€!}€!|!‡{!†!v-~9v9~-v-~9v-~9y-~-y-~-{-!y-~-y-~-{-!{-!{-!|!!|!!|!!|!!|!!}€!|!!|!!}€!}€!~}!€}€!}€!}!€|!!}€!}!€|!!|!!|!!|!!}!€|!!}€!}€!}€!}€!|!!}!€}!€}!€}!€}!€}!€|!!}!€|!!|!!}!€}!€|!!~}€!~|!!}€!}!€}!€|!!|!!}€!}€!}!€}!€}!€}!€}€!}€!}!€}!€}!€}!€|!!}€!}!€|!!~}!€|!!}!€|!!}€!}€!|!!}!€|!!}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!|!!}€!}!€|!!}€!|!!}!€|!!}€!}€!}€!}€!}€!}!€}€!}!€}€!}!€|!!}€!}€!~~}€!}€!}€!}€!}!€}€!}!€|!!}€!}!€}!€}!€}€!|!!}€!}€!~}€!}€!}€!~}!€}!€|!!}€!~}!€}!€}!€}!€}!€|!!~|!!}€!}!€}!€}!€|!!}€!~|!!}€!}!€}€!~}€!}!€}€!}€!|!!~}!€}!€}!€~}!€}€!~}!€~~}€!~~}!€}!€~}€!}!€}€!}€!~}€!}€!}€!}!€}€!}€!}!€}!€}!€|!!~}€!}€!}!€}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€{-!},‚!|!!|!!},‚!|!!|!!{-!{!-|!!|!!},‚!{!-|!!},‚!{-!{-!{-!{-!{-!{-!{-!{-!x-„)|!!{-‚,{!-}!‚,}!‚,y-~-{!-}!‚,x-„)~,…,{-‚,{,‚-y-~-{,‚-y-~-{,‚-y-~-{,‚-y-~-{,‚-{,‚-w-ƒ4y-~-w-ƒ4y-~-r4†9u4ˆ4w9=sbƒxkƒ‹‚pb|brb‚‚h‡†–m–Šši­‘­m³³i­‘­j¥”¥k­‘³j³‘¿g¿“¿j³‘¿q¢‹­n¥“«i¥’­i­‘­h¥Ž›nš­sš‰šo¥Žšh–†‡luƒbuffrb}fwV=r9†4z=€=rC|9w4ƒ-w4ƒ-w4ƒ-w4ƒ-y-~-y-~-y-~-x-„)y-~-x)„-x)„-x-„)y-~-x)„-{-!y-~-x-„)y-~-x-„){!-{!-x)„-{!-|!!{!-|!!{-!{-!{-!{-!{-!|!!{-!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!}€!|!!}€!}€!}!€}!€|!!}€!}!€}€!}!€~}!€~|!!~~~}€!~~~~~~~}!€~}!€~~}!€~}€!~}!€~}€!~}!€}!€}!€~}€!~~}€!}€!~}€!~}!€}!€}!€}€!}€!}!€~}!€~~}€!~|!!}€!~~~}!€}€!}€!~}!€|!!}€!}!€|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!},‚!|!!},‚!},‚!|!!{-!{)‡,|!!},‚!|!!|!!|!!}€!|!!|!!}!‚,}€!~|!!}!€~,ƒ}€!~}!€~~~~~~~~~~~~~~~~~~~~~~}!€}!€}€!|‡!v-~9v-~9y-~-y-~-y-~-y-~-y-~-{!-|!!{-!|!!|!!{!-|!!|!!|!!}€!|!!}!€|!!}!€}!€|!!}€!|!!}€!}€!}!€|!!|!!}!€|!!}!€}!€}!€}!€|!!}!€|!!}!€}!€|!!|!!}!€|!!|!!}€!}€!}€!}€!}€!}€!}!€}!€|!!~}!€}!€}!€}€!}!€}!€}!€}€!}!€|!!}€!}€!|!!|!!~}!€|!!|!!~ƒ,}€!}!€|!!}€!|!!|!!}!€|!!|!!}€!|!!|!!}€!}!€|!!}€!|!!|!!}€!|!!|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!}€!}!€|!!}€!}€!}!€}!€}€!}€!}€!~}!€}€!}€!}€!}€!}€!}€!}!€|!!}€!}€!|!!}!€}!€|!!}!€}!€|!!}€!}€!}!€~|!!|!!}€!|!!}!€}!€|!!}€!}!€|!!}!€}€!}€!}€!~|!!}€!}!€|!!~}!€|!!~|!!~|!!}€!~}!€|!!~|!!~}!€}!€}!€~}!€}!€}!€|!!}€!}€!~~|!!}€!}€!}!€}!€}!€~|!!}€!~}€!|!!~}€!~|!!~}!€}!€}!€}€!~}!€}!€|!!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!},‚!|!!},‚!{!-|!!{-!},‚!{-!},‚!},‚!}!‚,{-!},‚!{-!},‚!{-‚,},‚!},‚!{-‚,{!-}!‚,x-„){-!{)‡,z!„){-!y-~-x)„-y-~-{-‚,{-‚,y-~-~6…,{-‚,{-‚,{-‚,{-6{-6w-ƒ4z,‡4y4†6w9=|6‚=tH~VuV~Vgu‹–i¥’­k³‘­j¿‘³m³³j¿‘³g¿“¿g¿“¿f˒Ëj͏Òf˒Ëf˒ËfҐËkˑÍhԎÒeҏÒeÓÃg¿’Ëf¿‘ÒeҏÒg˒¿iÓ¿iÓ¿j¿‘³e¼“­i­‘­i­‘­f›Š–m‚€xhŽ–m–‰‚o^|9w9=t9~9u9ƒ4w-ƒ4{,‚-w-ƒ4y-~-{-‚,{-‚,y-~-y-~-x)„-x-„)y-~-{-‚,y-~-{!-y-~-y-~-{!-y-~-{!-x)„-z!„){-!x-„){!-z!„){!-{!-|!!{!-{!-|!!|!!{!-}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}!€}!€}!€}€!~}!€}!€}!€}!€~}!€~~~~~~~~~~~~~~~~}!€~~~}€!~}!€~~~~}€!}€!~}€!~}!€~}€!}!€~}!€~}!€}!€}!€~}!€}€!~|!!~~~~}€!~}!€|!!~}€!~|!!~|!!~ƒ,}€!}!€{!†!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!z!„){!-|!!|!!|!!},‚!|!!},‚!|!!},‚!|!!|!!|!‡}!€~,ƒ}!€}!€}!€~}€!~}!€~~~~~~~~~~~~~~~~~~~~~~}€!~}!€v9~-v9~-v9~-t-9y-~-y-~-{!-y-~-{!-{!-{!-|!!|!!}€!|!!|!!|!!~|!!}€!}!€}€!}!€|!!~|!!}!€|!!}€!}€!}€!}€!~|!!|!!}€!|!!}€!|!!}€!|!!|!!}€!}€!|!!}€!}€!}€!}!€|!!~}!€}€!~~|!!~}€!}€!}€!}€!~|!!~|!!~}!€|!!}!€}!€|!!|!!~}!€}€!}!€|!!}€!|!!}€!~|!!|!!~}!€~,ƒ}€!}!€|!!}!€}!€}!€|!!|!!}€!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!|!!}€!|!!}€!|!!|!!}!€|!!|!!}!€}!€|!!}!€|!!}€!}€!~}!€}€!~}!€}!€}!€}€!~}!€~}!€}€!}€!}!€}€!}€!~}!€|!!~|!!~|!!}€!~}€!}€!}!€}€!|!!}€!}!€|!!~}€!}€!}!€|!!|!!~|!!}€!~|!!}€!}€!}€!}€!}!€}€!}€!}€!~}!€}!€}€!}!€|!!~}!€}!€}!€}€!~}!€}€!}€!}€!}€!~~}€!}€!~~}!€~}!€|!!}€!}€!}€!}!€|!!}€!}!€~}!€}€!|!!}€!~|!!}€!}€!}!€}!€}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!},‚!|!!{!-|!!{-!},‚!{!-}!‚,}!‚,{!-{!-{-!{-!{-!{-‚,{!-},‚!{!-}!‚,{-!},‚!{!-}!‚,{!-{!-~,…,{-‚,y-~-~,…,{-‚,y-~-{,‚-{6-w4ƒ-{-6{-6u4ˆ4w-ƒ4w-ƒ4w9=pIƒ9qZ}xn‚Œh‡„›i¥’­i­‘­m³³g¿“¿iÒËi˒Ãf˒ËkԍÔkԍÔiːÔkԍÔkڌÔkԌÚjڊÚkڌÔjڊÚnډÜjڊÚhҎÔhҎÔkԍÔkڌÔjڊÚkڌÔiÒËiÒËk͑Ëg˒¿i¿”¹g¿“¿g¼“³k­‘³m³³o­‘hu‹ui‡ˆg‡ˆjtH~9r4†9w-ƒ4w-ƒ4y-~-y-~-{-‚,{-‚,y-~-{-‚,{-‚,w4ƒ-x)„-x-„)y-~-x)„-x)„-{!-{-!{-!{-!y-~-|!!{-!{!-|!!|!!{-!{-!{!-|!!{-!{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}!€}!€|!!}€!}€!~}€!~}!€~~}!€~}€!~~~~~~~~~~~}!€}€!}€!~}€!~~~}!€|!!~}€!~~~}€!}€!~}€!~~}!€}!€}€!}€!~~|!!}€!}€!}€!~}€!}!€}!€}€!~~~~}!€}!€}€!}!€}€!}€!|!!}€!|!!|!!|!!}€!}!€|!!z!„)|!!}!‚,{!-}!‚,|!!},‚!z!„)}!‚,}!‚,|!!|!!},‚!|!!},‚!{!†!|!!|!!|!!|!!}!€~,ƒ~}€!}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~}!€}!€t9-v9~-v-~9y-~-y-~-y-~-y-~-{-!{-!{-!{!-{!-}€!{-!|!!|!!|!!|!!}!€|!!}!€{-€}€!}!€|!!}€!}€!}€!|!!|!!|!!|!!|!!|!!}€!}!€}!€}!€}!€|!!}€!}€!}€!|!!|!!}€!}!€|!!}€!}€!|!!}€!}€!}€!|!!}€!|!!}€!}€!}€!~}!€|!!}!€}!€|!!}€!}€!}€!}€!}!€}!€|!!}!€|!!}€!}€!}!€~|!!|!!}€!}€!|!!}!€|!!|!!|!!|!!}€!|!!|!!}!€|!!}€!}!€}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}!€|!!|!!|!!}€!}€!|!!}€!}€!}!€}!€|!!~}!€}!€|!!}€!}€!}!€}!€}€!}€!}!€}!€}€!~}!€|!!}€!~|!!}€!|!!}€!}!€|!!}€!|!!}!€|!!|!!}€!}!€}€!}!€|!!}€!}€!}€!|!!}€!}!€}!€}!€|!!}€!}!€}€!|!!}!€}€!}!€}!€}!€}€!}!€}!€}!€|!!}€!}€!}!€}!€}!€}€!}€!}€!}€!|!!}€!}€!}€!}!€}€!}€!}€!}!€|!!~|!!}€!~}!€|!!~}!€~|!!~}€!}€!}€!}€!~}!€}!€}!€|!!}€!}!€}!€}€!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!{-!|!!|!!|!!},‚!{!-|!!|!!},‚!{!-{!-{!-},‚!{,‚-}!‚,}!‚,{!-{,‚-}!‚,y-~-}!‚,}!‚,{,‚-{-!{,‚-{!-{,‚-x)„-{-‚,{-‚,y-~-w4ƒ-~6…,y-~-{,‚-{6-y6†4u4ˆ4y96t9‚=w=VouŠxiŠ–ošŽ¥h­’¿g¿“¿g¿“¿iːÔj͏Òm͎ÔkڌÔkԍÔkԌÚjڊÚn܉ÚjڊÚnډÜjڊÚnډÜq܉ÜoàˆÚnډÜnډÜjڊÚkڌÔjڊÚjڊÚjڊÚr܇àsà†àjڊÚkԌÚjڊÚhڌÒj͏ÒfːÒeҏÒg˒¿g¿’ËbÓËe¼“­nš­i­‘­g–‹ujk‚upm‡Vu9ƒ4w-ƒ4w-ƒ4y-~-y-~-w-ƒ4y-~-y-~-v-~9{-‚,y-~-y-~-y-~-y-~-z)„!{-!x-„)y-~-z)„!y-~-{!-{!-{!-{!-|!!{-!x)„-|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!}!€}€!}€!}!€}!€~|!!~}!€}€!~~~~~~~}!€~~~~~~~~~~~}€!~~}!€}!€~~}€!~}€!}€!~~~}€!~}€!}€!~~}!€}€!}€!~}!€~}!€~}€!~~~~}€!}!€}!€|!!}€!}€!~}!€}!€}!€}!€}!€}!€|!!~ƒ,|!!|!‰,}€!|!!z!„)|!!|!!z)„!|!!|!!},‚!},‚!}!‚,}!‚,|!!|!!|!!z)„!},‚!|!!|!!}€!}!€|!!~~,ƒ}!€}!€~}!€}€!~~~~~~~~~~~~~~~~~~~~~}€!}€!|!‡|!!v9~-v9~-t9-y-~-y-~-y-~-{-!{-!{-!{!-{!-|!!{-!|!!|!!|!!|!!|!!}!€|!!|!!}!€}!€}€!~|!!}€!}!€}!€}€!}!€}!€|!!}€!}!€|!!}€!}!€|!!}€!|!!|!!}!€}!€}!€|!!}€!}!€}!€|!!~}€!}€!~}€!~~}!€}!€}!€|!!}€!~}€!}€!}€!}!€}!€|!!}€!}!€}€!}€!}€!}€!}€!}!€|!!|!!}€!}€!}!€}!€|!!}€!|!!}€!|!!}€!}!€|!!}!€|!!}!€|!!}€!|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€~|!!}€!}€!~}€!}!€}€!}€!}!€}!€}!€|!!}€!|!!}€!}!€|!!}€!}!€|!!~|!!}€!|!!}!€}!€}!€|!!}!€|!!}€!}!€|!!}€!~|!!}!€}€!}€!}€!}€!}€!}!€}!€|!!}!€}€!}€!}€!}!€}!€|!!}€!}€!}€!}€!~|!!}€!}!€}!€}!€}€!|!!}€!}€!}€!}€!}€!~~}€!~}!€}€!~}!€}!€}!€}!€}€!}!€}€!}!€|!!}!€|!!}!€}€!}€!~|!!}!€}€!}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!{!-}!‚,{!-{!-{-!{-‚,{!-{!-|!!{-‚,{!-},‚!{!-{!-|!!},‚!{-!{-!~,…,{-!{-‚,y-~-y-~-{,‚-w-ƒ4{-‚,{,‚-y,‚9{6-y9‚,u4ƒ9u4ƒ9u9~Vnf|xmxŒƒf–Š›i­‘­k­‘³g¿“¿i˒Ãf˒Ëj͏ÒkԍÔkڌÔjڊÚsà†àoàˆÚrà‡Ün܉ÚnډÜoڈàsà†àoàˆÚoàˆÚn܉ÚjڊÚjڊÚoàˆÚn܉ÚjڊÚq܉Ün܉ÚnډÜsà†àsà†àq܉ÜjڊÚn܉ÚjڊÚhڌÒhڌÒhڌÒeҏÒkԍÔhڌÒk͑ËbÓËf˒Ëg˒¿e­”¥e›ˆ›mšxrb}HsI„=q99u9ƒ4y-~-w4ƒ-w-ƒ4y-~-y-~-y-~-x-„)y-~-x)„-y-~-y-~-{!-|!!y-~-{!-{!-{!-{!-{!-z!„){!-|!!{-!{!-{!-|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€|!!}!€}!€}€!~|!!~}!€}!€~}€!~}!€~~}€!~~~~~~~~~}€!}€!}€!}€!~}!€}!€~~~}€!}€!}€!~~~}!€}€!~~}!€~}€!}!€}€!~}!€}!€}!€}€!}€!~}!€}!€}!€}!€~}!€}€!~~}€!~}!€}€!}!€}!€|!!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!{-!},‚!|!!|!!|!!z!„)|!!{-!},‚!|!!|!!|!!|!!}!‚,}€!}!€|!!}€!~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~}€!|‡!v9~-v9~-v-~9t-9y-~-y-~-y-~-{-!{-!{-!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€}€!}€!}€!}!€|!!~|!!}€!|!!}!€|!!}€!}!€}!€}!€}!€}!€|!!}€!}€!}€!}!€|!!|!!}€!}€!|!!}€!}€!}€!|!!}€!~|!!}€!}!€}!€}!€~}!€}€!}€!~}!€}!€}!€|!!|!!}€!}!€}€!}!€}!€|!!}€!|!!}€!|!!}€!|!!|!!}€!|!!|!!|!!}€!}!€}!€|!!|!!}€!}€!}!€|!!|!!}!€|!!|!!}€!}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}€!}!€}!€|!!|!!}€!|!!|!!|!!}€!}€!~}!€}!€}!€}!€~|!!~}!€}!€}!€}€!|!!}€!}€!}!€|!!}€!}!€}!€}!€}€!}€!}€!}€!}€!|!!}€!}€!|!!}!€|!!|!!}€!}€!|!!}!€},‚!}!€|!!}€!}€!}!€|!!}!€|!!}!€|!!}!€}!€|!!}€!}!€|!!|!!}!€}!€}€!}€!}€!}!€}!€}!€}!€}!€}!€}!€|!!|!!~}!€}!€}!€}!€|!!~}€!}€!~}€!~}€!~}€!~}€!}!€}€!}!€}€!~}!€|!!}€!|!!}!€}!€|!!|!!}!€|!!|!!|!!|!!},‚!|!!{-!}!‚,}!‚,|!!}!‚,|!!|!!|!!|!!{!-|!!{-!|!!{!-|!!{-!|!!{!-}!‚,{!-{,‚-{,‚-{!-{!-{-!{,‚-{,‚-{!-{,‚-{,‚-{-!{-‚,{,‚-{,‚-~,…,{-6{,‚-z,‡4{-6{-‚,y4†6u4ƒ9u9~Vlf‡ƒn‚Œ­i­‘­i¿”¹g¿’ËfːÒeҏÒiːÔnԋÜnډÜnډÜq܉ÜnډÜoڈàsà†àsà†àsà†àrà‡ÜoàˆÚrà‡Üsà†àsà†àoڈànډÜjڊÚsà†àq܉ÜjڊÚjڊÚnډÜjڊÚjڊÚnډÜr܇àn܉ÚkԌÚkڌÔhԎÒhҌÚhҎÔhҎÔeҏÒhԎÒkԍÔeҏÒhԎÒhҎÔfҐËg¿“¿g¿“¿f˒Ëk³‘­j‡€‡nŠˆbwH=u9ƒ4y-~-t-9y4†6y-~-y-~-{,‚-{-‚,y-~-x-„)y-~-{!-y-~-|!!{-!z!„){-!z)„!{!-{!-|!!{-!|!!{-!|!!{-!{-!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!~|!!}!€}!€~}!€}!€~~}!€~~~}€!~~~~~}!€~~~~~~~~~}!€~~}!€}!€~~~~}€!}€!}€!}€!~}€!~}!€|!!~}€!~}!€}!€}€!~}!€~}!€}!€}!€~}€!}!€}!€}!€}€!}€!~}!€}€!}€!}€!|!!}€!}!€}!€|!!|!!|!!}€!|!!},‚!}!‚,{!-|!!z!„)|!!{-!}!‚,|!!{!-|!!}!‚,|!!|!!|!!|!!|!!}€!}€!}!€|!!}€!}!€}€!~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~}!€}!€|!‡v-~9y-~-v9~-y-~-y-~-y-~-{-!y-~-{!-{!-|!!{-!|!!{-!|!!|!!|!!}!€|!!|!!}!€|!!}€!~|!!|!!}€!}!€|!!|!!}€!}!€}!€}!€}€!|!!}€!}€!|!!|!!}!€|!!|!!~|!!|!!}€!|!!}€!}€!}€!}€!}€!~~}!€}!€}!€}!€}€!}€!}€!}€!}!€}!€}€!}!€}!€}!€|!!}€!}€!}!€}!€~,ƒ~}!€}!€}!€}!€}!€|!!|!!}€!}€!|!!}!€|!!|!!}€!|!!}€!}!€}!€}!€|!!}!€|!!}€!}!€}!€|!!}€!|!!|!!},‚!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!~|!!|!!}!€|!!}€!}€!~}!€}!€}!€|!!}€!}€!}€!}!€}!€}!€}!€}!€|!!}€!}€!|!!|!!}€!}€!}€!}€!|!!}€!|!!}€!|!!|!!}€!}€!|!!|!!}€!}€!|!!}€!|!!|!!}!€}!€}€!|!!}€!}!€|!!}€!}€!}€!~}!€~|!!}€!}€!~|!!}€!~}€!}€!}€!}!€}!€}€!~|!!|!!}!€}!€}!€}!€}!€|!!}!€}!€}€!}€!~}€!}!€}!€}€!|!!}€!}€!}€!~|!!}!€}€!}€!~}!€|!!}€!}€!~~}€!}€!|!!~},‚!}!€},‚!|!!|!!|!!|!!|!!|!!}!€{-!|!!}!‚,}!‚,{!-}!‚,|!!x-„)}!‚,}!‚,}!‚,{!-}!‚,{-‚,}!‚,{-!{,‚-|!!{!-}!‚,{-‚,{!-{,‚-{)‡,{!-{,‚-{!-{,‚-{,‚-{-‚,{-‚,y-~-{,‚-{-6{-6v9~-u4ƒ9u=}CqV|kn‘‰›p­‹ªd¼”¿g¿’ËfːÒeҏÒkڌÔjڊÚnډÜsà†àsà†àyæƒàsà†àoàˆÚrà‡ÜnډÜsà†àsà†àrà‡Ün܉Ún܉Úrà‡Üsà†àyæƒàq܉Üoڈàr܇àsà†àjڊÚkڌÔjڊÚjڊÚjڊÚjڊÚjڊÚnډÜn܉ÚhԎÒkԌÚjڊÚhڌÒeҏÒkԍÔjڊÚhԎÒkԍÔkԌÚhԎÒeҏÒeҏÒjҏÍjҏÍfґ¿k³‘­j³‘¿i­‘i‡…ufujvC6t9~9u9ƒ4y-~-w4ƒ-w-ƒ4{-‚,y-~-x-„)y-~-x)„-y-~-x-„)y-~-{!-{!-z)„!{-!{!-{!-{!-{€-{!-|!!|!!{-!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}€!}!€}!€}!€}€!~}!€}€!~~~~~~~~~~~~~~~~~}!€}€!~~}!€}€!~|!!~~}€!}!€~~~~~}!€~~}€!~}!€~~~~~}!€~}€!~~}!€~~}€!}€!~}!€}!€}!€~,ƒ}€!}€!}!€|!!}!€|!!}€!|!!|!!}!€|!!|!!z!„){!-|!!},‚!z)„!|!!}!‚,}!‚,|!!{-!}!‚,|!!}!‚,}!‚,|!!|!!~,ƒ}!‚,}€!}€!~ƒ,{!†!~~}!€~~~~~~~~~~~~~~~~~~~~~~~~~~y-~-v9~-v9~-y-~-t9-y-~-{!-y-~-{!-|!!{-!{-€|!!|!!|!!|!!|!!|!!|!!~|!!}€!|!!|!!}€!}€!|!!}€!|!!}!€}€!}€!|!!}€!|!!}!€|!!}!€}€!}€!~|!!}€!|!!}!€}€!}!€}!€}!€}!€}!€}!€}€!}€!~}!€}!€}!€}€!}€!~}!€|!!}€!}!€}!€}€!}€!~}€!}€!}!€~|!!}€!|!!}€!}!€}!€|!!}!€|!!}€!~ƒ,|!!|!!}€!|!!}€!}€!}€!|!!}€!|!!|!!}€!|!!}!€}€!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!{-!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!~|!!}!€}!€}!€}!€~}€!}€!}€!}€!}€!}!€}!€|!!}!€}€!}€!}€!~}!€}!€|!!}!€}!€}!€|!!}€!}!€}!€}!€|!!}€!|!!}€!|!!}!€|!!|!!}€!}!€|!!|!!|!!}€!}!€|!!}!€}!€}!€|!!|!!}!€|!!}!€}!€|!!}€!}€!}€!}€!|!!}€!}!€}€!}!€}!€|!!~}!€}!€|!!|!!~}€!~}!€}€!}€!}€!}€!}!€}€!~}!€}€!|!!}!€|!!}€!~}€!}!€}!€}!€~}€!}€!}!€|!!|!!|!!|!!}€!|!!}€!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!{-!|!!{-!{!-}!‚,}!‚,{!-{!-{-!},‚!y-~-y-~-}!‚,{-!{,‚-{,‚-{!-{,‚-{-‚,{,‚-{,‚-{)‡,y-~-{,‚-w4ƒ-~6…,v9„){6-u4ˆ4y69rH}bm‚‰–nš­k­‘³b¿“Ãf˒ËhҎÔq܉ÜoڈànډÜn܉Úr܇àsà†àsà†àrà‡Üsà†àrà‡ÜjڊÚoàˆÚrà‡Üsà†àrà‡Ür܇àr܇àsà†àsà†àsà†àoàˆÚn܉ÚoàˆÚjڊÚjڊÚnډÜn܉ÚnډÜoàˆÚnډÜhԎÒjڊÚjڊÚhڌÒhҌÚq܉ÜoàˆÚfːÒkԌÚq܉ÜkڌÔkԌÚjڊÚhڌÒhҎÔkԌÚkڌÔkڌÔjҏÍk͑Ëi¿“ÃeÓÃk³‘­j¥šg–‹umb‰VtH~9u9ƒ4y-~-y-~-y-~-x-„){-‚,x-„)y-~-x)„-{!-{-!{-!y-~-{!-{!-{!-{!-|!!{-!{-!x)„-{!-|!!z)„!|!!|!!|!!|!!{-!|!!|!!|!!|!!}!€|!!|!!}€!~}!€|!!}€!}€!~}!€}!€~}€!~~~}!€~~~~~}!€~~}€!~}!€}€!~}€!~}!€~~}€!}€!}€!~~}!€~~}!€}!€~}!€}€!}€!~~}!€}!€|!!~}!€~~~}€!}!€~}!€}!€}!€~}€!~}!€|!!}€!}€!}!€|!!|!!|!!~ƒ,|!!{!†!},‚!{!-|!!|!!|!!|!!},‚!|!!}!‚,|!!{-!z)„!|!!z!„)|!!{-!|!!z)„!z!„)~,ƒ|!!}!€}!‚,}€!~}€!}!€}!€~}€!}€!~~~~~~~~~~~~~~~~~~~~~}!€}!€{!†!t9~9v-~9v-~9y-~-y-~-y-~-y-~-{!-y-~-{!-|!!{!-{!-|!!|!!|!!|!!|!!}€!|!!|!!}€!}€!}€!|!!}€!}€!}€!}!€}!€|!!|!!}€!|!!~}€!}!€|!!}!€}!€|!!}!€|!!|!!}€!}!€}!€}!€}€!}€!~|!!}!€}!€}€!}€!~}!€}!€}!€}!€}€!}€!~}!€}€!}€!~}!€}!€}!€}!€|!!}€!}!€}€!}!€|!!}€!}€!}€!}!€|!!|!!~}€!|!!}€!}€!|!!|!!}€!|!!}!€}€!}!€}!€|!!|!!}€!|!!}€!}€!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!{€-|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}€!}!€|!!}!€}!€}!€}!€}€!}€!}€!}€!}€!}€!}€!}€!}€!~}!€}!€|!!~|!!|!!}€!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!}!€|!!}€!}!€|!!}!€|!!}!€|!!}€!|!!}€!}€!|!!}!€|!!|!!|!!}!€}!€|!!~|!!}€!}€!|!!|!!}!€}!€~}!€}€!}!€}€!|!!~}!€}!€|!!}€!~}!€}!€}!€}€!|!!}€!}!€|!!~~}!€}!€|!!~~}!€|!!}€!}!€|!!}€!|!!}€!|!!}€!}€!}!€|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!},‚!|!!}!‚,|!!|!!}!‚,|!!{!-z!„)|!!{-!{!-{!-{!-{!-}!‚,}!‚,{!-{!-x-„){!-{-‚,{!-},‚!{!-},‚!y-~-{,‚-{-‚,y-~-y-~-{-‚,{-6{-‚,z,‡4{-6v9„6t=}PqmŒxh–Ž­i­‘­iÒËkԍÔkԌÚjڊÚr܇àsà†àsà†àsà†ànډÜq܉Üq܉Üsà†àsà†àrà‡Ürà‡Üsà†àq܉Ün܉Ún܉Úr܇àsà†àsà†àr܇àr܇àq܉ÜoڈàjڊÚn܉ÚjڊÚr܇àyæƒàn܉ÚjڊÚr܇àoàˆÚkڌÔhҌÚjڊÚhԎÒhҎÔnډÜn܉ÚhԎÒhҌÚn܉ÚhԎÒhҎÔkԌÚhԎÒiːÔnډÜn܉ÚkԌÚn܉ÚkڌÔfҐËlÓÃb¿“Ãd¿”¼b¼—´g­Œ›o‡„‚ku‚Pw=„4w4ƒ-y-~-y-~-{,‚-x-„)y-~-{!-{-!y-~-x)„-{!-{!-x)„-{!-z!„)z!„){!-|!!{-!|!!{!-{!-{!-|!!{!-|!!|!!|!!|!!|!!}€!|!!}€!}€!|!!}€!|!!~|!!}€!~~}€!}€!~}!€}€!~~}€!~}€!~~~~}!€~}!€}€!~}!€}!€|!!~}€!~~~~}€!}€!~}€!~~~~~~}!€~}!€}!€~~}!€~~}€!}€!~}!€}!€~~}!€}!€}!€|!!~}€!}€!}!€|!!|!!}€!}€!}!€|!!|!!|!!z!„)|!!},‚!}!‚,}!‚,|!!{!-|!!{-!z)„!{!-|!!},‚!},‚!}!‚,|!!|!!|!!~ƒ,|!!~ƒ,}!€}!€|!!}!€~}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~|!‡}€!t9-v9~-y-~-v9~-y-~-y-~-{!-y-~-|!!{-!{!-|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€|!!}€!}!€}!€|!!|!!}!€}!€|!!}€!}€!}!€}!€|!!|!!}€!}€!}€!}€!}!€|!!~|!!}!€}!€}!€|!!}€!}€!}€!~}€!}€!}€!~}€!~}!€}!€}€!}!€}€!}€!}!€}€!}!€|!!}!€|!!~}!€}!€|!!}€!}!€}!€}!€|!!}!€}!€|!!}!€}!€|!!|!!}€!}!€|!!}!€}!€}!€}!€|!!|!!|!!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€}€!}€!}€!}€!}€!~}!€|!!}!€}!€~|!!~}!€}!€|!!}€!}!€|!!}!€|!!}!€}!€|!!}!€}!€}!€|!!}€!}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!}€!|!!}!€|!!}€!}!€|!!|!!}€!|!!|!!}€!}!€}!€}€!}€!}€!|!!}€!|!!}!€|!!~}!€|!!|!!}!€}!€|!!|!!}€!}€!}€!}!€~|!!}€!}€!}!€|!!}€!|!!~|!!}€!}€!}€!}!€}€!}€!~}!€}!€}€!}€!}€!~}!€}€!|!!}€!},‚!|!!|!!|!!|!!|!!},‚!|!!|!!},‚!{-€{!-|!!|!!}!‚,|!!|!!{!-|!!},‚!{!-|!!{-!{-!{-!y-~-{,‚-{!-~,…,{!-{,‚-{,‚-{,‚-},‚!{-‚,y!„4{-‚,y-~-{,‚-{,‚-{6-u4ƒ9u4ƒ9y6†4u9~Viu…‡q¢‹­i¿“ÃiːÔjڊÚn܉Úq܉Üq܉Üsà†àrà‡Üsà†àsà†àsà†àr܇àsà†àrà‡Ürà‡Ür܇àsà†àrà‡ÜjڊÚr܇àq܉ÜjڊÚq܉Üq܉ÜnډÜnډÜjڊÚjڊÚsà†àkڌÔeҏÒoڈàsà†àrà‡ÜjڊÚq܉ÜnډÜjڊÚkڌÔhҎÔhҎÔkԍÔjڊÚkڌÔhԎÒj͏ÒkԌÚhڌÒeҏÒeҏÒfҐËfːÒkԍÔjڊÚeҏÒkԌÚjڊÚmڌÍiːÔhԎÒk͑Ëg¿“¿g¿“¿h´•³i­‘­j–ƒksN‹Ft-9{,‚-y-~-y-~-x-„)y-~-x)„-{-!{-!x-„){-!{-!{-!{-!{-!{-!{!-{!-|!!|!!|!!|!!z!„)|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€|!!~}!€}€!~|!!}€!}€!}€!~~~~~~~~~}€!~}€!~~}!€~}!€}€!~~}€!}€!}€!}€!~}!€~~~}!€}€!~}!€~~}!€}€!~~~}!€}!€}!€}!€}€!|!!~~~}€!}€!~~}€!~}€!}€!}!€}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!}!‚,|!!},‚!z)„!z)„!{-!|!!z)„!|!!|!!},‚!}!‚,|!!},‚!|!!|!!}€!|!!}€!}!€}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~}!€}!€|!!y-~-v9~-v9~-t9-y-~-y-~-y-~-{!-y-~-|!!{-!|!!|!!{-!|!!|!!}€!|!!|!!}€!}€!}!€|!!}€!}€!}!€}!€|!!|!!}€!}!€|!!}€!}€!}!€|!!~|!!}€!}€!|!!}€!}!€}€!}€!|!!}!€}€!}€!~}!€}!€}!€~}€!}!€}!€}€!}€!~}!€}!€}!€}€!}€!}!€}!€}€!~}!€|!!}€!~}!€}!€|!!}€!}!€}€!}€!|!!}€!}€!}!€|!!}€!}€!|!!}!€|!!|!!|!!|!!}€!}€!|!!~|!!}€!}€!|!!}€!}€!}!€|!!|!!|!!|!!{!-|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€|!!}!€}!€}!€}!€}!€}!€}!€~}€!~}!€}!€|!!}€!}€!}!€}!€}!€}!€|!!}€!~|!!}€!}€!}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!~ƒ,}€!|!!}!€|!!|!!|!!|!!|!!}€!}!€}!€|!!~|!!|!!}€!}!€}!€}!€}!€}€!}!€}€!}!€|!!}€!}€!}€!|!!~}!€}€!~}!€}€!|!!}€!}!€}!€}€!}!€|!!}€!}€!}!€}!€|!!~}!€}!€}!€}!€|!!}€!~}!€}!€}€!|!!|!!}€!}!€}!€|!!|!!|!!|!!|!!{!-}!‚,|!!|!!{!-|!!{€-{-!},‚!{!-}!‚,|!!{-!{-!},‚!{-!},‚!},‚!{-‚,|!!{-!},‚!{-!{-‚,{!-},‚!y-~-y-~-{-‚,y-~-{-‚,~,…6z4‡,w-ƒ4y,‚9y4†6t9~Hk^zks‚ˆšoªŒ¿g¿“¿iːÔnډÜr܇àr܇àq܉Üq܉Üq܉Ür܇àsà†àr܇àr܇àsà†àrà‡Üsà†àsà†àrà‡Üq܉Ün܉Úoڈàsà†àrà‡ÜkڌÔnډÜn܉Úsà†àsà†àjڊÚjڊÚjڊÚjڊÚhҎÔnԋÜq܉Üq܉ÜjڊÚkڌÔjڊÚnډÜjڊÚfːÒjڊÚjڊÚkڌÔjڊÚjڊÚfҐËhҌÚjڊÚhڌÒf˒ËfҐËfːÒhҎÔhԎÒfҐËiːÔkԍÔeҏÒkˑÍkԌÚkڌÔiÒËg¿“¿g˒¿g¿“¿e¿–´g–‚xpm‡VoC9w4ƒ-y-~-x)„-w-ƒ4{,‚-x)„-x)„-y-~-{!-{!-x)„-{!-{!-{!-|!!|!!{-!{-!{-!{!-|!!{!-|!!{!-}€!z…)}€!|!!|!!}!€|!!|!!}€!}€!|!!}€!}€!~}€!~~~}€!}€!~~}€!~}!€}!€~~~}€!}€!~}!€}€!~}!€}€!~}!€~}!€}€!~}!€}!€}!€~~}€!~}!€}!€~~}!€}!€}!€}€!~~~}!€}!€}€!}€!}!€}!€~}!€}!€}!€}€!}€!~}!€|!!}€!|!!}€!|!!}€!{!†!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!},‚!}!‚,|!!|!!{-!{!-}!‚,|!!|!!|!!|!!|!!|!!}!€~,ƒ~,ƒ}!€}!€}!€}!€~}€!~~~~~~~~~~~~~~~~~~~~~~~}€!|!‡v9~-v9~-v9~-y-~-y-~-{-!y-~-{!-|!!{-!{!-{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€|!!|!!}!€}€!|!!~|!!}!€|!!~}!€|!!~|!!}!€}!€}!€|!!}!€}€!~|!!}€!}€!}€!}€!}!€}!€}!€}!€}€!~}!€}!€}€!}€!~}!€}!€~}€!}€!|!!}€!}€!~}!€}!€|!!}€!}€!}€!}€!|!!}!€}!€|!!}!€}!€}!€|!!|!!}€!|!!|!!}€!~|!!}€!}!€}!€|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!},‚!|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!}€!}€!}€!~}!€}€!}€!~|!!}€!}€!}€!}!€}!€}€!}€!}€!}€!}€!|!!}€!|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}!€|!!}€!|!!}€!|!!}!€|!!}!€|!!}€!|!!|!!|!!}€!|!!}!€}€!}!€|!!}€!}€!}!€|!!}!€}!€|!!}€!|!!}!€}€!}€!|!!|!!}!€|!!}€!}!€}!€}!€|!!}€!}€!~}!€}!€|!!}€!|!!}€!}€!}€!}!€}€!}€!}€!}!€|!!}€!}€!~}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!},‚!|!!|!!|!!{-!{-!}!‚,}!‚,{!-{!-}!‚,{!-{-!y-~-{,‚-},‚!{,‚-},‚!y-~-{,‚-{!-{,‡){-‚,{-!~6…,y-~-{6-{-6u4ƒ9z=€=pH|Ps‚ˆšl¥’³j³‘¿iÒËhҎÔkԌÚq܉Üsà†àsà†àrà‡Üsà†àr܇àr܇àrà‡Üq܉Ürà‡Ürà‡Üsà†àsà†àsà†àr܇àrà‡ÜnډÜr܇àsà†àrà‡ÜjڊÚjڊÚnډÜr܇àsà†àn܉ÚkڌÔkԌÚhҎÔhҌÚjڊÚq܉Üq܉Ün܉ÚkڌÔjڊÚoڈàn܉ÚeҏÒnډÜrà‡ÜmԎÍhҎÔjڊÚiԐËiːÔkԌÚhڌÒf˒ËhҌÚkڌÔeҏÒhҎÔkڌÔfҐËjҏÍhґÃg¿’ËiːÔkڌÔeҏÒm͌ÚkڌÔi˒Ãg¿“¿i¹“­f¥–¥l›ˆ‚qP|9t9-y-~-y-~-y-~-x-„){,‚-x)„-y-~-{,‚-{!-{-!{-!{-!y-~-{!-|!!{!-|!!{-!{-!{-!|!!|!!{-!|!!|!!}!€z)„!|!!}€!}€!}€!~}!€~}!€}!€~}!€}!€}!€~~}€!}€!~~~~~~}!€~~}!€}€!~}€!}€!}!€}€!~}!€~}!€}€!~~}€!~}!€~}€!~~}€!~}!€~}€!~}!€}!€~~~}€!~~}€!}€!}€!}€!}€!~}!€}!€}!€}€!}€!}€!~,ƒ|!!|!!|!!{!†!|!!|,‰!|!!},‚!z)„!}!‚,|!!{-!{-!|!!|!!{,‚-}!‚,|!!{-!|!!{!-|!!{!-|!!z)„!|!!~,ƒ{!†!}€!}!€}!€}!€}€!~}!€~~~~~~~~~~~~~~~~~~~~~~}€!}€!}€!v-~9y-~-y-~-y-~-y-~-y-~-{!-{-!y-~-{!-|!!|!!|!!|!!|!!|!!|!!}€!}!€}!€}!€}!€|!!}€!|!!}€!}!€}!€|!!~}!€}!€|!!}€!}€!}!€}!€|!!}!€}€!~|!!}€!}€!}€!|!!}!€}!€}!€}!€}€!~~}!€}€!}€!~}€!}€!}!€}€!}€!}!€}!€|!!~}!€~}!€}€!}€!}€!~|!!}€!}€!~|!!}€!}€!|!!}€!}!€|!!}€!}!€}!€|!!}!€}!€|!!|!!}!€|!!}€!|!!}!€}!€|!!}€!}!€}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€|!!}€!}!€}€!}€!}€!}€!~}!€}€!~}€!}!€~}€!}€!}€!}!€}!€}€!}!€}€!}€!}€!}€!}!€}!€|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!}!€~,ƒ|!!}!€|!!|!!}€!}!€}!€}€!|!!}€!}€!}!€}€!|!!}€!}!€}!€|!!|!!}!€|!!}€!}€!}€!}!€|!!}€!}!€~}!€|!!}€!}€!}€!}€!~~}!€|!!~}!€|!!}€!}!€}!€~}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!},‚!}!‚,|!!|!!|!!{!-|!!|!!},‚!},‚!{-!z!„){!-|!!|!!{-!}!‚,|!!y-~-}!‚,{!-z)„!{-‚,{!-{!-},‚!y-~-y-~-{-‚,{-‚,{-6y-~-{6-y-~-y6†4{9Rpk‚p›‡¢k­‘³iÒËhҎÔkԌÚq܉Ür܇àyàƒæyàƒæƒæ}×sà†àsà†àyàƒæsà†àsà†àr܇ànډÜq܉Ür܇àr܇àsà†àyàƒæsà†àq܉ÜjڊÚq܉Üsà†àsà†àq܉ÜnډÜr܇àrà‡ÜoàˆÚkڌÔhԎÒiːÔoڈàq܉ÜkԍÔnډÜq܉ÜhڌÒhҎÔnډÜn܉ÚjڊÚnډÜrà‡ÜhڌÒkԍÔkԍÔiԐËf˒ËhԎÒhڌÒfːÒkԌÚn܉ÚfҐËm͎ÔjڊÚhڎËf˒Ëj͏Òk͑ËkˑÍhҎÔhґÃhҎÔkڌÔhԎÒfːÒf˒Ëi¹“­i­’¥d›ŒƒrmŠNtH~9w4ƒ-y-~-y-~-y-~-{-‚,x)„-{!-{-!x-„){-!y-~-z!„)|!!x-„)|!!{-!|!!|!!|!!z)„!|!!|!!|!!|!!|!!}!€}!€}!€}!€|!!}€!}€!|!!}€!}€!}€!}€!~}€!~}!€~}!€~}€!~~}€!~~}€!}€!~~|!!}€!~}€!~}!€}!€}€!~~}€!}€!~}!€}!€}€!~~~~}!€~}!€}!€}!€~}!€}€!}€!}€!~}€!}€!}!€}!€~}€!~|!!~}!€}!€|!!}!€|!!}€!|!!}€!|!!|!!|!!|!!z!„)|!!}!‚,|!!|!!z)„!{!-|!!{-!|!!|!!|!!{-!z)„!},‚!{-!z)„!|!!|!!|!!{!†!|!!~ƒ,}€!{!†!~~}€!~~~~~~~~~~~~~~~~~~~~~~~~|!‡}!€v9~-v9~-v9~-y-~-y-~-y-~-y-~-{!-|!!{-!{-!|!!{-!|!!|!!|!!|!!|!!}€!|!!}€!}!€}!€|!!~}!€|!!|!!}€!}!€}!€|!!}€!}€!}€!}€!}€!}€!}€!}!€|!!}€!~}!€|!!}€!}€!}!€}€!}€!~}€!}!€}!€}!€~|!!~~}€!~}!€~}!€}!€}!€}!€|!!~}€!~}€!}€!~}€!}€!}€!}€!|!!}€!}€!}€!}€!}!€|!!}€!|!!}!€|!!|!!}€!~|!!}!€}€!~}!€|!!}€!}€!}€!|!!|!!|!!}€!|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€|!!}€!~}!€}!€}€!}€!~}!€}!€}!€}€!|!!}€!}!€}!€}!€|!!}!€|!!}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!}€!}€!|!!|!!|!!|!!|!!}€!|!!|!!}€!}!€|!!}€!}€!}!€|!!|!!|!!}€!}!€}€!|!!|!!}€!}!€|!!|!!}€!}€!}€!}€!|!!}€!}!€|!!}€!}!€|!!|!!}!€}!€}!€|!!}!€|!!}!€|!!|!!~}!€|!!~}!€~ƒ,}€!|!!}€!}€!|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!},‚!|!!},‚!}!‚,{-!|!!|!!{!-{!-|!!{-!{-!{-!{-!{-!}!‚,}!‚,}!‚,{-!{,‚-{,‚-~,…,x-„){-‚,{,‚-{,‚-{-6{-‚,w-ƒ4z,‡4y6†4w4„=kb„–pš³i¿“Ãj͏ÒjڊÚq܉Ürà‡Ür܇àsà†àsà†àsà†àsà†àsà†àsà†àsà†àyæƒàsà†àoàˆÚrà‡Üsà†àq܉Üq܉Ür܇àsà†àsà†àn܉Úr܇àq܉ÜnډÜsà†àrà‡ÜjڊÚoàˆÚq܉Üsà†àrà‡ÜhڌÒhˎÚr܇àsà†àkڌÔkԌÚn܉ÚhڌÒhԎÒkԌÚhڌÒeҏÒjڊÚn܉ÚkڌÔj͏ÒkԍÔjҏÍhҎÔhҎÔfҐËfːÒkԌÚnډÜeҏÒeҏÒkԍÔhԎÒf˒ËkԍÔkڌÔkˑÍhҎÔeҏÒfҐËiːÔfːÒkԍÔhԎÒg˒¿f¹–¼i­‘­g–‹–e–ƒrb}HpIƒ9y-~-w4ƒ-y-~-y-~-x-„){-!x)„-{-!{-!{-!x-„){!-{!-{!-{-!x)„-|!!{!-z!„)|!!{-!|!!|!!}€!|!!|!!|!!}!€}!€}!€}!€}€!}€!}€!~}!€}!€}!€~~~}€!~}€!~~~~}!€~}€!~~}€!}€!~}€!~~~}€!}!€~~}€!~~~}€!}€!~~~}!€~~~}!€}!€}!€~}!€}!€}!€~~}€!}€!~}!€}!€}!€}!€}!€}!€~ƒ,}€!{!†!|!!|!!|!!|!!|!!|!!|!!|!!|!!z!„){-!|!!z)„!{!-z!„){-!{-!},‚!z)„!}!‚,|!!}!‚,|!!|!!|!!z)„!|!!|!!}€!}!€}!€|!!}€!~}€!}€!~~~~~~~~~~~~~~~~~~~~~~}!€|!‡v-~9t-9y-~-t9-y-~-y-~-{-!y-~-{!-{!-|!!{-!|!!{-!|!!|!!|!!|!!|!!}€!}!€|!!}!€|!!}€!|!!}€!}€!}€!}€!}!€}!€|!!}€!}€!}€!}!€}!€}!€|!!}€!}!€}!€|!!}€!}€!}!€}€!}!€~}€!}!€~}!€}€!}€!~}!€}€!~}!€}€!}€!~}!€}€!}€!~}€!}€!}€!}€!}€!}€!|!!}!€|!!}€!}€!}€!}!€|!!}!€}!€}!€~ƒ,}€!}€!}€!}€!}!€|!!}€!}€!}!€|!!|!!}€!|!!|!!|!!}€!}€!|!!|!!|!!|!!},‚!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!|!!}€!}!€|!!}!€}€!|!!}€!}€!~}!€}€!~|!!~|!!~}!€}€!}€!}€!}€!}€!}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}!€|!!|!!|!!}€!}!€|!!}!€|!!|!!|!!}€!|!!}€!}€!}!€|!!|!!|!!}€!}!€}€!}!€}!€|!!|!!}!€|!!}€!}!€|!!~|!!~|!!}€!}€!}€!}!€}€!}!€|!!}€!}!€}!€}!€}!€}!€}!€|!!~}!€}!€}!€|!!}€!}!€|!!|!!|!!|!!|!!}!‚,{!-|!!|!!{-!|!!},‚!|!!|!!|!!{!-{-!}!‚,|!!|!!},‚!{-!},‚!{-!{-!{-!{,‚-{-!y-~-{!-x)„-{-!{-‚,{-‚,{-‚,y-~-{,‚-w-ƒ4y,‚9y,‚9v-~9oV‡pš³iÒËm͌ÚnډÜsà†àsà†àrà‡Ürà‡Üq܉Üq܉Üsà†àrà‡Ürà‡Ürà‡Üsà†àsà†àsà†àr܇àsà†àq܉Üsà†àsà†àq܉Üq܉Üq܉Ür܇àr܇àq܉Ün܉Úoڈàn܉ÚoàˆÚq܉Üoڈàr܇àsà†àjڊÚkڌÔq܉Üyæƒàn܉ÚkڌÔhԎÒhԎÒjڊÚiԐËhҌÚhҌÚkڌÔkԍÔjڊÚkڌÔkˑÍkԌÚjڊÚfҐËfːÒkԍÔkԌÚkԍÔjڊÚkԍÔkԍÔfҐËiÒËhҎÔjڊÚk͑ËhҎÔkڌÔf˒Ëf˒Ëg˒¿f˒ËhҎÔfҐËf˒Ëg˒¿f¼”¥i­’¥h¥Ž›mŒ‚‚sP|-y-~-w4ƒ-x-„){-‚,y-~-y-~-{!-x-„){-!{!-|!!{-!z)„!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!}!€|!!~}!€|!!}€!}€!~}€!~}!€}!€~}!€}€!~}!€~~}!€}!€}€!~}!€}!€}!€}€!}€!~|!!~}!€}!€}€!}€!}€!~~}!€}€!~}€!}€!}€!~~}€!~}€!~}€!}€!}€!}€!~}!€}!€}€!~}€!}€!~}!€}!€}€!~}!€}!€}€!}!€|!!}!€|!!}!€}!€~,ƒ{!†!}!‚,|!!|!!|!!{-!|!!},‚!|!!}!‚,|!!z)„!},‚!{-!},‚!}!‚,}!‚,|!!},‚!|!!},‚!},‚!|!!|!!}€!|!!}!€},‚!~}!€~}€!~~~~~~~~~~~~~~~~~~~~~~~~~z…)v9~-y-~-v9~-y-~-y-~-{!-{!-{!-{!-|!!{!-|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!}!€|!!}!€|!!}€!|!!}€!}!€|!!}€!|!!}!€}!€}€!}€!~}!€}!€}!€}!€}€!}€!}€!|!!}€!}€!}€!}€!}€!~}!€}!€}!€}!€}!€}!€}€!~}!€}€!~}!€|!!~}!€}!€}€!}!€}€!}€!}€!~}!€}!€}€!}!€}!€|!!|!!}€!}!€}!€|!!}!€}!€}€!|!!|!!|!!}€!}!€}€!}!€}!€}!€}!€|!!}€!|!!}!€|!!}!€~,ƒ|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!~|!!}!€}€!}€!~}!€}€!~}€!~}!€~|!!}€!}!€}€!}€!~|!!}€!|!!|!!}!€|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!~ƒ,}€!}!€|!!}€!}€!}€!}!€}!€|!!}€!}€!|!!}€!}€!}!€}!€|!!}!€|!!|!!}€!|!!}€!|!!}€!}€!|!!~|!!}!€}!€}!€}!€}!€|!!}€!}!€|!!}€!}!€}€!}€!}€!}!€|!!}€!}!€|!!{!†!|!!|!!},‚!|!!|!!|!!},‚!|!!|!!{-!{,‚-|!!},‚!|!!z)„!{-!{!-}!‚,|!!{-!{-!}!‚,~,…,{!-{-!{-!x)„-{,‚-{-!{,‚-{,‚-y-~-{-‚,{-6{-6{-6y-~-t9~9vN†‚o–ˆªg¿’ËkԌÚnډÜr܇àyàƒæyàƒæsà†àsà†àr܇àr܇àrà‡Ürà‡Üsà†àq܉Üsà†àrà‡Ürà‡Üsà†àq܉Ür܇àsà†àyæƒàq܉Üq܉ÜjڊÚr܇àyæƒàrà‡ÜkڌÔu܊Ðq܉Ür܇àoàˆÚjڊÚnډÜrà‡Ün܉ÚkԌÚq܉Ür܇àn܉ÚkڌÔjҏÍkԌÚoàˆÚhڎËfːÒjڊÚhڌÒfːÒoڈàn܉ÚeҏÒoڈàoàˆÚiԐËfːÒkڌÔhڌÒhˎÚnډÜjڊÚiԐËfҐËiÒËm͎ÔkԍÔhԎÒm͎ÔhҎÔf˒Ëg¿’Ëf˒Ëb˓ÃfːÒf˒Ëf˒ËfҐËh˔¹f´•­m³³k­‘³n­Œ‚o^|Hu9ƒ4w4ƒ-y-~-{-‚,x)„-x-„){-!x-„){-!y-~-{!-{!-{-!{-!|!!{-!{!-|!!|!!|!!|!!|!!|!!}€!}!€|!!}!€}!€}!€}!€}!€}!€}!€}!€}!€~}€!~~}€!}€!~}€!~~~~}€!~~}!€~}!€}€!~}!€}!€}!€}!€}€!~}!€}€!~~~}!€}€!~~}!€}€!~~~~}!€}€!~}!€|!!~}!€}€!}€!~|!!}€!}€!~}!€}€!}!€|!!}!€|!!|!!|!!|!!}!€|!!},‚!|!!},‚!|!!|!!|!!{-!}!‚,{!-|!!|!!}!‚,|!!|!!},‚!|!!{-!|!!|!!},‚!|!!|!!}!€}!€}€!}€!}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~|!!}€!v-~9v-~9y-~-y-~-y-~-y-~-y-~-{-!{-!{!-{-!{-!{!-|!!|!!|!!|!!|!!|!!}!€}!€}!€}!€}!€|!!|!!}€!}!€|!!}€!}€!}€!}€!}€!|!!}!€|!!}€!}€!~}!€|!!}€!~}!€}!€}!€}!€}!€}!€}€!~}€!}€!~}€!~~}!€}€!}€!}€!}!€~}!€}!€}!€}!€}€!}€!~~}!€~}!€|!!}€!}€!~}!€}!€}€!|!!}!€}!€|!!|!!}€!}€!}€!}!€}€!}!€}!€|!!}!€|!!}€!}€!}!€|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!|!!}!€}!€|!!}€!}€!}€!~}!€}€!}€!}€!}!€}!€}€!}€!~}!€}€!}!€}€!|!!}€!}!€~}€!}€!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!|!!|!!}€!|!!|!!|!!|!!}!€|!!|!!|!!|!!}!€|!!}!€|!!}!€|!!}!€|!!|!!}€!}€!|!!}€!}!€|!!}!€|!!|!!}€!}!€|!!}€!}€!}!€|!!}!€|!!}€!}€!|!!~|!!}!€|!!|!!|!!}!€|!!}€!}!€}€!}€!~|!!~}!€}!€|!!}€!}€!{!†!|!!|!!}!€},‚!|!!|!!|!!{!-|!!}!‚,}!‚,|!!|!!}!‚,|!!{-!}!‚,{!-},‚!{-!{!-{!-{!-y-~-|!!{-!{,‡){!-{,‚-}!‚,y-~-{,‚-y-~-{,‚-~6…,y4†6w-ƒ4{-6y96sHƒ‚pš³lÓÃhҎÔr܇àsà†àsà†àyæƒàyæƒàƒ×}æsà†àsà†àsà†àr܇àsà†àsà†àsà†àrà‡Ürà‡Üq܉Üq܉Üq܉Üsà†àæ€æyæƒàsà†àrà‡ÜjڊÚoԊàsà†àrà‡ÜnډÜn܋ÔjڊÚq܉Üsà†àn܉ÚnډÜq܉ÜjڊÚq܉Üq܉Üq܉Ür܇àn܉Új͏ÒnډÜsà†àkڌÔfːÒjڊÚhڌÒiːÔq܉Ün܉ÚhҎÔq܉Ürà‡ÜhڎËeҏÒhҌÚhҎÔhˎÚq܉Ürà‡ÜfҐËj͏ÒhԎÒf˒ËfːÒeҏÒf˒ËfҐËeÓÃg¿’ËeҏÒf˒Ëg¿’Ëg˒¿g¿“¿g¿’Ëb˓Ãd¼“ËfːÒg˒¿m³³n­Œ‚ou…Vq99y-~-{,‚-y-~-{!-x-„){-!{-!z)„!z)„!{-!|!!{-!{-!|!!|!!{!-|!!|!!|!!|!!|!!|!!}€!}€!}€!~|!!}€!}€!}€!~}!€}€!}€!}€!}€!~}!€~~}!€}!€}!€}!€}!€}!€|!!}€!}€!}!€}€!|!!}€!~}€!~}!€}€!~}€!~}€!~}!€}€!~~}!€~~}!€}!€}!€}!€}!€}€!}€!~}!€~~}!€~}€!~}!€}!€|!!}€!}!€|!!}!€|!!|!!|!!{!†!|!!}!‚,|!!|!!},‚!|!!{!-|!!{-!z)„!{-!|!!{!-}!‚,|!!{-!{-!|!!x-„)z!„)}!‚,|!!|!!}€!|!!}!€|!!~ƒ,}!€{!†!}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~|‡!}!€y-~-v9~-t-9y-~-y-~-{-!{-!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!|!!|!!|!!}€!}!€|!!|!!~}!€}!€|!!~}!€~}!€}€!}!€}€!~}€!}€!}€!}€!|!!}€!}€!~}!€}!€}€!}€!~}!€}!€}€!}!€~}!€~}!€~}!€}€!}€!~|!!~}!€}!€~~}!€}!€}!€}!€~}€!}!€|!!}€!}€!|!!}€!}€!|!!}!€|!!}€!}€!~|!!|!!}€!|!!}!€|!!}!€|!!}!€|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!|!!|!!|!!|!!}€!}!€|!!}€!~~}!€}!€}€!}€!~}!€~}€!}€!}€!}€!}€!~|!!}!€}€!}€!}€!|!!|!!|!!}!€|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€}!€|!!|!!|!!|!!}€!}!€~,ƒ|!!|!!|!!|!!|!!}€!|!!}€!}€!|!!}€!}!€|!!}€!}!€|!!|!!}€!}!€|!!|!!|!!|!!}€!~}€!|!!}€!}!€}!€|!!}!€|!!}€!}€!}€!}€!}!€}!€}!€|!!}€!|!!}€!|!!}!€|!!}!€|!!|!!}€!|!!|!!}!‚,}€!|!!|!!},‚!|!!{!-|!!|!!{!-|!!|!!{-!{-!{!-|!!}!‚,{!-}!‚,|!!{-!},‚!y-~-{!-{!-{-!{-!{,‚-{!-{-‚,{-‚,{6-y-~-y-~-{6-y69w=€fnš­i¿“ÃhҎÔq܉Üsà†à}׀àæ€æyàƒæyàƒæsà†àxæ„Üsà†àr܇àsà†àr܇àsà†àsà†àr܇àsà†àq܉Ün܉Ún܉Úq܉Üsà†àæ€æyæƒàsà†àn܉ÚjڊÚr܇àr܇àyæƒàrà‡ÜkԍÔnډÜq܉Ün܉ÚjڊÚhԎÒkԌÚsà†àrà‡ÜkԌÚq܉Ürà‡ÜjڊÚnډÜsà†àn܉ÚhԎÒkԍÔeҏÒeҏÒkԍÔkڌÔeҏÒkԌÚjڊÚiԐËf˒ËkԍÔhґÃkˑÍnԋÜnډÜmԎÍhҎÔkԌÚg˒¿mÑÍkڌÔf˒ËiÓ¿g˒¿g¿’ËfːÒg˒¿g¿’ËeҏÒiÓ¿i¿“Ãg¿“¿g¿’ËhҎÔiԐËiÓ¿k³‘­h›„‡t‚ƒVqH}Ct9-w4ƒ-y-~-x)„-{!-{!-{-!{-!{-!{-!z)„!z)„!{-!{-!}€!|!!{-!|!!|!!}€!}€!}!€|!!|!!~|!!}!€}!€|!!}€!~}!€~~}€!~}€!}€!~~}€!~}!€}€!~~~}!€}€!}!€~}€!}!€~}€!~}!€}€!~}!€~}!€}!€~}!€~~}!€}€!~~}!€~}!€}!€}!€}!€}€!}!€}!€}€!}!€}!€}!€}€!}€!}€!}€!}€!}€!|!!}!€|!!|!!|!!|!!|!!z)„!|!!|!!z!„)|!!},‚!z)„!},‚!z!„){-!z!„){-!z!„)|!!},‚!{-!|!!},‚!|!!|!!|!!}!‚,~ƒ,~ƒ,}€!}!€}!€}!€}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~~~}!€|!!v-~9v-~9y-~-y-~-y-~-y-~-y-~-{-!{-!{-!{!-}€!{-!|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€}!€}€!}!€}!€|!!|!!}€!}€!}€!}€!}!€}!€}!€|!!~}!€}!€}!€|!!}€!~}!€}!€}€!}€!~}!€}!€}!€}!€~}!€~}!€}€!~~}!€}€!}€!}!€}!€~}!€}!€~}!€}!€~~}!€}!€|!!}€!}€!}!€}€!|!!}€!}€!|!!}€!}€!}€!|!!|!!|!!}!€}€!}€!}!€}€!|!!}€!~|!!}€!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!}€!}€!|!!}!€}!€}!€}!€}!€}€!}€!}€!}!€}€!~}!€}!€|!!}€!}€!}!€}!€}!€}€!}!€}!€|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!|!!|!!}€!|!!|!!}!€|!!|!!|!!}€!|!!}!€}!€|!!}€!|!!}€!}€!}€!}!€|!!}!€|!!~ƒ,}€!|!!|!!|!!}€!}€!}€!}€!}!€|!!}!€}!€}!€|!!}!€|!!}€!~}!€}!€}€!}!€}€!}€!}!€}!€}!€|!!|!!|!!|!!|!!{!-|!!},‚!|!!{-!},‚!{!-}!‚,|!!y-~-|!!{-!z!„){!-{!-{-!{-!{-!{-!{)‡,{!-|!!{-‚,x-„){!-{,‚-{-‚,{,‚-{-‚,w4ƒ-{-‚,{-6v6„9y69rNkh–Ž­g¿“¿kԍÔq܉Üsà†à}׀àyàƒæsà†àsà†àyàƒæ}à€×sà†àr܇àsà†àrà‡Üsà†àsà†àq܉Üyàƒæyæƒàsà†àrà‡Ün܉ÚnډÜr܇àsà†àsà†àsà†ànډÜnډÜjڊÚr܇àsà†àrà‡Ün܉ÚkԍÔkԌÚoڈàn܉ÚiԐËnԋÜyæƒàyæƒàjڊÚnډÜjڊÚjڊÚnډÜq܉ÜjڊÚkڌÔfҐËeҏÒkڌÔhҎÔj͏ÒkڌÔmԎÍhԎÒjڊÚhԎÒf˒ËfːÒf˒ËhҎÔhԎÒeҏÒhҎÔkڌÔfҐËfːÒkԍÔfґ¿i¹”¿i¿“ÃiÓ¿f˒Ëg˒¿g¿’ËiːÔfґ¿a¼•¼f˒Ëg¿’Ëf˒ËhԎÒg˒¿d¿”¼k³‘­pª‹­o‡„‚om‡Hu9ƒ4y-~-x)„-y-~-{-!y-~-{!-|!!{-!{-!{-!z!„)|!!{-!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!~}!€}!€~}!€~}!€}€!}!€}!€}!€}!€}€!}!€}!€}€!~}!€}!€}!€}€!}€!~}€!}€!~}€!}€!~}€!}€!}€!}€!}€!}!€~~}!€}€!~~}€!~~}!€}€!}€!}!€~}€!~}!€}!€|!!~}€!~}€!}€!}€!}€!}!€|!!|!!{!†!|!!}!€|!!|!!|!!|!!|!!}!‚,|!!|!!{-!|!!|!!|!!{-!}!‚,}!‚,{!-},‚!},‚!{-!}!‚,}!‚,|!!},‚!|!!{,‡)|!!}!€~,ƒ|!!}€!}!€|!!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~}€!~}!€v-~9y-~-v-~9y-~-y-~-{!-{-!y-~-{!-|!!{-!{-!|!!|!!|!!|!!|!!}€!}!€|!!|!!}!€{-€|!!|!!|!!}€!}!€}!€|!!~}!€|!!~}!€}!€}€!}€!~}!€~}!€}€!|!!~|!!}€!~}€!~}!€}€!}€!~}€!}€!~}!€|!!~}€!}€!~}!€}€!~}€!~}!€}€!~}!€}€!}!€}!€}!€}!€|!!}€!|!!}€!}€!}!€|!!}€!}!€}!€}!€|!!}€!|!!}!€}!€|!!}!€}!€|!!|!!}€!|!!}€!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!}€!|!!}!€}!€}!€}!€}!€}!€}!€~}!€}€!~}!€}!€}€!~}!€}€!~}!€~|!!~}!€}!€|!!|!!}€!~ƒ,}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!}!€~,ƒ|!!|!!}€!}€!|!!}!€|!!}€!|!!|!!}€!|!!}€!}€!}!€}!€|!!}!€}!€|!!|!!|!!|!!|!!}€!}€!|!!|!!}!€|!!|!!|!!}€!|!!}€!}€!}!€|!!|!!}€!}€!|!!|!!}!€|!!}!€|!!|!!|!!|!!}!‚,|!!|!!|!!},‚!|!!}!‚,|!!{-!}!‚,{!-|!!|!!}!‚,{!-}!‚,}!‚,|!!{-!{-‚,}!‚,{!-{-‚,},‚!y-~-{-‚,{-‚,y-~-y4†6w-ƒ4{-6u=~bl–«j³‘ËkԌÚq܉Üsà†àsà†àsà†àsà†àsà†àsà†à}à€×sà†àsà†àrà‡Ürà‡Ür܇àrà‡Üq܉Üoڈàsà†àsà†àyæƒàyàƒæq܉Üq܉Üsà†àn܉Úq܉Üq܉ÜoàˆÚrà‡ÜjڊÚjڊÚr܇àrà‡Ürà‡Ün܉Úm͎Ôoڈàn܉ÚkڌÔkԌÚr܇àrà‡Ün܉ÚkԍÔkԍÔoڈàoàˆÚkԍÔjڊÚn܉ÚiԐËhˎÚjڊÚiԐ¿hҎÔnډÜhڌÒiːÔnډÜkڌÔi˒ÃhҎÔkڌÔg¿“¿hÑÒf˒ËfːÒhҎÔfҐËiÒËfːÒfґ¿i¿“ÃhҎÔf˒Ëg¿’Ëb¿“Ãi¿“ÃfːÒf˒Ëg¿’ËfːÒfҐËg¿’Ëf˒Ëg¿’Ëf˒Ëg˒¿d¼”¿l³’¥h–†‡tf9y-~-y-~-x-„)x-„){-!{!-{-!z)„!{-!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}€!|!!}!€|!!}!€}!€}!€}!€}!€~}!€~}!€}!€}€!}€!~}!€~}!€}€!}€!}€!}€!~}!€}!€~}!€}€!~}!€~}!€}!€~}!€}€!~}!€~|!!~}!€}€!~}!€}€!~}!€}!€}!€}€!}!€~}€!}€!}€!}!€}!€}€!}€!}€!~~,ƒ}€!|!!|!!|!!{!†!},‚!|!!},‚!|!!z)„!~,ƒ|!!x)„-{!-|!!},‚!},‚!|!!|!!{-!|!!{,‡){-!|!!|!!z!„){-!|!!}!‚,|!!|!!|!!~ƒ,~}!€}€!}€!~~}!€~~~~~~~~~~~~~~~~~~~~~{!†!|!!v9~-t-9y-~-y-~-y-~-y-~-{-!y-~-|!!{-!|!!|!!{-!|!!|!!|!!|!!|!!|!!}€!|!!|!!~|!!}€!}€!}€!}!€}€!~}!€}€!~}€!}€!}!€}!€}!€}€!}€!}€!~}!€}!€}€!~}!€}!€}!€}€!}€!~~}€!~~}€!~~~}!€~}!€}!€}!€}!€|!!}€!~}!€}!€}€!~~}€!}€!}!€}€!}€!}!€|!!}!€}!€}!€}!€}!€}!€|!!}€!|!!}€!}€!|!!}€!}!€}!€}€!}!€}€!}€!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!}€!|!!}€!}!€}!€}!€}€!}!€}!€}!€}€!~}!€}!€}€!}€!~}€!}!€|!!}€!}€!}€!}€!~|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!|!!}!€|!!}€!|!!}!€}!€|!!}€!|!!}!€}!€|!!|!!}!€|!!}€!}!€|!!}€!}!€|!!}€!}!€}!€~,ƒ|!!}€!}€!}!€}!€}!€}!€~|!!}€!}!€|!!}!€}!€|!!}!€|!!},‚!|!!|!!},‚!|!!|!!},‚!},‚!|!!{-!},‚!|!!},‚!{-!{!-{!-{-!{-!},‚!{!-{!-{!-{,‚-}!‚,{!-},‚!},‚!{-‚,{-‚,{-‚,y-~-~,…6y-~-y6†4y=‚Nr‡ƒ¢j³‘Ëm͎ÔnډÜsà†àsà†àsà†àsà†àyàƒæsà†àyàƒæyàƒæyàƒærà‡Üsà†àx܄æsà†àrà‡Ün܉Úrà‡Ün܉Úsà†àyàƒærà‡Üq܉Üyàƒærà‡Ün܋ÔkԍÔkԌÚr܇àsà†àn܉ÚkڌÔjڊÚoڈàyàƒærà‡ÜkڌÔjڊÚn܉ÚkڌÔkڌÔq܉Ün܉Ún܉ÚhڎËfːÒsà†àrà‡ÜkԍÔnԋÜsà†àkڌÔjڊÚoàˆÚhڌÒhˎÚjڊÚhڌÒhҎÔjڊÚn܋ÔjҏÍnډÜn܋Ôg˒¿hÑÒkڌÔf˒Ëg¿’ËkԍÔfҐËf˒ËiÓ¿eÓÃfːÒiԐ¿g¿’ËhԎÒg˒¿f˒Ëg˒¿g¿’ËiːÔfҐËg¿“¿iÓ¿iÓ¿f˒Ëf˒Ëg¿“¿j¿‘³pª‹­l›ˆ‚vH~-w4ƒ-{,‚-{,‚-{)‡,x-„){!-{!-|!!x-„){!-|!!|!!{-!z)„!|!!|!!|!!}€!|!!|!!}€!}€!|!!~}!€|!!}€!}€!~}!€}!€}!€}!€}€!}€!}!€~}!€}€!}€!}€!}€!}€!}€!~}!€}!€}!€}€!}!€}!€}!€}!€}!€}€!}€!~}!€}€!~}€!~}!€~}!€}€!~}€!}€!~}€!~}€!}!€}€!~|!!}€!~}!€}€!~}!€}!€|!!}!€|!!|!!|!!~ƒ,~ƒ,|!!z)„!|!!|!!|!!|!!}!‚,}!‚,|!!z)„!{-!}!‚,|!!{-!x-„)|!!x-„)|!!|!!{!-}!‚,|!!|!!|!!|!!|!!{!†!}!€},‚!}€!}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~|!!y-~-v9~-y-~-y-~-y-~-y-~-{!-{-!{-!{-!{-!{-!|!!{!-|!!|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!}!€|!!}€!}!€|!!}€!}!€}€!|!!}€!~}!€|!!~}!€~}!€}!€}€!}!€}€!~}€!}€!~}€!}€!~}!€}!€}!€}!€}€!}€!}€!}€!~~~}!€~~~}!€}!€~}!€~}!€}!€}€!}€!}!€|!!}€!}!€|!!}€!|!!|!!|!!}€!}!€}!€}!€|!!}€!}€!}!€}€!|!!}!€|!!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}€!}€!}!€|!!}€!|!!}!€}!€}!€}!€}€!~}!€~}€!~}!€}!€~}!€|!!~}!€~}€!~}!€}!€}!€|!!}€!}!€}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!}!€|!!}€!|!!}€!|!!}€!|!!|!!|!!}!€}!€|!!}!€|!!}€!}€!}€!}!€|!!}€!|!!}€!|!!}€!}€!}!€|!!}€!|!!}!€}€!}!€|!!|!!|!!}!€|!!|!!}!€}!€|!!~ƒ,|!!|!!|!!}!‚,|!!|!!},‚!},‚!|!!{-!{-!},‚!{-!{-‚,|!!},‚!{-!},‚!},‚!{!-|!!{-!},‚!{-!}!‚,{-‚,x-„)y-~-{!-{-‚,{-‚,{-6y4†6{-6y4†6t9~Hpk‚šj­’ÃiːÔjڊÚsà†àsà†àyàƒæsà†àyæƒà}à€×yàƒæyàƒæyàƒæsà†àsà†àr܇àyæƒàyæƒà}à€×rà‡ÜjڊÚq܉Üsà†àq܉Ürà‡Üq܉Üsà†àyæƒàn܉ÚjڊÚkԍÔoڈàsà†àoàˆÚnډÜkԍÔnԋÜyàƒæyæƒàoàˆÚkڌÔkԍÔkԌÚn܉ÚkڌÔnډÜsà†àkڌÔm͌ÚyàƒæyæƒàhڌÒjڊÚrà‡ÜjڊÚjڊÚq܉ÜhڌÒhҎÔkԌÚhԎÒhҎÔjڊÚn܉ÚeҏÒkԌÚn܉ÚiԐËf¿‘ÒkԌÚhґÃiːÔnډÜhڎËj¿‘³g¿“¿i¿“ÃfːÒfҐËf˒ËhҎÔfҐËi¹”¿f˒Ëg˒¿fːÒb˓Ãg¿“¿j͏Òi˒Ãi¿“ÃiÒËbÓËf˒ËiÓ¿j¿‘³k›‚bvNHu9ƒ4y-~-x-„)x-„){-!{-!{-!{!-|!!{!-|!!|!!{!-z!„)|!!|!!|!!}!€|!!}!€|!!}!€}!€}!€}!€}€!}€!}!€}!€}€!}€!}!€}€!}!€}€!}€!~}!€}€!}€!~}!€}!€|!!}€!~}€!~}€!~}!€}€!}€!~~}!€}€!~}€!~}!€~}!€}!€}€!}€!}!€}€!}€!~}€!~}€!~}€!~}€!}€!}€!}!€}!€}!€|!!}€!|!!|‡!|!!}!€|!!|!!|!!|!!},‚!|!!{-!|!!},‚!|!!}!‚,|!!}!‚,|!!{!-}!‚,|!!{-‚,|!!},‚!{-!{-!},‚!},‚!}!‚,|!!|!!|!!|!!|!!}!€}€!}€!}€!}€!~}!€}!€~~~~~~~~~~~~~~~~~~~~~}!€|!!v9~-t-9y-~-y-~-y-~-{!-y-~-{!-{!-|!!|!!{!-{€-|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!}!€}!€|!!}€!|!!}€!}€!~|!!}€!}€!~}!€~}!€}!€|!!~}!€}!€}!€}€!}!€}€!}!€|!!}€!}€!~}!€}€!~}€!~}!€~~}!€}!€|!!}!€~}!€}!€}!€~}€!|!!~}!€}!€~~|!!~}!€|!!~|!!}€!~}!€}!€}!€|!!}!€}€!}€!}!€|!!}€!|!!}!€|!!}€!}!€}!€|!!}€!}!€|!!}€!|!!|!!|!!}!€|!!|!!|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!}€!}€!}€!}€!}!€}!€}€!~~}!€~|!!~}€!~~}!€}!€}€!}€!}€!}€!}€!|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!}!€},‚!|!!|!!|!!|!!|!!~ƒ,}€!~ƒ,}€!|!!}!€|!!}!€|!!}!€~,ƒ|!!}!€|!!}€!}€!}€!|!!}!€}!€|!!}€!|!!}€!|!!}€!|!!}€!|!!}!€|!!|!!|!!}!€|!!}€!|!!}!€|!!}€!}€!}€!}€!|!!}€!}€!|!!|!!}!€|!!|!!|!!|!!|!!}!‚,|!!|!!}!‚,|!!},‚!|!!}!‚,|!!{!-|!!{-!|!!{!-{)‡,{!-{,‚-}!‚,}!‚,},‚!{-!{-!{-‚,{,‚-{-‚,w-ƒ4y-~-{-‚,w4ƒ-u4ƒ9vN†‚l¥’³k¿‘ÍkԌÚr܇àyæƒàyàƒæsà†àyæƒàsà†àyæƒàsà†àsà†à}׀àsà†àrà‡Üx܄æyàƒæyàƒæyæƒàsà†àrà‡Üsà†ànډÜr܇àq܉Üq܉Ür܇àsà†àsà†àq܉ÜjڊÚnډÜr܇àoڈàr܇àkڌÔkԌÚsà†àsà†àn܉Ún܋Ôj͏ÒnډÜsà†àoàˆÚnԋÜsà†àn܉ÚhҌÚr܇àrà‡ÜkڌÔm͎ÔjڊÚhԎÒhҎÔhڌÒhڌÒeҏÒfҐËhҎÔhҎÔj͏ÒfːÒf˒Ëm͎ÔkԌÚi˒Ãf˒ËkԌÚfҐËp͌Üsà†àk܌Òg¿“¿f˒Ëg˒¿i¿“Ãi˒Ãg¿’ËkˑÍfҐËeÓÃfҐËb˓Ãg¿’Ëg¿“¿d¼“ËiːÔiԐËg¿“¿d¿”¼i¿“ÃjҏÍjҏÍg˒¿k³‘­f‡ˆƒnu„Hw4ƒ-y-~-{-!{-!{-!z)„!{-!{!-|!!z!„){!-|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!|!!}€!|!!}!€|!!}€!}€!}€!~}!€|!!~}!€}€!}€!}€!~}!€}€!~}€!~}!€|!!}!€}€!}!€}!€}!€}!€~}!€}€!}!€}!€}!€}!€}€!}€!}€!}€!~}€!~~~}!€~}!€}!€}!€}!€}!€}!€}!€}!€}!€}€!~|!!}€!|!!~|!!}!€|!!{!†!|!!|!!|!!|!!z!„)|!!|!!|!!{-!},‚!{!-|!!{-!{-‚,|!!~,…,|!!{!-{!-|!!z)„!|!!|!!},‚!{!-|!!|!!|!!|!!|!!}!€}!€}!€}!€}€!~~}!€~~~~~~~~~~~~~~~~~~~~}€!{!†!y-~-v9~-y-~-y-~-y-~-y-~-{-!y-~-|!!{-!{!-|!!{-€|!!|!!|!!}!€|!!}€!|!!|!!}€!|!!}€!}€!}€!}!€}!€|!!}€!}€!}!€}€!}€!}!€}!€|!!~}€!~}!€}€!}€!}€!}€!}€!}€!~~}!€~}!€}€!~}€!~~}€!}€!}€!~~~}!€}!€}!€}€!}€!~~~}!€~}!€}!€|!!}€!}€!}!€}!€|!!}!€|!!}€!|!!}!€|!!}€!}€!|!!}€!}€!}€!}!€}!€|!!}€!}!€|!!}€!|!!}€!}€!|!!|!!|!!}!€|!!|!!|!!|!!}!€|!!|!!|!!}€!}€!}€!|!!}€!|!!}!€|!!}€!}!€}!€~}!€}!€}!€|!!}€!|!!~}!€~}!€}€!}€!}!€}!€}!€}!€}!€}!€}!€}€!}€!}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!}!€|!!}€!}!€|!!}!€|!!|!!|!!}€!|!!}!€|!!|!!|!!|!!}€!|!!}!€|!!}€!|!!}!€}!€}!€|!!|!!|!!}€!|!!}!€|!!|!!}!€~,ƒ|!!}€!|!!}!€|!!|!!|!!|!!}!‚,|!!},‚!{!-|!!},‚!}!‚,{!-{!-{!-|!!},‚!{-!},‚!},‚!{,‚-{-!{!-{-!{!-{-!{-!y-~-}!‚,}!‚,{-!{-‚,{-‚,{,‚-~,…6{-6w4„=rNkj–޳g¿’Ëm͌Úq܉Ü}׀àyæƒàyæƒàyàƒæsà†àyæƒàsà†à}׀àæ€æyàƒæq܉Ün܉Úsà†àyàƒæyàƒæyàƒæsà†àsà†àr܇àrà‡Üsà†àrà‡ÜjڊÚnԋÜq܉Üyàƒæsà†àn܉Ún܉Ún܉Úr܇àsà†àrà‡ÜjڊÚq܉Üq܉ÜnډÜoàˆÚmԎÍoڈàyàƒærà‡ÜjڊÚnډÜkڌÔhҌÚjڊÚn܉ÚkԍÔfҐËf˒ËkԌÚhڌÒf˒ËjڊÚhڌÒg˒¿hˎÚkڌÔh˔¹g¿’Ëf˒Ëf˒Ëf˒Ëf˒ËiÒËf˒Ëf˒ËhҌÚr܇àn܋Ôf˒ËkԌÚfҐËi¿”¹f˒ËhґÃf˒Ëg˒¿iÒËhҎÔfҐËi¹”¿b¿“Ãg¿“¿iːÔiԐËh¿’­g¿“¿g¿“¿g¿’ËiԐËi˒Ãh¿’­h¥Ž›mšƒŒo^|9w4ƒ-y-~-x-„){-!{-!{!-z!„)|!!{-!|!!|!!|!!|!!|!!|!!z…)|!!|!!|!!}€!}!€|!!~|!!~}€!}€!}!€}!€}!€}!€}€!}€!}!€}!€~}!€}!€|!!}€!}€!}!€}!€}€!}€!}!€~}!€~}€!}!€}€!}!€~~}€!~}!€}!€~}!€}!€}!€}€!|!!|!!~}€!~}€!}€!~~}!€}€!~}!€}!€|!!~}!€}!€|!!}€!|!!|!!|!!|!!|!!},‚!}!‚,|!!},‚!{!-|!!z!„)z!„)z!„){-!z!„)|!!{-!|!!{-‚,|!!},‚!},‚!{!-{!-|!!|!!z)„!}!‚,}!‚,~ƒ,}€!}€!~ƒ,}€!~~}!€}!€~~~~~~~~~~~~~~~~~~~~~}€!~~v9~-t9-y-~-y-~-y-~-{-!y-~-{-!{-!{!-|!!|!!{!-}€!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!|!!}€!}!€|!!}€!}€!~}!€}!€~}€!~}€!}!€|!!}€!~}!€}!€}!€}!€}€!}€!}€!~}!€}€!}!€~}!€}€!}€!}€!~~~}!€}€!~}€!~}!€~}€!}!€}!€}!€~}!€}€!~}!€}!€}!€|!!}€!}€!|!!}!€}!€}!€}!€|!!}!€}€!|!!}€!}€!|!!}€!}!€|!!}€!}!€}!€|!!|!!}!€|!!|!!~|!!|!!|!!}!€|!!|!!}!€|!!}!€}€!}!€|!!}€!}!€|!!}!€}!€}!€}!€|!!~}!€}!€}€!~}€!~}!€~}!€}€!}€!~}!€}€!}€!}€!}€!}!€}€!}!€}!€}!‚,}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}!€|!!}€!}!€}!€}!€}!€|!!}€!|!!|!!|!!}€!}€!|!!}€!}!€|!!|!!}!€|!!|!!|!!}!€}!€}!€|!!|!!}€!|!!}€!}€!}!€|!!}!€~,ƒ|!!|!!|!!|!!},‚!|!!{-!|!!},‚!{-!}!‚,{!-|!!|!!},‚!y-~-{!-|!!{-!{-!x-„)|!!},‚!|!!{-‚,}!‚,{-!{-!x)„-{-!y-~-{,‚-w-ƒ4y-~-w-ƒ4v-~9w=Vr‡ƒ¢i¿“ÃkÎÚsà†àyàƒæsà†àyàƒæsà†àsà†àsà†àyàƒæsà†àsà†àsà†àyàƒæq܉Üq܉ÜnډÜsà†àsà†àr܇àr܇àq܉Ün܉Úr܇àƒ×}æsà†àn܉Ún܉ÚnډÜr܇àsà†àoڈàq܉ÜkڌÔkԍÔq܉Üq܉ÜjڊÚkڌÔhҌÚx܄æsà†àjڊÚr܇àsà†àrà‡ÜjڊÚkԍÔeҏÒhҎÔkԍÔiːÔjڊÚhڎËiÒËnډÜhڌÒiːÔjڊÚjڊÚf˒ËnډÜrà‡ÜkԐÃf¿‘ÒjڊÚi˒Ãh¹”ËkԍÔhґÃj¹–¹f˒ËiːÔkԌÚkڌÔf˒ËkԍÔiԐËbÓ¿eҏÒfҐËg¿“¿g¿’Ëf˒ËfːÒaґÃd¼”¿f˒Ëf˒Ëk¿‘Íi˒Ãf¼–¹g¿’Ëf˒ËiÓ¿iÒËi˒Ãjˑ³g¿“¿m³³pš‚k{Z=w4ƒ-x)„-{!-{!-z)„!{-!x-„)|!!{-!x)„-|!!|!!|!!|!!|!!|!!}!€}!€}€!}!€}!€|!!}!€|!!|!!}€!}!€}!€}!€}€!~}!€~}€!}€!~}!€}€!}€!}€!}€!}€!}!€}€!}€!}!€}!€|!!}€!}€!~}!€}!€}€!}€!~}!€~}€!~}!€}€!}!€~~}!€}!€}!€}!€~|!!|!!}€!}!€|!!}!€}!€}!€|!!}€!~ƒ,}€!|!!|!!|!!|!!z!„)|!!z)„!|!!|!!|!!}!‚,|!!},‚!|!!{-!{!-},‚!{-!x-„){!-|!!z)„!{-!|!!},‚!z)„!}!‚,}!‚,|!!z!„)|!!}!€}!€~,ƒ}!€}€!}€!}€!~~}!€~~~~~~~~~~~~~~~~~~~~~}€!|!!y-~-v-~9y-~-y-~-y-~-y-~-|!!{-!{-!{-!{-!|!!|!!{-!|!!|!!|!!}!€}!€|!!|!!|!!|!!}!€|!!}€!}€!}€!}€!~~|!!~}€!}€!~|!!~~}!€}€!}€!}€!~}!€}€!~}!€}!€}!€}!€}!€~}€!~}!€~~}!€|!!~~}!€}€!~}!€}€!}€!~}€!}€!~|!!}€!~|!!~}!€|!!}€!}!€|!!}€!}!€|!!~|!!}€!}€!}!€|!!}€!}!€~|!!}€!|!!}€!}!€|!!~}€!|!!}€!|!!~ƒ,|!!}!€}!€|!!|!!|!!|!!}€!}€!|!!}!€|!!}€!|!!}€!}€!|!!|!!}€!~|!!}!€}€!~}€!~|!!}€!}€!}€!}€!~}!€}€!~~}!€~}€!}€!~|!!}!€}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!~,ƒ|!!}€!|!!|!!|!!}!€}!€}!€|!!}!€|!!|!!},‚!}€!|!!}€!|!!}!€}!€|!!|!!}€!~ƒ,~}!€|!!~},‚!|!!|!!}€!~,ƒ|!!}!€z!„)|!!|!!|!!|!!{!-|!!|!!{!-|!!{!-{!-{-!{!-|!!{!-}!‚,{-!{-!},‚!{,‚-}!‚,y-~-{!-}!‚,{!-{,‚-},‚!{,‚-{-‚,{-‚,{-‚,{-6u4ƒ9y6Vsk€¢l³’ÃiːÔr܇àsà†àsà†à}׀àsà†àyàƒæsà†àyæƒàyæƒàsà†àsà†àyæƒàyæƒàyæƒàrà‡Ür܇àsà†àrà‡Ürà‡ÜoàˆÚn܉ÚkڌÔsà†àyæƒà}׀àq܉Ün܉ÚnډÜnډÜq܉Üsà†àsà†àkڌÔkԌÚjڊÚkԌÚrà‡Ün܉ÚkԍÔsà†àyæƒàoàˆÚq܉Ür܇ànډÜkڌÔiԐ¿kˑÍnډÜhԎÒkÐÔr܇àoàŠÔm͎Ôoڈàn܉ÚkԌÚr܇àoàˆÚhҎÔr܇àxæ„ÜkԐÃiːÔkԌÚdڎÃkÐÔjڊÚhڎËi¿“ÃkԌÚhڌÒi˒Ãf˒Ëf˒ËfːÒfҐËi¿“ÃfːÒiԐËg¿“¿hҎÔf˒Ëf˒Ëg˒¿d¼”¿fːÒhґÃg¿“¿b¿“Ãj³‘¿g¿’Ëk͑ËbÓ¿j¿‘³g¿’Ëf˒Ëi˒Ãf˒Ëh¿’­hŒ‡mx|Hy-~-{,‚-{!-{!-|!!{!-|!!|!!|!!|!!z!„)|!!|!!|!!}!€|!!|!!}!€|!!}€!}!€}!€~}!€|!!~|!!}!€}!€|!!}!€}!€}!€}!€|!!}€!}!€}€!~}!€|!!}€!}!€|!!~}€!~}!€~}!€~~}!€}€!~}€!}€!~}!€}€!~}!€}!€}!€}!€}!€~}!€|!!~}€!}!€}€!~}€!~}!€}!€|!!}!€}!€~,ƒ}!€|!!|!!}€!|!!|!!|!!},‚!|!!z!„){!-|!!{-!|!!},‚!|!!x-„)}!‚,}!‚,{!-},‚!{-!{-!{!-|!!},‚!|!!}!‚,|!!|!!z)„!~,ƒ}!€},‚!}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~~}€!v-~9y-~-y-~-y-~-{-!y-~-y-~-{-!{-!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}!€|!!}€!}!€|!!~}€!|!!}€!~|!!~}!€}!€~~}!€}€!}!€~}!€}!€}€!}€!~}!€}€!~~}€!~}€!~~}!€}!€~~}€!}€!}€!~~|!!}€!~}!€}!€}!€}€!~~}!€}!€|!!|!!}€!|!!}€!}!€}!€|!!}!€}!€}€!}!€|!!~}€!|!!|!!|!!~ƒ,}€!}€!}€!}€!}!€|!!|!!}!€}!€|!!}!€}!€|!!|!!|!!}!€|!!}€!|!!}€!}!€}!€}!€}!€}€!}€!}!€~}!€~|!!}€!~}€!}€!}!€}!€~}€!~}!€~}€!~~}€!}!€}€!}€!}!€}€!}€!}!€}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!|!!}€!|!!}€!}€!|!!|!!|!!|!!}!€|!!}€!|!!}!€~,ƒ}!€|!!~ƒ,|!!}€!|!!|!!}!€~,ƒ~,ƒ},‚!}€!}€!{!†!|!!}!€~,ƒ},‚!|!!}!‚,}!€{-!|!!|!!{!-}!‚,|!!{!-|!!},‚!}!‚,{-!},‚!{,‚-{!-|!!{,‚-{!-}!‚,|!!},‚!x-„){-!x-„){-!{-‚,{-‚,y-~-{,‚-{,‚-{6-w9=pk‚šj­’Ãm͌Úsà†àsà†à}à€×sà†àsà†àsà†àyæƒàæ€æyàƒæyàƒæsà†àyàƒæyàƒæsà†àyæƒàsà†àyæƒàsà†àsà†àyæƒàq܉ÜnډÜn܉Úq܉Üsà†àsà†àæ€ærà‡Ün܉Úq܉Ün܉Úr܇àsà†àn܉ÚkԌÚhԎÒnԋÜsà†àrà‡ÜjڊÚr܇àr܇àn܉Ún܉ÚhڌÒoڈàsà†ànڎÆhҌÚsà†àkڌÔiːÔr܇àoàˆÚhԎÒq܉ÜoàˆÚkڌÔnډÜhڌÒfːÒnډÜsà†àhԎÒf˒ËkڌÔhڎËiÒËnډÜhڎËkˑÍnډÜn܋Ôi¿“ÃiːÔhԎÒiÓ¿g¿’Ëb˓Ãk¿‘ÍeҏÒg¿’Ëm͎ÔkڌÔg¿“¿b¿“Ãb˓Ãf˒ËfҐËd¼”¿i¿“Ãg˒¿i¿“Ãfґ¿g¿“¿g¿“¿i¹”¿g¿’Ëk͑Ëk͑ËiÓ¿n­šj¥Š‡tN„9w4ƒ-x)„-z)„!{-!{-!z)„!{!-|!!z)„!|!!|!!|!!|!!|!!}!€|!!|!!|!!}!€|!!}€!|!!|!!}!€|!!}!€|!!}€!}!€}!€|!!}€!}!€}€!}!€}€!}€!}!€}€!~}!€}!€~}€!}!€|!!}€!~}€!}€!}€!}!€}€!}€!~}!€}!€~|!!}€!}€!~}€!~}€!}€!}!€}!€|!!~}!€|!!}€!|!!}€!}!€|!!{!†!}€!|!!}€!|!!|!!|!!},‚!|!!|!!z)„!{!-{)‡,|!!|!!{-!|!!{!-}!‚,z!„)}!‚,{!-|!!{-!|!!z)„!{-!z)„!{!-|!!{-!|!!|!!|!!|!!|!!}€!~}!€}!€}!€~}€!~~~~~~~~~~~~~~~~~~~~~~}€!|!!y-~-t-9y-~-y-~-y-~-{-!{-!{-!{!-{!-|!!|!!{-!}€!|!!|!!}!€|!!}!€|!!}€!}!€}€!}!€|!!}€!}!€|!!}!€}€!~}!€}€!}€!~}€!~|!!}€!~~|!!~}€!~}€!}!€}€!~}!€|!!~|!!~}€!}!€~~}!€}!€}!€~}€!}€!}€!~}€!}!€}€!~~}!€}€!}!€}!€|!!}€!}€!}!€}!€}!€}€!}€!}!€}!€|!!}!€}!€|!!|!!}!€}!€}€!~}!€|!!|!!}€!}€!|!!}€!}€!}€!|!!~|!!|!!}€!}€!|!!}!€|!!|!!}€!}!€}!€|!!}€!}!€|!!}!€}€!|!!}€!}€!~}!€}!€}!€}!€}€!}€!|!!~}!€}!€}!€}!€|!!}€!}!€~}!€}€!}€!}!€}!€|!!}€!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!|!!}!€}!€~,ƒ~,ƒ|!!}!€}!€|!!}!€}!€|!!|!!}€!}!€|!!}!€}!€~,ƒ|!!|!!}!€|!!}€!}!€}!€}!€},‚!|!!}€!}!€|!!}€!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!{!-z!„){-!},‚!},‚!{-!{-!},‚!y-~-{!-{!-z!„){!-}!‚,{-!{,‚-}!‚,{!-{-!{-!{-!z)„!{-‚,{!-{-‚,y-~-{!-z4‡,{-6w-ƒ4{-6w=„‚h­’¿kÐÔr܇àyæƒàyæƒàyæƒàæ€æyàƒæ}à€×yàƒæyàƒæyàƒæyàƒæsà†àsà†àyàƒæ}à€×sà†àsà†àsà†àsà†àyàƒæyàƒæsà†àsà†àrà‡Üq܉Üsà†àq܉Üsà†àrà‡Üsà†àsà†àn܉ÚkԌÚn܉ÚjڊÚoàˆÚmԎÍkԌÚyàƒæsà†ànډÜq܉ÜjڊÚr܇àrà‡ÜkԍÔoڈàyàƒæjڊÚnډÜsà†àoàˆÚhҎÔnԋÜn܋ÔhԎÒkԍÔkڌÔhҎÔkԍÔfːÒhҎÔkԍÔkڌÔfҐËfːÒfҐËf˒ËhÑÒkԍÔeҏÒfːÒnډÜn܋Ôf˒ËhҌÚkڌÔi¿“Ãj͏ÒhґÃg¿“¿b¿“Ãi¿“ÃhҎÔhڎËf˒Ëm͎ÔhґÃg¿’Ëf˒Ëg¿“¿fːÒf˒Ëi¿“ÃiÒËj¿‘³g¿“¿g¿“¿g¿“¿f˒Ëf˒Ëi˒Ãm³³i­’¥k–„bxH6y-~-{-‚,{!-{-!{!-z)„!{!-|!!|!!|!!|!!|!!|!!|!!}!€}€!}€!}€!}!€}!€}!€}!€|!!}!€|!!}€!}€!}!€|!!~}!€}€!~}€!}€!}€!}€!}€!}€!}€!}€!}€!}€!~}!€~|!!~}!€~}€!}!€~}!€}!€}€!~~~|!!~}!€}€!}!€~}€!}!€~}€!}€!}€!~}!€}!€}!€}!€|!!}!€},‚!|!!|!!|!!|!!|!!},‚!},‚!|!!|!!|!!z)„!{-!}!‚,z!„){-!|!!{-!},‚!|!!}!‚,}!‚,{!-z!„)|!!},‚!}!‚,|!!z)„!{-!|!!|!!}!€~,ƒ|!!~,ƒ}!€}!€}€!~ƒ,~~~~~~~~~~~~~~~~~~~~~~~~}€!t-9y-~-y-~-y-~-y-~-{!-y-~-{!-{!-{!-{!-|!!|!!{-!|!!|!!|!!}!€|!!}!€|!!|!!|!!}€!}€!|!!}€!}€!}€!}€!}€!}!€}!€~}€!|!!}€!}€!~}€!}€!~}!€~|!!}!€~}€!~~~}€!~~}!€~}!€}€!~~~}€!~}€!~}!€}!€~}!€}!€}€!~}!€~|!!}€!}€!~}€!}€!}€!|!!}!€}!€|!!}€!}€!}€!|!!~|!!}€!}€!|!!}€!}€!}!€}€!}!€}€!~|!!|!!}€!|!!}€!}!€|!!|!!}€!|!!}!€}!€}!€}€!}€!}!€}€!}€!}!€}!€|!!~}!€}!€}!€~}!€}!€}!€}€!}€!~}!€}!€~}!€~~}!€}€!}€!~}!€}!€~|!!}!€|!!}!€}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€|!!|!!|!!}!€|!!}€!|!!|!!}€!|!!|!!}€!|!!|!!}!€|!!|!!}€!}€!}!€|!!}!€|!!|!!}!€},‚!}!€|!!|!!|!!|!!|!!}€!|!!}€!|!!}€!|!!|!!|!!|!!|!!z!„)|!!|!!|!!{!-|!!{!-{!-|!!},‚!},‚!|!!{-‚,|!!{-!{-‚,{!-{)‡,{!-y-~-x)„-~,…,}!‚,{-‚,{-‚,{,‚-{,‚-{,‚-z,‡4y-~-x6Hl‡ˆ³k¿‘Íoڈàsà†àyàƒææ€æyàƒæsà†àyæƒàyàƒæsà†àyæƒàyàƒæsà†àr܇àr܇àrà‡Üsà†àsà†àrà‡Ün܉Úsà†àsà†àyæƒàæ€ææ€æsà†àsà†à}׀àq܉Üq܉Üq܉Üsà†àyæƒàoàˆÚjڊÚhҌÚjڊÚsà†àoàˆÚnډÜq܉Üq܉Ün܉Ún܉Úm͎Ôsà†àsà†àjڊÚq܉Üyæƒàn܉ÚnډÜq܉Ün܋ÔhԎÒfːÒeҏÒjҏÍf˒ËhˎÚkԍÔhґÃfːÒnډÜiԐËhÑÒjڊÚkԐÃiÓ¿k͑Ëi˒Ãi˒Ãi˒Ãg¿’ËkԌÚhڌÒf˒Ëm͎ÔkԍÔfːÒjڊÚhڌÒi¿”¹g¿’Ëg˒¿iÒËfҐËi˒ÃhҎÔhڎËj¿‘³g¿“¿g¿“¿iÒËfҐËd¿”¼g¿“¿g¿“¿a¼•¼g¿“¿i¿“ÃiÓ¿iÒËk͑Ëb˓Ãg¿“¿g­Œ›f‡ˆƒwV=w4ƒ-w)‰)|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!}€!|!!|!!|!!}!€|!!|!!}€!|!!}!€}€!}!€}!€}!€}!€}!€}€!}€!}!€}!€}!€}!€}!€}!€|!!}!€}!€}!€}!€}€!}€!}€!}€!~}!€}!€}€!~~}!€}€!~|!!~|!!}€!~}!€}!€}!€}€!|!!~}!€}€!|!!}!€}!€|!!}€!}€!}€!}!€}€!}€!}€!}!€|!!},‚!|!!|!!|!!|!!|!!z!„)|!!{-!}!‚,{!-|!!{!-}!‚,}!‚,{!-{!-},‚!{!-}!‚,}!‚,{!-}!‚,|!!{!-|!!},‚!},‚!}!‚,}!‚,~ƒ,}€!}€!}€!}€!}€!~~}!€~~~~~~~~~~~~~~~~~~~~~~}!€y-~-y-~-y-~-{-!y-~-y-~-{!-{-!{-!|!!{-!{!-}!€|!!|!!|!!}!€|!!}€!|!!|!!|!!}!€|!!}€!}!€}!€}!€}!€}!€~}€!}€!}€!}!€~}!€~|!!}€!~}!€}€!}!€}€!~}!€}!€}€!}€!~}!€~}!€|!!~}€!~}€!~}€!~}!€}!€}€!~}€!~~}€!~}€!}€!}!€~}!€}€!|!!|!!}€!|!!}€!|!!~|!!}€!|!!}€!}€!|!!~|!!}!€}€!}!€|!!}€!}!€|!!|!!}!€}!€|!!}!€|!!}!€}€!}€!}€!}€!~|!!}€!}!€|!!}€!|!!}€!}!€~|!!~|!!}€!~}!€}!€}!€~}€!}!€}!€}€!}€!}€!}€!~|!!~}!€}!€~}€!}€!}€!|!!}€!}€!}€!}€!|!!|!!}€!|!!|!!|!!{!-|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,{!-|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€~,ƒ|!!|!!|!!}!€|!!|!!}€!|!!}!€},‚!|!!~ƒ,|!!|!!}!€|!!}€!}€!}€!}€!|!!|!!}€!}€!|!!|!!|!!{!†!|!!~ƒ,|!!|!!z)„!|!!|!!|!!|!!{!-|!!},‚!{-!x)„-z!„){!-{!-{-!{-!y-~-}!‚,y-~-}!‚,{!-|!!{-!~,…,}!‚,{,‚-{!-y-~-{!-{-6y-~-{6-y-~-{6-u4ƒ9sZ‡j³‘¿kԌÚq܉Üyàƒææ€æyàƒæyæƒàyæƒàsà†àyæƒàyæƒàyàƒæyàƒæyàƒærà‡Üsà†àsà†àr܇àrà‡Üq܉ÜnډÜq܉Ür܇àsà†àyàƒæyàƒæyàƒææ€æxæ„ÜoàˆÚkڌÔn܉ÚyàƒæyàƒæoàˆÚjڊÚeҏÒoԊàæ€ærà‡ÜkԌÚn܉ÚjڊÚr܇àrà‡ÜkԍÔr܇àsà†àjڊÚnډÜr܇àjڊÚjڊÚn܉ÚkԌÚkڌÔi˒Ãm͌ÚkڌÔg˒¿hҌÚnډÜhґÃkҌÜsà†àl܍ËiːÔnډÜkڌÔi¿“ÃkԌÚmԎÍiÓ¿g¿’Ëi˒ÃiÒËf˒Ëi˒Ãi˒ÃhԎÒfːÒnԋÜn܉Úg˒¿m͌ÚeҏÒj¿‘³i¿“ÃiÒËm͎ÔhڌÒg¿“¿iÒËg¿’Ëg¿’Ëg˒¿g¿“¿f˒Ëb¿“Ãf¼–¹b¼—´i¿“ÃiÒËiÒËkˑÍf˒Ëg¿“¿i¿“¥f›Š–iŽutH~9y-~-{!-{!-{!-|!!z)„!|!!{-!|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!|!!}€!}€!|!!}€!}€!}€!}€!~~~}!€}!€}!€|!!~|!!}€!}€!}€!~|!!}!€}!€}!€}€!}!€}€!}!€}!€}!€}!€}€!~}!€~}!€}€!}!€}€!}!€}!€}!€}!€}€!}€!}€!}!€}€!}€!}€!}€!|!!~ƒ,}€!}€!|!!|!!|!!~ƒ,}€!|!!z!„)|!!|!!{-!{-!|!!{-!{,‡)|!!|!!},‚!z!„){!-|!!{-!{-‚,{!-|!!{,‚-{!-z!„)|!!{-!z)„!|!!|!!|!!|!!|!!}!€}!€},‚!}!€}!€}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~t9-t9-y-~-y-~-y-~-{!-y-~-{!-|!!{-!{-!|!!{-!{-!|!!|!!|!!}!€|!!|!!}€!}€!|!!}!€}!€}!€}!€}€!~~}!€}!€~}!€~}!€}€!~}€!~}€!~}!€}€!~}€!}€!}€!~}!€}!€}€!}€!~~}€!~~}!€~}!€}€!~}€!~}!€}!€}!€}!€}€!}€!~~}€!}!€}€!~|!!~|!!}€!}!€|!!|!!|!!}!€|!!}!€|!!}€!|!!}€!}€!|!!}€!|!!}!€}€!}!€}!€|!!}€!~|!!}!€|!!}!€|!!}€!}!€|!!}!€}€!}€!~}!€~|!!~}!€}!€|!!}€!}€!}€!}!€}€!}€!}€!|!!}€!}€!~}!€~|!!}€!~}!€}€!}€!}€!}€!~}!€~|!!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!|!!{!-|!!|!!|!!|!!|!!|!!},‚!|!!},‚!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€|!!|!!|!!}€!}€!|!!|!!|!!}!€|!!}€!}!‚,}€!}€!|!!}€!}!€|!!}!€},‚!~ƒ,|!!|!!}!€~,ƒ|!!|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!}!‚,|!!{!-{!-|!!}!‚,|!!{!-}!‚,{!-{!-},‚!}!‚,{-!},‚!},‚!{-!},‚!{-‚,{!-{,‚-{!-x)„-{-!{-‚,{-‚,{,‚-{-‚,{6-w4ƒ-{6-u4ƒ9w=€fi›Œ³i¿ÔnډÜsà†àyæƒàyæƒàæ€æyàƒæsà†àsà†àyàƒæyàƒææ€æyàƒæsà†àsà†àsà†àsà†àsà†àsà†àsà†àrà‡Ün܉Úq܉Üq܉Ürà‡Ür܇àr܇àsà†àyæƒàq܉Ün܉ÚnԋÜr܇àyæƒàsà†àoàˆÚhҎÔnډÜsà†àq܉ÜjڊÚhԎÒkҌÜyàƒæxæ„Ün܋Ôq܉ÜoàˆÚkԌÚkԌÚhԎÒjڊÚnډÜiԐËhҌÚjڊÚiԐËnԋÜoàˆÚhڎËm͌Úr܇àfҐËnԋÜæ€æoàˆÚkԌÚr܇àkڌÔhҎÔoڈàq܉ÜhґÃkԌÚhԎÒi¿”¹i¿Ôk͑ËlÓÃg¿“¿g¿’Ëm͌ÚhڌÒf˒ËhԎÒhڌÒh˔¹g¿’Ëf˒ËkˑÍf˒Ëi¿“ÃfːÒfґ¿l¹“³d¼”¿d¼”¿iÒËg˒¿i¹“­b¼—´e´–¿f˒Ëi˒Ãf˒Ëi˒Ãg¿“¿g¿“¿i­’¥mšŠ–px„bw=„4x)„-z)„!z)„!x)„-|!!z)„!|!!|!!z)„!|!!|!!}€!|!!|!!}€!|!!}€!}€!|!!|!!}€!}€!}€!}!€|!!}€!|!!}€!}€!}!€}!€~|!!}€!}€!}!€}€!|!!}€!}€!}€!~}!€}€!~}€!~}€!~}!€}€!~}€!~}!€}€!}!€}€!}!€}!€}!€}!€}!€}!€|!!}!€}!€}!€|!!}€!~}!€|!!}!€}!€|!!|!!}!€|!!|!!},‚!{-!z!„)|!!{-!|!!|!!}!‚,}!‚,{!-|!!},‚!}!‚,z!„)|!!x)„-}!‚,z)„!|!!},‚!{!-z)„!|!!},‚!},‚!}!‚,|!!}!€},‚!|!!}€!}€!{!†!~}€!~~~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-{-!{-!{-!{!-{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€}!€|!!}€!}!€}!€}!€}!€}!€}!€}!€}!€}€!}€!}€!}!€}€!}!€}€!}€!}!€}!€|!!}€!~}!€~}!€~}!€~~}€!}€!~|!!}!€}€!}€!~~}€!}€!~}!€}€!}!€}€!~}€!}€!~}!€}€!}€!}€!}!€|!!}!€}!€|!!}€!}€!|!!}€!}!€|!!}€!}!€}!€}!€|!!~|!!~|!!}!€|!!}!€}!€|!!|!!}€!}!€}!€|!!}!€}!€|!!}€!}!€|!!}€!|!!~|!!~|!!}!€~}!€}!€}!€}€!}€!~}!€}!€~}!€}!€}!€}!€}!€~}€!}€!~}!€~}!€}!€|!!}€!}!€}!€}!€|!!~|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,}€!|!!|!!|!!|!!|!!|!!|!!}!€}!€~,ƒ|!!}€!}€!}!€|!!|!!|!!|!!|!!|!!}!‚,}€!|!!}!‚,}€!}€!}!€|!!}€!|!!}!‚,}€!|!!~,ƒ~,ƒ|!!}€!|!!|!!}€!}!‚,|!!|!!|!!|!!|!!z)„!{!-{!-|!!}!‚,{!-}!‚,{!-{!-},‚!}!‚,{!-{!-{-!{-!},‚!x)„-{!-{)‡,{-!{-‚,{-!{,‚-y-~-y,‚9y4†6z,‡4w-ƒ4|6‚=ox­j³‘ËkԌÚr܇àyæƒàxæ„Üsà†àsà†àyàƒæ}à€×yæƒàæ€æyàƒæyàƒæyæƒàxæ„Üsà†àyæƒàyàƒæsà†àsà†àsà†àsà†àr܇àsà†àq܉ÜnډÜn܉ÚnډÜrà‡Üsà†àsà†àrà‡ÜnډÜnډÜq܉Ür܇àr܇àhڌÒnډÜq܉ÜnډÜq܉ÜmڌÍkԌÚyàƒæsà†àjڊÚnډÜkԌÚjڊÚnډÜo͏Íoڈàrà‡ÜkԍÔoԊàsà†àhڌÒnډÜq܉ÜhԎÒkԌÚkԌÚfҐËnԋÜsà†àn܋ÔkԍÔr܇àn܋ÔhҎÔoڈàrà‡ÜhҎÔnډÜn܉ÚbÓ¿m͎ÔkڌÔi¿”¹k¿‘Íi˒ÃlÓÃf˒Ëb¿“ÃiːÔhڌÒg˒¿m͎ÔhڎËg¿“¿i¿“ÃiÓ¿kˑÍfҐËe¼“­g¿“¿g¿“¿g¿’Ëg˒¿e¼“­e¿–´e´–¿g¿’Ëf˒Ëi¿“Ãg¿“¿g¿’Ëg¿“¿g¿“¿h¿’­f›Š–mx|Hu4ˆ4{-!{-!|!!{!-|!!z)„!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!}!€}!€|!!}!€|!!}€!}€!}€!~~}!€}€!~|!!}!€}€!}€!}€!}€!}!€}!€}!€}!€}€!}!€}€!}!€}!€}€!}€!~}!€}!€}!€}!€}€!}€!}€!~}!€}!€~|!!}€!}€!~}!€}!€|!!~}!€}€!}!€|!!|!!|!!}!€|!!}!€|!!|!!},‚!|!!|!!z!„)|!!}!‚,|!!{-!{!-z!„)|!!|!!{-!{-!{-!}!‚,{-!},‚!{-!{!-{-!}!‚,|!!}!‚,{!-|!!z)„!}!‚,|!!z)„!|!!|!!{!†!|!!~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~t9-y-~-y-~-y-~-y-~-y-~-{!-{-!{-!{-!y-~-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}!€}!€|!!}€!}€!}€!}€!~}!€}!€}!€~}!€~}!€}€!~}!€~}!€~}!€}!€~}!€}€!~~}!€}€!~~}!€~~~}!€}€!}€!~}!€}!€}!€}!€}€!~}!€}!€}!€}!€}€!}!€|!!}!€}!€}!€}!€|!!|!!|!!|!!|!!|!!}€!}€!}€!}€!}€!|!!~|!!}€!|!!}!€}€!|!!~|!!}€!}!€}!€}!€|!!}!€}!€|!!}€!~}€!}!€}!€}!€}€!~|!!}!€}€!}€!}€!}€!~}!€}€!}!€}€!}!€|!!~~}€!}€!~}!€|!!~}!€~|!!}€!}€!~|!!~}€!}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!{!-|!!{!-|!!|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}!€|!!|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}!€},‚!|!!}€!|!!|!!}€!}!€~,ƒ|!!}€!|!!{!†!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!},‚!{-!{-!},‚!{!-{!-{!-{!-{,‚-}!‚,{-‚,{!-{,‚-{!-},‚!y-~-}!‚,{-‚,{-!y-~-y-~-~,…,y96{-6y96{-6s=}košŽÃiːÔnډÜyæƒàyæƒàsà†àr܇àyàƒææ€æyæƒàsà†àsà†àyàƒæyæƒàæ€æsà†àsà†àsà†àsà†àq܉Ür܇àsà†àsà†àsà†àyæƒàrà‡Ür܇àjڊÚkԍÔrЊÚq܉Üsà†àyæƒàq܉Üq܉ÜjڊÚjڊÚn܉ÚhڌÒnډÜkԍÔnԋÜsà†àn܉ÚjڊÚr܇àrà‡ÜkڌÔkڌÔiːÔr܇àxæ„ÜjڊÚnډÜsà†àhڌÒhҌÚnډÜhԎÒhҎÔjڊÚf˒ËjҏÍfҐËg¿’ËiːÔn܉ÚhԎÒhҎÔkԍÔiԐËiːÔnԋÜn܋ÔiԐËkԌÚhڌÒi˒ÃkҌÜjڊÚg˒¿m͎ÔkڌÔj¿‘³i¿“Ãg˒¿i¿“Ãf˒ËiÒËhҎÔkڌÔg˒¿mÑÍkˑÍf˒Ëf˒Ëb¿“ÃiÒËg˒¿g¿“¿d¿”¼g¹˜´g¿’Ëi¿”¹g¿“¿f˒ËiÓ¿g˒¿i¿“Ãf˒Ëg˒¿g¿“¿h¿’­i¥–wf€=v9„){!-z)„!|!!{-!|!!{-!|!!|!!|!!|!!z)„!}€!z)„!}€!}€!|!!|!!}!€}!€|!!}€!~|!!}€!}€!}€!}€!}€!}€!}!€}!€}€!|!!}€!}€!}€!}€!}€!~}!€}!€}€!~}!€}!€~}€!~}!€}€!}€!~}!€}€!}€!}€!|!!}€!}!€}!€|!!~}!€}€!}€!}€!|!!}€!|!!~}!€}!‚,}€!|!!|!!z)„!|!!|!!z!„)|!!}!‚,|!!z)„!z)„!},‚!|!!{!-{)‡,z!„)|!!},‚!{-!},‚!{!-z!„){-!{,‡){!-{!-|!!z)„!|!!|!!|!!|!!|!!}!€|!!|!!}€!}€!~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-{-!{-!y-~-{-!{-!{-!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!}€!}€!}€!~~~}!€}!€}!€}!€}!€}!€}!€|!!~}!€}€!}€!}€!~~~}!€}!€}!€}€!~~~}!€}!€}!€}€!}€!}€!~}!€~|!!~}€!}€!~}!€}€!~~}!€}€!}€!}€!}€!}€!}€!|!!}€!}€!}€!}€!}€!}€!}€!}€!|!!}€!|!!}!€|!!|!!}!€}!€}!€|!!|!!}€!|!!}€!}!€}!€}!€}!€|!!}!€|!!}!€}!€|!!}!€}€!}!€}!€}!€|!!~|!!}€!}€!~}!€}€!}!€}!€}!€}!€~}!€|!!}€!}€!~}!€}€!~}!€}€!}!€}€!~~}!€~|!!}!€}!€}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!}!€|!!|!!|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!}€!{!†!|!!|!!|!!|!!}!‚,}!€|!!|!!|!!{!†!|!!z)„!},‚!|!!|!!|!!{!-|!!},‚!}!‚,}!‚,|!!|!!{-!{!-},‚!{-!{-‚,{-!{-‚,{!-{,‚-{!-{-‚,x)„-{,‚-y-~-~,…,y-~-{!-{,‚-~,…,{,‚-{-‚,w-ƒ4v6„9{6-|6‚=px€¢k¿‘ÍnԋÜyàƒæyæƒàyæƒàyæƒàyàƒæsà†àsà†àyæƒà}׀àsà†àsà†àyàƒæsà†àrà‡Ün܉Úsà†àr܇àq܉Üq܉Ür܇àoڈàsà†àsà†àsà†àsà†àoàˆÚq܉ÜkڌÔjڊÚsà†àsà†àsà†àrà‡Ün܋ÔkԌÚkڌÔhҌÚjڊÚp܌ÍnԋÜsà†àjڊÚkڌÔn܉Új͏ÒnډÜn܋Ôm͎Ôsà†àyæƒàjڊÚnԋÜn܉ÚeҏÒjҏÍkԍÔkԍÔkԍÔk͑ËfːÒi˒ÃkÔ¹g¿’Ëf˒ËiÒËkԍÔmԎÍf˒ËhÑÒiÒËm͎ÔfҐËfҐËkˑÍfҐËg˒¿hҎÔn܋Ôg˒¿kԌÚn܉ÚbÓ¿hÑÒfҐËg¹˜´h­’¿i˒ÃkˑÍkԍÔi¿“ÃiːÔmڌÍi˒Ãg¿“¿g¿“¿f˒ËiԐËk³‘­h´•³h­’¿g¿“¿d˓¼h­’¿g¿“¿i¿“Ãf˒Ëg¿“¿g¿’Ëi˒Ãi¿“Ãjˑ³i­’¥g›‰upVƒI{-!{-!{-!|!!|!!|!!z)„!|!!|!!|!!}€!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!}€!}€!}!€}!€}!€}!€~}!€}!€}!€}!€~}!€|!!}!€}!€}!€}!€}€!~}!€}€!}€!}€!}€!}!€}!€~|!!}€!}€!}€!}€!}€!}!€}€!}!€|!!}!€}!€|!!}!€}!€}!€}!€}€!|!!}€!|!!|!!z…)~ƒ,{!†!~,ƒ|!!}!‚,|!!|!!|!!z!„)}!‚,|!!|!!}!‚,{-!|!!|!!},‚!{!-z!„)}!‚,{!-|!!},‚!{-!{!-|!!},‚!{-!},‚!},‚!{-!},‚!|!!|!!|!!}!€|!!}€!~}!€}€!~~~~~~~~~~~~~~~~~~~~~~~~~t-9y-~-y-~-y-~-y-~-{-!{-!{-!{-!|!!{-!|!!{€-|!!{-!|!!|!!|!!}€!}€!|!!}€!|!!}!€}!€}!€}!€}!€}!€}!€~}!€~}!€}!€}!€}€!~|!!~}!€~}€!~}!€}!€}€!~}€!~}€!~}!€~~~}!€~~}!€~}!€~}€!}€!~}€!~}!€}!€}€!~}!€}€!}€!}!€|!!}€!~|!!}€!}€!}€!|!!}€!|!!}!€}!€|!!}€!}€!|!!}€!|!!|!!}€!|!!}€!}!€}€!}!€}€!}€!}€!}€!}!€|!!}€!}€!}€!}!€}€!}!€}!€}€!}!€~}!€}!€}€!}€!}€!}€!}!€}€!}€!~}!€}€!~}€!}!€}€!~}€!}€!}€!}€!}€!}€!~~}€!}€!}€!~}!€|!!}€!}!€}!€|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!{!-{!-|!!{-!},‚!|!!|!!},‚!|!!|!!},‚!}!€},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!}!‚,|!!}!€}!€|!!}€!|!!|!!|!!|!!|!!{!†!|!!{!†!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,}!€x-„)|!!z!„)|!!{-!|!!{!-{-!}!‚,{-!}!‚,}!‚,{!-}!‚,{-!{,‚-{!-y-~-},‚!{!-x)„-},‚!{,‚-{-‚,{-‚,y-~-{,‚-w4ƒ-{,‚-v9„6y69|6‚=sHƒ‚j­’ÃhˎÚx܄æsà†àsà†àyæƒàyæƒàyæƒàsà†àyæƒàsà†àsà†àyàƒææ€æsà†àsà†àrà‡Üyàƒæyæƒàq܉Üsà†àoڈàyàƒæyæƒàq܉Üsà†àrà‡ÜyæƒàyæƒàkԌÚu܊ÐnԋÜyàƒæyæƒàyàƒææ€ærà‡Ür܇àn܋Ôuڅæsà†àkڌÔnډÜr܇àn܉ÚjڊÚmڌÍkԍÔr܇àq܉ÜkԍÔr܇àsà†àn܉ÚkڌÔiԐËf˒ËjҏÍf˒ËnԋÜn܋ÔiÒËnԋÜmԎÍlÓÃkԌÚhڌÒlÓÃkԌÚn܉Úh˔¹hˎÚjڊÚm͑ÃfːÒkڌÔlÓÃi¿“Ãi¿“ÃmÑÍf˒Ëi¿“ÃhҌÚjڊÚg˒¿fːÒkڌÔe¿–´g¿’Ëf˒ËiÓ¿iÓ¿g¿“¿mÑÍkڌÔg˒¿iÒËg˒¿iÒËfґ¿h¿’­g¿“¿g¼“³g¿’ËfÔ¼k­‘³g¿“¿g¿“¿iÒËf˒Ëg¿’ËiÓ¿iÓ¿iÓ¿h¿’­h¥Ž›o‡„‚o^|9z)„!{-!x)„-z!„)|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!~|!!}€!}€!}€!}€!}€!}€!}€!}€!~}€!}€!}!€|!!}€!}!€}!€}!€}!€|!!|!!}€!}€!}!€}€!}€!~~}€!}€!~}€!}€!}€!}!€}!€}€!}€!}€!~}€!}€!}!€|!!}€!|!!}€!|!!}!€|!!}€!}€!|!!|!!|!!|!!|!!z!„)|!!|!!{-!|!!|!!{-!{!-|!!|!!{-!{-!{!-z)„!},‚!{-!},‚!{-!},‚!},‚!},‚!{!-},‚!z)„!|!!}!‚,|!!z!„)|!!},‚!|!!}!‚,}€!|!!}€!}€!~}€!~}!€~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-{!-y-~-{!-{-!{-!{-!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}€!}€!}€!}€!}€!}€!}€!~}!€}!€}!€}€!~}!€|!!~}!€}!€}!€}€!}€!~}!€}!€}€!~}!€}€!}€!}€!~|!!~}€!~}€!~}!€}€!~}€!}€!~}!€}€!~}!€}!€}€!}€!}€!}€!|!!}!€}!€|!!|!!|!!|!!|!!}€!}!€|!!|!!}!€|!!|!!|!!}€!|!!}€!}!€|!!}!€|!!}€!}!€}€!}!€|!!}€!}!€}€!~}!€}€!}€!}€!}€!}€!}€!}!€}€!}!€}!€}!€}!€}!€}!€}!€}€!|!!}€!}€!~|!!}€!}!€}€!~}!€}!€}€!}€!}!€}€!~|!!}€!}!€}!€}!€|!!}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!},‚!|!!{-!|!!{-!},‚!|!!{!-|!!|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!}!‚,|!!{!-}!‚,{!-|!!z!„){-!}!‚,y-~-}!‚,}!‚,{!-{,‚-{!-x)„-}!‚,y-~-{,‚-y-~-{,‚-{,‚-{-‚,y-~-{-‚,y-~-{-6{-6y-=w4„=v9Nr‡ƒ¢g¿’ËnډÜsà†àyàƒæyæƒàyæƒàyæƒàyàƒææ€æyàƒæsà†àrà‡Üyæƒàæ€ææ€ææ€ærà‡Üæ€æyæƒàr܇àæ€æq܉Üæ€ææ€æq܉Üu܊ÐrԌÐæ€ææ€ær܇à|ׂÜuЊÜæ€æsà†àsà†àyæƒàuЊÜyàƒæuæ‡Ôx܄æyæƒàoԊàxæ„Üu܊Ðr܇àyæƒàkڌÔyàƒæsà†à}׀àu܊Ðoڈàsà†ànډÜkڌÔiÒËhҎÔmڌÍkˑÍr܇àrà‡ÜrԌÐsà†àn܋ÔfːÒkԌÚhڌÒf˒Ëoڈàrà‡ÜhґÃnԋÜq܉ÜkԐÃm͌Ún܉Úgғ¹g¿’ËhԎÒkÔ¹iÓ¿g¿“¿g¿’Ëk͑Ëg˒¿k¿‘ÍeҏÒb˓ÃkԍÔkڌÔj¿‘³k­‘³g¿“¿mÑÍk͑ËiÒËm͎ÔfҐËg¿“¿g˒¿j³‘¿g¿’Ëj¿‘³h­’¿j¿‘³i¹”¿f˒Ëg˒¿g¿’Ëi¿“Ãg¿“¿g¿“¿f˒ËiÒËbÓ¿o¿Œªj¥”¥pš‚ky9‚,|!!|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!}€!}!€|!!|!!}€!|!!}!€|!!}€!}€!~}!€~}!€}!€}!€}!€}!€}!€|!!~}!€}!€|!!}€!}€!~}!€~}€!~}!€}!€|!!~}!€}!€}!€}€!}€!}€!}€!}€!}!€|!!|!!}€!}!€|!!}€!~}!€}!€}!€|!!}€!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!z)„!{-!|!!}!‚,|!!|!!{-!{!-}!‚,|!!}!‚,|!!|!!},‚!}!‚,{!-{!-}!‚,z)„!|!!},‚!{-!|!!}!‚,|!!|!!|!!|!!}!€|!!}!€}!€}!€}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-{-!y-~-{-!{-!y-~-|!!|!!{!-|!!|!!|!!|!!|!!}!€}!€|!!|!!}!€|!!|!!}€!}€!}!€}!€}€!~}!€}!€}!€}!€}!€}!€}€!~}!€}!€}€!}€!~}!€}€!~~}!€}€!~~}!€~}!€~|!!~}€!~}€!}€!}€!~}!€}€!}€!}€!~}€!}!€~}€!}€!}!€}!€}€!}€!}€!}!€}!€|!!}€!}€!|!!|!!}€!}!€|!!}!€}!€}€!}€!}!€|!!}€!}!€}!€}€!}!€|!!}!€}!€|!!}€!}€!}!€|!!}€!}€!~|!!}€!~|!!}€!~~}!€}€!}€!}!€|!!}€!~}!€}€!}!€}€!}€!~}€!}!€}!€}€!~}!€}!€~}!€}€!~}€!}€!}€!~}!€}!€|!!|!!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!{!-|!!{!-|!!{-!{-!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!}!€|!!}€!|!!|!!}€!|!!}!€},‚!}!€}!€}!€~,ƒ~,ƒ|!!~ƒ,|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,z)„!|!!z)„!|!!|!!|!!|!!|!!{!-z)„!{!-|!!|!!{-!{-!},‚!{!-},‚!|!!{-‚,{-‚,{,‚-}!‚,{-‚,y-~-{,‚-{-‚,{-‚,{,‚-y-~-~,…,{-‚,{-‚,{6-{6-{,‚-w4ƒ-y4†6t9~HoV‡l³’Ãp͌Ür܇àyàƒææ€æyàƒææ€æyàƒææ€ææ€æyæƒàæ€æn܉Úyàƒæyæƒàæ€ææ€æp܌ÍyàƒævàˆÐoԊàæ€æhڌÒr܇àoàˆÚp͌ÜoàˆÚqƑÍyàƒæyæƒàr܇à|æ†ÐmÑÍsà†àrÜ‡àƒæ}×vЏÆoÌàæ€æxæ„Ür܇àp܌ÍrÏÐvàˆÐr³¹uڅææ€ærԌÐæ€ærà‡Ür܇àu܊Ðp͌Üæ€æxæ„Üx܄ærà‡Ürà‡Ür܇àtЍÍr܇àyæƒàjڊÚr܇àoàˆÚg¿’ËhԎÒhڌÒf˒ËkԌÚoàˆÚiԐËkԍÔrà‡ÜhڌÒkҌÜq܉ÜfҐËm͌ÚjڊÚg˒¿g¿’Ëf˒Ëi¿”¹g¿“¿bÓ¿g¿“¿f˒Ëg¿“¿kԌÚn܉Úg˒¿iÒËi˒Ãg¿“¿i¿“Ãj³‘ËiːÔiԐËm³³g¿“¿g¿“¿i¿“Ãg˒¿e­“¼f¹–¼d¼”¿iÒËg˒¿g¿“¿j¿‘³i¿“Ãg˒¿l³’Ãf˒Ëg˒¿b¿“Ãj¿‘³n­šnu„9y-~-z)„!z!„)|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!~|!!~}!€|!!}€!}€!}€!}€!}€!}!€}€!}€!}!€}!€}!€}!€}!€|!!}€!}€!~}!€~}€!~}€!~}€!}€!~|!!~}!€|!!}€!}€!}€!}€!}€!}€!}€!}!€}!€}!€|!!}€!|!!}!€~,ƒ|!!}€!}!‚,|!!|!!},‚!|!!},‚!|!!|!!{!-z)„!{!-z)„!{-!z)„!{!-{!-{-!{-!{-!{!-z)„!x-„)}!‚,|!!{!-{!-|!!z)„!{!-|!!|!!|!!~,ƒ},‚!~ƒ,|!‡|,‰!}€!}€!~}€!~~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-{!-{-!{-!{-!{!-{!-{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}€!}!€|!!~}!€}!€}!€}€!}€!~~|!!~}!€}€!}€!}€!~~}!€~}!€}€!~}!€~}!€~}€!~}€!~~~}!€}€!}€!~~|!!}!€}!€}€!~}!€}€!}€!}€!}€!}€!}€!}€!}!€|!!|!!}€!}€!|!!|!!|!!}€!}€!}€!~|!!}!€|!!}!€}!€}!€|!!|!!|!!|!!}!€|!!}€!}€!}€!~|!!}€!}€!}!€|!!}€!}€!~}€!}€!}€!}€!}€!}€!}€!}€!~}€!~}!€}!€}!€}!€}€!}!€}!€|!!~~}!€}!€}€!}€!}€!}€!~}!€}€!~}!€}€!}€!~}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!{,‚-|!!},‚!|!!{-!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!~,ƒ},‚!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!},‚!|!!|!!}€!~,ƒ~,ƒ|!!}€!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!},‚!z)„!|!!{-!|!!}!‚,}!‚,{!-}!‚,{!-{!-}!‚,{!-y-~-},‚!{!-{!-{-!},‚!{-‚,{-‚,{,‚-{,‚-{-‚,w4ƒ-w-ƒ4{6-w-ƒ4{,‚-w4„=oC9|6‚=y=‚NoVˆg¿’ËkˑÍnԋÜyàƒææ€ææ€ææ€ææ€æyæƒàæ€æyæƒàyàƒæyæƒàp܌Ít͍Ðq͑Ær܇àyæƒàm͑ÃyЋÐrƓ«rƍÜyæƒàoԐÆo͏ÍoƓÃq͊àyæƒàkˑÍq܉ÜtЍÍvƏÐvЏÆo«“ÃhԎÒi˒Ãu܊ÐpƑ³q´”Úyàƒærà‡ÜyЋÐjˑ³m¥‘ÍtЍÍl­”™mˌàsà†ànԋÜxæ„Üq͑Æp͌ÜkԐÃp³‹àæ€æxæ„Ü|܂×yàƒær܇àsà†àoàŠÔoԊàsà†àkڌÔq܉ÜoàŠÔf˒ËfːÒfҐËg˒¿kˑÍkԍÔf˒ËkˑÍjڊÚhԎÒm͎ÔkڌÔfҐËiːÔn܉ÚfҐËhˎÚhԎÒdÕ¹f¿‘ÒiԐËeÒ³f­˜­d¼”¿hҎÔjڊÚg˒¿iːÔkڌÔj¿‘³h­’¿j³‘¿mÑÍiԐËg¿“¿iÒËiÓ¿g¿’Ëg¿“¿j³‘¿g˒¿i¿”¹g¿’Ëg¿“¿h­’¿g¿“¿g¿“¿f˒Ëg¿“¿g¿“¿g¿“¿l³’Ãg˒¿k³‘­uš‰xnu„Hw4ƒ-|!!|!!z)„!z!„){-!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}€!}€!}!€}€!}!€}!€}€!}€!}€!}€!}€!}€!|!!}€!}€!}€!}€!~|!!}€!~}!€}!€|!!}€!}!€|!!}€!~|!!}!€}€!}€!}€!}€!~~}!€|!!}€!}€!}!€}€!}€!}€!}!€}!€}!€}!€}!€}!€|!!{!†!|!!}!€{)‡,|!!|!!|!!|!!z)„!x)„-|!!{-!z!„)|!!x)„-}!‚,|!!z)„!z)„!{!-x)„-},‚!},‚!{-!{-‚,{!-z!„){-!x)„-|!!{,‡){!-|!!|!!|!!|!!|!!|!!}€!}!€}€!}€!~~}!€~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-y-~-{!-{!-{-!{-!{-!|!!|!!{!-|!!|!!|!!|!!|!!}€!|!!}€!}!€|!!}€!}!€}!€|!!}€!}€!~|!!}€!}€!}!€~}!€}!€}€!}€!~}!€|!!}€!}€!}€!~|!!~}!€~}!€~}€!~}!€}€!}€!}€!~}€!}€!}€!~~}€!~}€!}€!~}!€}€!}€!~|!!}€!~|!!}€!|!!|!!}!€}!€|!!}!€|!!}€!|!!}€!~ƒ,}€!}€!|!!}€!|!!}€!}€!}€!|!!}€!}!€|!!}!€|!!}€!}€!}€!~}!€}€!}€!}€!}!€}!€}€!~|!!}€!}€!~|!!}€!}€!}€!}€!~}!€}!€|!!}€!}€!}€!}€!}!€}!€}!€}!€}!€~|!!}€!~}!€}€!}€!}!€}!€|!!}€!}€!}€!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{-‚,{-!|!!{!-|!!},‚!{-!},‚!|!!|!!{!-|!!|!!|!!{!-|!!|!!|!!}!‚,|!!|!!~ƒ,|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|,‰!|!!|!!}!€|!!|!!|!!|!!}!‚,|!!|!!},‚!{!-|!!|!!z!„)|!!|!!|!!{-!|!!{!-}!‚,|!!},‚!},‚!|!!{-!},‚!{!-z)„!{!-{!-},‚!{!-~,…,x-„){,‚-{,‚-{-‚,w-ƒ4y-~-{-‚,{6-{-6{-‚,{-6z4‡,u9ƒ4kb‚›n–ŠxpxŽ¥q¹ªoÌàyàƒæn܋Ôr܇àyæƒàyàƒææ€æyàƒææ€æxæ„Üx܄æ|æ†Ðt͍ÐkڌÔl˒ÆrƒÆv³Ž«g¹“ÒkԍÔm³³vƍ½n«“¥m¥‘ÍiԐËk¹”Ãl¹“³n«“¥oÌàrà‡Üp͌Üp܌Íl¹“³o³ŒÜoàˆÚk³‘­d¿”¼eª”¥u­’³n«“¥h¥“ËeҏÒi˒Ãk¹”Ãu´˜«r«Œàæ€ækԑ¥j³‘Ëg˒¿s¼”Íq͑Æq¼•³uԇæoàŠÔg¥‘Òsà†àq͑ÆrЌÔtʓÃsƌàyæƒàn܋Ôt¼‘Üæ€æk܌Òq܉Ün܉ÚhґÃlÓÃi¿“Ãf˒Ëi¿”¹g¿’ËjҏÍlÓÃi¿“Ãf˒Ëf˒ËiÒËg¿“¿fːÒhڌÒf˒ËiːÔjڊÚg˒¿fːÒjڊÚj¿‘³h­’¿d¼”¿g¿’ËfҐËg˒¿iːÔjڊÚlÒ³bÓ¿g¿“¿iÓ¿jˑ³g¿“¿fːÒg˒¿m³³g¿“¿e´–¿g¿’Ëg¿“¿i¹”¿i¿”¹i¹”¿b˓Ãi¹”¿g¿’Ëg¿“¿g¿“¿j³‘¿g¿“¿g¿“¿o¿Œªh­Ž–k‡ŠŠuf„4x-„){!-|!!|!!|!!|!!z!„)|!!|!!|!!|!!|!!}€!}€!|!!|!!|!!}€!}!€}€!~}!€}!€}!€}€!|!!}€!}€!}€!}€!}€!}!€|!!}€!}€!}€!}€!}€!~}!€}€!~}€!}€!~}€!}!€}€!~|!!}€!|!!}€!}!€|!!}!€|!!|!!}€!|!!}!€|!!}!€~,ƒ|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!},‚!}!‚,|!!z)„!{!-|!!},‚!},‚!z)„!{-!},‚!{!-},‚!|!!z)„!{-!}!‚,z!„){!-}!‚,}!‚,|!!},‚!|!!|!!},‚!},‚!z)„!|!!}!€|!!}€!}€!}€!~}!€}!€~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-{!-{!-y-~-{-!{-!{-!{!-|!!{-!|!!|!!|!!|!!}!€|!!|!!}€!}€!|!!}€!|!!}€!}€!}€!}€!~}!€}!€}€!}!€}€!}€!}€!}€!}€!}€!}€!}€!~}!€~}!€}!€~}!€}!€}!€~}!€~}€!}€!~~~}!€~~}€!}€!}€!~}€!}€!~}€!}€!~}!€}€!~}!€|!!|!!}€!}€!}€!|!!|!!}!€|!!}€!|!!}€!}!€}!€|!!|!!}€!}€!}€!}€!}!€|!!}€!|!!}€!}!€}!€}!€|!!|!!~|!!}€!}€!~}!€}!€~}!€}!€}€!}€!~}€!~}!€}€!~}!€|!!~}!€~}€!}€!}€!}!€}€!}€!}€!~}!€|!!~}!€}!€}!€}!€}€!}€!}€!}€!}€!}!€|!!|!!|!!|!!|!!{-!|!!{!-{!-}!‚,|!!|!!|!!{-!|!!|!!|!!|!!|!!{!-|!!|!!},‚!|!!{-!|!!|!!{-!|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!}!‚,|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!{-!|!!}!‚,|!!},‚!{!-|!!|!!}!‚,{!-{!-{!-|!!{,‚-},‚!{,‡){!-},‚!y-~-{!-{-‚,{-6{,‚-{,‚-{,‚-w-ƒ4y-~-y6†4q99u4ƒ9{=Ztf„škԌÚkڎÃrƍÜq܉Ür܇àæ€æsà†àæ€æxæ„ÜyЋÐq܉ÜyЋÐn܉ÚkԐÃvƏÐq͑Æqª¹fÔ¼e¥”­o³’«mš’kš‘´i¿”¹j¥’n¥“«n™•Šn†•­`¼•ªm¥–™rš™p™—™g­ÒfҐËi¿ÔwВ¼n«“¥o¹Žàsà†àh˓¥_´ž«f —Šnšpxhƒ˜´a¼•¼eª”¥n«“¥m¥–™n¥ŽÜyàƒærڈ½e¿–´a¥™ i–¥r«“«j¥”¥uԇæxæ„Üm³³g¿“¿h¥Ž›o³’«j¥”¥r«Œàæ€æmàŒ¿m­Üæ€æq܉ÜmԎÍm͎Ôj͏ÒhԎÒo͏ÍnډÜiڎ¿k¿‘ÍjڊÚiԐ¿i¹”¿iːÔlÓÃm³³iÒËlÓÃg¿“¿g¿“¿f˒ËhҎÔb˓ÃfːÒhڌÒb˓ÃfːÒhڎËi¿”¹i¹”¿g¿“¿iÒËkԍÔbÓ¿iÒËfҐËi¼”«k­‘³j³‘¿iːÔhґÃj³‘¿iÓ¿g¿“¿g¿’Ëe¿–´h­’¿d¿”¼g¿“¿iÒËg¿“¿g¿“¿b¿“Ãg¿“¿g¼“³bÓËiÒËg¿“¿i­‘­mšŠ–oˆfv9~-z)„!{!-|!!z)„!|!!|!!z!„)|!!|!!|!!|!!|!!|!!}!€}!€}!€|!!}€!~}€!~}!€|!!~}!€}!€}!€|!!}€!}€!}€!}€!}€!}€!}€!~}€!}€!}!€}€!}€!~}€!}€!~}!€|!!~}!€}!€}€!}!€}€!}!€}!€}!€|!!}€!}€!}€!}€!}€!}€!|!!}€!}!€}!€|!!|!!z!„)|!!|!!{!-|!!|!!}!‚,|!!},‚!z)„!{!-|!!}!‚,|!!{-!},‚!{!-{,‚-{!-z!„){-!{-‚,z!„){!-|!!{-!}!‚,|!!{-!|!!|!!|!!|!!|!!|!!|!!~}!€}!€~~~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-y-~-{-!y-~-{!-|!!{-!{-!|!!{-!|!!|!!|!!|!!}!€|!!}!€|!!}!€|!!}€!}€!|!!}€!}€!|!!}€!}€!}!€}€!}€!}€!}€!}€!~|!!~}!€}€!~|!!~~}!€~~~}€!~}!€}€!~}€!~}!€|!!}€!}€!~}!€}€!}€!~~}€!}€!~}!€}€!}!€|!!}!€|!!}!€|!!|!!|!!}!€}!€|!!}€!}!€}!€|!!}!€|!!~}!€|!!}€!}!€}!€}!€|!!}!€|!!~|!!|!!}€!}€!}€!}€!}€!}!€}€!}!€}!€}€!}!€}!€}€!}€!~|!!~}!€}€!|!!}€!~}!€}!€}€!}€!}€!~}!€}€!}€!~|!!}€!}€!~}!€}!€}€!~}!€}!€}!€|!!}!€|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!{-!|!!|!!{!-|!!|!!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!~ƒ,|!!|!!|!!|!!}!‚,|!!|!!{-!|!!|!!|!!},‚!|!!},‚!|!!{-!{!-|!!{-!{!-{!-}!‚,{-‚,{-!{,‚-{!-{,‚-y-~-{,‚-{-‚,{-‚,y-~-w4ƒ-{,‚-y6†4w-ƒ4}6„6mPzkh–†‡sƒ‘Šr³‹ÔvЈàyàƒæq܉Ür܇àyæƒàuЊÜ}à€×q܉Üsà†àoàŠÔrƒÆy½ˆ³m«’­b¿“Ãe­– r™šv‘Š‘n†•a¥™ cŒ™Šp‘n‚‰uh€”d “–`Œrnu‰‚mƒ—uhr—Šb ›—j€˜uj€˜uhr™ue –­b¼—´o¥Žšv¢Œ«o¥Žši³ÒkԍÔi¿”¹n¹•«s™‘‘iːÔiϖguš a¥˜¥h–ސp™—™nŠ•™sšŽÆjڊÚlÒ³oÓ«e—™€ik—mmu—ƒnŠ•™kÎÚmڌÍk¹”Ãf¹—¥gƒ‘ŠsŠŠl€˜{j¥ÚoàˆÚjˑ³j³‘ËhґÃmÑÍnƔ¹o«’³oԊàrà‡ÜlˍÜæ€ærà‡Üm͌ÚnډÜnڎÆk¿‘ÍjڊÚkԐÃk¹”ÃkԍÔi˒Ãl³“¹bÓ¿i¿“ÃeÓÃd¼”¿i¿“ÃiːÔbÓËkԌÚkڌÔjˑ³f¿‘ÒiԐËp¿Ž³g¿“¿i¹”¿f¿‘ÒfҐËg¿“¿iÒËg¿“¿iÒËb˓Ãi¿“Ãf˒Ëj¿‘³g¿“¿e¼“­d¼”¿bÓ¿i¹”¿iÓ¿h¿’­g¿“¿g¿“¿g˒¿d¿”¼j³‘Ëf˒ËiÓ¿j¿‘³i­‘­h­Ž–om‡Hy4„!{-!|!!z!„){€-|!!|!!|!!|!!|!!|!!|!!}€!}!€}!€}!€}€!}€!}!€}!€|!!}€!~}!€}!€|!!}!€}!€}!€}!€}!€}!€}!€}€!~|!!}€!~}€!~}!€}!€}!€}!€}€!~}€!}!€|!!}!€}!€|!!}!€}!€|!!}€!}!€}!€}€!~,ƒ|!!}!€|!!|!!|!!{!†!|!!|!!z)„!|!!|!!z!„)z)„!{-!|!!{-!|!!{!-{!-|!!{-!{-!},‚!|!!{-!},‚!z!„)}!‚,}!‚,{!-z)„!},‚!{-!}!‚,{!-|!!{!-z!„)}!‚,|!!},‚!}!€|,‰!|!!{!†!}€!{!†!}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-{-!y-~-{-!{-!{-!{-!{-!|!!{-€|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€|!!}!€|!!~}!€}!€}!€|!!}€!~}!€}!€|!!}€!}€!}€!~}!€}€!}€!}€!~}!€}€!}€!}€!~}€!~|!!~}!€}!€~}€!~}!€~}!€}€!|!!}!€}!€~}!€}!€}€!}!€}!€|!!~|!!}€!}€!|!!}€!|!!}€!}€!}!€|!!}!€}€!}€!|!!}€!}€!|!!}€!|!!|!!}€!}!€~,ƒ|!!}€!}€!}€!}€!~}!€}!€}!€}€!}€!}!€}!€}!€}€!~}!€}€!}!€|!!}€!}!€}€!}€!}!€}!€}!€|!!}€!~}!€}!€}!€}!€}!€}€!}€!}!€}€!~~}!€}!€}!€}!€}!€}!€}!€}!€}€!|!!}€!|!!|!!|!!|!!{!-}!‚,|!!|!!{-!|!!},‚!|!!|!!|!!{-!{!-|!!{!-|!!|!!},‚!|!!}!‚,{!-|!!}!‚,|!!},‚!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!}!‚,}€!|!!|!!|!!|!!|!!|!!|!!}!‚,}€!}!‚,~ƒ,|!!|!!|!!}!‚,|!!|!!|!!},‚!|!!{-!{!-z!„)|!!{!-|!!{-!},‚!|!!{,‚-},‚!x-„){-!},‚!}!‚,}!‚,{-!{,‚-x)„-{-‚,{-‚,{,‚-{,‚-y-~-{-6u9ƒ4w9=vb‹‚p‘¥m͌ÚoàˆÚo͏Íx܄æyæƒàyæƒàn܋Ôyàƒææ€ævàˆÐrԌÐq͑ÆhÑÒi¿”¹r³‹ªm¥–™jŠ’a¥˜¥a””ulu–Ši‘i€”ma€›Œb~š€l³’Ãi˒Ãmš€g€—€hr™uj–޳d¼–kmma€‘~hr•mg€‘ufujdu›”d “–c”—mju›kmu˜uo™”³_Ô¼hª–™j¥”¥n¥“«hˎÚhڎËl«–bœ~e~šum”™mƒ–ƒmƒ“³g˒¿j¥”¥q«•™jƒ—€jmi¥uik˜Ša¼•¼f¼”¥i–¥n«“¥k¥‘Ôlڍ³cƒ•ri–Ãb˓Ãe¼“­iÓ¿g³”¥pš³n«“¥p™—™oԊàoàˆÚiːÔsà†àn܉Úm͎ÔyЋÐn܉Úm͌ÚkڌÔhڌÒhˎÚnډÜkڎÃiÒËhԎÒiÓ¿j³‘¿g¿“¿j¹–¹l¹“³d¼”¿iːÔn܉Úfґ¿iːÔkڌÔj¿‘³h­’¿g¿“¿j³‘¿f˒Ëk¿‘ÍkԍÔg˒¿j³‘¿g¿“¿j³‘Ëj͏Òjˑ³i­‘­f¼”¥g¿“¿g¿’Ëe¼“­i¹”¿g¼“³g¿’ËiÓ¿iÓ¿g¿’Ëg¿“¿i¿“Ãj¿‘³g¼“³d¿”¼p­‹ªg–‹urb‚4z)„!{-!|!!{-!|!!{-!|!!|!!z)„!|!!|!!|!!|!!|!!|!!}€!~}!€~~}€!}€!}€!~}!€}€!}!€}!€}!€}!€}!€}!€}!€}!€}€!}€!}€!~}!€}€!}€!}€!~}!€}€!}€!~}!€}€!|!!}€!}!€|!!}€!}€!|!!|!!}!€}€!}€!}!€{!†!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!z!„){-!},‚!{-!|!!}!‚,}!‚,{!-|!!x)„-}!‚,{!-{!-}!‚,|!!{,‚-|!!},‚!{!-}!‚,}!‚,z!„)y-~-z!„)|!!|!!|!!|!!{!†!|!!|!!|!!~}€!~}€!}€!~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-{!-{!-y-~-{!-{!-{!-|!!|!!{-!{!-|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!}!€}!€|!!}€!}!€|!!}!€|!!}€!}!€}€!}€!}€!}!€}€!}!€}!€|!!}!€}!€}!€}!€}€!~}!€}!€}€!~}!€~~}!€~}!€~}!€}!€}€!}€!|!!}€!~}!€}€!}€!}€!}€!}€!}€!}!€|!!}€!|!!}€!|!!}€!|!!}!€|!!|!!}!€}!€|!!|!!}!€}!€|!!}!€}!€|!!}€!}!€|!!}!€|!!}€!}€!}!€|!!|!!|!!}!€}!€|!!}€!~}€!}€!}€!}€!}€!}€!~~}€!}!€~}!€}!€}€!}€!}!€}€!}!€}!€}!€}!€}!€}!€}€!}!€}!€}€!}!€|!!}€!}€!}€!}€!}€!~}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{!-}!‚,{!-|!!|!!|!!{-!|!!|!!{-!|!!{-!{-!}!‚,{!-|!!|!!|!!|!!{-!|!!|!!|!!},‚!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!z!„)|!!}!‚,|!!|!!{!-|!!|!!|!!},‚!z)„!|!!{!-|!!}!‚,}!‚,|!!{-!{-!x)„-}!‚,}!‚,{!-y-~-{-!{-‚,{-‚,{-‚,{,‚-w-ƒ4w-ƒ4y-=vHNlbƒufŒ‚›m’«rƍÜvЈàyàƒææ€æq܉Üyàƒæ|æ†ÐrڊÐkԌÚr܇àrà‡Üm͑Ãv³Ž«o¥Žše¥”ªd¥‘–kŠ“ŠlŠ•ƒj€—ƒg€™a{ rg–ËiԐËg¿–p™—™oŠŽšm͌Ún܉ÚlÒ³l³’¥m‚‰–fːÒkڎÃm­’«q«•™gk”–j³‘¿f¼”¥g€‘uZzœ~bqžklm’bjV–Vim–a¥˜¥hƒ”uhr˜ƒgƒ—¥f˒ËfҐËlÒ³g ˜ƒhr—bi€•Šg€škkm’¥d¿•¥j’Šm™”mu˜uiŠ“¿g˒¿cƒ•ra¥˜¥[œ˜~lm“ƒn†šv³‡àrà‡ÜiԌ–e“¼b´™¥h–r«“«g­˜r½ˆÚh¿’guš hˎÚaґÃj³‘Ëm͓¹g¼“³q³•¼lÓÃkÐÔr܇àiԐËjڊÚjڊÚrà‡Ül܍ËmÑÍkԌÚfґ¿hÑÒhڌÒh¿’­dª“­g´˜¹k¿‘ÍeҏÒi˒ÃkÐÔkԌÚjˑ³mÑÍg˒¿m³³f¼–¹m¿’ÆkԍÔiԐËj³‘¿g¿“¿g¿“¿iːÔjˑ³h­’¿g³“¼j³‘¿eÓÃk³‘­i­‘­h­’¿g¿’ËfҐËlÓÃg¿“¿g¿“¿iÓ¿j¿‘³e¼“­k­‘³i­‘­i¥–g–‹utHƒ4{!-|!!|!!|!!|!!|!!|!!|!!|!!z!„)}€!|!!}€!}!€~}!€}!€|!!}€!}€!}!€}!€}!€}!€}!€}!€|!!}€!}€!}!€|!!}€!}!€~~|!!}!€}!€}!€~}!€}!€}€!}!€}€!}€!}€!}€!~}€!}€!}!€}!€|!!}€!}!€}!€|!!}!€}!€|!!}€!}€!|!!}!‚,|!!|!!|!!|!!|!!{!-}!‚,|!!|!!z)„!z)„!{-!{!-{!-}!‚,{!-{!-z!„)}!‚,{!-{!-|!!{-!x-„){!-}!‚,|!!{-!|!!|!!},‚!{!-{!-{!†!},‚!|!!|!!}!€|!!|!!}€!}!€~~}!€~~~~~~~~~~~~~~~~~~~~~y-~-y-~-{-!y-~-y-~-{!-{!-|!!{-!|!!{-!{-!|!!|!!|!!|!!|!!}!€}!€|!!}!€|!!}€!}€!}€!|!!}€!}!€}€!}!€}!€|!!}€!}€!|!!}€!~}€!|!!}€!}€!}€!}€!}!€~}!€~}€!~}!€~|!!}€!~}!€}€!}!€}€!}€!}€!~|!!~~}!€|!!~}!€}!€}€!}€!}!€}!€}!€~,ƒ}!€|!!}!€|!!}!€|!!}€!}!€|!!~|!!}!€}!€|!!}€!}!€|!!}!€|!!}!€|!!|!!}€!|!!|!!}€!|!!}€!}!€}!€}!€}!€}!€}€!|!!}€!}€!~}!€}!€}€!|!!}!€}!€~}!€}€!}€!}€!}€!}€!}!€|!!}€!~|!!}€!}€!}!€}!€}!€}!€}€!~}€!~}!€}!€}!€|!!}!€|!!}€!}€!|!!|!!|!!},‚!|!!|!!|!!|!!{!-}!‚,{!-|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!|!!|!!|!!|!!{-!},‚!}!‚,|!!}!‚,|!!|!!|!!|!!},‚!|!!},‚!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!}!‚,}!‚,|!!|!!}!‚,{!-{-!{!-{!-}!‚,{!-}!‚,{!-},‚!},‚!y-~-}!‚,x-„){,‚-{,‚-y-~-{,‚-u4ˆ4z=€=w=Hox­mÑÍkԌÚoڈàoԐÆp͌Ü}׀àsà†àsà†àyàƒæyæƒàp܌ÍrƒÆrƒÆj͏ÒfÔ¼m¥–™n™•Šlm”uh€”\”~k³i¿“Ãj¿‘³i¥–n¥“«k¹’ÔjڊÚiҐ³o³’«n¥“«fːÒeҏÒmÑÍmԎÍn«“¥fːÒfҐËkˑÍkԐÃr‘³hҎÔfҐËuª‡šjšujk™bg›Œ­j’bgV˜r_Œ—ƒfrœkjb™kob–{b´—¼f­•´m­’«l¥•ƒju˜€i­‘­i–mkV–ƒd¥‘–d{šmo{˜ƒmƒ—uj’Ãb˓Ão¥Ž‚aŒfrœkjb™kfrœkg¥‘ÒkԌÚiڎ¿e–’´^œ‘ƒe~˜bjušr†˜™w͈æl܍Ëh–ސb¿“Ãb´™¥j“¹i¹“­i‘nšp™—™n¥ŽÜyæƒàhڎËx܄ææ€æq܉ÜjڊÚkԌÚkڌÔfҐËiːÔn܉ÚiҐ³h­’¿b˓Ãi¿”¹g¿“¿g¿“¿iÒËkԍÔiÒËjڊÚk܌Òh¿’­j³‘¿g¿“¿iːÔk͑Ëi¿“ÃfːÒg¿“¿iÒËg¿“¿g¿’Ëg˒¿e­“¼g¿“¿i¹“­g¿“¿f¼–¹g¿“¿f˒Ëg¿“¿h¿’­k­‘³g¿“¿m³³j¿‘³g³“¼g³“¼i­’¥h¥Ž›o‡VvH~-z)„!{-!z)„!{-!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€}€!~}!€}!€}!€}€!~}!€}!€}!€}!€}€!}!€}€!}€!}€!}€!}!€|!!~}€!~|!!}€!}€!}€!}!€}!€}€!}€!}€!}!€|!!|!!}!€|!!}€!}€!}!€|!!|!!~|!!|!!}€!|!!|!!|!!}€!|!!},‚!|!!{-!}!‚,|!!|!!{!-|!!{!-|!!},‚!{,‡)}!‚,}!‚,}!‚,|!!},‚!{-!},‚!z)„!{-!}!‚,}!‚,}!‚,|!!{!-|!!},‚!},‚!|!!z)„!|!!|!!|!!|!!|!!}!€}!€}!€}!€~}!€~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-{!-y-~-y-~-{!-{!-{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!}€!|!!}€!|!!}€!}!€|!!|!!}!€|!!}€!}!€|!!~}!€}!€}!€}!€~}!€}!€}!€}!€}!€}€!}!€~~|!!}€!~}€!~~}€!}€!~}!€}!€}€!~}!€}!€}!€~|!!}€!}€!}!€}€!}!€|!!}!€|!!}€!|!!}!€|!!}€!}!€|!!}€!}!€}!€|!!}€!}!€|!!}!€}!€|!!}!€}!€}€!}€!}!€}!€}!€}€!}€!}!€}!€~}!€~}!€}€!}€!~~}!€~}€!}!€}€!}€!}!€}!€}!€}!€}!€}!€}!€}€!}€!~}€!}!€~|!!}€!~}!€}!€}€!}!€}€!}€!}€!}€!}€!~|!!|!!}€!|!!|!!|!!|!!},‚!{!-{!-|!!|!!|!!{!-{!-|!!|!!{-!{-!},‚!|!!{!-|!!{!-|!!{-!{!-}!‚,|!!|!!|!!|!!|!!|!!},‚!|!!{-!|!!},‚!|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!|!!|!!},‚!|!!|!!|!!{€-}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!},‚!|!!{!-|!!{!-{-!|!!|!!},‚!z)„!{-!},‚!y-~-}!‚,{!-{!-},‚!{-‚,{-‚,w-ƒ4w-ƒ4w4ƒ-r4‚CtHfj’¥i–¥p͌Üsà†àæ€ææ€æp܌ÍqƑÍtЍÍm͎ÔkԍÔr܇àyæƒàkԐÃl¹“³o³’«e¥”ª^¥—•lu”mjuŠjŠum{•lƒ•Šl³ÚjڊÚkڌÔtÓÊrƒÆiÒËf˒Ëj¿‘³nƔ¹p™—™b´—¼e¼“­fª“³v³Ž«k™›b´—¼f´•­q­³v³Ž«r‘³aÑÒg˒¿l³’Ãt¼‘šrƒxg¿’Ëa¿••sb’ƒhŠ—req›uim—khVškd–‘¥a¥˜¥h–ސp£›kƒ“g¿’Ëh¿’jb™ke€™rfkš`mb›bpl›ue“¼f´•­i¥—h—˜ƒgr˜VgV–`nV–Ya ˜¼_¼”Ãg˒¿i­’¥\”¡{hkšVmlžkjkšƒiːÔhڎËn­š`ª–¥]•™~nŠ•™l£› u™½iڍ­b€š~rš‰Ürà‡Üi˒ÃoԊàyàƒæl܍ËpˎÐkԍÔjڊÚi˒ÃiːÔn܉Úfґ¿hˎÚkڌÔh¿’­g¿’Ëi˒Ãi¿”¹g¿“¿g¿’ËnԋÜoàˆÚg¿“¿f˒Ëg¿“¿r³ŽÃj¿‘³i¿“Ãf˒Ëjˑ³h­’¿j³‘¿iÒËfҐËi­‘­i­‘­e­“¼g¿“¿d¿”¼g¿“¿f˒Ëk³‘­i­‘­e­“¼g¿“¿g¿“¿j³‘¿g¿“¿m³³k³‘­i­‘­i¥–pubv9!{-!|!!z)„!|!!{-!|!!|!!}!€}!€}!€}€!}€!}€!~|!!}€!}€!~}!€}!€}€!~}!€}!€}€!|!!}€!}!€|!!~}!€}!€}!€}€!}€!~}!€}!€}€!~~}!€}!€}!€|!!}€!}!€}€!}€!}€!}€!}!€}!€|!!}€!|!!~}!€|!!}!€|!!{!†!|!!|!!|!!{,‡)|!!|!!|!!z)„!{-!x-„)|!!{-!z)„!{!-|!!{-!{!-{!-{-!}!‚,{!-}!‚,{!-{!-}!‚,|!!y-~-z)„!{,‡)|!!z)„!{-!}!‚,}!‚,}!‚,|!!|!!|!!}€!|!!{!†!~}!€~~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-{!-{!-{!-|!!{-!{-!{-!{-!{-!{!-|!!|!!|!!|!!|!!}!€|!!}!€{-€|!!}!€|!!}!€}!€|!!}€!}!€}!€}€!|!!}€!}€!}!€}€!}!€|!!}€!}€!}€!~}!€}€!~~}!€}€!~~}!€~~}€!}€!~}€!}€!~}!€}!€|!!}!€}!€}!€}!€}!€}!€}!€}!€}!€|!!}€!|!!}!€}!€|!!}€!|!!|!!|!!}!€|!!}€!}!€|!!}€!|!!~|!!}€!}!€}€!}!€|!!}€!}!€|!!}€!}€!|!!|!!|!!}€!}€!}€!|!!}€!}€!}€!~}!€|!!}€!}€!}€!}€!}€!}!€}€!}€!}€!}€!}€!}€!|!!~|!!~}€!}!€|!!|!!~}!€|!!}!€}€!~}€!|!!}€!}!€|!!}€!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!|!!|!!{!-}!‚,|!!{-!|!!|!!|!!|!!|!!|!!{!-|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!}€!}!‚,}€!|!!},‚!}!‚,|!!}!‚,}!‚,{!-|!!|!!},‚!{!-{!-|!!{!-x)„-{-!{-!},‚!{-!z!„)},‚!{,‚-{!-{-‚,y-~-v)‰4{,‚-{,‚-y-=oV‡a›ŽÃlÓÃhڌÒl˒Æp͌Ü}à€×sà†àoàˆÚm͓¹m͎ÔkԐÃlÓÃo͏Íp͌ÜhԎÒi¿“¥rš™oŠ‚jƒ—€`Œrik˜Šg¿’Ëjˑ³m«’­n«“¥o³ŒÒeҏÒfҐËl¹“³v³Ž«g¥—´d­“ªeª”¥o¥Žšj€˜ue– Yž•g€—€mu˜urb“ub—› `•™—a”›€mu˜umu—ƒf­•´`ª–¥i¥’­q«•™lŠ•ƒe´–Ëi¿“¥j’¥q•™Šku”g³“¼i–mb~œ_”—ƒe~šup†–Škƒ“b´—¼a¼–¥mƒ–ƒhŠ—rkb•Vlb“bfažVgƒ—¥]¥•œhƒ“ƒp†–Šfk—ji€•Šgu`fŠ•¥\œ”ªdª“­n«“¥gœkjV–Vg`–VmI•€g³“¼a¼•¼h›Ž¥_­Ÿ”a~™`jušlŠ•ƒm™‘ÚvàˆÐeːƒh¥“Ëf˒Ëi­‘­oƓÃfːÒi¿”¹nƔ¹j¹–¹nƎÚiԐËi¿ŽÚn܉ÚdڎÃm͎ÔjڊÚaґÃhˎÚhڌÒjÒ­i¥’­j³‘¿hˎÚn܋Ôf˒ËkԍÔiԐ¿i­’¥k³‘­g´˜¹f˒Ëd˓¼e³’Ãb¿“Ãi¿“Ãf˒Ëj¿‘³g¿“¿m³³i¹”¿i¿”¹i­‘­h¿’­h­’¿k³‘­i­‘­g¿“¿bÓ¿j³‘¿g¿“¿g¼“³d¼”¿m³³h¿’­h–†‡uf„4z)„!{-!|!!|!!z)„!|!!|!!|!!|!!|!!|!!}!€|!!}€!~}!€~}!€}!€}!€}€!}!€}!€|!!}!€}!€}!€}!€}€!}€!}€!}€!}€!~}!€|!!~}!€}!€|!!}€!~}!€}!€}€!~}!€|!!|!!}€!}!€}!€|!!}€!|!!}€!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!{!-{!-|!!z)„!|!!},‚!}!‚,{!-z!„)z!„){!-},‚!}!‚,}!‚,{!-{!-}!‚,}!‚,}!‚,{-!{-!},‚!}!‚,{!-|!!|!!z!„)|!!|!!|!!|!!z)„!{!†!~,ƒ}!€}!€}€!~}!€}€!~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-{!-y-~-y-~-{-!y-~-y-~-{!-|!!{-!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!}€!|!!}!€|!!|!!}€!|!!}€!}€!}!€|!!|!!}!€|!!}€!}!€|!!}€!|!!}€!|!!~}!€|!!}!€}€!}€!}€!}€!}!€|!!~}!€~|!!~~}!€~}€!~}€!~}!€}!€}€!~}!€}!€}!€}!€|!!}€!}!€|!!}€!}!€}!€}!€|!!}€!}!€|!!}€!}€!}!€}!€|!!}€!|!!|!!|!!}€!}!€~,ƒ|!!}€!}!€|!!}!€}!€}€!}€!}!€}!€}!€|!!~}!€}!€}€!}€!}€!}€!~~|!!~}!€}€!}!€}!€}!€}!€~|!!}€!}€!}€!~}€!~}€!}€!~}€!~|!!}!€~}!€|!!~}!€|!!}!€}!€|!!}!€|!!|!!|!!}!‚,}!‚,|!!{!-|!!|!!{-!},‚!|!!{-!|!!{-!{-!|!!|!!|!!{-!{-!|!!}!‚,|!!{-!|!!|!!|!!|!!},‚!|!!},‚!|!!{-!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!}€!}!‚,z!„)|!!|!!|!!|!!|!!|!!|!!{-!{-!|!!z)„!},‚!{-!|!!}!‚,}!‚,}!‚,{!-y-~-z)„!x-„)x-„){,‚-z,‡4y-~-v-~9wN†xq­³hˎÚyæƒàsà†àæ€æmàŒËt¼–ÆtЍÍk͑Ëg˒¿n³Íyàƒæuæ…ÚqÖ¼p¹˜¼p³Ž¿`¼•ªf —Šju˜€p‚ƒmu˜ug€™h’¿kԌÚhڎËqÖ¼r«“«j³‘¿_Ô¼f´•­j–‘ƒju›kgm•—_—œ”\Œž~lb’mjumj{”ƒ]~¡{hr—bim”€jumcu“~Zzœ~hr—blb“blb“ba€›”_Œ—ƒhu™rom—lik—m`¥–ªd¥‘–m™–¥q«•™lƒ•¥f˒Ëh¿’­n«“¥e€™rlY–`jk™bml›€_ª•ªd¥‘–jƒ“™k“ƒjk›ueƒukb•Vcm—”[””~gkš€j€˜ugkš€oªŒ¿h³ƒ`~–ƒW‹¢ŒaŒ›€l™™jƒškpb‚i¥ujV“ma¥˜¥^¥—•jušo™—ƒhqšYik—mik—mmšŽËkԌÚkԑ¥e­“¼d­“ªnŠ•™j¥”¥c¥••lƒ•¥n¹•«p™—™mˌàoàŠÔhˎÚsà†àhڌÒhˎÚjڊÚeҏÒkԌÚn܉Úgˑ­k­‘³d¼”¿iÒËf˒ËlÓÃhҎÔfґ¿j³‘¿g¿“¿i­‘­j³‘¿e­“¼f˒ËfҐËm³³g¿“¿j³‘¿f˒Ëjˑ³g¿“¿e¿–´e¥”­e­“¼k­‘³g¿“¿a¼•¼j³‘Ëg¿“¿g¿“¿g¿“¿k³‘­k­‘³d¼”¿j³‘¿o¥Žšk–„bs9†)z!„)|!!{-!|!!z)„!|!!|!!|!!}€!}!€}€!}€!}!€}!€}€!}€!~}!€}€!}!€}€!}€!}!€}€!}!€}!€}!€|!!}€!}€!~}!€|!!}€!~}€!}€!~}€!}!€|!!}€!}€!}€!}!€|!!}!€}€!|!!}€!}!€}!€}!€}!€|!!}€!}€!|!!|!!}€!|!!|!!},‚!|!!}!‚,{!-z!„)|!!}!‚,|!!{-!{-!{-!}!‚,{!-{!-},‚!}!‚,{!-{!-{)‡,|!!},‚!{-!{,‡)|!!|!!{-!},‚!|!!y-~-{!-|!!},‚!},‚!|!!|!!|!!|!!}€!|!!}€!}!€}€!}€!~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-{-!{-!y-~-{!-{-!{!-{!-|!!{!-{!-|!!{-!|!!|!!}€!|!!}€!}!€{-€|!!}!€|!!}€!}€!}!€|!!|!!|!!}€!|!!}€!}€!|!!}!€|!!}!€|!!}€!|!!~}!€}!€}€!}€!}!€|!!}€!~}€!~}€!}€!}!€~}€!~~|!!}€!}€!}€!}€!}€!}€!}€!}€!}€!}€!}€!|!!~|!!}€!}!€|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!}€!|!!}€!|!!~|!!}€!|!!}€!}€!|!!}€!}€!|!!}€!|!!}!€}!€}!€|!!~~}€!}€!~}!€~~}€!}€!~|!!}€!}€!}!€}€!}!€}!€}!€|!!~}!€}!€|!!}€!~}!€}!€|!!~}!€}!€}!€}!€}!€}€!}€!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{!-|!!|!!|!!{-!|!!},‚!|!!|!!{!-|!!|!!}!‚,|!!{-!|!!},‚!|!!{-‚,|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!},‚!|!!|!!},‚!|!!},‚!|!!|!!},‚!|!!}!‚,|!!|!!}!‚,}€!|!!|!!|!!{!-{!-{!-}!‚,{-!},‚!|!!{-!{!-{!-}!‚,{-‚,{!-{!-{!-}!‚,{!-{,‚-{,‚-{-‚,{-‚,{-6pC{bh€”p³‘ÆuЊÜyæƒàæ€ææ€ææ€æl܍Ëo³’«j¥”¥i¥’­f­™¿oԊàæ€æsà†àlÒ³o«’³n«“¥b ›—cƒ•rkƒ“­iÓ¿r¥¢n¥“«n«•¹fːÒbÓ¿lÒ³r­’­f¥–¥^¥—•Zœ™Œhr—blb’mhm•rb€š~hr—bmƒ“³jˑ³i‘iŠ•€hr—Šl³’Ãgˑ­j’Šhu™rjk™bi‘­h­”€gu‘€dr›rhr—bhb•`nV–Ya€¦]•™~hu“i—Špƒš_¼”Ãh¿’­m³³n†›klb’mhu‹ukV•b`—œ\”~nm”{jƒ—€omŒšj¥”¥i–me`˜ra{ rf`škju›khk—h­’¿cÒ­e€™rdr›rd{œbjk›uhu™rlƒ–¹oˋªer˜`[•š”`ƒ—qlm”ufrœkjb’ošŽŠl`–Ya¥–¼d¼”¿g¿–e¥— \”~om”†l™™p†˜ujŠ’­jš’ pƒšp͌ÜoàŠÔf¿‘ÒyàƒæoàˆÚkڌÔæ€ælàŠÒkԌÚn܉ÚlÓÃfːÒk͑¿k³‘­g¿“¿j¿‘³fːÒg˒¿g¿’ËfҐËd¿•¥g›Œ­fª“³f¿‘ÒfҐËe¼“­m³³d¼”¿iÒËg˒¿i¥’­i­’¥l¥’³g¿“¿e¼“­g¿“¿h¿’­j³‘¿h¿’­d¼“Ëg¿“¿g¿“¿h¿’­d¼”¿g¿“¿h¿’­i¥–pk|H{-!{-!|!!|!!|!!|!!|!!|!!|!!}€!}!€}!€}€!~}!€}€!}€!~}!€~}!€}!€}€!}!€}€!}!€|!!~}!€}!€}!€}!€}!€}!€}€!}€!~|!!}€!~~}!€}!€}€!}€!~|!!}!€}!€}!€}€!}€!|!!}!€}€!{!†!|!!{!†!|!!|!!|!!|!!z!„)},‚!|!!|!!{!-z!„)}!‚,|!!z)„!},‚!z)„!{-!z!„){-!z)„!y-~-}!‚,}!‚,{!-{!-{!-{!-|!!{-!},‚!z)„!x-„)}!‚,z!„)}!‚,z!„)|!!|!!}!‚,|!!|!!|!!|!!}!€}!€}€!}!€~}!€}!€~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-y-~-{!-{-!{!-{-!{-!y-~-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!}!€|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€}€!}!€}!€}!€}!€}!€|!!~|!!}€!~}!€}!€}€!}€!~}!€}!€}!€}!€}!€}!€}!€|!!~}€!}€!}€!}€!~|!!~|!!|!!}!€|!!}€!}!€|!!|!!}€!|!!|!!}€!}€!|!!}€!|!!~}!€|!!~}!€}!€|!!}!€}!€|!!}€!}!€|!!~|!!}€!}!€}!€}€!}!€}!€~}€!}€!}€!}€!~}€!}€!~|!!}!€}!€}!€}!€}!€}!€}€!}€!~|!!~}!€|!!}€!}€!~|!!~|!!~}!€~|!!~|!!}€!~|!!|!!}!€}!€},‚!|!!|!!|!!},‚!|!!}!‚,|!!|!!{!-|!!|!!{-!|!!|!!},‚!|!!|!!{-!|!!|!!{-!|!!|!!},‚!|!!{!-|!!|!!{!-|!!|!!|!!}!‚,{!-}!‚,{!-|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-{-!{!-z!„)}!‚,{!-|!!{-!},‚!x-„)x-„){,‚-{-‚,y-~-{,‚-v-~9mVƒ›f¿‘ÒiԐËvƏÐrà‡Üq܉Üsà†àyæƒàoàˆÚgғ¹ošŽ¥mÑÍoÓ«p³‘Æ|܂×sà†àiڎ¿l³’¥u¢™s‚{b€š~g~š™n³ÍhڎËl¿“«q¥—£ošŽ¥b´—¼_ª•ªg–“lŠ–uju˜€X‹ ~e~šugk”–mÑÍo­‘j’¥p¥‘f¿‘ÒkڌÔl˒ÆoÓ«pš³hҌÚfҐËqÖ¼o«“ŠkuŒ‡hÑÒkґ«mš’g€škjmm³³d “ueuƒb~kmb›bjb™kik˜Š`¥–ªa¥™ l™™lƒ“mh€”­g¿“¿j’bar›~^~Ÿif`škmb›bgk”–d­“ªdª“hm•raržijV–VnY–Vlb“Šdª“­g´—¥iŠ•€fkš`lb“FnY–VjV–Vm‚¿h¿’­hŠ”`euš~er˜`e`˜rkr™Yj€”³mڌÍg“`d“ª`¥–ªi–Šg——Še~˜bkm‘Šjƒ—€ju›ktª‡Ühחkm’¥f¿‘ÒgҐ­f¥—¹hˎÚmڌÍi¿”¹r܇àqàŠÍnډÜkڌÔbÓ¿m͌ÚhڌÒg¼“³mÑÍh˔¹l¹“³g¹˜´i¿“ÃfːÒeÒ³m³³f´•­i¿“ÃiԐËb¿“Ãg¿“¿j¿‘³iÒËd˓¼i­‘­g­Œ›k­‘³eÓÃg¼“³j³‘¿k³‘­g¼“³h¿’­j³‘¿iÓ¿j¿‘³g¿“¿g¿“¿g¿“¿j¿‘³i­‘­l›ˆ‚pm‡9z!„)|!!{-!|!!|!!|!!z!„)}€!|!!}€!~}!€}€!}€!}€!}€!~}!€}€!}€!}!€}!€}€!}!€}!€}!€}!€|!!}€!~|!!~~|!!}€!}€!}€!~|!!}€!~|!!}!€}€!}€!}!€|!!}€!|!!|!!}!€|!!|!!}!€|!!|!!|!!|!!}!€},‚!|!!|!!|!!|!!x-„)|!!},‚!|!!{-!},‚!{!-{!-}!‚,{!-z)„!{-!{-!{!-|!!{-!x-„)},‚!|!!y-~-},‚!{-!{,‡){-!{-!{!-z)„!|!!{-!|!!},‚!|!!|!!|!!{!†!|!!}€!~~}!€~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-{-!y-~-{-!y-~-{-!{-!|!!{-!|!!{-!|!!|!!|!!{!-|!!|!!}!€|!!|!!}€!|!!|!!|!!|!!}!€|!!|!!}!€|!!}!€|!!|!!}€!}€!}€!}€!|!!}€!}!€|!!|!!}€!}€!}!€}!€}!€}!€}!€}€!}€!}€!~}!€}!€~}!€}!€}!€}€!}€!}€!}€!}!€|!!}€!}!€}€!|!!}!€|!!}!€}!€}!€|!!}!€|!!}!€|!!|!!|!!}!€|!!}€!}€!}!€~|!!}€!}€!}!€|!!}€!}€!~|!!~|!!}€!}€!|!!}!€}!€|!!}€!|!!}€!}€!~}!€~}!€~}!€}!€~}!€}€!~}€!~}!€~|!!~}!€}!€}!€}€!}€!~}!€}!€}!€}€!}!€}€!}€!}€!}€!}!€|!!}!€|!!|!!}€!~|!!|!!}€!|!!|!!|!!|!!|!!|!!{-!|!!}!‚,|!!|!!|!!{-!{!-|!!{!-}!‚,|!!},‚!|!!}!‚,{!-|!!{!-}!‚,|!!|!!}!‚,|!!|!!{,‚-|!!|!!|!!|!!|!!{!-|!!{-!}!‚,|!!|!!|!!|!!|!!|!!}!‚,|!!|!!{!-|!!}!‚,|!!z)„!{!-},‚!},‚!}!‚,|!!|!!{-!{!-},‚!{-!},‚!},‚!{-‚,~,…,{!-{-‚,y-~-{-‚,{-‚,w4ƒ-x4…ZpƒškÎÚyàƒærà‡Üp͌Ürà‡ÜqƑÍmÑÍrЌÔiÓ¿b´™¥k¥“ÃyàƒækڎÃm³³v½Æmƒ¿e­”¥n™•Šj’¥j¥’nŠ•™o«“ÃkƑÒf˒Ëk³‘­m¥–™mƒ—ue– _•“ƒe~˜biuސhƒ˜rer™€j—™™ošŽÃjڊÚkԐÃq¹š´r«“«iÒËaґÃk¹”ÃoÓ«q™•«g¿’Ë_Ô¼k­‘³m«’r†˜™g¿’Ëjˑ³r¥¢h—˜ƒpu‘šfːÒgˑ­j¥’hr—bjV–Vkb•VhVška€›”d~’ulƒ•Šmƒ—umƒ“³g¿’Ëi­‘mƒ—uci khVšklbœVmY—€c ‘›f —ŠkŠ“Šlu–bnUžYjV–VlI–rZ••œ_•“ƒim”€nubjV–Vg`–VpI“Fc€–ª`ª–¥hƒ”uim—kmb›bnUžYob•YiŠ“¿eҏÒj­mb~š€]~”~hr™uj™ƒmkšYi`—unublb’moÌàlڍ³fu“—e­“¼b¥“ƒj™›­d¼“ËeÔªi–¥l³’Ãi¹“­qƑÍqƑÍiÓ¿kҌÜn܋Ôf˒ËkԌÚhґÃi­‘­k³‘­i­“¹f˒Ëg¿“¿f˒Ëd˓¼k­‘³g¿“¿g¿“¿fːÒd¿”¼h­’¿g¿“¿g³“¼g¿“¿i­‘­iÓ¿h¿’­k­‘³k³‘­j³‘¿j¿‘³k­‘³i˒Ãd¿”¼d¿”¼m³³g¿“¿g¿“¿j¿‘³bªŽ›i‡…uy4„!|!!|!!z!„)|!!|!!}€!}!€}!€}€!|!!}€!}€!}€!~~}!€}€!|!!~|!!~|!!~}!€}!€}!€~}!€}!€}!€|!!}!€}!€}€!}€!~|!!~|!!}€!}€!}€!|!!}€!}€!}€!}€!}€!}€!}!€}!€}€!}€!|!!}€!}€!|!!|!!|!!|!!|!!|!!{!-|!!},‚!|!!{-!|!!{-!},‚!},‚!},‚!{-!{!-},‚!x-„){-!},‚!},‚!|!!}!‚,{,‡)|!!z)„!{-!|!!|!!}!‚,|!!}!‚,|!!z)„!},‚!z)„!|!!}!‚,}!€|!!}!€|!!~ƒ,~}€!~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-{!-y-~-y-~-y-~-{-!{!-{!-y-~-|!!y-~-|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€|!!|!!}€!|!!}€!|!!}!€|!!|!!|!!|!!|!!}€!|!!|!!}€!}€!|!!|!!}€!|!!}€!}!€|!!~}!€}!€|!!}€!}€!}€!~}!€}!€|!!}!€}!€}!€}€!~}!€}€!~~|!!}!€}!€|!!}€!|!!}€!}!€|!!|!!|!!}€!|!!|!!}!€}!€|!!|!!}€!}!€}!€|!!}€!}!€|!!}!€}!€}!€|!!}€!}!€}!€|!!}!€}!€}!€~~}!€}!€}!€}!€|!!~}€!~|!!~}!€}!€}!€}!€|!!}€!}!€}!€}!€}!€}!€}!€|!!}€!}€!}€!~}!€}€!}€!~|!!}!€}!€}!€}€!}!€}€!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!{!-|!!},‚!|!!|!!{!-|!!|!!|!!{!-},‚!|!!{-!|!!},‚!|!!{!-|!!}!‚,|!!{-!|!!},‚!|!!{-!|!!},‚!|!!|!!|!!},‚!|!!},‚!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!{!-{!-|!!},‚!}!‚,{-!{-!},‚!x-„){-‚,z!„){-!x-„)~,…,y-~-w-ƒ4q=…uo‚Šl––±qƑÍx܄ææ€æoàŠÔr܇àxæ„Üm͑Ãw¼›´n«“¥e¥— g¥—´oÎÜsà†ào܎Ãr«“«r¥¢e¥— _—Œh~“šhÑÒm͓¹p³‘ÆrƒÆmƒ¿`¼•ªh ™™i—Šju›ker™€`‹žuik˜Šg¿’Ëh¿’­ršŽ«m³³o«“ÃeҏÒg˒¿q¼•³n«“¥i«”¼b´™¥i–ŠqŠ˜vku”d­“ª`ª˜ jƒ”{mu˜uim–h³•´`ª˜ n™•Šr{™{lƒ•¥g¿’Ëjˑ³p³šlu–bqb‘j¥’kƒ“b€š~frœkhr™uhu™rlƒ•¥b¼—´j¥”¥n«“¥g€šklF’mjubgV˜r]~œ~a~–jml›€jƒšknYuiŠ•€gV–`]{¡~a~›rl`šllb“bjV“mjml`”Ihb——_…~im”€jƒškjV–Vg`–VnU›IjŠ’­h¿’­i–mgkžkdr›rl`–Yom—lim–kŠ‘mkb•VoI‘mi¿Ôlԏ³fj“€a¥™ d~boƒ—™e¥”ªd•—uq–£m¥–™m™–¥j¿‘³n¥“«l­ÍkԌÚhڌÒmÑÍjڊÚiڎ¿g¿“¿iÓ¿k³‘­j³‘¿h¹”Ëj͏ÒiԐ¿i­’¥d¼”¿i¹”¿fːÒgҐ­i¥’­k³‘­j³‘¿iÓ¿i­‘­g¿“¿j¿‘³b¿“Ãk³‘­j³‘¿eÓÃg³“¼e³’Ãj¿‘³a¼•¼e­“¼k­‘³j¿‘³g¿“¿h¿’­i¥–p^4{-!z)„!|!!|!!|!!|!!}!€|!!}!€}€!}€!}€!~|!!}!€}€!~}!€}!€}€!}€!}!€}€!}!€|!!}€!|!!}€!}€!~}!€}€!}!€|!!~|!!~}€!}€!}€!~}€!}!€}!€}!€|!!}€!}€!}!€}€!}€!|!!|!!}€!|!!|!!}!€|!!|!!|!!|!!{-!z)„!|!!|!!{-!},‚!}!‚,|!!}!‚,{!-|!!}!‚,{!-z!„)},‚!{!-{!-{!-},‚!},‚!|!!{-‚,{!-z)„!{-‚,{!-z)„!{!-|!!z!„)|!!|!!|!!}!‚,}!€|!!{!†!}!€{!†!~|!!~~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-{!-{-!y-~-{!-y-~-{-!{-!{-!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!}€!|!!}€!}€!}!€|!!}€!|!!}€!}€!}€!~|!!~|!!}€!}€!~}!€}!€}!€}!€}!€}€!~|!!|!!~|!!|!!}!€|!!}€!|!!}€!|!!}€!|!!|!!~|!!|!!|!!}€!}€!|!!}!€}!€}!€}!€|!!}!€}!€|!!}!€}!€|!!}€!}€!}!€|!!|!!}€!|!!}!€}!€}€!~}!€~}!€~~}!€~}€!}€!}€!}€!~|!!}€!}€!}!€}€!}!€}€!}€!}€!~}€!}€!}!€}!€}!€|!!}€!|!!}€!}€!}!€|!!|!!}€!|!!}€!|!!}!€|!!|!!|!!|!!{!-|!!}!‚,|!!{-!|!!{!-|!!{-‚,{!-|!!|!!{-!},‚!|!!|!!{-!|!!{!-|!!{-!|!!{!-|!!{!-|!!},‚!|!!}!‚,|!!{-!|!!|!!{-!|!!|!!{-!|!!|!!|!!|!!{-!|!!|!!|!!}!‚,|!!{-€{-!|!!|!!|!!{-!{)‡,{!-{-!},‚!{,‚-{!-{!-{!-z!„)y-~-x)„-{-‚,y-~-w=Vkƒ‹‚j¥•¹dÕ¹q¼–Ãm͎Ôsà†àxæ„ÜnډÜyàƒæxæ„Üjˑ³n«“¥r¥Šnšm´š¼rԌÐkڌÔh¿’­i¥—p†–ŠiŠ•€e~™ƒk¥“ÃhҌÚhґÃr«“«qªŒ¥k™‘–^ ™•e€™rik˜Ši–Šhj”ue~šup‹ªj͏ÒiԐ¿o³’«r«“«l¥’³d¿”¼f´•­k ’‘p†˜ufŠ— Zœ••a~›ri€”mlb–ud› [””~e~šuj€˜upk–ba › _•“ƒeƒ•hƒ˜rjkšƒ_ª•ª`ª–¥j’Šm{›knl—­d¿”¼g›ŒlŠ–udiœVnV–Yhb•`jb’]¥•œi‘i¥—oŠ–{km’¥j³Ž–f`ška{ r`i¤ajV–VnY–Vqbd­“ªjm“Vfkœraqš`oY“mnb›ViV“j¥”¥dr—QcVž{_zkl`–Yjb™kjV–Vi€”mgV•Qbr› ^¥—•jumhu™rhb•`sI’InU›Imu«h¿’­iuVmF–ud¿”¼i³Œ›lb’m`ƒ–~nV–Yik—mhr™udiœVfr›m†˜€pŠËdڎÃn•†v½†àoàˆÚf˒ËkԌÚoڈàiԐ¿kˑÍhڌÒdÓ¥j¥•¹i¿”¹kÐÔiԐ¿d¼”¿g¿“¿g¿“¿iÒËbÓ¿e­“¼bÓ¿j¿‘³g¿’Ëi­‘­k­‘³j³‘¿lÓÃjˑ³j³‘¿iÓ¿i­‘­m³³i­‘­g¼“³i­‘­m³³h­’¿d¼”¿d¿”¼i­‘­i–‚^u=‰-z!„)|!!|!!|!!|!!|!!|!‡|!!}!€}€!~}!€~}!€}€!}€!}€!}€!}€!}!€}€!}€!}€!}€!}€!}€!}!€|!!}€!~}!€}€!~|!!~}!€|!!~}!€|!!}€!}€!|!!}!€}!€|!!|!!}€!}!€|!!}!€|!!|!!|!!|!!|!‰,|!!},‚!}!‚,|!!}!‚,|!!x)„-}!‚,z)„!|!!x)„-|!!{-!z!„)y-~-|!!{-!x)„-}!‚,z!„){!-}!‚,{!-y-~-y-~-{!-|!!{-!|!!},‚!{!-z)„!x)„-|!!},‚!z!„)z!„)|!!}!‚,|!!|!!}€!}€!}€!~~~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-y-~-y-~-{-!{-!{-!{-!y-~-{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!}€!}€!|!!|!!|!!}!€|!!}!€}!€|!!}!€|!!~}!€}!€}€!}!€|!!}€!}€!}€!~|!!}€!}!€|!!}€!}€!|!!}!€|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!}€!}!€|!!}€!}€!}€!}€!|!!}€!}!€}!€}!€|!!|!!}€!|!!}!€|!!}!€}€!}!€~}€!}!€}!€}€!}€!~}!€}€!}!€}€!}€!}!€|!!}€!~}€!~}!€}!€~}!€}€!~}!€}!€}!€}!€}!€~}€!}€!}€!~~|!!}!€|!!~}!€|!!}€!~,ƒ|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!{!-|!!|!!|!!}!‚,|!!},‚!|!!|!!|!!}!‚,|!!{-!|!!}!‚,|!!|!!},‚!|!!|!!|!!}!‚,|!!|!!|!!},‚!|!!}!‚,|!!|!!|!!|!!{!-|!!},‚!},‚!|!!{-!z)„!y-~-|!!z)„!~,…,{-‚,y-~-{-‚,{,‚-y,‚9u?‡be›‹ÒhڌÒoԊàn܋ÔlÓÃvƏÐu܊ÐhԎÒm͎Ôoڈàn܋Ôo¹šnšr³ŽÃl¿“«u«Œªl³“¹d¿”¼`ª˜ oŠ‚h–Ž­ošŽŠm™–¥l³’Ãf˒Ë`¼•ªlŠ•ƒju›khb—r]~œ~b{¡khƒ³eÒ³j™™—p™—™o«’³f˒ËcÒ­r«“«m¥–™n†•`¥–ªf —Šfrœkgkžkhj”u]~œ~ik—mg€—€hm•rdm–~Zz {fkœrmƒ–ƒim—ke€“ƒa~›rmu—ƒpŠ–†lu”me– \•›Œmƒ–ƒmu˜ufk“›d¿”¼aª˜—n™•Šlm’biŠ–cƒ•re`˜r\~žŒb~kgkžklb’mg€•¿c¿”ªjubeb›ihb”QsI”YsI’Ikb”¥d­“ªh€—Vhb•`diœVmVœVnV”Iob‹›g­Œ›h€—VkV•bck ilQ“IpFžPsF‘bg›Œlm’Fhk”u]•™~kb•Vnr•bjV–Vkb•VpI“Fem’ªg³“¼i–bhV—€`ª–¥gƒmlb–uhr—blQ“Ilb“bqVYgb‘ƒhu”kfkœri³ÒkڌÔc¼Ž›oԊàhڌÒfґ¿r܇àoàˆÚhґÃm͌Ún܉Úg˒¿g¿“¿i¿”¹i¿“Ãg¿“¿g¿“¿eҏÒeÒ³k­‘³h¿’­g¿“¿g˒¿k­‘³m³³k³‘­j³‘¿h­’¿iÒËg˒¿k­‘³j¿‘³i­‘­k³‘­i­‘­j³‘¿i­‘­k­‘³e­“¼j³‘¿g¿“¿i­‘­j¥’nu„Hz!„)|!!z!„)|!!|!!|!!}€!}!€}!€|!!~}!€}!€}!€}!€}!€}€!}€!|!!~|!!}€!}!€}!€}!€}€!}€!~}!€|!!}€!}€!}!€~}!€}!€}!€}!€|!!~|!!}!€}!€}!€|!!}€!}€!}€!|!!}!€|!!}€!}€!}!€|!!|!!|!!z)„!|!!z)„!|!!{!-|!!|!!|!!{-‚,|!!x-„){!-{!-z!„){!-}!‚,},‚!{!-{!-x)„-{!-z)„!|!!z)„!{!-}!‚,}!‚,{!-{!-},‚!},‚!z)„!{-!|!!{-!|!!|!!|!!}!‚,}€!}!€}!€{!†!~}!€~}!€~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-{!-{-!y-~-y-~-{!-{!-|!!{-!{-!|!!{!-|!!|!!{!-}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}€!~|!!|!!}€!}€!}€!}€!}€!}€!}!€|!!}!€|!!}€!~}!€}!€|!!|!!}€!|!!}!€}!€}€!}!€}!€|!!|!!|!!}€!|!!}!€|!!}!€|!!}€!}!€|!!}!€}!€}!€|!!}!€|!!}€!~}!€|!!}!€|!!}!€}!€}!€|!!|!!~}€!~}!€}!€}!€}€!~~}€!~}!€}!€~}€!}€!}!€}€!}€!}€!}!€}€!}€!~}€!}€!~}!€}!€}€!}!€~}!€}!€}€!}€!}€!|!!}€!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!},‚!{!-|!!|!!|!!{!-|!!|!!|!!{-!{!-|!!},‚!}!‚,|!!},‚!|!!{!-|!!},‚!{-!}!‚,|!!},‚!}!‚,|!!|!!|!!}!‚,|!!{-!}!‚,|!!|!!{-!},‚!|!!|!!|!!},‚!|!!|!!}!‚,}!‚,|!!}!‚,|!!{-!},‚!{!-|!!|!!{-‚,}!‚,{!-z!„){-‚,{-‚,{-!~,…,{-‚,{,‚-{-6pb‚sšŽÆx܄æyàƒææ€æxæ„Üh˔¹mÑÍzЏÊlÓÃoÓÆoƓÃh¿’­f›Š–kÐÔnډÜlԏ³m¥–™p™—™e– _—Œj’ÃkԍÔl˒«m­˜±p¹˜¼g¹˜´b¥“ƒhr—bjk›ujb™kdr›rhr™uk¥“Ãb˓Ãk­‘³r«“«r«“«h³•´e­– j¥”¥t«‘lƒ“mcŠ™Œ`Œ—jjmh–ސg€škaržigk”–f¹–¼i­‘­j’ŠlŠ–ugjk­‘³i¥–hƒ˜rfrœki`—ug€‘ufrœkb€š~[‹Ÿrhr™uim—klb•ƒ`¥–ªe –m”™jƒ—€oªŒ¿e¼“­f€–`dr›rer˜`lbœVlV¤Uku–¥`ª–¥hŠ—rmm™bl`”IjV–VnV”Ifb–¥\ª”œgr˜VoY•bkV•bg`–VkUœFhb——d¥‘–a~™`nY–VjV–VnU›IpI“Fo=–u^¥—•gr˜VjF˜ka~›rkV•FrIšVkV•bk‚‹ƒpY•Fjb’cª–b•‘ukY™reƒ“€e`•QtM’blb“bnV”InV”IpI“Fm‚¿k³ufXšƒe´–Ëb˓Ãm³³f˒Ëf˒Ëh¿’­kԌÚk܌Òj¿‘³x܄æsà†àfҐËm͌Úfґ¿i­’¥m³³i¹”¿fːÒe˖´i­‘­i­‘­g¿’ËfҐËe¼“­i­‘­h­’¿g¿“¿b¼—´iÒËjˑ³i­‘­k­‘³k­‘³d¼”¿i­‘­g³“¼h¿’­i­‘­g¼“³d¼”¿j¿‘³m³³i­’¥f‡ˆƒwV~-z!„)|!!|!!|!!}!€|!!~|!!}€!}€!~}!€}!€}!€}!€}!€|!!}€!}€!}€!}!€}!€|!!}€!}!€}!€}!€|!!}€!~}!€}!€}!€}!€}!€}€!}!€}!€|!!~|!!}€!}€!}!€}!€|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-}€!},‚!},‚!|!!|!!},‚!}!‚,z!„)}!‚,|!!~,…,{-!{!-},‚!},‚!},‚!x)„-{!-x)„-{!-z)„!x)„-{!-}!‚,|!!{!-}!‚,|!!|!!},‚!|!!{!-|!!|!!{!†!|!!~ƒ,~}!€|!!~}!€~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{-!{-!y-~-|!!{-!{!-|!!|!!{-!|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!|!!}€!~}!€|!!}€!}!€}!€}!€}€!}!€}!€}!€}!€}€!}€!}€!|!!}!€}!€}!€|!!|!!|!!}€!|!!}€!}€!}!€|!!}!€|!!|!!|!!}!€|!!}€!}!€}!€}!€}!€}!€|!!}€!}!€|!!}€!}!€|!!}€!}€!|!!|!!}€!~|!!~}!€~}!€}€!~}€!}!€}€!}!€}€!~|!!}€!}!€}€!}€!~}!€|!!}€!~}€!}!€~}€!~}€!~}€!}€!~}€!|!!|!!}!€|!!|!!}!€~,ƒ}!€|!!|!!|!!|!!|!!|!!},‚!}!‚,|!!{!-{!-}!‚,|!!{!-|!!},‚!|!!|!!|!!|!!|!!{-!|!!{!-|!!{-!|!!|!!|!!{-!{-!|!!{,‚-{!-{!-|!!}!‚,{!-|!!}!‚,|!!|!!|!!}!‚,|!!|!!|!!}!‚,|!!|!!|!!}!‚,|!!{!-|!!|!!}!‚,{!-},‚!|!!{-!{-!~,…,{!-},‚!y-~-y-~-y-~-t9~9vN†‚p³‘Æq͊àsà†àyæƒàæ€æoàŠÔoÓ«rÏÐn܋ÔkÔ¹p¼˜¹n«“¥b ›—h——ÃoڈàoàˆÚl͐­o™—ƒj€˜ug€—€d~˜ŠkÎÚn܉Úgғ¹r±š«n«“¥b ›—\Œ¢{fkœrh–Ž­g–‘€l™™n¥“«l«“¿d¿”¼k­‘³r«“«q«•™f¥–¥]•™~pƒ‚nšjmdr›rfrœkf›¿eҏÒp³šsš‘†mu«eҏÒfҐËn¹•«m¥–™mƒ“³fːÒlԏ³n«“¥hƒ˜rox­i­‘­jmju˜€eu›qib•€i€”mkY™rd—‘›_”œrm€˜†lƒ•Šl«“¿d¿”¼h›ŽŠhƒ˜rfkš`fr“umk˜Idb••`—™•iŠ—hŠ—rob•Ym€šg“`fb— b •ƒhkšVmb›boY“mjƒ—€kb•VcV™~a•—€jm“VsY–YqVNlb’mkV•Fn=’m^œ‘ƒgj“VnI”Vfkš`kUœFsI’IoI’Ši­‘­m€•If`–€`ƒ–~h‡Œ€lb“baržijU–Iv?’ImY—€kŠ‘moV›FsF‹Nh­’¿g¿–fV“ƒf­•´i­’¥h–ސcª–c¥›h”€d¥•¿gˑ­m’«uԇæoàŠÔkˑÍkԍÔhڎËm³³i¿”¹h­’¿f˒Ëgˑ­h­’¿e¿–´i¹”¿f˒Ëk³‘­f¼–¹h´•³i¹”¿h¿’­k­‘³k³‘­i¥’­m³³k­‘³g¿“¿d¿”¼k­‘³e¼“­i­‘­k­‘³e­“¼a¼•¼g¿“¿h¿’­g›Œkƒ‡H{-!|!!|!!|!!}€!|!!}€!}€!~|!!}€!~}€!}€!}€!}€!~}!€|!!}€!}€!}€!}€!}€!}€!}€!}€!}€!}!€}!€}!€|!!}!€}€!}€!}!€}!€}!€}!€|!!}!€|!!}!€|!!}€!}€!}€!}€!}!€{!†!|!!}€!}€!|!!}!‚,|!!|!!z)„!|!!z)„!{-!{-!|!!y-~-{!-z)„!{-!{-!},‚!{-‚,|!!},‚!{-!},‚!{-!{-!},‚!{-!},‚!{-!{!-{!-z!„){!-},‚!},‚!|!!{,‡){,‡){!-z)„!z!„)|!!|!!|!!|!!}!€|!!}€!~}!€}€!~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!{-!y-~-{-!{-!{!-|!!{-!|!!|!!{-€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-{€-}€!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€|!!}€!}!€}!€|!!|!!}€!}!€}€!}€!}€!}€!}!€}!€|!!}!€|!!|!!|!!}€!|!!}!€|!!}!€|!!|!!|!!|!!|!!}!€}!€|!!|!!}€!|!!}€!}!€|!!}€!|!!}€!|!!}!€}!€}!€}€!}€!}!€|!!}€!}€!}€!}!€}€!}€!}€!}€!}!€}!€}!€}!€}€!~}€!~}€!~}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€}€!}€!}€!}!€}!€}!€}!€}€!|!!~}€!}€!}€!}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!{!-|!!{!-}!‚,{!-|!!{-!|!!{-!|!!|!!|!!{-!}!‚,|!!|!!|!!|!!|!!},‚!},‚!{!-|!!|!!{!-|!!}!‚,|!!}!‚,|!!|!!{-!}!‚,|!!|!!},‚!|!!|!!}!‚,|!!{-!{!-},‚!|!!}!‚,{-!}!‚,~,…,{!-{-!y-~-|,ƒ=qH}Cq9|Pl‚ˆ›k­‘³s¼”Íq܉Üq܉ÜuЊÜn܉ÚiԐËf­•´oԊàrà‡ÜpƑ³r«“«n™•Šg€—€k¥“Ãq܉ÜhԎÒi­’¥iŠ—qx‘uju˜€j–³nƎÚhԎÒi¿“¥k“ƒmƒ–ƒhu™ra{ rjr™™g¿’Ëh¿’­o«“Ãp¼˜¹m³³a´—ªh ™™m™”lŠ–ub€š~a~›rgƒ‘¥k¿‘Ígˑ­s‘‘™nš†i³ÒhڌÒi¿“¥n«“¥n†•­aÑÒbÓ¿k´–«q«•™j“¹fːÒgˑ­m­’«ošŽŠl™•¿fҐËl³’¥oÓ«n™˜uiŠ“¿d¿•¥a~›riŠ—`Œrdj•rklœr` ˜ªa´—Ãh¥˜™i—Šj€˜ui¥“¿g¥—ƒhr—Š\•›Œgu‘€j™ƒmkšYh¥“ËkÓ¥im”€\”~jV–Vlb“bjV•Še›ˆ›jŠujbu_€šzhkšVnV–YnY–VjŠ’hŠ‘jjV“mYŒžzl`”ImVœVpI“FnV”IpI“FsIŽšj¿‘³f–`gV˜r`rœqlu–bob•YjVIsI’IrI“=jIŒj¥’iuVn=”b`¥–ªf¥•ŠmP‰uYœ“œcƒƒhj’bar›~e€™rlb’mm†’–k­“ƒqb‘¥n«•¹lÒ³oÌàtЍÍm͑Ãg¿“¿f˒Ëh¿’­m³³g³“¼iÒËg˒¿i­‘­d¿”¼g¼“³g¿“¿e¿–´a¼•¼`¼•ªl¥’³k³‘­k­‘³d¿”¼m³³_¼”Ãh¿’­g³“¼i­‘­i­‘­i­‘­i­‘­i­‘­i­‘­j³‘¿qªŒ¥d›ŒƒvH~-z)„!|!!|!!|!!}€!}!€}!€}€!~}!€}!€|!!}€!}€!}€!}!€}€!}€!}!€}!€}!€}!€|!!}€!}€!}!€}€!~|!!}€!~}€!}!€}!€}€!}€!}€!}€!~}!€}€!|!!}€!}€!|!!|!!}€!|!!}€!{!†!|!!|!!|!!|!!z)„!|!!|!!{-!|!!z)„!z)„!{-!|!!z)„!{-!}!‚,{!-|!!{!-{-!}!‚,}!‚,{!-{)‡,{!-{!-}!‚,{-!~,…,},‚!{-‚,{!-z!„){!-|!!{-!|!!|!!|!!|!!|!!z)…}!‚,|!!{!†!}€!~}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-{-!y-~-{!-{-!y-~-y-~-{!-{!-{!-{-!{-!|!!{-!{-!{!-|!!|!!{-!|!!|!!{!-|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!{-!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!|!!}€!}!€}!€|!!}€!}!€|!!}!€}!€}!€|!!}!€|!!}€!|!!}€!}€!|!!|!!|!!|!!}!€}!€|!!}€!|!!|!!}€!}€!|!!|!!|!!}!€|!!|!!}€!}!€|!!}!€|!!}€!}!€}€!|!!|!!}€!|!!|!!}€!}€!|!!}!€}!€}!€}!€}!€}!€}!€~}€!}€!}€!~}!€}!€}€!}€!~}!€}€!~}€!~~}€!~}!€}!€}!€~}!€}!€}€!~}!€}€!~}!€}!€}!€|!!|!!}€!|!!}!€|!!}!€|!!}!€|!!|!!}!‚,|!!|!!|!!|!!{!-|!!{-!},‚!{-!{!-|!!|!!|!!|!!{!-|!!|!!|!!{-!},‚!{!-|!!}!‚,|!!},‚!{-!{!-|!!|!!|!!{!-}!‚,|!!{!-|!!{-!|!!|!!{-!|!!|!!|!!},‚!|!!{-!},‚!{-!z!„)}!‚,|!!{!-{!-{!-{!-{-!{-!y-~-{)‡,{-‚,r=€‡k­‘³j³‘ËjڊÚm͑ÃoÓÆo͏ÍqƑÍo͏ÍkÔ¹b´™¥d¥•¿kԌÚp܌Íl³’¥v••‘rŽphƒ˜—t™Žªb˓Ãb¼—´h ™™jŠ’m³³l­”™n«•¹iÓ¿e¼“­`œ•€jk™beuš~b`œihr˜ƒoš¹f˒Ëe¿–´r«š±uªŒ«ošŽ¥d “–aŒ›€gŠ——nšqxŽŠlƒ•Šh¥“ËjڊÚkԐÃo³’«r«Žšg­‘Ë_Ô¼i­’¥o¥Žšlƒ•¥_´²_ª•ªk–‘™i—ŠkŠ“¥f¹–¼b´š m™–¥l™™k³g˒¿f¼”¥l³“¹g­™¥f­™¿a×´e—›c—›—b~œh™™ dŒœub™•b¥™´i­’¥d­Ÿ­g­™¥e´–¿e¹˜ b—› \¥žc—›—_«ž—ju›ki¥“¿g˒¿e¥— \Œ¢{dX¡UrIšVnY”i¥’­j¥”¥j€˜udr›rj`œVnY–VvIbh¥Ž›e¥”h”€]~qgaœFsI’InV”IkmmkV•FnVšdª“gu`lY–`jb™kl`”IsV”MpF“InV”ImF“FmY‘–i¥’­e–jiF‘jf–—d~mkV•bar›~hr—bxI’MkV•bga—IoY•bg€—€f€–`kV–ƒp™—™h™™ t³ŒÍn͐³o«’³k¿‘ÍkˑÍjÒ­e¥”ªe¥”ªg¿’Ëf˒Ë_ª•ªm³³h­’¿g¿’ËcÒ­dª“­d­“ªj³‘¿g¿“¿k³‘­g¿“¿k³‘­h­’¿e¼“­k­‘³g­Œ›l¥’³i­‘­k­‘³i­‘­e­“¼j³‘¿h¿’­i­’¥nƒ‰Nx9!z!„)|!!}€!}!€|!!}€!}!€|!!}€!~}!€}!€}!€}!€}!€}!€~}!€|!!}€!|!!~|!!}€!}€!}!€}!€}!€}!€}€!|!!}€!}€!}€!}€!}€!}€!}!€|!!}!€}!€|!!|!!}€!}€!}€!}€!|!!}!€|!!{!†!|!!|!!|!!}!‚,|!!z)„!|!!{-‚,|!!{,‡)}!‚,}!‚,|!!{-!}!‚,{!-{-!{,‡){!-{!-},‚!{-!x-„)}!‚,{!-}!‚,{!-{!-z)„!z)„!},‚!x-„){!-{)‡,{!-|!!x-„)|!!},‚!}!‚,|!!|!!|!!|!!|!!}€!~}!€~}€!~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-{-!{-!{-!{-!|!!{-!{-!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}!€|!!|!!|!!}€!~}!€}€!}€!|!!|!!}!€|!!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!~ƒ,}€!|!!}!€|!!|!!|!!}!€|!!}!€|!!}€!|!!}€!}€!}!€}!€}!€|!!|!!}!€}!€|!!~}€!}!€}€!~}!€~}€!~}!€}!€~}!€}€!}€!~}!€}!€}!€}!€}€!~}!€}€!~}!€}!€}!€}€!}€!}€!}€!}€!}€!|!!}€!}€!}€!}€!|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!},‚!|!!{!-|!!}!‚,|!!|!!},‚!}!‚,|!!|!!|!!}!‚,{-!{!-|!!}!‚,|!!},‚!},‚!|!!{-!|!!{-!|!!|!!|!!}!‚,|!!{!-|!!},‚!|!!|!!{-!|!!}!‚,|!!{-!},‚!{-!},‚!x)„-}!‚,z!„){!-~,…,{,‚-w-ƒ4wNfj­Ôq܉Üsà†àyæƒàkڎÃm¹“ÍmԎÍkÔ¹r±š«e¥— d› i¥“¿hԎÒe˖´j–’ujŠ’­l³’¥h–p‘¥e¥”ª^¥—•eƒ“€k³fҐËkÓ¥r«“«g­™¥_—Œa~›rdj•—i­’¥fƒm™–¥n«•¹iÓ¿`ª–¥sŠ‘ƒp†˜ulu–Š_—œ”b~š€j³‘ËiԐËlÒ³r«“«j³‘ËeҏÒjˑ³m­’«mš’l™”­b´™¥`œ—p™—™b—› a¥™ \•›Œg€—€jŠ’d™¥f¥–¥`œ•€j€—ƒp™—™b š´d¿”¼b´š q™•«e¥— g¥—´f´•­i¥’­p³˜±i¥—i¥“¿b¼˜—aŒ›€^”›¥g­™¥c«›¥c—›—b š´c¥›lŠ•ƒmƒ—uer™€b€š~ju›kh—•³g¿“¿j¿‘³f™›Œgr˜VmVœVd€™ d­“ªeª”¥h ™™f›rpY•FjV–VlV—uh¥Ž›h–ސa~›rfkš`kV•FmF“FsI”Ykƒ‹‡i€•bhV—€]ƒ–zl`–Yob•YjV–VrI“=pI“FpI“blu–brI“=gb‘ƒ`¥–ªg›‰umI˜kc~“ugj“VpI“bf`šklbŽIpI“FsI’ImF“FpI“bjbœ`hb•`kV•bhr™uox­k͑¿m¥–™m—«hԎÒi˒ÃlÓÃe­“¼i­‘­j³‘¿g˒¿m³³g¿“¿k³‘­g¿“¿h¿’­j¥”¥eª”¥f¼”Ãi˒Ãk³‘­g¿“¿i­‘­k­‘³i­‘­g¼“³h¿’­e­“¼m³³i­‘­i­‘­k­‘³eÒ³h¿’­k³‘­l›ˆ‚lj‡9z)„!|!!z)„!}€!}!€}!€}€!~}!€}!€}!€}!€}€!}€!}!€}!€|!!}€!}!€}!€}!€|!!}€!}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€}!€|!!}!€}€!}€!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!z!„)|!!|!!|!!{-!|!!{-!{-!{!-x)„-},‚!}!‚,{!-{!-z!„){-!{!-},‚!},‚!y-~-}!‚,x)„-|!!{-‚,{!-{-!{-!},‚!{,‡)|!!|!!},‚!|!!},‚!z!„)|!!|!!{!†!|!!}€!}€!}!€|!!~}!€~~~~~~~~~~~~~~~~~~~~~~y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-{!-{!-{-!{-!y-~-{!-|!!|!!{-!{!-|!!{!-|!!|!!{!-|!!{-!|!!{!-|!!|!!|!!|!!{!-|!!|!!{-!|!!|!!{-!|!!{-!{!-|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€|!!|!!}€!|!!|!!|!!}!€|!!}!€|!!}€!}!€}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!}€!|!!|!!}!€|!!|!!|!!}!€|!!|!!}!€|!!}€!}!€}!€|!!}!€}!€|!!|!!}!€|!!|!!|!!|!!}!€|!!}€!|!!~}€!}!€}!€}€!~}!€}!€~~}!€}!€}!€}!€}!€}€!}€!~}!€|!!}€!}€!~}!€}!€~}€!}!€}!€}!€}€!~}!€}!€}!€}!€}!€|!!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!{!-|!!{!-|!!{!-}!‚,{!-|!!|!!},‚!{!-},‚!|!!|!!{-!{!-}!‚,|!!}!‚,|!!{-!|!!{-!|!!{-!},‚!},‚!}!‚,|!!},‚!{!-}!‚,{-!{-!}!‚,{!-|!!{-!{-!{!-|!!{-!{-‚,|!!|!!{-!{-!{-!},‚!{-‚,{-‚,y-~-w-ƒ4zE…‚p³‘ÆvЈàyàƒæyàƒæsà†àkԐÃnԋÜn܋ÔoÓ«k¥“ŠiŠ—d™¥n±›¹g¹˜´d¥‘–d~–mf›Ëg˒¿m¥–™m™”e—›b€š~]~œ~l™•¿fːÒm¹—™j™ƒjƒu]~œ~`rœqiŠ“¿bÓËm­’«n¥“«r«“«e­”¥_¦™ƒg€—€j€˜uhƒ˜—b˜Œi—¥iːÔhڌÒnƔ¹o³’«e­“¼a¼•¼a¥™ lŠ–uj€—ƒ_—ž«^ œ”hr—Še´–¿e¿–´^²ž e—™€i€•¥fːÒi¿“¥b¥™—`Œrhr—Šf¥–¥g¥™­_´²d ›d› k™—€fƒ•ª`ª–¥j¥”¥m³³m«—g¥‘ÒbҒªf–—e›—`Œrjk™bjb™k` ˜ªi­’¥lŠ–uom—lhVškhmjlb’mbƒ“¥a¥˜¥b ›—dŒœukŠ“¥g–‹–b—™¥[«¡«a¥˜¥f—–lŠ–ujk™bjƒuhVšk[•š”`ƒ–~qu‘xlk VlQ“IqFšFpF•Ye –h‡Œ€lb“baqš`i`•FqVYkV•FpI“Fu?“=oI’ŠiŽulb“Fi`—ufƒdƒ’`kb•Vej“`mV•=sI’IkF•VnV”Iw9ˆ?oF”=lb“bnU›IvI‹Nj¥”¥gr˜VpI“bk¥‘ÔhڎËj–’uh‘ËkԌÚjˑ³kԌÚdڎÃd¿”¼l¥’³d¿”¼d¼”¿f˒Ëe¿–´k­‘³i­‘­e­“¼g³“¼l³’Ãf˒Ëe¼“­i­‘­i­‘­g³“¼m³³g¼“³g¿“¿m³³g¿“¿i­‘­i­‘­i­‘­m³³j¿‘³k³‘­mšŠ–lƒ“m{=€!|!!|!!}!€|!!|!!}!€|!!}€!}€!~}€!}€!}!€}€!}€!}€!}!€|!!}€!}!€}!€}!€}€!}€!}€!}!€|!!}!€}€!}€!}€!}€!}!€|!!}€!|!!}!€|!!~}€!|!!}€!}€!}€!{!†!}€!|!!|!!|!!{!†!|!!z!„)|!!|!!},‚!{!-{-!}!‚,|!!{-!|!!z)„!{-!}!‚,|!!{-!x)„-|!!y-~-}!‚,x-„){!-x)„-z!„){!-}!‚,{!-z)„!{-!},‚!},‚!{-!{-!{!-{-‚,{!-z!„)|!!|!!|!!|!!|!!|!!}!‚,}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~~~~y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-y-~-{!-{!-{!-{!-{!-{!-|!!|!!{!-|!!{!-|!!|!!|!!|!!{-!|!!|!!{!-|!!{!-|!!|!!{!-|!!|!!{-!|!!{-!|!!|!!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!}!€}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!}€!|!!}!€}!€|!!|!!|!!|!!}€!|!!|!!}!€|!!|!!}€!}€!}€!}€!|!!}€!}!€}!€|!!}€!}€!}€!}!€}€!}€!}!€~~}!€|!!~}!€}!€|!!~}!€}€!~}!€|!!~}€!}€!~~~}€!~}!€}!€}!€~}!€}€!}€!}€!}!€~|!!}€!}€!}!€|!!|!!}€!|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!}!‚,{!-|!!|!!|!!{-!{-!|!!|!!|!!{-!|!!{-!{!-|!!|!!{-!|!!}!‚,|!!{!-|!!|!!},‚!|!!|!!}!‚,|!!}!‚,}!‚,|!!}!‚,|!!},‚!|!!{-!{!-{!-}!‚,{!-}!‚,{!-x)„-{,‚-y-~-y=‚Nr‘³uʑÍnԋÜuЊÜq܉ÜhԎÒg¿’ËnډÜmàŒËi­‘lƒ•¥i¹“­n«“¥m¥–™b ›—\Œž~hr—Šj³‘Ëg˒¿g¥——o•iŠ•€dr›rk€—™k­‘³a¼•¼f›€dr›rdŠ˜~e~šul™™l³’Ãb˓Ãg´—¥p¥™•pŠ–†gŠ——`•™—b¥›­f¼”¥i­“¹i³˜­d­Ÿ­b¿“Ãd¿”¼j¿‘³k«™­g¥—´_´ž«_—Œg——¥d¼”¿j¥”¥h™™ m—«uڅæoàŠÔk¹”ÃnƔ¹j¹Úæ€ælԏ³n«“¥p™—™oš‹ÔmԎÍk³iŠ•€b~komŒ‚gƒmfm• ^ ™•d”šƒl™™m•—h¥“Ëjˑ³v³Æj¹•¥iu—`jk™bh`•baž«c›‘ kŠ“Šo™—ƒqm‘f¼”¥f€–`k{š—[‹Ÿrj`œbl`–Yi–ŒÔkԍÔh¿’a~›ra~›rjkšƒo™—ƒm”™f­•´iŠ˜kWŒ¢‹a~–jjk›uer˜`lb–ujm“VlF“bh–ސe•ƒlb“be`–`kUœFsI’IqFšFlb“bqFŽ4oI’Šd‡Ž~rmŠNgV“j]~”~mk˜InV–YjV–VpI“Fu=“?kF•VmV•=oF”=s=‰VmšŠ–m`›Fm9Šmp³Ëh¥•`mI•€kÐÔg˒¿f›€i³ÒeҏÒg˒¿sà†àoàˆÚb˓Ãb¿“ÃcÒ­h­’¿iːÔgˑ­h›Ž¥dª“­k¹”Ãg˒¿k­‘³i˒Ãk³‘­i­‘­i­‘­j³‘¿h¿’­j³‘¿g¿“¿j³‘¿g¿“¿k³‘­i­‘­i¥’­e­“¼g¼“³d¿”¼l³’¥j‡€‡om‡Hy4„!}!€|!!}€!}!€|!!}!€}€!}!€|!!}!€}!€}€!}€!}€!|!!}€!}!€|!!}€!}!€|!!}!€|!!}€!}€!~|!!|!!}!€|!!~|!!}€!}€!~|!!}€!|!!}!€}!€|!!}!€|!!|!!{!†!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!z)„!},‚!{!-}!‚,{-!},‚!}!‚,{!-}!‚,{-!{-!{,‚-z!„){-!{!-{-!},‚!{-‚,}!‚,{!-{-!{,‚-|!!{-!{-!},‚!{!-z!„)|!!z!„)|!!z!„){!-|!!|!!}!‚,}!€|!!|!!}€!}!€}€!}!€}!€}€!~~~~~~~~~~~~~~~~~~~~v9~-t-9y-~-y-~-y-~-y-~-{-!y-~-y-~-{!-{-!y-~-{!-{!-{!-|!!{!-{!-|!!{-!|!!{!-{!-|!!{-!|!!{-!{!-|!!|!!|!!|!!{-!{-!|!!{-!|!!{-!|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}!€|!!}!€}!€|!!}€!|!!|!!|!!}€!}!€|!!|!!}!€}!€|!!}!€}€!|!!|!!|!!|!!}€!|!!}€!|!!|!!}!€|!!|!!}!€}!€}!€}!€}!€}!€}!€~}!€}!€}!€~}!€}€!}!€}€!~~}!€}!€}!€}€!}€!~}!€}!€}!€}€!}€!}€!~}!€}€!}€!}€!}€!}!€}!€}!€|!!|!!}€!}!€|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!},‚!{!-|!!{-!}!‚,|!!{-!|!!{!-|!!},‚!|!!|!!},‚!{-!},‚!|!!{-!},‚!}!‚,|!!{-!}!‚,{!-{!-}!‚,|!!}!‚,}!‚,{!-{!-}!‚,{!-{!-{-!|!!{-!{-!{-!{-!},‚!},‚!{-!x-„){!-}!‚,{!-x)„-{-‚,v9~-wEkk­‘³l³“¹qƑÍoƓÃnƔ¹lÓÃe¹•ªf­™¿hҌÚd˓¼f —Šh¥“ËhґÃm¹—™hƒ˜rfkœra{ rlƒ•¥j³‘¿e¼“­g——Šh–j¥”¥f–—t™™£g­™¥`ª˜ YŒžzh–­f¿™­m™–¥t¼–ÆoƓÃ^Ôªe¥”iŠ•€fkœrb—› a › d´”Òiڎ¿g¿“¿d´œ­f¥–¥e¥”­b­›¥f¥–¥e¥— b¥›­a¥™ eƒ•j­Ôsà†àn͐³n¹”ÆqƑÍsà†àoàŠÔt͍Ðr܍ÆoƐÔsà†àmԎÍq͑Æq¼•³q͊àyæƒàiԐ¿p¼—¥o’xk¥“Ãjˑ³j’Šbœ~frœkhu™rmu˜ua—˜ªa´—ªq³•¼n¹•«jŠ’i¥’­k”uer™€b€š~lb–ulƒ•Šl€•«b¿“Ãf¼”Šjƒ™fuijV–VsY–Yh’¿fːÒjԏ­em™igkžkhVškjušb—› f´•­b •ƒ]~œ~frœkkV—uol—miŠ–g–‘€e`–`^ ™•eƒunY–ViVžUsI’IpF“Iu=ŒNeƒ“€pY•FfV“ƒf€“jkb•VnI”VgkžkiQ”FsI’ImF“Fu=“?pI“FrNŠmjm“VoF”=pI•ue­– lm’FoI‘mh³•´e›ŒjeQŽ›h­’¿f¼”¥i‘b¿“Ãa¼•¼j¥”¥kҌÜoàŠÔd¿”¼oڈàfҐËa¼•¼iÒËh¿’­i¥’­j¥”¥l³’Ãi˒Ãi­‘­k­‘³k­‘³g³“¼k³‘­j³‘¿d¿”¼m³³j¿‘³k­‘³j³‘¿i­‘­i­’¥dª“­i­‘­i­‘­m³³h¿’­ošŽ¥g‡rvH~-|!!|!!}€!{!†!}!€}!€}!€}!€~}€!}€!}€!|!!}€!}€!|!!}€!}!€}!€|!!~|!!}!€}!€|!!}€!}€!~}€!}€!}€!}!€}!€}!€}!€}!€|!!}€!}€!}€!|!!}€!|!!}€!|!!}!€|!!{!†!|!!|!!|!!|!!|!!{!-z!„)|!!z!„)}!‚,|!!|!!{-!},‚!|!!{-!z!„){!-}!‚,{!-{!-~,…,}!‚,{-!},‚!{!-z!„){!-w)‰)y-~-{)‡,},‚!{!-z!„)}!‚,{!-z)„!},‚!{-!|!!z)„!z)„!}!€|!!{!†!|!!}€!{!†!}€!~}€!~~~~~~~~~~~~~~~~~~~~~t-9y-~-t-9t9-y-~-y-~-y-~-{-!y-~-{-!y-~-{!-{!-{!-|!!{-!{-!|!!{-!{!-|!!{-!|!!|!!{!-{!-|!!|!!{!-{!-|!!|!!{-!|!!{!-{!-|!!|!!|!!{-!|!!{-!{!-|!!{!-|!!{-!|!!|!!{-!|!!|!!|!!|!!|!!{!-}€!{!-|!!|!!{-!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€|!!|!!}€!~}!€|!!}!€|!!|!!}!€|!!}€!}€!|!!}€!}!€}!€~}€!}€!~}!€}!€~}€!}€!~~}€!}€!}€!~}!€}€!~}!€~}!€}!€}€!~}!€~}!€}!€}!€|!!~~|!!}€!}€!}€!}!€}!€|!!|!!}!€|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!}!‚,|!!|!!{!-|!!|!!},‚!|!!{-!|!!{-!}!‚,{!-|!!|!!}!‚,|!!},‚!|!!|!!{-!|!!},‚!|!!|!!|!!{!-},‚!{!-{!-|!!},‚!|!!y-~-|!!|!!},‚!{!-|!!}!‚,{-!{-!{!-}!‚,|!!{-!},‚!{-‚,~,…,v-~Hjkƒ–i¿ŽÚp܌Íi¿”¹mڌÍkÔ¹p±˜³m¥–™k–‘™i­˜³g¿“¿e­– e€“ƒi³ÒeҏÒeª”Šfrœkgu‘€hu“e —¥m«’­a › a~›rgŠ–´f˒Ëp³šj¥”¥p™—™_—Œb~š€g­‘ËfҐËl¹“³r¹³m«’­e¥— c—›—j™™—iŠ–g­™¥e –­kÎÚhڌÒh˔¹l­”™g™€aŸ¦a¥™ j™™—k¥“Ãj¹•¥m”™oÓÆvЈàsà†àkԐÃt¼–ÆrƒÆm͎Ôg˒¿s³Œ³v³Ž«p¢Œ¿b˓Ãg¿“¿kÔ¹n¹•«oÎÜkڌÔi˒Ãs͊ªo¥Žšp͌ÜoàˆÚi˒Ãk³lu”mn‚Œfu“rbužž\•›Œi€•ŠiŠ—n†•­mÑÍjÒ­j’ŠfrœkkV•bob™lbr™¥a¼•¼i­‘­ošŽ¥g€šknV–YnV”Iku•­a¼•¼jˑ³g ˜ƒdiœVg`–VnI”Vlb“Š^ ™•a”›€\Œ¢{ckžXgV˜—a › e¥— f —Šlj‘Ib€š~gu`nV–YpF“Ilb“bkV•Fn=”bj¥Š‡jm“VkV•bhr—bl`”IpI“FlI“QsF’?o=”Fu=ŒNmV•=r=“Iku”hu”kmF“FkIƒe¥‹…lm’FjV“m`œ–d~bhbŽ›a¥˜¥g›‰ufj“€`¥–ªb •ƒhm•rg­‘Ëgˑ­hƒ“ƒlˍÜdڎÃh­’¿fґ¿g¿“¿g¿“¿h¿’­h­’¿g˒¿i­’¥eª”¥i­‘­g¿“¿k³‘­k­‘³h¿’­i¥’­k³‘­e­“¼j¿‘³i­‘­j¥”¥i–¥i­‘­dª“­k­‘³g³“¼i­‘­nš…‡nu„Hz)„!|!!|!!}€!}€!}€!}€!}€!|!!}€!}€!}!€}€!}!€}!€}!€}!€}€!}!€}!€|!!}€!}!€}!€|!!}€!}!€|!!}€!}€!}!€}!€}!€|!!}!€|!!}€!}!€}!€|!!}€!}€!}!€}!€|!!|!!|!!|!!|!!}!‚,|!!|!!{!-|!!{!-{!-|!!{-!x)„-x)„-}!‚,{!-x)„-x)„-}!‚,{!-x)„-}!‚,z!„){-!{-!},‚!{-!y-~-{!-{!-{-!},‚!{-!{-!x-„){-!},‚!|!!},‚!z!„)z!„)|!!|!!|!!z!„)|!!|!!|!‡~,ƒ|!!}€!}€!~~~~~~~~~~~~~~~~~~~~~~t9-v-~9y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!{-!{-!y-~-{!-|!!{-!{!-|!!{-!|!!{-!{-!{-!|!!{!-{!-|!!|!!{!-|!!{-!|!!{-!{-!|!!{-!{-!|!!{-!|!!|!!{!-|!!|!!|!!{-!|!!|!!|!!{-!{€-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€}!€|!!|!!|!!}!€|!!}!€|!!}€!|!!}€!}!€}!€}!€}!€}€!}€!~}€!~}!€}€!}€!~}!€}!€}€!}€!~}!€}€!}€!~~}€!}€!~}€!~}!€~}!€~}€!~}!€}€!}!€}!€}!€}!€}!€}€!}!€|!!}€!|!!|!!|!!|!!}€!}!€|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!{-!|!!}!‚,|!!{-!{-!|!!|!!{!-}!‚,|!!|!!|!!},‚!{-!}!‚,}!‚,|!!{-!},‚!{-‚,|!!{!-|!!|!!},‚!{,‚-{!-|!!}!‚,}!‚,|!!{-!{-‚,{-!{-!{!-y-~-}!‚,{!-},‚!{-‚,y-~-t-}CqxŽÃkԌÚr܇àoàˆÚiːÔoڈàn͐³m¥–™rš™fŠ— n¥“«i«— bœ~e~™ƒh­’¿h˔¹e–“rgm•—i­‘­m¥–™v£’šl™™`ƒ–~hr˜ƒl«’ËeҏÒf¹—¥n™•Šmƒ—ub~š€i€•¥hÑÒfґ¿l³’¥sš‘†i€•Š^ Ÿ¦a › g¿“¿f¿‘ÒlÓÃqÖ¼lƒËg˒¿f´•­j’Šlƒ“mhu”ƒe›—g–¿r܇àoàŒÃl³’ÃuЊÜn܉ÚiԐËl³’¥mš’oŠ‚` ˜ªa¥™ j’Šjƒ—€gm•—c¥›_—Œp™—™p™—™g¥—´g³“¼i­’¥p¥‘m†’–hÑÒiԐËkˑÍrƓ«r™šf˒Ëm¥–™e—›a~›rgkžkkb kku”a¼•¼j¿‘³i¹“­n™”mkV—uku—VmI•€`¥–ªc¥›m¥–™lŠ–un‚Œh€—V``šŒc›¥n­šm™–¥mƒ—umšŠ–fƒ“VjF•€a–•”d~–mol—mkaœIeb˜~dƒ›Œ_ƒ“•cŠ™”f€–`fkœrgkžkhr™uim—khƒ“ƒmk˜In=”bfƒom“YjV–Vlb“boF”=s9‰=q=”=oF”=rF6oI‘miuVpF“Ie€“ƒdƒjkV•FhV—€iŽulbŽIgV˜rc~“ugj“ViVu[””~jm“VpI“be€“ƒjm“VtIˆVd€™ dƒjlb–uj™™´i­’¥g­›¹jڊÚfґ¿g¿’ËiÓ¿dª“­m³³i­‘­h³•´i­‘­i¹”¿h¿’­g›Œ­i­’¥i­‘­g¼“³k³‘­j³‘¿i­’¥g›Œ­e›ˆ›k­‘³i¥’­m³³j¿‘³i­‘­n­šgŠ‘ƒv9!z)…|!!}!€}!€}!€}!€}!€}!€}€!}€!}€!|!!}€!|!!}€!|!!|!!}€!}€!}!€}!€|!!}€!}€!}!€}€!}€!}!€}!€}!€}€!}€!~|!!~|!!}€!|!!}€!|!!|!!}€!|!!|!!}!€|!!|!!|!!|!!z)„!|!!|!!z)„!z)„!|!!},‚!{!-|!!}!‚,|!!{-!},‚!|!!{-!{-!},‚!}!‚,{!-{!-}!‚,{!-{,‚-z!„){!-{)‡,}!‚,x-„)}!‚,{!-z)„!x)„-{!-x-„){!-},‚!|!!{-!|!!{-!|!!|!!|!!|!!}!€}€!}!€}!€}€!~~~~~~~~~~~~~~~~~~~~~y-~-y-~-v9~-y-~-y-~-y-~-y-~-y-~-{!-{!-y-~-{!-{!-{-!{!-|!!{-!{-!{-!{-!{!-{!-|!!|!!{-!{!-|!!|!!{!-|!!{-!{!-|!!y-~-|!!{-!{-!{!-{!-{!-|!!{-!{-!|!!{-!|!!{-!|!!{-!|!!{-!|!!{-!|!!|!!|!!{-€|!!{!-|!!|!!|!!{-€{-€}!€|!!|!!|!!|!!|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!|!!}!€}€!}!€|!!|!!}€!}€!}!€|!!|!!}!€|!!}!€}€!}€!~|!!~}!€}€!~|!!}€!~}!€}!€}!€}!€}€!}€!}€!}€!}€!}!€}€!}!€~}€!~}!€}€!}€!~}€!~}€!~}!€}!€|!!}€!}!€}!€|!!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!{!-|!!|!!|!!},‚!{!-|!!},‚!|!!{-!},‚!{-!|!!|!!{!-|!!}!‚,|!!{-!|!!{-‚,|!!},‚!y-~-|!!|!!},‚!{-!{-!{-!{,‚-}!‚,{!-{!-}!‚,},‚!},‚!{-‚,y-~-{!-{,‚-|6ƒZvŠ«p͌Ür܇àsà†àn܋Ôi¿Ôrà‡ÜgҐ­i—¥i˒Ãl³’¥p™—™jƒ—€dr›rg€™j¥”¥`ª–¥`ƒ–~g–¿b˓Ãg³– k“ƒklœrar›~i—¥j³‘¿b˓Ãhª–™j€—ƒg–“iŠ—n¥š±iÓ¿b¼—´h¥˜™ju˜€e– g™ ¡g¥”³nԋÜn܉ÚkԐÃr³¹h³•´b­™«e –oŠŽši­‘­nŠ•™f¥—¹oƐÔsà†àl܍ËqÖ¼v½Æl³“¹e­– h—˜ƒi€”mrb‘be€™—a””ujŠ’k™‘–jŠ’l™™hr—bhb—rlu–bcr•ƒ\•–•d”šƒjƒ—€krš{i¥’­d­“ªr³‹ªs³•£qŠ‘iÒËi­‘j¥”¥gœkjb™kkb•VfU rh™˜¥d–“ ošŽ¥o™—ƒl€•«i­‘lb“b]€ž‹g€—€lƒ•Šmƒ–ƒi­‘­k­“ƒjV“m\~žŒc—~lm“ƒiŠ—j³‘Ëh¿’kŠ“Š`ƒ–~hkšVlb–ulm”up‘…‡g`–Vbk~fƒj’Šlƒ“mhVškg€—€_Œ—d ™€l`–YgV–`ar›~gj“VvN‹IjVIrI“=u=“?t4IpI“Fw6Œ=oV‚iŽujIVfr“uhr•msN‹Fjbuer˜`mF“FlI”`ck inV”IkV•ber˜`mF“FsI’Ih`•bkV•FsI’IkV•bjV–Vlb•ƒjƒ—€j€˜un¥“«m¹“ÍhґÃm͎Ôg˒¿j¥”¥i­‘­k³‘­f¼–¹f´•­k­‘³i­’¥k­‘³i­‘­i­‘­h¿’­i­‘­g³“¼i­‘­f¥–¥eª”¥dª“­e¼“­j³‘¿j³‘¿j¿‘³h¿’­h›ŽŠrb‚4|!!|!!}€!|!!}€!|!!}!€|!!}!€}!€|!!}€!}!€}€!}!€}!€}!€|!!}€!}€!}!€|!!}€!}€!}!€|!!}€!}€!~|!!}!€|!!}!€}!€|!!|!!}!€|!!}€!}€!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!{!-|!!}!‚,}!‚,z!„)}!‚,z!„){-!},‚!{-!},‚!{!-{!-z!„)},‚!y-~-{!-z!„){-!x)„-{!-z!„){-!{-‚,{!-x)„-}!‚,{-!{-!{,‚-|!!z!„)}!‚,|!!{!-|!!z!„)|!!z)„!|!!|!!|!!}€!}€!}!€}€!}€!~}!€~~~~~~~~~~~~~~~~~~~~v9~-v9~-y-~-t-9t-9y-~-y-~-y-~-y-~-y-~-{!-y-~-y-~-{!-{-!y-~-{!-|!!{!-{!-{-!{-!{!-{!-|!!{-!{-!y-~-{!-{!-|!!{-!{!-{-!{-!{-!{-!{-!{-!{-!{-!{!-|!!{-!{!-{-!|!!{!-{!-|!!|!!|!!|!!{-!|!!{-!{!-|!!|!!|!!{!-|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}!€}!€|!!|!!}!€|!!}€!|!!}!€|!!}€!}€!}€!}€!}!€}€!~}!€~}€!~}!€}€!}€!~}!€}€!~}€!}€!~}€!~~}!€~}!€}€!}€!~}€!~}!€}!€}!€}!€|!!~}!€~|!!}€!}!€}€!|!!}€!|!!|!!}!€|!!}€!}€!|!!}€!|!!}!€|!!|!!|!!|!!|!!{-!{!-}!‚,|!!|!!{-!},‚!|!!|!!{,‚-|!!}!‚,|!!|!!|!!{-!{!-},‚!{-!{-!|!!}!‚,}!‚,|!!{!-{!-|!!}!‚,},‚!{-!},‚!{-!{!-|!!{-!},‚!},‚!y-~-{!-{!-|!!{,‚-z,‡4y-=m’«rƒÆm͌Úq܉ÜpЎËi¿”¹i¿“ÃhҎÔi¿“¥k³kԍÔl˒«k—š{lu–Šhƒ“ƒoƒ—™l™™aŒc~—d¼“ËaґÃi­‘o{™uo€xj€—ƒm™–¥o«’³b­›¥_•“ƒošŽÃj¿‘³n¥“«n«•¹k³‘­`ª–¥f–—k³gÖ´i¥’­r±™Æm͌ÚkڌÔoÓ«rš™qŠŽe—™€fƒi¿ŽÚn܉ÚlÒ³y¼–Êo͏ÍhԎÒh¿’­n«“¥r™‚o{–Šbœ~gu‹–k³‘­j¥’m™–¥n™•Šl¥’³g¿“¿o³’«l³’¥lƒ•blƒ•Šhu”kom—lb~š€frœkhr•mkb kf¥–¥^ œ”c”™Šmu˜ugkš€a¥˜¥b•”ošŽ¥h”€jr™™j–’uh`•bZz {a~›rlb’mmu˜ueŠ”ªpª‹­k¥“Šg™š~aržimYškik˜Ši¥’­i¥–nm”{ju›kfrœkjb™kfr–i­“¹f¿›h”€dr›rg`–VnVšljb’j³‘¿h—khb—r]~œ~hu™rg€—€jV–Vkb•Vea¢k`ƒ–~eQ•`gkžkar’rpb“IsI’Io=”Fs?’Fq=”=p9‰bjm“Vp;•Iik˜Šh›ŽŠoVŠVhmjej“`nV”Ie`–`i`•Fw=Œ6pF“Ih`IsF’?r=“IkV•Fs=Ž4v?’ImF“FsF’?r=“Iq?”Vjm“Vnbukr™YjV“me›—m™”j¥•¹o͏Ímƒ¿m³³g¿“¿f´•­g³“¼i­’¥h›Ž¥i¥’­l³’ÃcÒ­k­‘³g¿“¿i­‘­k­‘³g­Œ›i¥’­j¥”¥i­‘­i­‘­k­‘³lÓÃiÓ¿j¿‘³i­‘n‡Hy4„!|!!|!!}€!}!€|!!~}!€|!!}€!}!€|!!|!!|!!|!!}!€|!!}!€}!€|!!|!!~}!€}!€|!!}!€|!!}€!}€!~}!€}!€|!!}€!~|!!}€!}€!}€!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!z!„){!-|!!|!!{!-|!!},‚!{-!|!!},‚!|!!{-‚,{!-},‚!|!!},‚!x-„){-!},‚!{-‚,{-!},‚!{-‚,z)„!{!-}!‚,x-„){-!},‚!{-!{-!{-!{!-z)„!z!„)|!!},‚!|!!|!!z!„)|!!{!†!|!!|!!}€!}!€}€!~~~~~~~~~~~~~~~~~~~~~~y-~-v9~-v-~9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-{!-{!-{!-{-!y-~-{-!|!!{-!{-!{-!{-!{-!{-!{!-|!!{-!{-!{-!{-!{-!{!-{!-|!!{-!{-!{!-{!-{!-{!-{!-|!!{-!{!-{-!|!!|!!{-!{-!{!-|!!|!!{!-|!!|!!|!!{-!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!|!!}€!}!€|!!}€!|!!}!€|!!}!€|!!}!€}!€}!€~~}!€~}!€~}!€}!€}€!}€!~|!!~}!€}€!}!€}!€~~}!€~~~}!€}!€}!€}!€~~~}!€}€!}!€}!€~}!€}€!}!€}!€|!!}€!}!€}!€~,ƒ|!!|!!}!€|!!|!!|!!},‚!|!!|!!},‚!}!‚,|!!|!!|!!{-!},‚!|!!{!-{!-|!!|!!{!-{!-|!!{-!},‚!|!!},‚!|!!|!!{!-{,‚-|!!{!-}!‚,|!!|!!y-~-|!!{-!},‚!{-!{!-}!‚,{!-{-!{-‚,{!-}!‚,{,‚-}!‚,y-~-{,‚-y-~-vV„‘n«•¹q¼–Ãh¹”ËoƓÃi¹“­d­Ÿ­g´˜¹f¹–¼dª“h’¿hҌÚc¿”ªm{’ue –­e¥— m”™j™ƒar {_~š¥h¹”Ëa×´d ™€iu¥e¼“­m¥–™g›iŠ—_—œ”hŠ™­kԌÚhڎËo³’«k­™«g¥™­_ ¢¡f—–­m͌ÚoàŠÔo³’«l¹“³n¼–¿d¿”¼g¥—ƒs‚ˆši–¥m”™n³Ísà†àoàˆÚkÔ¹kÔ¹o³’«a´—ªbœ“ŠkŠ“ŠiŠ–ošŽ¥m¥–™k³g¿“¿h¿’­q«•™g€—€h–Ž­f´•­j¥šn™•Šlb“bhƒ“ƒb€š~ju˜€j€˜ujkšƒu¢™lm’ba€›Œ]~œ~iržbpI“FpF˜m]€Ÿdr›rl€˜{iržbju’–h”€i€”mdr›rbqžklUœ=q<›Flb“Šb”—i–¥pšƒgr˜VpF“IhV—€b—”eƒulƒ•ŠoŠ™lg`–VrIšVlb“Šd¥‘–cœ•ƒkm‘Šlƒ•bkV•FmVœVoY•Šm³³j¥Š‡ei›bfk—jl`–Yjb™klb–ui€•biF•`e€™rgkžkh`•beuš~gr˜Vkb•VqVNqV”?s=Ž4jV“mfu“rsI’Ifjucƒ•rg`–Vf`ški`•Fv?’InI”VoF”=q=”=q=”=rb“?p=Œ9q=”=s4Ž=q=”=q=”=p9‰bsI’Is=Ž4n=”bj’bjV–VoIIi‘­`•“jgkžksl”šj¹–¹m«’­o«“Ãm͑Ãh¿’­f´•­eª”¥i­‘­i­‘­lÓÃn͐³k­‘³g¼“³i­’¥i­’¥g›Œ­j¥”¥e¥”ªi­‘­i­‘­k­‘³g¿“¿g¿“¿e³’Ãg­Œ›fƒtHƒ4z)„!|!!}!€|!!~|!!}€!}€!}!€|!!|!!}€!}!€|!!}€!}!€|!!}!€}!€|!!|!!}€!|!!}€!}!€|!!}!€|!!|!!}€!}€!}€!|!!|!!}!€|!!}€!}!€|!!}€!{!†!}€!|!!{!†!|!!}!‚,}€!|!!}!‚,|!!|!!{!-|!!|!!{!-}!‚,{!-x)„-{!-{,‚-|!!{,‡){!-y-~-{-!{-!{,‡){-!{-!{-!x)„-{!-}!‚,{-!{,‚-}!‚,z!„){-!},‚!{-!~,…,{-!}!‚,|!!},‚!|!!{-!|!!|!!|!!|!!{!†!|!!|!!}€!}!€}€!~~~~~~~~~~~~~~~~~~~~~v9~-y-~-t9-v9~-v9~-y-~-y-~-y-~-y-~-{-!y-~-y-~-{!-y-~-y-~-|!!{!-|!!|!!y-~-{!-|!!y-~-{!-{-!{-!{-!{!-y-~-{!-{!-{!-{!-{-!{-!y-~-{!-{!-{-!|!!{!-|!!{-!{-!|!!{-!{!-{-!{-!{-!|!!{-!{-€{-!|!!|!!{-!{-!|!!|!!|!!{-!|!!{-!{!-|!!|!!|!!|!!{-!|!!|!!{-!|!!{!-{!-|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!~ƒ,|!!|!!|!!|!!|!!}€!|!!|!!}!€|!!|!!}€!|!!}!€|!!}!€|!!|!!}€!}!€}€!}!€}!€~}€!}€!|!!~~}!€}!€}!€}€!}!€}€!~~}€!|!!}€!~}€!~}!€~~}!€~}€!~|!!~|!!~}!€|!!}€!|!!}€!}!€|!!}€!|!!|!!}€!}€!|!!}€!|!!|!!|!!|!!~,ƒ|!!|!!|!!},‚!}!‚,|!!{!-|!!{!-},‚!}!‚,|!!|!!{-!|!!|!!|!!{!-|!!|!!},‚!{!-},‚!|!!{,‚-|!!{-!},‚!{-!|!!}!‚,{!-{-!{!-}!‚,{!-{-!{-!},‚!{-!{-!{-!{,‚-{,‚-v-~9lHƒ›lÓÃl¹“³j¹–¹r«š±p³˜±m¥–™m¥–™j¥”¥b ›—b•™e –­g¿“¿h­Ž–jmg¿’ËcÒ­p£›mƒ—udr›rm™–¥f­•´^¥—•aŒ›€g­‘Ëfґ¿j¥’o{™uklœrduœŒf¥•Ãn܉ÚkڎÃg´—¥m™–¥m¥–™c—›—j¥Úsà†àkڌÔk³‘­s™‘‘a ™¥a¥™ iŠ–oԊàqàŠÍoÓÆuЊÜn܉Úfґ¿m­’«n«“¥wŠ’†c—›—e—™€r™šj¥•¹o³’«mš’rА¥e­”¥e­”¥lŠ–usY–Y`rŒ_Œ—ƒa~›rnY–VkFœUfkœrc~“ugkžkju˜€mYškoŠ‚gbajb™kg`–VkUœFrI“=p=›Vfkš`iVžUiVžUmF“FmYšker˜`f`škdr›raižrkaœIsF’?gV˜r`~–ƒo¥Žšlƒ•bqYVnY–VlF“b`rœq_i¢iik—mlu–bnV–Ykb•VjUšm_€šzaržiim”€n†›knI”VpY•FmF–uc›‘ d–“ lm’bnb›VkV•FsY”Ijb’­i­‘i`•Fdj•rhu‹unV”IjVœ`jV–Vmb›bpI“bhm“`q=”=gV˜rjumkV•Fhb—rhj’bnV”IlI”`kV•Fq=”=q=”=s4Ž=w6Œ=w4?kb•VuFŒ6w=Œ6lb’mnIŽ=s=Ž4lb“Šju‰IoF”=uIxi¥–mV•=rFŽxg¿’Ëd´šrvY“bf›Ë_Ö¥qŠ‘p«‘ÍmԎÍoÓ«c›¥i¥’­j³‘¿g¼“³g¿’Ëg˒¿j¥”¥i­’¥i¥’­i­‘­h¥Ž›e­“¼i¥’­d¼”¿e¼“­j³‘¿lÒ³oªŒ¿m³³l³’¥f›Š–mj‡Vv9!z)…|!!|!!}€!}!€|!!|!!}€!}!€|!!}!€|!!}!€|!!|!!~|!!}!€}!€|!!}€!~}!€}€!~}€!}€!~|!!}!€}!€|!!}€!}€!}€!|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!}!‚,}!‚,|!!|!!{!-z)„!{!-{!-z)„!{-!},‚!{-!},‚!|!!{-!{-!},‚!z!„)z!„){,‚-{!-{!-}!‚,{!-{,‚-{!-{-!},‚!{-‚,{!-{-‚,{!-{!-{)‡,|!!}!‚,{-!{!-}!‚,z)„!z!„)|!!|!!|!!|!!|!!}!€}!€}€!}€!~~~~~~~~~~~~~~~~~~~~~~t-9v-~9y-~-y-~-v-~9t-9y-~-t9-y-~-y-~-y-~-{!-{-!y-~-y-~-y-~-{-!y-~-y-~-y-~-{!-{!-|!!y-~-{!-{!-{-!{-!{!-{!-{-!{-!{!-|!!{-!{!-{-!{-!{!-{-!{-!y-~-{!-{!-{!-{!-|!!{!-|!!{!-{!-|!!{!-|!!{-!|!!|!!|!!{-!|!!{-!|!!{-!|!!|!!{!-}€!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!~ƒ,|!!|!!|!!|!!|!!}€!}!€|!!|!!}€!}!€}!€|!!}€!|!!}€!}!€}!€}!€}!€~|!!}€!}€!~~}€!~|!!~}!€}!€~}!€}!€|!!~~~~}€!~}!€}!€}!€~}!€}!€}!€~}€!~}!€~}€!~}!€|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!|!!}€!|!!}€!}!‚,|!!}!‚,}€!|!!|!!|!!|!!{!-|!!|!!},‚!}!‚,}!‚,{!-{!-|!!},‚!|!!}!‚,|!!{-!},‚!|!!{-‚,|!!}!‚,{!-}!‚,}!‚,{-!{-!{-!}!‚,{-‚,}!‚,{-!{-‚,}!‚,{-!{,‚-{,‚-{-‚,y-~-y,‚Hj‡Š¥kÎÚkڌÔi˒Ãi˒Ãl³’¥j¥”¥m¥–™c—›—o•j€˜ufr›j™›­`ª–¥a•—€h€”­f¿‘Òh¿’­j’Šj’¥k–‘™h ™™h™™ \”~_~œ iːÔaґÃl¥•ƒfkœrkƒ“g——¥l«“¿f˒Ëa¿š²j š†ošŽÃjÒ­g——¥p¼“ÔkڌÔgˑ­pšƒmƒ—uhu”ƒe›—n¥“Æyàƒæuæ…Út͍ÐvЏÆmƒ¿b´™¥d”šƒp†–ŠkŠ“Šn¥“«m™”l¥’³i­‘­i­‘pu—Ygb‘ƒ_”œ—_”—ƒhkšVp=›Veb˜~e€™r`a¤ig€™fr Udbœ{_—Œei›bdr›rpb“IiUžVlVœbci kl`”IoF”=qFšFkF•Veb›ih`“mhu˜UmI•€b ›ria¤Vi€•¥j™™rgkžkmb›brVšIi`—ui€•Še –mk˜Iq=”=jk›uhVšk^r›zf`škjQ”=l;˜;o<œVlb“bf`šk^q i^g`nUžYjV–VoY“miu—`pI“b`ƒ–~fƒcr”kkb•VsI’IsI’IobŽšg­Œ›hr‘Ilb“bhr—bqNVsI’IpI“FnI”VpI“biŠ•€jbœUhb—rfujoIIoY•bgj“VmF“FpI“FmF“Fw9ˆ?s4Ž=rI“=s=Ž4n=”bpuboF”=s=‰Vi¥–lb“Fr=“Ikm‘Šg“`s=‰9jb’g›Œm`4iV“d¿”¼e›Œjim‘¿fҐËcÒ­h€”­fːÒhґÃm³³e¼“­dª“­i¹”¿h¿’­j³‘¿j¿‘³i­’¥i­‘­i­‘­g³“¼i­‘­h­’¿e¼“­j³‘¿j¿‘³g¼“³iÓ¿j³‘¿g³“¼g­Œ›h¥Ž›iŽurbŽ)|!!{!†!|!!}!€|!!|!!}€!|!!|!!}!€|!!}!€|!!}!€|!!|!!}!€|!!}€!}!€}!€|!!}€!|!!|!!|!!}!€}!€|!!}€!}!€}!€|!!|!!}€!}!€|!!|!!}!€|!!|!!|!!|!!z)„!|!!|!!|!!|!!}!‚,|!!{!-|!!},‚!},‚!{!-},‚!|!!x)„-},‚!y-~-}!‚,{!-y-~-{!-|!!},‚!{-!x)„-{-!{-!},‚!x)„-{-!x)„-{!-{!-z!„){-!},‚!{-!{-!}!‚,{!-|!!{!-|!‰,}!‚,|!!|!!|!!~,ƒ|!!}!€~,ƒ}€!}€!~~~~~~~~~~~~~~~~~~~~~t9-v9~-t-9v-~9v-~9y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-{!-{!-y-~-{!-y-~-{-!{-!y-~-{-!y-~-|!!{-!{!-{!-{-!y-~-{!-{!-y-~-{!-y-~-{!-y-~-{!-{!-{-!{-!{-!{!-|!!y-~-{-!{-!{-!{-!{-!{-!{-!{-!{-!{-!{!-|!!{-!{-!|!!{-!{!-|!!{!-|!!{-!|!!|!!|!!|!!|!!{!-|!!|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!}€!|!!|!!}!€}!€}€!}€!}€!}€!}!€|!!}€!}!€|!!}!€}!€}€!}€!~}!€~}!€}!€}!€|!!}€!~}!€~}!€~}€!~}€!~}!€}€!~}!€~~}€!~}!€~}!€}€!}!€~}€!}€!}€!}€!}€!~}!€}€!~|!!}€!|!!}€!}!€}!€}!€|!!|!!}!€|!!|!!|!!}!‚,}!‚,|!!{!-|!!},‚!}!‚,|!!{-!{-!{-!},‚!|!!},‚!{!-|!!|!!{-!|!!{-!{,‚-|!!~,…,{-!|!!},‚!{-!|!!{,‚-}!‚,{-!{-!{-!{-‚,}!‚,{-!{,‚-{-!~,…,{-‚,w-ƒ4ob†³nԋÜyàƒæxæ„ÜhÑÒkڌÔi¿“¥m™–¥i¿”¹q«•™mƒ—uj€—ƒe€™—j—™™p†–Šb~š€h–­g¿“¿a¼–¥fƒd¼“Ëf¼”¥iŠ•€lu”ma{ roŠ“«hÑÒcÒ­d ™€d€™ d­Ÿ­g¥™­o«’³g¥™­[¦¡”fƒ­oԊàkڎÃn«“¥q­³fÔ¼b­”•h€”m³³m”™r«“Æo͏Íq܉ÜhڎËs³Œ³p³šk‘’ ^ œ”h€”q¥Œªj¥”¥mš’n†‘uh™–ª`¥–ªd¥—€k`•=jV•Š\•‘~a~›rhr—bba¦ae`˜r`Œr_i¢id—­kƒ–VgU`h€”c~“uhkšVmVœVxI’MgV˜rfu“rhkšVpI“FnI”Vjƒ™ar {g€•Ëe¿‘ƒ_qœ b´š hkšVbr› f—“ufkš`kUœFr=“Is?’FgV–`jk™bnI”VnU›Ifm”¥iŽufr“ua~™`nV”IrFš=oI‘mhu”jgmƒ]•’i`i¤aq=”=t24lF“bhm•rhkšVaižrfr“uob•YrbŒNlm”ukb•VmI•€_•“ƒiuVoY•bkb•VsI”YqVNob•YpF“IjV“mb€š~fuje`˜rgr˜VpF“InI”VqV”?q=”=w?4sI’Iq=”=r=‰Hom‘Io;–=rNŠmgƒmmV•=lF’mh¥Ž›lr–Ik=•`djƒgƒ‘bm=•VeuƒjŠuoF”=ejŒ›\ª”œgu`mšŽ¿fÔ¼`ª–¥l‡ˆ³fҐËf˒Ëj­ÔdڎÃbÓ¿g¿“¿j¿‘³n›†ªk³‘­k­‘³j¿‘³k­‘³j³‘¿h¿’­i­‘­e¼“­k­‘³g¿“¿m³³m³³k­‘³k³‘­i­’¥j¥”¥d¥‘–hƒ…Pz)„!|!!}€!|!!}!€}€!}€!}!€|!!}€!}!€|!!}!€|!!}€!}!€}!€}!€|!!~|!!|!!}€!}!€}€!~}€!}!€}!€|!!}€!{€-}€!}€!|!!|!!}€!|!!}€!|!!}€!{!†!|!!|!!|!!|!!|!!|!!{-!|!!},‚!},‚!{-!},‚!|!!{!-{!-},‚!{-!z)„!},‚!x-„){!-}!‚,{!-x-„){-!{-‚,}!‚,{!-{!-~,…,x)„-{!-x-„){-‚,}!‚,}!‚,{!-{-!x-„){-!{-!z)„!{-!|!!|!!z)„!},‚!|!!}€!|!!}!€|!!}€!~}!€~~~~~~~~~~~~~~~~~~~~y-~-v-~9y-~-v9~-y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-{!-y-~-y-~-{!-{!-{-!{-!y-~-y-~-{!-{!-{!-{!-|!!y-~-y-~-{!-y-~-{!-{-!{-!{!-|!!y-~-{-!y-~-{!-{!-{!-{!-{!-|!!{-!|!!{-!{-!{!-|!!{-!{!-|!!{-!|!!|!!{!-|!!|!!{!-|!!{-!|!!{-!|!!|!!|!!{-!|!!|!!{-!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!~ƒ,|!!}€!}!€|!!|!!|!!|!!|!!}!€|!!}!€}!€|!!}€!}€!~|!!~}€!}€!}!€}€!}€!}€!~}!€|!!}!€}€!}!€}!€~}€!~|!!~}!€}€!~}€!~~}€!~}!€}€!~}€!}€!|!!}€!~}!€|!!|!!}€!|!!~ƒ,}€!|!!|!!}€!}€!|!!|!!}€!}!€|!!}!€},‚!|!!|!!|!!|!!},‚!{!-|!!},‚!{!-|!!|!!|!!|!!{!-|!!|!!}!‚,|!!{!-}!‚,},‚!{-!{-!|!!}!‚,{-!{-‚,{!-},‚!{-!{-!{-!{-‚,{-!{-!y-~-{,‚-}!‚,{,‚-y-~-y-~-vN†‚oÎÜyàƒæsà†àk܌Òg¿’ËeҏÒg¿–k³fҐËg¿–hu”ƒf¥–¥m¥–™lŠ•ƒfrœker™€g——¥e¥”ª^¥›”j€”³fːÒdÓ¥mu˜ue€“ƒj€—ƒi—¥f­•´`ª˜ \Œ›•d¥•¿bÓ¿g­™¥nš†e€“ƒaŒ›€q­ŽÐsà†àkڎÃn«“¥o•˜c—›—e—™€oš‹Ôn܉Úr½¹oÓÆrƒÆfҐËdÓ¥l™™s†›lfr›h ™™nš­k³‘­i­’¥lƒ•bsI”Yg€‘–c—›—c›¥d€žafb— _ œ~bkžq^q iba¦adVœiar›~]~œ~mu—ƒom“YnV–Yh`”Šfƒlm’bnY–VmVœVpY—u]~œ~dr›rjb™kim”€oÓÆf •mg€•¿h˓¥kŠ“Šj–‘ƒnY–VsI”Yjmua{šjkV•FqFšFpF•YmYškb`œiošŽÃiš–ib~˜¿e´™€iVžUnI”ViVžUkV•FjF˜kfrœkku–¥g³– g–‹umF•;r2”=lF“bbiœ`hb•`frœkbiœ`lUœ=pF“Iim”€i€•bdQ—ra~›rl`”InY–Vkm‘ŠnU›IsI”Yg€‘ui`•Fib•€cƒ•rob•YkV•bkb•Vp;•IpF“ImF“Fq=”=n=”bjm“Vq=”=r?‘mhr—bq9‹Ihk”ukmmlb“Fjbufƒi`—;kV•bdr•jhjŒIn=”bdr›rdrVu9ŠMa”•–`”—jh`•bc–ªa¥˜¥i–m^•–¼g¿“¿h¿’­i¿ŽÚeҏÒfҐËi¿“Ãd¿”¼e­“¼k³‘­e­“¼g¿“¿i­‘­j¿‘³e¼“­i­‘­i­‘­i­‘­k­‘³k­‘³i­‘­i­‘­i­‘­i­‘­i¥’­lš‰›iˆ‡v9„)}!€|!!|!!|!!|!!|!!|!!|!!{€-}€!}€!|!!|!!}€!|!!}!€|!!}!€|!!}!€|!!}€!}€!}!€|!!}!€}!€}€!~|!!}€!}€!}!€}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!}!‚,z!„)|!!z!„)|!!z!„)},‚!{-!},‚!{-!x)„-}!‚,x)„-}!‚,z)„!{-!y-~-{!-}!‚,z)„!y-~-{!-x)„-|!!{-!},‚!{!-{!-{!-{!-z!„)}!‚,|!!z!„)z!„)},‚!}!‚,|!!|!!|!!|!!|!!|!!{!†!}€!~ƒ,~}!€~}€!~~~~~~~~~~~~~~~~~~~v-~9y-~-t-9y-~-v-~9y-~-v9~-t-9y-~-t9-y-~-y-~-y-~-y-~-{-!y-~-{-!{-!y-~-{-!y-~-{-!y-~-y-~-{-!y-~-{!-y-~-y-~-y-~-y-~-y-~-{!-y-~-{!-{-!y-~-{!-y-~-y-~-{-!{-!{-!{-!{-!y-~-{!-{-!y-~-{-!y-~-{!-{!-{-!{-!{!-{!-{!-|!!{-!{-!{-!|!!{-!{-!|!!|!!|!!|!!{-!|!!{-!{!-{-!|!!|!!|!!{!-|!!|!!|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!~,ƒ|!!|!!}€!}!€|!!|!!}!€}!€|!!}€!~|!!~|!!}€!}!€}€!}!€}!€}!€~}!€}!€}!€}€!}€!~}€!}!€~~~}!€}€!~}!€}!€~}!€~}€!}€!~}€!~}€!~}!€~~}!€}€!}€!~}!€|!!}€!}!€|!!~}!€|!!|!!}€!}€!|!!|!!}!‚,~ƒ,|!!~ƒ,|!!|!!{!-|!!}!‚,|!!{!-|!!|!!{-!{-!{-‚,|!!}!‚,}!‚,|!!},‚!}!‚,{-!{!-}!‚,|!!},‚!{-!|!!|!!{-!{,‚-}!‚,{!-{-‚,y-~-}!‚,{,‚-{,‚-{!-y-~-{-‚,{-6s6‡ur£—Ãq܉Üsà†àn܋Ôd˓¼g´˜¹g¿“¿j´™™j–޳f˒Ëe¹˜ iu¥g˒¿l­”™m†˜€ik—mpu˜†p™—™m™”\”~a ˜¼f˒Ëb´š er“–g´˜¹l­”™g›j™™—_—Œd™¥f˒Ëfґ¿q«•™lŠ–ui€•Šl™™kÎÚn܋ÔcÒ­j’Šm—’xj€—ƒm™–¥kÐÔjڊÚk͑¿t¼–«n«“¥d­“ªb¥™—k“ƒer™€g›g›e —¥e¥”f•—™c~™Vea¢k[ŒŸŒ`ƒ–~e´–¿d¥›kf`–€c—•ƒ]~œ~hr—bnY–VnUžYe€“ƒfƒpublb“bl`–YnY”d ›i€•blb“bpY—uf—–]~œ~bƒ“¥h¥˜™f¥–¥r³¹pš‘usu’Šm«’­j¥’im—kob•YnY–Vkb€a~›rjk™bdXšVo{•³j¹“fkœrj¹Úlӊjmg“`oF”=pF•Yhb•`fažVrFš=pF“IlY›i¥–b•™g`UsI’IhŠŽ›cƒƒlj“YhVškcaž`sI“2v,ŒFlb’mkmmnV–Yck ikV•FnY–Vkb”¥nm’=iF•`jmupu‡NhVškdr•jl`”InI›UpF“ItI4q?”Vg`UpI“FlF“bm€—YmF“FjV“mkmmo`Nfk—jej“`lb“Ffkœrhu”ktI4gV“jhb’jkV•FlF“bej“`kV•FkF•Vcƒƒdi’VkF•V`€•œeƒug`–VhuŽ­dª“­i–Šg–¿eҏÒg˒¿i¿ŽÚk܌ÒbÓ¿cÒ­k­‘³b¿“Ãg­Œ›i­‘­i­’¥i­’¥h­Ž–h›Ž¥g­Œ›i¥’­i­‘­i¥’­i¥’­i¥’­i¥’­i­‘­h¥Ž›ju‰I{-!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€|!!|!!}€!}€!}!€}€!}!€}€!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{-!{-!{!-{!-{-‚,|!!{-!{)‡,{!-{!-|!!{-!{-!},‚!},‚!x)„-{!-{!-},‚!},‚!},‚!y-~-{!-{,‚-x)„-z)„!},‚!x-„)}!‚,{-!{-!},‚!{-!|!!{-!z)„!{-!|!!},‚!|!!|!!|!!|!!~}!€}€!}!€}€!~~~~~~~~~~~~~~~~~~~t-9y-~-t9-v9~-v9~-v9~-v-~9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-{-!{-!{-!y-~-{!-{-!{-!{-!y-~-{!-y-~-{-!y-~-{!-{!-{!-{!-y-~-{!-{-!{-!y-~-{!-{!-{!-{-!{-!{!-|!!{-!y-~-|!!{-!{!-|!!|!!{!-{!-|!!{-!{-!|!!{!-|!!|!!{-!|!!|!!|!!|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!}€!}!€|!!|!!}€!}!€}!€}!€}!€}!€|!!|!!}€!|!!|!!}!€}€!}€!~}€!}€!~}€!}€!}€!}€!}!€}!€}!€}€!}!€}!€}!€~}!€}€!}€!~}!€~~~}€!~}!€}€!~|!!~}!€}!€}€!}€!}€!}€!}!€}€!}!€}!€}!€|!!}!€|!!|!!|!!}!€|!!}!€|!!}€!~ƒ,|!!|!!},‚!|!!{!-|!!{-!|!!},‚!}!‚,|!!|!!|!!|!!{-!|!!{!-|!!},‚!{!-|!!{-!{!-|!!y-~-},‚!~,…,{!-{!-},‚!{-‚,}!‚,{-‚,y-~-{!-{-‚,{-‚,{-‚,{-‚,v9Np‹ªs¼”ÍuЊÜoԐÆl¹“³g¥™­f­˜­i«•¥e –g——¥g¿“¿dª“j’Ãf˒Ëe´’–jƒ—€i–¥i¥—i—Šhu™rhr˜ƒl™”­g¹˜´^œ‘ƒmƒ“³f˒Ël¿“«h ™™e—›g€—€e ˜¹fːÒ_Ô¼e¥”pš³v³Ž«n¥“«h¹”ËfÔ¼d¥™h€”­j¹•¥i–¥r«š±g¿’Ëg˒¿l¿“«i«— p†–Šb ›—^”›¥h”€j€—ƒj™ƒfrœkj¥”¥hŠ—rb—› eŠ›igaba€›”e€“ƒf—–­h—koY•bn‚Œf—–hm“`oY•boY•bgƒ—¥e¥”lu–bqbœYnY–Vhu™—_—Œg——¥i¿“Ãj³‘¿gғ¹j™™—d—­b¿“Ãj¿‘³m³³w£’‘oŠ–{h–Ž­h­Ž–hr—bnY–Vmb›ber™€]~œ~b—› iŠ—k¥‘Ôp͑«im—klƒ•¥nšf€–`nI”VsI’IgV–`fkš`er˜`dr›rfVžad~™¹d´šr_i¢ij`œbfkœrl™”­h¿’­j–’ujYžagkžkjQ”=v2“?e`–`h`•bi`•FdXšVjQ”=u=“?n=’mom‘Ir=•Ydr›rjm“VgV–`lb“bkV•FsI’Io=”FsI’InV–Yfk—jjb™kgŠ‘ƒer˜`pI“Fhb’jhjmjV–Vhb’jlb“bnNŒQhb’jh`ImF“FgV–`g`–Vw=Œ6kF•VgV•Qq=”=kF•Vck imI”Fv?’Ie`˜re`•QsI’Igb‘ƒa”›€nbˆbhu¿d˓¼e›ˆ›n«ŽÚoàˆÚa×´iÒËe¼“­i­‘­n­šdª“­h¥Ž›i­‘­h¥Ž›h›Ž¥g­Œ›nš­i­’¥g›Œ­k³‘­j¥”¥i­‘­i­’¥h¥Ž›j’bsC‚)|!!|!!|!!}!€|!!|!!}€!}!€}!€|!!|!!}€!|!!}€!}!€|!!|!!|!!}!€|!!|!!}€!}€!}!€}!€}!€}!€}€!}€!}€!}!€|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!z)„!|!!{-!z!„){!-|!!z)„!|!!{-!{-!|!!{,‚-|!!{-!{-!},‚!y-~-}!‚,{!-{-!{,‡){-!},‚!y-~-{-!{-‚,{!-},‚!{-!{-!},‚!y-~-}!‚,{-!{-!}!‚,x)„-z!„)x-„){-!|!!|!!z!„)|!!|!!~,ƒ|!!}!€}!€~,ƒ}!€}!€}!€~~~~~~~~~~~~~~~~~~~~v-~9t-9v-~9y-~-y-~-t9-y-~-v-~9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-{!-y-~-{!-y-~-y-~-y-~-y-~-{!-y-~-{-!y-~-{-!{-!{-!{-!y-~-{-!{-!{-!{!-|!!{-!{-!{-!{-!{!-{!-|!!{!-{-!{-!{!-|!!{!-{!-{!-|!!{-!|!!{!-|!!|!!|!!},‚!{-!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!|!!|!!}!€}!€}!€|!!}!€}!€}!€}!€|!!}€!~}€!}€!}€!~}!€}!€~}!€}€!}!€~~}!€}!€~}!€~}!€~~}!€}€!~~}€!~}!€}!€~}!€}€!~}!€}!€}!€}€!}€!}!€}€!~,ƒ}!€}!€|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!{!-|!!{-!|!!}!‚,|!!},‚!|!!{!-|!!{!-|!!~,…,|!!}!‚,{-!}!‚,|!!{!-{!-}!‚,{-!y-~-~,…,y-~-}!‚,{-!{-‚,y-~-z,‡4y-=r=}^r‘³m³³mÑÍtЍÍn¹•«o¥Žšk–‘™j­›™g™€a€›Œi—¥a¥™ b •ƒi¥“¿f˒Ëe´’–guš i¿“Ãl³’¥lŠ–udr›rer™€i—¥e¥— g›j–³hÑÒe¿–´b­ h¥˜™g——¥n±›¹iÓ¿b´™¥m’šlˍÜiԐËn«“¥j¥”¥b¥™—aŒ›€i¥“¿g¿“¿n«“¥n«“¥g¥—´a¥˜¥e—›mu˜ue›—bœ~e– d ™€dr›rfrœknY–Vd› `ƒ–~jƒ‘–gƒ‘bmb›bgu‹–d¥‘–l€˜{rƒxou™{e”¥e­”¥lŠ•ƒs™‘‘qv–mj’¥e¥”e~™ƒi–¥j¥ši¹“­d ›j­Ôæ€æn܉ÚoƓÃo³’«j¥•¹f˒Ëfґ¿o«“Ãl³’¥m•{e– a–•Œjubjmui€•¥d­—\Œž~j¥•¹i¹”¿p­‹ªt³ŽŠlb“brNŒbj†š g“`sI’IrVšImI˜k`qœr]q~e¥”­aŒ›€cƒ”´d´šrfQUkFœUjb™kdj•rgu‘€lƒ•Šjƒ™mƒ–ƒhk¡UpI•uh‡Œ€br`qV”?qFšFpF”2u)2w4†Nlm’bjV–Vlb’ml`”IsI’IjV–VsF’?u=Š=r=“IsI’IpI“bhb’jg`–Vfkœrjk˜FqNVlb“bhb•`pI“FlY–`lbŽIsF’?kV•bmV•=w6Œ=pF“IjQ”=q=”=o=”FmF“Fu=“?q=”=mF“Ft9‹?q4ŽFnI›UoF”=r=“IlI”`kb•VsI’IiV“b¥“ƒjm“Vg€•¿fԑ¼g–‹–mˌàhڎËe¼“­i¥’­g³“¼i¥’­e­“¼l³’¥i­‘­p­‹ªg›Œ­k³‘­i­‘­p­‹ªg›Œ­h¥Ž›i­‘­j¥”¥e–ƒkmŒI|!!|!!z!„)|!!}!€|!!|!!|!!|!!}€!}€!|!!}€!|!!|!!}!€}!€}!€|!!}!€}!€|!!}!€}!€|!!}€!|!!|!!|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!z!„)|!!|!!|!!z!„)|!!|!!z)„!z)„!}!‚,}!‚,}!‚,|!!{-‚,|!!{-‚,}!‚,{!-{!-z)„!{-!x-„){!-{-!},‚!{-!x-„)}!‚,x)„-y-~-{)‡,{,‡)y-~-z)„!x-„){!-},‚!{,‚-}!‚,{!-}!‚,|!!z)„!{!-{!-|!!z)„!z)„!|!‰,|!!|!!},‚!|!!~}€!~~~~~~~~~~~~~~~~~~~~~y-~-v-~9v-~9t-9v9~-t-9v-~9y-~-v-~9y-~-y-~-t-9y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-{!-{!-{!-{-!{-!{-!y-~-{-!y-~-{!-{-!{-!{-!y-~-{!-{!-{!-{!-{!-{!-{!-{!-|!!{-!{-!|!!|!!{-!{!-{!-|!!|!!{!-|!!|!!{-!|!!{!-{!-{!-|!!|!!{-!|!!{-!|!!},‚!|!!|!!},‚!|!!}€!|!!|!!}€!}!€}!€}!€}!€|!!}!€|!!}€!|!!}€!}€!}€!~}!€}!€}!€}€!~}!€}€!}€!}€!}€!}!€}€!}€!}!€~}!€~}€!~~~~~~}€!~~~~}!€}!€}€!~}€!~}!€}!€|!!}!€|!!}!€|!!|!!}€!}€!|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!{!-|!!{!-|!!},‚!|!!|!!{-!},‚!{-!{,‚-|!!}!‚,{-!{,‚-{!-}!‚,{!-{!-{!-{-!y-~-y-~-{-‚,y-~-y4†6y-=lbƒup‚Œ³kԌÚs͔¼kÎÚkڎÃp¥‘l¥’³n«“¥k“ƒfkœrhr˜ƒj—™™h–aŒ›€h­’¿i¹“­d¥—€h€”­f˒Ëg¿–jƒ‘–i¥–h–l™™aŒ^Œ l¥’³c´š´b´™¥e¥”­g¿“¿f­˜­n«•¹e­”¥\•›Œi —Æoڈàl܎¿o™—ƒju˜€bŒ˜f¥–¥l³“¹h¿’­i­‘mƒ—um{š\Œž~b~kjb™kju˜€hr—bik˜Šg™€hr—boY•biUžVpY–ƒj’Šj€˜umu˜ulu”mn†•­a´—ªoŠ‚p™—™kŠ“Šl™”­f¥–¥lƒ•Šsš‰šf —Ša ™¥d ›l­ÍyàƒæyæƒàmԎÍj¹–¹oÎÜsà†àmàŒËoƓÃoÓ«o«’³b¿“Ãe¼“­n¥“«r™˜†j€˜ug€™W‹¢Œf­™¿jҏÍl³’Ãm͑Ãh™™ k¥“ÃiԐËe¼“mƒ—urx–bsY–Ybƒ“¥a”žkmVœVkV•ber™€]~¡{a{ ri­˜³h–ސh–h‡‹`sI’InI”Vhb•`kaœIo;–=kF•Vlb–u]{¥{e€™rmu—ƒj¥”¥j¥’nm’=q=”=rI“=s2•2lF“bhb•`oVŠVeb›ikV•Fu=“?pF“IoF”=q=”=rNŒbpI“FjV“mdj•rlbŽIhb—rjm“VnV”Ih`•bg`–VpF“IkF•VmV•=u?“=s?’Fs=Ž4u=”4kF•VoF”=w4Ž4s4Ž=t42s=Ž4w?4qFŽ4q=”=w=Œ6r9†4s4Ž=s4Ž=o=”Fu4ƒ9oF”=o?”`h`IsI’Iob“€iŽuim–n¹Ül܍Ëi­‘­a¼•¼g¿“¿i­‘­h­’¿k³‘­i­‘­k³‘­i­‘­k³‘­i­’¥k­‘³i­’¥i­‘­lš‰›j¥”¥g›Œiƒ†bw=Š!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}€!|!!}!€|!!|!!}€!}€!}!€}€!}!€}!€}!€}!€}!€}!€|!!}!€|!!|!!}!€|!!|!!|!!z!„)|!!|!!|!!{-€{-!|!!{!-|!!|!!},‚!{-!|!!{-!{-!x)„-{!-|!!|!!{-!{,‡)},‚!}!‚,z!„){-!{!-{-‚,}!‚,}!‚,{-!{-!x)„-{!-{!-}!‚,{-!{,‚-{-!{-‚,|!!{-!{-!},‚!{-!},‚!},‚!z)„!},‚!|!!|!!{!†!|!!{!†!}!€}!€|!!~}!€~}!€~~~~~~~~~~~~~~~~~~v-~9t9-t-9v-~9y-~-v9~-y-~-t9-y-~-t9-v9~-t9-t-9y-~-y-~-y-~-y-~-t-9y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!{-!y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-{-!y-~-y-~-y-~-{-!y-~-{!-{-!y-~-{-!{-!|!!{-!{!-{!-{!-{!-{!-{!-|!!{-!|!!{!-{!-|!!{!-{!-{!-{!-|!!|!!|!!|!!{!-|!!},‚!|!!|!!|!!{!-|!!|!!|!!|!!}€!}€!|!!}€!|!!}!€|!!}!€}!€}!€}!€}!€|!!~|!!}!€|!!~}€!}€!}€!}€!}!€~}!€~}€!~}!€~}!€}€!~}€!}€!~}!€}!€}€!~}!€}€!~~}!€~}€!~}!€}!€}!€~}€!}€!}€!}€!}€!~}!€|!!}!€}!€}!€}!€|!!|!!}!€|!!|!!|!!|!!|!!}!‚,|!!|!!},‚!|!!{!-{!-|!!},‚!|!!|!!|!!}!‚,}!‚,|!!}!‚,{!-|!!}!‚,{-!|!!{-!{,‚-{!-{,‚-y-~-{,‚-{,‚-~,…,y-~-{,‚-{6-y6†4p9|kd¼“ËkԌÚyæƒàkԐÃq͊àp܌Ínš­hˎÚl˒«lƒ“mjŠ’h–l™™j€˜uhu“j¥”¥e­”›\Œž~gƒ‘¥b¿“Ãf´•h’¿h˔¹p¥™•iŠ—g›g¥™­m±˜­i«— _”œ—g­ÒfҐËo³’«m¥–™h–i—¥qƑÍhԎÒh¿’­hŠ—rmu˜um”™m™–¥h«”ªa¥™ h—™usY–Yjb™kck igkžkfkš`oY•bkb•Vf`–€eƒ–g—•mol™bsY–Ylb“Šc—›—lŠ•ƒmƒ—ulu”mfŠ•¥a¥˜¥i—Šo¥Žšm™–¥e¥— j¥’l­ÍoԊàqàŠÍg¹›­m³³uԇææ€æyæƒàoԐÆoÓÆm¹“ÍeҏÒg˒¿m³³q«•™kŠ“¥b´™¥^¥›”nŠ•™j’ŠjŠ’­e¹˜ _Œ—m¿Œàrà‡ÜhґÃqƑÍoÙ±l³’Ãf͑Ãeª”¥n•†mƒ—ukb•Vg€™\~žŒh–g›Œ­b¥™—hƒ“ƒb€š~lŠ’³f¥–¥f–rnY–VpI“FsI’IbkžqhkšVhjmnI›Ui—¥`~¡afVžack iek–ƒiŠ•€jm“VpI“Fl`–YoF”=ob–f€–`kb•VjV–VsF“4y)Ž4s4Ž=rI“=r=“Ihk”urb“?hVškdj•rij‘FjV“mlm’bkV•FkF•VrI“=pI“FoF”=rI“=s4Ž=s4Ž=q=”=t42w4†NmV•=s=Ž4q=”=s9‰=u?“=s4Ž=qNVq=”=w6Œ=q=”=s4Ž=s=Ž4s4Ž=o=”Fu?“=p9Œ=u=“?sI’Ikb•VlI”`oƒ—™o•˜­i³Œ›j“¹kԌÚfҐËf¼”¥k­‘³k³‘­i­‘­e¼“­k­‘³m³³i­‘­i­‘­i­‘­i­’¥j¥šd–‘¥nšgŠ‘ƒuVƒ4z)„!|!!|!!|!!|!!}€!}!€}!€|!!|!!|!!}!€|!!|!!}€!}€!}!€}!€}€!}!€|!!|!!}€!|!!}!€|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!}!‚,{!-|!!|!!x-„)z)„!},‚!{!-},‚!{,‚-x-„)}!‚,|!!{!-{-!{-‚,{!-~,…,|!!x-„)y-~-{!-{!-{,‚-{,‚-{!-{!-{!-{-!w)‰){-!{-‚,x-„){!-{!-}!‚,|!!},‚!},‚!|!!},‚!},‚!z)„!|!!|!!|!!~ƒ,}€!~~~~~~~~~~~~~~~~~~~~~~y-~-v9~-v9~-v9~-t9~9v-~9v9~-t-9v-~9y-~-y-~-y-~-t9-t9-y-~-t9-t-9y-~-y-~-y-~-t9-y-~-y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-{-!y-~-y-~-{!-y-~-y-~-y-~-y-~-{!-{!-y-~-{!-y-~-{!-{!-{!-{!-{-!y-~-{-!{-!{-!{!-|!!{-!{-!{!-{!-|!!{-!|!!|!!|!!|!!|!!{!-{!-{!-{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€}!€|!!}!€}!€|!!}!€|!!|!!}€!}€!}!€}€!}€!}€!}€!}€!}€!}!€~|!!|!!}€!~}!€}!€~~}!€}!€}!€~~~~~~~~~}!€~}!€}!€}€!~}€!}€!}€!}€!~}!€|!!}€!}€!|!!}!€|!!}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!},‚!|!!|!!{!-|!!|!!{-!|!!{-!},‚!{-‚,|!!{!-{!-}!‚,{-‚,{!-|!!},‚!{-!{-!{,‚-{-‚,y-~-{-‚,y-~-v-~9z=€=qxŽÃq܉ÜyàƒæyàƒæiԐËp͌ÜkڎÃg›Œ­kԌÚlԏ³pu‚l³“¹j¹•¥j™ƒj€˜ujŠ’p™—™h”€hr˜ƒi—¥a­šªd ›cª“Ëg˒¿f­–—gŠ——e¥— j¥”¥m±˜­j™™—d€—¥f¿‘ÒfҐËe­– oŠ‚k™‘–n¥“«s¼”ÍfÔ¼h­Ž–jŠ’j¥”¥j™ƒo{˜ƒjƒ™]~¡{frœknV”InI”VsI’Ie`˜rfrœknV–YsY–Ykb–ub—› h”€g€—€lu–bku”e–“—h–i­‘­e¼“­i¥’­j¥”¥l³Ún܋Ôq܉Üm͓¹k¹”Ãx܄ææ€æyæƒàkˑÍm͑ÃoԊàn܉ÚiԐËj¥”¥t£™™j™™´e¿–´`ª–¥lŠ•ƒqxŒmlu–Šb ›—]Œ©Žl¥’³g¿’Ëk¹”ÃmԎÍl³’¥kÎÚhڌÒg˒¿o³’«m¥–™h–­a´—ªaœ’i€”mhr™ue€›­c¥™”e€™—m¹“ÍkԌÚi¿“¥m”™p™—™j’¥i­‘­d•“mob•YnU›Ie`“jdr›r`q—ƒfːÒgjb~œhk¡UqFšFnI”ViVžUoF”=o=”FrFš=oY•bm`›Fjb’gƒmkb•VsI’IpF”2w)‰)v2“?kV•Ft4Ilb’mgj“VpI“bfj—kl`”InI”Vkb•VsI’Io=”Fq=”=w6Œ=w?4n9‹Fw4Ž4o4VnV”Iq;4r?“bom‘Is4Ž=r=“Ikb•Vu4ˆ4t4Ihm“`rI“=s4Ž=rI‹bmV•=q;4tIˆVi`•Fw=Œ6r=“IpH‰FjVIxM4sF‘bt{‘xgkžklm’bm’«kÐÔaґÃl³’¥i¥’­i¥’­k­‘³i­‘­l¥’³j¿‘³i­‘­i­‘­i­’¥i¥’­mšŠ–j¥šd “–h–lЇPs9†)|!!|!!z)„!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€|!!|!!|!!}€!|!!}€!~}€!}€!}€!|!!|!!|!!|!!}€!|!!}!€|!!|!!|!!|!!|!!|!!|!!z)„!|!!|!!|!!|!!z)„!{-!|!!x)„-|!!{-!}!‚,}!‚,{-!|!!{-!},‚!y-~-{!-{-!x)„-{!-z)„!{-!{,‚-{!-{,‡){-!x-„){-!{,‚-{,‡){-!},‚!{-!{-!},‚!z)„!{-!{-!},‚!{-!x)„-|!!|!!|!!|!!|!!|!!|!!{!†!{!†!|!!~~,ƒ}!€}!€~~~~~~~~~~~~~~~~~~~t-9v-~9y-~-v9~-v9~-t-9y-~-v9~-t-9v-~9t-9t-9y-~-y-~-t9-t-9y-~-t9-t9-t9-t-9t-9v-~9y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-{-!y-~-{-!{-!y-~-{!-{-!{!-{-!{-!{-!{-!{-!|!!{-!|!!{-!{-!{-!{-!|!!{-!{!-{!-|!!|!!|!!{!-{!-}!‚,|!!{!-}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!€}!€}!€|!!}€!}€!}!€}!€}€!}€!~}€!}€!}€!~}€!}€!}€!}€!~}!€}€!~}!€|!!}€!~~~~~~~~}€!}€!~}!€~}!€~}€!}€!}€!~}!€}!€}€!}!€}!€}€!}€!}!€}€!|!!}!€|!!}€!}!€|!!}€!|!!|!!|!!|!!}!‚,|!!}!‚,|!!|!!{-!|!!}!‚,}!‚,|!!}!‚,|!!}!‚,|!!|!!{-!|!!{-!{-!},‚!{-!{!-{!-{,‚-{,‚-{-‚,{-‚,y-~-{,‚-{-‚,y-~-z,‡4{-6vN†‚oÎÜx܄æyæƒàn܉Úg˒¿iÒËgˑ­h–Ž­fːÒgˑ­h€”fːÒjÒ­iŠ•€j’¥m¥–™k“ƒju›ki€•Šj™™—j™™—eƒ•h­’¿g¿“¿k¥“Šd¥•¿h¿’­j¥”¥p™—™lŠ•ƒk——«fːÒe˖´j–‘ƒi‘­l¿“«j¥”¥r¢¥f¥–¥b ›—d–‘¥n«“¥kŠ‘mnY–VmYškjb™kgkžkfažVrVšInUžYim”€e~šukŠ“Ši€”mnŠ•™a › b—™¥k­‘³h¿’­e¿–´g­™¥j­Ôæ€æyæƒàp܌ÍlÒ³q͊àyàƒææ€æo͏Ío͏Ír܇àsà†àhڎËl³“¹t¼–«g­‘Ë_Ô¼b´™¥lƒ–vkmmju’–`ª–¥^ Œk³f˒ËlÒ³kÔ¹g´—¥j­Ôn܉ÚiԐËu܊ÐpƑ³g¿’Ë_Ô¼k´–«l­”™hƒ˜rgkœZœ˜”[‹Ÿ—f¥”¼i¿“Ãl³’ÃhÙ­l™™i³ÒhڌÒf¿›n™•Šl{˜€m{•^ ™•bŒ•ulm’bhk”ug¿’Ëa›“qgkš€hÑÒkšŒƒhkšVoF”=r=“IpF•Yc`žakV•Fu=”4s;•?hV—€_i XfV“ƒdƒ’`jV–Vm=•VmV•=t42t4IkV•Fm=•Vg`–Vh`InI”Vh`“mpF“IsF’?pF“IsF’?o=”Fs=Ž4q;4q=”=sI’IoF”=oI‘miuVt4IpVxgu`s=Ž4oI‘mhm“`r=”2lF“bhr•moV4u=ŒNjmunb”=t4Ih`“mlm’Fu=Š=pI“bjm“VvI’?pF“Ilb’mjm“VrI“=pF•Yn†•m™–¥l³’Ãg¹˜´o«’³i­’¥dª“­k³‘­i­‘­g³“¼i­‘­i­‘­i¥’­j¥”¥k›™g–‹–i¥–g–‹–iŽuwV~-z)„!|!!|!!|!!|!!}€!|!!}€!}€!}!€|!!}€!|!!}!€}€!}€!}!€}!€|!!|!!|!!}€!|!!}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!z!„)|!!{-!{!-|!!|!!{-!}!‚,|!!{-!{-!|!!x-„)},‚!{!-z)„!x-„){!-{)‡,{!-{!-{-!x-„){!-{!-}!‚,}!‚,{!-{)‡,{!-{,‚-{)‡,}!‚,{!-{-!{-‚,}!‚,{!-z!„){!-z!„)z)„!{-!{-!|!!z)„!|!!|!!|!!|!!}!€|!!}€!~}€!~~~~~~~~~~~~~~~~~~~v-~9y-~-q99v-~9v-~9v-~9v9~-v-~9y-~-y-~-y-~-v-~9t-9t-9v-~9t-9y-~-y-~-y-~-y-~-t9-t-9y-~-t9-t-9y-~-t9-t-9y-~-t9-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-y-~-{!-{!-{!-y-~-{!-{!-{-!y-~-{!-{!-{!-{!-|!!{!-{!-|!!{-!{-!{-!|!!{!-{!-{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!},‚!|!!|!!}!€|!!}€!|!!}€!}€!}!€|!!}!€|!!}€!}!€}€!}!€}€!}€!}!€}€!~}!€}!€}€!~}!€~}!€}€!~}€!~~~~~~~~~~~~}€!~~}€!~~~}€!}€!}€!}€!}€!~}!€|!!}€!}€!}!€}€!|!!}!€|!!}€!}!€|!!}€!|!!|!!|!!|!!|!!|!!}!‚,|!!}!‚,|!!|!!|!!|!!|!!|!!{-!}!‚,|!!}!‚,}!‚,}!‚,|!!~,…,{!-},‚!{-!{,‚-{!-},‚!{-‚,y-~-{,‚-y-~-{6-u4ƒ9y=‡bq³p͌Ürà‡ÜmԎÍg˒¿f´•­c´š´`ª˜ d™¥d¼”¿a¼˜ du“ f¿‘ÒdÓ¥iŠ–g¿“¿j´™™hƒ˜ri€•ŠiŠ—j™ƒer™€c”™¥i«”¼b¼—´a › hÑÒe˖´f —ŠoŠ‚l™™n¥“«d¿”¼^²œ¥j’¥i¿“Ãe¿–´pšƒmk›{_—Œeƒ•f—–fƒer™€d—›rh`•b\~žŒg€ške€™—e€™ri€•¥j­›™d€™ g¿’Ëg˒¿iÓ¿b­ l™•¿x܄æsà†àm͑Ãu͑Êq͊àæ€ææ€ævàˆÐs͔¼nƎÚr܇àn܉Úrγq¼•³f˒Ëb˓ÃaÙ­o¥Žšo™—ƒkŠ“¥Z«šœ_¦Ÿ—k——«g¿“¿iÓ¿b´™¥a › oÌàæ€æoàˆÚrԌÐrƓ«o«“ÃhڌÒp¿Ž³q¼•³t«‘g¥—´^²œ¥\•›Œjƒ—€jƒ—€g€™aŒ›€c{›k¹’Ôsà†ànԋÜrБ¹m¥–™k¥“Ãb˓Ãeª”¥n™•Šm{›kkY™rX‹ ~^‹›­fˍ›j¥”¥oԊàh¿uf`škjƒ‘–iŠ•€lm’FsI’Ir=“InI”Vc`žagV–`hkšVcaž`c—š´_•žajUŸuf€–`kSInF›VrY•=q=”=pI“bhb•`mYškgj“VmV•=o=”FjV–VoF”=u?“=sF’?w=Œ6sI”YnIŽ=u4ˆ4pI“bjm“Vs?’Flb’mjm“Vu=ŒNfr“ui€”mmF“Fjbuhj’boF”=hb’jhjmnIŽ=lIujumpIˆ4lF“bjmuej“`m=•Vjmunu„HqFŽ4rNŠmi€”mmV•=u=Š=lb“bgkžkpl›usŠÃnƔ¹k«–´h¿’­i­‘­h¿’­i­‘­m³³i­‘­i­‘­h›Ž¥i¥’­f–Š›m–Šši–¥j¥”¥h–ސn€‹V{-!|!!|!!|!!|!!|!!}€!|!!|!!|!!}€!|!!}€!|!!|!!}€!}€!}€!|!!}€!}€!}!€|!!}€!}€!|!!}€!}€!}€!|!!|!!|!!|!!|!!}€!|!!|!!|!!z)„!|!!z)„!z)„!|!!x)„-|!!},‚!},‚!{!-},‚!x)„-{!-|!!{!-{-‚,{!-{!-},‚!{-!{-!x-„){!-{!-},‚!{!-{,‚-{-!y-~-{-!y-~-{!-{!-{-!{-‚,x)„-z!„)x-„){,‡){-!},‚!},‚!},‚!z)„!z)„!z)„!|!!z!„)|!!}!€|!!|!!~}!€}€!~}€!~~~~~~~~~~~~~~~~~~y-~-q99v-~9v-~9v-~9v9~-v-~9v-~9v-~9q99v-~9y-~-y-~-v9~-y-~-v-~9t-9y-~-t9-t9-y-~-t9-y-~-v-~9y-~-t-9y-~-y-~-t-9y-~-y-~-y-~-t9-t9-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!{-!y-~-y-~-y-~-{!-y-~-{!-{!-{!-{!-{!-|!!{-!{!-{!-|!!{-!{-!|!!{!-{-!{-!{-!|!!{-!{!-{!-|!!{!-|!!|!!},‚!|!!|!!|!!|!!|!!}€!|!!}€!}€!}!€|!!}!€}!€}!€}!€}!€|!!}€!~}!€}€!~}€!~}!€}€!}€!}€!}€!}€!~}€!~~}!€~~~~~~~~~}€!~~}€!~}!€}!€}!€}!€}€!~}!€}!€|!!}€!}€!}€!}€!}€!}!€}!€}€!}€!|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!},‚!{-!|!!}!‚,|!!},‚!|!!|!!},‚!{-!},‚!{!-}!‚,{-!},‚!{!-{,‚-{-‚,{-‚,y-~-y-~-{,‚-y-~-{,‚-w-ƒ4x=…xršŽ«uªŒÆo͏Ím͑Ãj¹–¹e­”¥b ­g¥——h”€d› b­›¥d¥™d€™ h­’¿e´’–kƒ“­f˒Ëe´’–ju’–m³³i¥—mƒ—ulu–Šd—­d­Ÿ­b­›¥d—­hÑÒgˑ­k“ƒj’¥n¥“«j¥”¥e­”¥b ›—f­™¿eÓÃh¹›jƒškjk›ub€š~a~›rcƒ•rgkžkjr™™d ™€ar›~m¥–™e—™€n¥“«e¥”ªj­’ÃkÔ¹j¥•¹m͌Ún܋Ôo͏ÍmÑÍm͎Ôyàƒæxæ„ÜkґÆo͏Ím͌ÚnډÜn܉Úo͏ÍpƑ³j³‘ËfҐËbÓ¿l³’¥q«•™e¥”ª]ª›«\²œ•j’¥r™ša › ]—¡™^Œ oÎÜyæƒàr܇àtЍÍn¹•«o¹Žàsà†ào܎Ãr³¹mš’lŠ’³_Ô¼e¥”p†˜uju›kd€™ ^¥›”^ˆ¢g­™¥lÓÃe —¥g­™¥l™™g¹“ÒkڌÔpˎÐs͊ªmš{i—¥_ª•ªa•—€oƒ˜{ju˜€d–“ b€ž{du¼kڌÔg˒¿i¿“Ãp¥Žxnublb’me€“ƒlr–Io=”Fu?“=kIœab`œidg™c­—ƒfrœkfŒ›™eƒšUo=”FnV–YjV–VmV•=s=Ž4q=”=oI‘mc`žah`“mlm’boV4t24s?’Fw4Ž4s4Ž=pI“FoF”=jV“mpb“Iq=”=oY“mhm“`kF•Vlb“bg`–VkF•Vjmulm’bpF•Yjumjm“Vq9‹Ih`“mhj’boIIh`“mej“`mF“FnNŠjdr•jmk˜IlIŽbfujhb•`m=•ViuސjubqI‹9rMŽui–Šl`”IsI’Ikb”¥p¼—¥r™˜†mšŽ¿j¹–¹i­‘­i¥’­k³‘­i­‘­i­‘­i¥–j¥”¥j¥”¥j¥”¥f›Š–i–¥i¥–gŠ‘ƒsC‚)|!!|!!|!!|!!|!!|!!|!!}€!}€!|!!|!!}!€}!€|!!}!€}!€|!!~|!!}€!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!{!-|!!|!!{!-{!-|!!{-!|!!{!-{!-|!!{-!},‚!x-„){-!},‚!{-!z)„!{-!{,‚-}!‚,z)„!{-‚,x-„){-!x-„){!-{)‡,x-„){!-{)‡,x)„-},‚!y-~-{)‡,{-!{,‚-|!!{-!},‚!},‚!}!‚,|!!z)„!}!‚,|!!}!‚,|!!|!!}!‚,}!€{!†!|!!}!€}!€}€!~~~~~~~~~~~~~~~~~~~v-~9y-~-v9~-v9~-t9~9v-~9v9~-v9~-v9~-y-~-t9-v9~-v9~-y-~-t9-t9-v-~9t-9y-~-t9-v9~-v9~-t-9y-~-t9-y-~-t9-t-9y-~-t-9t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-{-!{!-{-!y-~-{-!{-!y-~-{!-{!-{!-|!!{-!|!!{!-{!-|!!{!-|!!{-!{-!{!-}!‚,|!!{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}€!}€!}!€|!!}€!|!!}€!}!€~}€!}€!}€!~}!€}!€}€!}€!~}!€}!€~}!€}!€}!€}€!~~~~~~~~~~~~~}!€}€!~}!€}€!}€!}€!~}!€}€!}€!~|!!}€!|!!|!!}!€|!!|!!|!!|!!}!€|!!}!€|!!~ƒ,}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!},‚!},‚!|!!|!!{-!{-!|!!{!-y-~-},‚!}!‚,{!-y-~-{,‚-{-‚,{-6y-~-{-6{9Rq–­p¹˜¼p¹˜¼p¹˜¼o³’«m¥–™i—Šg›mš{dr›rhƒ˜—j™™—a€›Œcƒ•—f¥–¥^¥›”k³b¿“Ãb­—”lŠ’³b˓Ãe­– l™™c—›—j—™™j™™—aŒkŠ“¥i¹”¿a¼–¥kŠ“¥h¹”Ëo³’«i¥—e›—j—™™o«’³a¼–¥a–•Œju›kh`•bdr›rar {frœklb“bgkš€iŠ—c”™Šj¥šq¥—£j­’Ãf˒Ëi¿“Ão͏ÍtЍÍm͌ÚkڌÔlÓÃuʑÍtЍÍkԌÚhڎËn¿–¼q¼•³k¹”ÃfҐË^ÓÃqÖ¼n¹•«i­“¹^¼›²`ª–¥j—™™nša › b—› a › j¹Úrà‡Ük͑¿n¹”Æn¹•«p͌Ürà‡ÜrԌÐmڌÍt¼–«l«’Ëf˒Ëj¹•¥n™•Šm†˜€l{’–_´²a”jŠ’e– g¥™­^ Œi—¥i¿ÔkڌÔj­’Ãu½«j­›™l«“¿_Ô¼o¥Žšo™—ƒlu”ma€›Œ_—œ”[‹Ÿrkƒ“l³’ÃiːÔd¿— i—¥kԍÔg˒¿l›ˆ‚mu˜uol—moY•ba~›rdiœVsI’InUžYb€š~Zx£qakž”j¥’a~›rgj“VsF’?sF’?pI“bbiœ`i`•Fq=”=oF›Va › hr—Fo=”FmF“FoF”=u=”4t24u2)r)ŽFvN‹Io=”Flb’mmb‡Pr=“Ijbuhm“`kF•Vhb•`i`•Fm=•Vjb™khb•`lIŽbfk—jkV•FpF“Ihb•`g`–Vo9ŠVlb“bkb•VmF“FjV“me`“jmP‡FkV•bhj’bi`ˆPoI‘mkŠŠ‡a~™`u=ŒNi–¥g¥‘ƒk`•=r=•Ypƒšk¥“Šhr—bsu³kÔ¹e¹•ªi¥’­i­’¥j¥”¥i­‘­j¥šd–‘¥h¥Ž›i¥’­o¥Žše›ˆ›h¥Ž›j’Šrb‚4z)„!|!!|!!|!!}€!}€!}€!|!!|!!}€!}!€|!!}!€}!€|!!|!!}!€|!!}€!|!!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!z)„!z!„)|!!|!!|!!{-!|!!|!!},‚!},‚!{-!{-!},‚!x)„-{!-z!„){-!{,‡){-!}!‚,{-!x)„-z!„){-!x-„){-!{-‚,{!-{,‚-{-!{-!{,‚-{,‚-{!-x)„-{)‡,z!„){,‚-}!‚,z)„!y-~-}!‚,{!-}!‚,{-!{!-|!!{-!|!!{-!z!„)|!!{!†!|!!|!!|!‡}!€}!€~}€!~~~~~~~~~~~~~~~~~~v-~9v-~9v-~9v-~9y-~-v9~-v9~-t9~9v-~9v-~9v9~-v9~-y-~-t9-t9-y-~-t9-t-9v-~9v-~9t-9y-~-t9-v-~9y-~-v9~-t-9t-9t-9v-~9y-~-t9-t-9y-~-t-9t-9y-~-t9-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-{-!y-~-y-~-y-~-{-!y-~-{!-{!-{!-{!-{!-{!-{!-{!-{-!{-!{-!{-!{-!{!-{!-|!!{-!{!-|!!|!!},‚!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!}€!}€!}€!~|!!}€!~}!€~}!€}!€~}!€~}€!~~}!€}!€~~~~~~~~~~~~~}€!~~~~}€!~}€!~~}€!~}!€}€!}€!}€!}!€~}!€}!€}€!}€!}€!}!€}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!},‚!|!!|!!|!!|!!|!!|!!|!!{-!},‚!},‚!{-!~,…,{-!},‚!{-‚,{-‚,y-~-{,‚-{-‚,y-~-y-~-y,‚9|6‚=nV…–n«•¹q͑Æi¹“­o«’³j´™™i—Šh™™ g›hu™rj€—ƒiŠ—mƒ—uhr™ug›i—Šeƒ•e —¥f´•­d ™€h­’¿f˒Ëg´—¥b š´g´—¥n™•Šju›klm”ui—¥g¥™­^ œ”j“¹eÓÃh¿’­j™ƒg€™mƒ–ƒi‘h”€frœkl`–YqYVhb—re€“ƒlu”mnm”{rƒxgŒ›i­’¥ršŽ«o«’³l³’ÃfːÒqÖ¼n¹”Æq͑Æi¹”¿b˓Ãl¹“³o«’³v³Ž«g¿’Ëa×´m­’«n«“¥j™™´a´—ªc²š¥j ’šj¥”¥j¥”¥^²œ¥f«œ™m¥‘Íq܉ÜrƓ«g´–Ãn¿–¼uڅæyæƒàp܌Ío͏Íq¼•³kÐÔfґ¿n¿–¼uÀ”³o«“Šo™”³`¼•ª^œ‘ƒmƒ–ƒju˜€f•´`­›•d”—³nԋÜoàŠÔi˒Ãl³’¥n¥“«k¹’ÔfҐËoÓÆn¹•«o™—ƒf•´`ª–¥i””xlŠ•ƒj€˜ukŠ“Šb—”a~’›m͎ÔoàˆÚkԍÔpƑ³q£–l«“¿`¼•ªk“ƒoŠ–{mkšYsI”Ydr›rfj“€b~š€e€“ƒi‘hr—bnV–Ykmm^~“rmk˜Is?’FrI“=iF•`biœ`ci kc`žaf`škgŒ›kj’=w?4o=”FoF”=o=–;q=”=q=”=s6VjV–VpF“IoN`lb“bnI”Vkmmgj“VnI”Vjk™bkV•Fv?’Ie`–`g`–VlI”`kb•VrI?mF“Fe`–`nV”Ir=“Ig`–VnIŽ=u6ŒFgV–`g`–VmF“FlI”`mVŠ`nV”IgV“jhmjoVŠVkIŒmf¥–¥dƒjhQ–;oH‡i­‘­n—•bnV”Ikm’¥r«“«j¥”¥j¥”¥i¥–h–Ž­i­‘­e›ˆ›o¥Žši–¥ošŽ¥i­‘­h›Ž¥lš‰›mšŠ–mƒˆPv9!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!}!€|!!|!!}€!}€!}€!}!€|!!}€!|!!|!!|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{€-|!!},‚!|!!{-!}!‚,|!!{!-z)„!{!-|!!{-!},‚!},‚!{!-{!-{!-x)„-}!‚,{!-},‚!}!‚,{!-}!‚,{!-z)„!{-!{,‚-{,‚-}!‚,z!„){-‚,{,‚-{!-{,‚-{-!{-!y-~-}!‚,{!-},‚!},‚!z)„!z)„!z)„!|!!},‚!|!!|!!|!!|!!|!!}!€|!!}€!~}!€~~~~~~~~~~~~~~~~~~~y-~-v9~-v9~-v9~-q99v-~9v-~9v-~9t9~9v-~9y-~-q99v9~-v9~-t9~9t9-q99v-~9y-~-y-~-v-~9v-~9t9-t9-v-~9t-9y-~-y-~-y-~-y-~-t9-y-~-t9-t-9y-~-y-~-t-9y-~-y-~-t9-y-~-y-~-y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-{!-{!-y-~-{!-{-!{!-{!-{!-|!!|!!{!-{!-{!-{!-{!-|!!{-!{-!{!-{!-{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!}€!~|!!}€!}!€}!€}!€}!€}!€|!!}€!~|!!~}€!~}€!}€!~~}!€~~}!€~~~~~~~~~~~~~~~}!€|!!~}€!|!!~}!€}!€|!!}€!}€!~}!€}!€}!€|!!}€!}!€}!€|!!}€!}!€|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!}!‚,|!!{-!|!!},‚!{-!{-!{-!{-‚,{-‚,y-~-{!-{-‚,{-‚,y-~-~,…6{-6y-~-s=}km­’«l³ÔhڎËl³’¥i¿“Ãj¹•¥gƒ˜ iÓ¿o³”™lu‘™k³‘­o™—ƒi€”mhr˜ƒkŠ“Šm{›kfr›m™–¥b ›—^Œ k«–´d¿”¼_²ž—h­’¿g˒¿l¥•ƒjuŠiŠ—g›g›_Œ—g¥—´i¹“­e¥”mu˜ujƒ—€ju›knV–Yf`škgbasY–YnV–Yib•€f–—j™ƒq™•«t«‘j¥•¹g¼“³m­’«r«“«k«–´b¿“Ãf¼”¥q¥—£rš™l™”­_´²i­’¥u«—£j’Šf¥”¼[²¢¦g——¥n«“¥j¥”¥^¥ž¦b—› g –³oÓÆh¿’­j¹–¹j¹•¥q͊àæ€ækڎÃp¹˜¼i¿”¹nԋÜoàˆÚi¿“Ãvƍ³s³•£j³‘¿`¼•ªj¥”¥k¥“Šju›kd€™ ^ œ”^Œ j¥•¹h´•³kÐÔgÖ´j¥•¹yàƒærà‡ÜkˑÍoÙ±n«“¥j¥•¹_Ô¼e¥”­m«’p†—ƒgƒ˜ _—Œ]Œšªk­‘³lÒ³mÑÍn͐³tŠŽ³jڊÚiԐËi­‘­mš’qƒ™vfŠ•¥`ª˜ g€škim—kkb•Vhr˜ƒa{ r_{ž¥l³’¥j¥’lƒ•bnY–VxM’ImI˜kbu”qlb“FmF“FoF›V`ƒ–~_i¢icr•ƒe€™rar’rkb•Vq=”=q=”=nI”VjV–VkF•ViFžLjb’­cªugQ•VjIVjV–VjV–VnI”Vhb•`i`•Fq?”VkV•boF”=mF“FnI”VpF“IpI“FkV•Fq=”=u=Š=nI”VoF”=o=”FpI“FqFŽ4s?’FlI”`kV•Fw6Œ=lI”`g`–Vs9‰=lI”`e`–`nVŠHlI”`eƒugj“Vu=ŒNi‘­g­Œ›j€•FnI‘k³‘­e–“—r{™{k­‘³m³³išªk³‘­n­šdª“­h›Ž¥i­‘­ošŽ¥jš¥j¥”¥l›‰šg–‹uwN†4|!!|!!|!!|!!|!!}€!|!!}!€|!!}€!}€!}€!}€!}!€|!!|!!|!!}€!|!!}€!}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!|!!{!-|!!{-!x)„-|!!}!‚,{!-}!‚,}!‚,{!-{!-},‚!},‚!{!-}!‚,{!-{!-{!-{-!{-‚,y-~-}!‚,y-~-x)„-{!-|!!y-~-y-~-{!-{)‡,x-„)},‚!{,‚-{!-},‚!},‚!{-!{!-{!-{!-}!‚,{!-|!!z!„)},‚!|!!{)‡,{!†!|!!}€!}!€|!!~}!€}!€~~~~~~~~~~~~~~~~~~t9~9v-~9v9~-t9~9v9~-t9~9v9~-t9~9v-~9v-~9v-~9v-~9t-9v-~9y-~-v9~-v9~-v9~-v9~-q99v9~-v9~-v9~-v9~-v9~-v-~9t-9y-~-t9-t9-y-~-t9-t-9t-9t-9t-9t9-t-9y-~-t-9t-9y-~-y-~-t9-t-9y-~-y-~-y-~-y-~-t9-y-~-t-9y-~-y-~-y-~-y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-{!-y-~-y-~-{!-{!-{!-{-!y-~-{!-y-~-{!-{-!{-!{-!{-!{-!{-!{!-{!-{!-|!!|!!|!!{-!{!-|!!{-‚,|!!|!!|!!|!!}!€|!!|!!|!!}!€}!€|!!}!€|!!}!€}!€~}!€}€!~}!€}€!}€!~~~}€!~}!€}€!~~~~~~~~~~~~~}€!~|!!}€!~}€!~~}€!}€!}€!~}€!}€!|!!}€!}€!}!€}€!}€!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!{!-|!!|!!{-!|!!},‚!{!-|!!},‚!{-!y-~-{!-}!‚,y-~-y-~-y-~-{6-y-~-v9~-w=Vf›Ëi˒ÃhҌÚhڌÒl³’¥g¿’Ëi¿“¥oŠ“«f˒Ëi¿“¥m‚¿i˒Ãj­’Šku”j¥”¥g™€hr™uiŠ—j™ƒiŠ•€m”™i­˜³f­˜­b•™^ª”Ãg˒¿g¥—ƒl¥’³l­”™mƒ—uhk”uh–r™ša¥™ bœ~g€—€e€™rkb¤UsI’IhVškfrœkob•Yob•Yik˜Šf¥–¥i‘v¢Œ«q«•™k«–´f´•­n¥“«j¥”¥rА¥a­šªe —¥j¥”¥m¥–™j™›­^«¥j¥•¹kˑÍi˒Ãe¿–´j­›™j­Ôsà†àmڌÍi¿”¹g¹˜´kÎÚsà†às͔¼k¹”Ãt¼–«p͌Ün܉Úh˔¹r«“«u£—«b¿“Ã_Ô¼m­’«n¹•«m™”f¥–¥\¥žh€”jƒ—€kŠ“Šb­ [”žŒe›´oڈàn܉Út͍Ðr܍Æo«’³nԋÜdԐÃq³•¼q«•™j™ƒlƒ•¥^²œ¥j™ƒkŠ“ŠlŠ•ƒošŽ¥e—›h——Ãr܇àn܉Úm͎Ôp͑«kŠ“¥eÓÃ^Ôªh—knlšVnU›IibŸ—^ Œb~š€kŠ“¥i¥–g¥—´g¥——mu—ƒj³‘¿g­Œ›p€NrIšVsI’IpFšbdr›rbi™jjk™bek–ƒb´™¥hb•`h`“mg€‘uc~“unV”IsI’Is?’FgV–`biœ`d~˜¥b›_dm’ÃgҐ­k`•=nI”VdVšXiQ”Fq4ŽFmF“FoF”=u=“?iQ”Fs=Ž4w6Œ=mF“Fq=”=q=”=q4ŽFu6ŒFs=Ž4oF”=q=”=w6Œ=p9Œ=s=Ž4u?“=mF“Fs=Ž4s=Ž4pF“IrI“=w4Ž4kF•VjVIrI“=lF“bhb•`oVŠ9lF“Šk³‘­e–ƒkV•Fp‚Œ³e¿–´j–’ulb’mk¥“ÃmÑÍo¼•­k³‘­i­’¥j¥”¥o¥Žši­‘­i­’¥l›‰šg›Œ­j¥”¥h–†‡pk|Hz)„!|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!|!!|!!}€!}!€|!!}€!}€!}€!}€!}€!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!}!‚,|!!|!!|!!{-!{-!},‚!{-!z)„!},‚!{!-}!‚,{-!{-‚,},‚!x-„){,‚-x)„-}!‚,{!-{!-}!‚,{!-},‚!y-~-{,‚-{)‡,{-‚,y-~-{!-y-~-{!-z)„!}!‚,{!-x)„-x)„-|!!{-!z)„!}!‚,}!‚,|!!z)„!|!!|!!|!!}!‚,}!€|!!}!€|!!~}€!~~~~~~~~~~~~~~~~~~v-~9t9-t9~9v-~9v-~9v9~-t9~9v-~9v9~-v9~-t9~9v9~-t9~9v-~9q99v-~9v-~9y-~-q99v-~9v-~9v-~9t-9v-~9v9~-q99v-~9y-~-v-~9t9-t9-t-9v-~9y-~-v9~-y-~-y-~-t9-y-~-t9-y-~-t9-t9-y-~-t9-t-9y-~-t9-t9-y-~-y-~-t9-y-~-t9-y-~-y-~-y-~-y-~-t-9y-~-y-~-y-~-y-~-y-~-{-!{-!y-~-{!-{-!y-~-{!-{!-{!-y-~-y-~-y-~-{!-y-~-{!-{!-|!!{-!|!!{-‚,{-!{-!},‚!},‚!|!!|!!|!!|!!|!!|!!|!!|!!}€!}!€|!!|!!}€!}€!}!€}€!}€!}!€~}€!}!€~}!€~}€!~}€!~}€!~}!€}€!~~~~~~~~~~~~}!€~}!€}!€|!!}€!~|!!}€!~}!€}!€}!€}!€~|!!~}€!}!€}!€}!€}!€}!€|!!}€!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!{-!}!‚,|!!{-!{-!{,‚-y-~-{!-~,…,{-‚,y-~-{-‚,{-‚,y-~-{-6{-6y-NiŒˆÃkԌÚhڌÒjڊÚhڎËi­’¥i¹”¿c¿”ªi‘­f˒Ëi¿“¥h¥“ËfҐËj­’Šgƒ‘Ãj¿‘³pxj–޳o³”™iŠ•€duœŒj™›­l¥’³d­—dŒ›ƒg¥—´e¿–´m–Ššg¿’Ëa¼˜ i€•bmu—ƒl€˜{ju˜€]~œ~]~¡{g€—€e€™rc`žafVžahb—re~šukrš{m{’uox’a ™¥j—™™n¥“«r«Žšf­˜­^²œ¥k«–´v½ÆgÖ´_´ž«d¥•¿p͌ÜoàŠÔk͑¿d´œ­kÎÚæ€ææ€æp܌Ím͑Ãq͊àyàƒæxæ„Üo͏Íq͑ÆrƍÜn܉ÚkԐÃrƒÆn«“¥iÒËb˓Ão³’«l¹“³j¥”¥k«–´]ª›«k“ƒsŠŠlŠ•ƒc—›—[”žŒa ˜¼f¿‘ÒkԐÃlÓÃl³’¥l™•¿r܇àoàˆÚkԍÔpԓ¼n«“¥h¹”Ë^Ôªp‘mƒ—ujk™bml\¥žd€™ mÑÍk͑¿oƐÔoΚp†”³jڊÚiԐËl¿“«o‘‘€plšƒe¥”­\ª”œhr—bmb›blb“bfr›\”~h—•³i¿ÔmڌÍoÓÆoÓ«nŒ‚h³•´]ª–•er˜`nY–VnI”Vjk›u`rœq_~œ d¥‘–f—–h–ސkb•VpI“bdm–~dr›rkV•FpI“FpF˜mdŠœ{`j—qj–³cªuer“–i¥–tI4s=Ž4mF“FpI“FiQ”Fo=–;t42u4ˆ4u?“=t42w4Ž4mF“Fs4Ž=t24r2”=u=“?pI“FpI“Fs=Ž4q=”=s?’Fs4Ž=s4Ž=u6ŒFs4Ž=s=Ž4o=”Fs9‰=t42t4IoF”=u4ˆ4r=“InIŽ=q=”=nIŽu^¥—•ej“`kF•Vfƒ­h­Ž–a~`qmŠªg¿“¿i­“¹lÒ³m³³i­’¥j¥”¥o¥Žšdª“­j¥”¥h›Ž¥h¥Ž›q¥Œªi¥–lƒ“mx-„)|!!|!!|!!}€!}!€|!!|!!|!!}!€}!€}!€|!!}!€}€!|!!}!€|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-}€!x)„-|!!z)„!|!!{-!{-!{!-|!!{)‡,|!!{,‚-{!-{!-{-!},‚!{-!{-!{,‚-{!-}!‚,}!‚,x)„-{-‚,{!-x)„-{,‡)y-~-z!„)y-~-x)„-{!-},‚!x-„)~,…,x)„-{,‚-{-!y-~-|!!},‚!{-!},‚!{-!{-!|!!|!!|!!},‚!|!!|!!}!€|!!{!†!}€!~}!€}!€~~~~~~~~~~~~~~~~~~y-~-t9~9v-~9v9~-t9~9v-~9v-~9v9~-t9~9q99v9~-v-~9t-9v9~-v9~-v9~-v-~9v9~-v9~-v9~-t9-t9~9v9~-t9~9v-~9v9~-q99q99v9~-y-~-t9-t-9y-~-t9-t9-t-9t-9y-~-t9-t9-t9-y-~-y-~-t9-t-9y-~-t9-t-9y-~-t9-t9-y-~-y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{!-{!-y-~-{-!{-!{-!y-~-{!-{!-{!-{!-{!-{!-{-!{-!}!‚,{!-|!!|!!{-!{!-|!!|!!|!!|!!|!!}!€|!!}!€}!€~}!€}!€}!€}!€}!€}€!}€!}€!~~}€!~~~}!€~~~~~~~~~~~~~~~~~~~~~}!€~}!€}!€~}!€}!€}!€}!€}€!}€!}€!}!€|!!}!€}€!}€!|!!|!!}€!}!€|!!|!!}!€|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!{-!|!!{-!{!-{!-{,‚-{,‚-{-‚,~,…,y-~-{,‚-{6-y,‚9y-~-qNŠ­lˍÜrà‡ÜkڌÔhҎÔg˒¿e¥— i­‘­e­– j’¥d¼”¿e´’–i¥“¿f˒Ëj­’Ši¥“¿g˒¿h–ސhÑÒkÓ¥jƒ—€h™™ g¥™­k«™­n™•Šg›e —¥a¥™ g—˜¹g¿“¿i­‘km‘Šm “Šiƒ–`mYškbkžqdr›rb~š€`rœqdr›rju˜€ju˜€mƒ–ƒi–Ãi˒Ãb¼š­l³“¹j¹–¹m͌ÚkԍÔkÔ¹k«–´lˍÜsà†àn܋Ôi¿”¹mÑÍr܇àyæƒàn܋Ôo͏Ír܇àæ€ææ€ærЌÔq͑Æm͌Úsà†àmڌÍlÓÃt¼–«h¹”ËfҐËk¹”ÃoƓÃn±š¥i«”¼`¼•ªf¥–¥r«Žšl™™`›•«[•š”^”œ i­‘­f¥–¥m™–¥j—™™f —Ãoڈàn܋Ôm͎ÔrЏÃn±›¹eҏÒb˓Ãq¹ªs±•šm†˜€h™–ª]ª™”bqžkhr•mm{šg¥—´`­ŸŒgƒ‘ÃyæƒàoàŠÔr½Ãp¼—¥i—¥b˓Ãa´—ªl–’{mu˜ugkžkcƒ•—\”~b~š€jš¼i¥’­e¿–´d ™€kƒ“­f¿‘ÒiԐËm³³q«•™r{œlhŽ–\Œž~hm•rj`œbhr˜ƒf­–—aržidr›—i¥’­h­Ž–lm’bsI’IsI”Ydj•rdjje`–`gV–`br› _´œ”^q ihr—Šj€˜uhj’bqI‹9q=”=q=”=kF•VbX—ji­‘­h_‘4s2•2v!2r=”2u2)u4ˆ4nV”Is=Ž4t24s?’Fs?’FmF“FqNVoF”=s=‰9qVNs=Ž4q=”=lI”`rI“=u4ƒ9qVNpF”2y6†4t4Ip9Œ=x,2s4Ž=r=”2u4ˆ4lI”`ej“`lIŽFiF•`iuސdƒjqV’bl³Ôh¿’­f—–všˆ¢lÓÃj¿‘³j¥”¥c ‘›i¥’­i¥–i¥’­i¥’­i­‘­n­šf‡ˆƒvC}!|!!|!!}€!|!!|!!z…)}€!}€!}€!|!!|!!|!!}!€|!!}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!z)„!{-!|!!{!-|!!{-!}!‚,{!-z)„!{-‚,|!!y-~-|!!{-!{,‡){!-z)„!x-„){-!{-!{-‚,{!-{-!},‚!{-!{-‚,{-‚,{!-x-„){-‚,{!-{-‚,{-!{!-{,‚-{!-x-„){-!x)„-z)„!{,‚-}!‚,{!-{!-z!„)|!!y-~-{!-z)„!|!!z)„!|!!|!!|!!{!†!}!€|!!~~~~~~~~~~~~~~~~~~~~v9~-v9~-v9~-t9~9v9~-t9~9t9~9v-~9v-~9t9~9t9~9t9~9v-~9v-~9v9~-q99v9~-t9-t9~9q99t9~9v9~-t9~9v9~-v9~-v9~-v-~9t9-v9~-q99t-9v-~9t9-y-~-t-9t-9y-~-t9-t-9t-9t-9t-9t-9t-9y-~-t9-t-9y-~-t9-t9-t-9y-~-t9-y-~-y-~-t9-t9-t-9y-~-t9-t9-t9-t9-y-~-y-~-y-~-{-!y-~-y-~-y-~-{-!{-!y-~-y-~-{-!y-~-y-~-{-!y-~-{-!{-!{-!{!-{!-{!-|!!},‚!{-!|!!|!!{!-|!!{!-|!!|!!|!!|!!}!€|!!|!!|!!}€!}€!}€!~~}!€~}€!}!€}!€}€!~~~~~}!€~}!€~~}€!~~~~~~~~~~}!€}!€}!€~}!€}!€~|!!~}€!}!€}!€}!€}!€}!€|!!}€!}€!}€!|!!}€!}!€|!!|!!|!!}!€~ƒ,}!‚,}€!|!!|!!|!!|!!|!!|!!},‚!|!!|!!|!!}!‚,|!!|!!|!!}!‚,{-!{!-{-!y-~-{!-}!‚,y-~-y-~-{-6y-~-w-ƒ4y69y=‚NqšŒÍnډÜoàˆÚf˒Ëg˒¿f¿›b ›—c—›—e –i—¥f¥–¥^¥›”j–޳e¿–´b¥“ƒi¥“¿_Ô¼i‘­hˎÚgˑ­gŠ——g¥™­f¥–¥k™‘–p†—ƒnŠ•™m”™c—›—i¥’­f´•­b¥“ƒi—¥i¥–n{˜VlI”`bk¡{dr›rhr™ug€—€iŠ–a¥™ m™–¥n«•¹p͌Ür܇àm͑Ãn¹”Æm͎Ôr܇àuæ…ÚkԐÃqÖ¼p͌Üsà†àp܌ÍmÑÍmÑÍnډÜrà‡ÜrЌÔq܉Üq܉Üsà†àn܉ÚtƖ¼l¹“³k¹”Ãb˓Ãfґ¿o³’«n«“¥j¥•¹\Ú²eª”¥w«“­rš™d—­a¥™ b”—q™•«m³³d¥™[”žŒn™•ÃoڈàhڎËk¿‘Ín͐³k¥“ÃnډÜhڎËoÓÆrƓ«j¥”¥f¹–¼]²›ªh”€ju›kmlžke€™—[—Ÿ‹h–­j³‘¿g˒¿n¹”Æm¹—™i€•ÃnډÜiԐ¿lÓÃw­“«m™–¥a­šªZœ˜”b~kim—kjk›u[”žŒ]~¡{f —Ãr܇àoàŠÔkˑÍj¹•¥l™™d¹•Ã`¼•ªf¥•Šlƒ“mhk”u`ƒ–~Z~œzc—š´b”•e¥”­l­”™lu–blb“bf•´b­”•om‘IrVšIpF“Ibi™j^q i^”›¥i‘hŽ–f­ƒlY–`nY–Vhm•rfk—juFŒ6q=”=pI•u]Œ icXžke¼“­hu˜UpF”2v)‰4oF”=v4‰)p2”FrNŒboF”=s4Ž=pb‰Hu=“?pF•Ye`–`nIŽ=o=”FrbmmV•=r=“Ihm•rmV•=m=•Vlb“bpIˆ4r2”=oN`oF”=t42t24u4ˆ4w4Ž4q4ŽFoF”=w=Œ6sF‹Nd_—blIŽFkFulÓÃd›Œƒgƒ‘Šm­’ÆeҏÒlÒ³j¥”¥d–‘¥j¥”¥k›™e›ˆ›i¥’­k³‘­k³‘­p‘…‡qu…=z)„!|!!|!!|!!}€!|!!}€!|!!|!!}!€}!€}€!|!!}€!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!z!„){-!{-!{!-}!‚,|!!{-!{!-},‚!},‚!},‚!{-!{-‚,},‚!{-!x-„){!-{-!{!-{-!x-„){!-{!-{-!{!-~,…,x-„){!-{,‚-y-~-}!‚,{-!{,‚-}!‚,{-‚,{!-z!„){-!z)„!},‚!{!-z!„)|!!z)„!|!!|!!|!!|!!~,ƒ|!!|!!}€!}€!}€!}!€|!!~~~~~~~~~~~~~~~~~v-~9v-~9v-~9y-~-t9~9v9~-v9~-t9~9v9~-v9~-t9~9v-~9t9~9q99v9~-t9-q99t9~9v9~-v-~9t-9v-~9v9~-v9~-t9~9q99q99v-~9q99y-~-v9~-t9-t-9q99v9~-t9-t-9t-9y-~-t9-t-9y-~-t9-t9-t-9t-9t-9t-9t-9y-~-t9-t9-y-~-t9-t9-t9-y-~-t9-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-{!-y-~-y-~-y-~-y-~-{-!y-~-{-!y-~-{-!{-!y-~-{,‚-|!!{-!{-!{-!{!-|!!{!-|!!|!!|!!{!-|!!|!!}!€|!!}!€~}!€|!!~}!€~}!€~}€!~~~}!€~~~~~}!€}!€~}!€}€!~~~~~~~~~}!€~~~~|!!}€!}€!|!!~}€!}!€~|!!}€!|!!}!€}!€}!€}€!}!€~}!€|!!}!€}!€}!€|!!|!!}€!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!{!-|!!|!!},‚!}!‚,{-!}!‚,{-!{-‚,{!-~,…,y-~-{-‚,{-‚,y-~-{6-{-6x9ˆMquˆ¢mÑÍnډÜm͑Ãi­‘­o³’«d¥™g›j™ƒb~š€e—›d ›b€š~g——¥`ª˜ h–g¥—´f´•­e“¼fːÒi¿“¥j’¥f¹–¼l­”™p†—ƒlƒ•Šl™™q•šƒkŠ“Šj—™™g¥——_ƒ—Œd¥‘–k¥“Špb“ImYškh€”g€—€kŠ“ŠjŠ’f­•´j¿‘³l³“¹q͑ÆnډÜrà‡ÜmԎÍnԋÜuЊÜsà†àn܋ÔlÓÃp¼˜¹m͌ÚjڊÚhґÃoƓÃw¼½fːÒeҏÒoÓÆwʓÆlƒËaÑÒi˒Ãn«“¥m¥–™kš‘´b¼—´i­’¥k›™n•†jŠ’­]ªœ¦j—™™jš’ h™™ g¥™­e¥— j¹ÚnډÜq܉Üh˔¹n«“¥k¥“ÃjڊÚhڌÒvƏÐv܎Êl³“¹fːÒa×´m­’«mš’ju˜€^ ž²^¥›Œb~š€jŠ’g–¿hÙ­e—™€k¥‘ÔjڊÚl܍ËkÔ¹m¥–™o†–¥b¿“Ãa¼–¥q¥—£l¥•ƒmu—ƒ_—ŒX‹¥{b~š€m€ši¥’­j¹•¥j™ƒj–³nԋÜhڌÒrͽl³’¥n™•Šc¥š²^¥—•b~‹ujk™bhr—Ãcאaržij–³e¼“­d¼”¿l–’{jk™brb‘be”¥[œ˜~i`•FpF“Ih`”Š]~q^i qi—¥i¥–k“ƒlu–bnV”IsI’Ie`“jaqš`kmmmVœV``š”`•™roIIlY–`kV•bk`•=t42q=”=o=–;t4IgV–`oF”=o4Vlb“bmF“FoI‘mjuboF”=pF“Ih`“mmV•=oI‘mjummI†9rNŒbjb†joV4pF‰HhjmoV4t24u=Š=r=”2u4ˆ4t24q;4u4ˆ4o=”FrI“=s4Ž=q6`hŽ–`ƒ–~dƒŒ›hˎÚd˓¼e­”¥h¥Ž›o¥Žšj¥”¥g›Œh›Ž¥i¥’­i­‘­i­’¥g›ŒmƒˆPx-„)|!!|!!}€!|!!}€!|!!|!!}€!}!€|!!|!!}!€}!€}!€}!€|!!|!!|!!}!€}!€|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!{-!|!!|!!z)„!|!!{-!|!!z!„)|!!{-!{!-{!-z)„!{!-{!-{!-}!‚,},‚!{-!}!‚,},‚!x-„){!-},‚!x)„-}!‚,{-!x-„){,‚-~,…,y-~-{)‡,y-~-}!‚,x-„){,‚-{!-{-!y-~-{!-{-‚,{-!{-‚,{!-z!„){,‡)}!‚,|!!},‚!{!-z)„!z!„)|!!{!†!|!!}€!|!!}€!}€!~~~~~~~~~~~~~~~~~~~v9~-t9~9t9~9t9~9v9~-t9~9t9~9t9~9v-~9t9~9v9~-t9~9v-~9v-~9q99t9~9v-~9v9~-t9~9q99t9~9v-~9t-9t9~9t9-t9~9v-~9v9~-v9~-q99t-9q99v-~9y-~-y-~-v9~-t9-t-9t-9t-9t-9t-9y-~-t9-t9-t9-t9-t-9y-~-t9-t-9t-9t-9y-~-t-9t-9t-9y-~-t-9t-9y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-y-~-y-~-{!-y-~-y-~-{-!y-~-{!-{!-{!-|!!{-!y-~-},‚!{!-|!!},‚!{-!}!‚,|!!{,‚-|!!|!!|!!|!!|!!}!€|!!|!!}€!}!€}!€}€!}!€~}!€~~|!!~~~}!€~~~~~~~~~~|!!~~~}!€}!€}€!~|!!}€!}€!}€!~}!€}€!}€!}€!}!€}!€}!€}!€}!€}!€}€!|!!|!!}!€|!!}€!}!€}!€|!!|!!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!|!!{-!{!-{!-{,‚-{!-{,‚-y-~-{,‚-y-~-y-~-{6-y-~-y69|E†xp¥—¼oÓÆrƒÆl³’¥j¥”¥m™”iŠ•€hƒ“ƒg™€hr˜ƒjƒ™jƒ—€er™€g›g›eƒ•e —¥^ ™•e ˜¹g¿“¿^²œ¥f—–­g¿“¿b´š j’¥j¥”¥m™”lŠ•ƒjƒ—€lu”mar›~b~š€h–eƒ–knY–VmY—€d–“ e –vš’£j’¥e³’Ãg¿“¿l³“¹rƒÆk͑ËeҏÒi˒ÃyЋÐyЋÐkԍÔfґ¿qÖ¼l¹“³lÓÃb˓Ãj¿‘³n«•¹o«’³i¹”¿e¼“­n­šrš™p‘¥_´²`ª–¥o¥Žšo™—ƒh™˜¥^²œ¥a › n¥“«s³Œ³i¹“­b ›—h¥“ËmԎÍiԐ¿j¹–¹q͑Æq͊àsà†àrà‡Ül˒ÆnƔ¹n«•¹eҏÒbÓ¿p¹˜¼tÓ­m™–¥c´š´`ª˜ n•†oƒ˜{lm”uc—›—[”žŒj­’ÃkԌÚmÑÍmԎÍi¥—k¹’ÔjڊÚfґ¿m³³n«“¥h–]ª›²Wœžˆhm•rmb›blb“Š]~œ~^x¡rd¥•¿m͌ÚmڌÍo͏ÍrƓ«n«“¥iÒË`¼•ªm¥–™m{›ksY–Y]~™•WŒ¢‹aª—´i­‘­d¼”¿iڍ­d—›rku”g³“¼aª—´g•˜{mb›bnb›Vdu—•`ƒ—qcƒƒh€”m’«f •mfrœkim”€jŠ’jŠusY”IpI“Fu?“=iYœie`˜rd¿”¼eƒui€”mom‘IsI’IwI‰=pI“bg`–Vr2”=q=”=kŠ“¥jk˜FkF•VmF•;mF“Fh`•bnV”Ihb’jkmmoV4jV“mhm“`nV”Ih`“mer˜`oF”=hb’jhm“`l`”IkV•bhmjrH‰=u4ˆ4oN`tI4t24v?ˆHs=Ž4t24s4Ž=s4Ž=w4Ž4r=“Iib•€fujf`–€j³‘¿d­“ªb¥™—m³³g³“¼m­’«i¥–j¥”¥h¥Ž›j¥”¥pª‹­h–ސk‡ˆmwV~-z!„)|!!|!!|!!}€!}!€|!!}!€|!!}!€|!!}€!|!!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!{-!{-!z!„)|!!},‚!|!!},‚!z!„){-!{!-{!-},‚!},‚!{-‚,{!-{!-}!‚,{-!{-‚,}!‚,{-!y-~-},‚!},‚!{)‡,{!-{-!x-„)}!‚,y-~-{,‚-{,‚-{!-}!‚,{-‚,}!‚,{-!z)„!z)„!{,‡)x-„)},‚!},‚!{-!z!„){-!|!!z)„!|!!z)„!|!!z)„!|!!|!!~}!€~}€!~}€!~~~~~~~~~~~~~~~~v-~9v9~-v9~-v9~-t9~9t9~9v-~9v-~9t9~9v-~9t9~9v-~9t9~9t9~9v-~9q99v9~-q99q99v-~9v-~9t9~9q99v9~-q99v9~-t9-q99q99v-~9t9-v9~-t9-t-9o9„9v-~9q99t-9v-~9y-~-t9-t9-t-9y-~-t9-y-~-t9-t9-t-9y-~-t9-t-9y-~-t9-t9-y-~-t9-t-9t-9y-~-t-9y-~-t-9y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-{!-|!!},‚!{-!{-!{-!{-!{!-|!!|!!|!!{-!|!!|!!|!!|!!}!€}!€}!€~}!€}!€~}!€~}!€}!€~~}!€}!€~~~~~~~~~~~~~~~}!€~~~~}€!~}€!}€!~}!€}!€}!€}€!}€!}€!~}€!}€!}!€}!€}!€}€!}!€|!!}€!|!!}!€}€!}€!}€!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!},‚!|!!|!!{!-}!‚,|!!{-‚,|!!{-‚,y-~-{,‚-{,‚-{-‚,y-~-{6-{-‚,y69s=Œum’«n«•¹rͽj¹•¥m™–¥n«“¥o™—ƒk™‘–o™—ƒoƒ˜{d› o™—ƒfrœkju˜€mƒ–ƒc~“ug€™j—™™e›—b ­d­Ÿ­b ›—j¥•¹g¿“¿l«–j¥•¹i¿“¥l¥•ƒj€—ƒju›kmVœVmYškfkœre~šuh`•boY•blb“Ša¥˜¥b ›—m™–¥m™–¥b´—¼b¼—´j¥”¥q£—¥e­“¼b¼—´n´‘³q¼–ÃkÔ¹eÓÃf´•­l³’Ãt¼–«k«–´b¼—´i¥•«n«“¥m¥–™g¥—´`ª˜ p™—™r™še– _«ž—b—› k¹”ÃiÓ¿c´š´_¥¡¡f¥•Ãsà†àsà†àrà‡Üm͑ÃkÎÚsà†àkڌÔmÑÍwʓÆm͎ÔhڌÒfҐËoÓÆn¹•«g¥—´a¼•¼]²›ªo¥Žšm«—iŠ—e¥— [”ž”b¥™´e´–¿i¼”«f­•´i¥—l³Ôq܉ÜoҌ³o͏Ít¼‘še³’Ãb˓Ãa¼–¥n¥“«r™˜†o{™u_—Œa~›rf”›™i–¥i­“¹c¥™Œg€—€i–ÃoڈàmڌÍq͑Æp¼—¥m™”_ª•ª]ª–•gr˜VfUQdk›¥aª˜—a~›re´–ËkԌÚpˍ³l¿“«t£™™lŠ•ƒ^ ž«`ª–¥hu”kob•YgV˜r\ƒœˆZqzd¼“Ël³’Ãl³’¥oŠ–{o{™uob•Ye€“ƒf€“jjQ”=sI’IlI–raržijb™knšj’Šgƒ‘bnV”IvI’?q=”=dVœie`“j`z™Vkb•Vi‘­mu=q=”=mF“FiF”QkF•Vg`–Vhjmej“`wN†4hb’jlb“bjIVhb•`nY–Vq9‹Ih`“mdjjkPˆVh`“mhj’bqFŽ4n=”bhjmqFŽ4r?IjV–VqFŽ4w4Ž4s4Ž=v?“2y6†4t24pF“IrI“=nI”V^”›¥i–Š]~”~j³‘Ëa¼•¼d´œ­k«Ž›i¥’­h›Ž¥g›Œ­g›Œ­mšŠ–g–‘€nu„Hz!„){€-}€!|!!|!!|!!}!€|!!}!€|!!}!€}!€|!!}!€|!!|!!}!€}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!{-!x-„)|!!{-!},‚!z!„)}!‚,{!-{!-|!!{-!},‚!{-‚,{!-}!‚,{!-{!-},‚!{,‚-x)„-y-~-{-!{,‚-{!-x-„){-!y-~-}!‚,{-‚,{-!{-!x)„-{)‡,{-‚,{!-},‚!{-!|!!x-„){!-|!!}!‚,|!!z)„!|!!|!!|!!|!!|!!}€!|!!}€!~ƒ,}!€}€!~~~~~~~~~~~~~~~~~v9~-v9~-t9~9t9~9y-~-t9~9t9~9t9~9t9~9q99t9~9t9~9t9-q99t9~9t9-v9~-v9~-t9~9t9~9q99t-9t9~9t9~9t9~9q99q99v-~9v-~9q99v-~9t-9q99v-~9y-~-q99t-9t9-o9„9t-9t-9t-9t9-o9„9t-9o9„9t-9t-9o9„9t-9t-9y-~-t9-t-9t-9t-9t-9y-~-y-~-t9-t9-t-9y-~-t-9y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-{-!{-!y-~-},‚!y-~-y-~-{!-{-!{!-|!!{!-{!-{!-|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!~}€!~~}!€}€!~}€!}€!~~~~~~~~~~~~~~~}!€}!€~}!€~~~}€!}€!}!€|!!}€!}€!~}!€|!!}€!|!!}€!}!€}!€|!!}!€|!!}€!}€!}!€}!€}!€|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!},‚!{!-|!!|!!|!!|!!|!!{-!},‚!{-‚,{-‚,{-!y-~-{,‚-{-6{-6y-~-y,‚9y-=pƒši­“¹r«“«lÓÃm«’m¥‘Ímƒ¿nšf­•´g³– kƒ“rª‹³l¥•ƒim–m¥–™iŠ•€juše—›j™ƒg€™c—›—e—›e€™—i —«f´•­c›‘ e­“¼h¿’­k”uhu”ƒg€šknV”Igabbk¡{ar›~hu™rpu‚iŠ–b—™¥f—–l™”­n«“¥c¥š²`ª–¥j’¥o¥Žšb­›¥^¥«e—“–r¥¢j¥”¥d­Ÿ­`ª–¥o«’³l¹“³k«™­b­ e ˜¹lÓÃm¼š´g¹›­b ­mÑÍr܇ào܎Ãd´œ­l³’ÃoڈànډÜkԐÃg¹˜´k¹’Ôyàƒæsà†àyæƒàv܎ÊqƑÍjڊÚhڎËp¹˜¼l¹“³l³“¹a¼•¼^¼›²k­‘³m«—l†š—^¥«^œ——h–p‘m™—¹b´š a”kÐÔyàƒækڎÃqÖ¼p¥™•j’ÃeҏÒj¿‘³rγq«•™l™”­]ª›²Zœ˜”l€˜{lu”mhk—f™›Œ\{¢ŒmÑÍkԍÔi˒Ãrƙ±q«•™n«•¹fːÒcÒ­všŠŠlu–boV¢b]—¡™X‹ ~`~–ƒh–h¥“ËiԐ¿e—™€kŠ“¥fːÒcÒ­r«“«q•~ju›k`€•œQž¡“hr•mfr“ud€™ ]ª™”]~¡{d –Ëf˒ËaΛs{‚mƒ—usY”Ifj“€frœkh`•bkmmf€›d œkkb•Vlb“be€“ƒhu”kvI’?o=”FmV‡jbkžq\o—ƒb •ƒ]~œ~ik—mrI“=w4Ž4p2”FiVžUgQ•VkV•bfk—jg`–VpF“IkV•be`–`pI“FgV–`oF”=r=“Ih`•bpb‰VjV–Vhb’jh`Is=Ž4nNŠjhm“`nIŽ=nVŠHmVŠ`qFŽ4s4Ž=rI†Nu4ˆ4t42z,‡4s=Ž4u4ˆ4r?Ijbuhm“`hb’ja ™¥i­‘­`ª–¥t¢‹³i­‘­h¥Ž›i¥’­j¥”¥h›Ž¥sšˆ‚gƒmvC}!|!!|!!}€!}!€|!!|!!}€!|!!}!€|!!|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!z!„)|!!{-€{-!|!!|!!{!-{!-z!„){!-},‚!{-!x)„-z!„){,‚-}!‚,{!-}!‚,{-‚,{!-}!‚,x)„-{!-{-!{-!{!-{,‡){-‚,{-‚,{-‚,{,‚-{,‡)y-~-}!‚,y-~-x-„)y-~-},‚!y-~-{,‚-x)„-{!-{,‚-{-!{,‡)y-~-|!!x)„-z!„)z)„!},‚!z!„)|!!}€!}!€~,ƒ}!€}€!|‡!~~~~~~~~~~~~~~~~~~t-9t9~9t9~9v-~9t9~9t9~9v9~-t9~9t9~9t9~9v9~-v9~-t9~9t9~9v9~-t9~9t9~9t9~9v9~-t9~9t9~9q99v9~-t9~9v-~9t-9t9~9v-~9t-9q99v-~9t9-v9~-q99q99y-~-o9„9v-~9t-9t-9t9-v9~-t-9v-~9t9-y-~-o9„9q99y-~-t9-t9-t-9t-9t-9y-~-t9-y-~-t9-o9„9t-9t-9t-9y-~-t9-t-9y-~-y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-{!-{-!y-~-{-!{!-{!-|!!{-!{-!{-!|!!|!!{!-|!!{-!|!!|!!}!€|!!|!!}€!}!€~|!!~}!€}!€}€!~}!€}!€~~}€!~~~~}€!~~~~}€!~}!€~~~~~}!€}€!}€!~}!€}!€}€!|!!~|!!}€!~}!€}!€}!€}!€}!€}!€}€!|!!}€!|!!}€!}!€|!!}!€|!!|!!}!€|!!~ƒ,|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!}!‚,}!‚,{-!{!-}!‚,{-!{,‚-{-‚,y-~-y-~-{,‚-y-~-~,…6y96uH„xf —ÃhґÃl³’ÃiԐËl³’¥l³Úl܍Ësš‰šg¿’Ëh¿’­i‘­i˒Ãp³Œ‚k³m³³k”uh–Ž­q«•™g™€f–—g™€a~›rfr›p™—™a¥™ b—› j¥”¥a¥™ hƒ”uer™€lu–bcaž`fr“uhr™uhƒ˜—j—™™k¿‘Íh˔¹g¥™­e —¥nԋÜiڎ¿g¥™­a¥™ n™•ÃiԐËg³”¥b­›¥f¥—¹f˒Ëg¿“¿g¹˜´g­›¹nԋÜrà‡ÜiԐ¿g¹˜´n¹”ÆnډÜmԎÍk͑ËrƍÜyàƒææ€æoàŠÔq͑Æm͎ÔnډÜoàˆÚo͏ÍlÓÃmÑÍjڊÚhԎÒq˓Êvƍ³j³‘¿b˓Ãe¿–´j¥”¥sš‘†fŠ— `¥–ª]²›ªj’ŠsŠŠe€™—^ œ”]Ž©Œl¿ŽÜrà‡Üo͏ÍoƓÃn¹•«j¹ÚoàˆÚkԐÃtƖ¼m«’m™—¹_Ô¼dª“m™”o{™uhƒ˜—[”žŒYˆ§{k€—™i¥’­k­‘³j¹•¥j™ƒoš‹ÔjڊÚl˒ÆvЏÆn«“¥o™”³e¿–´`›“”hu™rol™bkY™r_ƒ—ŒY~¢a«š¿hҌÚg¿’Ën܋Ôq«•™i—Šg³“¼dª“oƒ˜{hkšVoY“mb”•[ŒŸŒe —¥kˑÍg˒¿g¹˜´j¥’oŠ“«d¿”¼dª“lb’mmkšYhVškar›~]q~a › j¥”¥p‘lu–bsY–YqNVhu™rer˜`jV–VjV“mg¿“¿aª˜raižrb •ƒeƒupb“IoF”=u?“=k;—VdVšXcr•ƒhb’jej“`iQ”Fq4ŽFiF•`i`•Fl=•FpI“Fs9‰=u4ˆ4gV–`g`–Vq9‰Fg`–VrI“=t4Ilb’mg`–Vq9‹IlHŠ`e`–`oIŽ2sF‹Nhb•`qFŽ4w4Ž4sF‹NoV4u=”4q=”=mF“Fr=“IkF•Vgu‹–f›Š–hŒˆ¥oÎÜd¿”¼g´—¥f¥–¥h¥Ž›lš‰›g­Œ›g€ˆxvV„)|!!}€!|!!|!!}€!|!!|!!}€!}€!}€!}!€|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!x-„){!-|!!{!-}!‚,|!!z!„){!-|!!{!-|!!},‚!{-‚,{!-{!-x)„-{!-|!!y-~-x)„-}!‚,x-„){!-{,‚-{!-},‚!{-!{-‚,x)„-{-!{-!{,‚-{!-{,‡){-‚,{!-x)„-{!-x)„-{!-{,‚-z!„){!-|!!z!„)},‚!},‚!|!!z!„)|!!|!!|!!}!‚,|!!}€!|!!~|!!}€!~~~~~~~~~~~~~~~~~v9~-v9~-t9~9v-~9t9~9v-~9t9~9q99t9~9t9~9t9~9t9~9v-~9v9~-t9~9v9~-v9~-t9~9t9~9v9~-t9~9t9~9v-~9q99t9~9t9~9v-~9q99t9~9q99v-~9v9~-t9-t9-t9-q99v-~9v-~9t9-q99q99t-9q99v9~-o9„9q99t9-t-9o9„9o9„9o9„9t-9y-~-t9-t9-o9„9t-9t9-v9~-t9-y-~-t-9t-9y-~-t9-t9-t-9y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!y-~-{-!{!-},‚!y-~-{!-},‚!{-‚,{!-{!-{!-|!!{!-|!!|!!|!!|!!}!€|!!}!€}!€}!€}€!~}!€~}!€~~~}€!~~~~~~~}€!~}€!~~~~}!€}€!~}!€~~}!€}€!}€!~}€!}!€}!€|!!~|!!}!€}!€}€!}€!}€!}!€|!!|!!}€!}!€|!!}€!}€!}€!}!€|!!}€!|!!|!!}!€}!€|!!|!!|!!},‚!|!!|!!|!!},‚!|!!|!!|!!|!!}!‚,{-!{!-{-‚,y-~-{!-y-~-{,‚-y-~-{6-u9ƒ4nH„ui›Œ³kÎÚk܌ÒhÑÒkڌÔi¿“¥kÎÚhڎËo¥Žšh¹”Ëgˑ­i¥“¿iԐËh¿’mšŽËg˒¿k¥“Šd¼”¿e¿–´i–¥i¹“­k™—€mu˜ujuƒi—Šp†–Šj™ƒf—–cŠ™”aŒ›€hm•rlb“bib•€c—›—g——¥n¥“«o«“ÃoԊàmڌÍlÓÃm¹“Íx܄æoàŠÔg¹›­j¹–¹oÎÜsà†àgғ¹oÓÆp͌ÜoàˆÚkԐÃlÓÃm͌Úyàƒæyàƒæp܌Ío͏ÍrƒÆkԌÚiԐËo͏ÍvЈàyàƒæsà†àp܌ÍoƓÃrƒÆkԍÔfҐËoÓÆtƖ¼i¹”¿b¿“ÃbÓ¿k­‘³q«•™fŠ•¥b¥›­`ª˜ kƒ”†mƒ–ƒcŠ™Œ_¡™b ›—e ˜¹kԍÔkÔ¹i­˜³j¥”¥oÌàyæƒàr܍Æo͏Íu½«l¥’³b˓Ãe¼“­s³Œ³o¥–†o†–¥`ª˜ \Œž~rА¥o™—ƒj€—ƒaŒ›€g€—€e ˜¹hˎÚh˔¹oÓ«m¥–™m™—¹b˓Ãdª“­o³’«p†˜umu—ƒ^ ™•[ŒŸŒb€š~i€•Šb š´d ™€dr›rd¥•¿jڊÚg˒¿vƍ½k¥“Šo{˜ƒd™¥Z•™zkb•VlY–`er—¿jԏ­\Œ•~h­™Ãn܉ÚkԐÃm³³m¥–™lƒ•Šd­“ªYŒžznV”Igabc€–ª^¥›Œer™€i—¥j¥”¥mš€rb‘bsY”IxM’Ia`šqbi™jZ••œi€•ŠeҏÒl³mob•Ylb“bfu“rlbŽIrFš=mF“Fe`˜r`gVhV—€nV–Ye`•Qt=)r2”=o=”FoF”=w6Œ=pI“Fu=“?q=”=v?’IoIIo=”FmF“Fs4Ž=t4Ie`–`pH‰Fo=”FgV–`rbŒNmF“FpH‰bmj‡VoF”=r=‰HoY•bmP‡Fu4ˆ4s4Ž=pIˆ4q=”=r=“Ijbuaƒrib•€hˎÚd¿”¼i­’¥o¥Žšh›Ž¥j¥”¥h¥Ž›k“ƒpm‡9z)„!|!!|!!|!!|!!}€!|!!|!!|!!}!€|!!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!z!„){-!z)„!|!!|!!|!!z)„!|!!|!!{,‚-|!!},‚!~,…,}!‚,{!-}!‚,{!-}!‚,}!‚,{!-{,‡)y-~-}!‚,},‚!x-„){!-{,‡)x-„){-‚,{-!x)„-{-!y-~-x)„-{,‚-x)„-x-„){-!{-‚,{-‚,x-„)x-„)},‚!{,‡){!-{!-z)„!{,‚-|!!z)„!z)„!{-!|!!{!-z!„)|!!{!†!|!!|!‰,~|!!~~}€!}€!~~~~~~~~~~~~~~~v9~-t9~9v-~9v9~-t9~9t9~9t9~9t9~9v-~9t9~9v-~9o9„9t9~9q99v-~9t9~9t9~9q99v-~9q99t9~9v9~-t9~9v9~-v9~-q99t9~9t9~9v-~9t-9tC}-q99q99t-9q99q99t-9t9-o9„9t9-o9„9t-9v9~-t9-q99t9-o9„9o9„9t9-t9-t-9v9~-q99t-9t9-t9-t-9t-9t-9t9-q99v9~-t9-o9„9y-~-t9-v-~9v-~9y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-{!-{!-y-~-y-~-|!!y-~-{!-|!!{-!{-!|!!{!-|!!|!!{!-|!!|!!|!!|!!}€!}€!|!!}!€}!€~}!€~}!€~~~~~~~~~~~}!€~~}€!}€!~~~~~}!€~~}!€}!€~}!€}!€}!€~|!!}€!}€!|!!|!!}€!}€!}!€|!!}€!}!€}!€}!€|!!}!€|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{,‚-|!!{-!{!-~,…,{-!y-~-{,‚-{-6{-‚,{-6w-ƒ4|6‚=h‡‰¿hҎÔnډÜkڌÔi¿ÔfҐËf¿›l³’Ãgғ¹i¥–e­“¼b¼—´e–’´g¿’Ëi­‘c­’Ãg˒¿l›‰šg¿’ËgÖ´i¥“¿fґ¿j­’ŠjŠ’n™•ŠlŠ–udr›rhr™ue€™r`~–ƒi€”mjk™brb‘biƒ›i­‘­n¥“«t«–¼m¹“ÍnډÜp܌ÍmÑÍqƑÍr܇àl܍ËoÓÆq͑ÆkԌÚoàˆÚq͑Æo͏ÍnԋÜnډÜiԐËoÓÆt͍Ðq܉Ün܉ÚuЊÜzЏÊoƓÃf˒Ëi˒Ãq¼–ÃtÓÊrЊÚhڌÒl¿“«o³’«n¥“«d¹•Ãa¼•¼l³“¹rƓ«m«’­b­™²^²ž h¥˜™o’xjƒ™[”žŒ[Œž”m™–¥iÒËj¹•¥a › e¥— o¹Žàæ€æn܋Ôn˖¼n¹•«n³ÍjڊÚjˑ³l³“¹o¥–†q{˜™c´š´f —Šm”™pƒšlek–ƒ]—¢ˆ]{¡~k—’šk­™«e —¥k± ­l™™j–³eҏÒg¿“¿lÒ³n™•Škƒ“­_ª•ªg——ŠlŠ•ƒlƒ“mgkœ[ƒš‹\~žŒe¥”­f¿‘ÒhÑÒkԒ¹j­›™m™—¹^ÓÃg²•šp¥‘qv˜bqNV_mš‹Yz”e¥”dª“­l³ÔhڎËe—›h—•³fҐËcÒ­l™™ju›koY•b]ƒ›™Z~œzcŒ™Šc›Ž¼i¥“¿kÓ¥o™—ƒpu‚f¥–¥g–‹usY”ItM’FnYuar”iZqz` ˜ªe ‡l³’Ãj’bsI’Ir=“Ifk—jdiœVnI”Vf`škfu“rkV•Fs=Ž4k2•QjF”Fp;–2v)‰4o=”Ft42s=Ž4sF’?q=”=s4Ž=q4ŽFo;–=s4Ž=q=”=q;4s4Ž=pF“IoF”=q4ŽFqNVnIŽ=q9‹Ih`•bkb•Vs9‰=pH‰bfujlb“Fs4Ž=lHŠ`sN‹Fs=Ž4w6Œ=kV•bnV”IqF‰Vh¥“Ëc¿”ªa¥˜¥j³‘¿h¿’­g­Œ›j¥”¥i‡ˆku‚P{-!|!!|!!}!€|!!}!€}!€|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{!-|!!{-!{!-{!-{!-|!!{-!{!-|!!{-!{-‚,}!‚,{-!{-!{-!},‚!},‚!{-!{,‚-{!-{!-{-!{-!{,‚-z!„){-‚,{-!~,…,}!‚,y-~-{-!{-‚,{,‚-{!-{-‚,{-!{,‚-{)‡,y-~-{!-{,‡){-!},‚!{-!x-„){!-z!„)},‚!|!!z)„!|!!|!!|!!|!!}!€|!!}!€}€!}€!~~~~~~~~~~~~~~~~~t9~9v9~-t9~9q99v9~-t9~9v9~-t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9v-~9t9~9t9~9t9~9t9-t9~9q99t9~9t9~9t9~9t9~9v-~9q99t9~9t-9v9~-q99t9~9t-9v-~9t9-q99v-~9t-9v-~9o9„9t-9o9„9t-9q99t-9q99t-9q99t9-o9„9t-9v-~9t-9t-9q99v9~-o9„9t-9y-~-t9-t9-y-~-t9-t-9y-~-y-~-t-9y-~-t-9y-~-y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-|!!{-‚,{!-{!-{!-|!!{-!{-!{-!{!-|!!{-€|!!|!!|!!}€!}!€}!€~~}€!}!€~~}!€}!€~~~~~~~~~~~~~~}€!}€!~}!€}€!~~}!€}!€}!€}€!}€!}€!}€!}€!|!!}!€}!€|!!}€!}!€|!!}€!}€!}€!|!!}€!}€!}!€}!€|!!}!€}!€|!!|!!|!!|!!|!!}!‚,}€!|!!|!!|!!|!!}!‚,|!!|!!|!!},‚!|!!}!‚,{!-},‚!y-~-y-~-{,‚-{-‚,y-~-{-6{-6y-=lP}‡kÎÚnډÜjڊÚiԐËg¿“¿g˒¿e­– i¥’­f³“ªd–‘¥i¥’­e­– c••¥f­•´j¥’f¥—¹h¿’­e —¥d¼”¿a¼–¥h¹”ËfҐËi­‘n¥“«e­– mƒ—ujk™bob•YlY“jdr›rdr›rlb’mo{˜ƒkš”­a¼•¼k³‘­l¹“³k¹”ÃfːÒg˒¿n¼–¿q¼–ÃfҐËg˒¿n¹”Æq¼–Ãk͑ËfҐËkÔ¹r¹½kÐÔfҐËdÕ¹p¹˜¼k¹”ÃiÒËb˓Ãvƍ½rЏÃr«“«eÓÃg´˜¹q³•¼q¼•³i¹”¿_Ô¼a¥™ p™—™g›c¥š²`ª–¥j—™™rš™gŠ——_—œ”_Œ—e ˜¹g¿“¿h¿’­c—›—a › k­™ÆnډÜgғ¹n¹”Æl¹“³nƎÚoàˆÚkڎÃo³’«m¥–™l™”­a×´dª“oƒ˜{mlžkjk›ua¥˜¥[‹ŸriŠ—iŠ•€k€—™[”žŒb~œe­˜ËhԎÒk­‘³o³’«p™—™q™•«^ÓÃf´•­r«Žšmƒ—uplšƒ]—¡™Y‹—rhu™rg€—€b š´[« Œar›~g­ÒjڊÚoҍÐtܑ¼tªŽ™i—¥]²›ªZ•™zom—lob•Ykƒ“­f­ƒ`{ —kԍÔjڊÚjڊÚp܌Ím¥–™nŠ•™a´—ªZœ˜”gkžkjbœUfm’¼cª–€]q~g¥”³g¿’Ëi¿“Ãn¹•«lƒ•bob™lcƒƒaƒ™ikV•FjV–Vgƒ–¼`—œqaižr`Œ“›gŠ‘ƒi€”msN‹Fq=”=o=”Fck idj•—e—™€e€“ƒjm“VvI’?w=Œ6r=“IjV–VmF•;l;˜;q=”=u2)u4ƒ9pI“Fs=Ž4q4ŽFnIŽ=w4Ž4t24s4Ž=w?4s=Ž4u4ˆ4u4ˆ4q=”=oF”=u4ˆ4s?’FgV–`h`IpF“Ih`“mdjjmP‡FqF‰Vm`ŠVh`Is=Ž4w4‰9rI“=s9‰=u6ŒFh€”­g›ŒdƒŒ›kԌÚaґÃe¼“­p¢‡›j’Šiƒ†blV9|!!}€!|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-z!„)|!!z)„!{-!~,…,z!„){-!{!-z!„){-!}!‚,{-!{-!y-~-{!-{)‡,},‚!y-~-}!‚,{!-}!‚,{-!{,‚-{-!x-„){-!y-~-}!‚,{-‚,{-!{-!{,‚-x)„-}!‚,{-!y-~-z)„!x-„){-!{-!},‚!z!„){-!{!-z)„!}!‚,}!‚,|!!z!„)z!„)|!!|!!}!€|!!~}!€}!€}!€}€!~~~~~~~~~~~~~~~v9~-t9~9v-~9t9~9q99t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9v-~9q99t9~9v9~-t9~9t9~9t9~9q99t9~9q99t9~9v9~-t9~9q99t9~9t-9t9~9q99t9~9t-9o9„9q99v9~-o9„9t-9q99q99t-9q99v-~9o9„9q99t9-t9-o9„9t-9t9-o9„9t-9t9-o9„9o9„9t9-o9„9q99q99o9„9t-9v9~-t9-o9„9y-~-t-9t-9v-~9y-~-y-~-t-9v9~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-y-~-y-~-{-!y-~-{!-{!-{!-|!!{-!{-!|!!|!!|!!}!€|!!}!€}!€}!€|!!~}!€~}€!}!€~~}!€}€!~~~~~~~~~~~}€!~~}!€}€!~}!€}!€}€!~}€!~}!€}€!~}!€}€!}€!}!€}!€}!€}!€}!€|!!|!!~|!!}€!}!€|!!|!!}!€}!€|!!}!€|!!}€!|!!|!!|!!|!!|!!|!!{!-|!!|!!{!-|!!|!!|!!{-!},‚!{-!}!‚,{-!{-‚,y-~-{-6y-~-{6-y-~-r9}bn³ÍjڊÚn܉ÚhڌÒfÔ¼k­‘³i­’¥c—•ƒk™‘–e –l™™h™™ fƒc—›—e¥— b•™f¥–¥g­™¥a › d­œ´a¥™ g­‘Ëfґ¿j¥’h­’¿g´—¥jƒškhu™rqYVnUžYfkœrfrœkpu˜†m”™i¥’­b¼—´k­™«r«“«k«–´b¿“Ãg´—¥u«—£n¥“«d¹•Ãf²š«r«“«r«“«j³‘¿a×´k­™«u´˜«n«•¹a¼•¼f´•­r«“«n«“¥g³“¼f´•­n¥“«v¢Œ«p‘¥b­™²b¥›­r«“«j¥”¥j¥”¥`ª–¥e —¥p™—™m”™a › [¦¡Œe —¥m³³o³’«b ›—e —¥i¿ÔoڈàkڎÃj¹–¹oÓ«l«’ËkڌÔkÔ¹j¹–¹r«“«g¹“Òg˒¿f¼”¥l—š†ju›kklœ—`ª–¥\Œž~mu˜ufrœkib•€_—œ”^ˆ €g—˜¹g¿“¿n«•¹l³“¹q«•™k«‘ÒhڎËn¿–¼pƑ³rš™p•™¥_´²]•™~pu›lgkžkg“–\Œž~]z›—aª—´h­’¿g¿’ËlÒ³p™—™g¥‘ÒeҏÒi¼”«r³Ž¥iŠ•€ib•€[•š”^Œ j³Ž–iŠ–kÎÚjڏ¥e€“ƒkÎÚkڌÔhґÃs³•£mƒ—ugkžk^——œ\Œ•~b•‘ulm“ƒj­Ôe˖—ju‘umšŽË^ÓÃd´‘›sŠ’umkšYsI”Y^r›zaj–~dŠœ{i€•Šh›¹g¥—rfkš`lb–u`ƒ–~lj‘IoF”=sI’Ier™€ZzqgkœnŒ‚eƒ“€jm“VtIˆ9u?“=o4Ve`–`fkš`fVŸSmF“Fx2,v2“?l`”It42s6VpY•Fu4ˆ4w4?rI“=sF’?q=”=o=–;s4Ž=t42t42s4Ž=q4ŽFjIVuFŒ6r=‰Hh`•be`•QoIIlHŠ`lb“bi`•Fs4Ž=o=‹`pH‰Fw?4u=“?hV—€jubf`–€hˎÚfҐËg¿’Ëgˑ­h–ސjŠutP}=z)„!|!!|!!|!!|!!|!!}€!|!!|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!{-!{-!{-!|!!x-„)|!!{!-{!-{!-|!!|!!{!-{!-}!‚,|!!{-!x-„)z!„){!-z)„!{-!{-!{!-}!‚,{!-{-!},‚!y-~-x-„){!-~,…,y-~-x)„-{,‚-{!-{,‚-{-‚,{-!{-‚,{-‚,x)„-}!‚,{-‚,y-~-{!-z)„!x-„){!-z!„){-!{!-|!!|!!z!„)|!!|!!~ƒ,{!†!{!†!{!†!|!!}€!~~~~~~~~~~~~~~~~~~v-~9t9~9q99v-~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9v9~-t9~9t9~9t9~9q99t9~9t9~9v-~9t9~9t9~9q99t9~9q99t9~9q99t9~9q99t9~9t9-t9~9q99q99v-~9t9-q99t9~9t9-q99o9„9q99q99t9-t9-v9~-q99o9„9t-9o9„9v-~9o9„9t9-o9„9t9-t9-q99t9-t9-q99q99t9-o9„9v-~9t9-t9-y-~-v9~-t-9y-~-v9~-y-~-y-~-v9~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!{-!y-~-{!-|!!{!-{!-|!!{-!|!!|!!{-!{!-}€!|!!|!!}€!|!!}€!}!€|!!~}!€~}!€}!€}!€~}!€~~~~~}€!~}!€}!€~}!€}!€}!€}!€}€!}€!~~~}!€}!€}!€}!€}!€|!!}€!|!!}€!}€!}€!|!!}€!|!!}€!}!€}!€|!!~|!!}€!}!€}!€|!!|!!}!€}!€|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!{-!y-~-{-‚,y-~-{,‚-{,‚-{-‚,{6-y96qV‡³kԌÚjڊÚhԎÒg¿“¿g´—¥a¥™ e –cu˜{jƒ™eƒ™~hƒ˜—i—Šg€—€h–g›g€™g——¥g¥——c—›—b—› e—›i¥“¿e¼“­a ™¥i­‘­d´‘›eƒ“€g€—€er˜`gabfkœre~šunŠ•™n«“¥e —¥a­šªe —¥o«’³n«“¥c´š´eª”¥n¥“«j¥”¥b¥›­a › n¥“«n«“¥m«’­b´™¥n¥“«j¹–¹m³³`­ ²e —¥n¥“«r«“«f­˜­`ª˜ j ’šn«“¥j¥•¹e¿–´b¦š­j¹–¹l¹“³c´š´b¥™—f¥—¹kԍÔk͑ËgÖ´b¥›­g¹“Òn܉ÚhڎËm³³l³“¹oÎÜrà‡ÜkԐÃqÖ¼n¹•«i¥“¿b˓Ãf´•­n«“¥r™˜†f—–­_ª•ª`œ•€j€˜ugkžkik˜Š_—Œ\ˆœƒm™”m™–¥b¥›­[²Ÿ”`~œ—k¹’ÔkڌÔeÓÃqÖ¼o³’«i¥“¿b˓Ãf¥•ÃtƖ¼n«“¥j™ƒ^ ™•]‹ž€gŠ‘ƒnšg¿’Ëcª˜k€—™kԌÚhڌÒfґ¿s³Œ³q«•™oš¹a´—ª^œ‘ƒj™ƒjk™bfŠ•¥WŒ¢‹eƒ‘¿hڌÒb˓ÃkÎÚl܎¿r¥Šk¥“Ã^ÓÃ_ª•ªj€˜usY”IjN¡V\{¢ŒW‹•b¿“Ãg¿’ËkˑÍnԐ«o™—ƒk³a´—ªd•—ugkžkjV–Vik—m`rœq_qœ k³‘­i­‘­e¥”lƒ“msY–YpI“bdr•jg`–VnV”Ie`˜r^•—¥cŸioY•bim”€gƒmlj‘IsI’In=”bhƒ“ƒbiœ`]z–ƒbiœ`g`–Vr=”2t)=sI’Iq;4iF•`lb“Fr=”2qF‰Vk`•=qFŽ4q9‰FrI“=u4ˆ4u4”=w4Ž4u4ˆ4u4”=oF”=u9ƒ4r=“InVŠHnIŽ=s4Ž=kV•bgj…^h`It9ˆIlb“bqV‰FvFŒ,t42s?’FoIIpI“bg¥‘Òjˑ³fª“³hڌÒaΛh”€pb‰Hy4„!|!!}!€|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!z!„)|!!|!!|!!z)„!|!!{!-|!!|!!z!„){-!y-~-|!!},‚!x)„-{!-|!!x)„-{!-}!‚,{!-}!‚,{!-{-!},‚!{-‚,x)„-{!-}!‚,{!-{,‚-{!-}!‚,x-„)y-~-{,‚-{!-{!-{,‡)y-~-x-„){-‚,y-~-z!„)x-„)},‚!x-„){-!},‚!{-!},‚!{-!x)„-}!‚,|!!z!„)|!!|!!|!!|!!}!€|!!}€!~}!€~~~~~~~~~~~~~~~~t9~9v-~9t9~9t9~9v9~-t9~9q99t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9v9~-t9~9t9~9q99t9~9t9~9t9~9t9~9q99t9~9t9~9q99t9~9t9~9v-~9q99q99q99t-9q99t9~9o9„9t-9q99v9~-q99q99v9~-o9„9q99o9„9q99t-9q99v-~9o9„9t9-q99v-~9o9„9q99t-9q99q99v9~-t9-t9-q99q99y-~-q99t-9v-~9t-9v-~9t-9y-~-t9-t-9y-~-v9~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{-!y-~-{-!{-!{!-{!-|!!{-!|!!|!!|!!|!!|!!|!!}€!|!!}€!~|!!~}!€~~~~~~~~~~~~~~}€!~~~}!€}!€}!€~}!€|!!~}!€}!€}!€}€!~}!€~}!€}!€}€!}!€}!€}!€|!!}€!}€!}!€|!!}€!|!!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!{!-{!-}!‚,}!‚,{!-{-‚,y-~-{-‚,y-~-w4ƒ-x4…Zm¥‘ÍnԋÜpЎËlÒ³l³’¥j™™—g›e€™rhr™ub€š~lu–Šg——ŠoŠ–{lƒ•Šl™™mƒ—ue€™—h™™ e—›g›g›iŠ—e —¥e¥— g——¥e¥”ªc›‘ c—•ƒb€š~cr•ƒdŠ˜~er™€g›j³‘Ëfґ¿e¥— ^«¥o«“ÃnԋÜn͐³g¥™­e¥”­eҏÒf¿™­`­ «g –³p͌Üq܉ÜgÖ´b­›¥f —Ãn܋ÔlÓÃd´œ­h­™ÃnԋÜmڌÍh˔¹d­Ÿ­kÎÚq܉ÜkԌÚgғ¹j­’Ãr܇àu܊ÐmڌÍg¹›­oÎÜyàƒæsà†ànڎÆq͑ÆoƐÔn܉ÚmڌÍiÓ¿v¼™¼h¹”ËeҏÒhÓ«r«“«j¥”¥q™•«^¼›²h¥˜™m¥–™mƒ—uhƒ˜—\—¢•g€—€g›m”™a´—Ã`­ŸŒ_~š¥hÑÒkԍÔbÓËkÔ¹l™™f¿‘ÒfҐËm­’«r«“«o™—ƒi—¥^²œ¥k—’šm¥–™l™™m™–¥[ ¢•a~ž­f˒ËiԐËp͌Üv܎Êr«ŽšfːÒf˒Ëe­– m™”pu›lju’–\•›Œ`~–ƒiŠ˜k^r›ze´–Ë_¥š~fr–­kԍÔfҐËk­‘³w½¼p¥™•kŠ“¥]¥•œ\”~hkšVkV•ber™€aŒ›€ar›~d´”ÒhҎÔjˑ³o³”™mƒ—ugm•—Rœ˜“]~”~fu“rgkš€l³’¥\•ž{er™€h¥“Ëa×´e›‘rtN“VsI’InI”V`rœqdk›¥f¥•Še•ƒgŠ‘ƒom“YsI’IoY•bdr•jg`–VpF“IlY›dԐÃa~™`oY•bhj’bkb•VqFŽ4t42k;—VmV•=jIVjVIq4ŽFrNŠmlj‡Hs=Ž4nI”VmF•;r=”2t4It42s2•2s4Ž=u4ˆ4w4Ž4s4Ž=mF“Fw4Ž4s=‰9gV–`hb•`kPˆVkV•bmf‡jlbŽIs4Ž=u4ˆ4mF“Fu=Š=sI’Igm•—cƒƒcr•ƒf¿‘Òd˓¼h›ŽŠjumv9!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!z)„!|!!|!!|!!|!!{!-|!!|!!|!!{-!{-!{-!z)„!z)„!{-!{-!{-!{-!{-!{-!{-!x-„){!-{!-}!‚,{!-x)„-{!-{!-x)„-},‚!x-„){-!y-~-{,‚-}!‚,{!-x-„){,‚-y-~-}!‚,y-~-{!-z!„){-‚,{!-{!-},‚!x-„)x-„){!-z!„)}!‚,|!!|!!{-!|!!|!!z)„!|!!~,ƒ|!!{!†!}!€}!€}!€}!€~~~~~~~~~~~~~~~t9~9t9~9v-~9t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9q99t9~9t9~9t9~9q99q99t9~9q99t9~9q99q99q99q99q99v9~-q99q99t9~9q99t-}Ct9-q99o9„9v-~9t9-q99q99v9~-q99t-9o9„9t-9t9-t9-q99o9„9q99t-9t-9q99v-~9q99q99q99o9„9v9~-q99q99v9~-q99t-9v9~-t-9y-~-q99y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{-!{-!{-!{-!{!-|!!{-!{-!{-!{!-|!!|!!}€!|!!~}!€}!€}!€}€!~|!!~}!€}!€~~~~~~~~~~~}€!~}€!}€!~}!€~~}!€~}!€}!€~}!€}!€}!€}!€|!!|!!|!!}€!|!!}€!|!!}!€}!€|!!}€!}€!|!!~}!€|!!}€!}€!|!!}€!}€!}€!}!€|!!}!€|!!|!!|!!|!!|!!|!!}!‚,|!!|!!{-!|!!{-!{-!{-!y-~-{-‚,{!-{-‚,v-~9{6-w9=tb“™p³‘Æo͏ÍkÔ¹d­Ÿ­f —ŠjŠ’kŠ“Škm‘Še”¥kŠ‘mi‘­l«–lƒ•Šk­‘³j¥’hƒ˜—h ™™e—›g›j™ƒj€˜ui€•Šl™™e—›g›b—› a › iŠ•€lm”ufŠ•¥f¥–¥m™–¥n¹”ÆuЊÜmàŒËi¹“­o±™ÃnԋÜyæƒào܎Ãi¿“ÃkÐÔoڈàiڎ¿j¹–¹oÎÜyàƒæyæƒàrЏÃp³˜±i¿Ôsà†ànڎÆlÓÃrƍÜyàƒærà‡ÜmԎÍrƒÆoԊàyæƒàn܉Úq܉Ü}à€×æ€æyàƒær܇àrà‡Üq܉Üsà†àq܉Üq͑ÆrƒÆm¹“ÍeҏÒeÒ³p¹˜¼n¹•«o«’³a¼•¼`ª–¥n«“¥n£›—k{š—a¥™ aŒ›€nŠ•™i—Šh™™ \Œž~[ˆ¢ h¹”Ëb˓Ãm͌Úl͐­f¡³kԌÚn܉ÚmÑÍm͑Ãr«ŽšiÒË^Ôªh ™™m•{mkšYnbu[ ¡™_Œ—iŠ•€b~š€m­’Æh³•—i€•¥m͌ÚhڌÒk¿‘ÍpЎËošŽŠe­“¼_ª•ª]žŸrgbalV¤Ucm—”U‹¦x[z˜ªi¹“­f­•´i³ÒkÓ¥j™ƒi¥“¿_Ô¼cœ•ƒlŠ•ƒol™bgV ~\Œž~Zzœ~e–“—i¥’­h ™™g¥——e€™rmƒ“³b˓Ãf´•s‚{nubhYž{Zzœ~^~™ªd´‘›i­‘­l³“¹k¥“Šmƒ—urx³a´—ª`•–`qFšFlI“Q_mš‹aržigkœr™ši‘om“YvN‹IpI“FpI“b`j—qe`–`ik—mg€‘–lÒ³tfˆIsF’?hb’jhj’blF•=p4•FjF•€d€ŸSpF“IkV•FkF•Vlb“blj‘It4Im`ŠVqFŽ4u4ˆ4s?’Fp9‹;w4Ž4vI‹NnIŽ=x2,s4Ž=u4ˆ4v)‰4s=Ž4lI”`i`ˆPsI’ImV‡jhj’bh`Iu4ˆ4x6HqVNq=”=u=Š=lFŽIsI’IlF“bd¥•¿h¿’­d¥‘–j€‰ktHƒ4}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!{!-|!!|!!{-!x-„){!-|!!{!-|!!{-!{!-|!!x)„-z!„){-!z)„!{,‡){-!},‚!x-„){-‚,x)„-{-!{-!~,…,x)„-{!-{!-}!‚,{-‚,x)„-{!-{,‚-y-~-{,‚-}!‚,x)„-{,‚-{,‚-x)„-{,‚-{,‡){-!},‚!x-„){-!z!„)x-„)x)„-|!!{!-|!!z)„!{!-|!!|!!|!!{!†!|!!|!!}!€}!€~~~~~~~~~~~~~~~~~t9~9v-~9v9~-t9~9t9~9t9~9t9~9t9~9rC|9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9o9Cq99t9~9t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9q99q99t9-q99t9-q99o9„9q99o9„9q99q99t9-q99o9„9q99q99t9-o9„9v9~-q99t-9t9-o9„9o9„9t9-o9„9t9-q99q99v9~-o9„9t-9v9~-q99q99v9~-v9~-v9~-v9~-y-~-v-~9t-9y-~-t9-y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{!-{!-{!-{!-|!!|!!{-!|!!|!!|!!}!€|!!|!!}€!}€!~}€!~}€!}€!}€!~}!€}!€~~~~~~~~~~}€!~}€!}!€|!!}€!}!€}€!}€!}€!}€!}€!}€!}€!}€!~}!€}!€}!€|!!}€!}!€|!!|!!}!€}!€|!!~}!€|!!}€!}€!|!!}!€|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!|!!{-‚,|!!},‚!{,‚-},‚!y-~-{,‚-{-6w-ƒ4{-6xZ†ršŽ«o±™ÃkÔ¹m«’­l³’¥o™—ƒh–Ž­j¥’ku•­l¹“³k¥“Šg¿“¿h¿’­jŠ’­k͑Ël³’¥kŠ“¥b­ g™€f–—j™ƒj€—ƒkŠ“Šmƒ–ƒg€—€hu™rkƒ“e•ƒe€™rlb’md›‘´e¼“­o«’³qƑÍq܉ÜmڌÍkÔ¹mÑÍoԊàsà†àmڌÍoƐÔrЊÚsà†àkԐÃmÑÍnډÜyàƒærà‡ÜoԐÆlÓÃm͎Ôrà‡ÜiԐËqƑÍp͌Üsà†àn܉Úm͎ÔyЋÐnډÜoàˆÚkԍÔyЋÐr܇àrà‡Ün܉Út͍Ðu܊ÐtЍÍhԎÒfҐËr¹³l¹“³o«’³a¼•¼b´™¥r«“«r«ŽšiŠ–^ ž«e—›g›j™ƒe€™—[ ¡™e€™—j³‘¿i¿“ÃoÓ«a › m™–¥hˎÚkڌÔm͎ÔnڎÆl«“¿iːÔfґ¿l³’Ãq¼•³m¥–™f­•´\«œ•hƒ“ƒi€•bci ke€™—^ Œc”š¹iÓ¿f´•­m¹“Ís͔¼m¥–™f¿‘Ò^Ôªj¥”¥r™˜†pu›lcŠ™”W”¡‹`~“rjV–Vca rb´—¼`—œqaxž¥fːÒhڎËn³ÍpƑ³s£˜ƒm{•­]²›ªa”žknYžUsI’IgmƒZzqZx£Œg¿“¿fҐËi­’¥k³‘­q™˜{gm•—a´—ª^œ—rjk™bkb•Ver™€]~q^{ªd¹•Ãb˓Ão¥Žšp™—™mƒ—ufb— [œ˜~a~™`mb›bkm‘Ši¥’­`Œš`h`•bjmfƒlj‘IsI’IsI’IiF•`_i˜icq—jŠ’k‡ŠŠjumwI‰=s=Ž4hVške`–`lb“bjažYf`škmmŠ9t24q4ŽFjV–Vc_˜Vg`–VkF•Vg`–VqFŽ4n=ŽIg`–VoF”=t9ˆIjV“mkV—;u4ˆ4pF‰Hs=Ž4s2•2u4ˆ4pF“IoF”=u4ˆ4h`•bhb•`mP‡Ft4Ih`“mkb‰`u4ˆ4sFŠ=pI“Fq=”=r=‹Vim–d›Œƒgu‰›b¿“Ãg›‰uv9!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!z)„!{-!z)„!|!!|!!|!!x-„)|!!x-„)|!!{-!x)„-z!„){-!{!-},‚!{-!x-„){-!},‚!{-!{-!{,‚-{!-{!-{!-{-‚,x)„-{,‚-{!-{!-{)‡,y-~-{,‡)y-~-{-!y-~-x-„){!-{,‚-{,‚-{!-y-~-{)‡,{-!{,‚-},‚!},‚!{!-|!!x-„){!-|!!z)„!z!„)|!!|!!|!!}€!}!€}!€|!!~}!€~~~~~~~~~~~~~~~t9~9q99t9~9t9~9t9~9q99t9~9t9~9t9~9q99t9~9q99q99t9~9t9~9t9~9v-~9t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9q99t9~9q99t9~9q99q99t9~9q99q99q99t9-q99q99t9-q99q99o9„9q99q99o9„9q99o9„9t-9q99q99o9„9o9„9o9„9o9„9t9-o9„9o9„9q99q99o9„9q99q99q99q99t9-v9~-v9~-q99q99t9-q99v9~-y-~-t9-v-~9y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-{-!{-!{-!y-~-|!!{-!{!-|!!{-!{-!|!!|!!|!!|!!}!€|!!}€!|!!}€!~}!€}!€}!€~~~~~}!€~~~~~~}€!~}!€}!€}€!~~}!€}€!}€!}€!~}!€}!€}!€}!€}!€}!€}!€|!!}€!}€!}€!|!!~}!€}!€|!!|!!}€!|!!|!!}€!|!!}!€}!€|!!}!€}!€|!!~},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,}!‚,|!!{!-{!-{-!y-~-{,‚-{-6y-~-{6-q=…un¥“«k«™­k¹”Ãh¿’­k¥“ÃkÔ¹g›Œd¿”¼l³’¥k³b˓Ãi­’¥j³‘Ëjˑ³mšŽ¿kԍÔi¿“¥e¥”­g­™¥h€”i­’¥mš’i€•¥j¥’ju›kdr›rfrœkbk¡{_€šzlb“bob“€f¥”¼b¼—´m­’«n¹”Æm͎Ôg˒¿j¹–¹r±™Æo͏ÍeҏÒi˒Ãs¼”Ím͎ÔhԎÒg˒¿tÓÊuЊÜn܉ÚhԎÒkÔ¹oƓÃkƑÒeҏÒoÓÆrƒÆs¼”ÍkԍÔg˒¿oÓÆrƒÆt½‹ÍeҏÒi¿”¹l³“¹v½ÆiÒËbÓ¿o³’«sš‰šl™”­b¼—´a´—ªm™–¥p™—™m†’–b­›¥d¥™o“‘nš†gŠ——[”žŒa€—•i¥’­j¥”¥h´•³b­ i™¹oԊàjڊÚgғ¹r«“«n¥“«f¿‘ÒaґÃs³Œ³w¼ªn¥“«f¹–¼`¼•ªo¥Žšl™™lu”m`—œU™¦‹a”˜¿b´™¥h›Ž¥g´–Ãc´š—g€•¿kԌÚfҐËmÑÍoƓÃmš’f¥”¼Z«šœdŒ›ƒlŠ•ƒg€škb€š~Wz¢x[Œ ²c¥›i­‘­g¿’Ël­”™e›—mÑÍaґÃi­‘­p¥™•hu™rgkœZœ˜”]~˜{hr™ujŠ’d¿”¼bœ~er™€h¥“ËcҒ¼i­‘­m¥–™hƒ˜rmb™mZ••œ`”“›f›€e€“ƒb—› `Œrjkšƒi–Ãd˓¼i‘oŠ–{hkšVhU˜u]~q\qŸŒg–‹–j¥”¥nšob•YnV–YnYueƒujk˜FsI’IsI”YeuŸ{^q idi–ui‘eƒupb“Iu?“=q=”=gV–`b`œii€•Šfu“rej“`s=Ž4w4Ž4t24jV–VeF•QmF“FgQ•VjVIs4Ž=sF‹Nlb“bnIŽ=nI”VoVŠVpIˆ4t4ImVŠ`sHŠ2z4‡,q4ŽFqFŽ4u4ˆ4t24jIVkPˆVqFŽ4lIŽbhmjkb•Vr=“IoN`qV‰Fu=Š=sF’?jV“mkb•VkF’jڊÚcҒ¼mƒŒ){-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!{-!|!!|!!|!!|!!{!-|!!z)„!{-!z)„!{-!|!!{-!{-!|!!},‚!~,…,},‚!{!-}!‚,}!‚,{!-x)„-{!-z)„!{-!x)„-{!-{,‡){-!{-‚,{!-x-„){-‚,y-~-{,‡)y-~-{,‡)y-~-{-!{-‚,y-~-{!-{!-{,‡)x-„){-!{-‚,x)„-{!-x-„){-!x)„-|!!|!!x)„-z!„)|!!|!!z)„!|!!|!!}!€{!†!}!€}!€~}!€~~~~~~~~~~~~~~v-~9t9~9t9~9v9~-t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9q99t9~9t9~9q99t9~9v-~9q99v-~9t9~9q99t-9t9~9q99q99q99q99o9„9q99q99o9„9q99q99o9„9q99o9„9t9-t9-q99t-9t9-q99o9„9o9„9q99q99q99q99q99o9„9q99t9~9o9„9t9~9q99v-~9t9~9t9~9q99v-~9t9-v-~9y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{!-{!-{!-{!-{!-|!!|!!|!!|!!|!!|!!}€!}!€}!€}!€}!€}!€}!€}€!}€!~|!!~}€!~~~~~~}!€~}€!~~}!€}€!|!!}€!}!€}!€}!€|!!~|!!~}!€|!!}€!|!!}€!}€!|!!}€!}€!}€!|!!}€!}€!}!€|!!}€!}€!}!€}!€|!!|!!|!!}€!|!!|!!|!!}€!|!!|!!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!{!-|!!{,‚-{,‚-{-‚,y-~-{-‚,t9~9vbŒšl³“¹i¹“­iÒËkÔ¹l³Ôg˒¿o¥Žšg¿’Ëh¿’­l¥’³f˒Ëi­’¥f¼”Ãe˖´i¥“¿iːÔdÓ¥f­™¿b´™¥i‘­g¿“¿eª”Šp‹ªhª–™lu–bg€—€b{¡kfkœrfrœkjb™ko{–Ši¥’­b²™­j¥”¥n«“¥e­“¼e¼“­i­’¥n«“¥h­’¿a¼•¼f­˜­n¥“«qªŒÃ_Ô¼k´–«j¹–¹r³ŽÃb˓Ãe¿–´r«“«r«“«l³“¹d¿”¼m³³p¼˜¹l³“¹b¿“Ãf´•­n¥š±r«“«l³“¹c´š´eª”¥u™’ŠkŠ“Šg¥—´a¥˜¥j’Šjƒ—€m{•a › b•™nš†k“ƒk€—™^ Ÿ¦b—› o«’³i¹“­j¿‘³g¥™­j¥•¹eҏÒeҏÒg˒¿n¹›±j¥•¹jڊÚhڌÒkÔ¹n«“¥l™™g³“¼c´š´h–ސs†™{o{˜ƒb—› Yž¡”e~™ƒmu˜uju˜€g¥——]~¡{aŒ™¿hҌÚf˒ËlÓÃn¹•«q™•«b˓Ãb˓Ãi­’¥u™’Špƒšld€™ WœŸ•eƒ–lƒ“mh€”]ªšŒV¨xg€•¿iːÔeҏÒm¿’Æn¹•«r™˜†f¥”¼`ª–¥hƒ”ulu–bh`“mi¥’­X”¤ˆ_~œ h¹”ËkԍÔkԍÔmƒ­n™•Šo™”³`¼•ªb¥“ƒju›knY–Vdb™q[”ž”g—’ÚkڎÃh¿’­kŠ“¥q«•™pƒšlku–¥^´–œg€šknlšVnUžYi–¥^~Ÿifiui‘­h¿’­pxlu–bwY”MmI˜kdr›rh`•bkmmlu–Šf —Šim—klb“bju˜€a~–jjVImF“FmI˜k^~Ÿig`–Vjb™kfu“rhr—bu=“?s=Ž4m=•Vaa¢XmF•;s4Ž=kF•VmF•;u4ˆ4lI”`hj’blIŽFlHŠ`kV•FqFŽ4lI”`hj’boV4q4ŽFqVNoV4u4ˆ4t24m;•FqFŽ4s=‰9oVŠVej“`h`IpIƒVlb’mlbŽIqFŽ4w6Œ=r4†9v?’Iy=‡bm͎Ôd˓¼bœIx-„)|!!}€!|!!|!!|!!|!!{-!|!!{€-|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-|!!{!-|!!|!!{-!|!!{-!z!„){!-|!!{-‚,{!-{!-|!!|!!{-!{-!{-‚,|!!{-!},‚!x-„){-‚,{-!{-!{,‚-{!-}!‚,{,‚-{,‚-}!‚,x-„){-‚,{!-{!-{-‚,x)„-{,‚-{!-y-~-x-„)y-~-x)„-{-‚,x)„-}!‚,{-!x)„-{!-z!„){!-z)„!z)„!|!!|!!|!!|!!|!!}!€|!!|!!~}€!}€!~~~~~~~~~~~~~~~q99t9~9t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9t9~9q99v9~-t9~9t9~9q99t9~9q99t9~9q99t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9q99v9~-t9~9t9~9q99q99q99v-~9q99o9„9o9„9t9-oC9o9„9q99o9„9o9„9q99q99q99o9„9o9„9o9„9o9„9o9„9q99o9„9q99o9„9q99q99q99o9„9q99q99q99t9~9q99v-~9v-~9v-~9q99v-~9y-~-t9-y-~-v9~-t9-t9-y-~-y-~-y-~-y-~-y-~-y-~-|!!y-~-{!-{!-|!!{!-|!!{!-{!-|!!|!!|!!|!!|!!}€!}!€}!€}!€}€!}€!}!€}€!}€!~~~~~~~~~~}!€}!€~|!!}€!~}!€}!€~|!!~}!€}€!~}!€|!!}€!}€!}€!}€!~|!!}€!|!!}€!}!€|!!}!€|!!}€!}€!|!!}€!|!!}!€|!!}!€|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!{!-|!!},‚!{-!}!‚,{-!{,‚-{!-}!‚,y-~-{6-y69u=~bpš³kˑÍkÔ¹fːÒg˒¿hÑÒiԐËj¥”¥d¼”¿c¿”ªf¥”¼i¹”¿`ª–¥g¥—´i¹“­cª”¿b¿“Ãg´—¥e´–¿c¿”ªi›Œ³bÓ¿i­‘e¥”­i¥–fu“raŒ›€e€™rfkœrdr›rku”i­’¥a › a ™¥i­“¹n¹•«f¥–¥a¥™ j™™—o¥Žše¥”ª]²›ªh ™™p™—™e –­a´—ªa¥™ xšŽ­r«“«b´—¼b´™¥ošŽ¥q«•™m™–¥d´œ­j¥”¥r«“«ošŽ¥d­Ÿ­a¥™ r¥¢rš™j¥”¥a¥˜¥e —¥k­™«h™™ e¥— b ›—f­˜­h´•³i­‘­b ›—_Œ—g­‘Ëf˒Ëi¿”¹g¹˜´j¥•¹kԌÚjڊÚkԐÃlÒ³o«“ÃjڊÚhڌÒgғ¹o³’«l¥’³b¿“Ã_Ô¼k­‘³n¹•«o™—ƒg¥—´b¥™—h~›{jƒškjb™ka€›Œ\Œ¢{`ŒŸ­i¹”¿e¿–´lÓÃm¹—™lŠ’³kԌÚfҐËj¿‘³l³’¥h™™ a´—ª]¥•œqŠŽxjƒškoY“mf™—•\Œž~dÎÚh¿’­g¿“¿f¿™­m”™i —«fːÒaґÃr³‹ªm«—lƒ•be€™—W•‹d~˜Šb€›qjr™™g˒¿b ›rfq›™i¿ŽÚhڌÒiÒËv³Ž«pŠ‘€gƒ˜ Zœ˜”Z‡ŸkiVžUhVškf¥”¼_´œŒg€•ËkԍÔd˓¼l¥’³r³Ž¥oŠ–{hr—ŠZ¥ž‹bi’`fkœrm€šb´—¼lŠ“bmVœVo{•³c¼Ž›i—Šo{–btM’FlI”`arži]iœ•b¥™—i‘lŠ•ƒom“YvN‹IlY“jbj™iiu¥dƒjeuƒd••bnV”Iw?ˆ9lb’mej“`oF”=mF“FkY™—aƒ–Xp;–2v)‰4mF“Fv4‰)t24qF‰Vpb‰HpI“FgV–`kPˆVq4ŽFoVŠVhj’bmP‰;w=Vh`“moP‡=t24z,‡4s=Ž4t42x,=gV–`i`ˆPlIŽFe`–`gj…^h`Is=Ž4qF‰9q=”=w=‰Ir=“Ii‘­f‡ˆƒfƒh–†‡m^9|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!|!!|!!|!!|!!z)„!|!!{-!|!!{-!|!!{-!{!-z!„)|!!x)„-z!„)y-~-}!‚,z!„)}!‚,|!!{-!},‚!{-!},‚!{-!{-‚,x)„-|!!{-!y-~-{!-{,‚-x-„){-‚,{-‚,y-~-{,‚-{!-y-~-y-~-{,‡){-‚,x)„-{,‚-}!‚,{!-{,‚-x)„-{,‚-},‚!z)„!},‚!x-„){!-z)„!z!„)|!!z)„!|!!{!†!|!!}!€}!€{!†!}!€~~~~~~~~~~~~~~~~t9~9v9~-t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9q99t9~9t9~9t9~9t9~9t9~9r9|Ct9~9t9~9q99t9~9t9~9q99t9~9q99q99t9~9q99q99v-~9o9„9q99q99q99q99t-9q99o9„9q99q99q99o9„9q99q99o9„9q99q99q99o9„9q99o9„9q99o9„9q99o9„9q99q99t9~9q99t9~9q99q99q99q99t9~9t9~9v9~-t9~9v-~9y-~-v9~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{!-{!-{!-{-!{!-|!!|!!|!!|!!}!€}!€|!!|!!}€!}!€|!!~}!€~}!€~}!€}€!~~~}€!~~~}!€~~|!!~}!€}€!~}!€|!!~}€!}€!~|!!}€!}€!}!€}!€}!€|!!}€!~}€!}€!}€!}€!}€!|!!}€!}€!|!!}!€|!!}!€}!€}!€|!!|!!}€!|!!}€!|!!|!!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!{!-}!‚,{!-{,‚-{-‚,y-~-v-~Hl‡ˆ³i¿ÔnډÜf˒ËfːÒfґ¿iÒËg˒¿d¥‘–i­‘­e´’–e –­d­“ªa¥™ a ™¥e­”¥f­˜­d­Ÿ­a¥™ f­•´b´™¥g¥—´g³“¼e –f¥–¥h­Ž–j€˜ua€›Œ\Œž~dr›rg€™j­’Ãfґ¿k«™­g¥™­kÎÚn܋Ôd´œ­b ›—e ˜¹k͑Ëf¿™­b¥›­e —¥lÓÃi³˜­`­ «a › l³’ÃlÒ³g¥™­e­– q™•«oÓÆm³³b­ l¥’³l¹“³m­’«f­˜­e —¥kÐÔmԎÍkÔ¹e¥— f­™¿kԌÚiԐËf¿™­c¥œ¦g¹“Òrà‡Ün܋ÔlÒ³g´˜¹hˎÚoàˆÚkڌÔtЍÍiÒËkԌÚn܉Úi˒ÃoƓÃl«“¿b˓Ãb˓Ãe¼“­m¥–™l™™b´—¼`ª–¥e —¥o³”™lŠ•ƒb—› ]—¢ˆdŒ˜³l³’¥i¥’­e¥— g¥——h–­kԌÚiԐËt͍Ðtܑ¼q£—¥eÓÃb¼š­k¥›•hƒ˜rml›€Y•Ÿ™S‹¤‹b”—­g™€h€”­iڎ¿`ƒ—qf¼ÚjڊÚhґÃlÓÃlÒ³n«“¥e³’Ãa´—ªh—˜ƒlŠ•ƒju›kar›~[~¢xb~˜¿i¹“­g¼“³kˑÍi³˜­mƒ–ƒmšŽ¿b˓Ãj¥”¥lŠ–ukaœIfU rZ~œzZzœ~i€•Še –­g¿“¿hחkm‘Šp¢Œ¿`¼•ªm™–¥q™˜{frœkjb™kZ~œzdr›—j¥”¥g¿“¿j¥”¥l¥•ƒou™{kƒ“­]ª–•b~”kjm“VnI”Vhk”ufrœki`—ujŠ’h‡Œ€jubsY”Is?’FdVœibiœ`a•”Ël³’Šk‡‹ƒiuVvN‹Iu?“=gV–`biœ`jbujk™bcr•ƒhr—Fr=”2s2•2oF”=p;–2{)‡,kF•VmV•=s=‰9nI”VkV•Fs4Ž=lI”`h`•bqNVgV“jhmjm`4w4Ž4s4Ž=sI“2t42u4ˆ4lI“QpI•;q9‰FrNŒbdjjh`Ir=“IpV‰brV‹=u=“?s4Ž=tIˆVnV”IhV‘–hԎÒ]Օv9!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!z!„)|!!|!!z)„!{!-{!-|!!{-!{!-z)„!{-!{-!{!-{!-{!-{!-}!‚,{-!y-~-},‚!x-„){-!y-~-z!„){!-{!-}!‚,{!-{,‡){-!{-!{,‚-{!-},‚!y-~-}!‚,{-‚,x-„)x-„)y-~-y-~-{-‚,{-‚,y-~-{,‚-{!-}!‚,{!-z)„!y-~-{!-|!!},‚!{!-}!‚,|!!|!!|!!|!!{!†!|!!}€!}!€}€!~}!€~~~~~~~~~~~~~~t9~9t9~9t9~9t9~9t9~9t9~9t9~9rC|9t9~9oC9t9~9t9~9t9~9q99t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9q99r9|Ct9~9t9~9t9~9q99q99t9~9t9~9q99t9~9q99q99v-~9q99o9„9t-9q99o9„9o9„9o9„9o9Co9„9o9„9q99o9„9t9-o9„9t9-q99o9„9v-~9o9„9o9„9q99q99o9Co9„9q99q99q99t9~9q99q99q99t9~9t9~9t9~9q99v9~-q99v-~9v-~9y-~-t9-y-~-v9~-t-9y-~-y-~-y-~-y-~-{!-y-~-{-!{-!{-!{-!{!-{!-{!-|!!|!!{-€|!!|!!}€!}€!}€!}€!}!€}!€}!€}!€}€!~}€!~~}!€~~~~}!€}€!~}!€~}€!}€!}!€}!€}!€}!€|!!}!€|!!}€!}!€|!!~}!€|!!}€!}!€|!!}€!|!!|!!}!€|!!}!€|!!}!€|!!}€!|!!|!!|!!|!!|!!}€!|!!|!!}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!{-!{-!},‚!{-!{-!{-!y-~-y-~-y-~-{-6mVƒ›iːÔkԌÚn܉ÚhґÃg˒¿d˓¼e´–¿k³‘­f›’a › e—›b—› a¥™ j—™™j—™™a¡¢—b—› b ›—a”i¥’­a¥™ e —¥e­”¥b•™i–¥b¥™—g€‘ufŠ•¥e –jƒ“™l¥’³kÎÚhڌÒi¿”¹n¹”Ær܇àrà‡Üh˔¹g´˜¹n¹Üq܉Üg˒¿j¹–¹oÎÜq܉Üg˒¿j¹–¹i´”Ír܇àl܍Ëg¹˜´g­™¥n«Ôrà‡Ül܍Ëi¿”¹kÐÔr܇àmԎÍi¿”¹k¹”Ãoڈàsà†àkԐÃqÖ¼kÐÔsà†àn܉Úm͑Ãj¹–¹kÐÔsà†àsà†àtЍÍu͑ÊhҎÔeҏÒmԎÍo͏ÍnƔ¹f˒Ë^ÓÃl¹“³r¹³m­’«c´š´]ª›²]ª–•jƒ—€ou™{c¥›«Zœ™ŒfŒ›™e—›e›—k± ­\Œ¢{p™“ÍkԍÔfґ¿l¹“³n«“¥o†–¥hÑÒfґ¿r³¹r³Ž¥h–e¥”ªZœ˜”fu“rek¢ahV—€\Œž~[x¢~e´–Ëg¿“¿g¿“¿n܋Ôi¥—n™•ÃhԎÒcҒ¼m­’«q«•™mƒ—ud› W•‹dr›rgkžkjk›u^ Œ]~qe{›³kԍÔaґÃm¿’ÆrƓ«n™˜ud€™ a­’œeƒ–knY–VkFœUbk¡{Z{¦x[x¢~j­’ÃhڌÒl³“¹n¹•«q™˜{h€”­]¥•œj€˜uju›knY–VakžŒ]~qfiœƒmšŽ¿f˒Ëq–­q«•™oŠ–{hƒ˜—`ƒ–~`q—jim”€kŠ“ŠiŠ—lu–blb“bmY—€a~›rlj‘Is?’FkF•V`rœq_i˜iir•³i­‘cƒƒpb“IrI“=o=”F`Vgb`œibƒ“¥a””uhu”kpI“Fu4ˆ4t42fF˜XiUžVl;˜;o=”Ft42t)=pF“Ir9†4q=”=kF•VjV–VjIVmV‡jej“`pH‰Fq4ŽFpH‰brH‰=t42s4Ž=q99u=‰-s4“FgV–`kb•VkIˆIoV‹fi€”ml^†Fu4ˆ4u4ˆ4s4Ž=w=‰IoI‘mm͌Úd˓¼njŒ)|!!|!!{-!|!!|!!{-!|!!|!!{!-|!!|!!|!!{-!{-!{!-}€!{!-|!!|!!|!!{-!{!-|!!{-!{-!{-!|!!|!!z)„!z)„!|!!{!-|!!x)„-z!„)}!‚,}!‚,{!-z)„!{!-z!„){-!},‚!},‚!},‚!{-‚,x-„){-!y-~-x)„-{!-{,‚-{,‚-{,‚-y-~-y-~-x)„-{,‚-{,‚-{,‚-{-!{-‚,{)‡,{-!y-~-x)„-{!-{,‚-{,‡){-!{,‚-z)„!},‚!x-„)z)„!{-!|!!{!-|!!z!„)|!!|!!{!†!|!!}€!~}!€~~~~~~~~~~~~~~~v9~-t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9rC|9q99t9~9t9~9t9~9t9~9q99t9~9q99t9~9t9~9t9~9rC|9t9~9t9~9t9~9q99t9~9t9~9q99q99t9~9o9„9t9~9q99q99q99t9~9q99o9„9q99q99q99o9„9q99q99o9„9q99o9„9q99o9„9o9„9q99o9„9q99q99q99o9„9q99t9~9q99q99q99q99q99r9|Cr9|Cq99rC|9q99t9~9t9~9t-9v9~-v9~-t-9y-~-v9~-y-~-y-~-t-9y-~-y-~-y-~-y-~-y-~-{!-{-!{!-{!-{!-|!!|!!{-!|!!}!€|!!}!€|!!|!!|!!}€!}€!~}!€~}!€~}!€}€!~~}€!~~~~~~}!€}!€}!€}!€}!€}€!|!!|!!}€!}€!~|!!}€!~|!!}€!~|!!}€!}€!|!!}!€}!€|!!|!!}€!}€!}€!}!€}!€~,ƒ~|!!|!!}€!|!!}!€}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-{!-}!‚,{-‚,{-6s-|ki³ÒnډÜn܉ÚmԎÍfґ¿d¿”¼e¼“­e¥”ªe¥— aŒi—Še•ƒiŠ—h–gŠ——h ™™j™™—g™€j€˜uer™€e›—g›iŠ—h–b~š€b—› b—”ju‘uj’¥`ª–¥n¥“«t«–¼m͎ÔmڌÍi¿“ÃmÑÍnډÜoàˆÚm͑Ãq͑Æm͌Úsà†àkԐÃqƑÍq܉Üsà†àiԐËoÓÆp͌ÜyàƒæoàŠÔkÔ¹lÓÃp͌Üsà†àp܌Ít͍Ðr܇àyæƒàn܉Úo͏ÍqƑÍq܉Ün܉ÚkˑÍp͌ÜtЍÍjڊÚkڌÔo͏ÍrƒÆqƑÍhԎÒhґÃoƓÃr½¹e³’Ãa×´j¿‘³o³’«o¥Žš_ª•ª_ª•ªe¥”l™™iŠ—\ Ÿž\•œ«b ›—g€—€gƒ‘¥f¹—¥ZŒ£xh–­h­’¿j¹–¹g¿“¿m¹—™k¥“ÃkԍÔhڎËk¹”Ãt¼–«j¥”¥f¹–¼e­”¥k“ƒmƒ—uju›ka€›”Zˆ£~cŒ™¥d ›e–•­c¥™Œ]{¥{h¥“ËhҎÔg˒¿lÓÃq´™¥nŠ•™d¿”¼`²”›e€™rkk biUžV]r¢ˆWz¢xbŒ˜­d ›Z”˜œi¥’­l™™h€”hÑÒd˓¼j¥”¥o™—ƒom“YlV—u\•›Œdr›rbj™ig€—€d› _—œ”b~š€g­‘ËeҏÒi¼”«l­”™jƒškpb•b˜Œcr”kh`•bju˜€f”›™gœkkb kr{–«cÒ­j’¥h—˜ƒlu–be`˜r`rœq\zš¥i¥“¿d¿”¼j–’ulu–bsY”IpI“ba~–jbiœ`b`œiim”€h”€biœ`jbugu‘€jumnV”IsF’?lF’m]—›zcaž`lm“ƒe€™rjumvHˆ?u?“=q?”Vc`žadQ—ri`•FmF•;w)‰)u)2s4Ž=x2,s4Ž=mF“FmF“Fo9ŠVlb“bg`–VrI†NkV•bhmjj`9q4ŽFr=‹VnV–2z,‡4y4†6kF•VnF‹9u=Š=g`uiu‚^i`•Fs4Ž=u6ŒFpH‰FsI’Iw=‰Ig­‘Ëc¼Ž›f~ƒCq99z)„!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!z!„){!-|!!|!!x-„){-!x)„-z!„){!-{!-{!-z!„){!-{-!},‚!{-!{-!{-!{-‚,{-!{-!{,‚-},‚!{,‚-{-!{-‚,z!„)y-~-{!-}!‚,{-‚,x-„){-‚,y-~-{,‚-{,‚-y-~-y-~-{-!{,‚-{-!x-„){-!y-~-z)„!},‚!x-„)}!‚,{!-|!!{-!z)„!z)„!}!€},‚!|!!|!!}!€|!!}€!}€!~~~~~~~~~~~~~~~q99t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9q99q99t9~9q99t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9q99q99q99v-~9o9„9o9„9q99q99o9„9q99t9-o9„9q99q99o9„9q99q99q99o9„9q99q99o9„9q99o9„9q99q99o9„9o9Cq99r9|Co9„9q99q99o9„9t9~9q99q99t9~9q99t9~9t-9t9~9y-~-v-~9y-~-v9~-t-9y-~-t-9y-~-y-~-{!-y-~-{!-{-!{-!{-!{-!{!-|!!|!!|!!{-€{-€|!!|!!}!€|!!|!!}!€}!€}!€~}!€}€!~~~~~~~~}€!}€!}€!}€!}€!}€!}€!}€!|!!}€!~}!€|!!}€!}€!}€!|!!}€!|!!|!!}€!}!€|!!~|!!}!€|!!}€!|!!}€!|!!|!!}!€|!!|!!}€!}€!|!!}€!}€!|!!|!!}€!}!€}!€},‚!|!!|!!|!!|!!|!!{!-|!!|!!{-!{-!},‚!y-~-y-~-{,‚-y-~-ob†³kԌÚq܉ÜhԎÒj¹–¹f­•´k³‘­e¥— c—›—g™€b~š€g€—€i€•Ši—Šg€™h ™™h ™™j—™™h”€fkœrer™€mƒ–ƒe€™rfrœkeuš~b€š~a€›Œi€”mjk›ue –­i­’¥j¥”¥o«’³h¹”Ëg˒¿q¹š´n¹”ÆfːÒf˒Ëm¿’ÆuʑÍm͎ÔhڌÒi˒ÃmÑÍq܉Ün܉Úi˒ÃwʓÆt͍Ðr܇àmڌÍoÓÆwƓÊm͌ÚhԎÒlÓÃrƒÆuЊÜjڊÚiԐËq͑ÆrƒÆo͏Íb˓Ãl³“¹s¼”ÍoƓÃlƒË^ÓÃl³“¹q¼•³l³“¹d¿”¼i­‘­j¥”¥s™‘‘b¥›­^¥«`œ—p†—ƒml›€c—›—Y™£Œ_Œ—j’Šg€™_—Œ^€Ÿ™d—­d¼”¿kÎÚk͑¿j™™—g—˜¹hҌÚg˒¿wƓÊnƔ¹r«“«g¿“¿b¼—´n«•¹n±š¥n™•Šc¥›«W•‹dr›rmlžkgkš€_—ŒZ~£ˆe­˜Ëf˒ËiÓ¿gÖ´p™—™o™”³f˒Ëa×´o³’«o¥–†o{™ua › Z•™zdiœVaa¢Xlb“Šd ›]{¢q_Œœ´g˒¿g¼“³hª”«i¥—mƒ—uf­•´`ª–¥hƒ”uiržbnU›Ih€”Wz¢x_~š¥e –­a¼•¼r¥½rƓ«r™˜†g¥—´`¼•ªi›ƒpu—YnY–VjVŸr]~¡{dr›—i¥“¿e¼“­h–ސm™”mƒ–ƒhƒ˜—\ª”œd~–mqb’ViUžVoƒ—™e€™rhk—h¥“Ëd˓¼n–Šxju›ksY”Im=•Vck ii€•¥i‘i‘i€”mob•YvN‹IkY™r]q–ii`•FnI”Vjb’h­”€l`–YkV•FjV“mh`•bkV•FkFœUf`–€c~™Vo=”FnI”VmF“Fp;–2t42w)‰)u)2r2”=nIŽ=u4ˆ4o=”FoIIqFŽ4r=•Ynbˆbhb’jkV•FqVNi`ˆPqFŽ4v2”4t42r4†9z4‡,q4ŽFtYŠVe`–`lIŽFsIˆHm`ŠVlbŽIv?’Iq=”=nf…–gu`fr–­^Ôªnk9{!†!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{€-|!!|!!{-!|!!|!!{!-|!!|!!{-!|!!{-!{!-{!-|!!{!-|!!{!-|!!},‚!z!„){-!},‚!},‚!{-!~,…,z!„)y-~-|!!{,‡){-‚,z!„){!-z!„)~,…,y-~-y-~-}!‚,~,…,y-~-{,‚-y-~-y-~-{)‡,y-~-{-‚,{!-~,…,{-‚,x-„)x-„){-‚,y-~-{)‡,x)„-{-!z!„){-!z!„)x-„)|!!}!‚,|!!z)„!}!€z)…}!€|!!~}!€~}!€~~~~~~~~~~~~~~q99t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9t9~9r9|Ct9~9q99t9~9q99q99t9~9t9~9t9~9t9~9t9~9q99t9~9q99t9~9q99q99q99o9„9v-~9t9~9v9~-q99t9~9q99o9Ct-9q99q99q99o9„9oC9q99q99q99o9„9q99o9„9q99o9„9o9„9o9„9q99o9„9q99q99q99o9Cq99o9Co9„9rC|9q99r9|Ct9~9rC|9t9~9t9~9t9~9t9~9v-~9t9~9v9~-v9~-v9~-t-9v-~9y-~-y-~-y-~-t-9y-~-y-~-{-!y-~-{!-{!-{!-{!-|!!{!-|!!|!!|!!}€!|!!}€!}€!~~}!€}€!}€!}!€}!€}€!}€!~}€!~~~~}!€}!€}€!~~}!€}!€}!€}!€}!€|!!}€!}!€}!€|!!}€!|!!~|!!}!€}!€}!€}!€|!!|!!}!€}!€|!!}!€|!!|!!|!!}€!}€!|!!}€!|!!}!€|!!|!!|!!}!€|!!|!!|!!},‚!|!!|!!|!!|!!|!!|!!|!!{!-},‚!},‚!{!-z!„){-!{,‚-{-‚,v-~9n‘ŽËnԋÜkڌÔkÔ¹e¥— j’¥h™™ e•ƒlŠ•ƒe~šugƒ‘Šhƒ“ƒm™–¥i¥—kŠ“¥n¥“«e –k­‘³l­”™i€•Šj’Šhƒ˜rju›kmkšYer™€b€š~a~›rfrœkhr˜ƒh›Ž¥a¥™ p™—™j¥”¥f­•´c´š´k«™­r«“«h³•´b¼—´n¥“«q¹š´i¹”¿g¿“¿m³³y´“³t¼–Æg˒¿l¹“³o³’«qªŒÃf˒Ëjˑ³q³•¼m³³j³‘Ëg¿“¿m­’«r«“«qª¹g¿“¿i¿”¹q³•¼w«“­l«“¿b¼—´m¥–™w£’‘s™‘‘f­•´`ª˜ u™’ŠzŠŒŠj†š ^¥«b ›—q”ŠiŠ•€h™˜¥Yž¡Œ^ˆ¢h–eƒ•_—Œ\Œž~`ŒŸ­i¿“Ãf¼–¹i­’¥g­™¥e ˜¹hҌÚkڌÔn܋ÔrƓ«l«“¿f˒Ëh¿’­j¥•¹m¹—™pƒ—†^ ž²b¥™—hƒ“ƒlu”mmlžkdƒ›ŒYˆ§{g€—€_Œ—ƒb—› f­˜­g™€m¥‘ÍhڌÒfґ¿lÓÃn±š¥h ™™h³•´]œ•¥h”€lu”miiœYX~ ‹Wx¢z]{¡~d€™ a¥™ g­™¥e—›k€—™f¿‘Òa×´m¥–™lŠ–uqbœYd€™ \•›Œaržic`žaci€i¿”¹d—›rfq›™d¼“ËbÓËl³“¹o³”™hƒ˜rju’–Xœ™`~¡apI“FnV›bb˜Œ`rœqhk—i³ÒfҐËo³’«n«“¥mƒ—ujb™kb˜Œbqkmmh€”fŠ— i¥—ol™bku•­a´—ª_”œrom“YsM”Vfkœr^rŸggr—¥k›™i–Šhm“`nY–VqFšFiF•`_i˜i`j—”gu‘€gƒ‘ŠkŠ‘mnV”IvI’?lF“bei›be~šue`–`fr“ulb“Fw4?t4IgV•QgQ•VcX™Fs2˜,w)‰)r)ŽFs=Ž4u2)q4ŽFr9†4q=”=q9‰Fe`–`h`ImF“FlHŠ`i`ˆPoV4u4ˆ4q;4t42u)2u-‰=jIVsN‹Fo9ŠVnbˆbkmmg`–Vr=“Iu4ˆ4n=ŽIo=”FiV”­fҐË^¼~x)„-|!!|!!{-!|!!{-!{!-|!!{!-|!!|!!{-!{-!{-!{-!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!|!!{-!z!„){!-|!!x-„){!-{!-|!!{-!{!-z)„!y-~-x)„-|!!{-‚,z!„){-!{-!{-!y-~-x-„){-‚,{-!x-„)},‚!{-!y-~-{,‡)y-~-},‚!y-~-y-~-{-!{,‚-{-!x-„)y-~-{,‚-{-‚,{!-},‚!y-~-{!-x)„-y-~-{!-{-!|!!}!‚,|!!|!!|!!z)„!|!!|!!}!€|!!}!€}!€~~~~~~~~~~~~~~~t9~9t9~9q99t9~9t9~9t9~9r9|Ct9~9q99t9~9t9~9q99v9~-r9|Cq99t9~9t9~9q99q99t9~9t9~9t9~9t9~9t9~9q99q99t9~9t9~9t9~9t9~9t9~9t9~9q99q99v9~-o9„9q99q99o9„9t9~9q99o9„9q99o9„9q99o9„9q99q99q99q99o9„9t-}Cq99q99t-9q99q99oC9q99t9~9o9„9oC9rC|9q99oC9oC9t9~9q99oC9t9~9t9~9rC|9t9~9v9~-v-~9t9~9v-~9y-~-t-9v-~9y-~-y-~-y-~-y-~-y-~-y-~-{-!{!-{-!{!-|!!{-!|!!{!-|!!|!!|!!}!€|!!|!!|!!|!!}€!}!€}!€~~}!€~}€!~~}!€~}!€~}€!~}€!}€!~|!!}€!}€!}€!}!€}!€}€!|!!}€!}€!}€!|!!}€!}€!|!!|!!|!!~|!!}€!|!!}!€|!!}€!}!€}€!}€!|!!~ƒ,}€!}€!}€!}€!}!€}!€|!!|!!}!€|!!}!€|!!|!!}!€|!!|!!}!‚,|!!|!!|!!|!!},‚!y-~-{!-{,‚-w-ƒ4y=‡bj­’ÃkԍÔm͓¹i­’¥h—˜ƒg›j’Šl™™e—›gu˜¥m³³o¥Žšg¿“¿j¹•¥j™›­d­Ÿ­j—™™i¿“Ãi¿“¥l–«j¥”¥iŠ•€jŠukk bgkš€]{¥{mu˜uc~—k­‘³d­Ÿ­a¥™ g –³l¹“³g¥™­a¥˜¥i¥’­j¹•¥d­Ÿ­`ª˜ h–ošŽ¥n¥“«`² ­e —¥ošŽ¥m«’­f´•­h¥˜™p™—™i—¥c´š´a¥™ r™šp™—™l¥’³a´—ªn¥“«u™’ŠkŠ“¥aªš­f¥–¥n«“¥rš™j¥”¥b­›¥j¥šn•†q{˜™i³˜­^¦Ÿ e —¥h–kŠ“¥i¥—c—›—h ™™h ™™a¥™ _—œ”g——¥i¹”¿e¿–´j¥”¥n­£j™™´hˎÚfҐËlÓÃn¼–¿l«“¿hԎÒfґ¿oÓÆr×£j™›­e¿–´d›‘—mƒ—umlžkob¢b`{ —\”~qbœYlVœbgkœb­—”]{¡~b š´iÒËiÓ¿qƑÍoÓ«n¥“«f˒Ëf¼”¥m¥–™mƒ—upl›udŠ••WŒ¢‹frœkfažVfb¤{]~¡{Zq£x`~œ—c­’Ãc˓ªn¥“«i¥—ju˜€b­™²\ª”œ`ŒrfrœkqbœYeƒ•[~¢x]‹ b”•i­‘­k¿‘ÍkÓ¥o{˜ƒj³‘¿e¼“­eœ•™lŠ–usY”IjVŸrVˆ£zbq›€gƒ‘ŠiŠ–l¿“«k“ƒmkžli¥“¿`¼•ªe¥”p†—ƒmlžkjVœ`]~œ~gƒ‘Ãd˓¼g¿“¿p–‹Šk™—€qb’Vhb——\•‘~aqš`jYžaim”€f–—i€”mi`—uo‚„‡gŠ‘ƒkb•VtM’FsI’If`škZo¡ibƒ• j’ŠeƒurbŒNsY”IsI’IgV–`^i qeƒ•`~–ƒjubxI‹6s=Ž4m=•VbXš``_šra~™`hQ–;u)2q4ŽFrFŽ)v)‰4t24u?“=s4Ž=mF“FnNŒQmF“Ft4IgV–`hb•`nIŽ=s4Ž=vHNrFŽ)v)‰4r2”=qFŽ4s=Ž4u=ŒNh`“mgj…^h`Iw4„=o=”FqFŽ4sI’InIŽuf¹–¼]ª‹ƒrFŠ!|!!{-€|!!{-!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!z!„)|!!{-!|!!{-!|!!z)„!|!!z)„!|!!{-!|!!{-!z!„){!-{!-{!-z!„)y-~-x)„-|!!{,‚-}!‚,|!!y-~-|!!},‚!{,‚-x)„-{!-{!-z)„!{-!{,‚-}!‚,y-~-{,‚-{,‡)y-~-x-„)y-~-{,‚-{,‡){-‚,{-‚,y-~-y-~-{!-{,‡)y-~-{-‚,x)„-},‚!{-‚,z)„!|!!{,‡){!-}!‚,|!!{-!x)„-|!!|!!|!!|!!}€!}€!}€!}€!~}!€~~~~~~~~~~~~~q99t9~9t9~9t9~9t9~9t9~9q99q99t9~9t9~9v9~-t9~9q99t9~9t9~9q99t9~9t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9q99t9~9q99t9~9q99q99v-~9q99t9~9t9-q99t-9o9„9t-9q99q99o9„9q99q99o9„9q99q99o9„9o9Co9„9q99o9„9oC9q99t9~9o9„9q99q99oC9t9~9r9|Cq99rC|9q99r9|Cr9|Ct9~9t9~9t9~9t9~9v9~-q99t9~9v-~9v-~9v-~9y-~-y-~-v9~-v9~-y-~-y-~-y-~-{-!y-~-y-~-{!-{-!{-!{!-{!-|!!|!!|!!|!!|!!}!€}!€}!€}!€}!€}!€}!€}€!}!€~}!€~~~~~~}€!}!€}€!}€!}€!|!!~|!!}€!|!!}€!|!!|!!}€!}€!|!!}!€}€!}€!|!!}!€|!!~}!€}!€}!€|!!}€!}€!}!€|!!|!!}!€|!!~}!€|!!|!!|!!|!!|!!|!!}€!|!!~,ƒ|!!|!!|!!|!!|!!z!„)|!!|!!|!!{-!{!-{!-|!!{,‚-{-‚,{-6nf…–o«“ÃnƔ¹l³’¥g¥——lŠ•ƒj¥”¥n™•Šl¥’³l«–k³bÓ¿j¿‘³f˒Ëgˑ­h–Ž­f´•­i–¥hÑÒh¿’­i­‘­k³‘­h”€f–—hŠ—rar›~frœkhu™—i¥“¿fːÒi¿”¹l³“¹m͌ÚmڌÍi¹“­b ­g­‘Ëg˒¿e­”¥b¥™—i¥“¿lÒ³f¥–¥a › i —«l³’Ão³’«b­›¥b—› i­‘­i­’¥j¥”¥b ›—nš­m³³g´˜¹d­Ÿ­i­“¹n¹•«n«•¹i«— h™™ n¥“«n«“¥l³“¹d­—e´–¿jÒ­l³’Ãi˒Ã^ Ÿ¦h¹”Ëg˒¿i¿“Ãe¹˜ f­hÑÒeҏÒl¿“«k­ ±n«•¹eҏÒhڎËoÓÆq͑Æk­™«f¿‘ÒhґÃm³³l¹“³n«•¹b¿“Ãa´—ªm¥–™p†˜umu—ƒa › \Œ¢{gkžkjbœUfVžaduœŒX‹ ~^•™ f—–g –³l˒«e€™rc •ÒhڌÒfҐËl³’Ãt¼–«s™‘‘c´š´^¥›”mu˜uhkšVjUƒd ›]{¥{b~š€^”œ d ›aŒfrœkjr™™d¼“ËcÒ­m”™l†™rob•YaŠ›žT“~kr™Ycaž`hk—fÕ¥^x¡ra~’›bÓËb˓Ãl¥’³p¼—¥n{”mc–ªZœ˜”a{`nI›UrIšVfkœr[x¥iar˜ªg¿“¿eÒ³j¥”¥l™™o{–bc€–ªZœ™Œa~`c`žacaž`gŠ——`—œ~j€”³iԐËaґÃo¥Ž‚r™˜†m€›lkY™r]~qbq›€h–e­“¼k“ƒl€˜{pu—Ygkš€^r”qg`–VkF•VgV˜rb˜Œ_i¢iob™lgu‘€hƒ”ujV–VsI’IiV“`›“”fj—khm•rfu‘rlm’bsF’?w=Œ6m=•V]_žiaižrdu–ih`IrFŽ)r4†9pF”2x!‹)|,Œ4s4Ž=s=Ž4r2”=s4Ž=qFŽ4t4Ih`•bdjjlIŽFpIƒVhb•`pIˆ4x2,s4Ž=u4ˆ4t24t4ƒHlb“be`–`jVIlF“bmj‡VlbŽIw4„=pF“Ieƒ“€hb’jgr‡e~‡9z)„!{-!|!!{-!|!!|!!|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!z!„)|!!|!!{!-|!!{-!|!!x-„){!-{!-{-!|!!z)„!}!‚,|!!{!-{!-|!!{-!x)„-z)„!y-~-{-‚,{-!{-!{-!},‚!y-~-},‚!x-„){-!{-!{,‡)y-~-{-‚,{-‚,y-~-{-‚,y-~-{-!y-~-x)„-{,‚-{,‚-{-‚,{-‚,},‚!{-!{-!y-~-}!‚,x-„){-!x)„-|!!x-„)|!!|!!z!„)|!!|!!~ƒ,~ƒ,}€!}€!~~~~~~~~~~~~~~~~q99t9~9t9~9q99t9~9t9~9t9~9rC|9t9~9q99r9|Cq99q99q99t9~9t9~9t9~9q99t9~9q99t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9v-~9q99q99t9-t9~9q99q99t9-o9„9q99q99q99q99q99q99t9~9q99q99q99o9„9oC9q99o9„9o9„9q99o9„9q99o9„9q99rC|9oC9r9|Cq99oC9oC9r9|Ct9~9oC9oC9t9~9t9~9oC9t9~9t9~9t9~9q99v9~-t9~9y-~-v9~-v-~9v-~9y-~-y-~-y-~-y-~-y-~-y-~-{-!{-!{-!|!!{-!{-!{!-|!!{-!|!!|!!|!!|!!|!!|!!|!!}€!|!!}€!~}€!~}€!}!€}€!~~~}!€~}€!}€!}€!}€!~|!!}!€|!!~}!€}!€}€!}€!}!€}!€|!!}€!|!!}€!}!€}!€|!!|!!}!€|!!}!€|!!}!€|!!}!€}!€|!!}€!|!!|!!|!!}!€|!!}!€|!!}€!|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!}!‚,{-!~,…,{,‚-}!‚,w-ƒ4sHƒ‚n¥“«n«•¹l¹“³j¥”¥j¥”¥g“–i¹“­j¥”¥j³‘¿e¿–´mšŽ¿f˒Ëd¿”¼f˒Ëe˘­f¥–¥f¼”¥e –­g¿’Ëf¹—¥i¥’­l³’¥gŒ›e¥— jŠue~šuer™€q™•«g¿’ËkڌÔi˒Ãm¿’ÆnԋÜn܉Úh˔¹j¹–¹kÎÚkԍÔi¿”¹n±›¹kԌÚkڌÔl¿“«d­œ´p¼“ÔoڈàkԐÃg¥™­p«‘ÍhԎÒiԐ¿d´œ­p¹˜¼lˍÜkԍÔk͑¿g´—¥m¹“ÍkڌÔmԎÍkƙ­n¥“«kÐÔiԐËk͑Ëj¹•¥p¼“Ôn܉ÚnԋÜmڌÍn¹•«m͌Ún܉ÚkԍÔoԐÆmÑÍn܉ÚhڌÒiÓ¿l³“¹p±˜³fːÒb˓Ãn¹”Æq¼•³n«“¥g³“¼]²›ªd ›oŠ–{hu™—^ Ÿ¦W•‹hu™rkk bea¢kXŒ¤ˆZx¦{g€—€g€™l™™b ›—\~žŒh­™ÃfҐËi˒ÃiԐËi¥—ošŽÃb˓Ãh¿’­n«“¥o™—ƒgkžkdŠ••[ŒŸŒe~˜bea¢kg€•Ëjܑ´^x¡rcŒ™¥g¿’Ëe¼“q™•«n™˜uik˜Šf¹–¼\«œ•hr™uj`œVqFšFar›~Uu©xZ‹  jŠ’f—–­m͓¹hŠ—rlk›™f˒Ëa×´h–ސm•{ob•YduœŒZ~œzbiœ`gb¢ier™€b ›—frœkob–{h­’¿e¿–´n›‰‘mƒ—ukb•Vlb™U‹ zdr›rhr•mfƒi¥•«k«™­i—Šh«“Ãa´—ªb•”u™’Še€™rhb—r]roik˜Šg –³bÓËj–’umu˜unY–VlN“iarži]i’•b€š~fƒk“ƒlm’bl`”Ieb˜~djjh`ImVœVjm­b´™¥kb•VpI“FgV˜rfkš`pF“IpI“Fe`˜r`j•_nV”IoIYg`–VmV•=p2–;r;)v)‰4n9‹FqFŽ4u4ˆ4u4ˆ4t24w4Ž4q4ŽFoY•bl`ŠHpF“Ihb’jhb•`oIŽ2v,ŒFsNPqFŽ4t24r=“Ii`ˆPgV•QpF“IjbuhmjlV‰Qr=“Iw6Œ=pI“blƒ“miŠ’Ë^ÔªuP}!z)„!|!!|!!{!-|!!|!!|!!|!!|!!|!!{-!{-!|!!{-!|!!z!„)|!!{!-|!!|!!{-€z!„){-!{-!|!!|!!z!„){!-|!!y-~-}!‚,{-‚,}!‚,{!-|!!},‚!{,‚-z!„){!-}!‚,x)„-~,…,{-!},‚!{-!{-!y-~-{,‚-y-~-{!-{!-{-‚,x-„)y-~-{,‚-{,‚-{-‚,{-‚,y-~-x)„-y-~-{,‚-{!-{,‚-{!-{,‡)},‚!x)„-{!-z!„)}!‚,|!!},‚!},‚!z)„!|!!|!!}€!}!€}€!}€!}€!~}!€~~~~~~~~~~~~~t9~9t9~9t9~9t9~9rC|9t9~9t9~9q99t9~9t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9q99t9~9t9~9t9~9t9~9q99q99v-~9q99t9~9t9~9v-~9q99q99q99t9~9q99q99q99q99q99q99q99t9-oC9q99q99q99q99o9„9q99q99q99q99q99o9„9r9|Cq99q99q99q99rC|9q99o9Cq99rC|9r9|Cr9|Ct9~9rC|9t9~9t9~9t9~9q99t9~9t9~9v-~9v-~9q99t9-y-~-t9-t9-v9~-y-~-y-~-y-~-y-~-y-~-{-!y-~-|!!{!-|!!{!-|!!|!!|!!|!!}!€|!!~}!€}!€~}€!~|!!}€!~~}!€~}€!~~|!!~}€!~}!€|!!}!€|!!}€!|!!}€!|!!}!€}!€}!€|!!}€!|!!}€!}!€|!!}€!|!!}!€|!!}€!}!€|!!}€!}!€|!!|!!}€!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!}!€},‚!|!!}!€}!€|!!|!!|!!|!!|!!{!-|!!{!-|!!{-!y-~-y-NoŠ“«k­™«l³’ÃjÒ­i¥“¿h³•´nš­g˒¿l³’¥g¿’Ëj¿‘³e›ˆ›b¿“Ãj¹–¹g¿“¿d¿•¥b¥›­i­’¥e¥”­b´—¼e­– a › f¥–¥a ™¥e¥— \Œž~e€“ƒhƒ“ƒn¥“«hÑÒhԎÒh˔¹q¼–Ãm͌ÚkڌÔlÓÃlÓÃhҌÚkڌÔlÓÃmÑÍvЈàrà‡Üm͑ÃmÑÍp͌Üyæƒàr܍ÆlÓÃoÎÜoڈàhڎËi¿”¹rƒÆq܉Ün܋ÔmԎÍrƒÆp͌Üq܉ÜnԋÜo͏Ío͏ÍnډÜkڌÔo͏Íq͑Æp͌Üq܉ÜnډÜmڌÍo͏Ím͌ÚkڌÔkˑÍtЍÍuʑÍhԎÒfҐËlÒ³r±š«n¥“«d¿”¼b¼š­m™–¥q«•™g›^ ž²a¦Ÿb€ž{il ikb€WŒ¢‹Vˆ©ˆ]~¡{g€—€g€™b€ž{]{¡~g——¥g¿“¿f¿™­p³˜±k¥“Šk«‘ÒeҏÒjˑ³rƒÆq´™¥g¥™­_ª•ªZœ™ŒpŠ–†f›rn{–¥e­– _Œ—a¥™ b—™¥g´”ÔqàŠÍ`— {i€•¥b˓Ãj´™™n¥“«i¥—mu˜u\•œ«[œ˜~j`œVlU¤Vf`škZŽ®ˆ_i¢ih€”­g¿“¿h¿’­p³‘Æo«•ƒh€”dª“­]¥•œb~š€nubiVžU_a¥{Wq¤uar›~aŒ•–d¥™iŠ—mš’rb‘bjŠ’­\ª”œmƒbjV–VtI™FcV™~]{¢qbr› f¥”¼b¿“Ão³’«n«“¥p†˜u`—œ\•›Œ_zš€frœkjk›uj¥”¥g¥—rjb™kku•­`¼•ªgƒ‘bob•YnI”Vhm•r]i–qa~ž­e¥”hŽ–p‚ujk™bvNYlIŽba`šqi‘­bŒ•ug€‘–j–‘ƒpb“IvI’?lF“bbi’`lb“bkV•bfrœkl`”IpI“Fr=“Ie`–`eX˜bg`–VmF“Ft24pI“Ft42s4Ž=s?’Ft42s=Ž4q4ŽFkIˆInF‹9qF‰Vhb’jkPˆVqFŽ4hI`hb•`pF”2u4ˆ4v,ŒFmF“Fu4ˆ4p4ˆInbˆbajii`•Fs4Ž=s=‰9pI•uk“ƒhuŽ­b˓Ãaª•Qz!„){-!{!-|!!{!-|!!{-!{!-|!!|!!|!!}!€{-!|!!|!!|!!|!!|!!{!-|!!{!-|!!|!!|!!{-!x-„){!-|!!x-„)|!!},‚!|!!x-„){-!x-„){,‚-|!!}!‚,x-„){-!{-!{-!{-!{-‚,{!-x-„)},‚!{-!{-!{-‚,y-~-{,‚-{-‚,{,‚-y-~-y-~-{,‚-x-„)y-~-{,‚-{,‚-{-!y-~-x-„)x-„)x)„-{!-{,‡){-‚,{!-},‚!{!-|!!|!!|!!{!-~ƒ,|!!{!†!}!€}!€}!€~~~~~~~~~~~~~~~v-~9t9~9t9~9t9~9t9~9t9~9rC|9t9~9t9~9t9~9q99t9~9t9~9q99t9~9t9~9q99t9~9q99t9~9t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9q99v-~9t9~9q99q99t-9q99v-~9o9„9q99q99o9„9v-~9q99o9„9v-~9q99q99o9„9q99q99o9„9q99q99q99q99o9Cq99q99q99q99rC|9o9Cr9|CrC|9rC|9oC9r9|Ct9~9rC|9r9|Cr9|Ct9~9rC|9q99t9~9t9~9t9~9v9~-v9~-q99v-~9y-~-y-~-y-~-t9-y-~-y-~-y-~-y-~-{!-{!-{!-|!!{-!|!!{!-}€!|!!|!!|!!|!!|!!}€!}€!|!!}!€}€!}€!~}€!~}€!}€!~}€!}!€~}!€|!!}€!}€!}€!|!!~}!€}€!}!€}!€|!!|!!|!!|!!|!!}€!}€!|!!}€!|!!}!€|!!}€!|!!}€!|!!}!€|!!}!€|!!|!!|!!}€!}!€|!!}!€|!!}€!}€!|!!}!€|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!}!‚,{-!{-!y-~-{!-{,‚-rN‹Šr«“«l¹“³i¿“Ãh˔¹j³‘¿g˒¿h­’¿g¿“¿d´‘›h­’¿`¼•ªb—› e¥”ª`ª–¥c´š´a¥™ j¥”¥b­›¥j¥”¥f­˜­d¥™e›—b—› d–“ fƒe€“ƒ_—œ”g›m™–¥i¹”¿b¿“Ão³’«r«“«iÒËbÓ¿q¹š´p¹˜¼iÒËf˒ËoÓÆqƑÍkԌÚhԎÒlÓÃqƑÍkԌÚn܉ÚhґÃn¹”ÆoƐÔjڊÚfҐËp¹˜¼qƑÍkԌÚhڌÒl˒ÆwʓÆm͎ÔkڌÔkˑÍo͏Ít͍Ðn܉ÚhڎËo͏ÍsԐÊo͏ÍkڌÔi˒ÃqÖ¼n¹”Ær³ŽÃg˒¿p¿Ž³q¹ªr«“«i¹”¿b¼—´hª”«q«•™g›e¥”ª^¥—•g›n•›€mlžkaŒXŒ¤ˆe{ŸuaŒa€›Œ\Œ¢{U¨ˆc—š´f¼–¹g¥——e—›b€ž{l™•¿fҐËf¼”¥l¥’³m«—l«“¿d¿”¼`ª–¥ršŽ«r™˜†dƒš”T•§‹]~œ~c—›—dr›rm­Ül܎¿b€š~f¥”¼aÑÒk¿‘ÍmԎÍo¥–†d€™ c´š´[« ”kŠ“ŠnubfVžaa€›ŒV¨xaižre€“ƒf—–h™™ g€škmk“šb¿“ÃdÓ¥i–¥mš{jk›uS”ž“Z~œzfrœkfkš`ci ki€•Šb~kei™mf•´d´‘›p€‘Šo™—ƒlk Vfm• \Œž~cqšVmVœVhr•maŒfrœkdi™g­‘ËaґÃi­’¥h—˜ƒkb•Veb˜~Wzœzbq›€g™€bƒ• n¥“«m«’mƒ—ulb“Š^¥—•`z™VnI”Vjbub´š ]~qfr–f—–fƒjubxM’ItF™Iem™ibiœ`_œ‘Òg›Œeƒ“€pb‰VvN‹Iu=Š=iIšib`œif–—cu“~nuYsI’Iw=„4q4ŽF``˜_a`šqer˜`jV–Vs9Š2p=Œ9t42n=ŽIl`ŠHt24t42w=Œ6oF”=s=Ž4kF•Vg`–VlIŽFo9ŠVmVŠ`iPˆ`r9†4x,2r4†9t42z,‡4l4ŽQe`–`hb•`mP‡FoIIoN`kb•VqxŽboY•Šd¿”¼]ª‹ƒu4ˆ4uH„)|!!{!-|!!|!!|!!|!!|!!{-!|!!{!-}€!|!!z)„!|!!|!!|!!|!!{-!|!!{-!{-!{-!z!„)|!!{-!z)„!{-!{,‚-z!„){-!|!!},‚!{!-|!!{-‚,{-!}!‚,}!‚,x-„){-!{,‚-x)„-{)‡,{,‚-{!-{,‚-x)„-{,‚-y-~-x-„)y-~-y-~-{,‡){-‚,y-~-~,…,{-‚,{-!v4‰)y-~-x)„-{)‡,{,‚-{-!x-„){-!z!„)z)„!x)„-|!!x)„-|!!|!!z)„!|!!|!!|!!}!€}!€~}€!~~~~~~~~~~~~~~t9~9t9~9t9~9q99t9~9t9~9t9~9r9|Ct9~9q99t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9v-~9q99t9~9v9~-t9~9t9~9q99v-~9q99q99q99q99t9~9t9-q99v-~9o9„9o9„9q99q99o9„9o9„9q99q99q99q99o9„9q99o9„9oC9q99o9„9r9|Co9Co9Cq99rC|9o9Ct9~9rC|9pC{Cr9|Cr9|Cr9|Cr9|Ct9~9t9~9t9~9r9|Cv9~-q99v-~9v-~9v-~9v-~9y-~-v9~-v-~9y-~-y-~-v9~-y-~-y-~-{!-y-~-|!!{-!{-!{!-{!-|!!{-!{!-|!!|!!|!!}€!|!!|!!}€!}!€}€!}!€}!€}€!~}!€~}€!~~}!€|!!~|!!}€!}!€}!€|!!|!!|!!}!€|!!}!€|!!}€!}€!}€!}€!|!!}€!}!€}!€|!!}€!|!!}€!|!!|!!|!!}!€|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!‚,|!!z!„)|!!|!!|!!{!-|!!|!!{-‚,{!-~,…,p9‰bnšl³’Ãk͑¿i¿Ôg˒¿g¿“¿g˒¿d¼”¿d¿”¼e­– e —¥`ª˜ f–—c—›—a › b—› e—›b—› j™™—c—›—l™™\Œž~b~š€cŠ™”j’Ša”›€b€š~c—›—h–n¥“«d­“ªc´š´f­˜­g¥™­g¥—´g´—¥j¥”¥j¥”¥e­“¼b¼—´l³“¹p±˜³lÓÃd¿”¼o«’³r«“«p³Ëb¿“Ãl¹“³w«“­j³‘¿fːÒdÕ¹q³•¼v¼™¼iÒËe˖´o«’³r³‹ªl³’ÃiÓ¿l³“¹p¹˜¼s³Œ³lÓÃg¿“¿q³•¼s³—´l³’Ãg¿“¿i¼”«u¥Œ•u™š›o‘­f­•´j¥”¥t£™™q•™Š`¥–ªa¥™ l™™lŠ•ƒju˜€a—¢¡WŒ¢‹i€•ŠcŠ™Œg€—€dƒ›ŒZˆ£~^Œ b´—¼e­– ]—¡™e€™rd —¿fҐËf¥–¥q£—¥l¥•ƒm™—¹b¿“Ãc´š—p™—™mš{fŠ•¥\ Ÿž\”~gkžkjb™kbk~[~¢x[x®Ži¹”¿d “–p³‹àoàŒÃ`—œ~h¥“Ëf˒ËeÒ³n¹•«l¥•ƒju˜€Z«šœ\ŒŸqek¢aba¦amk›{\Œž~[x¥id€™ i¹”¿f¼”¥j¥”¥k™—€jkšƒd­“ª]ª™”pu›lkaœIkU¤bZ{¦xZq£x]q~h€”d ™€lƒ•¥j’bnY–VjŠ’­]ª–•hr•mom“YsI’I`a¡~[zŸi_~š¥e —¥k³‘­o«’³k¥“Šl€˜{jš¼`¼•ªdŒ™btI™FsF‘baª’ƒ^q idr›—i¥’­d¿”¼i‘u™’Šp{žbkV•b`ƒ–~^z›rd~˜Ši­‘­e˖´hƒ”ujk™bim”€cu“~lm’FrI“=kFud³˜Œei›bkm’¥fƒdƒjpb“IvI’?n=”bg–‹u`_˜`iuސg€‘ugu`oF”=q=”=kF•Vbiœ`iX˜InV–Yh`•boV4u)2q4ŽFqNVjV–Vt42q4ŽFpI“Fq;4s4Ž=q4ŽFpI“Fq;4nI”Ve`–`h`Iq;4pF‰HkV•Fv4‰)v4‰)q4ŽFqNVlPIpF‰Hjbuiu‚^i`•Flb“Fr=‹Viˆ‡[r“ziu…‡f‹‚I{-!|!!|!!|!!|!!{-!|!!|!!|!!|!!}!€{-!|!!{-!{!-|!!|!!|!!z)„!{!-z)„!|!!{-!{!-|!!{!-{!-|!!{-!|!!x-„){!-z)„!{!-},‚!x-„)y-~-{!-{!-{!-},‚!y-~-|!!{-!{-‚,{!-},‚!x-„){-‚,y-~-~,…,y-~-{,‚-y-~-{-‚,y-~-{-‚,w-ƒ4{-‚,{-‚,{,‚-{,‚-{!-},‚!{-‚,{!-{-!{-‚,{!-x)„-|!!{!-z)„!|!!|!!{!†!|!!|!!}€!}€!~}€!~~~~~~~~~~~~~v9~-q99t9~9q99t9~9t9~9t9~9t9~9q99t9~9q99t9~9q99t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9q99v-~9q99q99t9-t9~9t9-t9-q99t9-q99q99o9„9q99o9„9q99q99q99q99q99oC9q99o9„9oC9q99oC9oC9q99t9~9o9Cq99rC|9rC|9rC|9o9Ct9~9rC|9rC|9rC|9rC|9rC|9t9~9t9~9q99r9|Ct9~9q99v9~-t9~9v-~9v9~-y-~-v9~-q99t-9y-~-y-~-y-~-{-!y-~-{-!{-!{-!|!!|!!|!!|!!|!!|!!|!!}!€}!€}!€|!!}!€}!€}!€}€!}€!~}€!}€!~~}€!}!€}€!~|!!}€!|!!|!!|!!}!€}!€}!€|!!~|!!~}!€}!€|!!|!!}€!}€!}!€|!!}!€|!!}€!}!€}!€|!!|!!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!~|!!}€!}€!}€!|!!|!!}€!|!!|!!|!!|!!|!!|!!{-!{-!{!-{!-w-ƒ4oVˆk­‘³m͌ÚkԐÃf˒ËfҐËg¼“³d¼”¿i­‘­i­‘­^¥—•f–—e—›b”—g›jƒ™g™€hr˜ƒl™™kŠ“Šj€—ƒg€—€ar {gkžkhr™ub~š€e—“–e—›b—› j¥•¹fҐËe¿–´`¥–ªl¥’³l¹“³g¥™­a › l™™m­’«i¥’­^²œ¥j¥šr«“«g¥™­a¥˜¥m “Šp™—™j™›­a´—ªa¥™ ošŽ¥p£–­c´š´a´—ªn¥“«r«“«m³³b´™¥m¥–™z•‘•vŠ«f­˜­n¥“«r«“«r™šk«–´f­˜­n¥“«u¢™p‘¥g«š«e¥— p™—™n•†nŠ•™b­›¥g›n™•Šo{˜ƒg™ ¡_—œ”f¥–¥g¥——a › c—›—a€›Œc—š´c´š´b´™¥j¥”¥d­—h—•³f˒Ëg´—¥m¥–™k—š{g–¿_Ô¼f¥–¥j¥”¥nª j™›­b´™¥]•™~kk bia¤V`rŒVˆ©ˆ]~¡{e~šu\~žŒ_Œ—ƒ]ˆ¢r^x¡rl«“¿k³‘­j­’Ãs½Œ³n™•Ši«”¼^¼›²]ª–•r™˜†m€—Yjb™kWŒ¢‹\¡rdr›rer™€b—› m¥–™^ˆ£kmk“šb¿“Ãf¿›j™™—p†˜ukb ka€›”]ˆ¢rhr™ugbadbœ{]{¢q^g`fiue“¼e¼“pkœ~pu—YnV”Igu˜¥T•›‡g`UqYœbjV“meƒ™~aržidŒ˜³g¿’ËaґÃrγp¥™•j€˜uguš Vœœ‹^i•~im—kgjjԏ­b~š€hr™ukŠ•¹`¼•ªh”€oƒ˜{ik—mhu™—\•ž{\qž”j¥•¹_Ô¼i­‘­i¥•€tb’MhF—rar”ib`œig`–Vim”€f›€nV–YsIˆHi`—uer˜`i`•Fr=“ImV—™e¿‘ƒnY–VnV”Ihb’jej“`oF”=kF•Vdi–ukb•VxMˆ9r=“Ie`–`jQ”=o;–=n=”bdj’QjVIu4ˆ4sF‹NpP†It42u4ˆ4u4ˆ4s=Ž4w6Œ=o9ŠVm`ŠVh`IkF•VoN`kPˆVt42w4Ž4s4Ž=oF”=qFŽ4t4Yjmuhm“`f`–FrI“=q4ŽFnI”VkF•Ve›‹ÒaΛtI„!{-!{!-{!-|!!|!!{-!{-!|!!{-!|!!|!!|!!|!!|!!z!„)|!!z)„!{-!|!!|!!z)„!|!!z)„!x)„-z!„)z!„)}!‚,z!„)y-~-|!!{-!x)„-{-!{!-}!‚,|!!{-!{-!},‚!{-‚,}!‚,y-~-{!-y-~-}!‚,y-~-{-!y-~-{,‚-{-‚,y-~-{,‚-{,‚-{-‚,{,‚-{,‚-{-‚,x)„-y-~-{-‚,y-~-{-‚,{-!{,‚-x-„)}!‚,z)„!{-!z!„){!-|!!|!!}!‚,|!!|!!|!!{!†!}!€}!€}€!~~~~~~~~~~~~~~q99t9~9t9~9t9~9t9~9q99t9~9t9~9t9~9t9~9t9~9q99t9~9q99q99q99t9~9t9~9t9~9t9~9v-~9q99t9~9t9~9q99t9~9v-~9v9~-t9~9v-~9q99q99t-9q99v9~-o9„9q99q99t9~9q99o9„9t-9q99q99q99q99o9Cq99o9„9q99o9„9rC|9q99q99q99q99q99o9Cq99rC|9rC|9rC|9rC|9rC|9pC{Cr9|Cr9|Cr9|Cr9|Cr9|Cr9|CrC|9rC|9t9~9q99t9~9v-~9v9~-v9~-t9~9v-~9y-~-y-~-y-~-t-9y-~-y-~-y-~-{-!y-~-{!-|!!{-!{-!{-!{!-|!!|!!|!!|!!|!!|!!}!€}€!}€!}€!~~~}!€~}!€|!!}€!~}€!}€!}€!}€!}!€}€!|!!}€!|!!|!!|!!}€!}!€|!!}€!|!!}€!}!€|!!}!€|!!|!!}€!}!€|!!}€!|!!}!€|!!|!!|!!|!!|!!}!€|!!|!!|!!}!€|!!|!!|!!|!!}!€|!!}!€}!‚,}€!}€!|!!|!!z!„)|!!x-„)|!!x)„-{)‡,~,…,t4ƒHm‚¿iÒËjڊÚiԐËi˒ÃbÓ¿f´•­e­”¥f¥–¥a¥™ h–j™ƒg€—€iŠ—g™€iŠ—hŠ—rlƒ•Šg›mƒ–ƒhƒ˜rgkžkfkœrck ihb—rjƒ‘–f­˜­f¥–¥i­˜³kÐÔn܉Úh˔¹g­›¹kÐÔmڌÍg´—¥g¥™­o«“ÃfҐËg¹›­a¥™ o™”³kÔ¹e­”¥b­ l™”­lÒ³k³‘­a¥˜¥g——¥i­“¹o³’«b­›¥b¥™—r¥¢o¥Žšj¥”¥j­›™n¥“«m­’«g¥—´i³˜­k¥“Ãq̪r¥¢g¥™­j¥”¥l³“¹o³’«r«“«g­™¥g——¥k¹”Ãr«“«i­“¹b´š g——¥m³³f­•´i«•¥e—›g­›¹eÓÃe¿–´l³’¥g­™¥g¿’ËeҏÒg˒¿j¹–¹n¹•«o™”³^ÓÃa«žp™—™mš{e›´^²ž e—›o•mƒ—ujuša › Y•¨{dr›rgkš€g€—€[~¢xY{§ˆc—š´f´•­f¥–¥h ™™g™€mƒ“³b¼—´h¥˜™m¥–™p†˜ufŠ•¥Xž›œ[‹ŸrjƒuiV¤aca rY~¢Zx¦{cŒ™¥b´—¼h¥˜™d­œ´n™˜ujkšƒ_ª•ª^¥›Œpu›lfkš`lV¤U`k£x[x¢~g¿’Ëe¥— `ƒ–~aržiia¤VnY–VgŠ–´c´”ƒmu˜uom“YmVœVmY—€X~£uea¢kjƒ™j’¥j¹•¥g€škku”g­‘ËcÒ­j–‘ƒnlšVnI›Uib•€Zzq\zš¥d´‘›j¥”¥lÒ³n™•Šjƒškjm]¥•œb~kck iib•€_¼”Ã^¼šŒe~šuh¥“ËdҔ´iªšwšŠpkV•Fn?œa_i˜icr•ƒgŠ‘ƒi€•ŠnuYvN‹IsF’?k=•`]i–qh`“mhm•riu…‡pš‘uqVNrI“=lI‘je`–`jV–Ve`˜rfr“upb“IrI“=w4?b`œig`unY–VbXš`oV4o=”Fl=•FqNVe`•Qt42u4ˆ4qI‹9q4ŽFs=Ž4r=‰HjV–VlIŽFlIPe`–`e`•Qu4ˆ4u4ˆ4o=”Fu4ˆ4v-Š2t4ƒHkmmej“`mP‡Fu4ˆ4s4“FrI†NnV”ImxŒÒ^ÓÃbœIz)„!z!„)|!!|!!|!!|!!|!!|!!|!!x-„)|!!|!!|!!|!!|!!{-!|!!{!-|!!{-!{!-z)„!{-!|!!{-!{!-z!„){-!{-!x)„-|!!{-!z)„!x-„)},‚!y-~-{!-{)‡,y-~-{-!{-‚,}!‚,{,‡)},‚!y-~-{,‡)~,…,{,‚-{-‚,{-‚,y-~-{,‚-z,‡4y-~-w-ƒ4{-‚,{-‚,y-~-{,‚-x)„-~,…,{!-{!-x)„-{)‡,{,‚-{!-z!„){-!},‚!z)„!{)‡,|!!|!!|!!}!€|!!}€!}€!}!€~~~~~~~~~~~~~~v9~-t9~9t9~9t9~9t9~9t9~9t9~9t9~9q99t9~9t9~9q99t9~9q99t9~9t9~9t9~9q99t9~9t9~9q99t9~9t9~9t9~9t9~9t9~9t9~9o9„9v9~-t9~9v-~9v-~9q99t-9q99q99v-~9t9-o9„9q99q99o9„9t-9q99q99o9„9q99o9„9oC9o9„9q99o9„9o9„9oC9q99oC9oC9rC|9o9Ct9~9o9CrC|9rC|9oC9rC|9pC{Cr9|Cr9|Cr9|Ct9~9rC|9t9~9t9~9t9~9t9~9t9~9q99t9~9v9~-v9~-v9~-v9~-v9~-v-~9y-~-y-~-y-~-y-~-y-~-{-!{-!{-!{-!|!!{-!{-!|!!|!!|!!|!!|!!}€!}€!}!€}€!}€!}€!}€!~}€!~~~~|!!}€!}€!}€!}€!|!!|!!}€!}€!}€!|!!|!!|!!}€!}!€}!€|!!}!€|!!}€!|!!|!!}€!|!!|!!}€!|!!|!!}€!|!!|!!|!!|!!}€!|!!}!€|!!}!€|!!|!!|!!|!!}€!|!!}!€|!!}!€|!!|!!|!!|!!|!!}!‚,|!!{!-{!-{!-y-~-kb‚›j³‘ËhڌÒjڊÚiԐËe¿–´`¼•ªe¥— f—–e›—g›a€›Œdƒ›Œi€•Ša › e—›j¥”¥lŠ•ƒi–¥ošŽŠjƒ™mƒ—uoY•bci kci kom”†j’¥i¿”¹m­’«g´˜¹oƐÔjڊÚg˒¿k¹”ÃnډÜoàŠÔkÔ¹j¹–¹m͌Ún܉Úh˔¹k±´m¹“ÍhڎËn¹•«g­›¹p¼“ÔjڊÚiԐ¿d­Ÿ­m¹“ÍnډÜiԐ¿d­Ÿ­m­œ¼m͎ÔmԎÍkÔ¹j¥”¥p³‘ÆkԍÔlÓÃjÒ­p«‘ÍkԌÚm͑Ãj¿‘³i­’¥k¹’ÔrЌÔo͏Íg¹›­o™”³kԍÔiԐËj͏ÒkÔ¹q³•¼eҏÒg˒¿kÔ¹r±š«o«“ÃhҎÔg˒¿l¹“³t¼–«iÒËfҐËbÓ¿m³³r³Ž¥o†–¥^²œ¥_ž€pƒ—†mu˜ub€ ¡Vœœ‹b~kgkžkci kgkœ[ŒŸŒZ~£ˆk——«b¼—´f¥–¥e—™€ju˜€f¥”¼^ÓÃg´—¥h ™™h—˜ƒd€™ ^²ž e–“rmu˜ukk b`rŒY~¢^x¡—hґÃj–’ub~š€^ލ~ci ke›´^ÓÃm¥–™p™—™jƒškmYšk_—ŒZˆ¥ic`žalU¤Vhb——_œzci€f¿‘Òh¿’­b ›rjb™knY–VrIšViu›_ œ~nm”{pu›lnb›Va`{Ruªudr›—i¥“¿j¿‘³m³³m«—r{™{eŠ”ªV¥›“gr˜VhFSfU rc¥™”Zx£qb{˜–g¿“¿g˒¿i­‘k”umk˜ImI˜k]ƒ–z]{¢qgu‘€c”™Šg­‘Ëd¿— jšugŠ–´\ª”œaŒ›€pu—YsI’Ieƒ–[zŸier™€kŠ“Šk‡ŠŠjubxI’MrI“=m=•Vbiœ`ciŸjƒ—€gŠ‘ƒrbŒNnV”Iu?“=iF•`b`œi`r“~c~“uhu‹ul`”Iw=Œ6s4Ž=gV–`e`›dƒjlb“boV4t)=mF“FiF”QlIŽFu4ˆ4kF•VnV”Is=Ž4q=”=q4ŽFq9‰Fq=”=lI”`i`ˆPoVŠ9u4ˆ4lFŽIrN†IvFŒ,v2Š-s2“Ii`ˆPjVIe`–`q9‹IoIƒHsI”YvI’?jV•¥d­“ªZœ™Œx9!|!!|!!|!!{-!|!!|!!{-!|!!|!!|!!|!!|!!{!-|!!|!!{-!|!!{-!{!-|!!{!-|!!x-„){!-{-!{-!|!!},‚!|!!{,‚-}!‚,x-„){-!{-‚,w)‰){-‚,{-!z)„!x)„-{-!y-~-{!-y-~-{,‚-{!-y-~-{-‚,w-ƒ4y-~-{-‚,w-ƒ4{,‚-{,‚-{,‚-y-~-{-‚,{-‚,y-~-{,‡)y-~-{,‚-{,‚-},‚!{-!{-!x-„){-!z!„){-!},‚!|!!z!„){-!}!‚,~ƒ,}€!}!€}!€}€!~~~~~~~~~~~~~~q99t9~9t9~9q99t9~9t9~9q99t9~9t9~9t9~9q99q99q99t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9t9~9v-~9t9~9v-~9t9~9t9~9t-9q99v9~-q99q99q99v-~9q99q99q99v9~-o9„9q99q99q99q99q99q99q99q99q99q99o9Cq99q99oC9q99q99q99oC9rC|9oC9rC|9pC{CrC|9r9|Cr9|Cr9|CpC{Cr9|Cr9|Ct9~9rC|9r9|Ct9~9q99q99t9~9t-9v9~-v9~-v9~-v9~-v-~9y-~-y-~-v9~-y-~-y-~-{-!y-~-{!-|!!|!!{-!|!!|!!{-!{-!|!!|!!}€!|!!|!!}€!}!€}!€}!€}!€}€!}€!~}!€}!€}!€}!€}!€}!€|!!|!!}€!}!€|!!|!!|!!}!€|!!}€!}!€|!!}€!|!!}€!}!€}!€|!!}€!}€!}!€|!!|!!|!!}€!|!!}€!}!€}!€|!!|!!|!!|!!}!€|!!|!!|!!|!!}!€|!!}€!|!!}!€{!†!|!!|!!|!!|!!{!-|!!{!-}!‚,|!!{-‚,t-}bh­’¿dÎÚjڊÚiԐËe¿–´dª“­a¥™ b˜Œb€š~i€•Šj€˜ujŠ’k“ƒm’«g­™¥l™”­j¿‘³j¥’i­‘­g¥——jŠ’jŠubiœ`dr›rdr›roƒ—™l¥’³a¼•¼c´š´t±¼hÑÒfҐËi¿”¹t¼–ÆnԋÜkڌÔi¿”¹k¹”ÃkԍÔn܉ÚlÓÃp¹˜¼m͎ÔkڌÔkÔ¹k¹”Ãm͌Úq܉ÜmڌÍq͑ÆvЈàyæƒàp܌ÍlÓÃm͎Ôr܇àrà‡ÜoԐÆlÒ³oƐÔn܉Úm͑ÃqÖ¼n³Íq܉Ün܋ÔlÓÃp¼˜¹rƍÜrà‡ÜkԍÔqƑÍoƓÃm͌ÚkڌÔkˑÍrƒÆt¼–Æj͏Òi˒Ãj¹–¹n¹•«n«•¹f˒Ëa×´n¥“«q¥—£f­•´^¼›²_ª•ªm™”j™ƒmu—ƒ^ Ÿ¦aŒžkdr›rju›k`rŒZŒ£x]{¬‚b~š€g›e›—b ›—]~¡{k™•ËhҎÔi¿”¹r«“«g™€i™–¼^¼›²d¥—€mlžkob¢VkV—u[Œž”[‹Ÿrj€˜u_i¢ia€›ŒXx¨x`{šƒnډÜd¿•¥c—•ƒl™™hkšVh€”­]²›ª`•™rhu™rlk VpV£V`k£xXx¨xb{ž€dr›rh€”­k¥–ufažVux‰še­”¥f›€sI”YrVšIsI’IgYš”X‹¡qii lhr•mhu™rfu¦Že€™rfr›k¥“ÃcÒ­s¥“­n¥–{iu—`gYš”Y”zbqžkeq›ubƒ• l³’¥hŠ—rhr™uo‘Ž¿`¼•ªj–‘ƒlu–brVšIek–ƒZzq`qœ—i¥’­d¿”¼m­’«m¥–™lu–bgYš”Z•™z^z™`iVžUg`uf­•´f€“jjk™bgmƒe€“ƒgr˜Vr=“Io=”Fhb—rbiœ`lb’mib•€eƒ“€pb“IvI’?q=”=cVšq_i¢igu‘€eƒudr•juNŒ=y6†4nIŽua~™`d_˜ƒi€”mhj’boP‡=t24kF•ViIFoF”=r=“ImP‡bkPˆVt42r9†4s=Ž4s=Ž4u4ˆ4kF•VnHŠVnIŽ=iF•`rNŒbh`Ir;)t42u4ˆ4mF“Fu9ƒ4pI“bhb’jhb•`iQ”Fs=Ž4k=•`c€‘rZz”~_ƒ~tC}-{!-|!!|!!{-!{-!|!!|!!|!!{!-|!!{-!|!!{!-|!!{!-|!!z)„!z!„){!-|!!x-„)|!!|!!z!„)|!!x-„){!-{)‡,|!!{-!z)„!{-!{-!{-!{-!},‚!{-‚,{-‚,{!-}!‚,{!-{)‡,{!-{,‚-{,‚-x)„-{-‚,y-~-x)„-y-~-y-~-{,‚-y-~-{,‚-{,‚-w-ƒ4y-~-x)„-{-‚,y-~-{,‚-x)„-{!-x)„-}!‚,}!‚,{-!|!!}!‚,{!-|!!|!!|!!|!!}€!}!€}€!~}!€~~~~~~~~~~~~~v9~-t9~9q99t9~9t9-q99t9~9q99t9~9t9~9q99q99t9~9t9~9t9~9t9~9q99t9~9q99v-~9v9~-t9~9t9-t9~9t9~9q99q99v-~9v-~9t9~9v-~9q99y-~-o9„9v9~-o9„9t-9v-~9t-9o9„9q99q99q99q99o9„9q99o9Co9„9q99o9„9oC9q99r9|Co9„9q99q99r9|Co9Cr9|Cr9|Cr9|Cr9|Co9Cr9|CpC{CrC|9pC{Cr9|CrC|9pC{Cr9|Cr9|Ct9~9t9~9rC|9t9~9t9~9t9~9v-~9q99v-~9t-9t-9v-~9y-~-y-~-t9-y-~-y-~-y-~-{-!y-~-{!-{!-{!-|!!|!!|!!|!!|!!|!!}€!}€!~}!€~~~}!€~~}€!~|!!}€!}€!~|!!}€!|!!}!€}!€|!!}!€|!!|!!}€!|!!}!€}!€|!!}€!}€!|!!}€!|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€}!€}!€|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!z!„)|!!{-!{,‚-{!-{-6hx…­eҏÒjڊÚeҏÒe˖´e­”¥e—›aŒb€š~ju˜€e —¥i‘k­‘³l­”™i¥’­k­™«e ˜¹b˓Ãl³’¥h­’¿i¥–kŠ“ŠaŒ›€frœk]{¡~g€—€j’¥r«“«c´š´f­˜­k«™­l³“¹d¿”¼f­˜­n«•¹hÑÒg˒¿m³³t±¼hÑÒb˓Ãj¹–¹j¹–¹hÑÒhґÃj¿‘³p¹˜¼mÑÍhҎÔkԐÃoÓÆq܉Üq܉ÜkԐÃoÓÆm͎Ôn܉Ún܉ÚoԐÆv¼™¼m¹“ÍhڌÒkÔ¹r³ŽÃt¼–Æp͌ÜiԐËq¼–ÃrƒÆqƑÍn܋ÔoÓÆwƓÊwʓÆkƑÒg˒¿lÒ³s´—³s³Œ³i¹”¿e¼“­j¥”¥t£™™m™–¥f­•´a¥™ j™™—qƒ™v_€ž`—™•Y™£Œm”™hu™rgƒ˜ i¥—^ˆ €d› b—› c—›—\Œ©‚^iŸ~g –³e¼“­j—™™n¹›±e—™€n•™¿b˓Ãi¼”«o³’«mƒ—ui—¥^¥—•b~khU¥UqFšFjUœbYˆ§{_{ž¥iÓ¿k™‘–a¥™ ^{£iaižrh¥“Ëh¿’­g——Šp™—™mkšYgY–•X• •_zkmb›bhU¥Ufiu[~¢x_i¢ig€™a ™¥fƒlu–brVšIjUœb^——œ`ŒrsV”Mj`œVsI’IfU rX£qer™€d› e¥— j’¥f —Šj€—ƒh–­Yœ“œjƒ—€mkšYkFœUfbŸ~Wz¢x]q~i¥’­e¼“­i¥’­m¥–™mƒ—uh{—ª^¥›”fu“rg`UhVškg—˜¹\”žq^oœ€i¥“¿_Ô¼g´—¥oŠ“rpb“IlF“bY~žo\qžq_Œ—ƒg——¥eª”¥lƒ“msY”IoI‘mfu“rhb•`sI’IkV•biŠ—jk™bnV”IpI“bjmui`•FpF“InI”V`ƒ–~kb•VjV“mfujej“`oV4q=”=jm­g“`mF“FtIˆVe`–`i`•Fq=”=hF—rlm’Fp9Œ=lFŽIgV–`l`ŠHq;4r=“In9Ž;t42u4ˆ4r=“IqFŽ4w4„=kV•bej„[i`•Fu4ˆ4u4ˆ4r9†4v4‰)u2)iF•`k`‰bej“`oIŽ2u4ˆ4s4Ž=v?’IhF—r^ª”Ã`¼’iz)„!{!-|!!|!!|!!{-!{!-|!!z)„!|!!|!!z)„!|!!|!!|!!{!-|!!{-!|!!x)„-|!!{-!{-!x)„-{!-{!-{!-|!!x-„){-!{-!}!‚,{!-}!‚,x-„)y-~-z)„!x-„){,‚-y-~-{-!y-~-{-‚,x)„-{-‚,{-‚,x)„-{-‚,{-‚,y-~-{,‚-w-ƒ4{,‚-{-‚,{-‚,{-‚,{,‚-{,‚-{,‡){-‚,{,‡){-!},‚!{-!x-„){-!x)„-{-!},‚!|!!{-!|!!z!„)|!!|!!{!†!~}!€~}!€~~~~~~~~~~~~q99t9~9t9~9t9~9t9~9q99t9~9t9~9q99v9~-t9~9t9~9t9~9q99t9~9v-~9q99v9~-q99t9~9t9~9q99t9~9t9~9v-~9t9~9v9~-q99v9~-v9~-q99y-~-q99t9-t-9q99v-~9t9-q99v-~9t9-q99t9-o9„9q99q99q99q99q99oC9o9„9o9Cq99o9Cq99o9Cq99rC|9t9~9r9|Cr9|Cr9|Cr9|CpC{Ct9~9rC|9rC|9rC|9uC}=r9|Cr9|Cr9|Cr9|Ct9~9q99t9~9q99q99q99v9~-q99v9~-v9~-y-~-t9-y-~-y-~-y-~-y-~-y-~-{!-{-!{-!{!-|!!{!-|!!|!!|!!|!!}€!}€!|!!|!!}€!}€!}€!}€!~|!!}€!}!€|!!~}!€}!€|!!}!€}!€|!!|!!|!!~|!!|!!}!€|!!}€!|!!|!!|!!|!!}!€|!!|!!|!!}€!|!!|!!|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!‚,|!!{-!}!‚,|!!{-‚,o4„‡c¼’ÒhҌÚkڌÔg˒¿f¼”¥c—•ƒj€˜ue€“ƒi—Šf€›g´˜¹p­‹ªg˒¿i¿“¥j¥•¹g´—¥d–¼g˒¿i­’¥e¥”­dª“`ƒ–~e€“ƒa”›€g€™j—™™g´˜¹i¿”¹g­™¥a¥™ h³•´g­™¥d´œ­e —¥j¥”¥h³•´b¼š­j­›™g­™¥h³•´b¼—´i­‘­r«“«l«“¿f¼–¹k´±o³’«o«’³d¿”¼k´–«u­’³r³ŽÃb˓Ãn¹•«r«“«o«’³iÓ¿g˒¿l¹“³uªŒ«n«•¹iÓ¿n¹•«r«“«v«Œ¢iÒËi˒Ãs³Œ³v±”³wª¼iÓ¿o³’«u«Œªv¢Œ«n«•¹i¹“­g­™¥mš’t†˜†kš”­b¥™—pŠ–†pŠ–†s{™†]—Ÿž_—ŒdŒ›ƒhu™rg€—€WŒ¢‹\~žŒe´–¿g¥——m¹“Íg¹˜—\{¡”e´–¿g˒¿m¿™±f­o{™ug­‘Ëa×´j—™™k«™­o™—ƒgŠ–´a´—ªj—™™g™€ol™b^k£ˆX‹ ~[x¥ij`œbba¦aar§Ž]{¥{dk›¥o͏Íe¿–´q«•™g€škha¤bobŽša¥™ _”œrfrœkjV¡NfU rZ{¦xXx¨x]{¥{fkœrmu—ƒ`Œrba¦aob–{f­•´f¥”mjkšƒlŠ–uqbœYa€›ŒY‹£ihU¥UjYžalVœbar {`x£kc{›d¹•Ãe¼“­h¥˜™n†›koY•bdb™ŒYŒžzkr™YdU¡XhY™~g™€^{£igkš€d¼“Ëe¿–´p™—™l™™lu–bkb€`ƒ–~bq•–f–rh€”f¥—¹h­–lu”mfu—ªa´—ªg–‹ujbœUpI“FkY™r]roaižrn›†ª^ÓÃo­xjmšUvI’?r=•Ybj™ici–kg€—€i€•Šp‚urmŠNvI’?pF“Idr•jh`•bhb•`im”€gƒmnV”Im=•Vhb’je`–`g`–VdVœilu–Šom‘Is=Ž4n=ŽIe`–`d_—baržie`–`lb–;q4ŽFmF“FlFŽIkV•Fs4Ž=jIVnF4t42w4Ž4u4ˆ4u4ˆ4p2”FmVŠ`e`–`oF)w4ƒ-pF‰HkV•Ft24x)„-sF‹Ne`–`iPˆ`lQŽ4t24u4ˆ4lF“bjV–Vc •Ò^Ôªo[)z)„!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!z)„!{-!{!-z!„){!-z!„){!-z!„){!-|!!z)„!{-!z!„){!-}!‚,{!-},‚!y-~-}!‚,x)„-}!‚,{-!{,‚-{!-{!-x-„){,‚-{,‡){,‚-y-~-{)‡,{-‚,{-‚,x)„-w4ƒ-{,‚-w4ƒ-~,…,{-‚,w-ƒ4y-~-{,‚-y-~-{,‚-y-~-x-„)y-~-{!-y-~-z)„!{,‚-{)‡,{-!z!„){!-z)„!z!„)|!!|!!|!!{!†!|!!|!!}€!~~~~~~~~~~~~~~t9~9v-~9v9~-t9~9q99q99t9~9t9~9t9~9q99q99t9~9t9-t9~9t9~9t9~9t9~9t9~9t9~9v-~9v-~9t9~9q99t9~9q99q99q99q99t9~9q99t-9q99q99t-9q99t-9q99t-9q99o9„9v-~9q99q99q99t9~9o9„9t9-q99o9„9q99r9|Co9„9q99o9Co9Cq99oC9t9~9oC9rC|9oC9pC{Cr9|Cr9|CpC{Cr9|Cr9|CuC}=pC{CrC|9rC|9rC|9r9|Cq99rC|9t9~9oC9t9~9t9~9t9~9v-~9v-~9v-~9v-~9y-~-v9~-y-~-y-~-y-~-{-!y-~-{!-{!-|!!{!-|!!{!-|!!{-!|!!|!!|!!}€!}!€}!€}!€~}!€}!€~}!€}€!~}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!}!€}!€|!!}€!}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!}€!|!!|!!{!-|!!|!!|!!|!!{-!{-!y-~-ob†³iːÔkԍÔfҐËh¿’­e¥— kŠ“ŠfƒkŠ“¥j¥”¥nš­g˒¿g¿“¿kˑÍd˓¼f­•´e­”¥h–Ž­f¹–¼eª”¥c¥›d ™€dr›rf€›a ™¥g¥™­l³’Ãm͎Ôfґ¿d´œ­f¡³g¿“¿g¹›­a¥˜¥i —«g¿“¿e¿–´b­›¥g——¥g¥™­g¥™­a¥˜¥m¥–™m¥–™h™˜¥^²œ¥j¥”¥k«™­j¥”¥^«¥h ™™i‘m™–¥e¥”ªa¥™ p™—™p™—™e¥”­g´—¥j¥”¥t£™™x•’¢h´•³n¥“«u£—«y¢£n«•¹n¹•«n¥“«v«Œ¢q™•«k«–´n¥“«r«“«x••Šn¥“«b­›¥j¥”¥t£™™pƒ—†j¥”¥e—›l™™lŠ•ƒi—¥d ›Xˆ¤Œe›—b—› f¥–¥\”~cŽ¥€m¹“Íg˒¿iÒËhÙ­j€—ƒh¹”ËfҐËg¿“¿j¹•¥g™€g¥—´^²œ¥cŒ™Šl™™q•šƒhƒ˜—]—¡™b{¡kek¢alV¤Uml›€X‚®u[i¥xa~›rcŒ™ŠdŒ›ƒg™€mk›{l¥’³e¿–´e¥”mš{nb›VhI—~\”~^{£ihU¥UhU¥Ufb¤{Zx£q^i£{g€™aŒa~›rklœrnlšVtM’ba¥˜¥`•™rob–{mƒ—uob•Yar›~]{¢qa{ rg€—€cŒ™ŠaŒe€™ror“Še´–¿`ª–¥kŠ‘mlk VtI™FhU¡kUz£ufƒ­c—~b”—j’Šf€–`lb’me­“¼\ª”œkŠ“Špu—YiVžUgmƒ]~q]z›´h¿’­j³‘¿ošŽ¥n¹•«mš{hr—Š\•›Œ[zŸihb•`kV•be —¥^~Ÿijb™kmƒ“³`¼•ªc¥”jvI’?oF”=iF•`ci kdi–ue—›fƒi€•bxM’IpI“Ft4Ib`œicj”¥g–‘€eƒ“€rmŠNxI‹6s4Ž=e`–``_˜`cr‘€]~”~jumqV”?w=Œ6q4ŽFe`–`ai”reƒuhb•`qFŽ4s4“FlFŽIjF”FjVIm=•VsNPtI4q;4q9‰Fu4ˆ4u4ˆ4s4Ž=iF”QlI;v4‰)m=•VpV‰blV9v4‰)u)2o=”FhQŽIi;—`kj’=t9ˆInV”IsF‹Nob•YhuŽ­a´—ªe•9|!!|!!z)„!{-!{-!|!!|!!|!!|!!{-!{!-|!!x)„-|!!|!!z)„!|!!{-!{!-|!!{-!{-!},‚!{!-z)„!{-!{-!{-‚,}!‚,{-!z!„){-!{-!},‚!{-!{-!{-!x-„){!-}!‚,y-~-{,‡){-‚,y-~-{-‚,y-~-y-~-{,‚-{-‚,y-~-y-~-{,‚-y-~-z,‡4y-~-{,‚-z4‡,z4‡,x)„-x-„){-‚,x)„-{,‚-{-!{-!},‚!{-!},‚!z!„)z!„)|!!z)„!|!!|!!~}!€}!€~,ƒ~~~~~~~~~~~~~t9-t9~9t9~9v9~-q99t9~9t9~9t9~9o9„9t9~9q99v9~-t9~9v-~9q99q99t9~9t9~9v-~9q99t9~9v9~-t9~9t-9t9~9v-~9v-~9q99v-~9t-9q99v-~9y-~-q99t-9v-~9t-9q99t-9v9~-o9„9q99v-~9q99q99q99t9~9q99q99o9Cq99q99o9Cq99o9„9rC|9q99oC9pC{Co9Cr9|Ct9~9pC{Cr9|Cr9|Cr9|CpC{Cr9|Cr9|Cr9|Cr9|Cr9|Ct9~9rC|9t9~9t9~9t9~9t9~9t9~9v9~-t9~9v-~9v9~-v9~-v-~9y-~-t9-y-~-y-~-y-~-y-~-{!-{!-{-!{-!|!!{-!|!!|!!|!!|!!|!!}!€}€!~}!€}€!}€!~}!€}!€}!€}!€}!€}!€|!!}€!}€!|!!|!!}€!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!}!€|!!|!!|!!|!!|!!|!!|!!{!-},‚!},‚!y-~-y-=g–¿iːÔfґ¿h¿’­i­‘­p¥‘j’¥n«“¥f¥”¼g¿“¿k­‘³f˒Ëg¿“¿bÓËh˔¹c´š´e­”¥b—™¥`ª–¥b¥™—b˜Œ_€šzkmmd“ªf­˜­l³“¹mÑÍnډÜhڎËi¿”¹f¿‘ÒhԎÒdÕ¹d­œ´g¹“ÒkԌÚg˒¿g¹›­j³‘¿e¿–´e¥— _¥¡¡g¥—´j¹–¹j™™—b ›—g –³l¹“³n«“¥c—›—d› i­“¹l³’¥a¥™ a¡¢—o™”³i«— h™™ h™™ t™™£n¥“«n¥“«g¹›­g­™¥s³•£u«—£j¹–¹k«™­r±š«x£›£oªž¹n¹•«g­›¹rƓ«q£—¥i¹”¿o³”™p³‘ÆoÓ«n¥“«g¹˜´c—›—j¹–¹k³‘­e´–¿j¹•¥a€›Œl™”­g¿“¿f¿™­p™—™j™ƒk¥“Ãg˒¿g´˜¹oÙ±r™˜†e­“¼e¿–´f¥–¥j­›™o{™ud€™ [¦¡Œb{¡kqvšumu˜uklœrYˆ§{Zx¦{frœkfkœr^£•^{£i^i£{d› eª”¥a””un†šek¢apb•`­›•gŒœ{hƒ˜rkb¤UmN§bZ{¦x^i£{f›raižrar›~^{£ici ker™€b—› iŠ˜kkb€o{–boV¢b\~žŒ^~ŸifažVhU¥Ulk›™`­ŸŒ[x¥ibƒ“¥b´—¼i­‘­nšl™™mu—ƒ_ª•ªVœœ‹kk bnV”IkV•be€™—^~Ÿia”˜¿e¼“­e­– mu—ƒvŠ•lsY–Ya’œ\•‘~ci kg`UhVškjš¼]Œ igr—¥g¿“¿g¿“¿r¥¢p¥™•ju›kmYškV{£{\qš•a¼–¥f•—™h–ސlu–bnV”InY”a–‘•a~™`mF“FpI“Fai™ƒ^~Ÿilb“bib•€cƒƒgƒ‘bpF“IsF’?gV˜rck ig`“jŠu`ƒ–~ij‘Fq=”=s4Ž=``˜__i¢ier™€hu‹ud~–msFŠ=u=”4n=”bZo¡ie`–`lb“bej“`oV4t42j=”Qlb“Fn9‹FlFŽIgV–`lQŽ4u6ŒFkV•FoF”=r=”2w4ƒ-qFŽ4u4ˆ4u4ƒ9oVŠVej“`mP‡Fu4ˆ4v)‰4u4ˆ4t42p4ˆIhm“`kb‡^mb‡PmF”IvN‹IhQ’mar’rbrjrV}C{-!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{!-{!-|!!{-!{!-|!!{-!z)„!},‚!{!-z)„!{!-z!„)|!!},‚!|!!{!-x)„-}!‚,{!-y-~-z)„!{,‚-{)‡,{,‚-{,‚-y-~-{!-{,‚-{,‚-{!-x)„-y-~-{,‚-w-ƒ4y-~-{-‚,w-ƒ4{-‚,{-‚,y-~-~,…,{-‚,y-~-{,‚-{,‚-{-‚,x-„)x-„){-!},‚!x-„)x-„){!-{!-}!‚,|!!{-!|!!|!!|!!|!!}!€}!€~}!€~~~~~~~~~~~~v-~9q99v-~9t9~9t9~9q99q99v-~9t9~9q99v-~9q99q99t9~9v-~9v-~9q99v-~9q99t9~9v9~-t9~9v9~-t9~9t-9t9~9q99v-~9v9~-t9-v9~-t9-o9„9v-~9t9-t9-t-9t-9q99t-9q99t-9o9„9q99q99q99q99q99q99o9„9q99q99q99q99oC9t9~9rC|9r9|Co9Cr9|Cr9|CpC{Cr9|Cr9|Cr9|Cr9|Cw=9rC|9pC{Cr9|Cr9|Cr9|Cr9|Cr9|Ct9~9r9|Cq99q99t9~9q99q99v9~-v-~9v-~9y-~-t9-t-9y-~-y-~-y-~-{-!{-!{-!{-!{!-|!!|!!|!!|!!|!!|!!|!!}€!}!€}€!~}!€}!€}€!}€!}€!}€!}€!}€!}€!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}€!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!}!‚,|!!}!‚,|!!|!!{-!y-~-tV„šg¿“¿f˒Ëj¹–¹j¥”¥i­“¹f´•­h­’¿e¿–´g¿“¿b˓Ãd¿”¼g¿’Ëd¿”¼g¿“¿g¹›­eª”¥a¥™ c—•ƒg›b€š~b€š~`rœqlm”ue –­c´š´p³˜±iÒËkԌÚiԐËkÔ¹kƑÒkڌÔg˒¿lÓÃm͌Ún܉ÚnڎÆg¿“¿hÑÒiԐËi¿”¹d­Ÿ­m¹“ÍiԐËi­’¥j™›­kÐÔkڌÔh˔¹e¥— f­™¿kԌÚiԐ¿n­£f¥–¥iÓ¿i¿”¹h­§§a—¢¡g­›¹q¼–Ãp¼˜¹t¼±r± ±u´Ÿ±x´ž´v¼™¼v¼™¼w´›¼v¼™¼|À•ÊwƓÊ|À•ÊzЏÊ|ʓÊuʑÍvàˆÐæ€æxæ„ÜuЊÜm͑Ãrªž™h¹”ËfҐËj¹–¹g¹˜´s™›•f —Ãb˓Ãg´—¥m¥–™i—Šo™”³c´š´n¥“«o³’«l™™a ™¥_¦Ÿ—dŒœupu›lhb¤afbŸ~XŒ¤ˆbk¡{gkžkfkœrc€¥Ž]~¡{`x¡cާaŒg›fuikb kb—™¥b­›¥e—œklm”uqbšIlN bZ~£ˆ]x§ahb¤alV¤UgkœWˆ¨x]i Œd´œ­^€ ˆdr›rckžXoNŸIhU¡kb™•a~™`pI“blbœVhU¥U^r¡x^x¡rjšudr›rfƒ­h³•—frœkgr—¥a¼•¼a´—ªnŠ•™mš{mkšY]€ž‹X£qbiœ`hb¤aei™mm™–¥gœklk›™e­“¼]¼”œju‘umƒ—unV”I`rŒU‡£{bqžkdr›r`~–ƒj¥•¹c—~ik—mi‘­dª“­d•—ukb•VnI›UcVž{]~q\qš•_Ô¼e³’Ãfª—ulu–bvY”?pI“b`u“z_i˜ihu”kiuސi‘iŠ•€nlšVnI”Vfu“rej“`nV”IgV–`h€”i€•bnY–VnI”Vhmjlb“Fq=”=n=”b^{™ibiœ`jV–Vkmmej“`nIŽ=o=”Flb“Šdi’VmF“Fm=•Ve`–`nIŽ=mF•;iF•`f˜Ql=•FlIŽFkF•VpH‰FpI†Ppb‰HqFŽ4q;4s2•2v)‰4t24t4Ie`–`i`ˆPkV•Fs4Ž=q4ŽFu4ˆ4v)‰4u-‰=h`•bdjj``˜_t=)pF“Iq4;o=”FiV“a¼•¼nx4|!!{-!|!!|!!{-€|!!z)„!z!„)|!!{!-|!!|!!z!„){!-{!-|!!{!-|!!{-!z!„){-!{!-z!„){-!~,…,{!-{!-}!‚,{!-{,‚-}!‚,x)„-y-~-{!-{!-{!-}!‚,x)„-~,…,{!-{-‚,{-‚,{-‚,y-~-z4‡,{-‚,{,‚-{-6{,‚-z,‡4{,‚-{,‚-w4ƒ-y-~-{,‚-{-‚,y-~-{,‡){-‚,{-!{-‚,x)„-{-!},‚!x-„)}!‚,z)„!{-!|!!|!!z)„!|!!}€!}€!}€!}€!~}!€~~~~~~~~~~~t9~9v-~9q99v9~-v9~-t9~9t9~9q99t9~9q99t9~9t9~9q99t9~9q99t9~9t9~9o9„9t9~9v-~9t9~9q99t9~9q99t9~9v-~9v9~-t9-o9„9q99t-9t-9v-~9t-9v9~-q99q99t-9t-9q99t-9q99q99t9-t9-q99q99q99q99q99o9„9oC9rC|9rC|9q99r9|Co9Cr9|Ct9~9rC|9rC|9rC|9rC|9pC{Cr9|CrC|9pC{CpC{CrC|9pC{CrC|9rC|9rC|9rC|9oC9t9~9t9~9t9~9t9~9t9~9v9~-t9~9t9~9t-9v-~9y-~-v9~-v9~-y-~-y-~-y-~-y-~-{-!{-!{-!{!-|!!{-!{!-|!!|!!}€!|!!}!€}!€|!!}€!~}€!}€!}€!}€!}€!}!€|!!}!€|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{-!{-!x-„)|,ƒ=i­“¹k¹”ÃlÒ³m«’­l³’¥h¹”Ëj¿‘³g¿’Ëg˒¿d¿”¼b˓Ãb¼—´g³“¼e¿–´f­˜­a¥™ h ™™d ›j€˜udr›rfrœkgkžkfkœrhŽ–e¥”ªa­šªi¥’­n«•¹g¿“¿i¿”¹j¹–¹iÒËaґÃn¿–¼qƑÍm͎ÔjڊÚk͑Ët¼–Æj͏ÒhڌÒiÓ¿kˑÍm͎ÔhڌÒh¿’­j¹–¹nԋÜq܉ÜmڌÍlÓÃt͍Ðq܉ÜmڌÍj¹–¹n¹”ÆkˑÍh˔¹k­ ±sª£±r± ±u´Ÿ±w¼›´x´ž´}´›·w´›¼}·›´À—·À—·|À•Ê|ʕÀ|ʓÊ|ʓÊ|ʓʃЂɀЃ×|܂׿€ææ€ææ€ææ€æwàÊwÀ•ÆwƓÊq͑ÆoÙ±o¹žªj­›™k§£¹gÖ´g¥——p™—™p†—ƒj†š ^«ž dŒ›ƒoƒ˜{pu›la€›ŒXŒ£]{¥{ek¢aha¤be‚¥ƒYˆ§{_xŸ€a”e—™€aŒfrœkca rg——¥a¥™ j€˜uju›koV¢b_Œ—]—Ÿž_{¥apV£VrV¡FeU¥aZ{¦x[i¥xck i_i¢ia€œ«f›rea¢kh™˜¥cŠ™”fuiob¢VkUœFoF›V^€ ˆc{žVhU¥UhU¥UgV¢i]{¥{^iŸ~f¥–¥a¥˜¥e—™€j€˜umb›bjV•Š`ª–¥Zœ™Œlƒ•Šn{˜VqFšFbbžxUu§ga{ rYz”`—œ~hr™um{›kxI’Mbu–«^¥‘~mkšYnY–VtF™I^iŸ~]~q[x¢~g“–j¥”¥h›Ž¥m«’o{–bdb••Z••œhr—bnubdVœih~˜«`—œqgaŸui‘e­“¼aª’ƒlb“bsY”IkF•V^i q\qŸŒf¿›h­’¿i­’¥r™‚pu—YsI’Ieb›iaižrg€‘ui€•ŠlŠ•ƒlm’bsI’Iq=”=b`œidiœVhVškdm–~hu”knV”IsF’?lIŽbej“`h`•bkV•bfr“unV”IuFŒ6t4Ie`–`kV•blm’be`–`ij‘FsF‹NhQŽIp9Œ=q4ŽFgV–`hb•`q9Œ2u4ˆ4s4Ž=s4Ž=u4ˆ4p4ˆIkVˆPgV•Qp9ƒIqVNl`ŠHlQŽ4v4‰)r2”=lHŠ`i`ˆPh`Iu4ˆ4s4Ž=u4ˆ4w?ˆ9mI•€b¿“Ã^¼~z)„!|!!{!-z!„)|!!{-!|!!|!!{!-z!„)|!!{-!{-!|!!|!!z)„!z)„!{!-|!!{-!{!-z!„){-!},‚!{-!y-~-{!-{)‡,{!-z!„)y-~-{!-{)‡,{-‚,{-‚,{!-y-~-{,‚-{!-{-‚,x-„)y-~-{,‚-{,‚-{,‚-w4ƒ-y-~-z,‡4y-~-y-~-{6-y-~-y-~-z,‡4{-‚,y-~-{,‡)y-~-{-‚,y-~-{-‚,{!-x)„-x-„)},‚!},‚!}!‚,z!„)}!‚,z!„)|!!}€!~,ƒ~,ƒ|!!~~~~~~~~~~~~~~t-9o9„9t9~9t9~9q99v9~-v9~-q99t9~9v-~9t9-t9~9v-~9q99v-~9v9~-v9~-t9~9t9-q99t9-t9~9q99q99v-~9q99t-9v9~-v9~-v-~9t9-q99t-9v-~9t-9y-~-o9„9v-~9o9„9v-~9t9-q99o9„9q99q99q99t9-q99q99q99q99q99t9~9q99oC9rC|9q99oC9pC{Cr9|Cr9|CrC|9rC|9pC{CrC|9rC|9uC}=uC}=pC{Cr9|CuC}=rC|9rC|9rC|9t9~9rC|9t9~9q99t9~9t9~9t9~9q99v-~9v9~-v9~-v9~-y-~-y-~-y-~-y-~-y-~-y-~-{!-{!-|!!{-!{!-|!!|!!|!!|!!}!€}!€|!!}!€~}!€}€!}!€}!€}!€}!€}€!}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!|!!|!!|!!z)„!|!!{!-{!-r-‡ml³“¹k¹”Ãg¹›­h­’¿g¿“¿iÒËg˒¿b¿“Ãb˓Ãf´•­c´š´i­‘­f­˜­b­›¥e¥— g™€j€—ƒg€—€ck ilb“bek¢aaižrd€—¥h³•´f­˜­a¥™ g¥—´j¿‘³b­™²i­’¥j¥”¥i«”¼b¼—´i­‘­p¹˜¼iÒËf˒Ëi¿”¹j¹–¹lÓÃg˒¿qÖ¼rƒÆm͎Ôf˒Ëj¹–¹qÖ¼iːÔjڊÚmԎÍq͑Æo͏ÍkڌÔk͑¿qÖ¼q¹š´q´š¹u´Ÿ±r± ±s±£ªw­¢±x´ž´x´ž´x´ž´}·›´|¼™·|À—À|À—À|ʓÊ|ʓÊ|ʓʄʆÉzʏЃЂɀЃ׀Ѓ×æ€ææ€ææ€ææ€æƒæ}ׇׁÊv¼™¼tÀ•Ãv¼™¼t±¼u´Ÿ±r± ±r± ±g¹›­h­§§l§¯§g¡¯™fŽ¥ƒ^¢ˆb{¡kgkžkob¢baŒZ{¦x`~œ—e—™€g€—€c¢¡`¡xgkš€g——¥d­—hu”kkk bnI”Vgƒ˜ b ›—guŸaqYVnF›Var {Y¦{`i¤aea¥UeU¥abk¡{Z{¦xVx¨c€¥Žeuš~j€—ƒgƒžahU¥UkY™r[ŒŸŒc{žVoNŸIqFšFhU¥Ubk~]{¥{g™€ar {er™€d{¡ˆha¤bjušdª“­b¥“ƒlbœVlNŸFmF›`WŒ¢‹Zzqba¦aiVžUea¢ka{ r[g£igkžkgƒ—¥^ª™~sY”InY–VpI“FiV™ƒ\”~diœVfVžahb—r]r¢ˆ[zŸifkœri‘­h¿’­qŽŠlŠ•ƒmkšYlI–r]~œ~\z› d¿•¥eƒ–i–¥k“ƒlu–brbmb­›¥`•™rob•YmVœVhVškVzžoeq›ue´–¿g¿“¿e¼“qxŽbqV”?iF‘j]~qa`™~h–ސi‘eƒuqVNsI’Io=”Fb`œie`˜re€“ƒcƒƒh€—VsY”Iu?“=lI”`e`–`er™€ar›~jubpF“Iq=”=o=”FcV˜_d`’ƒd “ue`–`nIŽ=q4ŽFmF“Fv4‰)t)=lFŽIh`Is=Ž4q4ŽFsN‹Fu4ˆ4s=Ž4u=“?mF“Fn;Ž9m=•Vi`ˆPe`–`oIŽ2v)‰4v)‰4nI”VdQ”QkF•VqVNnVŠHkV•Fu6ŒFs6Vb›Žª]ª–•t9-z)„!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!{-!{!-{!-{!-z!„)}!‚,}!‚,z!„){-!}!‚,{!-|!!z)„!z)„!{-!x-„){,‚-z)„!},‚!y-~-{!-{,‡){-!x)„-{,‚-x)„-x-„){-‚,{-‚,y-~-{,‚-{,‚-z,‡4w-ƒ4{-‚,z,‡4{,‚-w-ƒ4{-‚,z4‡,{-‚,{-‚,y-~-w-ƒ4~,…,x-„){-‚,x)„-{-‚,{-‚,{!-{!-z)„!{-!|!!{-!|!!|!!~,ƒ{!†!|!!|!!}€!~~}!€~~~~~~~~~~o9„9v-~9t-9v-~9v-~9q99q99q99t-9t9~9q99q99t9-q99t9~9q99q99t9~9q99t9~9t9~9v9~-t9~9v-~9t9~9v-~9t9~9t-9v-~9o9„9t9~9y-~-v9~-t9-t9-o9„9v-~9y-~-q99t-9q99t9-q99v9~-q99q99q99q99q99q99q99oC9q99rC|9q99o9Cr9|Cr9|Cq99rC|9rC|9rC|9pC{Cr9|Cr9|CrC|9rC|9pC{Cu=}CtH~9pC{Cr9|CpC{Ct9~9pC{Ct9~9rC|9t9~9t9~9t9~9v-~9t9~9t9~9v-~9t-9y-~-v9~-t9-v9~-y-~-y-~-{!-y-~-{!-{-!{-!{!-|!!|!!|!!|!!|!!}€!}€!}€!}€!}€!}!€}€!~|!!}€!}!€}!€}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-€{-€{-!{!-|!!}!‚,|!!{!-},‚!z,‡4t9ƒ‚l³“¹k¹”Ãi¹“­h¹”Ëg¿’Ëb˓Ãg˒¿f­•´f­•´`ª–¥a¥˜¥b ­a¥˜¥e¥— g™€hm•rj€˜ugkžkob•YjYžafkš`lb’ml™•¿g˒¿i¿”¹g­›¹iːÔk͑¿f­˜­e —¥k­‘³f´•­^²œ¥e —¥l¥’³h³•´c´š´f­˜­m«’­n«•¹f´•­j¥”¥u«Œªi¹”¿e¿–´k´±l¹“³iÒËg¿“¿k¹”Ãp¹˜¼q¼–Ãj¹–¹n¹›±r± ±s±£ªs±£ªr± ±tª¥ªr± ±z´ ­x´ž´}´›·|¼™·y¼˜À·˜·yÀ˜¼|À•ÊzЏʃɂЃɂÐyЋÐ}à€×ƒ×}æƒæ}׿€ææ€ææ€ææ€ææ€æ|æ†Ð€×ƒÐ|ʓÊ|ʓÊ|ʕÀyÀ˜¼x´ž´w­¢±tª¥ªp§¯¥p¥¯§l§¯§tª¥ªpªª§l§¯§i§²žbž´ŽdŠ´¡k± ­[~°|ciŸa ™¥b ›—g€™mlea¢kj™™´_²ž—b{¡kob¢VlU¤VakžŒ[ŒŸŒhk¡UjU¨NkN¬N_i¢iYu¦iSu©b€ž{]{¡~cާcŽ©k_i¢ia€›Œ]~œ~frœkmVœVl=œUgFœa]{¥{ci£UiFžLhU¥Uca rYˆ§{_xŸ€e¥— b—› eƒ–kik—mnb›FmF–ua¥™ `•™rmF“FrFš=nF¢U^r¡xUu©x`qœre{Ÿua~›rfrœknV”InV–Yc€–ª^œ‘ƒnU›InU›ItF™IhI—~X‹¡q`z–­i‘j¥’j€—ƒaržilb“bkŠ“¥\ª”œf€“jmVœVkFœUe€™—]~qbq—­iÓ¿e­“¼k¥“ŠkŠ“Šm{›klVœba€—•a~–ji€•bf`–€e€™—j€˜uhr—bku”`¼•ª`œuoV›FpI“Fjm­d´šrf`škgmƒ`ƒ–~jumqFŽ4u?“=oI‘m]Œ id_—bhr—Šeƒ“€ou…VsI’Iq9‰FiIši`_˜`l`–Yjbulm’bsF’?u4ˆ4o4V]iž_g`ugƒme`–`oV4t42kF•Vr;)t)=jF”FnIŽ=u4ˆ4nI”VkPˆVq9Œ2s4Ž=p9Œ=u4ˆ4z,‡4o4ViPˆ`i`ˆPnF4t24z,‡4n9Ž;u4ˆ4q9‹ImP‡blb“bmP‡Fu4ˆ4q4ŽFlb’m`~–ƒeƒutC}-{-!|!!|!!z)„!{-!|!!|!!{-!{-!{-€{-!{-!{-!|!!|!!|!!{-!{!-{!-|!!{-!},‚!x-„){-!{-‚,{!-{!-},‚!y-~-{,‚-z!„)x-„)y-~-{,‚-},‚!{!-~,…,y-~-{-‚,{-‚,y-~-y-~-w4ƒ-y-~-{-‚,y-~-y-~-{-‚,{-‚,{-‚,y-~-{6-z,‡4{,‚-{,‚-{-‚,x-„)y-~-{-‚,x)„-{!-{)‡,},‚!y-~-x)„-z)„!{,‡)|!!z)„!|!!|!!}€!~}!€}!€~~~~~~~~~~~~v-~9t9-t9~9q99q99v-~9v9~-q99t9~9q99v-~9v-~9t9~9t9~9v-~9q99v-~9v9~-q99v9~-v9~-t9~9v9~-q99v-~9t9-v-~9t9-v9~-y-~-y-~-t9-t9-t-9t-9y-~-t9-o9„9t-9t9-t9-q99t9-q99q99t9-t9~9q99q99q99q99q99oC9o9Ct9~9rC|9rC|9pC{CrC|9rC|9rC|9oC9rC|9rC|9pC{CpC{CpC{Cr9|CpC{CpC{CrC|9rC|9r9|Cr9|Ct9~9rC|9t9~9rC|9t9~9t9~9t9~9v9~-v9~-q99v9~-v9~-t9-y-~-y-~-y-~-y-~-y-~-{!-|!!{-!{-!|!!|!!{-!|!!|!!}€!|!!}!€|!!}€!}!€}€!}!€}€!~}!€}!€|!!}!€}!€|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{-!|!!|!!},‚!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!z)„!{!-|!!{!-|!!x-„)y-=pxŽ¥l¥’³o«“Ãg¿“¿f¿‘Òi˒Ãg¿“¿h³•´`ª–¥a¥˜¥b ›—e›—b—› j—™™l™™j€˜uer™€lu”mlb’mjbœ`gabgkžknu˜™h«“Ãf˒Ëi¿”¹lÓÃkԌÚhڎËkÔ¹i¹”¿hҎÔe˖´d´œ­g­›¹mƒ¿j¹•¥a¥˜¥i¥’­m³³i­‘­b­ h–p™—™f¥–¥a¥˜¥h ™™m¥–™d­Ÿ­d´œ­k­ ±n±›¹sª£±lª¢­tª¥ªtª¥ªsª£±tª¥ªu±Ÿ´u±Ÿ´}´›·|À—À|ʓÊzЏÊzЏÊyЋÐ~ЅȊÉz׃×}ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€æƒæ}׀Ѓ×zʏЇ×{×|ʓÊu͑ÊyÀ˜¼w¼›´u´Ÿ±u´Ÿ±sª£±tª¥ªp¥¯§l§¯§l ±§l ±§p¥¯§l§¯§h§§­m¥²žež¸˜h§§­e§¬¡o{™up†—ƒqbœYd€—¥`—œ~kk bmVœVnV§Ne`˜r]{¥{dr›rkk bci kZ{¦x_i¢i^iª‚aŒa”›€b~š€frœkpV£Vbk~`Œr_q¢alNŸFhL«NnF¢UZx¦{^i£{frœkbk¡{g€—€b€ž{gkžki{š a¥˜¥`”š`rIšVkUœFoF›VTˆ§‹^~ŸinU¢FmF“Fik™¥`—œq_g kb{ž€dŠ••d—›rjb™knlšVrIšVdb••Y”zpF“IsI’IoF›Vgƒ˜ \ŒŸqhu™´fÔ¼a¼•¼i‘o¥Ž‚pu›ldjƒ\”~dq™be`–`e`˜re ˜¹d œkfiœƒnš­e¿–´eª”Šmƒ—unb›VpF“Ibk~`{šƒd¿•¥e“¼j­’Šlƒ•Šlƒ“mlb’mb •ƒ]~qej“`hb—rlŠ’³h³ƒob•YoI‘mdr›rbj™inV”IkF•Vgkœc—qnV”IlF“bf€“jej“`q=”=kF•Vi€”ml`”It?‹9pI“bej“`nIŽ=s?’FgV˜r`z™VkUœFpF‰He`–`lIŽFq=”=mI˜knV–2s2Š9o=–;t42t4IeQ•`i`•Fs=Ž4pF“InF‹9r=”2w4Ž4r=“IgV–`mI†9u2)u4ˆ4s=‰9u4ˆ4v)‰4t4IgV–`h^ˆ`h`Iu4ˆ4u4ˆ4q=”=jF˜kd–¼bª’jw)‰)|!!|!!|!!z!„){!-z!„)|!!z!„){!-|!!z!„){!-{!-{!-|!!x)„-z!„){!-z!„){-!},‚!}!‚,{,‚-z!„){-!{-!y-~-z)„!{-!{,‚-{,‚-z)„!{-‚,y-~-y-~-{-!{,‚-{,‚-y-~-{,‚-{-‚,{,‚-z4‡,y-~-z4‡,{-6w-ƒ4{,‚-{6-~6…,w-ƒ4y-~-{-‚,y-~-{-‚,{-‚,{-‚,x)„-{-‚,x-„){-!x)„-z!„)|!!},‚!|!!|!!|!!z)„!{!†!|!!{!†!|!!}€!~~~~~~~~~~~~v-~9v-~9t-9v9~-q99v-~9q99v-~9t9~9v-~9q99t9~9v9~-q99v9~-q99v9~-q99v9~-q99v9~-q99v-~9v-~9q99v-~9o9„9v-~9t-9t-9o9„9t-9y-~-t9-y-~-t9-t9-t9-t9-t-9t9-t9-t9~9o9„9t-9o9„9v-~9o9„9q99q99oC9t9~9o9Cq99o9Cq99rC|9oC9r9|Cr9|Cr9|CpC{Cr9|CpC{Cr9|Cr9|Cr9|CpC{CrC|9uC}=qC}Hr9|CrC|9rC|9rC|9rC|9t9~9t9~9t9~9t9~9q99q99q99v9~-v9~-v9~-y-~-v9~-t9-y-~-y-~-y-~-y-~-y-~-{!-{!-{!-|!!|!!|!!|!!}!€}!€}!€~}!€}€!|!!~|!!}€!}!€|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!{!-{!-{!-{,‚-nH‡m™–¥g¹˜´e³’Ãg˒¿g¿“¿g¿“¿g´—¥a¥™ c—›—g——ŠaŒ›€e›—l™™e—›e —¥h”€i€•ŠiŠ•€dr›rfkš`bk~hr˜ƒl™™e´–¿f˒ËlÓÃmÑÍnډÜkڌÔlÓÃm͌Ún܉ÚiԐ¿j¹–¹kÎÚjڊÚgÖ´d­Ÿ­h¹”ËfːÒi¿”¹d­Ÿ­l¥’³i¹”¿j¥”¥_ ¢¡jƒ™q•§§p§ªªl­¢ªp§ªªt¥ªªpªª§tª¥ªtª¥ªr± ±u±Ÿ´w´›¼t¼–Æ|ʓÊzʏÐyЋÐyЋÐyЋÐ|ʓʀЃ×yЋÐyЋЀЃׇ×{ׇ×{׿€ææ€ææ€ææ€ææ€ææ€ææ€ææ€æƒ×}æ‡×{×yЋÐzʏÐzʘ´xÀŽàyʖ¼yÀ˜¼v¼™¼x´ž´x­¤ªt¥ªªvª¡´x´ž´r± ±s±£ªtª¥ªtªª¥pªª§l§¯§q¥± m ³ m ³ l ±§l§¯§l§¯§l§¯§až´‚]’´•^޳‚`i¤alV¤UeN§ih™™ Z‚­xXˆ¦¦_—Œb€š~^{£i`a¤i`a¤ifr›_—œ”f~Ÿbnb›VkFœUca rXx¶|ci£UgU§LhU¥UeU¥ack ici€_—œ”g›j€˜uju›kgaœFpY–ƒd “–`~¡anI›UtF FkFœUar {[x¥ifkš`ca rn™•Ãb¿˜~b`œifkœre– b–”~qYœbjrŸVtF™IcV™~U‹ zea¢kck ier™€k«™­eŠ›ifiœƒj³‘¿`¼•ªm”™q™˜{ob•YlV k\qžq`qœ—f™›”e—“–j¥”¥l¥•ƒol™bjk›u]¥•œ`Œ—jiVžUpF“Ilb“Š`ƒ–~^iŸ~b¼—´j³‘¿e¼“mu˜umkšYsI’I]q~]i–qg¥‘ƒhŽ–j¥’o€“bsY”Ir=“Ia`šq]_židu–ifkœrjumpu—YpI“Fs?’Fdm—qe`–`gQ•Vh`“mi€•bsI’IoF”=m=•Ve`–`jV–VkV•bhr™uom‘Is=Ž4|,‹?`Q—_`_˜`hb•`e`–`qFŽ4q4;v4‰)x)‹!p4ˆIjV–VlIŽFq9‹IiPˆ`lQŽ4t42t42s2Š9nF‹9q;4q4ŽFsNPjVIrFŽ){)‡,p=Œ9gV–`l`ŠHjIVuFŒ6lFŽIu=“?t6†Ih€”­a­’œrP‚)z!„)|!!{!-|!!|!!|!!|!!{-!|!!x-„)|!!x-„)z!„)z!„)x-„){!-|!!},‚!{-!{-!{-!x-„)|!!},‚!{-!~,…,{-!{,‚-{,‚-z)„!{,‚-{!-{,‚-x-„){,‚-x)„-{,‚-{-‚,y-~-{-‚,{-‚,y-~-~,…,{-‚,y-~-{,‚-{-‚,y-~-y-~-y-~-{,‚-{,‚-z4‡,{,‚-{,‚-{-‚,{-‚,{-‚,x)„-{,‚-{,‚-{!-}!‚,}!‚,|!!{!-z)„!z)„!|!!|!!}!€}!€}!€}€!~~~~~~~~~~~~t9-t9-q99v-~9v9~-q99v-~9q99v-~9t9-t9~9t9-q99t9~9v-~9v9~-q99t9~9v-~9t9~9q99v-~9q99t-9v-~9v9~-v9~-v9~-t-9y-~-t-9t-9t-9t-9t-9y-~-t9-t-9t-9t9-q99t-9t9-v-~9q99q99o9„9t9~9q99o9„9q99oC9q99rC|9rC|9r9|Co9Cr9|CrC|9oC9rC|9rC|9pC{Cr9|CpC{CrC|9qC}Hr9|Cr9|CpC{Cr9|CuC}=pC{Cr9|Cr9|Cr9|Ct9~9rC|9t9~9t9~9t9~9q99v9~-t9~9v-~9y-~-v9~-t-9y-~-y-~-y-~-{-!{-!y-~-|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!~}!€~|!!~}!€}€!}€!}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!{-!|!!|!!}€!|!!|!!|!!|!!{-!|!!|!!|!!|!!{!-|!!|!!|!!{-!|!!|!!|!!{!-|!!|!!{-!|!!|!!{-!}!‚,},‚!y-NrА¥j¥•¹iÓ¿j³‘¿b˓Ãd¿”¼i­‘­g¥——j’Šgƒ‘Šdƒ›ŒgŠ——aŒb—› m™”l³’¥j¥’jŠ’h”€fujfu“rgu‘€g›e —¥i«”¼b¼—´h´•³r´˜ÃhÑÒg˒¿oÓÆm͎ÔjڊÚhґÃk¹”Ãm͌Ún܉Úk͑¿l³“¹kÐÔjڊÚm͑Ãi¿“ÃkÐÔhڎËg¹›­a­¤¡iž²§l ±§l§¯§l§¯§l§¯§l§¯§tª¥ªs±£ªr± ±r± ±t±¼u±Ÿ´x´ž´r± ±tª¥ªtª¥ªtª¥ªx­©¥x­©¥z­ ´|­£­z­ ´·˜·|À—À|ʕÀ|À—À|À—À|ʓÊzʏÐzʏÐzЏÊyЋÐzʏÐzʏÐyЋÐ|ʓÊyЋÐzЏÊzЏÊwʓÆrƒÆw´›¼s±£ªp¥¯§n ´™n™´ q ±¥r± ±z­ ´u´Ÿ±u±Ÿ´s±£ªs±£ªpªª§pª¬ n ´™n™´ n™´ iž´ m ³ l ±§l§¯§e¡¬§i ´že˜¼’a‚´žg¹˜´_Œ¢agkœe›—g——Šf{¤blV¤Uia¤Vbk~[ŒŸŒfr UjU¨NoNŸIgV¢i_i¢i[g£ick igb¢i`r§‚^{£iea¢kg€™[•š”b~kgkžkql VhF—rWŒ¢‹]x§anF¢UiLžFnVu\Œ¢{Xu£~d­—a › g›Œ­l¥•ƒnlšVsY–Y\Œ›•`•™rlQšFoF”=qFšFfU r[~¢x`xœb—™¥e¥— qŽŠm€—YsY–YeŠ”ª^¥›”`~“rpY•FkUœFbXœr[x¥iakž”i¥’­k³‘­h­Ž–o™—ƒmm™bsI”YZ~œz\qžqlu”mdVœikŠ•¹j­’Šjk™bsƒ‘Šf­•´^œ‘ƒnV”IqFšFkU¤b^r¡x_i¢ii–¥i­’¥j¥Š‡kb•VvI’?q=”=biœ`_i¢if›’cƒƒe~˜bnI”V{M’?s9‰=e`–`e`˜rdr›rar›~lm’brI“=y6†4l=œU``˜_ik—mcu“~jubpI“Fu4ˆ4p2”FdVœi_i–rf€“jhb•`u4ˆ4u2)t)=u2)p2”FmF“Fq9‰FlI”`iPˆ`oP‡=u4ˆ4s4Ž=v4‰)u2)q4ŽFu9~Ve`“jh`Is=Ž4v)‰4r)ŽFn9‹Ft9‹?lIPhb•`nHŠVs9‰=u=“?gb‘ƒ`ª–¥e•9|!!z!„)|!!{!-z!„){!-|!!|!!{-!|!!{-!|!!{!-z)„!|!!|!!x)„-|!!},‚!z)„!{!-|!!y-~-{!-x)„-|!!{,‡){-!{-!{-‚,{-!{,‚-x)„-y!„4{,‚-{,‚-{!-x)„-~,…,y-~-y-~-w4ƒ-w4ƒ-{6-{-6{,‚-w-ƒ4y-~-{-‚,{-‚,w4ƒ-z4‡,y-~-w-ƒ4{-‚,y-~-x-„){-‚,x-„)x-„){-!{,‡){-!{-!y-~-|!!|!!},‚!z)„!|!!|!!{!†!}!€~}!€~~~~~~~~~~~y-~-t9-t-9y-~-q99t-9t9-v9~-q99q99v9~-q99v-~9v-~9v9~-q99q99t-9v9~-v9~-v9~-t9~9v-~9q99v9~-t-9y-~-t9-v9~-t9-t9-t-9y-~-t9-t9-t9-t9-t9-t9-y-~-t9-t9-t9-q99t-9q99q99t-9q99q99q99o9Ct9~9q99q99rC|9o9Cr9|Cr9|Cr9|CrC|9pC{Cr9|CpC{Cr9|CrC|9pC{CpC{CpC{CrC|9pC{CrC|9pC{Cr9|Cr9|Ct9~9rC|9t9~9rC|9q99t9~9t9~9t9~9v-~9v9~-t9~9v-~9y-~-v9~-y-~-y-~-y-~-y-~-{-!y-~-|!!{-!{-!|!!|!!|!!|!!}!€|!!}€!|!!}!€}!€}€!}€!}€!}!€}!€|!!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!{!-|!!|!!|!!|!!|!!{-!{-!{!-|!!|!!|!!|!!{-!},‚!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{-!{!-z)„!{-!{-‚,s=ŠŠj™™´o«“Ãg˒¿g¿“¿bÓ¿c¿”ªb¥™—cŒ™Šg€—€h™™ j—™™j¥”¥j—™™j¥”¥h›Ž¥i¿”¹i­‘jŠ’e—™€d~˜Š^ ™•m™–¥i­˜³lÓÃd˓¼b´™¥j¥”¥m³³b¼—´h´•³n±›¹lƒËf˒Ëi¿”¹p¹˜¼m͎ÔkڌÔkÔ¹t«–¼iːÔkڌÔk͑¿t¼–Æm͎ÔkԍÔe¿–´l§¯§l§¯§l§¯§l§¯§pªª§tª¥ªsª£±tª¥ªp§ªªu¥®¥p§¯¥q¥± j™º’o‘ºŠm’¹‘m‘¹’r‘µ™u‘´‘r‘µ™p™µ™u¥®¥u¥®¥tª¥ª|­£­·—À·˜·}·›´­ž·z´ ­xª¤­tª¥ªtª¥ªr± ±p§ªªl§¯§l§¯§l§¯§tª¥ªtª¥ªu±Ÿ´w¼›´t¼–Æv¼™¼wʓÆ|ʓÊt¼–ÆyÀ˜¼rƙ±pªª§p¥¯§q¥± tª¥ªsª£±u±Ÿ´u±Ÿ´u´Ÿ±u´Ÿ±r± ±tª¥ªp§¯¥l§± p™µ™n™´ n™´ p™µ™kžµ™l ±§l§¯§i§²žb˜·Žbž¯¡^¡¯Ž_{¥ajU¨NpF¦Nci kY~¢`i¤ahU¥UeU¥a]{¬‚Yu¦i^i£{aƒ¡Žb€š~b~kc`žalU¤V^k£Z~£ˆhr—bgkžkhkšViV¤a]{¥{Zx£qei›bkb ke›´a­ž~^i qj¥”¥aª—´f¥•Šnm”{om“YqFšFar›~[x¥ikUœFnF¢UhVškc€¥ŽZˆ¥ihr˜ƒi¥’­cÒ­lƒ“mn{”mrVšIcr•ƒU‹ zcr akFœUhVškbk¡{aržijb™kn‚Œ­k³‘­f¥•Šhu™rqYVnI”Vbkžq]q~i­’¥b•”d “–p™—™lƒ•boY•bd› \~•qnV”Igabim”€`Œrei›blb“Še¥”ªa•—€sV”MrI“=lF“bY~žo^q ii€•Še€“ƒfujzI‹ErI“=r?“bbkœ_g`–Vi`—uhu‹ulj“Yw9ˆ?r=”2n=”b^g`djƒc€‘rhm“`u=Š=q=”=pI“b\~•q^oŸkhmje`–`t42r);n=’md_™;p=Œ9r;)t24hI`e`–`lQŽ4s=Ž4s=‰9v4‰)v4‰)u4ˆ4jV–Vg`–VmI†9v)‰4p;‹9nF‹9w)‰)u4ˆ4iF•`mVŠ`iPˆ`s=Ž4w4„=iVua•ŠŒ`•–`y-~-|!!{-!|!!|!!|!!{!-{!-|!!z)„!|!!{!-|!!|!!{-!y-~-{!-{!-z!„){-!},‚!{-‚,|!!{-‚,{!-{!-z)„!{!-}!‚,{-!{,‚-{-!{,‚-{,‚-{-!{-‚,{-‚,x-„)y-~-{,‚-{,‚-{,‚-{,‚-{-‚,z,‡4w-ƒ4w-ƒ4~,…6z4‡,y-~-{-‚,y-~-{,‚-{,‡)y-~-z,‡4y-~-{,‚-{-‚,y-~-~,…,{-!x)„-z)„!{,‡){!-|!!|!!|!!z)„!|!!}€!}!€}!€}!€~~~~~~~~~~~t-9v-~9t9-q99t-9v9~-q99v-~9t9-q99t9-q99q99t9-t9-q99v-~9v9~-q99t-9v-~9t9-v9~-y-~-t-9v-~9t-9y-~-t9-t-9t-9y-~-t9-y-~-y-~-y-~-t-9y-~-t9-t9-t9-t9-o9„9t-9q99v-~9q99o9„9o9„9t9~9q99q99o9Co9Cr9|Cr9|Cr9|Ct9~9o9CrC|9rC|9rC|9r9|Cr9|CpC{Cr9|CpC{Cu=}CuC}=pC{CuC}=pC{Cr9|CrC|9r9|CrC|9rC|9oC9t9~9rC|9q99t9~9q99t9~9v-~9y-~-v9~-v-~9y-~-t9-y-~-y-~-y-~-y-~-|!!{-!|!!|!!|!!{-!|!!|!!|!!}!€}!€}€!}€!|!!~|!!~}!€|!!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!{!-|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!},‚!},‚!|!!|!!|!!|!!|!!|!!{-!|!!z!„)|!!{-!|!!{-!}!‚,y-~-v-~9jml«“¿lÓÃg˒¿g¹˜´f­•´eª”¥c—•ƒi—Šd€™ m³³k«–´d­Ÿ­j¥”¥h³•´k³‘­a¼•¼d´‘›_Œ—ƒ`ƒ–~e”¥f­˜­g­›¹lÓÃkԌÚiԐ¿f¿™­h­’¿g¹˜´e¥”ªa¥™ ršŽ«l³“¹b¼—´d´œ­m³³i¿“Ãg¿“¿h´•³j¹–¹k¹”Ãb˓ÃoÓ«n±›¹lÓÃiÓ¿s±£ªl§¯§l§¯§l§¯§pªª§p§ªªl§¯§l§± k™µžj™º’iŠ¿ŠjŠÀ…k…Áxk…À…k…À…o…¸xo…¸xt‘²xu‘´‘u‘´‘r‘µ™u•§¥~¥­­ž··ž­}·‘Ð|ʕÀÀ—··ž­|­£­u¥®¥r¥²™q¥± p™µ™n ´™fžµžp™µ™kžµ™fžµžiž´ i ´žiž´ iž´ l ±§l§¯§l­¢ªr± ±w´›¼tЍÍ|ʓÊtƖ¼t¼±l­§¥l§¯§i ´žm ³ l§¯§u•§¥tª¥ªsª£±u´Ÿ±r± ±u´Ÿ±tªª¥tªª¥p§¯¥q ±¥p™µ™p™µ™n ´™m ³ m ³ l ±§i ´žg’¿Šc‚´jaxµxX|´g[x¢~^¢ˆbk¡{^£•aržiea¢kgkš€Zˆ£~f{¤biUžVnU¢Fjb™kZ{¦xck ilU¤Vea¥Ubk¡{[~¢xZx¦{[ŒŸŒ_Œ—f—–­o«•ƒjk™bik˜Š_ª•ª[œ˜~jk™bnV›FrFš=`k£xTu¥o`qœr`qœrb{ž€j€—ƒc€imYškjŠ’­Z²šœeƒ–kmu˜uoV›FmI˜kZq£x]q~]~œ~a€›Œi€•bhu™rsY–Yib–^ ™•dƒ’`tI™FkFœUhb——_ œ~ci kk­‘³i­‘­g¥‘ƒnm”{mk˜IrFš=cV™~]~qer™€`~–ƒb•”lƒ“msY–YsI”Y_ƒ~^z–jfVžajV–Vhk—\•šqdiœVsY”Ijmufkš`oF”=mF“FgV˜rfk™QpI“FpI“bdjjg`–Vs=Ž4r=“Iar›~aqš`kV•bfujhb•`s=Ž4o=”Fgkš€`ƒ—qkV•FnI”Ve`–`mF•;pF“Ie`˜rhr™;t42w)‰)u)2iF•`kPˆVnIŽ=sF‹NkV•FqFŽ4s2•2x,=nF‹9nF‹9q9Œ2r=‰HqVNkV•Fz4‡,z4‡,qF‰Ve`–`d_‘Ir9†4v)‰4r?Ie`–`c`Œ…g–‹ux9!z)„!{!-{!-|!!|!!|!!{!-{!-z!„)z!„){-!{!-z!„)z)„!z)„!{!-|!!{!-{!-|!!x)„-z!„){-!{-!y-~-{-‚,{-!{!-{-!x)„-{,‚-{-!{-‚,{-‚,y-~-{,‚-{,‚-y-~-y-~-y-~-{-‚,y4†6y-~-y-~-{,‚-y-~-{,‚-{-‚,w4ƒ-{6-y-~-y-~-~6…,x-„){,‚-y-~-x)„-},‚!x-„){-‚,{-!{,‚-|!!},‚!x)„-|!!|!!|!!{!†!|!!}€!~}!€~~~~~~~~~~~t9-t9-t-9y-~-v9~-v9~-t9-q99v-~9v-~9v-~9t9-v9~-t9~9q99v9~-v9~-o9„9v9~-t9~9t9-t9-y-~-q99q99y-~-t9-o9„9y-~-t9-t9-t-9y-~-t9-y-~-t-9y-~-t-9t-9t-9t-9t-9v9~-q99v-~9q99t-9v9~-t9~9q99q99o9Ct9~9t9~9q99r9|Co9Cr9|CrC|9r9|Cr9|Cr9|CpC{CpC{Cr9|CpC{Cr9|CuC}=pC{Cr9|CrC|9pC{CrC|9pC{CuC}=rC|9r9|Ct9~9t9~9t9~9t9~9t9~9t9~9q99v-~9q99v-~9y-~-t9-y-~-y-~-y-~-y-~-{!-y-~-{!-|!!{!-|!!|!!|!!|!!|!!}€!{€-}€!}€!}!€|!!}!€}!€}!€}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!|!!|!!|!!|!!{-!|!!|!!{!-|!!{!-|!!|!!|!!{-!|!!|!!},‚!|!!|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{-!{!-{!-w-ƒ4w4Œbi—¥k¿‘ÍfːÒg˒¿f¼”¥a¥™ b ›—l™™i¥–l¥’³g˒¿g¿“¿i¿”¹e­“¼g¿“¿f­•´i­‘­b¥™—eƒ“€fr“uaœ’­f¼–¹j¹–¹oƐÔn܉ÚmԎÍk¹”ÃiːÔg˒¿d´œ­k­™«i¹”¿g¹˜´d­Ÿ­g¥”³i¿”¹g¹˜´d­“ªm­˜±l¹“³h³•´g¹˜´g¥™­g¥™­r± ±l´ ªl§¯§l§¯§l§¯§l§± l§¯§j™¸˜m‘¹’g…„k…ÁxjxÂxjxÂxjxÂxjxÂxox¹xtx¯xtx¯xtx¯x{ožz}zžz€“‡‚ŽŒƒ‡‹Œ› …­‡£…Àˆ»Ê‡×‡×{ׄɆÊÀ—·~¥­w›¥¥u•§¥r™µ‘r™µ‘m’¹‘m’¹‘e’¼˜e˜º˜e˜º˜e’ºže˜º˜j˜¸™e˜¸žež¸˜e˜¸že˜º˜e˜º˜fžµžp§ªªl§¯§lª¢­u±Ÿ´u´Ÿ±x´ž´s±£ªo±¨§pªª§l§± m ³ p™µ™r‘µ™p§¯¥p§ªªtª¥ªsª£±u±Ÿ´r± ±s±£ªpªª§q¥± m ³ m ³ j™¸˜j˜¸™e˜º˜i ´ži§²žfžµže˜º˜b¡¯ž]Œ©Ža~›rhb¤apV£Vca r^r¡x`i¤ajU¨NhU¥Ue`«i[i¥x[x¢~fަuci kcާ_€Ÿx^r¡xa€›”b—› j’Šmƒ—umlžkkY™rW”¡‹X‹¥{l`–YkS¤Fea¢kar {_i¢i`{šƒe›—h–ސik—mju›kqYVdm“•W•‹kr™YnV”IjN¡Vc—~^q iaižri—¥c›‘ lšVlb“boV›FmI˜k]~q_i¢ii€•bcXžkh€”­c´”ƒea¥Ujb’d­“ªe–ƒnV”IqFšFr=“Ifkœr_i¢i`Œ“›i­’¥i­’¥g€—€qbšIoF”=db™q^i q^ƒ‘œ`ƒ–~cƒƒlŠ“bnY–Vu=Š=dVœiej“`gQ•VjVœ`hm“`qV”?sF’?m=•Ve`–`c_˜VnI”Ve`˜rgu‘€pb“IpI“Fe`–``_˜`eQ•`gabdr›rjm“Vs=Ž4o4Vb`šXdr•jfkš`lb“boV4t24v4‰)v)‰4iQ”FjF”Fn9‹FlHŠ`h`Iq;4u4ˆ4r4†9t24u)2t4IlHŠ`hVŒ_jPˆFs2•2u4ˆ4kF•Vi`ˆPi`•Fq;4t24q;4w6Œ=hF‘ƒ_¼”ÃbœIz)„!z!„)|!!|!!{!-z)„!{-!|!!{-!{-!{!-{!-z)„!{!-{!-z)„!x-„){!-z)„!{,‚-|!!},‚!{!-x)„-},‚!{-!y-~-{-!{)‡,{-!{-‚,{!-{-‚,{-‚,x-„){-‚,y-~-y-~-{,‚-{,‚-{6-y-~-{-‚,w4ƒ-{-6w4ƒ-y6†4{-6y-~-{,‚-~,…6~,…,y-~-y-~-y-~-{,‚-{)‡,y-~-{,‚-{!-{!-{-!}!‚,{!-|!!z)„!z)„!{!†!|!!}€!}€!}!€~}€!~~~~~~~~~~y-~-t-9y-~-t9-t9-t9-q99v9~-t9-t9-t9-v-~9v-~9t-9v9~-t9-v9~-v-~9t-9y-~-v9~-t-9v9~-t9-y-~-q99y-~-y-~-t9-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-t9-t-9t9-t-9t-9t9-t-9v-~9o9„9q99o9„9o9„9r9|Cq99q99oC9t9~9rC|9r9|Ct9~9r9|CrC|9rC|9rC|9oC9rC|9pC{CpC{CmCIr9|CpC{CpC{CpC{CuC}=uC}=uC}=r9|Cr9|Ct9~9r9|Cr9|Ct9~9t9~9t9~9t9~9t9~9q99v-~9v9~-v9~-t-9y-~-t9-y-~-{!-{!-{!-|!!{-!|!!|!!{!-|!!|!!|!!|!!}!€}€!}€!}€!}€!}€!}€!|!!}€!}!€}€!|!!}!€|!!|!!|!!{!-|!!{-!|!!|!!{!-}€!|!!|!!|!!{!-|!!{-!|!!{-!|!!{-!|!!{!-}€!{-!|!!{!-|!!|!!|!!{-!|!!|!!|!!|!!|!!|!!|!!{!-{!-|!!|!!{-!|!!|!!|!!},‚!}!‚,w-ƒ4pV‰Šl–«hÑÒeҏÒg¿“¿`ª–¥gŠ‘ƒe–“—e–’´i¿”¹j³‘Ëf˒ËiÓ¿g¿“¿b¼—´d¿”¼f´•­a¥™ f›’]~œ~i€•Šg¥—´b¼—´k­‘³lÓÃkԍÔkԐÃlÓÃm͌ÚhڎËi¿”¹oÓÆmԎÍkÔ¹g´˜¹f¿‘ÒkԍÔkÔ¹d­Ÿ­j¥•¹j¹–¹i³˜­a¥˜¥j—™™l§¯§l§¯§pªª§l§¯§l§± m ³ r™µ‘fŠÂ„g„ÃxbzÈqbqÊqhiÂxiq»`ii¼`r`¬Zzg`|`šo€h”z†|„|‰~’Œ˜|˜£{£Œ¬z¬Ž²y¬»x»ÁwÁŠÉz׿€ææ€ææ€ææ€æ‡È|¬†¥‰˜}¥™›~›–‡x‘¦†u‘´‘oŠº‘iŠ¿ŠiŠ¿ŠgŠ¿’e’¾’e˜º˜e˜º˜e˜º˜e’¾’e’¾’e’¼˜e’¾’b޹’e˜¼’e˜¸že˜¼’e’¼˜e˜¸že˜¸žiž´ iž´ p§ªªsª£±u´Ÿ±r± ±t¼±l§¯§l§¯§n ´™j™¸˜p™µ™n™´ p¥¯§t¥ªªw­¢±u´Ÿ±v´¡ªtªª¥u¥®¥m ³ p™µ™j˜¸™r‘µ™e˜¼’e’¼˜e˜¸žfžµžg˜½Š\ŒÃ|kjµ`eU¥aX|´g`i¤alLžIeU¥a`k£x]{¢q[x®Žc—›—b€š~g€™frœkfažVkb€^——œa”žkmVœVj`œVgaŸuY~¢Y¢~b¥™—frœker™€bœ~diœVgaŸue– ^¥—•mkšYnb›VqFšFhI›{Xx¨x`qœ—h—ker™€b­›¥e`–`mVœVjŠ’­d¥‘–fƒ“VqYVmF“FoF›V\qžq]q~f¥–¥e€“ƒeƒ“€o€“bnV”IpF˜mb€š~]~qmF“FkFœUf`™a–•Œ\qœ_ik˜Šg³“¼\ª”œnuYpI“Fr=“Ia`šq^q i^Œ›¥e¥”h”€kb•VvI’?q=”=iF•`c`žaeb›ihb—rh€—VsI’IwI‰=o=”Fe`–`e`“jd~–mg€‘ukr™YrI?s=Ž4gV–`b`’ig€—€cuŠrlj“YvI’?u4ˆ4m=•V`_˜`c~—erbbi’`r9†4u2)h;–QnF4u4ˆ4v)‰4t4Ie`–`oHƒIsF‰-s4Ž=s=Ž4v4‰)x2,p4ˆIgV–`i`ˆPjQ”=v)‰4u4ˆ4o=”FlIŽFkIˆIsIˆHrN†ItI†6y?‰=p4Œmf›¿`ª‰‹s9†)|!!|!!{-!z)„!|!!z!„){-!|!!{!-z)„!|!!{-!{-!|!!}!‚,z)„!{-!{!-z!„)x-„)y-~-}!‚,|!!{,‚-{,‡){,‡)~,…,y-~-{,‚-x)„-{-‚,{!-{-‚,{-‚,y-~-~,…,{)‡,y-~-z6‡)y-~-{,‚-w-ƒ4y-~-{,‚-w-ƒ4y-~-{,‚-w4ƒ-z4‡,w-ƒ4w-ƒ4{,‚-z4‡,{-‚,x-„)y-~-{,‡){-‚,{,‚-{,‡)},‚!},‚!z!„){!-}!‚,|!!|!!|!!|!!}€!}€!~~~~~~~~~~~~t9-t9-t9-t9-t-9v-~9y-~-t-9v9~-t9-v9~-v9~-v9~-q99t-9v9~-q99t9-t9-t9-v-~9t-9t-9y-~-t9-y-~-t-9t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t-9y-~-t9-y-~-o9„9t-9v-~9q99q99t9-q99t9~9t9~9t9~9q99r9|CrC|9rC|9t9~9rC|9rC|9rC|9rC|9rC|9mICpC{CpC{CpC{Cr9|CpC{CpC{CpC{Ct9~HqC}Hr9|CpC{Cr9|CrC|9rC|9pC{CrC|9t9~9r9|Ct9~9q99t9~9v9~-q99v9~-t9~9v-~9y-~-y-~-y-~-y-~-y-~-y-~-{!-{!-|!!{-!{!-|!!|!!|!!|!!}!€|!!|!!}€!|!!}€!}€!}!€}€!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-}!€{-!|!!|!!|!!|!!|!!{!-|!!|!!|!!{!-|!!|!!{-!|!!|!!|!!{-!|!!|!!}!‚,|!!|!!{-!|!!|!!|!!|!!|!!{-!|!!{-!{-!y-~-{!-{!-w4„=hƒ›­i¹”¿hҎÔeҏÒh¿’­d¥™gƒ‘Šj¥”¥h¥“Ëg¿’Ëi˒ÃlÓÃf¹–¼i¿”¹b¼—´f­•´`ª˜ cŠ™”[ƒš‹g€‘–aª—´h³•´f­˜­g­™¥l³“¹g¿“¿j¹–¹n¹”ÆeҏÒfҐËkÔ¹vƏÐkڌÔlÓÃoÓÆoԊàn܉Úfґ¿j¹–¹k¿‘Íf˒Ëd´œ­_ ¢¡b¡¯žl§¯§l§¯§l§± i ´že˜¼’jŠÀx^zÏzfqÂicqËihhÂ`mZ¹ZpZ±PuP¦Z`hˆrƒ|Œ‰}˜£{£Ž²x»²xÁŒÉyɊÉzׇ×{׃æ}׃×}ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€æ…×}Ȋ»{ €•Ї€‡“}zžz}zžzox¸…tx¯xd„Å„f„Š`ŒÃŒe’¾’c’ÀŒe’¾’`Œ»Žb’¹Ž`Œ»Že˜¼’e’¾’e˜¼’bŽ·˜bŽ·˜e’¾’e˜º˜e˜¼’e˜¼’e’¾’e˜º˜e˜¸žl ±§p§ªªo§¨±w´›¼r± ±l­¢ªo±¨§l§¯§n ´™iž´ mžµ‘n ´™m ³ u¥®¥p§¯¥tª¥ªtªª¥tªª¥m ³ i ·˜u‘´‘oŠº‘m’¹‘e’¼˜gŠ¿’e˜¼’e’¾’`Œ»Ž\‰¼‚X|Ä|`a¤i]{¡~Zq±|^i£{i€•Š\Œž~b{¡kha¤bia¤VhVšk\~žŒZˆ¥ihU¥UiV¤ad€–¼[¥ ˆY¦{g¿“¿a”›€e~šuhr—blV¤UnV›b[Œž”\Œž~l`–YkUœFtF™Ibk~]k¤ug€•¿fÕ¥a–‘•lŠ–unYžUsI’Idb••\”~_q¢aj=žSqFšFdVœi^{£ici kj’Š^•™ g—•miVžUsI’ItF™I^i q^i qaj–~bkžqiuސo™—ƒlk VsI”Ya’œ]•™~i`•FqFšFpI•u^ª™~]o›`gmƒe –_ƒ~nV”Iq=”=o;–=lU¤VfX˜FpF“IiVui€•bsFŠ=q=”=o=”Fcaž`b_œklm”uc~“uij‘Fw?4t4I]j˜o^i qdr•jdr›rlbŽIw6Œ=t42gV˜raqš`lb’mhb•`e`–`qFŽ4o=”FcV™~fXš;u2)w)‰)o=”FjIVmF“FoF”=lFŽIq9‰Ft=)v4‰)r=“IiPˆ`g`–Vo9„9x,=p9Œ=r9†4r9†4lFŽIlb“bm`ŠVk`•=s4Ž=m4`f€›`ª–¥pu„-{-!x-„)|!!{!-|!!{-!|!!x)„-|!!{!-{!-|!!{!-{!-{!-|!!},‚!{-!{-!},‚!{-!},‚!y-~-}!‚,{-!{-!{!-}!‚,{-!{-‚,y-~-{)‡,{-‚,x)„-{,‚-y-~-{6-{,‚-y-~-{-6z4‡,y-~-z4‡,y-~-{,‚-y-~-w4ƒ-z4‡,{-6y-~-y-~-{-‚,{,‚-w-ƒ4~,…,{-‚,y-~-x)„-{,‡){-!{-!{-!{-!},‚!z!„)|!!z!„)|!!|!!|!‡}€!~}!€~~~~~~~~~~t-9t-9y-~-t9-t9-t-9t-9y-~-v9~-v9~-t-9v-~9t-9t-9v-~9t-9y-~-v-~9y-~-t9-t9-t9-t9-t9-t-9t-9y-~-t9-y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t-9t-9t-9y-~-v9~-o9„9t-9t9-t9~9v9~-o9„9q99q99r9|Cq99q99rC|9rC|9oC9pC{Cr9|CrC|9pC{Cr9|Cr9|CpC{CpC{CpC{CpC{CpC{CpC{CpC{Cw9=rC|9tH~9rC|9rC|9rC|9t9~9r9|Ct9~9t9~9r9|Cr9|Ct9~9t9~9v9~-t9~9v-~9y-~-v9~-t9-y-~-y-~-y-~-{!-{-!{-!{!-|!!|!!|!!|!!|!!|!!|!!}!€|!!|!!~|!!}€!}€!|!!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!|!!|!!|!!|!!{-!{-!|!!{!-|!!{-!|!!{-!|!!{!-|!!{!-|!!|!!|!!|!!{-!|!!~,ƒ|!!{!-|!!|!!z)„!|!!|!!|!!z)„!|!!z!„){!-{)‡,t-}bg–¿g¿’ËfҐËg¿“¿e­”¥g–‹–kŠ“¥g¼“³j³‘¿fҐËg¿“¿b¼—´m­’«i­‘­i­‘­a¥˜¥g–‘€]~œ~hr•mi–‘¹f˒ËbÓ¿j¹–¹g¿“¿j¹–¹b´™¥e¥”ªo«’³g¿“¿g¿“¿n¹”ÆqƑÍiԐËkÔ¹oÓÆnԋÜq܉ÜiԐËrƒÆm͎ÔiԐËm¿™±a­¤¡l§¯§l ±§i ·˜g˜½Šd„Å„_qÓqeiÉhdhÏhmZ¹ZmZ¹ZsP¨P{Zœ`…h‡|Œ‰}˜£{£²y²Ž»xÁÁwÁŒÉyɊÉzׇ×{ׇ×{׃×}æƒ×}ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€æ†æ|Ɇº~ ‰‰€|€r“z|`šotx¯xtx¯xgxÄgxÄb„ÄŒ`ŒÃŒe’¾’bŽ·˜e’¾’e˜º˜b˜·Že˜¼’b޹’e˜º˜e’¼˜ež¸˜e˜º˜cŒÀ’cŒÀ’`ŒÃŒ`Ž»ŒcŒÀ’e’¼˜e˜¸žj™¸˜e˜¸žiž´ n™´ tª¥ªpªª§r± ±s±£ªtª¥ªl§¯§l ±§fžµžm‘¹’m‘·˜p™µ™p¥¯§tª¥ªpªª§p¥¯§m ³ p™µ™r¥²™q~¬ŠiŠ¿Še’¾’gŠ¿’e’¼˜e˜¼’bŽ·˜`Ž»Œ_‚¬aba¦ajVŸraˆ¡u`x£kgb¢ihb¤ahb¤aY{§ˆ]~œ~c—›—b{¡kdŒ™Ãd¹™~_i¢ii—¥c—•ƒ`ŒrlU¤VpF“IqFšF^r¡xZq£x`i¤amVœVca re›—b~kmk“ši­’¥e¥— lj‘InU›Ip;œFhI›{[x¥i_i¢ilVœbbi™jfrœkfkš`iUžVtM’b\•–•dƒjqFšFrI“=r=“I_i¢i^q icŒ™¥e –bœ“Šlm’blu”mpI“Fhb—rYqŸofr“ucaž``q—ƒi¥•€nb›VnV–Ycu“~`rœqmV•=pF“IsI’IfX˜Fq=”=q=”=mI˜kej“`t9‹?u?“=lF’m\qœ_nV”IpF‰Hhb’jl`”IpI“FlI–r`ƒ—qe`–`nV”Ihb’je`•Qq=”=kF•Vhu“diœVoF”=hI`e`–`e`•QgV–`e`“jnU—4w)‰)w)‰)n4FnF‹9u4ˆ4p9ƒIoN`j`9t42t42n9‹FjVIlV9s4Ž=nVŠHjIVs9Š2v)‰4o4VmV‡jij…PlV9u4ˆ4t4IdjƒhŽ–d…Œ€y=…)|!!{-!z!„){!-|!!{-!|!!{-!z)„!z)„!x)„-{!-|!!x)„-{!-{!-z)„!{-‚,{!-|!!y-~-z!„)y-~-x)„-{,‚-y-~-{!-{!-{,‚-{!-{,‚-x-„){-‚,{-‚,w-ƒ4w-ƒ4w-ƒ4~6…,{-‚,y-~-v9„6{,‚-z4‡,y4†6{,‚-{-‚,y-~-y-~-z,‡4~,…6w-ƒ4{-‚,{-‚,y-~-{,‚-x)„-{,‚-x)„-{)‡,z)„!x-„)|!!{-!},‚!|!!|!!|!!{!†!|!!}!€~~}€!~~~~~~~~~y-~-y-~-t9-t-9y-~-t9-t9-t9-t-9t-9t-9t-9y-~-v9~-t9-t9-v9~-t9-t-9t-9y-~-t-9t-9t-9t-9y-~-t9-y-~-y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-t9-t9-t-9y-~-v9~-q99v9~-t9-q99q99q99t9~9t9~9t9~9rC|9rC|9t9~9rC|9rC|9pC{Co9CrC|9pC{CrC|9oC9rC|9rC|9pC{CpC{Ct9~HpC{CpC{CpC{CpC{CtH~9pC{CrC|9pC{Ct9~9rC|9rC|9t9~9t9~9t9~9q99q99t9~9t-9v9~-t9-y-~-t9-y-~-y-~-{!-{!-|!!{-!|!!{!-|!!|!!|!!|!!|!!}!€|!!}€!|!!|!!}!€}!€~|!!|!!|!!}!€{-€|!!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-{€-{!-|!!{-!|!!|!!{!-|!!|!!|!!{-!|!!{!-|!!|!!|!!|!!{!-{!-}!‚,|!!{-!{!-|!!|!!|!!|!!|!!|!!{!-|!!{-!x-„){-!{-!{,‚-qbƒšf¿‘ÒfːÒg˒¿f¼”¥e –m­’«i¥“¿d¿”¼d¿”¼b˓Ãe¿–´i­’¥b ›—f¥–¥e¥— e—›b€š~gkžkik˜Šh¥“ËhҎÔk͑ËlƒËkԍÔi¿”¹d´œ­g´˜¹j¹–¹c´š´d´œ­p±˜³j¹–¹g¹˜´h³•´n«•¹mÑÍeҏÒi¿“Ãn¹”Æm͎ÔhґÃg¹›­l§¯§m ³ ežº’d…ă^zÑqaqÑhehÉig^ÂZsP¨PpJ°P}G“Z„r†|‹“|££z¬²y²²xÁÁwÁÁwÁŽÁxɌÉyɊÉzׇ×{׿€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€æ…×}Ȋ¬|“|bh`ug¥gpg³xhqÁxjxÂxb„ÄŒ`ŒÃŒe’¾’e’¾’e˜º˜e˜º˜c’ÀŒb’¹Žc’ÀŒe’¼˜e˜¼’c’ÀŒ`Œ»Žc˜¾Œ`ŒÃŒc’ÀŒ`ŒÃŒe˜¼’ežº’e˜¼’e’¾’e’¾’e˜º˜e˜¼’k™µžj˜¸™e˜¸žiž²§sª£±r± ±tª¥ªp§ªªpªª§m ³ k™µžn™´ m ³ n™´ q¥± q¥± n™´ n ´™n ´™t‘¦†iŠ¿Šov®Šh…»žg’¿Še’¾’e’¾’e’¾’`Ž»Œ]‚³‚_‚¬aia¤VfVžaea¢kVˆ©ˆ\{¡”g¹›­a€›ŒkŠ“¥b •jlU¤VjV“mW”¡‹a~›rpF“IlV¤UlFŸN^kŸoXx¨xa{ r]~¡{eƒ“€g€—€ku—VnU›Ifb— ^œ‘ƒfi›FrFš=o=–;cU£iZi¡o_i¢ibk~`—™•m€—YoV›FtI™FsI’I]~œ~[zŸimF“FmF“FjUœŠ\”žq_i¢ilr‘‚e¥”­c¥••l`–YnubrY•=fV qZi¡o_~š¥eƒujuŠlu–bnV”IsI’IdVœib`œie`˜rhb•`hkšVq=”=q=”=u6ŒFq?”Ve`–`jV–VgQ•Vek–ƒgr˜VsI’Is?’FgV–`e`–`fkš`aižrgu`sI’Iq=”=iF•```˜_kV•baižrkmmvN‹Iu4ˆ4m4``_˜``j—qej“`g`–Vt42s4Ž=pI“Fl;˜;w)‰)v)‰4nI”Ve`–`jPˆFt24u4ˆ4u4ˆ4p9Œ=r4†9kF•VmVŠ`i`ˆPq;4x)„-n=ŽIi`ˆPg`–VpIˆ4u4ˆ4r4†9vI‹Ne`–`cuªh›^y4„!|!!{-!|!!{!-z!„){!-{!-|!!{-!z!„)|!!}!‚,{-!z)„!z!„)}!‚,z)„!{,‚-x)„-z)„!y-~-z!„){-!y-~-}!‚,{-‚,x-„){!-y-~-{)‡,y-~-y-~-{,‚-{,‚-{,‚-{-‚,y-~-w4ƒ-{-6{,‚-{-6{-6w-ƒ4w-ƒ4{-6w4ƒ-z4‡,{6-w-ƒ4{,‚-y-~-y-~-{,‚-{-‚,{-‚,y-~-{!-},‚!{-‚,z!„){,‡)|!!}!‚,z!„)z!„)|!!|!!}!€}!€~ƒ,~~~~~~~~~~~y-~-t-9y-~-t9-t9-t-9t-9t-9t9-t9-t9-t-9t-9y-~-q99y-~-t-9t-9t-9y-~-o9„9t-9y-~-t9-t9-t9-y-~-y-~-y-~-y-~-y-~-{-!y-~-y-~-y-~-y-~-y-~-y-~-t9-y-~-t-9y-~-o9„9t-9v9~-q99q99o9„9q99q99t9~9o9Cq99t9~9t9~9rC|9rC|9oC9rC|9pC{Co9CoC9pC{CpC{CpC{CpC{CpC{Cr9|CpC{CpC{Cu=}CpC{Cr9|CrC|9rC|9rC|9rC|9pC{Ct9~9t9~9rC|9q99t9~9t9~9t9~9v9~-v9~-v9~-v-~9y-~-y-~-y-~-y-~-y-~-{-!{-!{-!{-!{-!|!!{-!|!!|!!|!!|!!|!!|!!}€!}€!|!!}€!|!!}!€}€!}!€|!!|!!{-€{-!|!!{-!|!!|!!|!!|!!{-€{!-|!!{-€{!-{!-|!!{-!{!-|!!{!-{!-|!!|!!{-€{-!{!-|!!{-!|!!|!!|!!}!‚,|!!|!!|!!|!!|!!|!!|!!{!-|!!|!!|!!}!‚,|!!{!-}!‚,w-~Vh­’¿f¿‘ÒfҐËjˑ³iªši‘j³‘¿f˒Ëf˒Ëb¼—´c´š´c´š´d­—kŠ“Šg›g——Šg€—€]~qck ifr–l«’ËeҏÒkˑÍm͎ÔjڊÚfґ¿i¹”¿m͎ÔiԐËe¿–´c²š¥l³“¹g¹›­i«•¥h ™™n¥“«i­“¹b¼—´o³’«r«“«n«•¹g¹˜´h­§§i ´žd’Á„^zÑqaqÑhdhÏhjZºVjV¹JtF FxPZ…h‡|†•€˜£z¬²y²²xÁ²xÁ»x»ÁwÁŽÁxɌÉyɊÉzׇ×{׿€æƒ×}ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€ææ€æƒæ}׊×zɎÁy¬Œ˜|u‡h…QwZ£Zvg¤ZhqÁxbqÈz`„ǃ`ŒÃŒb޹’e’¼˜b޹’`ŒÃŒcŒÀ’`Œ»Žb’¹ŽcŒ¼žc˜¾Œ`ŒÃŒb’¹Žb’¹Ž`ŒÃŒe’¾’e’¼˜c’ÀŒe’¾’e˜¼’e˜º˜c’ÀŒbŽ´žežº’e’¾’c’ÀŒe’¼˜e’¼˜e˜¼’e’¾’e˜¼’k™µžl ±§l ±§l§¯§l ±§i ´ži ´žm‘µžp™µ™m ³ p™µ™p™µ™n™´ p™µ™m’²ªj§·ŠiŠ¿Šo†¬…jŠÀ…gŠ¿’e˜¼’e˜º˜c’ÀŒaqº‚b‚§^¡`qœre¥— dŠ˜~aŒ›€nb›VnU›IoN¡Y]~¡{Zzqf`škea¥UgV¢iY{¦[x¥ihr™u_”œ—a”›€mk˜InU¢Fq=”=lFr[~¢xfažVlUœ=nF›Var›~^q i_i¢ilb–uf¥–¥f–`mF“FqFšFr=šF]a§x_i¢ijr™™e€™rfr–f •mh`•blb“bh™˜¥_•“ƒdiœVnY–VkFœUcVž{YoŸqfr–kŠ“Šd”šƒlj‘IsI’Iq=”=fF›i`_˜`di™hr™udu–ivI’?u?“=u?“=o4V_i¢ij’¥g€‘ug€‘unV”IpY•Fs?’FgV–`__•ƒ`ƒ–~fr“uom‘IqFŽ4t24iF•``_˜`g`ufu“rgj“Vu?“=t42iF•`^`glb–uej“`l`ŠHs=Ž4p2”FbjrnU—4u)“,u)2mF‡Pe`–`lIŽFt42s=‰9u;Ž,v2Š-t24pI†Pi`ˆPh`Iu4ˆ4x2,r4†9nF‹9nF‹9mF“FqF‰9qFŽ4s4Ž=t4If`–`¼•ªkiŒ)z!„){!-|!!{-!{!-|!!z)„!{-!{-!{-!x-„){-!{!-{!-{-!{!-{!-|!!{-!x)„-},‚!{,‚-}!‚,{!-},‚!{-!z4‡,y-~-{,‡)y-~-x)„-{,‚-y-~-y-~-{-6{,‚-{-‚,y-~-y-~-{,‚-u4ˆ4w-ƒ4y-~-{,‚-y6†4{-6y-~-y-~-}6‚!{6-z,‡4{,‚-w4ƒ-{-‚,y-~-x)„-x)„-{!-x)„-{-!{-!x)„-|!!|!!|!!|!!|!!}€!|‡!}!€~~~~~~~~~~~t-9y-~-t-9t-9y-~-t9-t-9y-~-y-~-t9-t-9t-9y-~-t9-y-~-t9-t9-t9-t9-t-9y-~-y-~-t-9y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-y-~-{!-y-~-y-~-y-~-y-~-y-~-t9-t9-t9-t-9v-~9o9„9v-~9v-~9o9„9o9„9o9Ct9~9oC9oC9pC{Cq99rC|9pC{Cr9|Cr9|CpC{CpC{CpC{Cr9|Cr9|CpC{CpC{CpC{CrC|9pC{CrC|9pC{CrC|9pC{Cu=}Ct9~9pC{Ct9~9rC|9r9|Cq99rC|9r9|Ct9~9t9~9t9~9v-~9v-~9t-9y-~-t-9y-~-y-~-{!-{!-{!-{!-|!!{!-|!!|!!|!!|!!|!!|!!|!!}€!|!!|!!}!€|!!}€!}€!|!!|!!|!!|!!|!!|!!|!!|!!|!!{!-|!!{-!{!-|!!|!!{!-|!!|!!|!!{!-|!!|!!{-!|!!y-~-|!!{€-|!!|!!|!!|!!{!-|!!{-!{!-|!!|!!|!!{!-|!!{!-|!!|!!z!„)|!!{!-|!!{!-|!!y-~-nV…–g¿’Ëf˒Ëg˒¿i­’¥a ™¥i¥’­f˒Ëf˒Ëb˓Ãf¼”¥a¥˜¥b¥›­l™™jƒ™lŠ•ƒlŠ•ƒfrœkfrœk`qœrnŠ•™j³‘¿g¿“¿lÓÃqƑÍhڌÒi˒Ãk¿‘ÍnԋÜkڌÔiÓ¿j¹–¹fҐËjÒ­g¥™­f¥—¹g¿“¿g¹›­b­›¥e —¥j¥”¥d­Ÿ­h­§§i ·˜eŒÂxazÏhdhÏhhhÄZkY»PqJ­967=DHJGGGFEAADEEINQQSVZ[Z[ZXUSWZ]adegjlprvxyz{{vu|ƒ}}…–¤¬°³µµ¶¶¸···¶¸¸·¸¸¹ºº¸µºÅËÍÍÎÌÌÎÌÌËÈÊÌÍÐÍÊÍÎÍÍÍËÍÏÍÌÏËÀÅÎÎÎÖŃbmtw|{zwfpœºÅÍÉÅ¿ºÃÈÌÁ½ÉÇÀÂÃÀÂÉÌÊÈĽ¶°³¿¦~ss‚%n¨ÉÖÓÑÐÓ×××Ô¹”…ˆŽ‘‘’– £¡£”ˆ{uv|~ƒ|~€vow“§›®×ÜØÚ××ÙÚÜÛÙÙÚÛÚÙÖ×ÚÚÙÜÜÜÛÛÛÜÝÛÛÙØÝÜÚÜÛÛÛÚÚÚÛÜÜÜÛÙÛÜÜÚØÖØÛÜÞÞßàáãããåæäÜÓÍž¼»¼½¼¼¼»»º¸® “ŒŒŠ†„‚‚zusnhgca`\\\]`dgfb][WOIECBACHKNQS[^[][Z[\_]\]XVWWTTSMJG@;868>FKQW[YRPOMRWZ\`dgkmosuwz{xyˆ‰†€ƒœ¨¯³´¶·¸¹»½º·¸¹¸¸º¼º¶¶¼ÅËÌÍÍÌËËÊËÊÉÊÍÎÏÐÎÌÍÎÍÊÏÒÏÏÎËÏÐÏÐÐÏÐÖdž]cp|}xvvmx¡ÀÌÉÅÇÅÂÄǺÂÌÎɶ¶ºµÈÍÉÇÆ½¶µ¶¼±‘{pm$i¨ÉÒÐÑÖÙÖÆ¡ˆ•””›¡¥¢šˆƒ{vw{{z}€~wv¥ÎÜàÝÙØÙÛØÕÚÜÚÚÚÙÙÙ××ÚØ×ÚÛÛÛÚÛÛÚÛÜÝÝÜÚÛÝÛÝÚÄÊÝÚÙÚÛÛÚØØØÛÜÝÜÙÖ×ÝÝÞààáâããääÝÔÎÈÀ¼¼½½¼½½¼¼¸® •ŽŽŒ‹Š†ƒƒ€€|zxtpnkfa^ZWUUY\]\YXUPIDGOTWYYXYXX]_chhgihffgigfffccdba_XPLEABBBGLTXWY[XXVPNNRY]`aehilqqrrx…‹‹‰‡…„|{‹¢­®²µ¸»º¸ººº»»»½¾»º¶¼ÆÊÌËÊËÉÉÌÌËÌÎÍËÌÏÎÎÌÌÍÌÌÏÏÏÎÍÐÐÐÓÒÏÎÍÖΊ[_s€xnrujq—¾ÆÁÅÅÂÄþºÁÌÏÍÇÂÈÎÍÇÇÎų³®±·®¢xn$j¨ÅÎÊÆ¼¢Ž’˜™—š›ž œšwyzy|~€€€~zx|„’»ÝÞÜÛÛÚÚÚÚÛÝÜÖØÚÚÙÔ×ÚÚÛÛÙÙÜÜÜÛÛÛÛÛÛÛÚÛÛÛÛÛÛÛ×Ð×ÜØÙÜÚÚÜÛÚÚÛÜÜÜÚÖØÝÞßààáâãäàØÑ˾¿¼¼¾¼¼¼¹¯¢–Š„ƒ„€~~zxwuqjeb\ZXQQQLIGHS\`^]``bfgiijkgeedc__`_]_cceffeddb`^_]YXTNLJKKIOUZ^_\\]ZWTTRPRVY]`dgilorst}…‡…†††„|u‚›ª°³´¶¸¹ºº¹ºº»¼¼¼º·»ÇÊÇËÍÌÊÊÍÌËËÌÍÌÍÎÎÎÍÍÎÍÊÍÐÆÅÎÐÐÑÒÔÒÐÏÊ×Ќ\bx}suxsll‘½Ã¿Åľ¿ÄÀ¿ÊÒÐÊÂÃÍÎËÌËËÆ»¹¿½®ŸŸq%gœµ§‘ŠŠ”–••˜¡¥£—Š€zw{€€€~~~‹¦ËÜÛÙÛÜÛÛÜÚÜÜÔÖÞÚÔÙÙÐ×ÛÙÛÛÙÚÙÙÚÛÚÙÝÝÛÛÛÛÚÜÝÜÚÛÞÜÛÝÝÝÜÛÜÛÚÜÜÛÚÚÛÚÚØØÙÜÞßààáããÝÕÌþ½¿¾¼ºº¹²¡ŒŽŒ†ƒƒ„…€€|zwvurqnjhhe`WSQKPY]bdfffhkmossssrssrqpomnmkkgecba__^]\]]\\\[YXXUSU[`dgikkgdb[RKLOMLPTY]_dhknppou}ƒ†‡‡ˆˆw‚𬱳¶º»»»»»»»¼½¼¸·¾ÇÌËÊËËÊÉÌÍËÌÌÌÎÍÍÍÎÍÌÍÎÍÌÏËÊÍÎÐÐÒÓÒÑÐÍÎØÓ˜^ax|{tlnowž¿Á»½½´½¾»ÄÎÑËÆÆÊÎËÊÎÍż¸¿Ã»£›¥˜#f“ˆwƒ“—› ¤¡•…|vu{}|}}~zzxw‰¡­»ÈÍ×ÜÛÜÝÜÛÝÜÚÛÜÛÚÛÚÙÚØÙÛÛÚÚÛÜÛÚÚÚÛÛÜÛÛÝÜÜÜÜÝÝÛÛÝÜÛÛÙרÚÛÛÛÜÚØÚÚÚÙÙÖÖÜÞÞààâãàÙÑȾº¾À½»»·ª“‚€„‰Œ‹‡ƒƒƒ…„‚|yvusqolllkkifegghlmlnpponppoqsppssuxwwwwwvvusssoolklmlkjjjihffc``^\]_diknpponlkeZMEGKLNSW\aacfjopppv…††‡‚yu€˜©®±´¸»»ºº»º»¼»¶·ÂÆÈËÌÊÊÌÌÌËÉËÍÍÌÍÍËÍÐÏÍÌÍÐÍÎÐÌÍÐÐÑÓÒÑÐÏÒÑÕЙifkw~|zugs¬Å¼À½³¾¿»ÆÐÒÐÌÌÑÐÌËÌÌÅ¿½À¿´ œ£ d”ŠŠ—œ¢¤¢˜‰xuuvz|}~{|wtzެ½ÈÒØÛÙÙÛÛÜÜÜÜÛÛÙÚÞоÐÞØØØÙÜÜÛÜßÑÅ×ÛØØÙØÛÖÉÔÝÙ×ÙÛÚÚÜÜÚÚÛÚÛÛÚÛÛÚÚÚÚÚÚÚÚØÙÝßßàãáÛÕÍü»»¼½¼µ¤Š€ƒ‡„„„ƒƒƒƒ„„~|xvsolkikkfgkoqqssuwuwyzywtrrttrqrstwwwxxxvvvutrrpoppqsqpommljgebacbcgghijnponnnlibSC>AFKNSX[`dgimpppqx…‡ƒ|wu†¢¬¬±·ººººº»»½»¶ºÄÈÈÊËËËÌËÊËÌÌÊËÎÏÏÍÌÏÐÐÌËÎÎÎÍËÍÏÑÓÓÑÒÒÑÏÏÍÓДgnvy}‚yfr¨ÅÃý»ººÆÍÌÉËÏÑÒÏÊÊÌÊÁº¾ÄÀ® ¡™_Ž–‘Š™Ÿš›”‡{tswzwx}{{yqtŒªÆÙÛÚÚÙÙÛÚÚÛÛÜÞÞÜÛÛÚÚÛÚÜÞÝÙØÛÛÜÜÜÝÝÝÛÛÚÚÛÚÚÙÛÙØÝÜÙÚÚÕ×ÛØÛÜÚÛÛÛÛÛÜÛÚÛÛÛÚÚÙØÙÜßââÜÖÑÉÀ»¼»¹º· ‡}~ƒ…„†††„ƒ„„„„‚}{xsrpkjkjggjnqsstuxyywy}}}|yxxwuttssvuvxwxyxyxvutvuqronpopoomjihfeedegiljfffddfhjnnjidZMFDCEKR[acfhkoqrqrw}{wuux§««­³¹¸¹¹·º»¸µ¹ÅÉÈÇÅÇÊÇÇÊËËÌÎÍÌÍÎÊÉÎÍÊÊËÎÌËÎÍÎÐÐÑÒÒÒÑÐÑÑÎÊÒˏntpx†„wq|§Áºµ·µ½ÉÊÅÂÈÍÑÓÐÌÍÏÌǾÀÆ·££š^”“ŽŽƒ{spux{z|}}{}~|y†¦½ÄÇÔÜÙØÙÚÚÜÜÜÕÁÇÜÝÚÛÛÚÛÝÜÜÛÙØÚÜÛÜÛÛÝÜÛÚÜÑËÙÛÛÝÝÕÏÚÝÚÛÜÛÛÛÛÜÛÙÚÚÝÉÁÙÜÙÙÙÛÚÙÙ×ÛâáÛÖÓÍÆÀ¼¼ºº¸Ÿ…ƒ…†††‡†††…ƒ‚~{yvtqlijjijkmptstyzy{zyz~€~}}|{|~{xvxywwxxxyyvwwwvvxvvsppopqonmmmkklkiiknoppnprspollmllkd\XRLJLPUX]bfimprsuvssxwtvs¨ª¯²³·º¸¹º·µ¯ ¥¸ÂÆÉÉÈÉÌÌÇÈÍÎÏÌÊËÌÌÐÁ·ÉÎËÎÎÊÌÐÑÑÑÑÒÑÑÐÐÑÒÌÇÐ̓ivƒ~„{vu§¾¸±´ÁÌËÄÅÇÈÏÒÑÏÑÒÎÊÆÃÂÅ¿¯ª!aŸž‹yroqwvw~~~}}wrx޻ܨÓÚÙØÙ×ØÙØ×ÚÞÝËÇÙÝÛÛÛÛÝÝÜÜÝÝÞÞÛÜÚÚÜÜÜÚÚÜÜÛÚÚÚÜÜÛÛÝÝÙØÙÔÊÕÜÚÛÛÙÖÚÜÏÍÙÚÚÙØÛÛÛÜÞßÛÕÓÐÊľ»¹¹µž‚{€‚„„„…†††……„‚~}{wuuqnljkihjnqstuwzz{{{|€}~€~}|{yyyxyzyz{ywvvvyyxyyvsrrrrpoonpronljmqqrstttstvuutpmlkhc_\TNPPNQYY]eimprsursvssxtx”¨«­°³¶·¶µµ²²±‹m¶ÅÇÇÅÆÊÎËÈÊÎÐÍÊËÎÎÍËÈÊÍÌÏÏÊÈËÐÒÏÐÓÑÐÐÑÒÏÉÄÀÍˏmy€}~y{hl¨·£©»ÉÊÈËÉÇÎÓÒÐÒÓÑËÅÃÇž´«ž!b˜™Šxxx{|xw|~~|xsu”Ã×ÚÛÛÚÛÜÛÙÕÕÚÚÚÛÚÛÛÙÙÚÜÜÜÝÖÈÏÜÛÜÜÚÚÛÛÛÚÛÚÜÝÛÛÚÙÜØÖÛÜÛØÍÒÚÙ×ÓÙÛÚÛÚÖ×ÛÛÞÞÙÙÛÚÙÜßááÛÖÒÐÎÉþ»º¸¥ƒry€‚‚‚„……†‡…„~{yutspmkjiilqurqsuwxvuxz||~}yy{~}}}|||{xwwxvvzxxzyxwvvwxyxvwwtqopqsssrqnnnortrrsttttstuttsqnjjea\XVTUWX\adhmprsursxutywwŠ ¨«­®°±³¶¶³´©Žunޝ¿ÈÄÇÌÍÌÉÊÎÏÎÍËÍÎÎÌËËÌÍÎÎÌÏÍÎÓÒÑÒÓÓÐÐÒÍÌËÀ¿Í͚ou€…ƒ‚~xnq{{Œ¬ÃÉËÍÊÇÍÒÒÒÓÕÕÍÈÅÆÇÀ·¯¥"b…yrtx}~~|{y{~zv‡¸ÙØÙÜÚÙÚÛÛÛÙØØÛÜÛÚÚÚÛÝÜÚÛÝÜÛÝÛÒ×ÝÝÝÜÜÝÜÛÛÜÜÛÛÜÜÜÛÜÖÄÏÝÚÚÜÛÚÜÝÝÜÚÚÚÚÚÖÖÚÛÚÚÚÙÛÜßáßÙÔÏÍÏÎÈž½´‘wuv{……„„„„…†…ƒƒyyxsrromnkilquustuvvwyy{}|{{}|z{zxwxwuuuwwvttvwwyzzzxutsuwwxxwtrqpqrqrtqnmmoqqqrsrpqsqqqqrsqpojegea_YTWXY\_abgkpstsswuuzxv„š¥ª¬®±²³¶¶µ³—{oj€¨ÂÇÆÈÆÇÈÈÍÏÍÍËËÍÎÎÌÊÌÍÌÌÍʼÂÑÐÐÑÓÑÎÏÑÏÍÐÎÄÄÑÓ£jflr‚{uyrxŠ‹¢ÂÃÅÍÍÎÎÎÐÐÒÏÐÏËËÏ鬱¦X~z|€€~}{{wpw’µËÖÙØÚ×ÐÖÛÛÛÚÙØÙÛÜÚØÚÚÛÝÜÛÙÙÙÚÜÝÞÝÝÝÜÛÜÚÕ×ÜÝÛÚÛÛÛÚÜÜØÔ×ÛÚÖÒØÛÛÜÜÛÛÛÙÙÛÙÛÜÙÙÚØÚßàÝ×ÒÎÍÎÌÉÊÉÆÁ¼¥svux}‚„„„„ƒ„……~}{xvtqomllmlnttrtttvxvvyyy{|{yzywttsrtpopoppprpquuvwxxxvssttsttsrqrrqqqsqonnmnpqqrssrsqnooqqpqqrqnhgea]YZZZ\`cfikmouurwwvxww„˜¤«­­¯°³µ³±Ÿˆ„}xui}©ÂÇÆÃÆÅÇÍÍÌÊËËÌÍËÉËÌÍÎÎÌËÊÍÏÐÑÑÑÎËÏÒÏÍÎÐÍÈÈÐצjk{€rjuz}~¡¿À¿ÊÑÎÍÐÒÑÒÎÎÏÊÊÎÏÅ·±¥ Z}{~|yxwvx€¡ÑÜÕרÙÚØÍËÖØÚÛÛÙÙÛÛÜÙÙÜÛÛÜÞÝÜÜÚÛÜÜÚÙÛÛÛÛÚÛÜÙÖÙÛרÜÛÚÛÛÛÛÚÛÖÍÔÚÙרÚÚÜÙÙÚ·³ÛÞØØØÛÜ×ÕÑËÊÍÏÏÌÍÏÊŸ“utwwwx~……††ƒƒƒ‚~{xvvsommnkkmnstuttvuuwxxz{yxuturpnkigdehijlljkmpppruvwwvtssuututssppqqrrqoooonmnnoomnnmlkjiilmloqpnmmjfeb]]_^_beghmqutquywyzz„—£¨¬®±²²±²¦‡|ƒ~y{xlz©ÃÅÈËÊÊÈÉËÊÊËÌÍÌËËËÌÍÏÎÍÍÌÍÍÏÏÎÏÌÌÏÎËÏÐÎÎÏÏÐÔ¬tr{uz}{}}š¿ÂºÁÍÌÈÏÓÑÑÓÓÏÉÊËÉŽ·©X|zwqou~›¿ÏÖØÙØÕÙÚØÚÙÀ¼ØÚÙÙÙÙÙÙÚÜÚÙÚÛÜÜÜÝÜÛÚÜÛÚÛÛÚÛÛÛÜÛÜØÑØÛÙÚÛÚÚÛÛÛÚÚÚÙÙÛØÕÚÚÙÜÛÛÛÙÙØÚÛÚØ××ÓÐÌÉÉÎÐÏÎÌÎÌï…lrtvxy|ƒ††„ƒƒ|zyyyrqsononlostutruttvxwxyzvrsrnida_]]^`baaeghgjllnpqqtuuvuuvvutsqtsrrpqrqqqstutqonnnkfghfecceefhkjknnmkjfdc___`bcfhinrtptzzzz|„”¡¨±´²µ³³±˜Š‰‚yw{{mu ¿ÅÆÆÆÆÆÈÉÌËÆÈÌÁ¾ÊÌÍÌÎÍÊÍÌÈÎÐÍÎÌÌÐÏÊÍÐÐÏÏÑÐÑ׳{t||}|uzpn¢Á¼ÁËËÏÒÑÎÍÐÏÍËÊÍÎÈÀ·©Wtnm…±ÒÜÖ×ÙØØØÚÚÚ×ÖÙÛÞÛÙÜÝÚÚÚÚÛÙÓÔÙÚÛÚÒÖÞÜÜÚÛÝÜÚÚÜÚÚÜÛÛÜÛÜÛÛÛÛÛÛÛÚÛÛÚÚÙØÚÛÙÚÜÚÚÜÛÙØØÙ׿ºÑ×ÕÏËÉÊÍÐÐÎÍÎÍÉæ~nquuvy{|€…‡††ƒ€~|yvttrnmpqonppsvvttvxyywwvsqpnlkg`\YWTU[^]^_``cffikkmoqoquwvtrrrrrqstssrstrrtututpmljgefe`[[^][]aehghiilmjihhb\^`_bfikmqrrvy{|~‡”¡§¯µµ¶³·¢so}~}|wvzynw§ÄÇÉÈÉÊÈÈÍËÆÈÌùÆÌËÍÌÍÌÍÍÌÏÏÏÏÌÌÏÍËÏÐÐÑÏÐÑÎÐÕ¯tfw…zox}rtžÀÀÄÇËÒÑÏÑÑÒÒËÈÍÎÊÆ½¦Sv‹·×ÙØØÙÚÙÙÚÚÙÒÔÜÚØÚÚÙÚÛÛÚÙÙÙÚÙÚÚÚÛÛÛÜÛÝÜÙØØÛÝÚÚÛÚÚÛÛÜÝÛÙÚÛÛÚÚÚÛÛÛÛÖÕÙÙÚÙÚÙØØØÚÚÙÙÙÚÚ×רÖÐÌÇÇÍÏÐÐÏÎÎÊÂ¥{nnpxzyz|{~†ˆ†€||{wtsronoqqmnprusssrtxxyyuqqlcbdc`^]YVVUTWY]]_baadefikmmllpqppqqssrrrssrtuuttvuuvtrpmiigec`]XXWVUUX[_cbegikmmjji`]bdbdijlmstv}}„…‹— ©¯³·¶´¾¥qhqx~„€xz|moœ¼ÃÇÉËÊÊÌÌÊÊÌÉÂÅÈÊÍÍÌÍÏÍÉÌÏÏÐÏÎÏÎÍÐÑÐÎÏÏÍÐÐÎÔ¸x^o|uw~|kj›ÁÅÆËÐÑÑÐÏÎÌÈÇÊÍËÌÆ«$kªËØØÙÙÙÜÜÛÜÛÛÜÛÛÙÖÛÛÚÜÚÚÚÙÙÙÙÚÙÚÜÜÜÜÛÜÜÛÜÜÜÜÛÛÛÛÛÚÚÙØÛÛÛÙØÙÚÚØÙÚÚÛ×ÅËÚÚÚÑÏÚÛØØÙÙÙרÚÖÒÕÙÖÑÎÍÎÐÐÑÓÓÐȽ |pnlqy|{{}|~…‡…|utrpopruqmquvutssqrutstrnjfa^]ZZXSSRTXUTWZ\]`^___abejmmmmpttssqqrsssrtttuvwwwutttrlghgec_ZWZYRNLLMMQX^cfghjlkijgacfdehknqrv~~}‚†Œ’— ©­³´°¶ÇÑ«qp€}~€|zzxlp𾯯ÈÉÊËÌËÊËÍÍËÇÇÊÈÂÉÏÌËÊËÌÏÎËÍÍÌÎÐÏÎÏÏÏÏÑÎÎÖ±uiqwz|{xmn–¹ÂËÏÐÑÒÏÏÍÇÇÉÌÌÉÁ§'n«ÌØÚÛØÚÚÙÛÜÙ×ÙÛÚÚÚÙÛÛÚÚÛÜÚÙÛÙØÚÛÚÜÞÜÛÜÜÛÛÛÛÜÛÛÛÛÜÛÛÛÚÚÚÚÙØÚÛØ×רÚÙÙØÕÔÙÙÙÜÜÚÙÙÚÖÏÔÚØÔÕ××ÕÐÍÎÒÑÏÎÑÑȼ¡ƒztnlu{{|}}||‚„‚‚}vpmnopspmquvvvvspqpoqolic_[YVUUQPPNMQSRTUWX[_a`_acehjllhinnmnnoqqrstuttuwwwxuuuusplhgffeb][[VPMIKKIJMNSY^cgikjkle`ecafinst{‚„†‰“˜ ¨®²³µÅÍÍÕ²xr|„|ytwvll‘¸ÂÄÉÈÆÈÈÇÊÍËÊÉÊÊËÍÌÌÍËËËÌÎÎÌÍÏÏÐÏÐÍÊÏÍÎÐÏÐÐÔµycir|}xvqm¼ÉÍÐÑÑÒÒÑËÃÉÏÌ̦&o¬ËÜÔ¥®ÛÚ×ÚÙØÚÛÚÚÚÙÚÚÚÙÚÙÔÔרÙÙÙÚÛÝÛÙÜÛÜÚÖØÛÜÚØÚÚÚÛÚÙØÙÚÙØÙÛÚרÙÙØØØØÙØÙÙÙÛÚ×ØØØÙÙØØÙÙØØØÕÏÍÓÕÓÐÏÌŸ£Œ‚}tory|}|}}}}€‚‚~uomorpjmrstvvvroqrpmjie`[ZZVUURMJLMMNORTVZZ[``_bccfghjlmllmooqqprsrqrtwxxwxywwutqnliigeba^YWTQNMHFEBCFKQV\`addeijcce_cir{x€†ƒ‡‹“™›Ÿ¨¯²·ÂËѼ±Ó¿zgv}zwxtssslhŽ´¼ÆÈÆÈÇÆÉÌËËËÊÉËÌÌÌÐÎËÌÌÌÎÎÍÏÏÏÐÐÏËÍÏÍËÍÍÎÑÔµ}ir}…~uxqt¢ÄÉÉÉÏÒÓÏÉÅÇÏÎËç$n¬ËÙÖ¿ÁØØÕÙÙÙÚÚÚÚÛÜÛÙÚÛÚØÙÚÚÙÙÛÛØÚÜÛÛÝÜØÖרÚÚÚÚÚÚÚÙÙÙØ×ØØÖÕÛÛØÙØØÙÚÛÚØ×ØØÙ×ÔÖÕÕÚÛ××Ö×Ù×××ÓÍÍÓÓÒÒÏʼ¨”‰…~xuuz}~~~||€ƒ…xompkfmrsstvvuqpqolgda`^[VRQQOLIIKOTVYXWXWY^_addcdegklmnnoppooqqqrrsssttuvxxwvttrmgfihed_]ZUTQMMLGEEEEFJNSY\_bdfjg`aacjw|w€‰‡ŠŒ‘•œ¤©­²³¾ÊËÏË´½Õōhjpv|zxyuvqi‚§¾ÉÈÇÆÇËËÊÊÈÇÇÈÉËÉÊÎÍÉÇÉÐɺÉÑÍËÆÌÏÏÑÎÍÍÎÐÑÐÓ»{ew……wptqsœÂÈÆÊÏÓÑÍýÆÍÎŨ&m©ËÖÔÈÄÓØÖÙÙØÚÚÚØÙÜÖÓÚÛÚÚÙÚÛÕÓÙÚÙÚÜÛÛÜÛÚÙÚÛÚÙÛÜÏÊØÚØÙÙÙÚ××ÙÙÖרÚÕÈÑÕÓØÖÔÔÖÖ×ÙÉÍÙÖ××רÙ×Ö×ÒÍÐÓÑÒÒÎñ‹Š‡~vw}~€}{|€…†ƒ}wtnelrstuvuwunoqlfa`a_YUTRPRSPRTUY]]]^][\^`babeeeffhlmmmmnopsurrsstqrtruvwxxxussnkhfgdcb\YXXWTPKHGEDEGILNQUY\adildbdfp}|v‹‹Œ“𢩱µµ¹ÇÎËÍÔÒÏÏÕ˓mks~‚‚}xwxpf|¤ÀÄÃÆÉÊËÉÉÉÈÉÈÉËÈÈÌÌÉÊËÊÎÏÏÐÐÏÎÌÌÌÍÍÎÎÌÏÓÏÊÓº}gs{~xs|yužÇÊËÎÑÑÍÉÆÈÌÍÆª$k«Ë×ÒÇÎÙÚÚÙØÚÚÚÚ×ÙÜÚÚÜÚÚÛÙÙÚØ×Ù××ÚÛÛÜÜÜÚÚÛÜÜÚÚÙÎÍØÚØ×××ÙØØÚÙ×ÖØÔÌÑØÚØ×ÖÓÔר×רÚÙØÖÕ××ÖÕÕÔÎÌÐÑÑÑÍĵ¥˜Œ‰ˆ€vu|~~}zyx|‚ƒƒ{rhjqsuuwyxwtonkea`aa_\\\]beffffbcdeeddffdbdfccggddhklllmoprqpppqppqrrtuvwxxvtrnmihfddca^\[ZXVRLHEFHFHGGHKLQZacejjijq}‚xr€Ž’˜ §°·´¶ÂÌÍÌÎÒÒÐÐÑÒŖlmz}~}zzyyvjx ¹ÀÂÂÅÉÉÉÈÈËÌÊÊÍÌÌÌËÍÎËÊËÍÏÑÎÍÎËÌÍÎÎÎÎÐÑÏÌËÕ¼hq~yw€vuÀÆÈÌÎÍÍËÍËÌÇ­&jªÈÌÓÚØØÚÚÙÚÙØÙÛÚÚÚÙØÙÙÙÙÙÛÑÍÙÚØÙÙÓÖÛÜÛÚÚÚÚÛÚÚÙÚÛÚÙÚ×ÔÖÕÕØÚØØÖÓÖ×ØÙØØØØØØ×Ø×ØÛÙÚÚ¾¾ØÖÐÒ×ÓÌÌÑÑÑÏÆ¹« —Š‡…€ut~€}~~~zvsptz~ypeiprrvwxywuqnia_ba\[[\ahorrrstrolnommkkihggffijjjhiklmnnonprqrsrqrqqstttuvvvtqnlkgeecbdda[ZZUPNJHIIGEEEFINSY[]ajjdgoxtmr‚’”œ¡¨°³³·ÄÍÍÍÏÐÒÐÎÐѸ¯—ykw€}}xwytju˜´¿ÂÃÂÆÈÈÈÌÌËËËËÊÊËÍÌÉÍÌÌÎÎÏÍÌÌÌÍÐËÀÈÏÐÓÎËÌÖ¾‚mv€„ƒuy¤ÃÃÃÈÅÃÌÎÌÐÉ«%l©ËÖ×ÙØ×ÙÙØÚÔÖÛÛÛÙÚÛØØÙÚÚÛØÇÈÕÖ×ÄÇÖØÚÚØØÚÛÜÝÛÚÙ×ÙÙÑÔÙ×ÕÖÙÙ××ÖÖÙÙÔÓØ×רÙÚØÔÖØØÚÙÖרÖ×Ù×ÖØÔÌÌÑÓÒÍ´¤›”Šˆ…sr~}|xurqqnotvofipqruvxyyxrnlcbf`]cgklpsqqsrsxxxvsvtpqsqoonkkllljmmlmlnonoprttssrrsrprrruuturpnkjgffghec`^]YWUTVUPOOLJKJKPSU[^ahliipnimr’˜œ¦¯´·³¶ÅÎÌÍÎÎÎÐÓÑÏÓÓÒÏÒÇlx€‚|xtutjq‘®¾ÆÅÅÊÉÈÈËÎÎËËÊÊÊÌÎÊÊÊËÏÑÒÐÍÌËÍÎÍÌÌÌÏÑÍÊÈÉÒÁ‡iq{……}t~¤ÁÆÆÉÇÉÏÏÏÈ®&i§ÊÕררÙÛÙÚÛÛÚØÚÚÙÙØØØÙÚ××Ú×ÔØÛÚÚÚÙÚÚÙÙØØÙÚØÍÏØØÙÖ×ÔÃÆÕ×ØÚØÕÖØÚÚÚÖÓÖØ×ÏÑÕÖØØÚÙØØÙÚØÙØÖ×ÔËÍÒÒÐɽ±¢š”‹‹‡€qq~€|yvspokgkrkchlorsvvwxvtrnfgigfhnqtwxxyxvvxzzywuvutrrrsrqnnonpqqpoonpqrrqrttporqqqprsqqrrqqomkhjhgfiida``__`^^]\]]]^]]]\WVXZ_djf`adimt†™ ¦¯·º¸½ÈÌÐǶÅÑÍÏÏÏÑÑÑÐÏÎÒɓqy€~|~|xtkkˆ«¾ÄÆÉÉÊÉÉÏÒÎËÊËÌÌÌÊÇÉÌÍÊÌÐÎÌÍÍÍÏÍÌÍÏÑÎÊÉÆÃͰthpy…ƒ|x€¦ÈËÉÆÉÎÏÏÇ®'m¬ËÕÙØÖÖ×Ø×ØÙØÙØÚÙÍÐÚØØÙÙØ×ÚÚÚÛÛÛÛÙÙÙÙÙÙÚÚÙÙØÒÍÔØØÙØ×ÙÙÙÙÙÚØÖר×ÕררÙ×ÒÊÉÖÚÙÙØÖÔÔÖ×××Ö×ÒÊÍÒÑÌÀµ¨ž™’Ž‹†€ts~€}xtsqojggnj`fmpsuwwwzxvupkkmlkotxy{|~{yxxyz|}zzywvutuustvtsqqsrstssrrtsruvtuussrqrqrsrqrrpnnmmliiiiiiecdehiihdacfggiiiiifc^[]_ghccfkp|“£ª°µ¶´½ËÎÌÎÐÑÑÏÎËÆÍÓÒÒÓÑÐÒǶ›}wqp{|zxv{qlŒ²ÂÄÇÉËÉËѰžÃÍÉÊËÌÌËÊÌÎÌÍÐÎËÌÍÍÍÍÍÌÐÒÍÉÉÈÆÇÌ»‚es‚…€|~x|ž¿ÊÅÄËÍÏÉ©$nªÈÕÔÓÖ×ÚÙ×ÖÚÚÙÙÛÛÛÚÙÖØÜ×ÔÙÛÚÙØÙÛÚÚÚÙ×ÙÙØØØÙ×ØÙØ×ØØØÙÙÙÙ×ÖØ×ÕררÚÙØØÙØÙÚÙÙÙÙ×ÖÖÖÕÖ×ÔÖÖÕÒÈËÎÌȾ²¦„Ž†}st}€|wtqnkgfij[Ziopqtwvwwvxtmmonqx~~~~}~z{yxz{zvwusvustssuvuutsrstttsqrsrtvttutrrrppprrqqqrqppolijihhihghiklmlikjijkmljjmnnonleadghghnuˆ¥°µ¹´µÃÎÎÍÍÍÐÐÃÀÍÏÍÎÒÓÓÒÑÓÖ»±Ð­xrrr{€~zuurj¥¼ÈÉÆÅÆÇ¶š­ÉÇÈÉÉÊËËÌÎÎÍÎÍËËÍξÊÍÏÓÐËÍÐÎËÈÌŎkq{~{€xzš½ÅÃÇÉÌȬ%l©ËÙ×ÕÖÚÚÙØÚÛÚÙØÖÖØÙÙÙÙÚØÕØÚÙØØØØÖÚÚÒÒÙÙ×ØØØØØÖÕØÙØØÙØÙÕÓØÚÙØØÙØÙÙØØØÙÙÙÙØÙÙØÕÕØ×ÔÖØÖÔÕÖÌÃÊÏÎȾ±¦š‹‚Š“…|uu~€xsokhfdejaT`korsvwuvwwvrmqtu{€~|{}}|{{yvwyyxvvvrqssrqqprtsstustttsqrtstuuvurppppnopqrqqppppomkkkiijijkjlolkjhiklonmpnnoqsttpnjhjkns‚¢³µ¶²¹ÉÎÍÎÎÌÊÉÔō£ÐÎÍÐÏÎÐÑÒÓÕÒÒײ|nvxx}~yzwl|¡¸ÃÇÆÈĽº¹ÃÇÇÈÇÉËÌËÊÎÎÍÍÍËËÍËÉÌÍÍÐÏÌËÍÎÎËÆËĕjm~~€}xt”¼ÀÂÇÊÉ«$kªËÖØ×××רÙÙÙÙØÚÙØÚÚÙÚÕÍÔÚÙÙØØÙÙØÙÙÙÙÙÙÙÙרÚÙØ×Ø×ÔÙÛØÙÙÙØØØÖÕØÙØØØØØ×ØØÙÒÐÚ×ÓÔÔÔÓÕ×ÓÐÐÊËÑÉÇÎÌǾ²¦‡‹“Œzvw|urnlgbafbTWemprtwwxzywrouywx|€}{{zyvvvvvussqooqsqqqpprtttssrqsrrssssststsqnnqqopppqonoopnlkhhkkhjljjjjigiklnnmmooppqstvspnnnnrv’³¸µ´½ËÌÇËÎÍÎÍÌÌ՘vÂÕËÒȽÍÓÑÓÒÒÑÐÕ»Š|~yz~~}}wrks–´ÁÃÅýÄÊÅÄÅÈÉÈÉËËÉÍÏÍÍÍÍÌÎÏÍÌÌÎÏÍËÇÇÌÌËÆÃÊÏ¡mqzz}{wqŒ±¿ÁÁ°"i¬ËÕ×ÙÚ×ÖØÖÖÙÙÙÙÙÙÙÙÙÙØÖ×ÚØÔÖÙÙÙØÙØ×ØÙØÙÙרÚ×ÖØØ××ÙØØØÙØ×ØÓÑÖר××××××××Ù×ÓÕ×ÖÖÕÖ×Ù×ÐÐÓÔÒº¤¹ÐÍÇÀ¶ª ”Š”Ž‚|{z|ztpkhfaadTKYfmquvxxxyxuu{|{||~€}|{zxwvvvututqpnmooloqqqssqqrsttuussuvwtstsqppooomnqqmmnmppmmljhikklkkighiijkkmnoooportsvxyxvsssu®µ²»ËÏÎÏÐÐÎÎÐÏÎÌÔοÏÓÎÐÒÐÑÓÑÑÔÔÓÓÒÓÀvrs{~~wnsuis™µÁÆÄ³»ÑÉÆÈÇÉËÊËËÉÌÎÎÌÌÌËÎÎËÌÍËÊÄÆÉÇÈÌÒÊÂÅÏÓ§tu{~y|~v‰·Éü©%nªÉÕÖ×ÖÕØ×ÕØ×ÕØ××ØØØØØÙÚÙÙØÖ×ÙÚØØÚÚÙØÙÚÛ×ÔרÕÒÙѾÎÛØØØ×ÖÖØØ××ÙËÄÖ×ÖØ×ÖרÕÑÕ×ÖÕÖÖÖØÚØË¶œ}w€£ËÍÈø« š’Œ€|}|{wrnjgb]d\KQ]goruvxyxxwtwz{xy‚yuvxxvusrsssrqpmkhffgjjmoppqsuutttuutstrtvutsrpppooqqqqpooonomkjjkkkljhggigfijkiilmnnnqstuvwy}~yw‹ª³³ÃÍÎÎÏÐÑÍÉÌÎÒÓÐÐÏÎÑÑÐÏÒÑÑÒÐÏÏÒÓÓÔÏÑ·kmv{ƒ}xttjm˜ºÃž¿ÃÅȽÈÌÌÍÊÊËÎÌÌÎÌÊÌÎÍËÌËÃÅÉÉÉÉÎÍÈÊÎÑÓ°xn|„„„€zo‰¼ËÁ¤%j¨ËÖ×Ù××ÖØÙÙØ×ÙÙØ×רÙÚÚÙØØØÚØØÙÙØÚÜØÕ×ÙØØÙØÙÚ××ÚØÖ×ÙØ×Ø×Ö××ÖØÙØÖ×ÖÖØ×××ÖÕÖÖÕÔÔÕÚÚÀ¢’‚€Š‘Š–»ÇÀ¾»°¥Ÿ˜Žˆ‡‚€~{vplhb\]aSHUbhnsxxxxy{ywz}~~~€€}wwvwxvtqrrpnnmmigcacddegjmkmosustutstttvvvwvvsrtonooppqpqqpnnmkjjkkkkjedgdcdbdijjmmnnpssttwz{}}z‚˜®½ÊÎÍÏÐÏÑÒÏÍÎÍÏÑÑÒÐÎÐÐÏÑÌÇÑÓÑÐÎÓÔÏÐËÇÌÝsks|‚}tsriq–¹ÃÂÁÆÈÆÈ»ÆÌËÇÉÌÇÌÎÍÎÎÍÎÌËÌËÌÄÃÊÊÊËÏÌÆÈÍÐÐÖ·vhz‚…‚w‰ºÄ¨$kªÊÔÓÖ×ÖÖØ××ÙÙØÚÛÙØÙÛÚ×ØØØØØØØÚÑÄÒÚ×Ô×ÛÙ×ØØØ××ÙÙÚÚØ×Ö×ÖÕÖ×ÖÖרØ××ÖÖÖÕÐÏÖ×ÖÕÓÔκ›‚‰–“‘’’“’©ÃÄ¿¼¸«£œˆˆ‡„„‚yqme_\X`^FIZcmsvxyxwyzyz|{z}~€€€{vuvsqqonnkjihffca___]^^adhjhkppprqssuutuuvwutspoononmnooqqponnkjihjigfc`\YY]`chjkmmmoqrrrssvzz€›ÀÌÊËÌËÍÐÐÑÏÊÍÌÌÑÑÐÒÐξ±¿ÊÍÑÒÑÑÐÎÒÒÏÐÒÍÎÓ¬tjt{€wtsqij‹²¿¼ÄÈÆÆÈÉÉÊËÉÊËÇÌÎÍÍÍÌÎÍËËÊÊÏÐÎÌËËÍÏÇÂÌÑÍÌΤlky€ƒ€q…³­&k©ËÔÖ×ÖÔÔÐÏÖ×××Öר×ÕÔ×ÙØØØÙÚÚÙØÙØØÖÅÁÔÙ×ØØØØØØØÙÚØØÙÙØØØ×Ø×ÖÕÖרÖÔÔÓÕÐËÕÞÛ˰…ˆ‡Š‘‘“‘ސ’˜ºÆÂ¿»³§ž–ˆ††ˆ…|skhd^Z`WBN`entvy{z{zz{zz||~~|vvvtspnnnmkidaca[[][[ZXYZ]_bghhkmoprqrtuuuuvvttsrqoprrqqppqpnnljiihfda`\VUWZ]`cgjiijjmprrqqsuy|~‚‰¡¾ÉÎÏÌËÎÐÏÑÊÆÎÏÍÎÎÎÕɰÀÆÁËÐÑÒÑÐÐÍÌÒÓÐÑÐÌËÔµvfnrv}~xvvliƒ£µÀÄÃÀÂÇÈÈÉÊÉÊÈÉÌËÍÌÈÍÍËËÌÍÏÏÎÊÊÌËÈÈÉÌÏÑÏÍЮxl{„†„€|p~œ&kªËÕÖÖÔÔÕרÕרÙÚÙ××רÔÐ×Ù×ÚÚÙÚÙÙÚÙØÚÚÙØ×ØÙØØÖÑÕÛØÕÕÖØØØØ×××ÖÓÕÕÕÕÖÑÐÖØÓ¾ž„x|‡ŽŽ‘‘“•–šš£¼Æ¿»¸®£›’Š†‰‹~qkgc[Y\MDU_frwvxyzz{{z|}‚€~}zxwutsqqonld_`^^a_\[[YZ[XWWYXZ]_bdfjlnpqrttuuuuvvusssrrsrrqqrqnkkifgd`_]ZVQORUY\_bbcdehjklnoppstvz~‚…•¹ÍËÉÌÌÌÎÐÑÒÒÑÏÎÏÏÏÐÑÑÐËÆÇËÏÑÑÐÐÏÎÑÓÓÓÑÍÌÏØ¾€hmu~{uuwph~­ÂÂľ¼ÅÉÊÊÉÈÈÊËÌÉËÎÊÊÌÌÌÉÊÌÌÍÌÊËÏÎÊÈÊÎÑÒÍÈϯphy„ƒ}vz%k©ÊÊ¿Ð×ÐÔͽÐÜÖ×ÚØÙÔÇÒÙÎÓÙÙÚÌÊÚÙ×ÙÙ×Ùר×ÒÒÔר×ÔÖÚÙØÖÖØØØØÕÓÔÕÕÔÔÒÓØÖǰ“€‰ŽŽ‘Œ’”“•šš“•™”“ ¸Ã¼¹²¨ —”’Œ‹Œokga[YUHK[^gpvxy{z{{z{}~€~}{xvsqoliha_]^_`aa`^^\ZWVUUVTTTVY]_`bhkkorqtutvwvuuuttrprsppqrpligda``^[WSNJMQSVVUWXZ]`bdeghjkmortx~‰˜´ÇÁÃËÌÆËÐÐÑÒÑÎÐÑÐÐÐÓÑÏÊÅÅÉÏÐÐÐÏÎÎÐÒÑÒÑÏÒÒÍÒɒkoz€€ztxvqhp–¸Á½»ÁÉËÊÈÇÆÊÍÎÌÍÎÉÊÏÏÌÉÉÌÊÊÌÌÊÌÍÊÇÄÊÐÐÏËÌѬxks…ƒxr%k«ÇÌÌÕ×ÓÕÙ×רØÙØØÛÀ¯ÓÝÖ×ÙÚØÕ×ÜÝØÔØØØÙÙÖÖ××ר××ÙØ×ÖÖÖ××Ö×ÔÓÕÕÓÕØØËªŽŒŽŠŽ•’“••‘‹‹†|tŒ±»¸µ°©¢–‘‹Œ‚njfa]\WLR\^fqwwz~|{|zz}~{yyurqokhc_`eegkiikhea[ZYXWVSTTTUUX[\_beilmmptuuwxxwvvusrstsqrqmiebaa^ZVRLIHIMQPOQSSURMMPUY^eghimqty}‡ºÆÊÊËÎÌËÎÎÐÒÑÎÐÐÎÎÍÏÐÎÊÈÈËÏÐÐÐÏÏÎÐÑÏÐÐÏÐÒÑÎÓӜnsy~„yrqomzº¿ÁÄÂÅÊÇÈÉÈÊÎÎÍÍÉÊÏÐÍÊÉÊÊÊÊÌÍÍÏÎÌÌÎÑÒÑËÊÍÒº~k{„††€{$k¥ÈÖÖÖÖ×ÖÕÖÔÖØÙÙÕÎËӨרØÚØØÚÙÛÛÚØ×Ø××ØØØ×ØØ×רÙ×ÕÕÔÕ××××ÖÖØ×Ò¹–}ƒŠ‹‘“Œ”—•——˜š”‰ƒ„‚ynmpqqn¥¹·¶µ®§¡™Œ†vljfa[QNS[^epvy{||{{|{}€€~}{zvtrmlg^\chkkjihijheba_[YVTSSRSSRTW\\]`bgijnqtvxywwwxvxywvuttrld^[[YTQLGFHIJMRTUWURSPJHHJOU[_cgkpsw|€ˆœ¸ÈÉÊÌѼ²ËÐÌÏÎÎÑÐÎÏÑÒÐÍÍÍÌÎÑÑÒÒÏÍÐÑÒÏÌÎÏÏÑÒÑÐÕџuv~‚‚‚zqoojo”µ¼¿ÄÆÊÌÉÇÈÊÌÌÍÍÌÌÍÎÍËÉÈÊÊÉÍÏÎÏÐÎÏÎÏÒÒÌÊÏÍÑ¿„ep‡‚{#iªÉÔÕÔÖ×ÙÙÙØ×ØØÙÚÛÛÚÛÙØØÙÛÛÚØØÚÚØ×ÙØÖÔÔÔÖØ×××ØÚØÖÕÕÕÔÔØØÓȬŒ}†Žˆ‹’•™šžœ„‚ƒ}wlimifhlmhbk±¹¶´±«¦‘‰~piaYTOIO[Zertxz|||‚‚‚{xwsonic__eiihiighhhhfa]ZZXVROQRQONPQSX[\_abfilpuxwy{zxwzyxwvtrph_ZXWSPKEDGIKMRTSUXZYWWSNIGLQU\dfglqu}‚‡ŸÀÊÉÊÈÌЮ¯ÏÍÌÎÍÐÎÍÏÏÒÓÓÓÑÏÑÒÑÑÑÐÎÐÔÓÑÍÎÐÏÐÑÐÐÐÒÖ°zu{}~ystsko®ºÁÃÅÊÊÉÉÉÌÍËÌÏÎÌËËÉÉÊÌÍËÄÂÎÐÍÌÍÎÎÐÒÎËÎÊÇ;†fm{„€$jªÈÔÔÔ×Õר×××ØÙØØÛÙÙÔÉÑØÙÛÛÙ×ØÙØØ×××ÖÖÔÔÖÔÖ×ÖØÙÔÍÑÔÒÖѺ …Œ‹”“”–™™Ž{j`jrkjidflnmkgdddcae{ž²¶¶³°«œ’„vodQJMT[\fpuy{}~€‚‚€~zvsqnf`acddeghffgihgfe`]^\WSQNMNONMNNPSVY]__dghmrvyzzyxyyyyz|zvm`YUSRMGCBBEHJKLPUWX\_]]\ZUONOQV[aehorx‰ ¹ÄÉÊÊÍÐÌÌÏÌÍÍÍÏÎÏÐÍÍÒÒÐÑÑÐÑÐÏÐÑÏÐÏÏÑËÉÏÓÒÑÐÐÑÑÑÔ¬{qrwywutqrlh„­¿ÀÂÂÈÌÉÉÌÌÏËÈÏÎÊËÌÍÍÌËÊÈÉÌÏÍÌÍÎÎÎÑÐÌÎÏÌÈÌň`l|}$j¨ÊÔÔÖØØØØÙ××ÙÙÚÚÚÙØÙ×ÖÖÙÜÛ×ר×ÕÖ×ÖÕÕÕÕÖÖÖ×ÙÚÙͼÃɺª–‹Œ’’‘’„Ž˜”—…gq{ib_dssojilkgehebegecfijkkn ´¶¸¶ªŸš‡hPKKR]_fou{}}~€€€€€~{ywsmje^accdeeefeghfdccb`[YVQMLIJPMMOOQTWXZ\`cehkoswz|{z{{{{{zyvl_WSQMHDCBCCDHJORSX\[^cc`_[UQOOT[_eilpx~Š§ÂżÂÈÉÎÏÍÎÑÎÃÄËÎÏÐÏÌÍÐÏÏÐÏÐÎÍÐÑÏËÎÏÍÍÍÎÐÒÒÐÐÒÓÑÔÖ¯|mqy{}{wspjf‰°º¼ÀÇÊËÌËËÎÌÈËÌËËÇÂÉÎËÈÊËÊËÊÈÊÎÎÍÍËÉÎÐÎÉÇÌÏjox%o©ÇÔÖ×Ö××ØØØÙÙÚÚÚÚØØØÖÖØÙØÙÙÕÖÖÕ××ÕÕÔÎÊÒÕÖÖÔѾ¦šš›—”’’–œ•Š’š‡om|srlkgikhjifhfgjghggijkmooomjl˜ª²ª¤ ‚pTMQKT^\cmu{€€€€~€}yxtpkea_bcegdcedegdaca^_^[XUPKHEFJKMQQOQVX\``bhikptxzz|}|{{{|}|wl^USOHBBAA@?BFHIOTUVX\_`_bb[XRMQV^dflpv~‰¤¿ÈËʪ©ÌÒÎÌÍÎÍËÇÌÌÏÒÑÎÍÎÐÑÏÎÎÎÐÐÏÎÍÏÎÍÏÐÏÑÔÑÏÑÓÌÌÒÜÀ|kqqvyytqund„ª·½ÀÇÍÇÄËÍÍËËÌÌÎËÀÅËÉÇÅÌÎÇÆÉÉÌÏÏÎÍÊÎÒÒÏÍÊÏǐgh$l¬ËÓÎÔØ××ÙÙØÙØÚÛÙÚÙ×ÙØÖØÖÖÙ×Ö×ÖÕØØ×ØÕÒÑÐÓÈ·® “†ˆ‘’‘””‘‘“˜™™˜•šœ‡~‚rpzxolpnlnpnjgihfhjihiloqpllnonnnmmnt†““…rYNURJV]]enuz~€‚ƒƒ‚ƒ€}|yuqpjd_`fecbbdec`ab`a`]ZVWTPMHECBDGJMPTUWXY\a`ahimrvxy|}{}~|{||vl^UOIEB@A><=?CGJMNTWY[`bdcb_[XPKNXbfjqv|®¾ÀÅʾÉÒϳµÎÍÍÍÌÌÏÑÎÊÏÒÐÐÎÎÏÍÊÍÏÎÐÐÏËÎÐÏÑÓÐÎÏÐËÍÓÇ˸€mnqsvywttpgy¤»ÀÂÇËÊÌÍÌËÌÍËËÌËËËÉÈÊÍÐÍÉÊÊÌÏÏÏÌÊÌÏÑÑÏÌËÓɏe%nªÉÕØÖÕÕרØÚÚÙÛÚØÙÙרÎÉÖØ×ÖÓÔÖÕÕÕÔÙÖÊÍÕɶ±¨Š„Š‘Ž’”–š™—–˜”€sietnfpnijmoonlmnljhhgimkhlnmllljkopomossnklnj]WXYTJM[a_`iuz~€ƒ„ƒ€~|yuqne``cfcbcbcec_]^`_^^ZVURNLJHFDBCFMTWZ[]]]_cghmpqvz}}}}|}€~xobWQJE@=<999<@CGLPW\^]]bffeeb]WQPRYcjov}•µÃÂÁÆÎÏÌÏÒÑÍÍÌÍÎÎÍÏÐÏÏÎÎÐÏÌÍÏÒÎÍÑÐÏÐÐÐÎÏÐÒÓÏÍÎÐÒÒÓÏÏÛÓ¢tmquz}zwxynwž¸¿ÄÊÌÌÌÍËÍÌÉËÉËËÊËÊËÍÏÐÎÅÁÌÐÎÅÅÊÊÎÏÏÐÐÎÌÒȗ$nªÈÙÚØÕÕÖÍÊÕÖÓÙØØØØ×ØØÖÕÖÙÙØ××ÕÕ×ÕÖØÉ¥ˆ‚†“ŽŽx‡–’‹“œš—•“‹ƒ„~vqklooklighfegiimnnolkkknooononkjopoomnppoqrrpkfZTWQHLY^[^iu|€‚‚„ƒ€}|zxtpkcacdeda`bdecbcdeeda_^^XUQLLJGGGHOWYZ]a_`ccehmprux|{{|}€‚~}zreVOMID?==;>BCDINTY\``befhjjic[RNPVbjpw˜¹¿·ºÅÍÎÎÉÆÌËÉËÌÎÎÎÐÏÎÎÎÏÑÍÅËÑÑÐÏÏÏÐÐÐÑÎÍÏÏÑÏÊÌÏÐÑÖÖÕÔ×Ӝpopv{|zwxwlq”³ÂÆÉÌÌÊÈËÌËÌÍÌÊÊÌÉÃÉÏÎÌÊÊÌÏÎÌËÊË¿¼ÎÐÏÎÌÍʯ%k«ÊÕ×ÖÖÖ×רØÔÕÖÖØ×ÖÕ×ÓÎÑÕØØ×××ÐÔÕ»¢ˆŒŒŠŠ‰Š…—“‰…‰}jooopommnkllfffdeeijhjllnmllmnqqoonlmnoommqrpprpomeZVVH@MZ]\`iu}ƒ„ƒ‚‚~zxwqmhedccccbbefehlkkkhe`ZQLHE@;;<<;=AIORW[`dbadgjmqtvxy}€‚‚ƒ‚{th\YWQJC@>;:;98::879IZ^Z^hv}„ƒƒƒ‚€|zvrqmifdddbbbcgijje`ULIC<94-+--,-,,///23120,,3776531341267:EUefYQOT]gqwƒ˜¬µ¸¿ÆÊËËÊÊËÌÊËÌÍÎÎÏÑÎÌÍÏÐÑÉË¿¦ÁÐÆÈÎÎÎÐÐÏÏÎÏÑÏÎÑÓÔÔÒÕ×ÕÒÓÚÀ†ntxxxtooqjiˆ¬¾ÈÈÈËËÌÌÊËÌÊÍÎÎÎÍÍÌÎÏÐÍÎÏÎÍËÌÍÍÎÏÎÍÎÍÈ®&kŸÃÖÖØ×ÕÖ×ÖרØÕÒÔÔÒÔÕÑÐØØÌ¼§Œ|‡•‘Ž’‡}А‘˜–“—˜•”¢¤”’Šwoookkkcbfhfbffhopmijlnnkklnnnpopqpoqrromooppmmmnlmqrpmg^YVOC?JXYVYfv}‚†…„„‚€€|zwrpligeca`abdc^WMHDBEHE<51/.14358624;ER^fiea`aeimortvz{~‚ƒƒ€‚‚~ype^\XLB7/10./37877633566788@P\\WV[`fow†§ÆÇÃÆÊÍÏÌËÉÊËËËËÌÏÎÌÎÏÍÌÎÏÒÐÊËÐÒÐÌÍÐÏÎÐÏÍÌÍÏÑÎÏʼÉÕÒÕÖÔÕÒÑ×͙sptywtqqvpm‰ª¾ÈÉÊËÌËÊËËÊÊÎÐÍÌÌËÊÌÍÍÎÏÑÑÍÍÎÌËÌÍÍÍÐȪ$iªÈÓÖÖÖÖÖÙÙ××ÕÔÓÏÒÔÓÔ×Ö½¡’•ž™”—–•‘€u‹–œ¡“’ƒƒ””‚yupkfhieddbdiklnlklmnliklklmlnmjklmnrsqnkoonppqpnqomnllmklkd^SOK@ALWUS[hu}ƒ††…„†ƒ}zvrpnjgfc``b^VK@??=?ABHG>879::<==>@CFMV\ab`]\_cimppsvxz{}ƒƒ‚‚„„€{tl`ZYUPJA<;:978877313/-3:;77@MVWW\ckpx‹©½ÂÆ¿¾ÆÊÉÉÈÉËÊÊÌÌËÄÁÌÐÌÍÏÏÐÑÊÄÍÓÏÎÐÒÒÐÏÏÏÍÌÏÑÏÏÏÌÍÒÓÕÖÕÏÌÑÔÔ×±zmr|~xwvusl¬ÁÅÈÊÊÊÊÊÊËËÎÎËÌÌËËÊÍÎÍÍÏÎÌÌÑÐÎÎÎÍÌÓЮ$m¨ÄÐÓÕÖÓÐ×ÙÖÖÔÒÔÒÓ×Ì­†ŠŠ‘–——™˜‘•”‹“”•“„Œ©Ž‹|sonnifjkiigimmkimnmmnnnmmjhjnppnllmnnmoppqqqpqqomnoonnonljfdaWMNKBEMQPRZfs}ƒ…††…„ƒzywsqnjhdbb_[VLFDB@???ABBBCBCEEEDEEGIJSXYYYYZ[_gklorsux{|}~€‚ƒ„ƒƒ„ƒ€xoeYUUOLIDA@>?@@AA@@>?ABCDCB@DQY^aflu{‹©ÁÆÆÇÉÌÌËËÊÇÇÉÉÌÌÍȱ½ÑÍÌÊËÎÑÒÍÌÐÐÌÎÑÐÌÌÏÐÏÍÎÒÒÐÏÏÏÏÒÓÓÓÓÐÏÍÁÊØ¸„pszyvyy{qgy ²»ÅÈÎÌÅÈÌËÍÎÌÌËÇÊÌÍÏÎÊÌÎËÌÏÏÑÐÎÎÌÐ̯%k§ÂÇÍÔÔÕÔÓÑÖ×ÒÑͼ¥‡}Œ”•”•˜˜•–™Ÿ¢žœ“”ax‡Œ}ponkmojgfgjimonmmmlmmmmmnpnnnnonmnopoopqqpjgmprrrqrrqpqpoooonlmkd^XQTL?CPSOSYbs„†………„ƒ€{zwqnmigdcc`[XUMIJGFGJHFJQQPPMKIIKLLMPPQTWXX[`ejnopqtwz|~„…„…†„ƒ‚|uk_WSPLIEDDEDCDGIKKKKLRTUY][LN[_chnv{Œ¬º¾ÄÆÊÊÊÉÅÇÉÇÆÅÉÍÆ®¶ÉÇÌÏÍÍÍÍÐÎÌÍÌÐÐÏÐÎÎÏÐÐÎÍÏÐÐÏÏÐÐÒÕÕÒÑÑÏÑÐÌÆÎŠquwvxzxuumy µºÀÅÈÇÉÌÌÌÌÍËÌËÌÍÍÎÍÎÏÏÎÌÏÐÑÒÐÏÎÑ̰%m©ÆÍÎÒÔÕÖÕ×ØÎ¸™…€…‘“’”——˜Ÿ žŸ¢¢…lvyq~vtpmhgjifeccgiiklkmoomlnnmmmmmnmlnnopooopoqqpprrquusuuspopoopqqnlnme_YTSMEGNQQSYfvƒ……††„~{vrronljijkheb\WROOTTUWVVWXXVSSTTSTSRTXXVXYZ^cgkooqstx{}€‚…„„………ƒƒ„yrg]TQNKLLIFFHHJKKMPRRWZ[_ejgZYadhow}‰¦»¿ÅÉÈÉËËÊÍÍÈÇÉËÍÐÌÉÍÎÏÏÎÑÒÏÏÎÏÐÌÎÐÏÑÑÎÍÏÐÎËÌÏÏÏÐÐÑÒÔÕÒÐÒÑÑÒÑÏÎÕĉjovywvuwwmr•±½ÃÅÆÈÉÌÌÍÌÉÈÊÍÍÍÐÑÍÎÎÏÑÐÑÑÒÆ½ÈÑ̯%k©ÆÑÒÒÖÖÑŨ‡{Œ‰“”—™™˜˜œ¢¢¢™Œ‰o_hkuytrqkfglnonljjmnllmoqnlnmmnnlmnnonmnoprtsponorppsqqrqqpoonlmpoponmnnpwyrcYUMKRSRUYgxƒ†„‡‡‡†„€{xvvrprttrokjjfb`abbcba`a_[[\[ZXUTSSTTWXX[]`cgkoqpsvw{|}€ƒ„…†‡‰‰ˆ†‚{umf`WRRROLJGIKNQQSVV\__acinnhbdjmqx~Œ¦¹ÀÁÄÈÈÉÊËÉÉËÉÉÍÐÏÏÍÍÑÓÐÍÐÒÏÐÏÏÑÎÒÒÏÒÑÏÑÐÎÉÌÔľÎÓÑÐÓÕÒÐÑÒÑÓÔÒÒÓÑÙ͑npvuruutskmŠ«»ÁÅÉÊÌÍÎÌÉËÍÎÍÍÐÐÎÎÏÎÏÑÑÏÍÊÉÈÎË®$k©ÆÎÏȲ‘{y‹Ž‘–”•˜›Ÿ¡¤§£œ›•ˆ{v}}xqsyuqomffnqmjjijllnomopomllmmoonmlmmmnnppppproqroqrqqppoprqpporqpppooonq|‚~wl`VNHJQTUXduƒ‰ˆ‰Š‡†„ƒ~wtuwwxvtrqrqmmmkjgdcbccdedca_[VVVUVXYZ\[]aejonnoruy{|„ƒ…ˆˆŠ‰ˆ‡‡zrke^ZVSRQNJIILQUX\^]]`deinponmnswy€‡“§·¼½ÃÈÉÉÊÊËËÊÊËÂÄÎÌËÍÏÐÐÑÐÍÎÎÍÍÌÏÑÐÌÉÏÓÔÐÉÌÖʽÈÏÏÐÒÕÒÏÏÑÔÔÒÒÔÓÑÒ×ǒnmrutsssvor‰¤º¿¿ÂÈÌÌÉÆÊÍÌËÌÎÎÑÒÏÍÏÑÒÑÎÉÌÍÎʯ#k§²œ…yz‚‹’’’•™™›¡Ÿ ¢™”‘…rw€}zvsprrpoljgdb_ficabeljikkmmoonkilmjijihkmmlmlmmmnnnpqpqqqqpopqopponnqpooonnnx…ƒ~zumcUHJRVUXew„‡ˆˆˆ‹Š„„‚~|{yz|zyxvwvrrtrnnmmnmkhfeb_XVXWW[ZY[]`cehlnoqruwwy}~~ƒ‚‚‚†ˆŠ‹ŠŠŠˆ†‚|vqkhe`[YZXVRLJLMRX_cehjlpoqssttw|~€ŠŒ€ž¿½ÂÆÅÆÉÉÈÉÉÊ̾ÀÏÏÏÎÎÎÑÉÀÌÑÏÎÍÌÍÎÏÄÁÎÑÏÎÏÍÍÏÎÎÐÍËÒÕÔÓÐÑÒÒÑÒÓÓÒÐÒ×Ô°}kuzuuxwwph~£¹¿¿ÃÅÄÇËÊËÌÉÍÍËÏÒÐÍÏÒÑÑÑÏÎÍÍȯ _~~‡ŒŽ‘“˜Ÿ££¡¢¤˜‹Œvy~zywwtsspljihe^^a`_`cecdefdbddgiknlihijkkiijlmnnmnnlmnoppoqpqpkmqppppnnmmnnmnnmp~€xy~wok^QSVVVYgz†‡‡‰ˆˆŠ‡„ƒ~~~~|{|zwurppppomlhdb]ZZ[]]^\[^^adeilosttuwyx{~€€‚ƒˆˆ‰‹Œ‹ŠŠ‰ˆ„~|vrqmje`[[]]ZSNMOQSTY\^dkpppsuvx~€‚‰Žwjš¿ÂÅÅÆÊÇÆÊÉÊÍÏÎÏÏÍÎÏÍÏÐÉËÐÎÎÏÏÏÏÍÎÐÒÒÐÐÑÑÏÎÎÐÑÎÎÑÓÔÓÐÐÑÏÑÓÓÔÓÑÑÔÕØ¸~mtvsoqvwrp³ÀÄÅÅÇËÎÎÌÉËËÍÏÏÐÐÏÑÑÑÒÏÍÍÏɰ ]ˆŽ‘–˜˜¡£¨§š“Šyxurwxxxvssqpks‡Š‚vlie^ZWX[]`ddc`^]_dhjjijjhkljjllklnnmoonnoponnpqrrqpppolmononnnnnnmmw€o_gswojj`\]VU\l~…ˆˆˆ‰‡‡‰‰…ƒƒ‚€€}zxxvtuurmheb___aaba_aa___aegglorstwxyz{~}~€€ƒ„…ˆ‰‹ŽŠ‰ˆ†}zvsssngea`]^_^ZSRVVY^agfgnqsx|}€ƒ‰ŒƒndŒ»ÄÄÇÇÈÊÈÇËËËÍÍÎÎÎÐÐÌÉÐÈ¢±ÎËÎÏÎÄÇÑÒÒÐÎÍÏÎÎÎÏÑÏÏÒÒÓÓÓÕÔÓÓÔÓÒÓÔÒÐÏÐÕ»‚mv{wppttplw–¸Ã¿ÂÅÆÉÌÉÉËËÌÍÏÐÑÏÏÏÎÐÎÎÍÏÉ®!bŠ‘•šœ£¦©§ž“…|xswwvvvwqlllhw§ÒÝÜÜÚɺ¬„d^]YXWXY[\Z]_\_a_bddgijkikkjllklnnmnomlppmnoopppnoponnnkjljknmnoozyjhijrwuoje`ZV[m}…ˆˆŠ‰‰‹ŒŠˆ………ƒƒƒ€}z}|xsmilkhiihiigbadcaefefhknquwxwwy{z|€‚€€‚ƒ„‡Š‹ŽŒ‰…ƒ€{xsqrqolhea`cca``]ZYY`flqqruz}…‡‹Žƒslcu¬ÇÆÆÇÉÉÈÈÈËÌÍÏÌÏÉÀÈÊνª¿ËËÏÐÍÍÍÌÏÒÐÏÎÎÎÏÏÏÐÍÍÏÑÒÓÔÔÒÏÑÔÒÎÎÓÓÑÒÐÍÖ̒nryzrruuqn{”©·¾ÀÃÄÊÍÌÌÎÌÌÏÏÐÐÏÍÍÎÍÌÍÒÌ« c“œ¢¦¥¥¥œ’vvvuttstrklr¤ÇÏØÜÚÛÔÀ¶¹ÇÒɧu[YVVRSVUSWXWY\]\``acdfghhgfiigeijjmnnmnnnooqqnnopoqrqponljklkloytffiikrvuolg\V[oƒˆˆŠˆˆŠ‹Š‰‡††…„„„ƒ€€~yvwuuuqmljjghjhghjkjkoqrrsvxy{{{{}|}€€€ƒƒ†ŠŒ‘’’ŽŠ‰†ƒ~xtsttqmnligeecceffffijkotxwz€‚…†‡Œƒljtmr ¿ÀÅÉÈÇÆÈÊËÌÄÁËÍÍÎÍËÏÑÒÐÌÍÏÎÑÐÎÏÑÑÎÎÀ¾ÎÐÍÏÎÍÑÒÓÓÑÑÐÐÒÏÒʬµÑÒÐÑÑÑÖћmqzxpqwuoq€˜±½À¿ÀÆÈÉÍÎÌÎÏÏÐÏÏÎÍÎÎÏÏÑʬd˜ Ÿœ“vstvvxyxvxwppuÅàÜÖÎ½ÃØÚɸµ¹ÊÔÐÎÑď^RRPLKNQQRSU[^]]^^`acffefdgjiggjjghhjklnnonnolkmkkopoppmkkklmrzrhjkhjqswunkdY^w…‰Œ‰Š‹Š‹‹‰†…††…„ƒ‚€€}{{|yvusrqmnonlmmoonnnpqrsuvz|{||{|}}~€€‚…‡ŠŒŽ‘“’‘‘Šˆ„~yvvwuutpnnmkkkkjjkkmmlnsuxz{~€ƒ…†‰‡scgrlc…µÅÆÈÇÈÉÊÉÈÉÍÍÌÐÐÎÌÍÐÐÐÎÉÉÌÏÑÎÌÏÒÎÌÐÑÑÑÍÌÍÎÑÓÒÑÑÑÑÑÓÓÍ¿³¶ÇÒÒÓÒÐÏØÍinx{vsttrs€”®¿¿ÂÅÄÇÍÌÉÊÍÎÎÐÏÐÎÎÏÎÎÔ˦ c‰‹„vwzz{{y|}zxv|޵×ÙϽºÁÁ¸ÌÕËÃÆÀ»ÉÏÓÖÓÑʞiRMLJFHIKOOPQVYX[]\]`befeecehhhfhijhikknnjikkkmjkljoppqokjnlqzpeijgjrvvwsqm`ax‡‰‰ŠŠŒ‹‰‰Š‰ˆ‡†ˆ‡‚€{yxwwwtsstsrprutsstttwyxyzz{|{z{|}‚‚ƒƒ‚€€ƒ†ŠŽ”””“‘Œ†ƒ}xvvuutrrrponoomoponoqstwz|~‚„…ˆ‹zmjke]Zs§ÆÇÄÅÉÊÉÈËÉËÌÊÌÎÍÉÌÎÑɶÂÍÊÌÌÎÏÏÎÌÎÐÎÏÎÍÎÍÏÒÒÑÐÑÎÍÐÌÌÍÌËÊÏÒÔÔÒÒÓÕȗqmtwsqtuno„ ³¼ÂÃÄÇÉÌÌÉÎÐÍÐÒÑÐÎÎÎÎÒ̯\}wtsvurqomr{~œÈÚ×ÐÊÇÌÍÌÒκ¿ÖÑÈÔÑÁÃÎÏÒØØÖÑÑ´€_JDA@CDGMNNQRQSVWYZ\]`aaccccdfefjkkllljhhijkiiklnnmqporonnszoekjfjtzvuwtropŠŠŠ‹Š‹ŒŽŒˆˆ‰ˆˆ‡††…„‚~{{{{xxxxywwxwwxwxwwxxyxyyz}|~~~}~€ƒ„‚ƒ€ƒ„…ˆ‰Œ‘”–——•ŒŠ…ƒ{zyvvwtsttrrrrrrpoqrtwxxz}}‚ƒ„…ˆŽŽ}ttlfceZ`›ÁÁÁÅÇÆÅËËËÎÎÎÎÎÌÍÎÏÍÃÆÏÎÎÏÐÑÐÏÃÃÏÎÍËËÌÈÌÑÕÕÑÑÐÐÏÇËÑÐÓÐÏÐÓÕÔÓÓÒÕӝoortrqsqrlm†£¹ÀÂÄÁÅÍÍÌÌÍÏÌÌÏÑÐÎÏÓ̰Ytrtsuwuv‹®ÊØÚ×ÕÒÐÔØÙØØÔÏÊÉÒÒÔÙÕÇÂÃÆÍÏĹ»½¶²©oQDC?AABGJLNNNNQUVXYZ^^]^`abbdgghhjkkigikmlklkllkmonopnnnu{nekkhjw~yvxustx…‹‹ŠŠ‹ŒŽŒ‰‹‹‰‡‰‰†………„ƒ‚€€}|~|zzzyy{{{{{{{zyz~{|}~€‚‚ƒ„ƒ‚‚‚‚ƒƒ†‡ˆ‰Œ”•—•‹‡‚‚€|wwxxxvwyvvvtttusrtuvyz{‚„‡‰ŠŽ|swrgcegcbйÁÄÇÆÆÈÉËÌÌÌËËÌÍÑÍÌÏÎÎÎÎÐÑÑÏÐÏÌÏÐÐÐÏÍËÇÌÓÈÆÑÐÎÏÌÍÐËÓØÍÏÓÕÔÓÔÕÒÕÒ£tortuuwxwvm|¤³¼ÂÀÂÆËÌËÌÑÏÍÐÑÏÏÍËɵWsprw†Ÿ¿ÔÖÓÑÑÓ×××ÙÒÏÕÓÕ×ÔÓÒÐÑØ×ÈÁÁÂÆÃÃÅÊÓÓÑ̺œ…x]AA@ADHJJKOPQSTX[Z]____`deedehghiihgjlggjkmnmmko}seklgp~|vwx~z‰ŒŒ‰ˆ‰ŒŽŒ‹Š‹ŒŠŠŠŠŠŠ‰‡†„„ƒƒƒ„‚‚ƒ‚‚ƒ‚€~}~‚ƒ‚„„„„„ƒƒ„…ˆŠŒ˜¢°»½¼·¯¤›’‰…€~}ywxwxxvuwz|||~~€€}}|}€ƒ…ƒ…‡‡ŠŒt\Ybqvvsmjhihd†¸ÆÃÆÈÊÌËËÊÌÊÆÈÊËÌÉÍÏÍÏÍÍÎͺÉÑÍÏÒÎËÍÏÎÏÑÐÏÑÐÏÐÏÏÎÍÍÏÏÈÍÔÔÒÒÕÔÔÙÀ‡qtx|yvqopƒ—– ·¿¿ÂÆÇÊËÌÐÓÐÎÍÏˬ%i£ÄÔÕ×ÛÒÈ×Ü×ÚÛØ×ÚÙ××רÖÓÓÔרÚÒÅÂÅýÁÂÂÃÀ¾½½¼º¸¹Â¼–{ukV;/248<<>@EHHJNQPOOSXYY[^]`ddefcbceffgffhghjihkjhin{ubelkr~~~€|‰ŒŠ‡†ŠŒŽŽŒŒŽ‹Œ‹ˆ††‡‡…„„…„„„€€€€€€€ƒ‚€‚ƒ„ƒ„ˆ‰ŠŒŒ™¤°¼ÁÁ¿º´­£™Ž†ƒ}zzxwxwwwvtvzzz{{}~€‚ƒ„†‡‡ˆ‹‹Œzec_Zfttsphfhhgv¢ÀÄÆÈÈËÌÊÈÈÇÆÉËÎÏÊÊÊÈÆËÐѺ§ÃÐÎÎÐÎÎÑÐÎÎÆÈÐÑÏÎÏÎÎÐÐÏÐÐÑÒÓÕÎËÑÕÕÒÙˌmqtwurrqmw‹‘—°ÀÀÃÆÉÅÆËÎÏÍÍÏ˱XŸË××ØÙØÙÛÛÚÙÛÜÙÕÖ×ÑÓÙ×ÕÕÔ×ÜÖÈÅÁ¾ÁÁÃÄÅÅÄ´«¾Ã½¹·²³¯|vk_G446789;@ADILLPPMSVVYZZZ[]`aca`accbcedccl|ufinw‚€~zpaTXl‰ŠŠ‰ŒŽ‘’‘‘‘‘“””““’’’“’‘‘’‘Œ‹Šˆ††††………„…ƒƒ…‚‚ƒ€~~€€ƒ‚‚…‹’›¡¦ª­°µº½¼»¼¸±®ª¡˜„|yuqoprstx{|{{|}~‚„…‡‡‡‰ŠŠŠ‹‹Œ}g^]XQRQTYSUhw~|pfdffe…¶Á¾ÅÉÈÇÇÆÉÊÌÎÌËÎÌÊÎÍÍÏÎÍÏÏÍÍÍÎÑÐÎÏÍÍÎÏÐÐÐÏÏÏÏÏÑÓÓÓÔÓÑÓÓÑÒÑÐÑÏÌÒ±tgpqpsvpmq{”²¾¿ÁÄÈÊÈÌɯ%kžÂÛÛÛÙ×רÕÓÙÑÆÓÔÎÖ×ÏÐÔÔÙÖÐÇ»¹¿ÁÁ¿¿Â¾º»¿À¾¼½¼»¸¹»·¢‰„|mghaYTK>1+0/0788=@CFFIMOQRUVUYZZ\\]^``ab`aa`debgxweenx}yuj\RXk€‰‰Š‰Œ’‘“’””‘’•“’‘‘ŽŽ‘‘’ŽŽŒŠ‡†‡‡‡‡†…ƒ‚ƒ€}~~}~€€„Š’›£¤§«®±´µ¹½»·±­©¤¡›Ž†€yurpoortvxz{{~‚ƒ„†‡ˆ‰ŠŠŠŒŒŒŒ{`]ZWXYRQX[Z\iuzzojiigd|«½ÁÅÆÈÇÆÊÊËÎÎÎËËÊÉÍÎÉÌÑÐÏÍÎÎÍÒÒÍÌÌÍÍÏÐÐÒÑÏÎÏÐÐÒÓÒÑÑÒÒÑÏÏÑÐÐÐÌÌΫ{qqossppi^c†«¬¯¼ÃÅÃËÉ­&e ËÛÙÙØ×ÜÙ¿ÃÖרÚÚ×Ö×ÖÓÑÔØ×ÏÃÀÃÃÃÿ¾ÃÃÁ¤˜°¸»¾¾¼½¼¼º¹¶¯ª—ˆ†wrmf_WOG9..15678:=ACGIGIKPTUWWXYZ[\]]_^\]adb_`guxjgr{€~xoh^W\q…‡‡ŠˆŠ’“”’••“””—–“’‘’’’’’ŽŒŽŒˆŠŒŠ‰†…†…„ƒƒ‚‚ƒ€}~}}~€„ˆ˜ž¢¥¦¨¬°´¶µµ³²¯ª¨¥ ˜‘Š€{wqmlpppuxwx{€„†ˆˆŠ‹ŠŠŠŒŒ‹Ž{`[[VVXZ^Z[]ZZ`nwwsojghdj“ºÁ¿ÂÅÈÈÁÄÌÉÉÌÏÍËÍÊÊÏÏÐÏÎÒÒÎÏÐÏÇÊÎÍÏÍÍÐÏÎÏÑÐÑÒÒÒÓÑÐÒÒÒÒÐÐÑÑÏÍÎѰyioponrqkdc|—¥¶ÁÄÄÉÉ­$h©ËØÚ×ÕÙÚÙÕÑÔר×ÖÔÏÑÕÖ××Ù×ÌÀ±³ÀÀÀÁ»¾Á¾Àº±¹¼¹º»½¾»°´·¤£¨”†„{vne`XPIA6-/145689=@BDGIKLNQRTVXXY\][^][Z[bd__jwpho{~wkc\Xd}‡†ˆ‰ˆŠŽ‘”““””••””•–””••”’’”“ŽŽŒŒŒ‹‹ˆ‡‡†„„„€€‚€}{|~ƒƒ‚ƒ„‡Ž“›¡¡¢£¥§®³´³´²°®ª§¤ ›”Œ…{snlnnlnqsvvy~~€‚ƒ……‡ˆ‰‹Œ‹ŒŒŒ{a[\]`b^ZZW\a`__isvxqjhgee†³¾ÀÂÄÅÅÈÊÉÌÎÌÌÌÌÊËÎÎÏÐÏÑÒÑÏÆÄÊÌÏÐÈÈÎÎÉÇÍÎÏÑÐÑÓÓÐÏÑÑÌÎÒÒÓÓÐÏÐÏÑËhnppuuvrij{Ž¥¸½ÀÅÆ­%i¨ËØØÖÖÚÙÖÓÓ×ÚÚÕÕÕÈÊÍÐÓÓÔÎÍï·ÅÃÁÁÅÁÀÀÁ¿º»º¸½»¹½¼»¹®¦­¡‰…ƒ~xroiaYTMH?0+-.2578;@ABDGKKNQQTVWZYVVZZZ\[[^ec`krikx~{ri`YZm…‡„‰‹Š‹‘“’“””–••–”‘’•““•“’”“‘ŽŽ‹‰ˆ…‡‡††ƒƒƒ€€€€}{z|„‡††…ˆ—ŸŸžž ¥©¬¯²°°¬¨§¥¥¡›•‹†ysnlklmnnqwz{}€‚„†……‰Œ‹Š‹zcceacfcb\WZ[[]]\dkt|yiadccr¥ÁÀÄÆÇÇÊËÊÉÌÍËÊÂÃÌÍÎÌÎÐÐÏÍÅÄÌÍÍÑÐÐÐÏÅ¿ÌÏÏÑÑÑÐÑÑÏÐÑÎÏÑÌÍÒÑÏÐÏÌÎʖjknptrptls”¯»ÀÀÄî&m¨ÇÔØÙØØ××ÔÕÙÔÐרÖרÓÓÖ×ÓÈÈĤ«Á´·ÄÄÃÀ¿Â«¢¶º½À½»½¼¸¸¶­¯®—ƒƒ€|zupke_XRMI?.).14888=@BEEHLMNRSTWXXVWXXZ\[\^`\evnix€yof_Z\rŠˆ…ˆŠŒŽ‘’“’’”•”””‘’‘“”“““““’ŽŒŠ‡‡‡„‚ƒƒƒ‚€~}zz}‚‡‡††…‡‹”˜™™œžŸ¤¦¨ª©ª©§¦¥¤¡Ÿ›˜”Œ„|tlllijnprtvy}‚ƒ…†‡ŠŠŒŠŠŒ‹‰Š}jgihhgjhda[\``^\Zcmqwuojhhek”ºÃÄÂÅÊÍÍËËÍËÉÊÌÎÎÍÍÏÏÍËÎÎËËÍÍÍÎÑÏÍÐÑÏÏÑÑÐÑÑÐÐÐÏÏÍÎÑÏÐÓÑÐÐÎÍÌÐŒmnqqwusnnx~—´½ÃÁ¨$lªÊ×ÙØ××××××ÙØÖÖ×ÙÙÙÙØÙÚÔÊÅÉÉÀ¿ÃĽ»ÂÂÂÁ÷¡£°¸¹¹ºº¹¹¹¹·³´§‡}zukjoi^WTLJE8,*+.2368;?BDEFKKKNQSTUVUXWYZ[^aZUoukwzpf_\by‰†…‡‰‹Ž‘““‘’•“‘“”‘’“’•”‘’’Œ‹Šˆ‡‡…ƒ‚‚€~|}yyzz‚…‡‡††Š‘“”•–™›ž£§¨¨¨§¦§¥¢¢¡ œ—•‘‰‚xnjkjhgjosuxy‚……ƒ‡‹ŒŠ‡ŠŒŒŠ}nkiki`fjc^^]ZZ[^`XRaqvwrijkif€°À¿ÃÇÍÍÌÍËÉÈÉËÊÉÌÒ¯¦ËÏÍÍÇ¿ÆÍÌÌÏÒÏÎÎÏÎÐÑÐÑÑÐÓÕÒÏÏÏÐÐÒÒÑÒÑÍÌÌÊÊÏ«xjoxyurmhdh€­Ã»©$k§ËØ×ÙÖ××ÖÕÔÔÖÖÔ××ÖÕÖÙÙÚÒÉÈÈÇÇÄÄÅÆÅþ¾Ã¿¿À½º¹¹ºµ´¼º··´¸´˜‡…{{xtrnjd[VPLJC6,-/1326;==@CEGILMMQTUUUVWX\]^YUjvlu€{meb`ezˆ‡†‡ˆŠ‘”“”’‘’“”““””‘‘‘ŽŽŽŒˆˆ‰‡…„‚‚~}~||yxz|~€‚„„„ƒ„‰Ž‘’•šœŸ£¤¤¤¤¤¥¥¤¢¡Ÿš—•’Šƒ|pijhghknosvy~ƒ„…„€†Š‰…†Š‹Šzjjhehfaa``_][XY[^_a`eopssnkllfr¡½ÀÃÅÇÊËÉÈËμ®ÂÍËÌÌÐÏÅÄÌÊÇÊÌËÌÍËÌÎÎÏÒÑÐÑÒÑÐÓÔÒÏÎÏÏÐÑÐÈÊÐÌËÎÎÍÓ¯vkorvtqqqu~޳½£$l¨ÉרÙÖÖØÔÐÔÕÖ×ÕÖÕÔÖ×ÙÕÆ·½ÇÀÁÇÅÃÁÁÅÅ­§¼º³¸¾»¸¹»¼»µµ¸º¸·³«£‡„}yvusokg^THADF@3(,01349;:=@CGHHLMMRSTWXZ\][ZYfvps{ohb^h{†„„†ˆŠŒŽ‘‘‘’“”“‘’’’”•“‘“”‘Œ‹‰‰‡†‡„ƒ€~}{~}vuvuy}€‚‚‚„†‡‰Š‹•œŸ¢¢Ÿ ŸŸ¡¡ š—’Œ‰…€yojiedceilsyzzƒ‚‚ƒƒ‚„‰ˆ…‡Š‹zhhihggda`^]XYWT_`Z[^[`luwtpmmjdgµ½ÃÄÅÈÈÉÊÃÀÁÇËËÎÌËÏ»ºÎÍËËËÉËÏÎÎÏÎÏÎÌÎÒÐÊÍÒÒÒÏÏÏÎÎÎÏÎÎÑÐÏÏÏÐÑÓ®vhlqxrosqrjŒ´¦$m¨ÈØ×Ø×Ö×Ö××ÖרØÖÔ×ÙØØË¶«®ÃÉ¿ÁÈûÂËĸ¾Ã¿µ§«³³º»ºº¹º¼¹»¹²­‹…ƒ~{|yurpljf^UMKIF=-)+/325:<==>DHIKKKNQUXWTVY[]drop}zqldbkz„„„…‰‹Œ’“•’’””“”“‘‘‘Ž‘‹ˆ††‡ˆ…ƒ€€~}}|{ywtsuvyzz{zyz{}{|~~~‡Œ•œŸ¢Ÿžœ›››š—”Š‡‚~zwunjhgfcfilqtwy~€€ƒƒ‚…††‡ˆŠŒ{khifefda]\\[[]^]\[\^^Z\fpsuqigigaxªÃÄÄÅÈÉËÌÊÈÆÈÎÎÌÍÏÊÌÒÏÌÌËÊÎÎÊËÎÏÎÎÏÏÐÏËÎÐÎÎÑÏÌÍÏÌÌÏÐÐÑÑÐÎÏÐÐÖ½‚ksttrmpthex‡'j§ËÈÀÏÖÕØ×רÚÙØÚÖÒ×ÛÛÖȼ»¾ÆÊÇÆÇÈÈ¿ÅÇÄÃÀÀÂü´µ¹¼»¾½·º½¼¸±²­”„ƒ€{zzyunjjb_c[QKHFC;*%+/1338<=<>BDHLNLRWWVX[YY`otq||rmgdku…„…ˆ‹ŒŽ‘‘‘’“’‘“‘‘’‘ŽŒŽŒ‹Š‰‡……†‚~}}|zyusqonoqqsqnnoqtxyyx{|‚ˆŒ“—˜—–“’’‘‘‹‡ƒ~wqnqrokiffffeiotxy{}}‚ƒƒ„……†‰‹ˆvc`cdacea__]\]\]^\XWXY\Z^jstttojiigt¡Ãž¼ÄÉÊÉÊÌËÌÏÒÐÍÏÐÏÎËËÌËÉÊÌÏÐÍÍÍÎÏÏÐÎÐÐÎÏÑÐÌÌÏÏÌÌÐÐÎÐÒÐÑÐËÊÔ…mwwqnpvudnƒ$i¥ÄÔÖÕÕÖÖØÙØØÙÙÚØ×ÙÛÛÒ»¬¹ÈÈÅÂÂÂÀÃÆÃÄÅÂÿ¾ÁÂÀº¸´²¸¾¾½ÀÁÀ¯§±³¤‹„…twytspnmkg\YVOKDDD5((-..4:6:@@BEDHLPUWXUWYZ]iuu{~ysmnrswƒˆ……ˆ‹’“‘Ž‘’ŽŒ‹ŒŠ‰ˆˆ‡††…‚€}{{|zyxwupmkjllicWICHTajpsuwx{‚ˆŒŒ‹‹ŠŠ‰‰‹ˆ„{ncagnqnljgecejnprwzz|~€€‚ƒ„††‡‰Œ‡sddcccbca^ac`_ZZ^][YTRY_abglmruqjjmkiˆ·¿¹¿ÆÉÇÅÊÆÅÍÓ˽ÇÐÏ̽ÀÌÉÉÊÍ̽ÁÐÍÌÏÐÏÍÎÏÎÏÐÏÎÎÎÐÍËÎÏÐÒÓÔÔÑÏÎÌÓÈnxskqwulis%h§ÉÕÖ×ÕÖרÚÚÙÚÚÚÙÚÛÝл¿ÈËÊÇÆÆÄÆÇÄÅÇÇÅÁ¿¹¾À¾Á½µ¶»º¼»»½½½·´´³¯™ˆ†„|ywurrpifedd]PGIHC?1')..0456:?ACGIKNSYZUV[]amvy€~†…}v|‡†ƒˆ‹Œ’‘’’‘‘‘Ž‹‹Š‹ŠŠ‰‰ˆ††…‚~}}|{zyzxtplhffffaZTICDIQ]hoswxy~‚„…„„„‚‚{teZZ_dkoooljigedhlpvy|~~€‚ƒ„†‡‡ˆ‹„macbbegdceeb_`_]Y]`[[[ZZ\\[_djpuusoige}®¿¾ÅÇÈÈÈÊËÊËÍÍÎÏÎÏÐÉÅÇÆÊÌËÍÏÏÌÌÎÐÍÎÐÏÏÏÏÏÏÎÍÎÎÊÉÎÏÐÑÐÏÐÐÐÐÍÔÑ¢|zwtsrqli 'o¨ÉÖÕÔÕØØÚÜÜÜÛÛÜÛÙÚÝØÓÔÏÊËÊÇÆÇÇÄÄÆÂ½ÁÄÁÂÿ¾ÁÀ¾»··»½¾½Áº´¹¸²µ¬“†…‚}yxroqnkjheca[RHBCA;0+-.03699;?CEFIMSWY[\\]hvwz†Œ„|vu€‡„‡‹Œ’“‘’”“‘‘ŽŠŠŒŒŒ‹‹‰‰Šˆ‡…ƒ~|xxywwxzxvtpiedbcc_[XTNIFKVajqwyyz}}||z|{{|tgZTXahnqsuspliheinrvx{}~€€ƒ„…‡ˆ‹„oaadgeabefa]^]^`^^^\[[Z[\[Z\ZZjvvupiikhn•¼ÄÄÅÈÇÆÊÉÊÐÎÍÏÊÈÍÌÈÉÉËÍÌÏÏÍÌÍÎÎÎÏÑÒÐÐÑÏÎÍÌÎÐÍÉËÏÎÍÎÑÑÐÐÒÐÍÒ×­ysvpooli%m©ÈÔÕÖØÚÛÛÚÛÜÛÚÜÜÙÙÜÙÐÊÉÌÌÊÊÅÄÃÀÄÆÄÀÀþ¾ÅÃÂÃÁ¾¾¾º¸¼À¿½½»¸´´´°ŸŒ‰„€~zyxusommjgeda^WD;@@A:.(*/1268;=@ACGMSSRW[Ycswxz}‡Œˆ|rrz…„„ˆŠ‘’Ž‹ŽŒŒ‹ŒŒŠŠ‰ˆ‡‰Š‰‰ˆ†…‚|zxyxxxxvuwuqmjc\[YWYZYVSPLOT^hotvvttsrssstqfXORY`inqvxvsrnjkklosy{z|}~~~‚„…‡Š‹i^cb^bdbb`_^]]^aa^^^]\]\Z\[[^\`jqvwngikge…¯ÂÅÇÈÉÉÊËÍÍÉÊÌÌÍËÈÊÊÉËÉÌÎÌÌÊÊÌÌÌÐÒÑÎÏÐÏÎÍÏÎËÈÈÊÌÍÎÍÏÑÑÒÒÒÒÔØ¸suoqpn'n£ÇÕÖÙÚÙÙÜÝÜÚÚÛÝÝÜÚÜÖËÉËÌËÊÉÈÈÇÆÆÇÆÄÅÅÆÄÁÅÄ¿À¾¬Ÿ¢­¶¼¿¾»¹¸¶³²±¨“ƒ€|yyzwtponjjg``b]PCDGEA8,(+-/15:=>BDCHNRSW^`oztv}†Œ‹…}tvƒ……ˆŒ‘Ž‘‘ŽŒŒ‹ŒŒŽŒŠŠŠŠŠ‰‡‡‡ˆˆ†‡„‚~|yxvvwxxxxzzxupld^\[ZYYXWXVQNQYenostqstrpppkd[Y^chmpswxzzuspmlmpsuy{||}‚„‚‰‰~iabccbcb`^[[`a^_aa`__^ZZ[VVYW]a`fpuyztlhjbp¥¿¿ÃÄÇÊËÍËÉËÍÎËÈÌ¿°ÁÌËÍÍÍÎÌÍÌÌÎÑÑÐÏÐÐÏÏÍÎÍÎÑÌÈËÏÐÏÎÐÑÒÔÓÔÒÑÙĈnwyvr#k¬ÉÕ×ÙÛÛÚÛÝÜÝÞÞÝÝÜÜÙÌÈÌÌÊÊÊÌËÌËÆÅÆÈÊÊÆÆÉÅÅÃÃÈÆÃݝ«º¾¾¼¸³³³±±´¦‹„…‚zz{xussp]Xcca`^]ZRGGFA>3)*+/1268=?@BIMOQSVcvsmsŠŠ†€|‚‚‡ŒŽŽŒ‹‹‹ˆˆ‰Š‰ˆ‡ˆ‡„„††‡†††‚~{yywvwz|{{}~zxunjiea`__``aa^XX_emonprpnoonkebbfhimprtvz}|{yvrmnqruxyz{}€‚ƒ‚…ŠŠxgebacccadhedd`acb`_``]][XZZY[YY\^dirwspnjjbf–»À¿ÁÈÇÇËËÊÉËÏËÊÈ¿ÈÍÊÍÍÌÌÊÉÌÌÌÎÍÍÎÍÎÏÎÏÎÍÎÑÍÊÍÎÏÐÏÎÑÒÒÑÓÓÒÑÚΐrzto&l«ÉÕØÙÚÜÝÛÛÛÛÜÝÞÝÛÜÔÅÆÊÌËÊËÊÊÌËÉÉÉÆÈÊÆÆÇÆÅÅÃÂÃÁ¼¹´º½¼¾¼¹´­®´µ¨œ‘†…„ƒ€||zvutpkiigee`Z\]PGFDDA;2)).1123597+*112599>O[TPjƒ‚ƒˆˆ…„€|y}€‚ˆŽŽŽŽ‹Š‰ˆ‰‰Šˆˆ‰†„„‚„„‚€€‚ƒ‚~‚‚ƒ‚€€€}|~|yyxuspnmmmlmmkifdedhigfcchjloquxx{}‚€‚‚€~|{{zxvwxvwz{|~‡Šzfac`[[Z`eccbbb_^a\VXZ^^]^`__ba\ZXTUXYZY\isrmkjhhec«º½ÀÃÅÈÉȽºÈÇÇÆÆÉÊÌËÈÅÆÌÏÌÍÐÏÑÏËËÎÎÍÍÊËÍÐÐÍÏÒÐÅÅÏÏÑÑÏÓÒÑÏÒÒ²&k©ÎÚÚÛÜÜÞÜÝßÝÜÜÛÜÜ×ÏÉÊÉËÌËÐÐÌÍÍÍÉÈÍÌÉÇÇÈÆÉÇ¿¿ÄÅÃÁ¾Â¸¤°¼¶¯µº¹·´¶³²¥‡†€z{yuvvrqpmkkjfgeeda_ZWWTKFEDA@8-*,.39EKOVS`|„‡ˆ‡†}|}‚…ŽŒŒŒ‹‹Š‹‰‰‰‡††„…ƒ€€€€€€‚ƒ„€}}~}}||{zzxutromllkiigdcaacbbddgmpqvxz|‚‚‚‚ƒƒ‚}~}xvttwvvyyz|††rbdedddccbbca^]^__[WY_`_\\cgdcdd]Z[VUYYWZZaorrpiefcbw »¿ÀÄÅÄÆÊÊÊÌÏÐÍÉÇÇËÈÃÅÊÌËÏÑÐÒÒÎÎÏÎÎÎÍÌËÍÎÍÏÑÐÎÎÐÑÒÑÏÒÓÑÑÔͰ&m¬ÍÛÜÝÝÝÝÝÝÝÜÜÝÜÜÚÓÈÇÊÉËÆÅÍËËÍËÊÊÍÏÌËÈÉÉÄÄÈÆÃÅÈÅż²¼Â½¿¼·º»»¸µ²°°­šŠˆˆ…ƒ€zvusssqpkhiiggda`YUZXVQICB?=<0*.1?C[ponv†‹ŠŠŠŠŠŒŒŒŽŒŒŠ‰‹ŽŽŽ‹ŒŠ„‚~~~|{{{zyyz{|}}{|{{zvpieaadfedehjjkjebaa_bcacehnrtvusttolptw{|ƒ„…ˆŠ‰†…†‡‰‡†‚pddc][`ddge^_ab^[_ba`bc`[\`cfca]Y]`_`^[[[\\Y[]\ZYZWTUWWVWXSVhrsqkgjldk™º½½¿ÄÅÇÉËËÉÊÍÏÍÈÃÆÉÉÉÇÆÉÌÍÍÊÉËËÌÎÏÍÎÐÏÎÓή&k§ËÜÞÝÜØ×ÚÕÖÙÕˤˆ³ÔÏÐÑÎÑÐÑÓÒÏÏÑÑÑÊÃËÏÍÁ»ÉÌÆÅÇÊÉÈÈÈÇÈËËÇÄÃÁÄÅÂÀ¼º¹¸º¹·µµ·µ¡Šˆ‡„€€~yywvvjjrolkongghifcabbbcdffc`[USRQKCA;GT\]\\]UKNYenv{}€ƒ‡Š‹‹‹Šˆˆ„p_\ZXUSOLLPX^_`aba_`bbabb_]__^\]_ab`_^Z^a_\]_^_][ZZ]_^^__^^_^__][[[Z[[etyyrkjkhd‡¸ÁÁÇÉÊËÌÉÆÈÉÇÇÊÀ¾ÊÉÆÇÇÉÊÌÎÎÏÍÌÑÊ®%l¨ÅÕÛÛߨÊÖÍ·ÀÌÌËËÏÑÑÒÓÓÒÔÔÒÐÏÉËÑÑÏÏÎÍÍÍÎÌÁ¶°»ÈÇÈÃÁÆÄÇÆÃÄÅÅÆÇÈÆÄÄÃÃÄÁÀ»»»¸»¼¸¶®•Š†„„|vvzxvwwsqqqmmlijkjfcgfc\VVWWXUNLNIA=>@Tw€~‚…‰Š‰ˆŠŠ‹ŠŠ‹‹‹ŽŽŽ‹‡……€|xrcQECIKMRQQPKGCCHWYLGKNOWemrvusk`aimh]UMBRgyŠ“‘‹‡€yxxphgnrty}€‚…‡‰Š‰ˆ‡‡j[[ZTSUVXY]_]]_]ZSNLQWWY[Z[[\YQMORZ`aaaba____acdb_```a__[ZXVZ]]^^ZY]`__^^fu{xrlknhk•ºÀÂÆÉËȼ¾ÆÅÈÆÆÈÇÇÆÅÄÆÊÌÌÎÌËÏʵ%m­ÈÑÚßÞÛÜÛÓÎÌÌÎÑÎÌÎÐÓÔÔÕÕÖÕÒÏÐÏÏÑÑÐÍÏÏÍÍÇÂÆÇÇÉȼ¿ÈÃÈÉÅÆÆÇÇÈÈÈÊÇÆÆÄÃÂÂÄ¿¿Äú¸º¯š‡{wstwvxqotttuvrqpnljediihd`\\]]XQRRIGECB?;Ip„‚ƒ„„…‡Š‹‹ŒŒŒŽŽ‘ŽŒŒ‰†…~xqg\Zblqpnlknrtw~†‰‹‹‡€rWLSXXTQRUV[cilf[X\a[W^mx€Œ–š››”‰„€~zsorwz|‚‚„‡†ˆ‰††‰~g]^ZWX]^[Z^^[VRNNPMIIJKLJJMNOQQOLR]____aa```\Z\``_```b``a`]Z\]]\[ZXVZ__[\\bryzumkmjf„³ÂÅÈÈÅÇÇÅÅÈÉÉÊÉÇÉÉÇÉÈÇÌÍÍÎÒË®%nªÆÒÜÞÚÛÝÙÎÉÌÍÍÎÐÐÐÒÓÐÐÑÑÔÕÒÎÐÑÉÄÊÎÎÍÏÏÌÈÃÉËÈÉÊÊÉÅÄÈÉÈÈÆÇÈÈÉÈÇÇÆÃÄÆÃ¿¼»½¼½À½º¸¸¨Š†€{tqvty{vyxvuusstqolgegigeb_][XXWTPIGHEB@>Jnƒƒ„ƒ€ƒ‡‡‰‹‰ˆ‹ŒŒŽ‘‘Ž‹†‚ypjfgntxwutsrtx‰‘—›š”‘ˆzkehmswvqmoolffknnlmyˆ”˜œŸ—ŒŒ‰…ywwxy{~€ƒ†††…†……†z`XZWVVX][[_ZSQQOQWSMNQSSOKMMKLNNOY__^\[[URUX\\[\]``a`````cc^\]_][\[Z[[\ZUVX\gtwojeeifu¦ÀÁÅÅÇÉÇÅÄÅÈÉÇÉÉÈÉÉÊÉÉËÊËÐË´%k¦ÅÕÜÛØÛÙÕÌÈÉÈËÏÏÍÏÒÑÒÓÐÑÕÕÒÒÑÑÑÏǺÂÌÊÌÌÉÉÊÉÈÊÌÌÌÌÊÉÈÈÈÉÉÊÇÂÅÇÈÉÇÃÃÅ»º¼¼½À¿½»¸°˜Œ†…€ƒ€}|zzy{wbdrrrpmidgjgdc`bc^YUURONJC@ACOj~‚„„€‡ˆ‡ˆˆˆŒ‹ŒŽŽŽ““‘Ž‰…ƒ~xsoosxz|}zwyxu{„‹•›œžž ¡¡Ÿ›–smqpliloljjlnqu{ˆ”œŸœš˜•‘“‘†‚€|z{~}‚…„„…„…‡v^Y[Y[]\^ZYYURSWVRSUSRRSTQMKNNMPNJFMVUTTRIHNMJPY\`a]\_`__babb^]^\ZZYZYY\[[]\[X^muuohjjciޏÅÂÂÃÆÆÄÆÅÆÆÆÇÅÁÆÊÄÈÍÊÊÐÌ®%o«ÊÚÜÚØÛÛÓÊÊÌÎÎÏÏÍÑÒÑÒÔÒÏÒÏÉÈÍÑÎÍÍÊÌËÇÆÊÍÌÊÊÆÄÊËÇÅÈÉÇÇÊÇÆÊÊÈÊÊÇÇÇÆÅÄÇļ»»º»¾¾¹¸·¥‘Œˆ††…ƒ„‚}|||pahsusomnlbaikhc``]UUVVVKEFEEKRg„„ƒ€…††ˆ‰‰ŠŒ‹‹Ž’’Žˆ…‚{zyuw|}~‚€€ƒ†Š“›ž¡¦ª«««¬«¡”ˆysqrrtuw{†”𠤤Ÿš˜–””“‰†…„€}€‚ƒ‚ƒƒ‚‚„…p]]_ZY^`^]^^][XYXWWTRVXURRRRPPQT[ZROPOLIHD@CHLT[^^__^``^_`acb`_```_[[[XZ[ZXY[[Z^jpqmifgge„²¿ÁÃÂÃÃÃÀÂÇÃÂÄÄÉɱºÐÌÉÌÊ©$k©ÍÛÜÙØÚοÆËÉÍÐÔÕÓÑÑÑÑÖÌ»ÆÎÈÅÌÑÏÍËËÎÏÌËËÍÎÍËÈÈÉÊÈÇÈÈÈÃÂÊÌÉÉÈÄÈÌÉÇÆÅÄÃÄÿ¾¿¾¾»º¹¹´ ‘‡„†‡‡…‚~{{ztrvususnlljb`bced^[YWWUKJOOLNUP\}†„„€|€†††ˆ‰‡ˆŠ‰ŠŠ‰ŠŽ‘ŽŠ…‚~|||}‚ƒ„ƒ†‡‰‹‹‹‰‰‹–™¡¢¨°´µµ´··¯¢”…}…ˆˆ‡‰Œ“–——š›—’ŽŽŠ‡…ƒƒ}€‚€ƒ‚„‚m__]ZZZZZZ[[XVZZVWXWXTSURRTSRQRSXZTONJIIGJJEEFNY][\^_`]Z]``b`_baaa^]]^\ZZYYXVUXXZhqptshfg`r¦¼»ÁÃÃÄÅÅÇ¿¿ÆÆÈËÊÉÍÈÅËÇ«$m«ÌÚÚØØ×ÖÐÈÌÒÐÎÓÒÍÑÔÒÐÒÓÓÒÑËÄÆÉÌÎÍÌÍÏÌÍÍÇËÐÌÇÇÇÉÉÇÈÉÉÈÉËÈÇÉÊËËÊÉÊÈÆÅÆÄÄ¿½½½¾½¾½¼¼³›ŽŒ‰…„…}{||{{zuwupnlmonfa`^`_[YWVUVTNPVUJY}†‚ƒ€}€…††‰‰†…ˆ†ˆ‹ŠŠŒŒŠ†‚~ƒ‡‡‡……‡Š’”“‘Ž‹‰ŠŒ“”–ž¦®¶¼ÁÁý­Ÿ”Œ“—˜–””“’ŽŒˆ‡Š’‘“’Œ…ƒ‚‚~~~ƒ|i]^^Z\\[ZZWSVVVWVVWWUTQPRRSSTTSUYZTPMJHHHIGEKTZ[]]^^]^\]^^_aca`````^]\WX[\\[\ZWXVU_isyrjfhgi’ºº½ÄÀ¹¾ÅÄÅÅÈÅÇËÈÍÆ¼Éȯ&l§ÍÚÖÖØØÔÍÌÐÐÐÑÐÑ·“¯ËÍÒÓÓÑÐÑÒÐÍÏÐËÌÑÐÍÌÍÌËËÌÎÌÈÈÊÊÈÊɾÃËÈÉËÉÉÊÈÇÈÇÄÂÅÆÂÁÀ¾¼¼½¾½¼¿¾§‘ŽŽ‹…„…ƒƒ}{||zxwuturomljijgcbda^`a^\[WTWYQESy„€ƒzy†ˆˆ‰‰‡‡‡ˆŠ‰‰‰ŽŽ‹ˆ…„ƒ„„…ˆŒŒŠˆ†‡‰•˜—’Šˆ‡‹•—™¡¦«®²´´²«¥£££ š—•‘Ž‹‡ƒ‚‚„‰Œ•™˜‘‰„ƒ……ƒ€€~~ƒwd`]Z\]\][XXWVY[\\Z[ZWXZXRTWVUWWUWWVUSRLIIIHNV\_^]\]^_^__^aba`__``_^]\]\\[YVVZZVVW_b\bnutnjkie®»ºÀÇÈÅÄÂÁÇÆÆËËËÍËËǨ%j¨ÍÚÙר×ÍÄËÑÐÏÑÑÐÉÇÏÓÓÕÖÖÖÓÑÐÏÐÏÎÉÉÑÐÍÊËÏÇÂÉÌÉÈÉÉÊÊÉÊÈÉËÊËÌÅÃÊÊÉÉÉÄÁ¼¹Àÿ½½º¹½¾»¹¼´ž‘‹‡†„„‚‚}z{ywwvttrppokgihccb`aa_\[\ZRNLVr‚‚~yx~‚ƒ…†„††…†ˆ‡ˆˆ‡ˆˆ‰ˆ†††„ƒ„†ˆ‹ŽŒŠ‰Š•—˜–‘‰‡‡ˆ‰Ž‘”–”•–—š› ¤¦£ž›™˜–“‰…„€~€‚ƒ…ˆŠ‹–œœ–‘Š‰ˆˆ„€}}~}~€|nba]YZ\_`\[]\[XWXWWZ]\WVTSTTUTRQQUWVURPOKORTZ\]`_][YWOIHGGHMUUSUXZ\\[\\\]\ZZZWY\YWYYZW\lttnjhf`q¢½»ÀÇÈÇÄÄÈÇÆÈÊËÌËÐˬ&nªËØØ×ØÕÍÌÍÎÒÒÐÓÓÓÑÄÇÑÎÑÔËÄÉÍÏÐÏÐÒÐÐÎÍËÊÍÍÍÎËÉÆÅÈÊÊÊËÍËÌËÌÎÇÆÊÈÈÈÇÅÁ»·¹º¼¾À¾ºº»»µ³·©“ˆ…†ˆ…ƒƒƒƒ}ywvuwsorrnlkha_bcdec\\^\VQPS^q~}wsw|…†…†ƒƒ…†„…††‡‡‡‡„‚„†…†ŠŽŒ‹Œ’”–”••“Š‡„„ƒƒˆ’“””’•—•“ŽŠ‡‚€~}~ƒ„…ˆŒ’™Ÿ ž˜•–”’Œ‡‚}}~yidc``[Y[^][\][Z^[UVY]__\XUUXVTRTVUUVTSNKNQTY[]^`]VQQQPMOSQOKMPPMJHJT][Y\^]\[X[]\]^\ZZ[\]fquqjghei‘¸À¿ÄÈÅÃÇÆÇÉÆÉÌËÎÉ«$h©ÌØÙØÖÒÌÎÐÏÐÑÒÒÔÒÐÎÑÔÔÌÉÎÇÇÐÐÐÐÑÐÐÏÎÎÐÏÌÍÎÍËþ¿ÇÉÉÇÂÄÆÆÈÊËÌÃÁÊÊÉÈÆÁº³±·½À½¼¾¿½ºº¸±«Š†Šˆ………†„€|wttutuvuqonljebdhfb^_c`[YSVggds|{|wsuzƒ‚„†…ƒƒ„„ƒ„ƒ„…ƒƒ‚„…‡‡‡‹ŽŽŒ“””’‘’’‘Ž‰…ƒƒˆ‹‘‘Šˆˆ‡ƒ‚‚}|yz|}~}{~„ˆŒ”œ Ÿš——˜˜–””ކƒ~}}|rd^[^^^]\^_YX[YZZZZXYYY\]YSUWTTRPPTWUSQQUWYZ\^]YVQKJMNNMKPQLQWVQJJLJS\[Z[\^^^``_\\ZZ^^\[WV`lstpjfef†´ÃÂÄÄÄÆÅÇÉÊËËÊÌȱ%n¬Ê×ÙØÖÌÇÏÑÏÐÑÒÒÒÒÏÉÇÌÎÏÐÎÏÒÓÐÍÍÐÑËËÎÎÍÍÍÍÎÍÌÉÅÈÈÇǹ°ÀĽÈÌÉÆÃÉËÀ½ÉÌÁ¹¼¿¼»¿¾»·¹»»º¼¶®¥ƒˆŒ‰†‡†„‚‚ƒ}xuronnnmmlmjffebccegb]]YVd|dGasvzwqqwy}‚‚€ƒƒ„„ƒƒ„ƒ€€ƒƒƒ†ˆŒ‹‘‘“•–—””“’‹ŒŒ‰‡ƒ€~}}„‡‡…„‚~|{||}|{}|xwx{|z{{|‚‡”›  œ››š˜™™”…~z{|zi[__][YVWY[^^\\^ZZ[[YXZYXWVVUSOOQQSXXUUWZ\[ZXXYSPPJHKKILLLOONMJIHHKPQSQJMSTU\`]][XYYW[^\]\\cksvqighdv©ÂÀÁÁÃÃÃÆÈËËÊÌÉ®&m¨ÍÚÙÙÕÎËËÐÓÎÎÒÒÒÒÓÑÎÎÊÎÒÒÓÐËËÍÏÑÐÈÉÐÑÎÎÏÍÍÎÌÊÌÎÍÍÅÂÉËÌÌÊÊË»¼ËÊÉÌËʽµ½ÁÂÂÁÀ½º¹º»·µµ±©‘„‰‹ˆ†††‚~€{rruvxvsmgdeeecbehlhacf^^`o…|[Vjortmjqw|‚€~‚„„€~{||}€„††…ˆŒ•šŸ›–”‘Ž‹Œ‹‡ƒƒ‚€~ywwwxz{~~{|~~|yvvxyyvv{yy|}‚ˆŒ’™žŸœœžš˜“Ž‡zyzqb__]XTX\]\]]\^]YYYY[^^\ZZYWZYTTUSQSXVPPY\]^]WQQOOMIFHLNONIMPKKKHGHILQQNKQVV\`_\UV\\[[ZZ[\[]\\issqjggch“¼Á¾ÀÃÃÂÃÉÊÆÉÆ­&m«ÎÙÙÒÆÅÌÍÍÐÎÎÒÓÒÔÓÏÐÐÏÏÏÑÒÐÎÊËÐÏÐÏÎÏÏÎÊ¿ÂÎÎËÊÌÌËËÌÊÉÉÈÈËËÌÊËÊÄÆÌËËÉÄÄÅÄÄÀ¶¹Ã¾º¼¹³±³°¤“Ž‹ˆ‰‡…ƒ€ymoruxxxtngdcdfhhghhiidacfvƒmV\finlfgsxz~}{~€~}}~~€ƒ…‡‹Ž‘•˜Ÿ¢¤£Ÿ™“ŽŒŠŠ†‚|ww{}zxwxwtw||}~}}|xvvtstrruwy{‚‡Š•œŸ¡žŸžœ™–Š…~xwrga]YXZ[[[\\^_\ZZYZ][[[[\\[ZYXXZUSWWY[ZXZ[^a]ZURMLOOQPMMNNMNRTQOLJKIKKHGFIOSU[_\X]]\_^__]^^\XX[X`mrqlnoig‚¬¿ÀÀÂÄÆÉÊÊÉ©&l«Í×ÖÐÊÊÎÍÆÍÐÎÑÒÒÔÓÌÍÑÐÎÐÒÑÓÇ»ÉÓÐÍÊÏÎÀÅÏÍÎÆÆÍÌËÍÌÉËËÊÊÉÈÉÊÉÊÇÉËËËÊÉÊÈÇÇÄÃÀ¹¾Âº½½º¸·³¥¥¤”ŽŒ‹ˆ‡†…ƒz{yrwxwwsihihjkkihhe_bhgl|x\Waeeffekpu{~}}}}{}}{||}€„ƒƒ‡Š‹’˜£§©¨¤¡™‘ŒŠ‡‡†‚€~|ywusuutsuvvwtsqqrpoqoooprtvwz†Š˜ŸŸŸ Ÿ›”Šƒ|ywqd[XXZ[[YZ\\]^^\\ZY]`^]`^^_[ZZXZZ_^WTVVV\`__^XTSTTQTWSPNOPMORPLMOMJKMLIHKJNPOV`dddca_^]_[UY[\]^\T]ntwwqlmitŸ¿ÂÀÀÁÄÊÈÊÆ¬%m­ÇÈÐÓÇÈÎÉÌÑÏÑÓÔÑÎÏÍÏÏÅÅÉÎÐÏÑÏÎÑÐÉÆÌÏÎÏÐÐÎÍÏÎÍÍÊÉËÌÎÍËËÍÌËÊÉËÉÉÈÅÉǽÁµºÅÄÀ¿ÁÀ½»¾½¹¹µµ´ŸŽ‹‡†ˆ‡„‚}~}{xurroljhifcdcbcilkim|}}iX\__a`]bjotyz}||{{{{zz{}€ƒ†ˆŠŽ’—¡£¨©¦¥¡š“‹‰„‚‚€~|ywurprrrooqrqpqomnnmkmqrsux|~‚…Š’˜™œžœž¡¡žœ–Š‚zvtg[[\[\\\[[[[]`aa_^_]\]^^Z[^[Z_^Z\]\Z]^YZ[[_]UQRSRRRPPSQPQPNLLNNLLMOOOOONMKLPX__`cd`^^^]YXYWVYYXY[[_kv€}qlmffг¼¼¿ÄÊÊËÆª&jªËÔÒÐËÊÎÎËÑÐÐÔÕÔÒÍÍÒÏËÇÄÍÐÍÎÍÉÅÉÌËÎÐÑÑÏÏÎÌÏÎÊËÌÌËËËÌËÌÎÏÎËËÌÉÈÉÉÈÈ省ÆÅÃÂÀ¿À¿¼½À¿¼»»¿±˜ŽŒ‰‡‡‡ƒ~~€}€€zwvrpmlkhimifjnmigm||xrVRZ[[\]`hlry{{yyzzwuw{}|„‰“–˜š›ž¢¥¦¦¤ ˜’Ž‹ˆ…ƒ€|{z{ywuqnoqnmommlklmnmmoqqsuvy}‚ŠŽ‘–›žŸ ¡¢¢¡Ÿš•ˆ€vtoda`_^]^][[\^]\]^__\YZ[\\]`a_\^_^\[ZYYXZ^]]\WSSSRQQQOPTTSQNPSRPPPPRQQSQOMIJKOW\``bgf_ZZ_^\\[XVZ\YY]`^et}{tmfgbu¦º½ÀÂÇÉÄ®$l¨ÈÏÆÅÉÊÌËËÐÐÑÓÓÒÓÑÑÔÎÊÎÎÌÎÐÌÍͼºËÎÎÎÏÎÈÊÌËÍÍÍÌÉÊÍÍËËÌÌÎÍÊËÍËÉËËÆÇÌÈÇÃÁÇÅÀÁÁ¿¿ÁÁÀÁ¼º¹·¶´ ŽŽ‹ˆˆ‰†……‚~{ytqromlkgfjnllnkhp~yp{vZQW[[XY[^gnsxxyzxywuvwy|‡””–›Ÿ  ¡¢£££¡œ—ŽŽ‹†}|zxxvvtpommnnnmmmnliijlkmprsuz…‹‘˜›š˜œ ¢¢žš•†{utl`_]Z\__^]`a]^^_\WX]_`_\\^^^^[Y[]^^``__a`\[YVWWTSTTOOQQSSRSVYXUQPRPONNQPPNHILMS^a__fb^ab^\\\XY[\\[^``^bq~{pffici•¯°½ÃÇÆ±#i¨ÌÖÒÉÇÌÎÇÈÒÑÐÑÒÒÑÊËÏÌÌÑÑÌÍÎÏÑȽÈÏÏÎÌÎÐÐÏÌÌÏÊÅÌËÉÊÅÇËËÌÎÌËÈÆÊÍÌÊÈËËÌÌÊÆÃ¸·»»ÀÀ½½Á¿ºº¹¸¶¶¯šŽŒŠ‰‡ƒƒ„ƒ€~xssnkllnqqqolkkiq€ymv|eQQUYXVVY_gnswxvspqsrstsu}ˆ•šŸ£¢ŸŸŸ£¤¤£ œ˜’ŽŒˆ‚~zxwututqnnomllkmmllkkkkoqrvx{€„ˆŽ“˜œŸŸžœžŸ ¡•ƒztrfZ\^\[[[^[Y\\]][]__]_`^^`^]_^[]`^^^[\__\[ZXVVWWTQTUUSSRRSSRQRUTPPRSSUSQQPNLLNQQU]_^_``_``\[][XXXXY^ba`_]hwwrnhjii‹µ¼¯·Á®#lªÆÏÌÇÈÉÊÅÉÓÒÓÕÓÑÍÍÐÐÊËÏÌÏÎÌÍÍÏÐÑÏËÉÌÎÐÏÎÎÏÑËÅËÉÄÆÈÈÈÉËÊ˸ÄÌÉÇÉÉËÊÌËÊÈÅÃÂÃÀÁÂÀ½ºº¹¹º»¹¸¸¦‘Ž‰…†‡€x}ƒ‚ƒ€|~€€|womsusrqqqmfhjt€xmt€oURVVVTRSY`gnrrutqrqoqrsvˆŽ–ŸžžŸŸŸ¢£¢¡Ÿœ—•’‰…‚}yyxttspnppnnmjjlkjjjjmrtvz~ƒˆ’–˜œž  ž ¡¡¢¡œ˜‘ˆupma[[XZ\[[\]]\]^_^^__^`_\]][^`_[Z\]^__\ZWVXWVVVVVVUVYZZWTRRSVSMNPOORRQNPRRPLKMNONR^baacb___\]]ZXYYWVW]cbZWY^q€zpjjlftŸ´·¼®$l«ÈÏËÈÉÉËÎÏËÍÕѾ©£¸Ðп´ÅÑÐÎÍÈÈÎÌÉÇÇËÎÍÍÉÊÌÍÐÎËÌÌÊÈÈÇÇÉËÊʝ޾ÈÃÇËËËËËÇÇÆÂÁÁÄÅÀÁÆÅ¿º³±·»»¹»±šŽ‰†ƒ‚†€…„ƒ„ƒ€‚‚|wsqwurrpptoiitwnqy]OUXVPLMPYbflrtrqpoporwz„Š“–™›œŸ  Ÿ   œœš•Ž‰„zzytstssqonmmlkkkmlmqsuuw}ƒˆŽ”˜›žž ¢¡¡¡¢¥¤Ÿœ˜Ž†|rqi_]\ZYZ[[\]^^`a]WW]^[]`^]__Z^cb`_^___^ZZ\YXYWVWVWYVWUVYWUWWUTUVSONNQRQRUWWTNMMGN\aaba``aa`^__\][VWYVW\^ZVTVZiwvmiknmn¶º¥$j©ÈÏËÇËÎÉÍǼÍÕÒÒÈÂÊËÎÑÎÐÓÏÈÈÌÎÏÎËÊÏÍÌÎÍÌÌÎËÉÌËÉÏËÁÆÇÈÌÊÈËÏÍÊÇÉÌÉÈËÌËÌËÅ¿¿ÃÄÄÃÀÃÄ»¶·³¬´¸³´ª–Œˆ……ˆ…ƒ†„ƒ…ƒ€€€|{zvyxvusrsqjfrwkhx‚mVSYVQNKLU\ajmnqqppooqty€†‹‘–™žŸ ¢¢£¥¥¤ œš•Š„|vutsssrqomlklklmlnppquz}†Œ“•š ¢¢££¢¥¨©¨¤Ÿœ–Žƒzusg]]]^]YXZ\[[\\]_`]]`^^```_^_`__^^^^]\^[[]\ZZZ\^\ZZ]]YXXURTUSSSSSSQMNOOTTQMJLMJNY_a`bb``b`]]]^][XWWWTVXTV\\\ZZcqwrjiood{¬ª%l§ÈÎÇÊÎÑÒÒÒÌËÓÓÑÒÑÐÏÎÉÂÁËÑÎÉÅÃÁÉÎÍËÌÍÏÏÍÎÌÂÅËÈÈÊÉÅÇÇÇËËÊËÉËËÈÉËËÊÉÊÊÇÇÇÆÆÆÅÅÃÃÆÃ»¹¸µ´³³³´¸·£”‘ŒŠ‡z€‡…„ƒ€€€€}~|zyyvutrricq~vokr‚yZMPSRPMJMW_bekoomkmopsx}„Œ˜œœš›ž    ¢£ ™•’Œ‰…€|zwtsqrpnooljmmnqqtvv~‡‰•—˜›ž¢¤¤§©¥£¤£ Ÿ›”Œƒytm]Z^][ZZ^_[Z[]]YXZ\[]\[^`\[^]`a^^\[]^`_^``]]_[XY]_]]\XVXVSTVVUVWXYWQQTRPQRQOQLGMTYZ[\XUW[^``_^^^]\\ZWWUSUWXZXTR]muuqllleo‹$j§ÊÏÉÍËÌÐÒÓÓÕÊÅÐÓÎÇÌÐÑʽ±²Ä½ÃÊÌÍÎÐÍÂÅÐÐÎÎÍÍÍËÇÉÌÆÄÉÉÇÉÍËÈÊËÉÌÍÌÌËÊÉÈÈÆÇÉÆÄÃÁÂÅÆÄÀ¸µ·¸º¼½¹»²›“‘Œˆ€ƒ†‡„„ƒ~}||~||{{zvuunlolr}xokjz…jSTTTSLEGQX\dilnkkmnooryƒ‡Œ’—˜—™›››œŸ ¡ ™–””“‘‹…€|yuutrqoooopooqsw|€…Š‘—šžŸ££¢¤§©¦¥¤¢¢ œ–ˆ~tsi[XWWYZY\[XY[]][]^_]\``_^^``_^]]]\]^_``a`^]`\WY[^[XY\\Z\]YWWUWXXXVTUWYYURTURMKLKMOKKHHINY_`a__^[WXZXWYYVXWVYUSWVXesyunkgcd&kªÄ·ÀÏËÎÓÓÔÓÐÑÔÓÑÐÎÐÓÑÐÑÈ¿ÇÇÂÃÇËÏÐÌÉÊÌÎÎÎÏÉÈÊÌÌÉÍÌËÊÆÆÊÉÈÉÊËÌÊÈËÍËÈÊÌÌÈÇÊÉÅÃÁÁÇ¿µ¾À¹»¼½½¶·½º¥“’‘‹…‡Š…„‚ƒ€}z}|}€zxxxspqlp}sklfqŒzYRTTRQJGMT\bdhijlmmopt{†ŠŽ‘“–—šœš™š¡£¥¢™’“““’“†}{yxtqqqqtuwzz}ƒŠ’˜ž  £¥¦§¦¥¨¨¤£¡š•‹‡}tm_ZZXWXZXY[ZXYZ[]]]_^]^`_^_^\]]]__ab___]]\\[Z[[Z\[[\^_\WUXXXVUY[XUWZZZ[[VSSRPOPQURKKHEFFFEJQSXZYX`d\YZ\YSTWUTUVVY]X\ksqmheh%l©ÅÌÌÌÌÑÕÓÒÒÒÑÐÑÓÑÍÏÎËÏÐÏÊÅÇÇÈÊÍÎÍÊÄÈÍÏÐÎÍÏËÃÈËËÍÍÍÊÊÌËÌÌËÊÊËËÊÌÌËËÊÉÉÆÁÁÄÄÄÅÅÇÄÂÃÀÀÃÀ¿¼¶»¼»´Ÿ‘‘Š„‚ˆ†}€‚}}{|||~~{y{{wuunq|tmldl“”kXSQTQKGFMU\_adijjkknqw|€„‡Ž’˜œ›œ››œž¢¥¨ª§£Ÿ›˜–’’’‘އ‚|{ywxxz||†ŠŠ–˜š¡¦¦¢£§ª««ª¦¥¥¢œ——“‹…€xrhXWWUWYXVXXXZXVWZ\]^]^_]\`_^^_a_^]]^`^_]]_[]]\a_\]]ZXWYYXZXSSSUZ[[YY\Z[YWVRRUXXWQNNMIGLTVWZ[[[[[]beb_YVXXYVWXXWXXY[VVftumhg%j§ÀÄÉÍÎÎÐÓÕÔÔÒÒÓÒÐÎй®ÌÓÎÏÐÎÉÆÆÍÍ··ÌÏÎÐÐÐÎÍÐÑÅ¿ÊÉÈÊÉÉÉÉÉÉÊÈËÎÌÌËËÍËÊÉÇÆÃÃÆÇÅÅÅÄÂÂÀÁÃÂÀÀÀ¿¿¿¼¹¯™‘‘Ž‹‡ˆˆ…†‚|}€~{{|{||{{zzzxqpzwpleg†Ÿ…^RRQPNFEHOX]`chjjmnnosy‡‰Œ‘–˜™™žžžœŸ¤ª«¬­ª§£Ÿ›››™•‘މ‡†‡’”•™ ¡£¦¥¨ª§§§«¬©§£Ÿ Ÿœ—’’†€xnaWSSUWUUVWXXYZYYZZ\_`^\\[]_^`_\Z[]^^^`a^_a]]_]`_[[\[Y\]Z[\YUTY__ZZYWURTWVRMNVWTUQIEIKGKUZZZ][ZZZ^`_eid\WXXZZYZVU\\WVVXaotme$l¥¾ÈÉÈÉÎÏÒÓÒÏÑÒÏÎÏÕÌ¥­ÌÎÏÐÐÐÎÊÅÈÌÍÎÆÈÐÐÎÈÊÌÎÏÉÉÌÉÉÊËÍËÌÌËÊÉÉÌÍËËÊÊÌËÈÅÈÌÆÅÈÆÃÄĽ¿ÁÀ¿¿ÂÁ¿¾¿¾¹¸³£’‹‹‹Š‰ƒ€„…€|}x}~{}}y{xtppywolhdv›™sWQPPQKCAFOUZ`egjnnnppv}‚†‹‘“•˜›Ÿ žœž¡¦¬­¬ª©¨¨©¨¦¥¥¦¥¤¤¤£ žŸ ¢¤§§©«¬¯°­­®®¯­¬¨¦£Ÿš•“‘ˆ|teXUTTVUSPPTXVRSUSTY[YY[\^``]]^__`b`_cb`bbaaac`^\]`_]^\XZ\]\YZZWZZ[\XURSUUUVUSTPMNLKKJIJKQVY\\ZZ[\\VXZ]a][ZZ[[ZZ\]\\XXZXTZjus$k¤¿ÊËÎËÈÏÒÐÒÓÎÌÌÏÒÒµŸ¼ËÊÎÑÒÔÔÒÑÎÍÍÍÎÍÏÎÏÎÍÌÏÉ­¯ÆÉÉÊÌÌÍÍËÌËÉÊÊÊÌËÌÉÉÊÉÈÉÉÄÅÇÅÅÆÀ»¾¹»Ä¿³µ¿ÂÀ¿¼º»°—Ž’’Œ‰ƒ|„~~w{‚{ry~zyzwpq}xlljcf„¤”hSQPPMEB?ANW\cgijmoopsvx~…ˆŠŽ‘‘’—žŸ  ¡¦ª­®­¬¬¬¬¬¬ª§¦©§¥¦¦¦¥¥§§¨¨§§¨ª¬­¬¬¬­¬¬«««§¢ ˜•“މƒyp`UUUTQOTVRSUTUVYWTWYY[]^]]][\\]\]_^``\[^_^]ZZ^]\``^\[_`___]][\`][^]XWWSSUSUVRNLLJLNKHHKGEIJMSVZYY[Z[ZX^db`]ZX\[[_\\a\Y[ZZ_gn&j£½ÃÈÎÎÏÎÏÒÐÌËÎÑÒÐÍÌÄ©³ÌÈÊÌÉËÐÅÂÌËÌÑÎÌÒÎÈÆÉÍÌÎÎÎÌÇÈÍÍÍÍËÌÉÄÇÉÊËÌËÆÉÌËÉÈÆÄÇÆÅÆÃ½½¿·²¼À¼¿ÂÀÂÁ¼¹¹¹©˜”ŽŽŒ‰‰…‚…~€€€~yz{zxwtst{wlifa]m¤Š_MNROI@==BPW[beilknpqv}€…†ˆŒ’—œŸŸ ¢¤¤¥©«ª«­­®¯­«©§¦¦¦§««©©ª¬¬¨¦ª«««©¨ªª«­ªª«§¥¡˜““Œ‡xq]STSRRQSVUTUVWWVTTWYYZZ\`]\^_``_^__``bda^aa^]\^aba^]^^]\\[\]ZWZ]\YZZYVWYZ\\[XVSQPNQPJIJIGIGCDCEGMVZXWXXY[X]^Z]\Z[^bb^ZZZ^b^_%k¦ÁÈÊÏÐÒÓÓÏÌÑÐÍÏÐÐÐÎÌÎÍÌÌÍÏÑÐÐËËËËÐÐÏÏÏÍÍÍÍÌÌÏÎÌÌËËÌÍÎÍËËÍÍÌËÊÊËËÊÊËËÊÊÊÈÇÆÅÇž¾À¼¼¿ººÂÃÀ¿À¿¿ÀÀ·¡“‘Ž‹‹Œˆ‚€ƒ‚ƒƒ€}zxwuuvyvlifb`as–ŸyXQROKFA>:ERW^dffikknptwzƒˆŽ’”—›Ÿ¡ ¢©¬«ª«¬ª§§ª­­®­¬««¬®¯®­­­«ª«ªª¬©§§¤¦ªª¬¬¨¡œ˜”’‘ކ€wvv`SUTSVXTRSSTSQRQQSRVVX[ZZXWXZ[]]^_^]][\^^_baa_\`aa^\^`][]^\\^_][Z[[ZXZYUVZWRSSSSRPOMOOMJHGHJE@GORWXX[[\`_^\[]_\Z]\XX^b^YYXUU$k¥¿ÉÍÎÐÓÓÒÒÒÔÒÏÏÇÅÍÍÎÏÍËËÎÑÑÐÏÎÏÒÓÑÐÏÍÏÏÌÌÍÍÌÌÍÍÍÍÎÎÌÍÌËÇÈÏÎÍÌÉÉÊÇÊÌËËÌÊÇÈÇÅÆÇÈź·Á¾³¶½ÀÀÂþ¼¾¾»®™‘’’Ž‹ˆˆ………ƒƒƒ„€~}€~z{wvzyrjhdb^`ƒ’kQQOKF?<9977528CMPSX[_`^aefinoqssv{…Œ“™œŸ Ÿ ¤¤¦¦££ žŸŸŸ¡Ÿ›š˜•‘’“”’ŽŒ‰…{xxvsoil|„†‡ˆƒaGEEGDEIIILLJLMMONOPSTTWWUVTRRPLIILNMJKLJLKJMQSSSTUUWXYVUXVRSSSXZY[\[XSSUSSSRUSSSTTTXWUVVPMNQSTW\_]YWZ]_^VMMS[]YXYZ\[\_]XPNM#i¥ÄÉÀÄËÐÑÏÐÐÏÐÑÎÌÏÏÍÏÏÎÌËÅÀËÌÊÏÎÍÍÇÇÌÍÎÎÍÏÒÑÍÌËËÍÏÏÌÌÎÈÇÎÎÈËÎÉÉÌÌÎÍÈÈÊÈÇÉÊÊÉÇÅÃÅÄÅÄÂÄÆÄÀ¾¿Â¿»¿ÀÀÅľ¿Á¾±žŽŽŽŒˆŠŽŠ‹‹‹‰‡‰†ƒƒ„ƒ‚„tnid`_[XXW\n|†– ’oVMA55412:AHNPW^a_^bfilmmmlmpqw}…Œ‘“”—šžž››œ ¡Ÿžž Ÿ™•””’’Œ‰†€xrpopohiv‚††‡‡vaMABEHHHIJKMLLOONMNOQPNOSQMLMNKKKJIFHJLONLJHJOQUYZXVSSXZZYTTYZZ[]\[YZ[Z[[XVWWWXWUSUY[[XUVWQQYZ[^]][\\\ZUNNQQU\\[YXWSW\ZZYWY%l¥ÄÑËÁÍÖÓÒÑÏÏÑÑÒÓÔÑÎÐÒÎÌÍÈÇÎÌÈÍÑÍÎÍÊÌÎÍÌÏÐÎÏѹ¨ÅÏËÎÎÍÌÅÇÍËÌÊÅÊÍÌÎÐÍÊÊÉÈÇÂÃÇÈÈÇÅÅÅÅÆÄÂÅÆÄÃÀ¼¹»À¾¿À¿¿À½»¹¨”‘’ŠˆŠ‹ˆ‰‹‹Š‰‡††…‚‚†trlfb__[TTRPZjlr‰—š™zN<;967;CGJQUY]_``acgjlmnpqruyˆ‹‹’“’”šœ›™˜™™™–’’‘Ž‹‹†€|toooojgqz~ƒ††‰…rlofUCCGEEFFIKILOLMJGJNLIIIIFDDFIJFDGIFFFFKNKJNQTTSVWVTVXSUZSTXWXWVY]\\]]]ZZ\[ZYZZUORSRSRSRQX\_a`\WYXWZYVSONPNS\__[Z^]ZYZ^__%j¨ÇÑÐÑÒÓÒÓÓÑÐÑÑÌËÑÓÒÐÍÊÉËÊÉÄÁÄÇÎÎÏÏÎÎÎÌÎÏÏÐÍÍÐÐÐÏÏÍÌÍÎÏÐÎËÊËËÍËÉÍÐÏÎËÈÇÆÀÃÉÈÈÇÄÅÇÈÈÄÂÄÄÅÃÁ¾ÁÁ¸¾ÀÀÁ½»º¼¶Ÿ‘‘ŽŠŠŠˆ‰‹Š‰ˆ……‡„‚ˆ}prnjh`\YTRRTYafinu…†t@564107?CGOUX[^^^_bfkmmkjjmrw|‚„…‡ˆ‘—•“—™—•’ŽŒ‰Šˆƒ~zvsqppoidjqz€„‡Š‡iYdglk]KA@?CGIJIIJLOOMNJFEEDABFIHGGFFFFGGGHKIHKMPNNSVUUUQUXVUY\ZYZXZXUUXVTX\YXWUXYUORUVVSQSY^aa_[ROVY\\\\ZXZ\[Y\__\Y]b`ZUROM#j«ÆÏÑÑÒÓÒÔÓÐÑÒÑÓÒÐÎÌÎÎÍÎÌÌÎÎÏÊÈÅÆÌÎÐÐÐÏÏÐÏÎÎÏÏÉÈÍÎÍÍÎÍÎÏÏÌÉËÍÍÊÅÊÌÌËÌÍÊÉÈÈÉÉÈĽÂÈÇÈÇÆÅÄÂÀÃÿÀÂÁÂÀ¿¿¿¼¹½»¨•“”’“’ŒŒŠ‰Œ‹ˆ†…‡‡†ƒ‡€norngb]XUTUTRZachedjsŽŠQ8:53236=EFGOVZ]^^_`dhjkjhgjnsw{}‚ƒ„Š‹‹‹Œ‹ˆ‡ˆ‰ˆ‡„|xspomlmkggouy~ƒƒ‰‡fPTZbdhm`J?@?@FFDEGNNKGDCBCB@?ADDFIIGJMKLKKMLMMLNNLMMLNQQOPV[Z[]YXWXYYVRTTQPUWXZYXWSTUTRVYX^a``a]XXXXZXXYVVYYYZ[^_\[^ZXRIJGC$j§ÈÏÏÕÓÑÓÓÒÓÓÒÑÒÒÎÉÊÌÉÊÇÅÉÍÏÏÍÈÅËÎÎÍÊÎÏÍËËÌÍÏÍÄÄÍÎÌÎÍÍÎÏÎÍÍÍËËËÌÎÍËËËÊËËËÌÊÉÈÈÉÊÇÂÆÈÅÅÄÄÄþ»ÁÃÃÁÂÃÁÀ»»ÀÀ¶ –•“’ŒŠŒŽŒ‹‰‡‡†‡‡ˆ~ƒulqpjf`ZVSQQSZ_Y_g`Z_n}`;8641017=BIOTY[[]_abcfijhedfhnrtvx||„„‚…†………„ƒ…ƒ€~}|yutrmljhjhckss|„†ˆ…gOSVZ]\`hm_KDBAABBAADFHKIDBCFFEFGGHHGHKLLMLLNNNMMPTSNKNMKLRTTTUWWZWSRTWXVRRSRSQSUUTSVXWYYVX_b`a_WSSSWZ]^ZWWWVZZZ[XSTWYXWSJJO$i¥ÃÒÔÔÓÖÕÑÒÐÎÐÒÏÈËÌÊÍÏÎÏÎÐÐÍÏÏÎÐÐËÊÏÑÐÏÎÉÊÏÏÎÍÍÏÌÄÇÏÍÊËÏÎÍÍËËÉÊÍÎÌÌËËÊÊÍÍËÌÈÅÈËÊÁÂÈÈÅÆÇÅÃľ¼ÅÄÂÃÃÃÂÁÀ»½¿·®ž—˜”ŽŒŒ‹ŠŒŠ‡‡‡‹‹…}}…|rspmd][URPPTU\^\eh_Zb|xJ994142/4:@EJNUY\^\]aacghedccfijlnqsvvvxz|}~‚~}}zvsrppmigfghecjqsu|ƒ‡ˆ„eKKMSZXU[fnn[FEJHFFFFEB?DB>?>ACBDBDHHIKJEINMMOPPRSWWVVVVWUPQUVUUUWVTROPVXXWWXWVVVWWTTUUWX[``aa^^\XUWWUWUSTTSVXYRKR[XTSQNNKJJ$k¨ÆÑÓÔÔÓÓÓÒÑÑÑÐËÇÎÐÍÎÐÐÏÏÐÏÏÐÊÊÑÑÒÒÓÒÎÎÑÏÎÏÍÌËËËËÌÎÊÈÊÊÎÏËËÊÈÇÆËÑÏÏÎÉÇÇÉÈÆÈÇÄÃÈÉÂÂÈÌËÆÆÉÇÆ¾»ÂÄÂÁÄÇÿ¼¸¿½¬°¬š••”ŽŽ‹‹‹ˆ‡ˆ‰Œ‹„ƒ|}uomnkb\WQOPSST[YU^g`VYzsA883310349>EOQQUY[^_^cfdcdfebcefilmmnpsrppqsuxzvsrqonljjgeddbagppou}‚ƒ‡Š…_DKLLQUXZ]biqgJ=@DGHGDDFGFEGLKLGDGGGHKLIJLNORVWTQUTRUUUWWTRQORVUQONNQUUV[[WVZ][ZWSUXWTSX[W[bcdcd^XXXYZWTSVXTSX\\]\\ZWSPLLRPP$j¨ÆÑÓÓÓÓÔÒÐÐÐÒÓɾÇÑÎÏÑÑÏÎÏÏÎÐÐÏÐÐÎÏÑÍÍÍÎÏÍËÌËÌÌÈËÍÎÉÃÇÆÈÎÌÍËÉÊÆÆÇÄÊËÆÆÆÇÉÈÆÆÆÆÉ³°ÄÄÉÊÆÅÆÇÆÃ¼¼ÁÄÄÁÅÆÁ½¿Á¾º½¹£—–“’’ˆ‰‰ƒ„„‚†~|†~ytje^YWVRPQVWZ\UVdg_\n[;93/1/0115;AGKMRUY[\_bddcbbcffghfffgikklllllmnlkjjjgffc_]]\^dkmoty|„…‡Š†aEJJJKLNPW]^cqnP?B@AEEFHILMMNOPMHGFFHFEHKQPORQPRPNOQTUUQNLKLNRSPPRRSTVXX[[Z[Z[]_b\WXY\[]```fgeefea`dd^YUUUTSTW[[XYWWW[]UQOKK#h¤ÄÐÒÒÐÐÑÏÍÑÑÐÐÊÇËÌËËÎÐÐÏÎÏÑÐÍÏÐÑÒÒÐÎÏÎÎÏÎÌÍÍÌÍËËÎÌÌÌÏÈÃÌÊËÍÊÉÆÄÇËÎËÊÊÇÇÍÎÊÇÆÆÂ¬´ÊÅǽ³¿»¼ÆÇÇÃÀÄÅÁÀÃÃÀÁÁ½¸¹¼®š’“”•“ŽŒŠ‹Š‰‰ƒ‚†€w‚‰}yofd]ZVQORTPU\WUZdi`XowO<921101225DEHOPMLNMMOQTWX[[ZYZ\ZZ[[[Z[[ZXXVQOPS[bbehijnsv|~}„‰ˆ‡‡…`@FHDBBDGJNQRX^bfnyqQ>?@>??;;=?DDCFGHKNQQPQPPQH@CEDFFHJJJIHJLQRQQPONRUSSSSQTVWXWY_abccbeddggfggdbbgib^_\YYXWY\][VTSSSUVX`^TX$k¢ÄÐÍÑËÊÌÉÎËËÒÒÑÌËÏÐÌÊÌÍÎÒÓÒÑÏÎÎÏÎÍËÌÑÑÏÏÊÇÍÎÌÌÍÌÈÈÍÍÏÒÍËËÊËÊÊËÌÌÈÅÌ·ÇÍÉÊÆÇÉÈÅÂÅÅÈÊÈÈÁÀÂ͍»ÈÆÆÄÃÄÃÄÃÁ¾¹µº³£§•—–Œ‰ƒzu|„„†ˆ‰}ymSFGNRRPPTYUQRU\ggZk€Z@B7./../--003;CDCGOOLNMNPNNONLOSSSTTTTUUSTPOOIHJR\`acdghnttv{~€…‡ˆ‡ˆ„^?BAABBDGJLNRY]`ahovrS<=?>;<<=>@DEGGGGKOPMJLONLQOIMSMHNSQRRNMLNUXUUVRRSUTPOSSV[]___aa_acbca_^^a_ZY]`\XXXUVWSRW[YVTSSTVQSYYUX%k¦ÇÑÕͺÆÑÍËÊÊÅÆÌÉÌÍļ¿ÊÊÌÑÐÐÐÏËÈÌÎÏÎÍÑÏÍÎÎÍÎÎÌÍÐÎÅÅËËÊÉÌÊÅÄÀÁËËËËÃÃÊÇÆÊÌÊÊÆÇÈÅÃÆËÇÄÉÉÅÃÃÆÇÄÂÅÉÆÆÅÄÇÅÄÃÀ¾¼¸º·°±¤™˜•’‘Š…ƒƒ†{lr‚Šƒ{‰ˆx}wijWDHJKLKMPPQQSZ]cc]ouSCC:2/-020/0126;ADFJKKLMLMMQQOPOOPOMNOLMNLNOKIMW]_acddfkqqsx{††‡‰ˆ‡‚^=?CA@DDDHMNPUY^dgimxvU<::<><<@CBDHFEIGFIJHILPNPUSTTSNMQRRQOLLLPYZYVSOMPTUUSTTQQQRRUVW[_a`_]ZYY[[[][ZXXWUSQSWWUWXVUUXXWWYYTV&m©ÉÈÄÎÌÌÎÌÌÉÊÅ¿ÃÅÈÍÎÍËÉÇÍÏÍÏÎÏÌÄÇÎÐÐÏÐÐÏÑÑÐÏÐÏÎÎÍÈÊÍÌÉÆÇÉÆÅÈÈÊÍÍÍËÊÊÉÆÆÉÇÆÅÇÈÅÅÊËÈÆÇÉÅÃÃÅÆÆÈÆÈÊÊÆÄÆÄÁ¿¼»½»ººµ³¯Ÿ•–“‘‘—’‚{zlj~‘†ˆx}vpnYDDGJNOPNOPPSY`f_\soK?>60-/0..0113118=BFGHFILLLLNPQNNPOPOMNKJHGNTUX^_abeikottx|}…†‰Š‡†‚^>AB?ADCFNQOQTX_adjnoxxS89<==>>>>ADAAEDDDCCELPPPRRSWULHLTVQUYYWRMNTQPPOPQSTRSSQRTTTTRPPT]`_ZVXWY]^][Z]\XYVTUTUSPRVUQTXVPOTYX#i¨ÈÏÐÑÌÌÐŶÄÍÅÁÅÉÉÌÏÐÐÑÎÎÏÎÏÐÏÐÐÒÑÏÏÎÏÐÑÐÎÌÎÏÍÎÑǾÈÍÊÆÇÃÂÅÆÊÌÌÌÎÌÉÊÊÊÊÉËÊÈÅÃÉËÈÊÉÇÆÃÂÃÃÃÂÂÆÆÆÉÅÀÄÃÅÄ¿Åý⡳°´«š•––—›Ÿ¢‘yz|ts|ˆŒ…}}zw{|mhbI=BHLMNNPQPRX_c_axlHB@;50./00010252599<>?CCAACGKKLOLIIHHGFGJMQVVZ`dccgjoprx{}€ƒ…†…ˆˆ‡„a>@C@@DCFMOMNTY\bghhnpvyW7887:=@AB?@C?@EGIIHJKJMQOQVVXVQRXZVTUU[]YUNLLNRRSSRSTUSQPOQQQSUW[^\XXWY\[\]]]ZYYXWVUVUUVRPMMNOV^]\^$h¨ÇÎÑÏÌÌËÌÊÌÍÌÈÇÍÎÍÑǽËÒÑÐÑÎËÐÑÎÏÑÐÐÎÍÎÏÏÎÌÌÎÍÎÌ¿ÁËÌÊÇÆÅÅÇÇÄÇËËËÊÍÍÌËÈÉÌËËÈÇÉÊÍÎÊÈÈÇÄÅÄÀÁÅÈÇÇÈÆÅÅÇÈÅÃÃÁÀÃÀ´¹¹²¶²¢——›žŸ¡¦¤™Œƒ…ƒ~‡ŽˆupxxtqmgO>?AEJKJLNNRX\d]]{hA==94/-./..0101448=@CCBA@AB@>?A?@AADGHKMRXY\`abfijmnpwy{€ƒ††…†‡‡…a==@@?@CBEJLOSY[aedilpsz~X3/9CE=9@@BA?ADCEHHKJILPMKRY[[ZYYZ[\ZWSTUTUTONOQSWWTSVYYUSRQQSX]]\]ZXYVTX]ZYY]\UUWXWSSUVTROKNW]_a^Z(n¨ÆÏÑÍÌËËÍËËÍÎÊÇÍÏÌÎËÉÌÎÒÒÑÐÐÏÍÏÐÐÐÐÐÏÎÎÍÎÐÊÇÍÏËÇÊÎų¿ÈÅÅÇýÇÊÊÌÌÌÆÄÈÇÈÌÌËÉÄÄÇÇÊÉÇÇÈÄ¿ÂÃÃÆÉÈÆÇÆÆÅÇÈÄÅÅÂÀ¿ÁÁÀº¸»·­ ¡¢š˜šž¤¢ž–Žˆ}–wutwqqxrhaUE=?GKKLJMORZag^db9<=9710/-/22235658>ACHJJJHEFJIHKMNOSUTSX\\^abcfiknquwy}‚ƒ…‡‡‡†…^=>AA?@CDEHLPTY[[^dilou{‚ƒuxŠŠšO>ABCC@BBAFJGJNNONLQSSVUWXWYVWXXYWUTTUPORTTVVWVQPOQSRUYYZ[[\ZYZ\YTY\WVYZXSTTQSUTQRQOPY_]]_`d%k©ÆÐÏÍÌÆÈËÉÉÌÍÌÌËËÏÏÏÏÎÐÒÑÎÎÐÏÍÍÎÏÎÏÎÐÐÐÐÍÐÎÅËÏÌÐÎÏÉÃÇÇÅÈÈÇÈÉÉÈÉÊËÆÆÉÇÇÊËÊËÊÇÉËÉÈÆÆÆÀ¼½¾ÃÉÊËÈÇÈÆÃÇÇľ¿¿¼¿»»¼¹¸®¦£ž˜–˜ž™—”—”xŽ‘ˆ†}tpkqwsvod\H:;CGHKMMQUV^dZg|Y<>;;:50-.//12446;=AFFILMPQOPPORPPQTUWZ[^]_dcdimopruxz|‚…„…†ˆˆ…ƒ€_><>>?ABBEHKPTY\]`dhimqsw‹ˆ|†ž£{M==>BEDCECDFIMLKMMGEKQRSVWZ[\[YYWQKGLPOOOOMMNMORQPUVVWUY\ZXQQTSTSVZWSSRTZYROPTSRUVUY\\^bc_^$i¨ÆÊÇÌÍÊÍËÇËÎÌÍÍÊÇÌÎÏÏÌÐÐÎËËÏÑÑÏÍÌÍÏÐÑÑÐÐÏÒÑÍÍÌÉËÎÏÌËÌÉÃÄÈÇÊËÌËÉÌÊÈÉÊËÌÊÇÉÍÌÊÉÇÈË¿ÄÁ¼º¿ÄÅÇÆÈÉÇÇÈÈÆÅÄÅÄÀ¿ÀÁÁ¼¼¾½·ª¦¥ž—““—œ›••›š…}Œ…„”Žxlouqluymc`P;:AEGJIKPUWZa\iwS=?989730/0112359=@BHKLOPRTRQQRRSVXZYZ]_`adflomorvx{~‚„„†††……ƒ€b>:=>>ACCDEKPTUV[`efinprwˆ‹¢•Ž˜€hJ7;?@ACDFFGHJJIHHJLNOQRVX[\[ZZWPDBFGKJHLKLLLQOLTXROOOSY[YSTVSPORUTSTTRLPUUY[Z_db__^^bba_^%i§ÆÍÍÍÍËÊÊÃÇÍÇÆÊËÇÈÌÌÉÍÏÎÎÍÎÒÑÐÌÌÍÌÈÊÐÒÒÐÍÎÏÎÎÍËÍÌÀÄËÈÊÈËÉÅÊÌËËÊÍÍÊÌÎÌÉÇÉÌËÊÊÈÇÈÉÊÉÆÃÁ¾¿ÆÇ¿ÅÌÈÇÆÇÈÆÄÃÄÿ¾ÀÂÁ¼¼¿¹¯ª¬©ž—’Œ“žž›š¢¡‹„‹…”kp{rlttokeeZ@9>DJKKKPX[]b]ksK9<:6564200113568;BHKMORRRSTRTXYYZZ]^^__agkooorru{|~ƒƒ‡ˆ†ˆ‰†‚b;:<9<>@BBFMSWY\]`egjoqtz‰“‹Šš«˜Œ•fI;BDEFDGHHHHJIGKMNMNRSSUWVVVUSLGIIELRONMLJKQWVRROMQVWSPOPOMOVYVQOPNPY^_^a_\^____]^^\[\&k©ÆÍÌÎÍÌËÉÅÆËÈËÎÍÍǾÈÐÎÏÎÇÅËÍËÌÏÎÍÎÈÅÎÑÐÑÐÏÎÍÎÊÊÌÊÀÆÑÌÌÍËÉÊÍÌÈÆÆÉËËÌÌʾ¼ÇÊËÊÉÆÆÉÉÅÇÇþ¾ÅÉÊÉÈÈÈÆÆÅÄÇų³½¹¾ÁÀ¾¿¼±«ª¬¥›—‘‹›š™ž‘Ž‰€‚ˆ‚ynjllokgoska[L:?@GMNORSRRTWWVYZZ\^]`fiikklpswz}}~‚ƒ…‡‡ˆ‡††„a:8;88<>>ADIMRUW\`chllptx‹“’€œœ•’Š~ƒ–k<>ECAEGGHILLKNQPQQSTVVVUTWTKIGILPQPPROLLKHJNOOQPQPMRWTOLMV\\SNPQUXZ\^`a`_``_^`_\YYZ[%j©ÊÎÎÎÌÍËÉÌËËËËÍÌÍÊÀÇÏÍÏÏÏÍÊÌÍÊËÍÌÎÐÍÎÎÉÉÎÎÎÐÎÊÐÑÏÒÐÍÆÂÊÍËËÍÎÊÊÍÊÊÉÆÌͦ£ÆÈÅÆÉÈÉÈÅÇÆÃÂÀ¿ÄÄÃÇÇÈÇÇÇÇÅÁÊ¿€Ž½¼ÀÁ¼¹¾·«ª¨££–—Ž¤¢›žŸ˜Žˆƒˆ…ƒxjemnehqpomb]U?7@HIILPUT[[Zsc?<<8744564113557>BEILPRUVWXWYZZ\^_`dfiklknsuwzz{‚„ƒ„……†‡‡…ƒb>:<;;;=DIIORTV\__m[=;<9633576543469AFLQUWY^abgkmsw‚‹–ˆK/Fu€‚™y‚~odH@ACEEHIGIHGGGJMQRQSSRTWZXUOJNXZXQMPRSPQTRPOPOMLGKY][ZZ[[\[XY\\XYZWW[\\ZZcp€›°ƒOR#h¦ÅÏÍÌËÊÌËÊÍÎÍÍÎÏÎÌËÎÏÎÏÎÍÏÐÏÍ˼¿ÍÌÌÏÏÎÊÇÊÍÎÌÊÎÎÌÏÑÐÐÎÍÍÉÇÊÌÌÆÆÈÉÊËÊÈËÍÌÊËÌÆÅÊÊÇÉÉÇÈÊÈÄÇÊÌËÉÇÆÇÆÁÂÄÃÄÆÂÂüªª±§¢¦¥¤¡¡¡žš’™¢ŸŸ¤¦£‘‹ˆ‡Šƒ|zug]gldg~}llb\T>6>IKLOQT\U_wY:<<855346644778=@EJKNRUVWZ[[\_abbdfhjnqrsuy|}~€€‚†‡‡‡†„‚€a85987:=?@EMPRW[_acchov€ŠŽˆˆU84.Cjooxy`jrcJAEFFEBBCEHKNMNNNQTTRVVTVSOTZ]\VRSW]ZUWY[][ZZWWYZ[[[YYZXXWTXYWTT[[[^Yg¨ßäàÛæÓ{R#h¦ÇÏÌÊËÎÍÉÈÉÏÐÊËÎÍËÍÏÏÍÏÏÌËÎÑÎÊÇÈÍÍÌËÌÌËÎÐÐÏÌÈÊÍÌÎÎÌÍÌÊÌÉÈÌÌÌÎÌÊÌÉÆÈÉÊÌËÆÃÆÈÈÈÉÊÁÁÃÂÇÈÇÈÇÊËÉÆ¾¼ÃÂÂÄÃÃý¸´«£›¡¡›¡¤ œŸ¡ ›•”Ÿ¥¦¥¥ £–†‰„Œ‹vsrpjccislemle`[QA7@HILNT[VkuM<><:668668:999:=AFKPQUZ\_][[\^_acfjmlmquxyy}|ƒƒ………„„…ƒ€b8499;;=?AFOSSV[`bbfipА’‘‹ƒWIB42-9JYqsvzh”b=7:>@CEEEHJJKJKJLRSQOOSWYYYZ]_][]^\\[YSSY\]\[ZZ\YWWSNIIJKT`io†r_]£½ÚØØ×Öåºj$l§ÅÏÌÎÎÌÊÅÆÉÅÅÉÌÎÌËÌÏÎÊÉÈÉÊÎÐÍÌÊÊÎÏÏÊËËËÐÒÌÊÍÍÊÈËÏÏÊÉÊÌÌÊÉÌËÌÌÈľºÁÈÇÉÈÅÇÈÆÇÊËËÌÌÊÇÆÅÂÄÊÌÈÈÆÁ¸³±²°¨¡Ÿ¢¦£¡Ÿ™•–š¡  £›—˜›œœšŸ¦“ˆŒ„x~‹ˆyrqswqg[_jgfiefhaZSF<999::6778879@IKLSUamQ@A@<9978899::9;Qh…’†Œ“—±|A@DDDGIIIGHJHJLMNOPOOQTTSQRSRRSSSSSTTPJFGQb~–‰~‚Ž£´­¥§©¢€c\{¾ÜܼÚÚÙÙØÜ×¶#j§ÂÇÈÉËÌËÊÊÍÌÎÍÌÐËÉÊÇÁÃÊÊËÉÈÉÊËÉÌÎÍÎËÊÍÉÄÊÎÌËÏÎËÉÇÅÈÌÍÌËÉÆËËÉÇÄÄÉÇÂÅÇÈÊÈÆÆÆÇÇÉÇÅÊÊÊÈÅÅÄý²¦ª­§¨¨¥¡Ÿ¥¥ ›žœ˜™—’•žœ—ššššŠ~ŒŒƒ€…Ї€…‚}ƒ‹‚sszwolosk\_hfkmc^gkaZYPB@GLRVlhGBA?=;::::8:;9;>?AGMORSUXXW[abcfiklortutw{‚ƒ„…„†‰‰‡††„}g=0545:<=@DKPT\aaflwˆ‹‹‚`JJBCGHLF:664Jƒ£œ”‰šriL<=@ABCBFFFHHIKLNQRPPQQQNQSSTTOMQNLT_x®Ûààౌ’™¢£¢¤¨˜t[^“ÎÚÖÜúÛÜÙÛÚÞÚ±#j¥ÀÉÉÌÉÃÈÊÅÊËÇÍÒÐÍÇÆÈÄÆÌÎÐÐÑÍÉÈÄÅÇÉËÉÊÎÍËÌËÉÃÇÏÍÌÊËÌÍÍÌÌŵ¼ÈÇÆÄÅÇÄÄÇÈÈÉÈÈÇÄÄÆÆÅÅÆÇĹ²®ª§¥ªªª¯¯¨§¦§©¦£›™šš™›žœ–Š–›•—žœ™™Œ~‰‰|sqopu{~†‰Ž†vxxqmlsxre_Z]kkbchihgc^^WICIP[mYDECCB>;;8788;==@CFIJKQVY\\]`dfhhjnorstx|~€ƒ„‚ƒ„„…„„„{~l@1326:<>?CJPX^bcj{ˆŒŒ„„wOALKGGEGKMH;931S}Šˆ‹ƒ‚€¤dO<@BDEGHJHDHLMKKMPQPNIFHJLWijXYiyy…®ÕÙÕÚ²’Ÿ¤§¨ª¦‹hXj­ÜÛÙÚàǺÚÜÕÓÍȹŸ$i§ÅÇÃÇÉÆÉüÇËÌÉ´½ÊÇÇÇÈÊËÌÎÏÍÊÊÇÅÀÄÎÍþÊÍÊÌÏÉÃËÎÌÎÌÊËÌÍÍÍ̼ºÄÃÅÄľ¼ÄÁÁŶÅÀ»ÄÃ¿ÂÆÃµ¬§¤§¬«¨¨ªª¨ªª©ª¨¤ž˜˜““—˜™š—“ŽŒ““•š››š“†”“€qhis~‚††„‰ˆ~wsnkmwxpqna]bgccli`cmomjged_Ye`ECEEDACDB>=>@AABBCGJMPSX\^`dfggjmllrux{|~ƒ‚ƒ…††ƒ‚‚~xymG6107:<=BINS[bbjy„ŠŒŽŽ‹ˆˆpMDHCAHIHILLLF<:52M~†ƒƒš¬¥Å²uRHKFEGEDFJJJIHGDEINa{‹š­²¢‹bOb~{mÍÛÕÝ»Ÿ¨©©¬ wZUƒÊÜ×ÕÓÐÏÇÀ½¸·²«¬§!f¦¾ÃÄÈÈÇÇÅ¿ÅÎËÌËÄÄÈÅÁÉËÊÌÍËÊÊÊÊÊÌÍ·¬ÅÇÇÍËÌÏÇÃÌÎÌÌÊÊÊÍÍËÌÎÍÇÅÅÇÄÀÁÃÅÄÂÂÂÀ¿¿ÀÂÃÅ÷¦¤©©¬«¨«©§ª¬ª«¬«¬¦Ÿ›——““—˜šœžšŒ‹Ž’™œš™ƒ…•——“…|‹Ž‹„ƒ‰Ž…tkjms{zuqnke_\[bgdacmqlq‡•”Ÿ“‰rZKGFDBBEFDB@>?ACEGKOQVXZ^_bfikmoprvvvz||}‚‚ƒƒ…ƒ‚~xxnJ;9147::?GLQW^eu‰‹ŽŽŠŠƒdJFEACJHGKIFIKHA<<75Mv…„so“˜zzgLC?EIIGD?CJJUa~¹ª‰ ¶´°´²ŸbCPp}pËÚ×Ö¹¦©©«˜~‚”¨»Á½¹¶²¯®­ª©ªª¨§ª§’#f¦ÃÊÇüºÂÇÆÄÅÉÌÎÏÍÍÆ¿ËÒÍËËÈÉÊËÊÈÈÉÎÏËÉËÍÍÏÎÊÌÍÊËÌÉÈÉÉÊÍËÊËÈÇÅÆÆÂÀ¿ÀÀÀÁÁ¾Àü²®­®¯°­¦£££¤¨ª¬­²±ª¢›˜–’“”“”™Ÿ ¡™‡ˆ‹‹™œŸžŠ‚”œ—’”–• ©‹€€…Šqhfoz{xsllmpmbVXbc^bkkcj™¡¢Ÿ¡ ›”m[NGEHHDDGFDCDFINSSVY\`beknnpttvzzz|}}~‚„‡‡…‚|xzrR?A:47:;?FLV^crƒ‰‡‰‹‡{bOKMJHKLKONLMLKKG@=;67M_o‚poš §Ÿ†cDBCfš–ƒŸ©–ƒƒŒŒ˜­²®±³¡“›edu™ÖÞÊ´¯µ¶»¼»¾½·³®«­«©©©©©ª¨¨«ª¨©¦•$g¦ÁÇüÀÆÅÁÅÉÊÊËÎÑÎÊÁ½ÉÍÊËÍÍÌËÊÊÉÉÉÉÍÌÊÊÌÌÌÍÊÇÅÈÌÊÉÈÉÇÈÎÌÉÇÅÄÇÿÂÂÃÁ½º»¼ÀÀ½»±´º®ª¬­¬©©¨¦£¦ª¨«³³ª¡›—”‘•™›¡ ŸŸ–Œƒ„‡…‹”šŽ‚’š–•˜›œ “tsz€zoimsxxtssnotƒje`ZTYcfcjw~{€’™ ¢¥¦£¡—fSLEGHHHFILKMRSW\_adgkmnpsuuwxyz{|~€‚‚…†…‚‚€yvvrQ8AC528:>DNW]n†‰‹‹‘Ž‹ˆ†~hRNPLHLMJMOLMMLLOLC><>98Ru}zt”¾±««|l³ØÑ¦Š‘”’~l‡Œ–®°¯µ·¨•–Ó¹w…—´È±®¯«§§¦¥¨¨§ª«ªªªª««ªªªª©«©—&i£ÁÆÅÆÅÆÆÅÈÊËËËÊÌÎÌÊÄÆÍÌÊÊÀ´ÁÈÇÇÅËÉÃËÍËËÍÏÈÆËÇÂÆÊÆÉÉ¿ÄÎÊÆÆÄÅÆÆÆÃÃÄ¿½¾½»´°°­­°°¬«¨©«¨¨ª§¥«¬¬±°¨Ÿš•ŽŽ”˜š¤°§ œ˜‰‹†~Œ•šš’…‹“’’•™™£¬–}trsvuojnsvurwspvtˆŠkhni_\[]agjornw‚€|‡–ž¡§¦š~e]QGHJIHMPRTV[[\`dgijmootwwyxy}€„………„}yxwusV9>B=54;>DS\j‰ˆ‰‹Œ‹ˆƒˆ‚\NLLJGKLMMOPNNOONGGE@A>8FXfzœ‘l—ol‚°Õœƒˆƒ„„‹“–…™ºº¶³··®ª¾¹–¦ ¡¤¤£¦¤¥§§§§©ªª¬««¬¬«ªª«ªªªª©©©¥–!f£ÀÆÅÄÃÂÅÊÉËÌÍÍËÌÍÌÊÈÊËĿǹÅÌÉÉÊÊËÉÈÊÉÈÌÍÌÉÉÉÅÆÉÈÉÉÈÇÊÉÅÆÆÆÄÂÃÅÂÁ½´³±««¬¨¨§£¨«¦¤©ª©ª©©ª¬²µ±«¦Ÿ•‹ŠŒ–›œžžŸ¢ š‡Ž‚z••–‹ƒŒŒŽ–š˜š’„¦£mnvmjquvtqrttytkmloqmefia`kmjksvkfhq|{v€˜£¤¨«¨¢ŠjUJJJIMOOSWX]__dghlonopswxy|~ƒ…†„„„}{yxvr[88BD@79=DOb|‰‹ŒŒŽŒ‹ˆƒ‰‘jFINMOOMOPQSRPOPQMHGCAACC@B_z£Ð¯•ru±ÄÛʑ‡“„|˜°¯ª«¨¨®±§“¢•ƒ‘—¡¤¦§§©¥§ª¨¨©ªª©ª««ª««ªª©©««©¨ª¦š#g¤¼¾ÂÅÅÈ»°ºÀÃÇÊËËÉÉÉÈÈÊÌÈÉÇÇËÊÈÉÊËÊËÌÊÊËÈÅÃÈÌÌÉÉÉÊÉÉËÈÉÉÈÈÆÅÅÅü³°²¯¬¯­¦¨«¥¤®°ª¨§¬¯®¬­¯°±µ´­¦ œ•‹‰Œ‰Š”™ž¤£Ÿ ›—‘‚~ŽŒxu„Ž”—‰ƒ‹ˆŠ”™šžP€…„ƒƒƒ†„„ƒ„ƒ„†„„ƒƒ…„|z{{{zz{zzyxsolsyy{wtuuwwwwwwxxxxwyxxzzzzxvxxurmkpuwyvsstx}……{yyxyxxsuyvwxxxwuzysvytmqvvvvwywvwuuvvuuvvw|wmpxwvxyyxututu{|tmptuuutuvtw}vnrvutttsuyvoptvx~Š™‹‘’—‹•”‰—”•‹—“‰‘—‹|z{z{{yzzxuonsxzywvustwwttwvuxyxxxyyyyzyxwwwsnnsvwwtstvz€ƒ}zyxxyyyyyywvxwxxwwvx~ztvxsmquwxxyxvvvvvutuuvux{vmrxwwxxxvtuvuw}|snqtttttutsz}smtwuttssvxsorvy†˜•’“–Ž”™œ‘™›‹—ž‘‹˜“}yzyzzxwsoosz|zxtstvuuxvqtxvvxxxwxywwxxxwuqnpsvxvttsu{‚ƒ|z{zyyyzzyxxvwwwwxxwwwsu~ysxysoqtuvxxwwuvwutvtuvsx|vnrwvwxwwvuuvuu}slpqsttsstt{|qntvtttuuwysosy„‘—““–••”Ž••‹–•†‘—€xzyywqnnsy{yvtvtquvuvwuvwwvxwvxwxwvxxxvqmotxwusrsw|€‚~zyzyyzyzz{zzzyxwvwwxxyxvwwy~ytvxuoptvxwwxwvvutttvursy|tnswwwvwwuuuttv{}qlptuuutttt|{ontuttvvtwxrow€€ƒ†~ƒ‚€€€~‚€€€ƒzyzwqoosxzyvuttvuxwtwwuvxxuuwvwxxxwwxtpnptwxtrsty~ƒyyzywyyx{|}~~~~}|zywwxwwvuxzruyvorwwxxvxxuttsvvssrt{|unrxvvwwvvvutuu{{omsttsrtusu~znouuuvursxvns€|{€}yz|}|zyyyyxxxxwy{yyxrnpttz|wvwwvvvvvvvvvwwwwvvwwxxwxuronquxwtrrt{‚ƒ~ywxyzuvzw|€€€€€€€|zyxxyxuw~zsvzwpquwxwvwuuuuvvtsstuz|smtxvwvvwvttuuu}znnuutsttsrx}vmouuttsruxtt~~{y{{{|{zyyyyzzxwwzyurnntyxxzvuxxvwwvwvuvwxvvwwvwwvwxupnnrwwusstv}‚‚yxxyyxyz}€€€€€€€€€~{ywvvuv~|tvyvoovwwwyxttvutttutssy{rmtxwwvwwvuuvvwymqvttuttttx~vmruttsssuww}|}|{{{zyyxyyyyxxxtnmpuywuuuuuwxxvvuuvvvvxwuvvuvvuttpmotwwuttuy‚€|wwyxxyyyz}€€€€€€€}xvwvtw}|utxunouwwxxtuvuttuuvusu{{sotxxvwwuttuvuw~xmqusuuttttz~tnsvuttsrux€}|}}{{{zxxyxxxxvrnmrwxyvrqstuxxxwuuutuuwxvuvvvvvvrnmosxwurrw{‚~xxyyyyyyxz}€€€€xvwttty}utwuoouwwwtwvuvtttvuust{{qltxvvwwvuutusxtlqtttssttu|}rmswussrqw€~{||{{zxwwxxxvqnnsvxyxuqpqtvvxxwvuuuuvvwxuuwvutqomptvuurru{‚|yyyzyyz{yz|€€€€€€~xvwuus{}utxwppvwvtvwvuuuttttsruzypmuxvvxwvtttuty~slquuttuuvw}|qnuvutrrv€~|||{zyxtpxwqnotwxyvuvtqrsuvwyyxwwusuuuwvuvxuqmnrvvusrsu|‚}zyzyxyxyzz{~€€€€€€€€€€€€€€€€€€€}xvvwyw}~ttxvoouwvvxwvuuuuutssruzzpnvxvvvvuutuwvz}rmqstsuuuvx~znpvvursv€}|||zyuplrvonrwxxyvruwsssruvwxxwxwrtxttvvuuqmnruutsssw~}yyyyyyxwwz{}€€€€€€€€€€€€~€€€}xvwvtu~~stxwpouwwwxwvvuuutttqrtzzpmuxvuvuvutvwv{}rmrrqtvuvwy~xnqvussw€}{{yxtnptvusvwzyvtutwvrrruxxvwxvwwtvusvvsnmotwusssu{€‚|yyyxyyyyywz}~€€€€€€€€€€€€€€€€€€€}xwxwvx}ttxxrouyxxxvwwututtusqt{{pmwwuvutuvuvvu|}qnrqrvvuvvz~wnrvssw{vsrqoqtstxzzxwvsvvswursswyxwxxwvuutssronotvusprv|}yxzywwywxyzyz~€€€€€€€€€€€€€€€€€€€€€}xvvwwv}ttyxpnuwwwwvwvutssttrstzzoowvwwvwwwvvuu}|ompsuttvwvz~umrrqx€~upsvuuvwwy|{vttsvwsvxsrqswwvwxwvuutqonnqvvtsrtw}‚€{xyxxzywwwvxzzz}€€€€€€€€€€€€€€€€€€€€€€}wvwvvu}utxxqntvwwvwvututsrstssyzoovvstwwwwwwuv~zportuuvwvv|}qostx€zuy{vrtyyxywvuttuvstwtrrquvvwxwvvtrolnsuwurrux~ƒ€zyzyyxzyxxwwyzy{~€€€€€€€€€€€€€€€€€€€€€€€€€|wvwxvt{vtxyqnuxvvxwvuuusssstttzzmnxutvwwwvuvux~{qpsuuvvvwy|zqptx€}|{{wt{yuvvvuuvvutvursstvvvxwuutolnsvvssru}‚|yzyyyxywuyxxzyy{€€€€€€€€€€€€€€€€€€€€€€€€€€€€|wvwwut{€wsxxrmtvuxxwvuussssttsu|wmqvtvwwwwvvvtx€xmrutvvvvvw|zppy€{yzuu{zvvvwvtvwvuuvsrrrvvvwvuromptvustsu|‚‚}{zzzytwzxyxyzxyzyz€€€€€€€€€€€€€€€€{vvwwvuzvsyyrnstvxvuvutsrrtutsv{xnqwvwwvvvvvvtzvoruvvuuvvw|wnszwvrtutvvuvusuwvuwurrrtuuvupmmptusqqu|€‚|xyyyyzyyxxxzyxyyzyz~€€€€€€€€€€€€€€zvwvuvvzvswxqnsuuvvvvutsssttsqt}xlqwwwwvvwvuvvz€umruutuuvvx|vr{utssuwxuuwutwyutwtrtttutqnmpstsqqt{‚…~wvwxyyyxxyyyxxzyyzxyz}€€€€€€€€€€€€€€€€€€€€€€zvvvvvv{€yruxrmruuvvvutsrrrttsrw|vmqwvwwwwvtvxtz~rmsuuuuvvvx|y€zuurrvxwvuuusvwsuwtssrspmorsssrrszƒ„yxwwyxxyyyxxxyxyzyyzwx}€€€€€€€€€€€€€€€€~xvvvvvuy€zruxsnsvvuuvutssrsvtstw|vlpwwwwwwuuvuu{~qmttttuuusw}€~xvustvyvvwvtuxvuwvsrpnmnsurqpquy€„yxxxyzyvwyyyxxxxyyyyzzy|€€€€€€€€€€€€€€€€€€|vvwvvvux€|tuwsmqwwvvvtsssrtvuvvw{vmryxxwwwvvvvv{}pntutuuutsx€~xvtsvxxuwwutwxvvusplmprtsqqqs{€|yxxyyyyyyyyxxxwyyxyzzzzzz€€€€€€€€€€€€€~yvwvvvvuw€}tuwtnqwvuvuutrrtuuwxsu}umtxwwxxyxuvvu}~pntuttusty~xuutxyuuxusuwvutqmkntusqqrv{{xvxyxyyyyxxxwwxxxyyyxyzzzz}€€€€€€€€€€€€€€€€€€€€€€€€}xvvvvvvux{tvyunrxvuutttssstvxvru|tmtwvxwyyvuvvu~}oosttutuz€~xtuvywtwxvvwusqmmptvtqqrw|€xvxxxyxyyyyxxxxxxxwxxyyxyzyy|€€€€€€€€€€€€€€€€€€€€€€€€€€zvvvvuuvuw{twytmpvuuuttttrquuuusw|umswwxxwwxxwvv€zlpuuutty€~xuuwxvvxvtutokmqtusposxƒ}zwwyyyyyxxyxxxxxxyxxxxxyyxyyyz~€~€€€€€€€~€€€€€~€€~wuvuuvuuvy€|tuwtmpuuvutvvtruwustrx~smsvwwwxyywwvx}wmptuuux€~wtuwwvwvusnlmqttrqpsy€|wwxyyxxyyyxwxxxyxxxyxxyxyyyyyyx{€€€€€€~€€€zvuuuuutvux€}uvwtnotuuuvwusuvutttsy{rmtxvvwxyxwxwv|wmotttw€|vtxywwuqnlmrtsqpquz€|ywwzyxyyyyyxxwwxxwxyxxxxxyyyxyzxx~€€€€€€€€€€€€~xvvuuuvvvux~~vuwuoosuuuvusvvttttrrx|sntxwwwyzwxzuw~vkqutw€{uvyyuqmmosusqoqy€€~zxyyxyyyyyyzyyyxwxxwxxxwxxxyyyyyzzy{€€€€€€€€€€€€€€€€€€€{wvuuuuvvvvv~}tuwuonsuvwvtwxuttssrry|rouwxxyzyyzxty~tlrtx€yuxwrlnsvtsqptz€‚}yxyyxxxyyy{zzyxyyxwwxxyyxxyxyzyyyzzxx}€€€€€€€€€€€€€€€€€€€€€€€}xvvvuuuuuvvx}wvwvoptvwvtwyvvtsuvttxzpmuxxyzzzzxvty}smry€ywunnsvttqqx~|yxxxzyxxxyxxz{zxyyxxwwxxyxxyyxyyyyyvrq{‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€yvxvuuvvvvwxx~~vvxupotxvtwxxwustuutrxzpowxyyz{yxwutz~qlw€|trsttpqux…€{xwxyyyyxxxzyxz||{xxyxxxyxwxxxyyxxxwuqqqz„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€|wwwutuvvwuuvv}usvvonvwvwxwvvutssuss{{ppwyxy{zxwxvu|{or€{ruvqpsz‚€{yyvwxxxxxxxyzxx{{|{yyyxxxxwxxxxzyvtrpsuwx‚€€€€€€€€€€€€€€€€€€€€€€€€€€yvvvtuwvuvvuuv~~ttxwpotwwwxvuuustutsv{yqpwzyzzxwwvuv{ys€{qrtu|~|yyzyxvxxxxwyxxxwyyyzzxxyxyxwwxwvwwwroptwyxvv‚€€€€€€€€€€{vvvuuuuuvvuuvv}€wtvvonuvwxwvvttstustwyxopwyyzywvvuuuz|€ynu€€{xzzz{zyxyxxwwxwxxxzyxyxxxyyyxxxwvvtqonsxxwuttz€€€€€€€€€€€€€€~wuvuuuuvuutvvvv|€wtxvpouxxxvutusstsuwvwvopwxxxwwvtutu{€{{‚zzzzzz{{yyywxxxwvwyyyyyzzyyyyyxvwwuqppsvwxwttuuz„ƒ€€€€€€€€€€€€€€€€€€€€€€€zvvuuuuvtuuvvtww}€vtwvpntwwvwvutttsuywuxvorxywvwxvuuux€€~|zz{{zzy{zyywwxxywwyyxyyyzyxyyyxwurppsvwvutsstvxw}„€€€€€€€€€€€€€€€€€€€€€€€€|wvvuuvwvuutxxvww}wtvwqnvxsuyvuuuuvxywuyxnryxwwwwvuvx€~|zyz{zz{{{yyyxyyyyxxzxxxxxyyyxywrpnrvxywussuuvwwx{€~€€€€€€€€€€€€€€€€€€€€€€€€~ywvvutvwwvuvwuuvx|€ytxxqntwuwwuuvvwyxvtt{vnrwwxxxwuuy|xxzzz{z{zwxyyywxyxxyxxxwxyxwtropsuxwusqrvxwuvz€}}€€€~€€€€€€€€€€€€zvuvvuuuvvuvvvvvvvyzsxxqosvwwvttvwxxutrtyvnqwwxxwuvx~|yzzz{{zzzwwyyxvwwvxxxyxvxwsopsuwwutssssuvwy|€‚~{zx}€€~€€€€€€~€{vuvvvuuvvvuvvuwwwvz€yuxvsorwvvustxywuussszwlpwvvwvwz€{zz{{{yxzzyxxxwxwvwxwxxvuqmosvxwusttuuttv{|zy{zy~€€€€€€€€€€€€€€€€}wvvvwvwvvvvvutvvvxwz€{vvwtntwtuutxzwuuutrt|vlqwvwww{€}yy{{{zyzzyxyxxxvvxywvtpopsxxutssuwwvvz~{|zy{{{yz€€€€€€€€€€€€€€€€€€~€yuvwwvwwvvvvutuvvwwvz|uwxsotuuvuwxwuttussv|xnqwwww{€€}zz{zzyyzzxwxxxwuvwupoqsvwvurqsuvvuy}~€|yz|yz{z{z{€€€€€~~}}}}}}|||||||||||{|||||{{{zzzzzzyyzyyyyzz{{{||~~}zzyxxxwwvvwwttuvwxxxy|twxsosuvwwwxvstvtttw}wnsxww{€}yz|{zzyzywwyywussqoptxvtsrsuttvwz~{zz{zz{{{{{|z|€€~~}{zyxwvutttsssrrqrqpoooooppooonnooooopoopoopoopqqqsstvuwxzzzzywvwwvuuuwwxxwz|twwsqruxyxxwttuttuuw{slswwz€~{yz|}{zyyxwxyxuomptvvvtrqstuutv}~|zy{{z{zz{{{{{z|€€€~~|zxvtrqppppoponnmllkjjihghihjmnnnkjjjijjjlllmnnooopppppoqqpqqqrtvyywvvvvuuwvwvwxz€}vvxtouxxyxwttutuuuvx{tmrwz~|{{{{zyxxwwvsonptvvtrrrtuutuyz|yy{{z{z{|zzzz{zzz}€€€€|zwtrqppoppponlihgffghihiiijkllorrrqlkljhgeefffefghjmpqqrqqrrsssqrrqruwxwwuuvvvwvwxxv~~uwyrovwxxvuuvsuvuuuw{sks{€}zzzzywwvrpprrtvutssstttwx{}{~{y{yy{{{z{{{{{yz{z{€€€€~}zxurqpqrrponjhfeeeefggilnnqrqrsssuuuvusstqomihfeeddcdcdhlpqqssstttssstsruxxwvvvvvwwwwzwv‚~rvxsptxxvvvvuuvuvvtv{rkv€€|xzyywsqpoqvusttssttttv{€~}zyy{zyy{|zyz{z{{yw{|z{€€€}zvsrqqrqonmjhfedccegjklorttttutuuuuuttvttvvvusqqligdeecddeinmnqrrtsssstttsuwwwwvuwuvwvwyywy‚tuxsnsyxtuuuutsvvuqtzqo€€zvxurporuttsrrsuuttx|{{z{yzyx{{z|{{{{{yy{zz{|{y{€€~|wrrsrponmkjjgddddfgimqsstuutuvuuuvwwvuuuuvuvxwtrssplihedeeflqpmmprtsssrrtssuvwwvvvwvvwvwxxyx{ƒ~rvytntxuttswwtuvusqwxs€}vrqpruvvtrrssttvx{~~||zyzzzzyz{zz{{z{|{yz{zzzz{z|€€€~xtqqqomkkkjhfeddffiloqrtussuvuuvtssttststtrtuwxvsppqrrpmiffeeioqppoorrrstsssstvuuvwvvvvvwwwwzzxz‚uxztosvusswxuuuvtrtwx€yrtvvussststuuwy{~~}{{{{yyzy{zyzzz{{z{{{{{{zz{zz{z}€|vrrqmhcdhgecbcddgilqstuuvtqrqqqqrrqqqrsrsssqqrsrrpopopstrmjiedfhjnrsoorqrsrrstuvvuvvvvvuwwwwxzzzxz‚uwxtnsvrrvxvwwvtrttu€zvwvsrstuutuy|~||{zxz{{zxzzz{{yzyy{{{{{z{{zzzzzzz{~}xtqqpjdbbaaccbccfinqrsrrttsqqponoppqpoprrpqqqoopppponnoopsuspnhdeffhousnqrqrrrssuvvvwvvwwvvvwuvyzyyxy€~tvztoturvvuwxwtrttu€ztsstuvuuy}}|{yz{xw{{zyzz{zzzzzyz{{{{zy{zyzyz{zz||yurqmiihda`abccbdhmrsqrqpqrrqqqpppoopppqqqrqqppoooqpoonoopppqrrqmifeffmusporrqrrutqtvwwvwxwwvvwvuxzxxyxw}tvxsprqvwtuxywsssu€xstuttwy}€~{{zyyzzz{{zyxz{{zzzz{zxy{z{{zzzyz{{{|{xwurpjddkldaabcbdfkqrsqpqqqrrrrqpqqqppqqppqrrqpoppppqqpoppoqqppprsqlhffgmutqoqrrqqvzspuvuuwxwxwvwwvwyxxxxxwttxusqsxwwwwvtust€xtuvx{~}zvy|yzzyzzzzzzz{zzzyzzzzy{yy{yz{xxzzz{yxwwungddfllecccdejorrqqpppqqqqqqqqqqrqrrqqqrrrrrqqpqqqqqqppoqqopprrrniggfltsqoqsrrtwyxtqtvvwwwxwvwxvvxywvwyyy€uvywprvvwwxwuuuv€zz~}}|{zzzy{{yzzy{zzzzzzzz{{zzzzzzzzz{zz{yxyxxyxxwtmhgfddkmfcdegmrtsrqpqrqrrqrrssssssrrsrrrrrsssrrrrrqpqqrpprppqqqqrrmhgglrsqoqsqswvxyxuqtwwwwwvvvwvvxyxxxyyyyuvxsosvvwwvuuvw€€}z{zzzzzzzzyxyz{{z{{zzzz{{zzzzzyy{yzzyyzyyywywvtmhkiecchmjediottsqrqqrrrsssuvwwvvttttttssrrtsrssrsrqsssssttrqqrqqrsohfhlrrqpqrqu}yuxxyuoswwvuvwvvvwwxwxxxxxxx~tswtoquxwwttuw€€{v{|{{z{{zzxyyyzzzzzzyyyzzzyyyyzzyzyyzyyzyxyywvsnkmlheecfopihpttsrrsqssstvvwxyxxxxwxvuuusrssttrstrstrttttutuvusrrrrsrkhknqqpqrqswy}|vvxxupswwvvwvuuwwvvwwxxxxww~~uuzunrwwxusux€{w{|{{z{zzzzyxzzz{zz{zwxzzzzyyxyzzyyyzzyyyxxxvuolqqlgdfdensqqtsstsqrsttvwwy{|{yyyxyxvuvvusttsttttsttsuuuvvvvwwvusssrtomporrqrrrvxxz|vwyyvqrvwwvvvvvxwvvwxxwxwxx~€vvytorvwvuuy€|y{{zz{{yz{zvxzyz{zz{zyyzyyzzxxyzyzzyzzxyyxxxvqnpsrmhefedjstrttstrrsuvvxxyzzzyyyyyyxvvwwvtttstssuttsstvwwwvwwxxwvvusutpmmrsrqquxwxxz~}wwyyvrrvwvwvvvwwvvwxxxxxxxx~~wtxuorvuvvy€}zzzz{zzyzzyxyyy{zz{yxyzxxzzyyzyyyxy{zyyyywwwtonrtrmifeeejrssutssstutvxxvwwwxxxxxxxxwwxwvvtuuututuutsuvvwvvxxxxwwyvtvskjnrrrsuvwwwwxz}}xvxywsruwxwvuvwwwwxxxwxwxxw{~usysmsvuwz€|z{z{{zzz{zyzzy{zyzzyxyzzyzzyyzzzyxy{yxyxxwvurnnrurnjgfehosttttsssuvvwvuuvuuuvvvwxwwwxwvwvuuttuuuvtsuutuvuwwtuwwvwxwvrkjprqtwwvwuvwwyz|~yvwyxuruwvvtvxvvvwwwwvvxxwv{}vtwrnrtuy€~|zzzzzzzzyyzzzyzyxzzyyyyyyyyyyzzzyyyxxyyxwttvrnnsuqokfffkruutstrsuvvvvutuuuttuvvvvwwwwwvvuuututtuvuttuuuvuvustuvuvvxyvnnqruwwwvxvuwwwyz{~zvxxxurtwuuvwwvvwwwwwvwxvwwz~xuwtnotx€|zzzyyzzyyzyyyyyyyyyyyxyyxxyyyyyyyxxxxxvtrpuxrooqsrqjffhnsvutsssuvvvvvttuvuttuvvuvxwwwwwvvvuuustuttuuuutuvtsstuvvvuwywrqsvxxwwxxyvwwwwyzy|{vvwwupsvuwvvvwvxxwwvvvvwxwy~ysvtmqy€|yyzzzzzyyxyzyxyxyyyzyyyyyyyyyyyxvxwssrrtvvxxrpppqrqkffkrwwuttstuvwwvututuvvuttstuwwvwwvuvuttuttttttttuuutsstuuvvuuuwwsswwwwwwwwwvuvvwwwxw{|vuwwtpsvwvwwwwwwwvvvxwvwwuyxrvtot{xyxyzyxxxyyyzyxxyyyyxyyyyyxwxxwussrruvvxwvvwurppqrqmhinswwuttuuvwvvuvtuuttvvvusstvwvwwvuvttuuutttsssttuuttuutttstuuuvtsvwuvwwwwwywruwwvxxw{}wuxxtqquwvwwvwwwvvvwwvvvvwz}vrvur€zyzyzzzvvzzxxzyxxxxxyyyxxxxxwttrqsvwxyxxxwuttusqpqqqojjntwuuttuvvvvuuvttvuvuuuvuuuuvwywwuuuuuuutsusrtvutuvvutstrrssstvuuvwvwwwwvvyxttwwvwxww{~xuwxvqrvvwwvvwxvvvvwwxxvwwx|xruw~{z{zyzzyyyyzyyyyyxxyyzxwxvtrrrtwxxxxxxvvvtsttuuusrrqpnlnuwvuuuuvwvvuuusvwvvuuuuvvuvuwyyyvuuvuttsuussvwvwvuuvwvvtsssstuuuvywvwwwwwxywvwwwwwxxw{~wuxxvrqtvwwvwwvwvvvuwxvvxvw}yqu|yzzzzzyxxyzywwxyxwyxustsrstvxxwxvuuuuvvvuuvwvwwutrqqtqpvwuuvvvuwwuuttvwvvvvvvutuuvvvyzzzxvvtssstutvxwwxwvuvwxwvuutrsutuvwxwwwvxwwwvwxvwwvwxxx{~yvwvvsptvvvwuvwvvvuwxvvvwwx}yr|yzzz{zyxwxyxwwyxuusrqsuuvxyyywvvvvuwvuuvwuvvvwvvusrrppsuwuuvvvuvutsruwwutuvuvutuvwxwwy{{zwusssstuvwwvwyywwwwwxxwurrstttvvwwwwvxwvvvvvwxwvvxvwwy|{vvxwsptvvwvwvvwuuxwuvvuvvw|||yxxzzzyxwxxxwvvsqsrsvxxyxwxwvuuvvuwxwvuuxwuuuvwvvvvtqsuwxuvwwuuuttssuvuuuwwvwwvvvwxyvvyzywtttsstuwywwyzywvwvuvxyvrqtuttvwwwxwwywvwvuvvwwwvwvvwxy~}vuwxtqtwwwwvvwvvxxvvvuuvww}€|yyyzyxxwwxvutrrsvwwxwxwwwuuvvvwwwwxwwxvwxwvvwvwvvuvvtuwzwvwwwuuttssuutstuuxxxyzzyzzyutwyxutttsrtuvxwyzz{zzzyvwvwxussuuvuwwwwwwxwvwwuuvvvvvvvvwxyz||wuxwuqrvxwvvvxxxxwwwvvuvvz~{xyzyxvwutsqstuvvxxvwwvuuuvuvxwvwwxwvxwvvwwvuwvwvvvutstwywxywvvutustuttttuwz{{||zzyyxwwwxurstssstuwxwy{y{zz||}|zvutrtuvwwvvvvvvuvwwwvvwvwwvvwwuwyzwy|yvxwvrrvvwwwxxwxwwwvvvvw{€~yxxxwtrrrstvwxwvuvwuttttvwvvwwvvvvxwuvwvvvvvvwwwvuuttsuwxwxyxwvtstsstttuxyzyyyyywvwvwyxwursttrsssuvxxxyvxxvyz{{zzvsstutuwvvvvwxvvwxwwwwwvvwwwwwwxxwvx}zvwxwrqtvvvvwwwwwwwwvuvz€yutrqrsuwxvwvvurtvuuvwvuvwwvvvvvvwwwvvvwwuuvvvvwwwuuwuuvwvvxxvvtssttuuuuwxxwwvvvuuvwxyxvtssuusstttuwwyxxwvvwwwwwyyvtvwsuuvvvwwvwwvwwvvwwvvwvvvwxxwwwvx|vwxwrqtvwwwwwvwwwwwuuy€|trstvwwwwvtutsuuuusuwuvvuwvvwwwvwwwwwvwwwwwvvvwwwvvwwutuwwwywvvutstttuuuuvvutttuvwwwwvutsstuutstssvwvxyzxwwutuuuvxxvwxusuvvwwwuxxvvvwvwwvvwwwuvwxwvwwwy}|vwwvspswwvwwuwwwwvuvzzvwxwwvtstttuvy{zwutvwwwvuwwwwvvvvvwvvwxwvxwvvwwvvvxtpsssuvwywvvvtststttttttstuttuvwvvuutssttttssstuvwwxxxvwwutstvwxwvxytrtuuvvvwwwvwuuxwvvwwvvvvwwvwwvwx}~yvwurqtuuwwvvwxwwwuz€|wvutstttuxz{|~{vxwstvwxwwxwvwwvvuvvuvwxwvvwvvvwvuvwpnusrtsvzvuvusstrsttsttstttttttttuutssttsstttttuxxvwwvvwxvuuttwxwvxyyursuvvvwwwwwvuwwvvwvvvuuwwwwwvvxw|€yvvwurttuvvuvwwwwwy€{tsttuwyz||zxzzuv{zwstwyyzyxwwwwvuuuvvvwwvuvvuuwvvwvooutsstxzvuvtsttsstrsutrttutsttssssutstttstttstuwyxwwwuvwvvvuvwwwvwyzyuqruvwwwwvuwxvvwwwvvuuuwwvvvvtwyw|xuvvursuuuuvvwxwwz€yuxx{||~|{zyxz{wwzxwutvvxzzzxxxxwvwvvwwwvvwwvwvvvvxvnpttrstxywvuutsrstsrsutsttttttttttttuttuusssstttwyyyxwvvwwvwwwwwwwxyzzywsruwvwwvvwwwvwwwvvuvvvwwwvvvwyyx{~xuwxursttuwwvxwvz€~~~}}||{zzyxzztwzwvwutvxy||{zyxxxxvvwvuvwvvvvuvvvwuootusstwxvvvuttsrsssttstsstsstttttttsuuuutssssrsvyyxwuuvvvvwwwwwxxxzywyzxtrtuvwwvwwwvwwwvvwwwvvxwwwwwxyyx{{vwxtqsttuutxwvz€}{}||{{{zwy{wvxxxvwxvtvxx||zz{zxxwvwwvwvvvwwuuvvwvnmttttsuwuvvtttsrsssttsttsrrttttttttttuuutsrppooswywvuuuvvuvvvxwxxwzyvvyywvrsvuwwvvvwwvvwuvvvvuvvwwwwvxyxx{~zuwwusrsuttvvvz€}||{{{{z{{xzytxxwwvwwutsuwyz{|||zxwwxyvuuvwvvvuvuvxpmsuurpvxuuvutsrsrsssttsttststtstttsuuuutsrpnopoquxvvututtuvuvxwxxvzzuuvyyywtrtuvvvuvwwvvvvvvwwuwvvvwwwyyxvx}{vvwusrsutuvvy|||{z{zz|yy{vuxwxxwvxwuusuyyz{}~{zyyzywvvvwvuvvvuuwrmsutooxxuwvtutsssstuutsssstttrstttuvwvvuspnmppoqtxyvttuuuuvuvwwxwwzxtuuvxzzxtrtvuuvvwwvuvvvvwwwwwwwxwxzyxxwy{{wvwusqtuuuvy€}||{z{zz{xzzuwxwxxwvxwvvttwyyx{|||{{{ywwxxxwvwvvutxtnsusnpxwvwwvusstsstutsttttssssstttvxwvvsqomnoooprvywtstuuvuuvwvwxwzyttuuvxyzxustvvuvwwvtvwuvwwwvvwxvwyyxxxwxxy|zwvusprttux€~{|zz|{zzz{ytxywwvvvwwuusqvyyyyxz}~|{zxxxwwwwwvwwuvvprwqnsywuvwvuttssstttsttuuttttsstuvvvutqpponnopqsvyyvstutttuvvvwwwyxtuuuvuuxyxwssuuvvvvvvwwwwwwwwwxwvxxxxwvwyxw|{utvsprttx}{{zz{z{{{zwvyyxxvtuvututrtxyzzxxz|}}|{zzwwxvvvuvvvvrrupnuywwwvvvutsssttttttttsttsstvwvuuuspqqonnoopswxyvsrsstuuuuuwxxyxuvvvvuuuvxywursuuvuvvwwvuwwvwxwxwxyyxwwwxywv|zuuvsqqsx€~~|{zz{{z{{yvxyyzxwuuvtrsuutuyzzzwwxz|}}|}{yyxxwvvwvvurtqouvuxwvuuuttttttttsttutsssstuwvtttrqrrpoooopsvxxwtrrsrsttttvxxzyvwvvvvuuvwyxxwrstuvvvuuvvvvvvwwwwwyxxwwwxxwvw{{vuutrpw}{{zz{{z|ytxzxxyxwwuuvuuvuusvzzyxxyyy{|}}{yxzxwxxwwvsurouuswxvuuuvuuuuuttssssttssrsuvuttsssssrppqqqtwwwwursssttttuwwxywuvwuuvttuuwxyxwtruvuvvuvvwvvwwvwwwxxwwwvvvwxxvz|vtvurt€{{|{{{{|{utzyxxxyxwvuuvvvvvttx{zyyyyxxwz~|{zywxywvvuuvtruutwywwuuvvuuttuutttttttsstuuttttuttssrqrrrvxvuwutsssttsuuvwxzwtvvwvuuttuvuwwwxvrsuuvvvwvvvvvwwvvxxwwwvwwvwyxvy{wuutu€||}|||||{wxyxxxxxxwvvwwvvwvusvyzzzyyxyyyz|}}|{{{ywvuuvuuwusuwxxxwuuuuuuuuuutststtrtuvvuutuwwuuutsttuxxvwxvtrrsrstuuvvwzwuvwwututuutuuvwxzvrsuuuvwvvvuuwvvwwvwvwwwwvvxxwvy|xttw€}|}||}|{ywxxxxxxwxxwwwvwwwvvutwzzzyzyyzxxzy|}~~|zxxvvvutxtrvwxzxwvvuuvuutuuttsstussuvvuwuuwwvuuutuuvyxwyxvvtsrrsttuvvxzvtvuvuuuvwttvuuvwxxwsrtvuvvuvxuvwwvvvwwwwvvvvwwwwwx{xtw€}||||}||xwyxxxyxwxxwwwuvxvvvvtvy{zyzzyzyxxwyz|~~|{zxwwvtwututwywvvvvuuvusttsttsstssuvwwwvvwwvuvvuuvxzyyyxwvutrrrsttvwyzvuuuwwvuuuuttttuvvxywvrrtuuuvwutuvvuwvwwwvvvwwwwvvvx|xv€~||}}}||xwywxyyxwyxvwxvvwwvwwvuw{zz{zzyyyxxxwxz||~}zyxwwxvsrrxzwuvvttuuvvttttsttttsuwwvvwxxwvtvvuuuvyyxxxwwutsrqqstuvxyvuuuuuuuvuuuuutttuvwyzwrruvuvvwutuvvuvwwwwwvwvvwvuvvwy{€€~}}}~||{xyyyyyyyxxwvvwvuuuvwvvuvzzy{zyyxyyxxxxxy{~~|zxyywurstwzxvvvutuuuvttsrsuutttuwwvvwxwuwvuutvvwyxxxyyxvuussrrtvwyyttuuvvvvvvuuuuttttuuxzywsruuuvvuuuuuuvwwwvwwvvuvvuvvuv{€€~||}}}yxzzyyxxzxwwwvvvvwvuvuuutvzzzzyyyyxxxyxwxyy{}zxxzyusttuyyvvuuuutuuttrrrtttttuvvwwwwwvvvvvuuvwxxwxyxwvvvutrstuwyxtsuttuvttvtttttttstttvwxwursuuuvvuuuuvuvwvvvuuuuvvwwvvy€€~}|}}{wxzzzzxyyxwvwwwwwuuvuuvwutw{yxzyyzyxyzyxyxwxywxwy{wuurryyvvuuuttuttsrsstutuuvvvwvwvwwvwvuuuvvwvxxxxwwvvuutsstvxwvuuuuvvttuuuttutttutstvwyxurrtuvuuvvuuuuwvvvuwuuvwwvuvz€}|}||}{wy{zzzxyywwwwwwwvuvuuvwuutvy{zyyyzzxyzxxzyvvxvuvw{xuuroxzvvvuttuusssttttttuvvvvvvvvuwvwvvvuuwxwwwwxvvvvvvvuuuvywvvvvuvvvtsuuuvuttttttuvuvxywsrtvvvvuuuvuvwvvvvtuvvvvtuy€}{}{{|yxyyzzzwyyxxwwvwxvvvvvvwvtuvx{zzyyzzzyyxxxywuwvtttuwttrox{vvvuuutttttuuvuuvuvvvvvvvvuuvvvwvuvvwvuuvvvvuvvvuuvvvxvuuuvuuvvttuuuutuusttsuttuvwxwtrtvvvvuuvuvvvuvvstvututuz€|}|{{xzzzzzzyxxyxxxxvwwvvwwvuvvutuyzzzzzzzzyyxxxxuuuttssuutsqwzvvuuuusrsttuuvuvvvvvvwvvuuvvvvuvwuvvvutstvvvuvwvuuttwxwutuuuuuvusuuttuttttttttstutvxwusruwwuuvuwwvuuvutuusuvuy€€|}||yw{{z{yyzyyxwywwvvxxvvwuvwvuutvzz{zzzyzyyzzyxvtutssstvuwuuzxuwvtttssttuvuuvuuvvvvwvuuwxxxxxyxwvvusstttvuuvvvvuuxywvuvuvuuuuuuvututstttvusttttuuwyxtruvtuvvvwvuuvuttttuuuy€}||{|xu||z{zzzzzzxxxwwwwxwvxwvwvtuutxzzz{zyzzyxyyxwuusqsvutxywuxyuvvutssstuvvuvvtsuwvuwwwyyyzzzxyzzxvwvuuutttuuuuuuwyxuvwvutuvutuuvustutstuutttttutstxzxusttuvvuvwuuvtstssttuy€}||{{xy{{||zzzzzzxyxwxwwwvvwwwwvtuvuvyzz{zzzyyxxxwwututstutwyxvxyvvvutttssvwvuutsstwwvxyxyyxxxxwwwxwxwwxywuuuuuuttuwzyvtvvtsuutuuuuttsuussttuuttttuttuxyxwsrsuvvvvuuutssstssux€}z||yy{{{|{zzyzzyyxuxywxwvvvvvwvtuvvuwzyz{yz{yyyxwwvsstststwwywwxwwwvuttttvwvuustwy{|zyxy{{zyxxxwvwz{xwyyxwwttuttuwwyyusvvttuustuuvuuuuussuuuuuuttutsttvxyxursvwvwvuvutttuusuz€}z{zwz{{{z{{yxzyyyxvxyxyxwxxwwvvuuvvuuyzzyyzzyyyxwuuurqrrttvwywtxwvwvutssuvuuuttuwyzzyyyyz|}zyzzxwyzzzywxyxvtssttuvwyytsvuttuutsuuuuuuttttvutsstttsttsrsuwxwurruuvutvuusrttttx~~zz{xy|z{{{{yyyyyxxwwxxyxwxxwwvvvuuvuuwzxwyyyzzyxvuwurqrrsuuw{wtwwvvututtuututrsutuxxwvuuwyyxxxxwwyxxwvvwwvusqrtttvxywtsttuuuutsutstutsutttttsrssststsqrttuwxvrqsutuvutssssssw€~}||yx{|zz{{zyyyyzyxxwxxyxvxxwwvvvvvwvttxywzzyzyyywuvvsstttuuwzxuwwvwvuuuttsttsrstsuwxwuttstuvwwwwwwxwvuvwvuurqqrstvyytsttvuttststttutuuuuuutuusssstsrsssttsuwwvsqttuvtsssstssy~|{xz||{{{zzyyzzzzzywxxwxwxxwwwuvvuvvusvyzzzzyxyyxwvvuuutuuuwyyuuxxwvvvuuussssssstuutuvvutttttuvwvvwwwwwwvtttrqrstvzyvrsuvtrsttrsuuuuuuuvuuuuussttuutstuutttstwwursuvsstsssttw~}{zyz|{y||zzzzzyzxyyxxyxxxxxxxwvvvuuuuutwzzzzzzyxxxwutttuuuvwyyuuyxvvwwuuussrrsrrttrrstvvvvvvvuuvwvuwxwvvtsqrrpqrtwyxttttsstssttssrssttutsstuvsrttutstutttttsstwxvsstrstsrttrx€€}{xy{|{y{{zy{zyzzxxxxxyyxxyyxwwvvwvwwvvvuxz{zz{zyyyxwvvvwvuvvxzuuxxwvwvuuttutrsrttsrsstuvwwvuvvuvvuuuvvuttqoopprsuvywssttsrsssttssrrrsssrsssutsstttussuttuutsssuwxvusrttrrttsx€}{yz|{{{{{zzzzzyzzyyyxyywxxxxxwxwvwxwvwvtv{{z{{{zyzzxxwwwvwvx~}xuvyxvvwwtsttsrqqssrsstttvwvwwvvvvvvutuutttqnoooqtvwwutsstsrsttttsssttssstutttrrttuutsstuuuuutrrrsvxxurrttsstty€€}yy{{|||{{{{zz{yyxxyyxzxwxyyxxxxvwxvvvwvuuz{zzz{yzzxwvwvwxwu{„ywvyzxwwvutsrrqppppoqstuvuvvwxvttttstsrtutrqnnnoqtwywutrstssstttttsttttrtutssussutuuuusuvttuvurrrsstwxuqqsrrstw€~|xy||||{{{{{yyzzywyyyyxxwxyyxwxxwwwwwvvvutwyzzzyyyyyvtvwvvxw|…ƒyvvxzxvvvusrrqpnmmlknrstuuuuuvuttssssrrttsqonmloruwxvtttsttsrttutsrrssssttrssrsttssutssuusstutrssrsqsvwvtrrrrtw€~{y{|{||{{zzzzyyzyxyyyxxxwxyxxwxxvvxwvvvvvvuy{zzyzzyywvuvvwzy~†…|vvw{zvuvuttrpommmlkmpstuuvuuttttsrsssrrrqommnmnswxvttttututststtttrrrrttsrsssssrsttttttusrtutrtttsrsttxxtqrrrw€{x{|||{|{y{zxyyxxyyxxyyxwxxxyxwxxwwvwvvvvxvvz{yz{{zzxwwxxyzy~…‡€xuvyzwuvtstrqpnmmlklnprtuutttusstsqrrqppomlmmnotxyutttttttsttsttutttsrrsssrrrssstssrrrrrtssusssrssrrtstvvurqrw€zy|{|}z{}y{{xzywxzyyxxwwwxwwxwxyxwwxxwvvwxxvxzzz|{zzzyy{zzzy…‡„|xvxyxwvtttrqponnmlllmprssttststssrsrppnmlllmoquxxtsutttsstuuuututtttsssssrrrrqrssrrssstsrtttsssrsssrsttuvvtru€~{{|||}|{|zzzy}{xyzyxxxxwwxyxwxxyxwxwwwvvvwwwvy{z{{zz{zzz{zzz…ˆˆ€yvwyzywuutsrponnnnmkkmooqrssstutrrrqonmlkkmnoswxvssuusttsttuuustttuttsstsssssqqsrqrsrsussuusrrsttsrrrssrsuwtt€~z||||||{zz{ww~|wyzzxxxxwwxxwwyyxxxxxxxvwvvvwvvz{{{{{{z{{z{{z~†‰‰‚zxvxzyvutstsrrponnmkijkmopqqrstsrqponmlkklnpquxwvttuutttuttuustuttuttsrssqsrstrrtrrsrsttttutssstttssrrrqqsuuu€|{|}}}}|x{}wvzyxz{zyxxxxwxxxxxyxyxxxxxwwwwwwvvx{{{{{{{{|{{|z}„ˆŠ‡}zywz|wuusstssqppnmmkihjkmnooppppoonmllllmopruxvstutstutsttussuustssttsssqsrrssrttsssststtsstutrsutsrrrrrqqsv€}{{|}{|{wz|yxxyzzzyzyyyxyyxxyywxyxxxxxxwxwwwwwwz{{{{{{|{{|{z|„ˆ‰Šƒ{zwy}xuvstvutsqpnmmllihklkmnnnmnnnnnmllmnoqtwyvruvssuutsttstuutttrstsrssqrrrttrstrrttrsuutttuusttssqrsrrqqqr}||{{|{zyyz{zyyzzyyyzyxxyxxyxxwxxxwwwxwvwxxxwwvy{z{{{{{z{{{{{ƒˆ‡ŠŠyxxz{xuttuvtsqponmlljjlllmmmmlmnnnnllmnpqsuxyusuusstsssttsrsutssrttrsusrsrsttsrqrsttrssrsssuutsrssqrrqqrrop€€~||{{{yzzyzzzzzzzyyyyxxxxxxyxxwyzyxxxxvwxwwxxwwxy{{{|{||{{|{{‡ˆ‰Œ‡|vvy{{wuuuuutrrqonnnlkkklmlmnmmnmnmlnoprrtvwwuuvuttussstttstttttrstssutstuttttsrrstsrrsssrrttstsrsssrqqqqqr€~|{||{z{zz{{yzzyyzyxyxxxxxwwxwxyxxxxwwwxxwwwwvwwwz{z{|{|||||z~…ˆ‰‰‹„xvxy{yutvwvtstrqppolkkkmllmmlmnmnnmopqrsuvwyvstvutttutssstustuustsstttstutsstrrsstrsrqssrrrsrstttsqsrqrrqr€€~||}|zz{{{{{zyyzyzzxyyyyyyxwxxxyxyxwxxwxxxwxwwwvvy{|||{}|{|{z}ƒ‰‰ˆ‹Š€yuwzzzwuuuuutsrsqommkkmmmmmnooppoopqsttuwwywuuuuutuuusstttttssttrsssttrrttsrstsssrrsrsrrrssrsttsrrrqqrrqr€€~|}}|{{{{{{{zzzzyz{yxz{zzyxwyyyyxyyyxwxxxywwwwwwwx{||||{|||{{|‚ˆˆˆŠŒˆ€yxzz|ywwtuvvttssrppmlnnmoooopqpqqqsttvwwwxvvwutuuvtttttttuutssutssrstsstutrstssstsssttsstsststtsstqoqsrs€€}||}{{{{{{zzzzzyyzzyxy{zzyyyyzyxxxxxxxxwxyxwwwwwxxy||}|{|}||||‡ˆˆˆŠŠ‚zwy{|yxwwvvutuutsrpppooqpppqpqrrstuuwwvwxxxwvvvvuuttutstttusstttsstttsrssrstrrssrssrsttstutrssrqrrqrrqr€€||}|||{{|zz{zy{zzzzyxxzzzyxyyyyxxxxyxwyxyyxwxxwvwwwy||}|||||}}‡‰‰ˆ‰Œ‹ˆ‚zz|{{xwuuuuututssrrrqqrrqqqsrstuuuvuwwy‚ƒ|zzwuvwtsttuvutuuuttutttttsssrstsssqrsssrrrstsstsrssqqrrsrqr€€~}}{{|{{zzzzyzy{zyxyyxyyyyxxyyyyxxxyxwxyyxxxwwvvvwvw{|||}||}€†‰ˆ‡‡ŠŠŠŒ„zzzzyxwuttuututsttsrrsssqssrstuvutuvvzƒ†……‚{vvvuttuwvutttsrstssstsssrrrrssrssstsrsrqssrrrssrqrrrqqrs€€~}}{|{{zzzzzzzzzxyyxxwxyyyyyxyyxxxwyxxyyywwwxwwwwvuwz|||||||ƒ„‡ˆ†‡ŠŠ‰‰ŠŠ}vxyzyxuutuuttstvuutttttsttttutuutuwwz„„ˆŠ‡~wvvuvvvtruutsrrtsstsrtusrsssrrttrrsssrrssrrqssqprrpprrr€~|{z{{z{{zzzzzzzyzzxxyxxyyxyxxxyywwxwwyzyxxxwwvvwwvvwz|{{||}‚„ƒ„ˆ‡†‡ŠŠŠ‰Š†ywzzzzxvuuvvuttutuvuvvttutsuvttutuwvzƒ†‰‹ˆ{xvvwvuvvwttutusssstutsrssrrsssrqssrrssssssrtqqqppqrst€}{zyz|{{zzz{zzzzyz{zzyyyzzyzyxxyxxxxwxxwxwwyxxxwwwwvux|{{|}€ƒ„„‚‚†ˆ‡‰‹Š‰‰Š‚wx{z{zxvvvvuuuttuuuuuvvuuuttttttvwvz~€„†‡ŠŠ…~xxxwvwvtttuuuttststtrssrrrrsrsrrssrsutsssrsqrrppqqrr}{zz|}{{{z|{yzzyzzzzzxxzzxxyxxwxxxxwwxxxxxxwwyywwxwwwwz{{|€„„…„ƒ‚„‡‡‰‹ˆ‰‰‰€wyzy{{yxvtuvuuvuuvutuwvvuutttssuxwy~€‚„…ˆŠ‹‡~yywwwwvutuutttttsssrrrrrqrsststtsssssssrrspqspopprs~{{{{{{|{z{{yyzzyyzyyyyzyyywwxxwwwyxxyxxxwwwxywvwxwwwwx{}~„……„ƒ„„€‚†‰‹‰‰‹‹‰~wyzz{z{ywwwvvwtsttuvvvutuuttttuwxz~€€€†‰ŠŠ‡€{zxwvwvututssttstsrssssrqsttssrsrsqrrrrssrqrqqqqrs€}||zz{{}|{|zzzzzyyzyyyyyzyyxyyxxyyxxxxyywvwyxxwwwwwvvwwy‚€€ƒ……„ƒ„„ƒ†‹‹ˆŠ‹Š‡|wyyzyz{zzwwuuvuutssttssttttttuvwy|€€‚†ˆˆŠ‰‡zuuvuvvtuustussssrturstrqrssrqqqrqqrrrrrrrsrqsqpr€€}{{z{{{|{{|{{zzzzzzxyyxyxxyxxyyxwyyyxxyyvvxyxwvwwwwvvwwzƒ„‚‚ƒ…‚‚„…ƒ…‹Š‰ŠŠ‹‡zuyyz{{zywutqrsrqqrqsstsrsttutvwy|~€‚ƒ†ˆˆ‰‰‰‡{rtusuwvtutstttsrrtttusqqqssrqqqqqqrrqqqstrrrtpos€|{{zzz{zzzz{{zzyz{zzyyyyxxxxyyyxxyyyyxyzwuwyyvvwvvwwwww‚‚…„‚‚‚ƒ„‚‚……ƒ‚„ˆ‰‰‹Š‹…xwzyzzzyvvurqqqqqrrrsstssttutvwy}~~€€‚…ˆˆˆ‰Šˆ„wqrpsvvstttsrssrssssutrqrrrrsqqqqrsrqrtrqqrrrrqq€€}{{{{{|yx{zzzyzyz{zyyyzyyyyyxxxxyyzzyxyxvvwyywwvuvxwvw|ƒƒ„„‚„ƒ‚„†ƒ„††…€‚…ˆŠŠŠ‹ƒwwzyxyyxxvssrqqrsqrsststttuuvwy}}}€ƒ…‡ˆ‰Š‰‡‡wurptwvutttsrsstttsttrturrssrsqqrrqqrrqsrrrswvq€€}{{{|||zy{zyzyxyzzxzyy{{yyzyyxyxxxyyyyxxywwzyxvwvtwz|}€‚„ƒ„„ƒ„„ƒ„†…ƒ„‡ˆ†€ƒ‡‹‹‹‹uwyyyywywstsqqrtssrttrtttttvwz|}}~€ƒ†‡‰Š‰‡…ˆ‰€wvvsptuuuuutttsstttsrsttstsrstrqqrpqpooprz‚w€€}||{{||{y{{zzyxyzyyzzyzzyyyyzyxxyyyyxxyyxwxzyy{z{|}€‚‚ƒ…ƒƒ„„……„„……ƒ…†„‡†„‚€€†Š‰Šˆ|vxxxxxxwvttsrsrrssttstsstuuvy{|}~€ƒ†‡Š‰††‡ˆŠvxzrhovtuuuttusstuurqrsrqssqstutprtkbbbl~„„…†ƒ€}||{zz{zyyzyzzxyyzzyzzyyyzzyyxwxyyxxxwyywxz|}€€‚ƒƒ‚‚ƒƒ„„„„…‡†……„‚…†………†…ƒ€‚†ˆŠ„xtwwwxwvvutsssrrsstttssstuvvxz||}ƒ†ˆ‰…„‡‡‰ˆ|uuwwsuvtsorvvusstuutsrrrqopqru~rnh\W^o‡…„„€|{{{{{{zyy{zxxxxxyyxxzyxxzxwxxwwxxxwxwy|~€€ƒƒƒƒ‚‚‚‚…„„„ƒ„„„……„„‡‡„ƒ††…„ƒ€zrtuuvwvuutssrrsrstsssstttvwxy{}|~‚†‡…„…‡‡‰…yvuuvvwwuuqs{wtutttssssmfb_gootƒ†p\WX\l}}vpmhdf€|{{{||{yy{zxxyxwwwyyxyyxyzyvwwvvvvvvwy}€ƒ‚‚„‚‚‚‚ƒ„ƒ‚…ƒ€‚ƒ…„ƒˆ‡„…†ƒ…‡†„‚|}yrrsrsvusuusssrsrssrtsrttuuwxz|}}~……„††…‡‰€uuuuuutuwvvvxzxwtuwrqsxlXWVcupqz`TUWZ]_\YVUTTY€}{|{|{|zz{zxxzyxxxyzxxxwxyxuvwwvvx{}~€‚‚‚‚‚ƒ‚ƒƒ€€‚…ƒƒ……„„„‚ƒ……†‡…„†„ƒ„„††„„ƒ‚}zurqqstutssrssrsttsrstuuvww{~|}€ƒƒ……†‡‰…yttstvustvvwwqy‚|uz‚rntwjXWW_rnbg_UUUUUSTSTSSSSZ|{||||{{z{yxwzzxwwxyyxwwxxyvwyz|~‚ƒ‚‚ƒƒ‚‚‚‚‚ƒƒ„„ƒ€€€„…„„„…†…€ƒƒƒƒ‚‚ƒƒƒ‚‚ƒ‚‚‚ƒƒƒ‚~{ywxz{zyzyyyyyzzzzzz{z{||~~~ƒƒƒ„„}{zzz{zz{{{{{z}‚~{€‚yw{|sklnnqsmkkkkkkjjjiiiiiim}ruyxwqvux~vxvqvvy}yquƒ‚ƒ‚‚‚‚‚‚‚‚„…†††‡…„…†……„…„„…„„…„„ƒƒƒ„„„ƒ„…………„†‡†††„„ƒ„„„…„ƒƒƒƒƒƒƒƒ„„ƒ„…„ƒ„…„„„…„„ƒ…†………„„„ƒƒ„„…„ƒ„………„……„„„„„…„„ƒ„…………†„…„„…†…††…‡†…†‡„ƒ„……‡‡†…ˆŠ‡‚…†……†f?b`SPDdJKiCVLHeENjREc‚ƒ„ƒ‚ƒ‚ƒ‚ƒ…††††……………†…„„…„„…„„…„„„ƒƒƒƒ„„„…„„†‡‡†……………„…„„„ƒƒƒƒƒ„„ƒƒ„„ƒ…„„ƒƒ„„„„„„ƒ„„……„…„„„ƒ„…„„„„…………„…………„„„„„ƒƒ„„††…†††…„…‡…††††††…†ˆ„ƒ„…†‡‡††ˆˆ…ƒ„…„„p@IQNG3]N5>6T>8dD2UcAN…ƒƒ‚‚ƒƒ„……†††………„………„„……„„…„…„„„ƒƒƒ„ƒ„„„………†††……………„„„ƒ‚‚‚ƒƒƒ‚ƒƒƒƒƒ„„ƒƒƒ‚ƒ„„ƒ„„„„…„……„……„„„„„„„„„………†„…††„„ƒ„…„ƒ„ƒ„†…„………†‡……†††…†††…†‡‡„ƒ„††‡††ˆ‰Š„‚……‚wRCNXOE_[JIN\IIbZHJoSDw‡€ƒƒ„„…†‡……………„…†…„„ƒƒ„†…„„„„„„„„„„„ƒ„„…††…………………„…„„„ƒƒ‚‚‚ƒƒƒƒ‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒ„…„ƒ„„„„„………„„„„ƒ„„„………†„…††…„„„……„ƒƒ„…„„„………††…††……†‡†……†‡†ƒƒ†…†……‡ˆŠ‰ƒ‚…{ruzzxsvzxyy{xsw{yxzsu‚ƒ‚ƒƒ„…†††…„………„„„„„ƒ„„„„ƒ„„„„„„ƒƒ„„„„…†††…„……………„„„„„‚‚ƒ‚ƒƒƒ‚‚‚‚‚‚‚‚ƒƒƒƒƒ„…„„ƒ„„„„„……„ƒ„ƒƒƒƒ„„„„„„…††………„„…„ƒ„„„„„…………†††…††………†††……††ƒ„…………†‡‡‰ˆƒ‚€„„ƒ‚‚ƒ‚‚‚ƒƒƒ„ƒƒƒ‚‚ƒƒƒƒ‚ƒ„………………„„„……„„„…„„„…„„ƒƒ„„„„„ƒ„…………†……………†…„„„„„„ƒ‚‚ƒƒƒƒ‚€€€€€‚‚ƒƒƒ„„„„ƒ‚„„ƒ„…„„„ƒƒƒƒƒ„„„„„…†……†…ƒ„…„„„„„„„………„…‡‡……†……††…††……‡†ƒ…†……†‡‡ˆŠˆƒƒ‚ƒƒ‚‚‚‚ƒƒƒƒ„ƒƒƒƒƒƒ‚ƒƒ„†…„††…„„ƒƒ„…ƒƒ„„…„„ƒ„„ƒ„ƒ„„…„„„…†††„„………………„ƒ„„„„ƒƒƒƒƒ‚‚€€€€€€€€€€‚ƒƒ„ƒ„„ƒ„„ƒƒ„ƒ„„‚‚ƒƒ„„„„„„„………††…„„„„„„„„„„„†„……††………„…†…††……‡ˆ…„……„†‡‡ˆ‰Š‡‚‚‚‚‚‚‚ƒ‚„ƒƒƒ‚‚ƒ‚ƒ„…………†……†…„ƒƒƒƒƒ„„„„„„ƒƒ…„„„„„…………†……„………………„„„ƒ„„ƒƒƒƒƒ‚‚‚€€€€€€€€‚ƒ„ƒƒ„ƒƒƒƒƒƒƒ„…„ƒƒƒƒ„…„……„…†…†††…„„„„„„„„„……„„……††…„„††…†‡†……†‡…ƒ„…†‡‡‡‡‰‰€€‚‚‚‚‚‚‚‚‚ƒƒƒ‚‚ƒƒ„………………††……„ƒƒƒƒƒ„„„……„ƒ„„„„ƒ„„„…††††„………………ƒ„„„„ƒƒ„ƒƒƒƒ‚€€€€€€€€€€€€€€€€€ƒƒƒ„„ƒƒ„ƒƒ„„„…„„ƒ„……„ƒ…………………††…„„ƒƒ„„„„………†……†…†„„††…†‡†„…„†‡ƒ‚„…††‡‡‡‡€€‚‚‚‚ƒƒƒ‚ƒƒƒƒ„……†…„„………††…„„ƒƒƒƒƒ„…„ƒ„„„„„„„„„………………„………………„„…„„„ƒƒ„ƒ‚ƒ‚€€€€€€€€€€€€€€€€€€€ƒƒ„…ƒƒ„„„ƒƒ„„„…ƒ„†„ƒƒ„……„„„…†…†„…„„…„„„„ƒ„†…††…††„…‡†††…††„„‡†‚ƒ……†‡ˆ‡†€€‚‚‚‚‚ƒƒ„„„„…††………………„„…††…ƒƒƒƒƒ„„………„„„„……„„…‡‡………………………„„…„„„„„ƒƒƒƒƒ‚‚€€€€€€€€€€€€€€€€€‚„„„ƒ„„„„ƒƒ„„……„…„ƒ„„„……………††‡‡…„……„ƒ„„ƒ„††…………‡†„†††‡†††„ƒ…ˆ†‚„†…‡‡‡†€‚‚‚ƒ„„…………‡†„…††„…†„„…††…„ƒƒƒƒƒ„…†…„……„……„††††……………„ƒƒ„„„„„„„ƒƒƒ„„‚‚€€€€€€€€€€€€€€€€€„„ƒƒ„„ƒƒ„ƒ„„„…„„„„„„………„…†††‡‡†………„ƒ„„„„†………………††……†‡†………„„†ˆ…ƒ„…††‡‡€‚‚‚‚ƒ…………………………††………ƒ††††„ƒƒƒ‚„„ƒ„„„„……„††……†………………„„„ƒ„ƒ„„ƒƒ„ƒ‚ƒ„ƒ‚€€€€€€€€€€€€€€€€€€€‚ƒ„…„„„ƒ„„„„„…„„„ƒƒƒ„„„„…†††…†‡†……„„„„„……………„†††‡†…†‡‡…………„…†ˆ†ƒ„†††…€€‚ƒƒ„…………†…„„………†…„…„„††……„ƒƒƒƒ„„„„……†……†‡…………………„„…„„„ƒƒ„„„ƒ„ƒƒƒƒƒ€€€€€€€€€€€€€€€€€€‚„„„…„„„…„ƒ„„……ƒƒƒƒƒ„„„†……†‡‡‡‡…„…„…„„………„…†††††……†††……†…„ƒ†‰…‚…‡‡…€‚…„„……………†………†…„„„„…„…†††„ƒƒ‚ƒƒƒ„„„……††††…„………„„ƒƒ„…„ƒ„ƒƒ„ƒ„„„ƒƒƒ‚€€€€€€€€€€€€€€€ƒ„„„„„„„„ƒƒƒ……„ƒƒƒƒ„„………††‡††‡†……„„…„„…„„………††††…………††…„„„ƒ†ˆ„„‡‡…€‚…„„„„……†††…„………„„„…„„†††…„ƒƒ‚ƒ„„„…†††††………………„„„„„„ƒƒ„„ƒƒ„„„ƒƒ‚‚‚€€€€€€€€€€€€€€€€€€€€€€‚„„„„„„„„„„„„……„ƒ„„„„……„…†††‡‡††…„„……††„„…………†††††……††…„„…„„‡ˆ……‡…€‚…„ƒ„„ƒ„†……„ƒ„……„„„„„…††…„„„ƒƒ„„„…†‡…„……………„ƒ„„„ƒ„ƒ„„ƒƒ„…„„„ƒƒƒ‚€€€€€€€€€€€€€€€€€€€‚„„„„…„ƒ„„…„„……„„„„ƒ„…††††††††‡†…„„„†…„„„…„…††…†‡†…†††„………ƒ„ˆ‡„…†€ƒƒƒ„…ƒ„………„„…„„„„„„„…………„ƒƒƒ„„………†……………„„ƒ‚‚ƒ„ƒƒƒ…„ƒ„„ƒƒƒƒƒ‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚„„„„„„„„…„ƒ„„„„†„ƒ„……„…††…††‡††…„„„…„„…„„………††…†……‡†…………„„…ˆ‡…„€ƒƒ„…„…„ƒ„„„…„„„…„„„……„ƒƒ„ƒ„………„……………„ƒ‚‚ƒƒƒƒƒ‚‚ƒƒ„ƒƒƒƒƒƒƒƒƒƒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒ„„„„„„„ƒ„„ƒ„„„……„„„„„…††††…††††…………„„„„„„……………††„…††…………„„†‰‡ƒ€€ƒ„……„…„„„ƒ„…„ƒ„…„„………„ƒ………††„„ƒ………„ƒ‚ƒ„„ƒ„ƒ‚ƒƒƒ‚ƒƒƒ„‚ƒƒ„ƒ‚ƒ‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚ƒ„„„„…„„„ƒƒ„„„…„…„„„……††††††‡‡†………„„„„„„„……………†…„…††………„„…†ˆ‡€€‚ƒ„…†…ƒ„„„„„…ƒƒ„„„„………„…†††……„………„ƒƒ‚ƒ„„„„ƒƒƒƒƒ‚‚ƒƒƒƒƒƒƒƒƒƒ€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒ„„„„„…ƒƒ„„„………„„„…„„…††††…†‡‡†††…„…„ƒ„ƒ„………………†………………†…„…†‡‡€€ƒ„„……„ƒ„„„„„…„„„„„……†‡†††…„……„…„ƒ‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒ‚ƒ„ƒƒƒƒƒ‚ƒ‚€€€€€€€€€€€€€€€€€€€€€€€€€€€‚ƒƒ„ƒ„„ƒƒƒ„„„„„„„…„„„†‡‡†††…†††††……„…„„„„……………†…†……††……………††…€ƒ………„ƒƒƒ„ƒ„„„„ƒƒƒ„…†‡†……………†…„ƒƒ„ƒƒƒƒ„„„ƒƒ„ƒƒ„„„ƒ„„ƒ‚ƒƒƒƒ‚€€€€€€€€€€€€€€€€€€€€€€€ƒ„„„„„„„„„„„ƒƒ„……„„„…†††††…†‡„…‡‡……„ƒ…„ƒ…„„………†…††„…†…………††„ƒ………„ƒ„„„„„„„„„…„…‡†…„……………„ƒ‚ƒ„ƒƒƒƒ„„„ƒƒ„ƒƒ„„„ƒƒƒƒƒƒ‚ƒƒ€€€€€€€€€€€€€€€€€€€€€€€‚„„„„„„„„„„„„„ƒ„…„„…………†††…††„„†††…„„…„„…„ƒ„†……†…†…„††……†††„ƒ…†…ƒƒ„„„„„„„„…‡†…†………………ƒ‚‚„„ƒƒ„‚‚ƒƒƒƒƒƒƒƒƒƒ„ƒƒƒƒƒƒ‚‚‚ƒ‚€€€€€€€€€€€€€€€€€€€€€€‚…„ƒ„„…„„„„„„ƒ„…„„…„……………†‡†……†‡‡†……„„…„„ƒ„……„………†…………†††…„‚„†„‚ƒƒƒƒ„„„„††…„„„………„ƒ‚‚‚ƒƒƒ‚‚ƒ‚‚‚‚‚ƒƒƒƒƒƒƒ„ƒƒƒƒ‚ƒƒ‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€„„ƒ„„„„„ƒ„„„„„„„…………„…„„…††……†‡†††…„„„„„„ƒ‚„ƒ„………†…„††„†…ƒ€ƒ„…ƒƒ„ƒƒƒ„……†„„„„„…„„ƒ‚‚ƒ‚ƒƒ‚‚ƒ‚‚‚‚ƒƒ‚ƒƒƒƒƒ‚‚ƒƒƒƒƒ‚ƒƒ‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚ƒƒ„„„„„„„„ƒ„ƒƒƒ„………„……„……†„„††††‡†…„…„ƒ„ƒƒƒƒƒ„„……†…………††„€„†„‚ƒ„ƒ„…††„„„…†…„„ƒ‚‚ƒƒ‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒ‚‚ƒƒƒƒƒƒƒƒƒƒ‚ƒ‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚ƒ„„ƒ„„„„ƒƒƒƒƒ„„„…………„„„……„„…†††…††……„„„„ƒƒƒƒ„ƒ„……†……†††„€†…ƒ‚‚…†……„……„„…„‚‚‚ƒ‚‚‚‚‚ƒ‚‚‚‚‚ƒ‚ƒƒƒƒƒƒƒ‚‚ƒƒ‚ƒ‚‚ƒƒ‚ƒ‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚ƒ„„„„„„„ƒƒƒ„…„„„…†…„„„…„ƒ„……†‡‡‡‡†…„„„ƒƒƒƒ‚ƒƒ„„…†‡……††„……ƒ„…††…„„……„„ƒ‚‚ƒƒ‚ƒ‚‚ƒƒ‚ƒ‚‚‚‚‚ƒƒ‚ƒƒƒƒƒƒƒƒƒƒƒ‚‚‚‚‚‚ƒƒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒƒ…„„„„…„„„„ƒ……„…„………„ƒ„…ƒ„…††‡‡ˆ‡‡‡†…„„„ƒƒƒ‚‚„ƒ…††‡………„€‚…†…†…„…………„ƒ‚‚‚‚‚ƒ„ƒ‚ƒƒƒ‚ƒƒƒ‚‚ƒ„„ƒƒƒ„‚ƒƒƒƒƒƒ‚‚‚‚‚ƒƒƒ„‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒ„„„„„„……„„ƒƒ„„…„„„††„ƒ„…„„…††‡‡‡‡‡ˆ‡†………„ƒƒ‚‚„ƒ„††‡‡………€††…………………„‚‚‚‚ƒƒƒ‚‚ƒƒƒƒƒ‚‚‚‚ƒ„ƒ„ƒƒ„‚ƒƒƒƒƒƒƒƒƒƒƒ„„…ƒ€€€€€‚€€€€€€€€€€€€€€€€€€€€€€€€€€‚„„„„„„……„„…„„„„…„„…††„„„„„…††‡‡‡‡ˆˆˆ‡…„„„ƒƒ‚‚„„„………‡‡……€‚†…„………„‚‚‚‚‚‚ƒƒƒƒ‚‚‚ƒƒƒƒƒƒ‚‚‚‚ƒƒƒƒ‚ƒƒƒƒƒƒƒ‚ƒ„„………„„„ƒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚„ƒ„„„„……„……„„„ƒ…„„„„„…„ƒ„……††‡††‡ˆ‡†……„ƒƒ„ƒ‚ƒƒƒ„……†‡†„€†„„„ƒ‚ƒ‚‚‚‚ƒƒƒƒƒƒ‚‚‚ƒƒƒ„ƒ‚‚‚ƒ‚‚ƒƒ‚ƒ„ƒƒƒ„ƒƒƒ„………„…„…„‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚ƒ„„„„„„„„„…„…„ƒ„…ƒ‚ƒ„„…„ƒ„……††…†††ˆ†…†…„„„„ƒƒƒ„„…………††ƒ†…‚‚‚‚„ƒ‚ƒƒƒ‚‚ƒ‚ƒƒ‚ƒƒƒƒƒ‚ƒƒƒ‚ƒ„ƒƒƒ„ƒƒƒƒ„………„„…„„…„ƒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚ƒ„„„„„„„„„„„ƒƒƒ„…ƒƒ„……„„„ƒ…†††††‡ˆ……‡‡…„„„ƒƒƒ„„„…†††…ƒ„‚‚‚‚ƒƒƒƒ‚‚‚‚ƒƒƒƒ‚‚ƒƒƒ‚‚‚‚‚ƒ„‚ƒƒƒƒƒƒ„„ƒ„……„„„…„„„„ƒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒƒ„„„„……„„……„ƒ„„ƒ„…„„„………„„………†‡†‡‡……‡†…„…„„„„ƒƒ„……††„€€‚‚‚‚‚‚‚ƒƒ‚‚‚‚ƒƒƒ‚‚ƒƒƒ‚‚‚‚‚‚‚ƒ‚‚ƒƒƒƒ„…………„„…„„…„ƒƒ…‚€€€€€€€€€€€€€€€€€€€€€€€€€„„ƒ„……„„……………„„„ƒ„…„„„………„……„…‡‡††…„††††…„„„„„„„„………„€€‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚ƒƒ‚‚‚ƒƒƒƒ‚ƒƒ‚‚„………………………„„„……„„„ƒ‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€„„ƒ……„„…„„„……„…„ƒ„„†…„„………‡†ƒ„††……„„…‡†‡‡†„„„„„„„„………‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚ƒƒƒƒƒ‚ƒƒ„……„ƒ„…„……ƒƒƒ„„„„‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ƒ„„„…„„„„„„„ƒ…„„ƒƒ„„…„„„……††„„††„„„„…†††††…„„„„„ƒƒ…„„€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚‚‚‚ƒ‚‚ƒ……„„„……„ƒ„„„„„ƒ„ƒ‚‚‚~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚ƒ„„„ƒ„„ƒƒ„ƒƒ„…„ƒ„„ƒ„„ƒƒ„„„…„ƒ…………„ƒ„†††††……„„„„ƒƒ„„„€‚‚‚‚‚‚‚‚‚‚ƒ‚ƒƒ‚‚ƒ‚‚ƒƒƒ…………ƒ„…„„„ƒ„„„…ƒ‚‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€‚€€€€€€€€€€€€€€€€ƒ„ƒ„„„„„ƒ„„„„„„ƒ„ƒƒƒƒ„„ƒ„„………„………ƒƒ„††…††††„ƒ…„ƒƒ„„ƒ€‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ‚‚ƒƒ‚ƒ‚ƒ„†……„„„„„„„„„„…„ƒ‚ƒ‚‚‚‚‚€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€ƒ„„„„„…„„…ƒ„„……ƒ„ƒƒ‚„„ƒ„ƒ„………††……„„„………‡†††…„…„„„ƒƒƒ€‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚ƒƒƒƒ„„…†………„…„„„„„„„‚ƒ‚‚‚‚ƒ‚‚ƒ‚‚‚€€€€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€ƒ„ƒƒƒ„„„„„„„……„„ƒƒƒƒƒƒ„„„„„„††…„…„„…†††‡‡†……„„…„ƒƒ‚€‚‚‚‚‚‚‚ƒƒ‚‚‚ƒ„„……………………„…„„……„„ƒ‚‚‚‚ƒ‚‚ƒ‚ƒ‚‚‚‚€€€€€€‚‚‚ƒƒ„„„„…………†††††††‡†‡†‡‡†††††‡‡‡ˆ‡‡ˆ‡‡ˆˆˆˆˆ‡†††……„„„ƒƒƒ‚ƒƒ„„„„„………„ƒ„ƒƒƒƒ„„„ƒ„„……„„„ƒƒ…††…†††………„„…„„ƒ€‚‚‚‚‚‚‚‚ƒƒ‚‚„…†…………„„………„„„„„„„‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚€€€€€€€€€€ƒ„„†‡ˆˆˆ‰‰‰‰‰ŠŠ‹‹‹ŒŒŒŒ‹‹Š‹‹‹‹ŒŒŒŒ‹‹ŒŒŒŒŒ‹ŒŒŠŠŠŠŠ‰ˆˆ‡ˆˆ†……„„„…„„„…„„„„„ƒƒƒ„„„ƒ„„„„„„ƒƒ…††††††……‡†…„„…„€‚‚‚‚‚‚ƒ‚ƒ„„ƒ„…†…„………„„„†…„…„ƒ‚‚‚‚ƒ‚‚‚ƒ‚‚‚‚ƒƒ‚‚‚€€€€€ƒ„†‡ˆ‰Š‹‹Š‹‹‹‹ŽŽŽŒŠŠŠ‹ŒŽ‘‘‘‘ŽŽ‹‹Š‹Š‰ˆ‰‰ˆ‰‰ˆˆ‡…„…„„…………„„ƒƒ„„„„„„„„„„„„ƒ„……†††††……†††………„€‚‚‚‚ƒ‚ƒƒƒ„………„„……………„„…„…„ƒ‚ƒ„ƒ‚‚‚ƒ‚‚‚‚ƒ‚‚‚‚‚ƒƒ‚ƒ‚€€€€€ƒ„…‡‰‹‹‰Š‹‹ŒŒ‘‘‘‘ŽŒŒ‹‹‹Š‰‰ˆˆˆˆŠŠ‰‹Ž‘’’’’‘‘‘ŽŒ‹Œ‹ŠŠˆ‰Š‰ˆ‰‰‰‰ˆ…„„„…………„„ƒ„„„…„ƒ„„„„„ƒ„„„…†……†††……††‡†……„€ƒ‚‚‚ƒ„„…†…„„„………„„„„„„ƒ‚‚‚ƒ‚‚‚ƒ‚‚‚‚‚ƒ‚‚ƒ„ƒ‚ƒ‚€€€€€€„†‡‰Š‰‹‹‹ŒŽ‘‘’’‘‘ŽŒŠ‹‹ŠŠŠŠŠ‰‰‰‰Š‰ŠŠˆ‰ˆˆŠ‹ŒŽ‘’‘’’‘‘Ž‹ŒŒ‹Š‰Š‰‰‰‰‰‰‰ˆ†„„„„……„„„ƒ„„ƒ…„‚ƒ……ƒ„„ƒ„„………†…………„…†‡‡††„ƒƒƒƒ…†………„„…„……„„„ƒƒƒ‚‚‚‚‚‚‚ƒ‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚€€€€€€ƒ†‡ˆˆ‰ŠŠŒŒŽ‘‘‘‘‘‘‘ŒŒŒ‹ŠŒŒŽŽŽŽŒŠ‰Š‹ŒŒŒŒŽ‘‘’‘’’Ž‹‹Œ‹ŠŠŠ‰ˆ‰‰‰ˆ‰ˆ…„…„„„…„„„ƒ„„„„„ƒƒ„„„„„„„„„……†………†…„…††††…€ƒ„ƒ…„„„„………„„„…„ƒƒ‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚€‚„‡‰‰Š‹ŒŒŽ‘‘ŒŽ’’’’‘’“’““’’‘Ž‘’’‘ŽŽ‘‘‘‘‹‹‹‰‰ŠŠ‰‰‰ˆˆˆˆˆ…„…„„ƒ„„ƒ„ƒ„„„„ƒƒƒƒ‚ƒ…ƒƒ„„„……††…„……„†‡‡…†…€„„ƒ„ƒƒ„……„…„„„ƒƒ‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚€„‡‡ˆŠŒ‘‘‘‘‘ŽŽŽŽŽŽ‘’’’’“’’“““”“”•””””“““’’“”””’‘’’‘ŽŒŠˆ‰Š‰‰‰‰ˆˆ‰‡„„…„ƒ„„„ƒ„„ƒ„„„ƒƒ„ƒ‚ƒ†…„„„„…†††…ƒ„„„…‡‡†‡…€‚„‚ƒ„„„„„„„„„ƒ‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚ƒƒ‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚€ƒ…ˆˆ‰Œ‘““’’’‘‘’‘Ž‘‘’’““’’““””””••”““”””“’’“””“’“‘‘‘ŽŠ‡‰ŠŠ‰‰‰ˆˆ‰…„„…„ƒƒ„„„„„„„„„‚ƒ„„ƒ„„…„ƒ„„„…‡†„„„ƒ„…†††‡…€‚„„„„„„ƒƒƒ‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†ˆŠ‹Œ‘’““’‘ŽŽ‘‘‘‘‘’’’’’’“’“’“”””””””“““’’’“’’’’‘’‘Ž‘Š†ˆŠŠ‰‰‰ˆˆ†ƒ„…„…„ƒƒ„„ƒ…ƒƒ…„‚ƒƒƒƒƒ„„„„„„„„…†………ƒ„„„†††…€‚…„„„„„„‚‚‚‚‚‚ƒƒ‚‚ƒ‚‚‚‚‚‚ƒ‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚ƒ„„…‡‰‹ŽŒ’’’’Ž‘‘‘‘‘‘’’’’’’““““”•“’’““’’’’’’‘‘‘‘ŽŽŒ‡‡Š‹ŠŠ‰‰ˆ…ƒ„„„„„„ƒ„„„…„„„„ƒ‚‚ƒƒƒ„„„ƒ„…„„„………„ƒ„„„…………€‚„„ƒƒ‚‚ƒƒ‚‚‚‚‚‚‚‚ƒ‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚ƒ‚‚„„…†‰ŒŽŽ’’‘‘‘ŽŒ‘’’““’““““““““’’’’’’’‘’’‘‘ŽŽ‘ŒˆˆŠ‹Š‰ŠŠ‡ƒƒƒƒ„ƒ„„ƒ……„„„„ƒ„ƒƒ‚ƒ„„„„ƒƒ…„ƒƒƒ………„„„„……„‡†‚‚‚€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„„†‰‹ŽŒŽ‘ŽŒŽŽŽŽŽŽ‘‘’’’“’““““’’’‘‘‘’’‘‘’‘ŽŒˆ‰‰ŠŠŠŠ‰…„„ƒ„„„„„„……„„„„ƒƒƒƒƒƒ„„„„ƒƒƒ„„ƒ„……„„ƒƒƒƒ„„†…€€€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒƒ‚‚‚‚‚ƒ‚‚ƒƒ„„…ˆ‹ŠŒ‘ŽŒŒŽ‹ŒŽŽŽŒŒ‹ŒŒŽŽ‘‘’’“’’“’’“’‘‘‘‘ŽŽŽŽ‘‹ˆ‰ŠŠ‰Š‰†ƒƒ„ƒƒƒ„…„„…„„„ƒ„„ƒ„ƒƒƒ„ƒ„„„ƒ‚ƒ„ƒ„„„„…„ƒƒƒ„…„ƒ€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚ƒ‚‚‚‚‚ƒ‚‚‚ƒ‚ƒƒƒ„…‡‰‰‹‘‘Œ‹ŽŒ‹ŒŽŽŽŒŒŒ‹‹‹ŠŠ‹ŒŒŽŽŽ‘‘‘’’‘’’’’’’‘‘‘ŽŽ‹ŒŽŒ‹Ž‘Ž‹ˆŠ‹ŠŠŠˆ„ƒ„ƒƒƒ„„„„ƒ„„…„ƒƒ„„„ƒƒƒ„„ƒ„„ƒ„ƒƒ……„„„……„„„……„„€‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚ƒƒ‚‚ƒƒƒƒƒƒƒƒ‚ƒ‚‚‚ƒƒƒ„‡‰‰ˆ‹ŽŒŠŠŒŒŒŒŽŽŒŒŒŒŒ‹‹‹ŠŠ‹‹‹ŒŒŒŽ‘’‘’‘‘‘‘‘‘‘‘ŽŽ‹ŒŒ‹ŒŒŠ‹ŒŠŠŠŠŠ‰†„„„ƒ„…„ƒƒ„ƒƒ„…„„……„„„ƒ„…„„ƒ‚ƒ„‚‚„„…„……„„„„……„„€‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚ƒƒƒƒ‚ƒ‚ƒƒƒƒƒƒƒ„„„‡‰ˆ†ˆŠ‰‰ŒŒ‹‹Œ‹Š‹ŒŠŠ‹‹‹ŒŒŒŒŽŽ‘’’‘‘‘‘‘ŽŽŽŽŒŒŒ‹Š‹‹‹Š‹Š‹Š‰ŠŠ‰‡…ƒƒƒƒƒ„„ƒ„„…ƒƒ„„„„„„„„ƒ„…„„ƒƒ„ƒƒ„„„…„„„……………„…„€€‚‚ƒ‚ƒ‚‚‚‚‚ƒ‚‚ƒƒƒ‚‚‚‚‚ƒƒ„ƒ‚ƒ‚‚‚‚ƒ„„…ˆ‰ˆ‡ˆ‰Ž‰ŠŒ‹Œ‹‹Œ‹Œ‹‹‹‹‹Œ‹Œ‹Œ‘‘‘‘’‘ŽŒŽ‹‹ŒŒŒŒŒ‹‰‹ŒŠ‰‰ˆ…ƒ„ƒƒƒƒƒƒƒ„„ƒ„ƒƒ„„„„„„„„ƒ„„„ƒ„„ƒƒ„„„„„„„„„…………„„„€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚ƒƒ‚‚‚‚‚‚‚ƒ„‚‚ƒ‚‚‚ƒƒ„…†‰‰ˆ‡‡‰ŽŽŒŠ‹ŒŒ‹ŒŒŒŒŒ‹‹ŒŒŒ‹ŒŒŽ‘‘‘‘ŒŒŒŒŒŒŒ‹ŠŒŽŽ‹‰ˆ‡„ƒ„ƒ„ƒƒ„ƒƒƒ„„„ƒƒ„ƒƒ„„„„…„ƒ„„…„„„„„„ƒ„„„„…„„„…„„…„„€€€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚ƒ‚‚ƒƒƒ‚ƒ„„……†‰‰‡‡‡‡ŒŽŽ‰‹ŒŒ‹‹ŒŽŽŽŽŽŽŒŒ‹‹ŒŽŽ‘‘‘Ž‹‹ŒŽŒŒ‹ŠŠŒŒ‰ˆ†„ƒ„„ƒ„„„„„ƒ‚‚ƒƒƒƒƒƒƒƒ„„……„„„„„…ƒƒ„„„ƒƒ„ƒ„„………„ƒ„……„€€€€‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚ƒƒ‚ƒƒƒƒƒ‚‚ƒ„……„„‡ˆˆ‡‡‡ˆŠŒŽ‹Š‹ŒŒŽŒ‹‹‹ŒŽŽŽŽŽŽŒ‹‹ŒŒŽ‘ŽŒ‹‹ŽŽŽŠ‰ŠŠ‡†ƒƒ„„ƒƒ„„ƒ„„‚‚ƒ‚‚ƒ„‚‚„„„„„„„…„„„„„ƒƒ„ƒƒƒ„ƒ„ƒ„„„„„„…„„€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚ƒ‚‚ƒ„ƒƒƒƒ„…„„„ƒ„‡ˆ‡ˆˆˆˆŠŒŒ‰ŠŠŠŒŒ‹Š‹‹ŒŽŽŽŽŽŽŒŒ‹ŒŽŽŽŽ‹ŒŽŽŽŽ‹‰‰‡„„ƒƒ„„ƒ‚ƒƒƒ„ƒƒƒƒ‚ƒƒƒƒ‚ƒƒ„„ƒ„„„„ƒ„„„ƒƒƒ„ƒƒ„„ƒ„ƒƒ„…„„…„„€€‚€‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒ„„„„ƒ„„ƒƒ‚ƒƒ…ˆˆˆˆˆ‡ŠŒŒ‹‰‰‹‹‹Œ‹ŠŠ‹‹ŒŽŽŒ‹‹ŒŽŽŽ‹Šˆ…ƒƒƒ„„„ƒ‚‚ƒ„„„ƒƒƒ‚‚ƒ‚ƒƒƒƒƒƒƒ„„„„ƒƒ„„„ƒƒ„ƒ‚„…ƒ„„ƒƒ……„„„„‚ƒƒƒ‚‚‚‚‚‚‚ƒƒ‚‚ƒƒ„ƒ……„ƒƒƒ‚ƒƒƒƒƒ„„„†ˆˆˆˆˆ‰‹Œ‹‰‰Š‹‹‹‹Š‹ŒŒŽŽŽŽŽŽŽŒŒŽŽŒŠˆ…ƒƒƒ„„ƒƒƒƒƒƒ…„ƒƒƒƒƒƒ‚‚ƒ„„ƒƒ„ƒ„„ƒ„ƒƒ„„ƒƒƒ„ƒ„„ƒ„ƒƒƒ„……ƒ„„€€€‚‚‚‚‚‚‚‚‚‚ƒ‚‚ƒƒ‚ƒ„„…„„ƒƒƒ‚‚ƒƒ„„„„„„„„…†‡‡ˆ‡‰‹‹‰‰Š‹‹‹‹‰‹ŒŽŽŽŒŒŽ‘ŽŽŽŽŽ‘‘Ž‹‡…ƒ„„„ƒƒ„ƒƒƒƒ„ƒ‚ƒƒƒƒƒƒƒƒƒ„ƒƒƒ„ƒƒƒ„ƒƒ„ƒ„ƒƒ„ƒ„„ƒƒ„ƒƒ„„…„„…€€‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒƒƒ„„……„ƒƒƒ‚ƒ„ƒƒ„„…„„……„ƒ„„…†‡‡‡†ˆ‰‰‰Š‹‹Œ‹‰‹ŒŒŽŽ‘‘Ž‹‹ŒŽ‘‘ŒŽŽŽŽ‘ˆ…„„„ƒƒ„„ƒƒ„„ƒ„„„ƒƒ„ƒƒƒƒ‚ƒ„ƒƒƒƒ„…„ƒƒƒƒ„ƒƒƒ‚ƒ„ƒ„ƒƒƒ„ƒ„„„„€‚‚‚‚‚ƒ‚‚‚ƒ„„„„„ƒƒ„ƒƒ‚ƒƒƒƒƒ„ƒƒ„„ƒ„………„„„„„…†††‡‡ˆˆŠŠŠŠ‰ŠŒŒ‘ŽŽ‘’‘‘‘ŽŽŠ‹Ž‘’‘ŽŒ‹‹ŽŽŒŽ‘Œˆ………ƒƒƒƒ„ƒƒƒƒƒƒ„ƒ„„…„‚ƒƒ‚‚„„ƒ‚ƒ„ƒ„„„„ƒ„ƒƒ„ƒƒƒ‚„ƒ‚‚ƒ‚ƒƒ„„€‚‚‚‚‚ƒ‚ƒƒ„…„ƒƒ‚‚ƒ„‚‚ƒ„„ƒƒ„„‚‚ƒ„„„ƒƒ„„„„„„„……†‡†‡ˆŠ‰‰Š‰ŠŒŽŽŽŽŽŽŽŒ‹‘’’‘‹‹ŒŒ‹ŒŽŒŒ‹‹Ž‘‘‹‡„…„ƒƒ„ƒ„ƒ‚ƒƒ„ƒƒƒƒ„ƒ„ƒ„ƒƒƒ‚ƒ„ƒƒƒ‚„„ƒ„ƒ„„„„ƒƒƒ‚ƒƒƒƒ„ƒƒƒƒ„€‚‚ƒ‚‚‚‚ƒ„„„„ƒ„ƒ‚‚ƒƒ‚‚„„„„ƒ„ƒ„„„ƒ„„„…„ƒƒƒƒ„„„„„„…†ˆˆ‡ˆ‰‰‰ŠŠ‹ŒŽŽŽ‹ŒŒ‰‰ŠŒŒŒŽŽŒ‹‘’’’ŒŒŒŒ‹‹‹Šˆˆ‰Š‹‹ŠŒ‹‡………„ƒ„„ƒƒƒ‚ƒ„„ƒ„ƒ„ƒƒ„„ƒ„ƒ‚ƒƒ„„ƒƒ„„„ƒƒƒ„„„ƒƒƒ„„‚ƒ„„„„ƒƒƒ€€‚ƒƒ‚ƒ„„„„„ƒƒƒƒƒƒ„„„„„ƒ„„„„„„„…„„ƒƒ„……„„„„…„…„„„†‡‡ˆ‡ˆ‰‰ŠŠŠ‹ŒŽŽŽŽŒŠŠ‰‰‰ŠŒŽŽ‘’‘’“ŒŒŒŒŒŒŒŠŠ‰‡ˆŠ‹‹ŒŽŠ†„…„„„…„ƒ„„„„ƒ„„„„„ƒƒƒƒƒ„ƒ‚ƒ„„„ƒ„ƒ„„„„„„„„ƒƒƒƒ„ƒ‚ƒ„ƒ„„ƒƒ€€‚‚‚‚‚„„„„„„ƒ‚‚‚ƒ„ƒƒ„„…„„„…„ƒ……„„„„ƒ„„„„„„……„„„ƒ„………ˆ‰ˆ‡ˆˆ‰‰ŠŠŠ‹ŒŽŽŽŽŒŒŒŽŽ‘‘‘’’“’‘ŽŒŒŽŽŽŒ‹Œ‹ŽŒ‰†„„„„„„„ƒ…„ƒ„ƒƒ„„„„„„‚ƒƒƒƒƒƒ„ƒ„ƒ„ƒƒ„„ƒƒ„„ƒƒ‚ƒ„ƒƒƒƒ„ƒƒƒ„ƒ€€‚ƒ„„…„ƒ„„ƒƒƒƒƒ„…ƒƒƒƒƒ„ƒƒ„„ƒƒ„„„„„„„„„„ƒƒ„……„„…„ƒƒ……ˆ‹Š‡‡‰ˆ‰ŠŠ‰ŠŒŽŽŒŒŽŽŽŽŽŽ’‘‘’“’‘ŒŒŽŽŒ‰ŠŒ‹‰†…„…„„„ƒƒ„„„ƒƒƒ„„ƒƒƒ„„ƒƒƒ‚ƒƒƒƒ„ƒ‚ƒ„„ƒ‚„„„ƒƒƒƒ„ƒƒ‚ƒƒƒƒ„„‚€€ƒ„„ƒ‚ƒƒ‚ƒƒ„„„„„„„„ƒƒƒƒƒƒ„…„„„„ƒƒ„ƒ„„„„„ƒ„„„„„……„„„…†ŒŽ‹‰ŠŠ‰ŠŠ‹‹ŒŽŒŒŽŽŽŽŽŽŽŽ‘“’‘’“‘‘ŒŽŽŽ‹Š‰‹‹Š‰…„…„„„„ƒƒ„„„ƒ„„ƒƒƒƒ„ƒƒ„„ƒƒƒƒƒƒ„ƒƒƒ„„„„ƒ‚ƒ„„„„„ƒ‚ƒƒƒƒƒ…„‚‚‚‚ƒ‚‚‚ƒ„„„…„ƒ‚‚‚ƒ„„„ƒƒ„„„„„„„„„„„ƒ„„„„„…„ƒ…„„…„ƒ„„Œ”’ŒŠŠ‰‰‹‹‹ŒŒŒŒŽŽ‘’‘‘‘‘““’’ŽŒŽŽŒŽŽŽŒ‹‹‹Š‰‡…„„„„ƒƒƒ„„ƒƒ„„„ƒ„„ƒ„ƒ„„ƒƒƒ„ƒƒ„„„ƒƒƒƒ„ƒƒƒƒ„„„ƒƒƒƒƒƒƒƒƒƒƒ€€‚‚ƒƒƒƒ„„ƒ‚‚€‚‚‚‚ƒ…„ƒƒ„„ƒƒ„„„„„„„„„„„„„„ƒƒ„„ƒ„„„ƒ„™”‘‹‰ˆŠ‹Œ‹ŒŽŽŽŽŽ‘’‘‘‘‘‘’““’‘ŽŒŒŒŒŽŒ‹‹Š‰ˆ†„……„„„„ƒ„ƒƒ„…ƒƒƒƒƒƒƒ„ƒ„ƒƒƒƒƒ„„„ƒ‚ƒ‚ƒ„ƒƒƒ„…„ƒƒƒƒƒ‚ƒƒ„ƒ‚€ƒƒƒƒ‚‚‚€‚ƒ‚‚ƒƒƒ‚ƒ‚‚ƒ„ƒ„„ƒ„„…ƒƒ„„ƒ„„ƒƒ……„ƒ„„†“™“‘‹‰ˆŠ‹ŒŒŒŽŽŽŽ‘‘‘‘‘’“”““’ŽŽŽŽŽŒŽŒ‹ŠŠ‡…„………„„ƒƒƒƒ„„„ƒ„ƒ‚ƒƒ„ƒƒ„ƒƒƒƒƒƒ„…ƒ‚ƒƒƒ„ƒ‚ƒ„„„„„ƒƒ‚ƒ‚‚„ƒ‚€‚ƒ‚‚€€€€‚‚‚ƒ‚‚ƒ„ƒ‚‚ƒ‚ƒ„ƒ„„„…„„„„„ƒ„„„„ƒ„……„„„‡“™•ŽŽŒ‰‰‹ŒŒŒŽ‘‘‘‘‘‘‘‘‘‘‘‘‘’’“••–•“ŽŽŽŽŽŽŽŽŒŠŠ‡„ƒ„…„„…„ƒ„„„„„„„„ƒƒƒ„„ƒ„„ƒƒƒƒƒ„„ƒ‚ƒƒ‚……ƒƒ„ƒƒ„…„„ƒƒƒƒƒƒƒ€€€€€€‚‚‚ƒƒƒ„„…„‚ƒƒ‚‚ƒ„„„„„………ƒ„…„……„„„……„„„†“™•ŽŽ‰‰Œ‹‹ŒŒŽ‘‘‘‘’‘‘‘‘‘‘‘’’’’‘‘‘’“•–˜˜——’ŽŽŽŽŽŒŠ‰†„ƒ‚ƒƒƒ……ƒƒ„„„„„„„ƒƒƒƒƒ„„„„„ƒƒƒƒ„ƒ‚ƒƒ‚ƒƒ„„ƒƒ„„……„„ƒƒƒƒ„ƒ€€€€€€‚‚‚ƒƒƒƒ„„„‚‚‚‚‚‚‚ƒ„ƒƒ„„…ƒ„………„ƒ……„„„„†”š”ŽŒŠŠŒ‹ŒŒ‘‘‘‘‘’’‘’“’’’’’‘’‘‘’““–™š˜—™—ŽŽŽŒ‹‹‡„„„‚‚ƒ„……ƒ„ƒ„……„„„„‚ƒ„„ƒƒ„‚ƒƒƒƒƒƒƒƒ‚‚‚‚„…ƒ‚ƒƒƒ„„ƒƒ„ƒƒƒƒ€€€€€€‚‚‚‚‚‚ƒ‚ƒƒƒƒ„‚‚‚‚‚‚‚ƒƒƒ„…ƒƒ„…„ƒ„„„„„„„…‘š”ŽŽŒŠŒ‹‹ŒŽ‘’’‘’‘’’’’’’’‘’’‘‘‘‘’“•™œš––šš”ŽŒŒ‹‡„„…„‚ƒ‚„„ƒƒƒƒ„…„„„„ƒ„„ƒƒƒƒ„„ƒƒƒ‚ƒƒ‚‚ƒƒƒ„„ƒ‚ƒ„„ƒƒƒƒ‚ƒƒ€€€€‚‚‚€‚ƒ‚‚‚‚ƒ‚ƒƒ‚ƒ…„ƒ‚‚ƒ‚€ƒƒƒƒ„„„…„„„„„„„„„„…Ž™•’‰‹ŒŒŒŽ‘‘‘‘’““““““’’’’““‘‘‘’”˜œœš˜˜š›•‘‘ŽŒŒ‹ˆ…………ƒ‚‚ƒ„„ƒƒ„…„…ƒƒƒ„„„„ƒ„„ƒƒƒ„„ƒƒƒƒ‚‚‚ƒƒƒ„……ƒƒ„„ƒƒƒ„ƒƒƒ€€€‚‚‚‚‚‚‚ƒ‚ƒ„ƒ‚„„„ƒ‚ƒ‚‚‚‚ƒ„„„…„„„„„„…„„‹˜•“•މŒŒŒŒ‘‘’“““”“‘““’“’’‘‘’’“—›œš™š›–‘Ž‘’‘ŽŒ‹ˆ…††……„ƒ‚ƒ„„„„„……„ƒ‚„„ƒƒ„ƒƒƒ‚ƒƒƒƒƒƒƒ‚ƒƒƒƒ‚‚„…„„ƒƒƒƒƒƒƒ„„€€‚‚‚‚‚‚‚‚‚‚ƒƒƒ„„„„ƒ…†ƒ€‚‚‚‚ƒ„„……„…„…„„„…„‰••‘”•މ‹‹‹‹Ž‘“’“““”““““’“’‘‘“•””™›œž›ššš—’’’‘‘‘ŽŒ‹‹ˆ…††……†…„‚‚„„„„…„„„„ƒƒƒƒ„„ƒƒ„„ƒƒƒ„ƒƒƒƒƒƒƒ‚‚‚ƒ„…„ƒ„…ƒƒ„„ƒ€€‚€‚ƒ‚‚ƒƒ„…„……„„†„ƒƒƒ‚‚‚„„ƒ…………„„…„‡‘”‘“•’‹‰ŠŠŒŽ‘‘’’’””““””“’“’‘“”•–—™™›œœ›šš™–’‘““’‘‘‘ŽŒ‹‰…………„………„ƒƒƒ„„„…„„„„ƒƒƒƒ„ƒ„„„‚ƒƒ„„‚ƒ‚‚ƒƒƒ‚‚ƒ„„…„ƒ„„ƒ„„ƒ€€€€‚‚‚‚‚‚ƒƒ„…„…………„„‚€‚‚ƒ„„ƒ‚ƒƒƒ„……„…„…„…”’“•‰‰‹ŒŽ‘‘’“““““’““’“‘‘’”””•———™š›œš™˜•‘‘’“’‘ŽŒ‹ˆ†………………………ƒ‚„„„…„„„ƒƒƒ„„„„„„ƒƒ„ƒ„„‚ƒƒƒƒƒƒƒƒƒƒ„„„„ƒ„„ƒƒ€‚€‚‚‚„„‚ƒƒƒƒƒƒ„„„„………„„‚‚‚‚‚„„ƒ‚‚‚‚‚„………„…†…Š‘’“•‘Ž‰‰‹Œ‘’““““““’“’’“’’“–”””••••˜™™˜˜—“’’’’‘‘ŒŠ‡……„„……††………„ƒƒ„„ƒ„…„„„„…„ƒ„„ƒ„„ƒƒ„‚ƒ„ƒƒƒ„„„„ƒƒƒƒ„…„ƒ……ƒ€€‚ƒ†„ƒƒƒƒƒƒ„„„„„„…„„„‚‚‚‚‚ƒ„‚ƒ„ƒ‚‚‚ƒ…„…†††ˆŽ“”“Š‰‹‹Ž’“’’“’’“’’““’“•–•”“’‘’’”––••”’‘‘’’‘‘Ž‹Š‡……†……†‡†…†‡†…„ƒƒƒ„………„„…„ƒ„„„„„„ƒƒƒ‚„ƒƒƒƒƒ„„ƒ‚‚ƒƒ…„„……„€€ƒ„‚‚„ƒƒƒƒƒƒƒ……ƒƒƒ„„ƒƒ‚ƒƒƒ„…„‚‚€‚„„…†††ˆ“”’Š‰‹‹ŒŽŽ’‘‘’’‘’“““’‘’”••””“’‘’’’’“’Ž’’‘’“‘ŽŒŠ‡………†……††††††‡…„„ƒ…„„………………„„„„…„‚ƒ„ƒ‚„ƒƒƒƒ„„ƒƒƒƒƒ„„…„„„€ƒƒ‚‚ƒƒƒƒƒƒƒƒƒ„„„ƒ„…„ƒƒ‚‚‚‚ƒƒ‚ƒƒƒƒƒ„„…††Š‘“’Œ‰Š‹‹ŽŽ‘‘‘‘‘’““’‘’““””•”’’‘‘‘‘Ž‘“ŽŒ‹Š†…†…………††…††††……„ƒ„„„„„„„„„„„ƒƒ„„„ƒƒƒƒ„‚ƒƒ„ƒ„„ƒƒƒƒƒ„…„„ƒ€€€€‚‚‚ƒƒƒƒƒ‚‚ƒ‚ƒƒƒƒ„„ƒ„„„ƒ€‚‚‚ƒƒ‚ƒƒƒƒ‚‚ƒƒ…†‡’ŽŽ‰‰Š‹ŽŽ‘’““’‘‘‘’““““‘‘‘‘ŒŒŽŽŽŽŒŒŠ†…………„†…††………………†…„ƒƒƒ„„……„ƒƒƒƒ„„ƒƒƒƒ„„ƒƒƒƒ„ƒƒƒƒƒƒƒ„‚ƒ…„€‚‚‚‚‚ƒ‚‚‚ƒƒƒƒƒ„„„ƒ„…„„‚‚‚‚ƒƒƒƒƒ„„ƒ„‚‚‚„……‰Ž‘’Šˆ‰ŒŽŽŽ‘‘’‘‘‘‘‘ŽŽ‹‹ŒŽŽŽŽŽŽŒ‹‰………††…††††„…†…………††„ƒ‚ƒƒ„…„ƒ„„„„……„ƒƒ„„„„„ƒ„ƒ‚ƒƒ‚ƒ„ƒƒ„„„€€€‚‚‚‚‚‚‚‚ƒƒƒ‚ƒƒƒ„„ƒ„„ƒ„„„„„ƒ‚‚‚‚‚ƒƒƒ„ƒ‚ƒƒ„…ƒƒƒ‚…†‡‹‘’‘‰‰‹ŒŒŒŽ‘‘‘‘‘‘‘ŽŽŽ‹‹ŒŒŒŒŽŽŽŒ‹ˆ††‡……………†………†††‡‡‡‡……„ƒƒ„„…„ƒ„…„„…„„„„„„ƒƒƒƒƒƒƒ‚‚ƒ„ƒ„…„ƒ€€€‚‚‚‚‚ƒƒ„ƒƒ„„„ƒƒ„„„ƒ„„ƒ„„„‚‚‚‚‚‚‚ƒƒ‚‚ƒ„„„„ƒ‚‚…†‡‰‘‰‰ŠŒŽŽŽ‘‘‘ŽŒŒŽŽŽŽŽŽŽŒŠ‹‹ŒŒŒŒŒŽŽŽŒ‹‡†††……††…………†‡……††‡†††…ƒƒ„„……„„„„„…„„„„„„ƒƒƒƒƒƒƒ‚‚ƒƒƒƒƒƒ‚€€‚‚‚‚‚‚‚„ƒ„„„„ƒƒ„„ƒƒ„„„ƒƒ„ƒ‚‚‚‚‚‚‚‚ƒƒ„„„……„††‡‡‰‘‘‘‹‰‹‹ŒŽŽŽŽŽŽŒŒŽŽŽŽŒŽŒ‹Š‹‹ŒŒ‹‹ŒŒŒŒŒ‹‹‡…†††„…†………††‡†„……†‡†††…„„ƒƒ……„…„„…„„„„„„„„ƒƒƒƒ„„ƒƒƒƒƒƒƒ‚‚‚‚‚‚ƒ‚‚‚ƒƒƒ„„ƒƒƒ„„„ƒ„„„„„„…„‚‚‚‚‚‚‚‚‚ƒƒ„………†‡ˆˆˆ’’’“ˆ‹Š‹ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŒŒŒŒŒŒ‹‹Œ‹Š‡…††………†………†‡††………†‡…†‡†……ƒƒ……„„……„„„„„…„„ƒƒ„ƒ„„ƒƒƒƒƒƒ…„ƒ€€‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒ„„„„„ƒ„„„ƒ„……‚‚‚‚‚‚ƒƒƒ………‡‡‰Š‰Ž’’“”‡Š‹‹ŽŽŽŽŽŽŽŽ‘ŽŽŽŒŒŒŒŒ‹‹‹Œ‹Š†……††„…††……†‡†…††…†‡††††††…„„„„„……„„…„„…ƒƒ„ƒ„„„„ƒƒƒ„ƒ„…„ƒ€‚‚‚‚‚‚ƒ‚‚‚ƒ„ƒƒ„„ƒ„„ƒ„„ƒƒƒ„ƒ‚‚‚‚‚‚ƒƒ„††‡ˆŠŠ‹Œ‘Œˆ‰‹‹ŒŒŽŽŽŽŽŽ‘‘’‘‘ŒŒ‹‹Œ‹ŠŒŒŠ…………†…„…†……††††††……††††‡†…†……„„ƒ……ƒ„„„„„ƒƒ„„ƒ„„ƒ„„ƒ„„„…„ƒ€ƒƒ‚‚‚‚ƒ‚‚‚‚‚‚ƒƒƒƒƒƒ„„„ƒƒƒ„ƒ„„‚€€‚‚ƒƒ„……‡ˆˆˆˆŠŒ‹‹‹ŒŒˆ‰‹Š‹ŒŽŽŽŽŽŒŽ‘““””““‘‘’’’““‘ŽŽŒ‹ŒŒ‹‹‹‰……†………„……„…††…„†‡………†††††‡†‡†…ƒ‚„…ƒƒƒƒ„„„„„ƒƒ„„ƒ„„ƒ„„ƒ„ƒ‚€ƒƒ‚‚‚‚‚‚‚‚ƒƒ‚ƒ„ƒ‚ƒ„ƒƒ„„ƒ„…„„„ƒ‚€‚‚‚ƒƒ„†…‡‡ˆ‰‰ŠŠŠ‰Š‹Œ‰‰‹Š‹ŽŽŽŽŽ‘““”””””•••–••””–•”“‘ŒŒŒŒŠŠˆ…„………„„…†……††…„†…„†‡††‡‡†‡‡‡†††„„„„„„„…„„„ƒƒƒ„ƒƒ„„ƒ„…„ƒƒ‚€€‚ƒ‚‚ƒ‚‚ƒƒƒƒ„ƒƒ„„ƒƒ„ƒ‚ƒ„„„„ƒ‚‚€‚ƒƒ……‡‡‡ˆ‰‰ˆ‰ˆ‰Š‹ŠˆŠ‹‹ŒŽŽŽŽŽŽŽŽ‘“–•”“‘’’’’”•”“’‘’““‘’’ŽŒ‹Šˆ„„„„…„…††……‡‡……………††…†‡†††††…†††…„‚ƒ„„„„„ƒ„„ƒ„„ƒ„ƒ„„„„„‚‚€€‚‚‚‚‚‚‚‚‚‚ƒ‚‚ƒ‚‚ƒƒ‚ƒƒƒƒ„„ƒƒƒƒ„„„ƒƒ€‚‚‚ƒ„……†ˆˆˆˆˆ‰‰ˆŠŠ‹‹ˆ‰‹Š‹ŽŽŽŒŽŽŽŽŽ‹Š‹ŒŒŒŒŒŒ”“ŽŽŽŒ‹‰†…††…†……………††……††…††††††††††††††‡†…„ƒ„„„„…„ƒƒƒ„„ƒ„ƒ„„„„„ƒƒ€‚ƒ‚‚‚‚‚ƒ‚‚‚ƒƒ‚‚ƒƒ‚ƒƒƒƒ„ƒ„„…„ƒ„ƒ€‚‚„……†‡‰ŠŠ‰‰‰ˆ‰‰‹‹‰ŠŠŠ‹Ž‘‘‘’’Ž‘Š‰Š‹‹‹‘‘‘——“‘ŽŒŒŠˆ†…††††…„„„…†……„…††………†…………†††…†††‡†……ƒƒ„„„„ƒƒ„ƒƒ‚ƒƒ„„„„ƒ„ƒ€€‚‚‚€‚‚‚‚‚‚‚ƒƒ‚ƒƒƒ‚„„ƒ‚ƒƒ‚ƒ„ƒƒ„‚€‚ƒ‚‚ƒ…†††ˆ‰‰ŠŠ‰‰‡‡‹Œ‰‰ŠŠ‹ŒŒŽŽŽŽŽŽ‘““”—˜˜˜—“ŒŒŒ‘‘“—˜—•“ŽŽŠˆ†††……………„…†††††…†‡…„„…††……‡……††……‡†††…„„„„ƒ„„„„ƒ‚ƒƒ„ƒƒ„ƒƒƒ€‚‚‚‚‚‚‚‚‚ƒƒƒƒƒ‚‚‚ƒƒƒƒ„„ƒƒ„„ƒ„„ƒ‚‚‚‚ƒ‚‚…†…†‡ˆ‰ˆ‰Šˆ‡‹Š‰‹‹‹‹‹ŽŽŽŽŽŽ’”•˜š›œœ›—“‘Ž“—šš—”“ŒŽŠ‡††††……††…†‡…†††††††……†……†††…†…„…†‡†……††…ƒ„„„„ƒ„‚ƒƒƒ„„„„„ƒƒ‚‚‚‚‚ƒ‚‚ƒƒƒƒ‚ƒƒƒƒ‚‚ƒ„„„ƒƒ„„ƒƒƒ€€‚‚ƒƒ‚ƒ……††‡‰ˆˆ‰‡†‰Œ‹‰Š‹‹‹ŠŒŽŽŽŽŽŽ“—šš››œœ›š˜˜———˜šš˜–”’ŽŽŽŽŒ‰‡…††……„††…†‡††††††††……††……††††…………††……†††…„ƒ„…„„„ƒƒ„„„………„ƒ€€‚ƒ‚‚‚‚‚‚‚‚ƒ‚‚ƒ‚‚„„ƒƒƒƒƒ„ƒƒ„„ƒ„ƒƒ‚€€‚„ƒ„„…‡††ˆ‡‡ˆ†‡‰Œ‹ˆ‰‹‹Š‹ŒŽŽ‘“–™š››œœ›œššš™˜™š›š˜–“‘ŽŒ‰†…†„„…„†††††…††‡‡†„……†††…„…††……†…††††……†…………„ƒ„„„ƒƒ„ƒ„„„„„ƒ€€‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚ƒ‚ƒƒƒƒ‚‚ƒƒ„ƒ„„„„„„„ƒ€‚ƒƒƒ„…„……†‡‡ˆŠ‹Œ‹‰‰Š‹‹ŒŽŽŽŽ‘‘’”–—™™šœžŸž››œœš˜—”‘”’‘’‹‰†…………†………††…†††‡‡‡†……††…………†……†……………††††…†…†…‚„…ƒ‚„„„„„„ƒ„ƒ€€‚‚‚‚‚‚‚‚ƒƒ‚ƒƒ‚‚ƒ‚‚‚ƒ„ƒƒƒƒƒ„„ƒƒƒ„ƒ„ƒƒƒƒ€‚‚ƒ„………†‡‡‡ˆ‰“Œ‹‹‰‰ŒŒŒŽŽŽ’’’““““”•—˜ššœžžž›˜–“‘’–•“”‘‰‡…………‡‡††…†‡††‡††‡‡††††††††‡‡†…††……†††‡‡††‡‡‡‡…„„ƒ„„„„„……„„ƒ€€€‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ„„ƒƒ„ƒ„„„ƒƒ„ƒ€‚‚„…††ˆ‡†‡ˆ‡•œ‘ŒŒ‹‹ŒŒŽŽ’••––•“‘‘’”––—™ššš™˜–”’Ž”–•”“’Œˆ‡†………‡†…†‡††‡‡‡†…‡‡……‡††‡‡‡†††…†‡‡††‡†††‡†‡‡††………„ƒ„„ƒ„……„„„‚€‚‚‚‚‚‚ƒƒ‚ƒƒ‚‚‚‚ƒƒƒƒƒƒƒƒ„ƒƒ„ƒƒƒƒƒ€‚‚‚ƒ„……†††‡…ˆ—Ÿ•ŒŒŒ‹ŒŒŒŽŽŽ‘“•—˜˜˜”‘Ž‘‘’’““‘Ž’•••–”‹‰‡††…††………††††‡†……†‡†…††‡‡‡††††††††††‡††††…†‡……†††„ƒ‚ƒƒƒƒ„ƒƒ„€‚‚‚ƒ‚‚‚‚‚ƒƒƒƒ‚ƒƒ‚‚ƒƒ‚ƒƒƒƒƒƒƒ…„ƒ„„„„‚‚‚ƒ………††……ƒˆš¡›ŒŒŽ’•——™š™–“ŽŽŽ‘”–––•“Šˆ‡†…†††††……†††‡†††††‡†……†‡†††‡‡†…†‡††‡††…‡†††…††††……ƒ‚„„ƒ„„…ƒ€€‚‚‚ƒƒ‚ƒƒƒ„ƒƒƒ‚‚ƒƒƒ‚‚ƒ„ƒƒ„‚ƒƒƒ„„…„ƒ„„‚€€€‚ƒ„ƒ‚‚„ƒˆ¥ –ŽŽŽŽŽ’•—˜˜™š˜•’Ž‘’”••–•”’‰‡‡†…†††…†††…††……†††††‡‡†………††‡‡‡‡‡‡‡‡‡‡†‡‡†……†‡‡‡†…„„„ƒƒ„„„„ƒ€€‚‚‚‚‚‚‚‚‚ƒ„‚‚ƒ‚ƒƒƒƒƒ‚‚ƒƒƒƒƒƒƒ„„„„ƒƒ„„ƒ‚€ƒƒ‚ƒ‚ˆž§ š’Ž‘‘•—˜˜™š™—”’’’‘’’“•–——–•“Œˆ‡‡†…†…†……†……†………††…††‡‡‡†‡††‡ˆ‡‡‡†‡ˆ†††‡‡†…†‡‡†††††‡……„‚„†…ƒƒ€€‚‚‚‚‚‚‚‚ƒƒƒ‚‚ƒƒ‚‚ƒƒƒ„ƒƒƒƒ„ƒƒƒ„„„„ƒƒ„„„ƒƒ„ƒ‚‚ƒƒ‚ˆ ª£Ÿ–ŽŽ‘‘“’‘‘‘”–—˜™›œ›˜––“’’‘‘‘‘‘’”–˜˜˜—––”’‹ˆ‡‡†…†‡†††………††††‡†…††††‡‡ˆ‡†‡ˆ‡†‡‡‡‡‡‡†‡‡‡‡‡‡‡††††‡‡‡‡†………………€€‚‚‚‚‚‚ƒƒ…„ƒƒƒƒƒƒƒƒ„ƒ„„„„ƒƒ„„„„„„ƒ„„„„ƒ„„‚€‚‚‚„‚ˆ «§¦Ž’”•““‘’’”–—™š›œœš˜—–”“’’‘‘“”–˜š™™™˜•”“‘Š‡‡‡†……†……†……††‡†††…††††‡‡††‡††‡‡†‡‡†‡ˆ‡†‡‡‡‡‡‡‡†‡†††‡‡…‡‡‡…………€€‚ƒ‚‚‚ƒ„„ƒƒƒƒ‚ƒƒ‚‚ƒƒƒƒƒ„ƒ‚„„„ƒƒ„„„ƒ…„‚„„ƒ€€‚€€ƒ‚ˆŸ­©ª¦–Ž”–””’‘’’”•—™šœ›šš™——–•–—™›››š™˜—•“‘‹ˆ‡††††………………††††…†‡†††††‡†……††††‡‡‡‡‡†‡‡†‡‡††‡††††††††‡‡‡‡‡†‡†„€‚‚‚ƒƒ‚ƒƒƒ„„ƒ‚ƒƒƒƒƒƒ‚ƒ„ƒƒƒƒƒ„ƒ„„ƒ„„„ƒ„ƒƒ„„ƒ‚€ƒƒ†›­«¨ª¡’ŽŽ“——•“’‘‘’“–™™›œœœ››œœ›ššš›œœ››šš˜–”’ŽŠˆ‡†‡‡†……‡†…†††††…††…†††‡†…†…†‡‡††‡ˆ†‡‡‡‡ˆ‡ˆˆ‡‡†‡††††††‡‡†‡†‡ˆ‡…€€‚‚‚‚‚‚ƒƒƒƒƒ‚‚ƒ„ƒ‚‚„„ƒ„„ƒƒ„„ƒ‚ƒ„„„„„„„ƒ„„„„ƒƒ„„ƒ‚‚€‚‚ƒ–¬®©¨«œŽŽ’—™˜•“’‘‘‘”–—˜™››››œ›››œ››››š™—•’ŽŒ‰‡‡††††††††……††††……††…††‡‡…††††††††‡‡‡‡‡ˆˆ‡ˆˆ‡ˆ‡‡††‡‡‡‡‡‡‡‡†‡‡†‡€€‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ‚ƒ„ƒƒƒƒƒ„ƒƒƒƒ„„„ƒ„„„„ƒƒ„„„„ƒƒ„„‚‚€‚‚‚¨®ª¨®¨”‘‘”™š—••’’‘’”–—˜šš››œœœœœ››š›œš™˜–“ŒŠ‰‰‡‡††‡†‡†††††††‡‡……†…………‡†…†……‡††††‡‡‡‡ˆ‡‡ˆˆ†‡ˆ††‡†‡‡‡‡ˆ‡‡‡‡‡ˆˆ€€‚‚‚ƒƒƒ‚‚ƒƒƒ‚‚‚‚ƒƒƒ„ƒ‚ƒƒƒ„„ƒƒ„„„„…„ƒƒ„ƒ‚ƒ„ƒƒ„„ƒ‚€‚€‚‹¤¬¬©©°¦“‘‘–›š—–•’‘’”•–—™š››››››š™šœœš˜–•’ŽŒŠ‰Š‰‡‡‡†††††††††‡‡††……‡†……††…………‡‡‡‡‡‡††ˆˆ†‡ˆˆ‡‡ˆ‡‡ˆ‡…†‡†‡ˆ‡‡ˆ‡‡ˆˆ€€‚‚‚‚ƒƒ‚ƒƒƒƒƒ‚‚ƒƒƒƒƒƒƒ„ƒ„…„ƒƒƒ„„ƒ„„ƒƒ„ƒ‚ƒ„„…„„„„€€ƒƒ†ž­¬¬§ª²£’‘‘’˜›˜–•’‘’”–˜™šššš™™™ššš™˜–”’Œ‹‰ŠŠ‰‡‡‡…„…††††††ˆ‡†††††‡††‡††††‡‡†‡‡‡‡†‡‡‡‡‡‡‡‡‡ˆˆ‡‡‡…†‡‡‡‡ˆ‡‡ˆˆ‡‡€€ƒ‚‚ƒƒƒ‚ƒƒƒ„„ƒƒ„ƒ„„„ƒ„ƒ„„„„„ƒƒ„„ƒ„ƒ„„ƒ„„„„…„„…„‚€€‚‚‚‚–«­­«¦¯³ ”’’”šž›™˜•’ŽŽ‘”—˜™™š™˜˜—™™š˜—•’‹‹‰ŠŠ‰ˆ‡‡‡…†††‡††‡‡ˆ‡…‡††‡‡‡‡†‡†‡‡‡††‡‡†‡‡‡‡ˆ‡‡‡‡ˆˆ‡‡‡‡‡‡‡ˆ‡‡‡‡‡ˆ‡‡‡€€‚‚‚ƒƒƒƒƒƒƒƒ„„„ƒƒ„„ƒƒ„ƒ„ƒ„„„ƒƒ„„ƒ„„ƒ„„„„ƒƒ„„„„„„ƒƒ‚‚Ž¥¬«¬©¦®°£œ—’”œŸœš˜•‘Ž“•—˜˜—––––—–•“’Œ‹Š‹‹ŠŠŽŠˆˆˆ†‡‡‡‡†††††‡…††ˆ‡†‡‡‡†††‡‡‡‡†‡‡ˆˆˆ‡ˆˆ‡‡ˆ‡‡‡‡††‡‡ˆˆ††‡‡‡ˆˆ€€‚‚ƒ‚‚ƒƒƒƒƒƒƒƒ„ƒƒƒ„„„„„„„„…„ƒ„„ƒƒ…„„„„ƒƒ„ƒƒ„„……„„ƒ‚€‡œª«««§¡§­¯¥–‘• œš—”‘ŽŽŽ‘“””•”””””““‘‹‹‹‹‹Œ‹Œšž–Œˆ†ˆˆ†ˆ‡†‡‡†††††††…‡‡‡ˆ†††‡‡†††††‡‡‡‡ˆ‡‡‡†‡†‡‡‡‡‡ˆˆ††‡ˆ‡‡ˆ€€‚‚ƒ‚ƒ‚ƒ„„ƒƒ„ƒƒƒƒƒ„ƒ‚‚‚„ƒ‚„„„ƒƒƒƒƒ„„„„ƒƒ„ƒƒ„ƒ„…„„„‚€€¥«ªª©¤Ÿ ©­’— œ™–“ŽŽŽŽŽ‘‘’‘’‘‘ŒŒ‹Š‹‹‹‹‹‹›§¢¡œ‘‰ˆ‡‡ˆ‡‡‡ˆ‡‡‡†††‡‡ˆ‡‡‡‡‡‡‡†‡ˆ‡††‡ˆˆ†‡‡‡‡‡‡†‡ˆ‡†‡ˆˆ‡ˆˆˆ‡‡‰€€ƒƒ‚‚ƒƒ„ƒƒƒ„‚‚ƒƒƒ‚ƒƒƒ„ƒ‚‚ƒ„„ƒƒ„„ƒ„„„ƒ„„„„ƒ„„…„„„ƒ€€€€~}~‡›©©©©¥¢ ¡ª¤“’“•šœ›˜–“ŽŽŽŽŽŽŽŽŒŒ‹‹ŒŒŒ‹‹œ¨¥§¨£–Œˆˆ‡‡‡†‡ˆ††‡†‡††‡‡…†‡†ˆ‡†‡‡‡‡‡‡‡ˆ‡‡†‡ˆ‡††‡‡ˆˆ‡ˆˆˆ‡ˆ‰ˆ‡†€€ƒƒ‚ƒƒ‚ƒƒƒ„ƒƒ‚ƒƒƒƒƒ„„„„ƒƒ„„„„ƒƒ„„„„„ƒƒ„„„ƒƒ„„„„„…„ƒ€€€|{~€¢©¨©§¤¤Ÿ ¦œ’“’“™›™˜”‘ŽŽŽŽŽŽŽŽŽŽŽŽŒŒŒ‹Œš§§¨©«§‰ˆ‡†‡ˆ†…‡‡††‡‡†‡†‡‡‡‡‡‡‡†‡‡††‡‡‡‡‡ˆ‡†‡‡††ˆˆ‡‡‡ˆˆ‰ˆ‡‡†€€‚‚‚ƒƒƒƒƒƒƒƒƒƒƒƒ‚ƒƒ‚ƒƒ„„„„‚ƒ…„ƒ„„ƒ„…„„„ƒ„„ƒ„„ƒƒ„„„„…„„‚€~{{|~’¤¨§¨¥¤¢›Ÿ¥š’“’”•——–”’‘ŽŽŽŽŽŽŽŽŽŒŒŒš¥¦§©«««£“‹‰†‡‡††‡††‡†‡†‡‡†‡ˆˆ‡ˆ‡‡‡†††‡ˆ‡‡‡‡‡‡‡‡‡‡‡‡ˆˆˆˆˆ‰‰ˆ‡ˆ€€ƒ„ƒ‚ƒƒƒ„ƒƒƒ„„ƒƒƒƒƒ„„„„ƒƒƒ„„„„„ƒ„„„„…„„„„„„„ƒƒ„„…„„„ƒ€€{{{|}~‚Žž¥§¦¢¢ ›¡¥˜‘“’’”••””’‘‘ŽŽŽŽŽŽŽŽŽŽŒŒŒš¥¦¨¨ª¬®­¤•‹ˆ‡†‡‡†…‡‡……‡‡‡††‡‡ˆ‡†‡ˆˆ‡‡ˆˆ‡‡†††‡ˆˆˆ‡‡‡‡ˆˆˆˆŠ‰ˆˆ‰€€‚‚ƒƒ‚ƒƒƒ„‚ƒ„ƒ„„ƒƒ„ƒ„„„„ƒ……„…„„„„…„„…………„„„„……„……„„……„‚€~{z{|||~€ˆš¤¥¢¡£Ÿ›££—’’’’”””“’‘‘ŽŽŽŒŒ›¥¦¨¦§¬®®­¦˜Œˆ‡†ˆ‡††‡†…†‡‡ˆˆ†‡‡‡†‡ˆˆ‡‡ˆ‡‡ˆˆ‡‡ˆˆˆ‡ˆ‡†‡ˆ‰ˆˆ‰‰‡ˆˆ€€‚‚‚„ƒ‚ƒƒƒ„ƒƒƒƒ„„‚ƒƒƒ„„„…„„„„„„„„„…„„……„„…„„…„„………„………„ƒ‚|}}{zz|}|}†”  ž¡¢›¢¢˜“‘’’““’’‘‘‘‘‘‘ŽŽŽŒš¤¥¨¦¦¬®®¯­¨š‹†‡ˆ‰‡…††††††‡ˆ‡‡‡‡††ˆ‰‡ˆˆˆˆˆˆˆ‡‡‡ˆ‡ˆˆˆ‡ˆ‰ˆˆ‰‰ˆ‡‡€‚ƒ…„ƒƒ‚‚ƒƒƒƒ„„ƒ‚‚ƒ„ƒ„„„„ƒƒ……„„„„„„„„……„„„„„„„…„„……„…„ƒ|z{||zz||||}ƒ˜›ž¢Ÿ›œ¤¡•’’’’““’’“’’’‘’‘‘‘‘‘ŽŽŽŽ‹˜£¤¨¨©¬¯°®®®¨•……‡ˆ††††‡‡…†‡‡†‡ˆ‡†‡‡‡ˆˆˆˆ‰ˆ‡ˆ‡‡ˆ‰ˆˆ‰ˆ†ˆ‰‡‡‰‰‰ˆˆ€€‚ƒ„„„ƒ„ƒƒƒƒƒƒ„„ƒ‚‚ƒ„„„ƒƒ„„„„„„„„„ƒƒ„„…„„„„„„„„…„„…………„‚}|{z||{{{|{|||~ˆ’˜ž¡žœž¤Ÿ”““’‘’“’““’‘’’‘‘‘ŽŽŽŒŽ—¢¤§©ª¬¯¯­­®°©‚………†‡†††‡‡‡ˆ‡†‡…†ˆ†…ˆ‰ˆ‰Šˆ‡ˆ‡‡ˆ‰ˆˆ‰ˆˆˆˆ‡‡ˆˆ‡†ˆ€€‚ƒ„ƒƒƒ„…„ƒƒƒ„„„ƒ‚ƒƒ„„ƒƒ„ƒƒƒ„„„„ƒ„„„„„…„„„………„„„………„…„„€||{{{|{z{{z{|{{|…‹•Ÿ žŸ¤œ”“““““’“”“““’‘ŽŽŽŽŽ–Ÿ£¦§ª®¯­­­¯´µž‡„„„ƒ„†††ˆ‡†‡ˆ‡†††ˆ‡††‡‡‡ˆ‰‰‡‡ˆ‰ˆˆˆ‰‰ˆ‰‰ˆˆˆ‡„…‰€ƒ„„ƒƒ„„„„ƒƒ„……„ƒ„„ƒ„ƒƒ„ƒ„„„„„„ƒ„„„„„…„„…„…„„„………„„ƒ‚€}}{z{{||zz{{{{|{z{~‚‡‘šž £™““““’’’““““’’ŽŽŽŽŽŽŽŽ–¢¦¥©®®­­­³º¹¤‡…ƒ‚„†††††‡‡‡‡‡‡‡ˆˆ‡‡‡ˆˆ‰‰ˆˆ‡‡ˆˆ‰‰ˆ‰Š‹ŒŒŠƒ~|€Š€€‚‚‚„ƒƒ„„„„ƒ„„…„ƒƒ„ƒƒ„ƒƒ„„„„„„„…„…„„……„„„„…„ƒƒƒ‚‚€~}|||z{{z|{zz{{{|{{{{{}~„Œ’™žž¢Ÿ•’‘’’‘‘’“’’’‘‘‘ŽŽŽŽŽŽ”œ¢¦¦©­­­«±»¾¹ ‹‰‡…„…„ƒƒ†‡†ˆˆ‡‡†‡ˆˆ‡ˆ‰ˆˆ‰ˆˆˆ‡‡†‡‰‡‡‘—–—‘‚{zzz€€€‚‚‚ƒƒƒƒƒ„„„ƒ„…„„ƒƒƒƒ„ƒƒ„ƒƒ„„ƒ……„…„„……„„ƒƒ„‚€~~}||||}||{{zz{zzz{zz{zzzzzz{~‚Š“™ž¡™’’‘’‘‘’“’’’‘‘‘ŽŽŽŽŽŽŽŽ“™¢¥¦ª¬¬¬®¹À¿µ™Š‰ˆ‡„„ƒ‚ƒ„…††‡‡††ˆˆ‡ˆ‰‰ŠŠŠŠ‰‰†}‚ŒŠ“ ¡›Ž~yz{|~€€€‚ƒƒ„ƒƒ‚ƒ„„„ƒƒ„…„ƒƒƒ„„ƒƒ„„ƒ„„„…„„…„„„„„„€~}|}}{z{||{|||{|zzz{{z{zz{zzyz{zzz{}ƒ‰‘™˜’’‘‘’’““’’“’‘ŽŽ”› £¦ª«ª®·¿À½®“‰ˆˆ†…†…ƒ‚‚„…‡‡†‡ˆ‡ˆ‡Š’–—’ŒŠ…y|œ¡ œ‚‚‡‹Ž•’€‚ƒƒƒƒƒƒƒ„„ƒ„„„ƒ„„„ƒ„„„ƒ„„„„„…„„…………„„ƒ€}}||}||||{{|{{{|{{|zz{z{{{{{{zyyzzz{{zz{|‚„‡ˆ‹’’’’’’ŽŽŽŽŽ“ž¢£¦©«¬µ¿À¿»¦Ž‡‡‡‡†‡†……ƒ‚ƒ}ƒ†„ƒˆ‡ƒ€‹ž  •ˆŠ‡}‡›¡ ž›™™›Ÿ  ¡›€€ƒƒƒ‚ƒ„„„ƒƒ„„„„„……„ƒƒ„„„…ƒƒ„„………„…„‚€||||}||{|||||{|{||{{|z{{zzz||{zzz{zz|{z{{z{||}€…ˆ‘’‘’‘ŽŽŽŽŽ‘¥¤¦©ª³¾ÁÀÀ·›ˆˆˆ‡‡††…†††…„„~{€ƒ}|‹‰‚‚   ™‹Ž””›¡  ¢¡¢¢¢¢¢¡¢¢›€ƒ„ƒƒ„„„„„„„„„„„„„…………„…„ƒƒ…„…„ƒ€~~~}}}}}}|{{||}}|||||}}}||{{{{z{}}}}}}}~}}}~~~~}}~~~€‚ƒ…ˆ‰‰Š‰ˆˆˆˆ‡‡‡‡‡‡‡ˆˆˆˆˆˆ“””•–¡¡  šŠƒ…„ƒ„ƒƒƒƒƒƒƒƒ‚~}~†…‚‰‘ŒŠŽ‘‘‘’‘‘‘’‘‘‘‘ \ No newline at end of file diff --git a/tbtcoreapp/res/images/arrow_.png b/tbtcoreapp/res/images/arrow_.png new file mode 100644 index 0000000..6d67923 Binary files /dev/null and b/tbtcoreapp/res/images/arrow_.png differ diff --git a/tbtcoreapp/res/images/audio-icon.png b/tbtcoreapp/res/images/audio-icon.png new file mode 100644 index 0000000..2ab3097 Binary files /dev/null and b/tbtcoreapp/res/images/audio-icon.png differ diff --git a/tbtcoreapp/res/images/dial.png b/tbtcoreapp/res/images/dial.png new file mode 100644 index 0000000..d501d7a Binary files /dev/null and b/tbtcoreapp/res/images/dial.png differ diff --git a/tbtcoreapp/res/images/dog_1024_960.gif b/tbtcoreapp/res/images/dog_1024_960.gif new file mode 100644 index 0000000..1a2e0ba Binary files /dev/null and b/tbtcoreapp/res/images/dog_1024_960.gif differ diff --git a/tbtcoreapp/res/images/giraffe_800_1179.jpg b/tbtcoreapp/res/images/giraffe_800_1179.jpg new file mode 100644 index 0000000..fb50373 Binary files /dev/null and b/tbtcoreapp/res/images/giraffe_800_1179.jpg differ diff --git a/tbtcoreapp/res/images/home_640_432.png b/tbtcoreapp/res/images/home_640_432.png new file mode 100644 index 0000000..186276d Binary files /dev/null and b/tbtcoreapp/res/images/home_640_432.png differ diff --git a/tbtcoreapp/res/images/lightoff.png b/tbtcoreapp/res/images/lightoff.png new file mode 100644 index 0000000..910ed0a Binary files /dev/null and b/tbtcoreapp/res/images/lightoff.png differ diff --git a/tbtcoreapp/res/images/lighton.png b/tbtcoreapp/res/images/lighton.png new file mode 100644 index 0000000..dd37720 Binary files /dev/null and b/tbtcoreapp/res/images/lighton.png differ diff --git a/tbtcoreapp/res/images/mic.png b/tbtcoreapp/res/images/mic.png new file mode 100644 index 0000000..6101a7c Binary files /dev/null and b/tbtcoreapp/res/images/mic.png differ diff --git a/tbtcoreapp/res/images/pebble_689_517.jpg b/tbtcoreapp/res/images/pebble_689_517.jpg new file mode 100644 index 0000000..42d701c Binary files /dev/null and b/tbtcoreapp/res/images/pebble_689_517.jpg differ diff --git a/tbtcoreapp/res/images/plane_1024_768.png b/tbtcoreapp/res/images/plane_1024_768.png new file mode 100644 index 0000000..dc38ef7 Binary files /dev/null and b/tbtcoreapp/res/images/plane_1024_768.png differ diff --git a/tbtcoreapp/res/images/squee.gif b/tbtcoreapp/res/images/squee.gif new file mode 100644 index 0000000..bbb5dd0 Binary files /dev/null and b/tbtcoreapp/res/images/squee.gif differ diff --git a/tbtcoreapp/res/images/zebra_1024_680.bmp b/tbtcoreapp/res/images/zebra_1024_680.bmp new file mode 100644 index 0000000..a54990c Binary files /dev/null and b/tbtcoreapp/res/images/zebra_1024_680.bmp differ diff --git a/tbtcoreapp/res/sounds/PreProcessedAudioAAC.raw b/tbtcoreapp/res/sounds/PreProcessedAudioAAC.raw new file mode 100644 index 0000000..54207d7 Binary files /dev/null and b/tbtcoreapp/res/sounds/PreProcessedAudioAAC.raw differ diff --git a/tbtcoreapp/res/sounds/PreProcessedAudioAMR.raw b/tbtcoreapp/res/sounds/PreProcessedAudioAMR.raw new file mode 100644 index 0000000..051b627 Binary files /dev/null and b/tbtcoreapp/res/sounds/PreProcessedAudioAMR.raw differ diff --git a/tbtcoreapp/res/sounds/PreProcessedAudioPCM.raw b/tbtcoreapp/res/sounds/PreProcessedAudioPCM.raw new file mode 100644 index 0000000..20bc8fa Binary files /dev/null and b/tbtcoreapp/res/sounds/PreProcessedAudioPCM.raw differ diff --git a/tbtcoreapp/res/sounds/SampleAAC.aac b/tbtcoreapp/res/sounds/SampleAAC.aac new file mode 100644 index 0000000..57e71a6 Binary files /dev/null and b/tbtcoreapp/res/sounds/SampleAAC.aac differ diff --git a/tbtcoreapp/res/sounds/SampleAMR.amr b/tbtcoreapp/res/sounds/SampleAMR.amr new file mode 100644 index 0000000..843247e Binary files /dev/null and b/tbtcoreapp/res/sounds/SampleAMR.amr differ diff --git a/tbtcoreapp/res/sounds/SampleMP3.mp3 b/tbtcoreapp/res/sounds/SampleMP3.mp3 new file mode 100644 index 0000000..c608a70 Binary files /dev/null and b/tbtcoreapp/res/sounds/SampleMP3.mp3 differ diff --git a/tbtcoreapp/res/sounds/SampleWAV.wav b/tbtcoreapp/res/sounds/SampleWAV.wav new file mode 100644 index 0000000..d71cd06 Binary files /dev/null and b/tbtcoreapp/res/sounds/SampleWAV.wav differ diff --git a/tbtcoreapp/res/video/sampleH263.3gp b/tbtcoreapp/res/video/sampleH263.3gp new file mode 100644 index 0000000..c0a0b39 Binary files /dev/null and b/tbtcoreapp/res/video/sampleH263.3gp differ diff --git a/tbtcoreapp/res/video/sampleH264.mp4 b/tbtcoreapp/res/video/sampleH264.mp4 new file mode 100644 index 0000000..1d773f3 Binary files /dev/null and b/tbtcoreapp/res/video/sampleH264.mp4 differ diff --git a/tbtcoreapp/res/video/sampleMPEG4.mp4 b/tbtcoreapp/res/video/sampleMPEG4.mp4 new file mode 100644 index 0000000..8e04bb1 Binary files /dev/null and b/tbtcoreapp/res/video/sampleMPEG4.mp4 differ diff --git a/tbtcoreapp/shared/res/images/giraffe_800_1179.jpg b/tbtcoreapp/shared/res/images/giraffe_800_1179.jpg new file mode 100644 index 0000000..fb50373 Binary files /dev/null and b/tbtcoreapp/shared/res/images/giraffe_800_1179.jpg differ diff --git a/tbtcoreapp/shared/res/tbtcoreapp.png b/tbtcoreapp/shared/res/tbtcoreapp.png new file mode 100644 index 0000000..9765b1b Binary files /dev/null and b/tbtcoreapp/shared/res/tbtcoreapp.png differ diff --git a/tbtcoreapp/src/main-app.c b/tbtcoreapp/src/main-app.c new file mode 100644 index 0000000..b08a120 --- /dev/null +++ b/tbtcoreapp/src/main-app.c @@ -0,0 +1,394 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + + +#include "main-app.h" +#include "window.h" +#include "utils/logger.h" +#include "utils/ui-utils.h" +#include "utils/config.h" +#include "view/tbt-list-view.h" +#include "view/tbt-genlist-view.h" +#include "model/tbt-list.h" +#include "view/tbt-push-view.h" +#include "view/tbt-image-view.h" +#include "view/tbt-local-view.h" + +#include "model/tbt-list.h" + +#include +#include +#include +#include +#include + + +struct _app_data +{ + window *win; + Evas_Object *navi; + Evas_Object* list; + Evas_Object* genlist; + +}; + + +static bool _app_create_cb(void *user_data); +static void _app_pause_cb(void *user_data); +static void _app_resume_cb(void *user_data); +static void _app_terminate_cb(void *user_data); +static void _app_control(app_control_h app_control, void *user_data); +static void _app_navi_back_cb(void *data, Evas_Object *obj, void *event_info); + + +/** + * @function get_storage_error + * @since_tizen 2.3 + * @description Get Storage Error + * @parameter int: Int + * @return char* + */ +char* get_storage_error(int ret) +{ + +switch(ret) +{ + case STORAGE_ERROR_NONE: + return "STORAGE_ERROR_NONE"; + case STORAGE_ERROR_INVALID_PARAMETER: + return "STORAGE_ERROR_INVALID_PARAMETER"; + case STORAGE_ERROR_OUT_OF_MEMORY: + return "STORAGE_ERROR_OUT_OF_MEMORY"; + case STORAGE_ERROR_NOT_SUPPORTED: + return "STORAGE_ERROR_NOT_SUPPORTED"; + case STORAGE_ERROR_OPERATION_FAILED: + return "STORAGE_ERROR_OPERATION_FAILED"; + } + return NULL; +} + + +/** + * @function app_create + * @since_tizen 2.3 + * @description App Create + * @parameter NA + * @return app_data* + */ +app_data *app_create() +{ + app_data *ad = NULL; + ad = calloc(1, sizeof(app_data)); + RETVM_IF(!ad, NULL, "ad in app_create is NULL"); + + + // lets set storage devices + int ret = storage_foreach_device_supported(_storage_device_supported_cb,NULL); + RETVM_IF(ret<0, NULL,"storage_foreach_device_supported failed : %s",get_storage_error(ret)); + + ret = storage_get_directory(_supportedStorageID,STORAGE_DIRECTORY_OTHERS,&TBT_LOGGING_DIR); + RETVM_IF(ret<0, NULL,"storage_foreach_device_supported failed : %s",get_storage_error(ret)); + + ret = storage_get_directory(_supportedStorageID,STORAGE_DIRECTORY_VIDEOS, &TBT_MEDIA_DIR); + RETVM_IF(ret<0, NULL,"storage_foreach_device_supported failed : %s",get_storage_error(ret)); + + DBG("Logging_Dir set = %s",TBT_LOGGING_DIR); + snprintf(XML_REPORT_FILE_PATH, sizeof(XML_REPORT_FILE_PATH), "%s/%s",TBT_LOGGING_DIR,"tbt-report.xml"); + DBG("Reporting file set = %s",XML_REPORT_FILE_PATH); + + return ad; +} + + +/** + * @function app_destroy + * @since_tizen 2.3 + * @description App Destroy + * @parameter app_data*: App Data Pointer + * @return void + */ +void app_destroy(app_data *ad) +{ + if(ad) + { + SAFE_DELETE(ad); + } +} + + +/** + * @function app_run + * @since_tizen 2.3 + * @description App Run + * @parameter app_data*: App Data Pointer + * @return int + */ +int app_run(app_data *app, int argc, char **argv) +{ + RETVM_IF(!app, -1, "app is NULL"); + _tbt_pause_resume_cb = NULL; + + _tbt_app_terminate_cb = NULL; + app_error_e result; + ui_app_lifecycle_callback_s cbs = + { + .create = _app_create_cb, + .terminate = _app_terminate_cb, + .app_control = _app_control, + .pause = _app_pause_cb, + .resume = _app_resume_cb + + }; + + result = ui_app_main(argc, argv, &cbs, app); + RETVM_IF(result != APP_ERROR_NONE, result, "app_main fail > Error = %d", result); + + return result; +} + + +/** + * @function app_navi_add + * @since_tizen 2.3 + * @description App Navi Add + * @parameter app_data*: App Data Pointer + * @return static Evas_Object* + */ +static Evas_Object *app_navi_add(app_data *ad) +{ + Evas_Object *navi = NULL; + Evas_Object *parent = NULL; + + parent = win_get_host_layout(ad->win); + RETVM_IF(!parent, NULL, "app_navi_add failed"); + navi = ui_utils_navi_add(parent, _app_navi_back_cb, ad); + RETVM_IF(!navi, NULL, "ui_utils_navi_add failed"); + win_set_layout(ad->win, navi); + + return navi; +} + + +/** + * @function _app_pause_cb + * @since_tizen 2.3 + * @description App Pause Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_pause_cb(void *user_data) +{ + DBG("@#@ INside main pause cb"); + if(NULL != _tbt_pause_resume_cb) + { + + (*_tbt_pause_resume_cb)(false); + } +} + + +/** + * @function _app_resume_cb + * @since_tizen 2.3 + * @description App Resume Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_resume_cb(void *user_data) +{ + DBG("INside main resume cb"); + if(NULL != _tbt_pause_resume_cb) + { + (*_tbt_pause_resume_cb)(true); + } +} + + +/** + * @function _app_create_cb + * @since_tizen 2.3 + * @description App Create Cb + * @parameter void*: Void Pointer + * @return static bool + */ +static bool _app_create_cb(void *user_data) +{ + + + app_data *ad = user_data; + RETVM_IF(NULL == ad, false, "ad is null"); + + ad->win = win_create(); + RETVM_IF(NULL == ad->win, false, "ad->win is null"); + + ad->navi = app_navi_add(ad); + RETVM_IF(NULL == ad->navi, false, "ad->navi is null"); + + + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE_CIRCLE) + { + elm_theme_overlay_add(NULL, get_edje_path("custom_button.edj")); + } + #endif + + + ad->genlist = tbt_genlist_view_create(ad->navi); + RETVM_IF(NULL == ad->genlist, false, "getlist creation is failed"); + + return true; +} + + +/** + * @function _app_terminate_cb + * @since_tizen 2.3 + * @description App Terminate Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_terminate_cb(void *user_data) +{ + app_data *ad = user_data; + RETM_IF(NULL == ad, "app is null"); + if(_tbt_app_terminate_cb != NULL) + { + (*_tbt_app_terminate_cb)(); + } + + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE_CIRCLE) + { + elm_theme_overlay_del(NULL, get_edje_path("custom_button.edj")); + } + #endif + win_destroy(ad->win); + ad->win = NULL; +} + + +/** + * @function _app_control + * @since_tizen 2.3 + * @description App Control + * @parameter app_control_h: App Control H, void*: Void Pointer + * @return static void + */ +static void _app_control(app_control_h app_control, void *user_data) +{ + + app_data *ad = user_data; + RETM_IF(NULL == ad, "app is null"); + + + int result; + char *operation=NULL; + result = app_control_get_operation (app_control, &operation); + RETM_IF(result !=APP_CONTROL_ERROR_NONE, "app_control_get_operation failed! %s",get_error_message(result)); + DBG("Operation = %s",operation); + + char *uri=NULL; + result = app_control_get_uri (app_control, &uri); + RETM_IF(result !=APP_CONTROL_ERROR_NONE, "app_control_get_uri failed! %s", get_error_message(result)); + if(uri==NULL)DBG("URI = NULL"); + else DBG("URI = %s",uri); + + + if(strcmp(operation, "libpush.operation.handle") == 0) + { + #ifdef TBT_MODULE_PUSH + DBG("Starting push module"); + int index = -1; + index = tbt_list_item_index_get_by_app_type(TBT_APP_PUSH_SERVICE); + RETM_IF(index == -1, "Item index not found"); + + tbt_info *info = NULL; + info = tbt_list_item_get(index); + RETM_IF(!info, "item is NULL"); + + info->push_operation_id = strdup(operation); + info->push_app_control = app_control; + + Elm_Object_Item *it = NULL; + it = elm_genlist_nth_item_get(ad->genlist, index); + RETM_IF(NULL == it, "it is null"); + + unsigned int count; + + info->is_push_from_outside = true; + + result = badge_get_count("org.tizen.tbtcoreapp", &count); + RETM_IF(result != BADGE_ERROR_NONE, "badge_get_count failed"); + + if(count > 0) + { + badge_set_count("org.tizen.tbtcoreapp", count-1); + } + push_view_add(ad->navi, info, it); + #endif + } + else if(uri!=NULL) + { + char msg[512]; + + ui_utils_show_toast(msg, win_get_win_handle(ad->win), 3); + } + else + { + //bellow line of codes give a pop/toast in the screen showing in what operaration TBT launching, but in 2.3 these lines causes launching problem +// sprintf(msg,"Operation:'%s' and URI:'%s'",operation,uri); +// char msg[512]; +// sprintf(msg,"Operation:'%s'",operation); +// ui_utils_show_toast(msg, win_get_win_handle(ad->win), 3); + } + + + + SAFE_DELETE(operation); + SAFE_DELETE(uri); +} + + +/** + * @function _app_navi_back_cb + * @since_tizen 2.3 + * @description App Navi Back Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _app_navi_back_cb(void *data, Evas_Object *obj, void *event_info) +{ + app_data *ad = (app_data*)data; + RETM_IF(!data, "ad in _app_navi_back_cb is NULL"); + + if(elm_naviframe_top_item_get(obj) == elm_naviframe_bottom_item_get(obj)) + { + if(ad) + { + tbt_save_report(); + + + win_lower(ad->win); + } + } + else + { + if(__is_efl_test_running==false) + elm_naviframe_item_pop(obj); + else DBG("EFL test running. Main back function disabled"); + } +} diff --git a/tbtcoreapp/src/main.c b/tbtcoreapp/src/main.c new file mode 100644 index 0000000..e3f31c4 --- /dev/null +++ b/tbtcoreapp/src/main.c @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + + +#include "main-app.h" + + +/** + * @function main + * @since_tizen 2.3 + * @description Main + * @parameter int: Int + * @return int + */ +int main(int argc, char **argv) +{ + int result = 0; + app_data *app = app_create(); + + if(app) + { + result = app_run(app, argc, argv); + app_destroy(app); + } + + return result; +} diff --git a/tbtcoreapp/src/model/tbt-list.c b/tbtcoreapp/src/model/tbt-list.c new file mode 100644 index 0000000..911c945 --- /dev/null +++ b/tbtcoreapp/src/model/tbt-list.c @@ -0,0 +1,1588 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file tbt-list.c + * @brief This file Handles main List of Application. + * + * @author Amlan Chowdhury (amlan.c@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ + +#include "utils/config.h" +#include "utils/logger.h" +#include "model/tbt-list.h" + + +static const char *axes[] = { "X", "Y", "Z" }; + +#include "utils/xml-util.h" + + +static tbt_info tbtapps[] = +{ +#ifdef TBT_MODULE_CAMERA + #ifdef TBT_MODULE_APP_CAMERA_CAPTURE + // Camera capture + { + .name = "Capture", + .parent = "Camera", + .apptype = TBT_APP_CAMERA_CAPTURE, + .icon_name = "dummy", + .info = "Capture and show image from camera", + .result = 0, + .required_features_count = 1, + .features_required = { 0 } + }, + #endif + + + #ifdef TBT_MODULE_APP_CAMERA_RECORD + + // Camera video + { + .name = "Record", + .parent = "Camera", + .apptype = TBT_APP_CAMERA_RECORD, + .icon_name = "dummy", + .file_name = "video/sampleMPEG4.mp4", + .info = "Record and play
a video", + .result = 0, + .required_features_count = 1, + .features_required = {0 } + }, + #endif + + #ifdef TBT_MODULE_APP_CAMERA_FACE_DETECT + + // Camera face detection + { + .name = "Face Detection", + .parent = "Camera", + .apptype = TBT_APP_CAMERA_FACE_DETECT, + .icon_name = "dummy", + .info = "Detect face from
camera preview", + .result = 0, + .required_features_count = 2, + .features_required = {0, 3} + }, + #endif + + #ifdef TBT_MODULE_APP_CAMERA_HDR_CAPTURE + + // Camera HDR capture + { + .name = "Camera HDR Capture", + .parent = "Camera", + .apptype = TBT_APP_CAMERA_HDR_CAPTURE, + .icon_name = "dummy", + .info = "Capture HDR image and
show from Camera", + .result = 0, + .required_features_count = 2, + .features_required = {0, 3} + }, + #endif +#endif + +#ifdef TBT_MODULE_AUDIO + #ifdef TBT_MODULE_APP_SOUND_AUDIO + + // Audio + { + .name = "Audio", + .parent = "Sound", + .apptype = TBT_APP_SOUND_AUDIO, + .icon_name = "dummy", + .file_name = "sounds/SampleMP3.mp3", + .info = "Play mp3 audio file", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_SOUND_VOLUME + + // Volume + { + .name = "Volume", + .parent = "Sound", + .apptype = TBT_APP_SOUND_VOLUME, + .icon_name = "dummy", + .file_name = "sounds/SampleMP3.mp3", + .info = "Play mp3 audio file and change volume", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_GPS + #ifdef TBT_MODULE_APP_GPS_GPS + + //GPS Test + { + .name = "GPS", + .parent = "GPS", + .apptype = TBT_APP_GPS_GPS, + .icon_name = "dummy", + .info = "Show GPS coordinate data", + .result = 0, + .required_features_count = 1, + .features_required = {11} + }, + #endif +#endif + +#ifdef TBT_MODULE_BLE + //Bluetooth LE Gatt Client + { + .name = "Gatt Client", + .parent = "Bluetooth LE", + .apptype = TBT_APP_BLE_GATT_CLIENT, + .icon_name = "dummy", + .info = "Bluetooth LE Gatt Cleint", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, +#endif + +#ifdef TBT_MODULE_BT + #ifdef TBT_MODULE_APP_BT_CLIENT_PAIRED + + //Bluetooth Client + { + .name = "Client Paired", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_CLIENT_PAIRED, + .icon_name = "dummy", + .info = "Pair with bluetooth server", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, + #endif + + #ifdef TBT_MODULE_APP_BT_CLIENT_CANCEL_PAIRED + + + //Bluetooth Client Pair Cancel + { + .name = "Client Cancel Pair", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_CLIENT_PAIRED, + .icon_name = "dummy", + .info = "Pair with bluetooth server and then cancel it.", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, + #endif + + #ifdef TBT_MODULE_APP_BT_SERVER_PAIRED + + // Bluetooth Server + { + .name = "Server Paired", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_SERVER_PAIRED, + .icon_name = "dummy", + .info = "Pair with bluetooth client", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, + #endif + + #ifdef TBT_MODULE_APP_BT_OPP_SERVER + + // Bluetooth OPP Server + { + .name = "OPP Server", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_OPP_SERVER, + .icon_name = "dummy", + .info = "Pair with bluetooth OPP client", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, + #endif + + #ifdef TBT_MODULE_APP_BT_OPP_CLIENT + + // OPP Client + { + .name = "OPP Client", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_OPP_CLIENT, + .icon_name = "dummy", + .info = "Transfer data using bluetooth OPP", + .result = 0, + .required_features_count = 1, + .file_name = "images/giraffe_800_1179.jpg", + .features_required = {16} + }, + #endif + + #ifdef TBT_MODULE_APP_BT_AUDIO_CONNECT_HANDSFREE + + // Handsfree + { + .name = "Handsfree", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_AUDIO_CONNECT_HANDSFREE, + .icon_name = "dummy", + .file_name = "sounds/SampleMP3.mp3", + .info = "Connect to a bluetooth
audio profile using handsfree service.", + .result = 0, + .required_features_count = 1, + .features_required = {16} + + }, + #endif + + #ifdef TBT_MODULE_APP_BT_AUDIO_CONNECT + + // Audio Connect + { + .name = "Audio Connect", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_AUDIO_CONNECT, + .icon_name = "dummy", + .file_name = "sounds/SampleMP3.mp3", + .info = "Connect to a bluetooth
audio profile using a2dp service.", + .result = 0, + .required_features_count = 1, + .features_required = {16} + + }, + #endif + + #ifdef TBT_MODULE_APP_BT_AUTHORIZATION + + // Authorization + { + .name = "Authorization", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_AUTHORIZATION, + .icon_name = "dummy", + .info = "Authorize a paired
bluetooth device", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, + #endif + + #ifdef TBT_MODULE_APP_BT_PROFILES + + // Bluetooth profiles + { + .name = "Bluetooth Profiles", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_PROFILES, + .icon_name = "dummy", + .info = "Find profile of an audio
connected paired device", + .file_name = "sounds/SampleMP3.mp3", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, + #endif + + #ifdef TBT_MODULE_APP_BT_SDP + + // Bluetooth SDP + { + .name = "Bluetooth SDP", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_SDP, + .icon_name = "dummy", + .info = "Find Service provided by bluetooth device", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, + #endif + + #ifdef TBT_MODULE_APP_BT_CLIENT_SOCKET + + // Client socket + { + .name = "Client Socket", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_CLIENT_SOCKET, + .icon_name = "dummy", + .info = "Pair with bluetooth socket server", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, + #endif + + #ifdef TBT_MODULE_APP_BT_SERVER_SOCKET + + // Server socket + { + .name = "Server Socket", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_SERVER_SOCKET, + .icon_name = "dummy", + .info = "Pair with bluetooth socket client", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, + #endif + + #ifdef TBT_MODULE_APP_BT_HID_CONNECT + + // Bluetooh HID connect + { + .name = "HID Connect", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_HID_CONNECT, + .icon_name = "dummy", + .info = "Connect with HID device", + .result = 0, + .required_features_count = 2, + .features_required = {16,72}, + }, + #endif + + #ifdef TBT_MODULE_APP_BT_AVRCP + + // Bluetooh avrcp + { + .name = "AVRCP Connect", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_AVRCP, + .icon_name = "dummy", + .info = "Connect with AVRCP device", + .result = 0, + .required_features_count = 1, + .features_required = {16}, + }, + #endif + + + #ifdef TBT_MODULE_APP_BT_AG + + // Bluetooh avrcp + { + .name = "Bluetooth AG", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_AG, + .icon_name = "dummy", + .info = "Connect using AG profile", + .result = 0, + .required_features_count = 1, + .features_required = {16}, + }, + #endif + + #ifdef TBT_MODULE_APP_BT_HDP + //Bluetoot HDP + { + .name = "Health", + .parent = "Bluetooth", + .apptype = TBT_APP_BT_HDP, + .icon_name = "dummy", + .info = "Bluetooth HDP", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, + #endif + +#endif + +#ifdef TBT_MODULE_BT_OOB + #ifdef TBT_MODULE_APP_BT_OOB_DEVICE + + //OOB device + { + .name = "OOB Device", + .parent = "Bluetooth OOB", + .apptype = TBT_APP_BT_OOB_DEVICE, + .icon_name = "dummy", + .info = "oob device", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, + #endif + + #ifdef TBT_MODULE_APP_BT_OOB_PERIPHERAL + + // OOB Peripheral + { + .name = "OOB Peripheral", + .parent = "Bluetooth OOB", + .apptype = TBT_APP_BT_OOB_PERIPHERAL, + .icon_name = "dummy", + .info = "oob device", + .result = 0, + .required_features_count = 1, + .features_required = {16} + }, + #endif +#endif + +#ifdef TBT_MODULE_WIFI + #ifdef TBT_MODULE_APP_WIFI_WIFI + + //Wifi Test + { + .name = "Wifi", + .parent = "Wifi", + .apptype = TBT_APP_WIFI_WIFI, + .icon_name = "dummy", + .info = "Switch wifi On and Off", + .result = 0, + .required_features_count = 1, + .features_required = {24} + }, + #endif +#endif + +#ifdef TBT_MODULE_WIFIDIRECT + #ifdef TBT_MODULE_APP_WIFIDIRECT + + // Wifi Direct Test + { + .name = "Wifi Direct ", + .parent = "Wifi Direct", + .apptype = TBT_APP_WIFIDIRECT, + .icon_name = "dummy", + .info = "Connect to a WIFI DIRECT
device", + .result = 0, + .required_features_count = 1, + .features_required = {24, 25} + }, + #endif + + #ifdef TBT_MODULE_APP_WIFIDIRECT_CONNECTION_CANCEL + + //Wifi Direct Cancel Connection Test + { + .name = "Wifi Direct Connection Cancel", + .parent = "Wifi Direct", + .apptype = TBT_APP_WIFIDIRECT_CONNECTION_CANCEL, + .icon_name = "dummy", + .info = "Initiate connection to a WIFI DIRECT
device and then cancel the connection.", + .result = 0, + .required_features_count = 1, + .features_required = {24, 25} + }, + #endif +#endif + +#ifdef TBT_MODULE_NFC + #ifdef TBT_MODULE_APP_NFC_TAG + + + // NFC TAG Test + { + .name = "NFC Tag", + .parent = "NFC", + .apptype = TBT_APP_NFC_TAG, + .icon_name = "dummy", + .info = "Test NFC tag", + .result = 0, + .required_features_count = 2, + .features_required = {17,77} + }, + #endif + + #ifdef TBT_MODULE_APP_NFC_P2P + + + // NFC P2P Test + { + .name = "NFC P2P", + .parent = "NFC", + .apptype = TBT_APP_NFC_P2P, + .icon_name = "dummy", + .info = "Test NFC P2P", + .result = 0, + .required_features_count = 2, + .features_required = {17,76} + }, + #endif +#endif + +#ifdef TBT_MODULE_DISPLAY + #ifdef TBT_MODULE_APP_DISPLAY_DISPLAY + + //Display Test + { + .name = "Display Info", + .parent = "Display", + .apptype = TBT_APP_DISPLAY_DISPLAY, + .icon_name = "dummy", + .info = "Show display information", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_GRAPHICS + #ifdef TBT_MODULE_APP_GRAPHICS_GRAPHICS + + //Graphics Test + { + .name = "Graphics", + .parent = "Graphics", + .apptype = TBT_APP_GRAPHICS_GRAPHICS, + .icon_name = "dummy", + .info = "Render 3d graphics", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_KEYPAD + #ifdef TBT_MODULE_APP_IDEV_NUM_KEYPAD + + // Input Device Test: Number keypad + { + .name = "Number Keypad", + .parent = "Input Device", + .apptype = TBT_APP_IDEV_NUM_KEYPAD, + .icon_name = "dummy", + .info = "Input using number
keyboard", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_IDEV_PH_NUM_KEYPAD + + // Input Device Test: Phone number keypad + { + .name = "Phone Number Keypad", + .parent = "Input Device", + .apptype = TBT_APP_IDEV_PH_NUM_KEYPAD, + .icon_name = "dummy", + .info = "Input using phone
number keyboard", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_IDEV_IP_KEYPAD + + // Input Device Test: IP keypad + { + .name = "IP Keypad", + .parent = "Input Device", + .apptype = TBT_APP_IDEV_IP_KEYPAD, + .icon_name = "dummy", + .info = "Input using IP
keyboard", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_LOCAL + #ifdef TBT_MODULE_APP_LOCAL_MPEG4 + + + //Video MPEG4 + { + .name = "Mpeg4 Video", + .parent = "Local", + .apptype = TBT_APP_LOCAL_MPEG4, + .icon_name = "dummy", + .file_name = "video/sampleMPEG4.mp4", + .info = "Play mpeg4 video
file format", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_LOCAL_H263 + + // Video H263 + { + .name = "H263 Video", + .parent = "Local", + .apptype = TBT_APP_LOCAL_H263, + .icon_name = "dummy", + .file_name = "video/sampleH263.3gp", + .info = "Play H263 video
file format", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_LOCAL_H264 + + // Video H264 + { + .name = "H264 Video", + .parent = "Local", + .apptype = TBT_APP_LOCAL_H264, + .icon_name = "dummy", + .file_name = "video/sampleH264.mp4", + .info = "Play H264 video
file format", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_IMAGEVIEW + #ifdef TBT_MODULE_APP_IMAGEVIEW_JPEG + + // Imageview JPEG + { + .name = "ImageView JPEG", + .parent = "ImageView", + .apptype = TBT_APP_IMAGEVIEW_JPEG, + .icon_name = "dummy", + .file_name = "images/giraffe_800_1179.jpg", + .info = "Show JPEG image", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_IMAGEVIEW_BMP + + // Imageview BMP + { + .name = "ImageView BMP", + .parent = "ImageView", + .apptype = TBT_APP_IMAGEVIEW_BMP, + .icon_name = "dummy", + .file_name = "images/zebra_1024_680.bmp", + .info = "Show BMP image", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_IMAGEVIEW_GIF + + // Imageview GIF + { + .name = "ImageView GIF", + .parent = "ImageView", + .apptype = TBT_APP_IMAGEVIEW_GIF, + .icon_name = "dummy", + .file_name = "images/squee.gif", + .info = "Show GIF image", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_IMAGEVIEW_PNG + + // Imageview PNG + { + .name = "ImageView PNG", + .parent = "ImageView", + .apptype = TBT_APP_IMAGEVIEW_PNG, + .icon_name = "dummy", + .file_name = "images/plane_1024_768.png", + .info = "Show PNG image", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_DC + #ifdef TBT_MODULE_APP_DC_INSERT + + //Data Control + { + .name = "SQL Insert", + .parent = "Data Control", + .apptype = TBT_APP_DC_INSERT, + .icon_name = "dummy", + .info = "Insert data in SQLite", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_DC_DELETE + + // SQL Delete + { + .name = "SQL Delete", + .parent = "Data Control", + .apptype = TBT_APP_DC_DELETE, + .icon_name = "dummy", + .info = "Delete data from SQLite", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_DC_UPDATE + + // SQL Update + { + .name = "SQL Update", + .parent = "Data Control", + .apptype = TBT_APP_DC_UPDATE, + .icon_name = "dummy", + .info = "Update data in SQLite", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_DC_SELECT + + // SQL Select + { + .name = "SQL Select", + .parent = "Data Control", + .apptype = TBT_APP_DC_SELECT, + .icon_name = "dummy", + .info = "Select data from SQLite", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_DC_CURSOR + + // SQL Cursor + { + .name = "SQL Cursor", + .parent = "Data Control", + .apptype = TBT_APP_DC_CURSOR, + .icon_name = "dummy", + .layout_file = "", + .layout_group = "", + .info = "Insert/Update/Delete using
SQLite", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_DC_MAP + + // SQL Map + { + .name = "SQL Map", + .parent = "Data Control", + .apptype = TBT_APP_DC_MAP, + .icon_name = "dummy", + .info = "Select data from SQLite
into map data structure", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_APP + #ifdef TBT_MODULE_APP_PICK_VIEW_APP + + //Operation Pick + { + .name = "Operation View", + .parent = "Pick/View", + .apptype = TBT_APP_PICK_VIEW_APP, + .icon_name = "dummy", + .info = "Launch other application
in view mode", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_PICK_PICK_APP + + //Operation Pick + { + .name = "Operation Pick", + .parent = "Pick/View", + .apptype = TBT_APP_PICK_PICK_APP, + .icon_name = "dummy", + .info = "Launch other application
in pick mode", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_SENSOR + #ifdef TBT_MODULE_APP_SENSOR_ACCELEROMETER + + //Accelerometer + { + .name = "Accelerometer", + .parent = "Sensor", + .apptype = TBT_APP_SENSOR_ACCELEROMETER, + .icon_name = "dummy", + .info = "Test accelerometer sensor", + .result = 0, + .sensortype = SENSOR_ACCELEROMETER, + .units = SENSOR_UNIT_METRE_PER_SECOND_SQUARED, + .value_names = axes, + .value_count = 3, + .sensor_response_interval = 20, + .axes = { -1, 1, 1 }, + .required_features_count = 1, + .features_required = {42} + + }, + #endif + + #ifdef TBT_MODULE_APP_SENSOR_GYROSCOPE + + //Gyroscope + { + .name = "Gyroscope", + .parent = "Sensor", + .apptype = TBT_APP_SENSOR_GYROSCOPE, + .icon_name = "dummy", + .info = "Test gyroscope sensor", + .result = 0, + .sensortype = SENSOR_GYROSCOPE, + .units = SENSOR_UNIT_DEGREE_PER_SECOND, + .value_names = axes, + .value_count = 3, + .sensor_response_interval = 20, + .axes = { -1, 1, 1 }, + .required_features_count = 1, + .features_required = {44} + + }, + #endif + + #ifdef TBT_MODULE_APP_SENSOR_PROXIMITY + + //Proximity + { + .name = "Proximity", + .parent = "Sensor", + .apptype = TBT_APP_SENSOR_PROXIMITY, + .icon_name = "dummy", + .info = "Test proximity sensor", + .result = -1, + .file_name = "images/lighton.png", + .extra_file_name = "images/lightoff.png", + .sensor_response_interval = 100, + .sensortype = SENSOR_PROXIMITY, + + .units = SENSOR_UNIT_MAX, + .required_features_count = 1, + .features_required = {48} + + }, + #endif + + #ifdef TBT_MODULE_APP_SENSOR_LIGHT + + //Light + { + .name = "Light", + .parent = "Sensor", + .apptype = TBT_APP_SENSOR_LIGHT, + .icon_name = "dummy", + .info = "Test light sensor", + .result = -1, + .sensor_response_interval = 100, + .sensortype = SENSOR_LIGHT, + .units = SENSOR_UNIT_LUX, + }, + #endif + + #ifdef TBT_MODULE_APP_SENSOR_ULTRA_VIOLET + + //UltraViolet + { + .name = "Ultraviolet", + .parent = "Sensor", + .apptype = TBT_APP_SENSOR_ULTRA_VIOLET, + .icon_name = "dummy", + .info = "Test ultraviolet sensor", + .result = -1, + .sensor_response_interval = 100, + .sensortype = SENSOR_ULTRAVIOLET, + .units = SENSOR_UNIT_MAX, + }, + #endif + + #ifdef TBT_MODULE_APP_SENSOR_PRESSURE + + //Pressure + { + .name = "Pressure", + .parent = "Sensor", + .apptype = TBT_APP_SENSOR_PRESSURE, + .icon_name = "dummy", + .info = "Test pressure sensor", + .result = -1, + .sensor_response_interval = 100, + .sensortype = SENSOR_PRESSURE, + .file_name = "images/dial.png", + .extra_file_name = "images/arrow_.png", + .units = SENSOR_UNIT_HECTOPASCAL, + + + }, + #endif + + #ifdef TBT_MODULE_APP_SENSOR_MAGNATOMETER + + //Magnatormeter + { + .name = "Magneotmeter", + .parent = "Sensor", + .apptype = TBT_APP_SENSOR_MAGNATOMETER, + .icon_name = "dummy", + .info = "Test magnatic sensor", + .value_names = axes, + .value_count = 3, + .result = -1, + .file_name = "images/dial.png", + .extra_file_name = "images/arrow_.png", + .sensor_response_interval = 20, + .axes = { -1, 1, 1 }, + .sensortype = SENSOR_MAGNETIC, + .units = SENSOR_UNIT_MICRO_TESLA, + }, + #endif +#endif + +#ifdef TBT_MODULE_ANIMATION + #ifdef TBT_MODULE_APP_ANIMATION_FADE + + //Animation Test + { + .name = "Fade Animation", + .parent = "Animation", + .apptype = TBT_APP_ANIMATION_FADE, + .icon_name = "dummy", + .info = "Animate buttons with fading effect", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_ANIMATION_POINT + + // Point animation + { + .name = "Point Animation", + .parent = "Animation", + .apptype = TBT_APP_ANIMATION_POINT, + .icon_name = "dummy", + .info = "Animate buttons using
point animation", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_ANIMATION_DIMENSION + + // Dimension animation + { + .name = "Dimension Animation", + .parent = "Animation", + .apptype = TBT_APP_ANIMATION_DIMENSION, + .icon_name = "dummy", + .info = "Animate buttons by changing
dimension", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_ANIMATION_RECT + + // Rectangle Animation + { + .name = "Rectangle Animation", + .parent = "Animation", + .apptype = TBT_APP_ANIMATION_RECT, + .icon_name = "dummy", + .info = "Animate buttons by changing
position and dimension", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_ANIMATION_ROTATE + + // Rotate animation + { + .name = "Rotate Animation", + .parent = "Animation", + .apptype = TBT_APP_ANIMATION_ROTATE, + .icon_name = "dummy", + .info = "Rotate buttons", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_UI + #ifdef TBT_MODULE_APP_UI_RESIZE + + //UI Test + { + .name = "Resize Drawable", + .parent = "UI Test", + .apptype = TBT_APP_UI_RESIZE, + .icon_name = "dummy", + .file_name = "images/pebble_689_517.jpg", + .info = "Resize image and move to random positions", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_UI_SHAPE + + // Shape + { + .name = "Shape", + .parent = "UI Test", + .apptype = TBT_APP_UI_SHAPE, + .icon_name = "dummy", + .info = "Resize shape and move
to random positions", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_UI_ROTATE + + // Rotate + { + .name = "Rotate", + .parent = "UI Test", + .apptype = TBT_APP_UI_ROTATE, + .icon_name = "dummy", + .info = "Rotate rectangle", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_UI_FONT + + // Font + { + .name = "Font", + .parent = "UI Test", + .apptype = TBT_APP_UI_FONT, + .icon_name = "dummy", + .info = "Resize font and
change color", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_UI_LINE + + // Line drawable + { + .name = "Line Drawable", + .parent = "UI Test", + .apptype = TBT_APP_UI_LINE, + .icon_name = "dummy", + .info = "Draw line in random
position and length", + .result = 0 + }, + #endif + + #ifdef TBT_MODULE_APP_UI_ALPHA + + // Alpha Drawable + { + .name = "Alpha Drawable", + .parent = "UI Test", + .apptype = TBT_APP_UI_ALPHA, + .icon_name = "dummy", + .info = "Change alpha value", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_TOUCH + #ifdef TBT_MODULE_APP_TOUCH_TOUCH + + + //Touch Test + { + .name = "Touch", + .parent = "EFL/Event", + .apptype = TBT_APP_TOUCH_TOUCH, + .icon_name = "dummy", + .info = "Test touch performance
and callbacks.", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_MOCK + #ifdef TBT_MODULE_APP_MOCK + + //Mock Event + { + .name = "Mock Event", + .parent = "EFL/Event", + .apptype = TBT_APP_MOCK, + .icon_name = "dummy", + .info = "Injecting mock event", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_EVENT + #ifdef TBT_MODULE_APP_EVENT_VIEW + + //Event View + { + .name = "Event View", + .parent = "EFL/Event", + .apptype = TBT_APP_EVENT_VIEW, + .icon_name = "dummy", + .info = "Check Tizen event
callbacks for orientation,
locale and lanuage change.", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_EFL + #ifdef TBT_MODULE_APP_EFL_CALLBACK + + //EFL Test + { + .name = "EFL Callback", + .parent = "EFL/Event", + .apptype = TBT_APP_EFL_CALLBACK, + .icon_name = "dummy", + .info = "Check callback add/delete.
Press HW Back button
to check whether it works
or not.", + .result = 0, + .required_features_count = 0 + }, + #endif +#endif + + +#ifdef TBT_MODULE_IME + #ifdef TBT_MODULE_APP_IME_ALPHABATIC + + //EFL Test + { + .name = "IME Alphabetic", + .parent = "IME", + .apptype = TBT_APP_IME_ALPHABATIC, + .icon_name = "dummy", + .info = "Check custom IME for TBT.", + .result = 0, + .required_features_count = 0 + }, + #endif + #ifdef TBT_MODULE_APP_IME_NUMERIC + + //EFL Test + { + .name = "IME Numeric", + .parent = "IME", + .apptype = TBT_APP_IME_NUMERIC, + .icon_name = "dummy", + .info = "Check custom IME for TBT.", + .result = 0, + .required_features_count = 0 + }, + #endif + #ifdef TBT_MODULE_APP_IME_EVENT + + //EFL Test + { + .name = "IME Events", + .parent = "IME", + .apptype = TBT_APP_IME_EVENT, + .icon_name = "dummy", + .info = "Check custom IME for TBT.", + .result = 0, + .required_features_count = 0 + }, + #endif + #ifdef TBT_MODULE_APP_IME_CONTEXT_GET + + //EFL Test + { + .name = "IME Context Info", + .parent = "IME", + .apptype = TBT_APP_IME_CONTEXT_GET, + .icon_name = "dummy", + .info = "Check custom IME for TBT.", + .result = 0, + .required_features_count = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_WIDGET + #ifdef TBT_MODULE_APP_WIDGET + + //WIDGET Test + { + .name = "WIDGET", + .parent = "WIDGET", + .apptype = TBT_APP_WIDGET, + .icon_name = "dummy", + .info = "Check WIDGET for TBT.", + .result = 0, + .required_features_count = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_SHORTCUT + #ifdef TBT_MODULE_APP_SHORTCUT + + // Shortcut + { + .name = "Shortcut", + .parent = "EFL/Event", + .apptype = TBT_APP_SHORTCUT, + .icon_name = "dummy", + .info = "Create shortcut in
home screen.
Check SHORTCUT API", + .result = 0, + .required_features_count = 0 + }, + #endif +#endif + + +#ifdef TBT_MODULE_OAUTH2 + #ifdef TBT_MODULE_APP_OAUTH2 + + //OAuth 2.0 Service + { + .name = "OAuth 2.0", + .parent = "OAuth 2.0", + .apptype = TBT_APP_OAUTH2, + .icon_name = "dummy", + .info = "Test OAuth 2.0 service.
Active INTERNET
connection required.", + .result = 0, + .required_features_count = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_PUSH + #ifdef TBT_MODULE_APP_PUSH_SERVICE + + //Push Service + { + .name = "Push Service", + .parent = "Push Service", + .apptype = TBT_APP_PUSH_SERVICE, + .icon_name = "dummy", + .info = "Test push service.
Active INTERNET
connection required.", + .result = 0, + .required_features_count = 1, + .features_required = {19} + }, + #endif +#endif + +#ifdef TBT_MODULE_RUNTIME + #ifdef TBT_MODULE_APP_RUNTIME_INFO + + //Runtime Info + { + .name = "Runtime Info", + .parent = "Runtime Info", + .apptype = TBT_APP_RUNTIME_INFO, + .icon_name = "dummy", + .info = "View Audio Jack
Insert Info", + .result = 0 + }, + #endif +#endif + +#ifdef TBT_MODULE_FEATURE + #ifdef TBT_MODULE_APP_FEATURE_SUMMARY + + //HW-SW Feature summary + { + .name = "HW-SW Feature Summary", + .parent = "Feature Summary", + .apptype = TBT_APP_FEATURE_SUMMARY, + .icon_name = "dummy", + .info = "View HW supported
feature's of the phone", + .result = 0 + } + #endif +#endif +}; + +static const char *sensor_units_str_get(sensor_unit_e units); +static const char *sensor_value_format_get(float resolution); + + +/** + * @function get_sensor_error + * @since_tizen 2.3 + * @description Get Sensor Error + * @parameter int: Int + * @return char* + */ +char* get_sensor_error(int ret) +{ + +switch(ret) +{ + case SENSOR_ERROR_NONE: + return "SENSOR_ERROR_NONE"; + case SENSOR_ERROR_IO_ERROR: + return "SENSOR_ERROR_IO_ERROR"; + case SENSOR_ERROR_INVALID_PARAMETER: + return "SENSOR_ERROR_INVALID_PARAMETER"; + case SENSOR_ERROR_NOT_SUPPORTED: + return "SENSOR_ERROR_NOT_SUPPORTED"; + case SENSOR_ERROR_PERMISSION_DENIED: + return "SENSOR_ERROR_PERMISSION_DENIED"; + case SENSOR_ERROR_OUT_OF_MEMORY: + return "SENSOR_ERROR_OUT_OF_MEMORY"; + case SENSOR_ERROR_NOT_NEED_CALIBRATION: + return "SENSOR_ERROR_NOT_NEED_CALIBRATION"; + case SENSOR_ERROR_OPERATION_FAILED: + return "SENSOR_ERROR_OPERATION_FAILED"; + } + return NULL; +} + +static unsigned tbtapps_count = sizeof(tbtapps) / sizeof(tbtapps[0]); + + +/** + * @function tbt_list_init + * @since_tizen 2.3 + * @description Tbt List Init + * @parameter NA + * @return void + */ +void tbt_list_init() +{ + DBG("tbt_list_init called"); + tbt_info *info = tbtapps; + tbt_info *end = info + tbtapps_count; + + for(; info != end; ++info) + { + info->result = 0; + + if(info->apptype == TBT_APP_SENSOR_ACCELEROMETER || info->apptype == TBT_APP_SENSOR_GYROSCOPE || info->apptype == TBT_APP_SENSOR_PROXIMITY || info->apptype == TBT_APP_SENSOR_MAGNATOMETER || info->apptype == TBT_APP_SENSOR_LIGHT || info->apptype == TBT_APP_SENSOR_PRESSURE || info->apptype == TBT_APP_SENSOR_ULTRA_VIOLET) + { + float resolution = 1.0; + int ret; + ret = sensor_get_default_sensor(info->sensortype, &info->sensor); + DBG("info->sensor is null"); + DBG("sensor_get_default_sensor failed: %s",get_sensor_error(ret)); + + ret = sensor_get_min_range(info->sensor, &info->value_min); + DBG("info->sensor is null"); + + ret = sensor_get_max_range(info->sensor, &info->value_max); + DBG( "sensor_get_max_range failed: %s",get_sensor_error(ret)); + + ret = sensor_get_resolution(info->sensor, &resolution); + DBG("sensor_get_resolution failed: %s",get_sensor_error(ret)); + + DBG("apptype: %d resolution: %f",info->apptype,resolution); + info->units_str = sensor_units_str_get(info->units); + DBG("Unit String: %s", info->units_str); + info->value_range = info->value_max - info->value_min; + info->value_format = sensor_value_format_get(resolution); + } + } + + DBG("__REPORT Reading report..."); + xmlUtil_readResults(tbtapps, tbtapps_count); + DBG("__REPORT Reading report done."); +} + + +/** + * @function tbt_save_report + * @since_tizen 2.3 + * @description Tbt Save Report + * @parameter NA + * @return void + */ +void tbt_save_report() +{ + DBG("__REPORT Going to Write"); + xmlUtil_writeResults(XML_REPORT_FILE_PATH, tbtapps, tbtapps_count); + DBG("__REPORT Report wrote."); +} + + +/** + * @function tbt_list_get + * @since_tizen 2.3 + * @description Tbt List Get + * @parameter unsigned*: Unsigned Pointer + * @return const tbt_info* + */ +const tbt_info *tbt_list_get(unsigned *count) +{ + if(count) + { + *count = tbtapps_count; + } + + return tbtapps; +} + + +/** + * @function tbt_info_count + * @since_tizen 2.3 + * @description Tbt Info Count + * @parameter NA + * @return const int + */ +const int tbt_info_count() +{ + return tbtapps_count; +} + + +/** + * @function tbt_list_item_get + * @since_tizen 2.3 + * @description Tbt List Item Get + * @parameter int: Int + * @return tbt_info* + */ +tbt_info *tbt_list_item_get(int index) +{ + if(index < tbtapps_count) + { + return &tbtapps[index]; + } + + return NULL; +} + + +/** + * @function tbt_list_item_index_get_by_app_type + * @since_tizen 2.3 + * @description Tbt List Item Index Get By App Type + * @parameter int: Int + * @return const int + */ +const int tbt_list_item_index_get_by_app_type(int app_type) +{ + int loop_count; + for(loop_count = 0; loop_countparent); + DBG("Parent :%s",parent); + + while(index >= 0) + { + if(&parent[0] != NULL && strcmp(parent, item->parent) == 0) + { + count--; + } + else + { + break; + } + index--; + item--; + } + } + return (count+1); +} + + +/** + * @function sensor_units_str_get + * @since_tizen 2.3 + * @description Sensor Units Str Get + * @parameter sensor_unit_e: Sensor Unit E + * @return static const char* + */ +static const char *sensor_units_str_get(sensor_unit_e units) +{ + static const char *units_str[] = + { + "m/s²", //SENSOR_UNIT_METRE_PER_SECOND_SQUARED + "μT", //SENSOR_UNIT_MICRO_TESLA + "°", //SENSOR_UNIT_DEGREE + "lx", //SENSOR_UNIT_LUX + "cm", //SENSOR_UNIT_CENTIMETER + "°/s", //SENSOR_UNIT_DEGREE_PER_SECOND + "hPa" //SENSOR_UNIT_HECTOPASCAL + }; + + + return units_str[units]; +} + + + +/** + * @function sensor_value_format_get + * @since_tizen 2.3 + * @description Sensor Value Format Get + * @parameter float: Float + * @return static const char* + */ +static const char *sensor_value_format_get(float resolution) +{ + if(resolution >= 1.0) + { + return "%.0f"; + } + else if(resolution >= 0.1) + { + return "%.1f"; + } + else if(resolution >= 0.01) + { + return "%.2f"; + } + else if(resolution >= 0.001) + { + return "%.3f"; + } + else + { + return "%.4f"; + } +} diff --git a/tbtcoreapp/src/utils/gl-types.c b/tbtcoreapp/src/utils/gl-types.c new file mode 100644 index 0000000..6bce726 --- /dev/null +++ b/tbtcoreapp/src/utils/gl-types.c @@ -0,0 +1,223 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +/** + * @file gl-types.c + * @brief This file provide necessary functions for OpenGl ES 2.0 transformation. + * + * @author A. B. M. Nazibullah (nazib.ullah@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ + +#include + +#include "utils/gl-types.h" +#include "utils/logger.h" + +#define GL_PI 3.1415926535897932384626433832795f +#define GL_DEG_TO_RAD (GL_PI / 180.0f) +#define GL_ZERO_EPS 1.0e-9f +#define GL_MAX_FOV_DEG (90.0f - GL_ZERO_EPS) + + +/** + * @function gl_matrix4_load_identity + * @since_tizen 2.3 + * @description Gl Matrix4 Load Identity + * @parameter gl_matrix4*: Gl Matrix4 Pointer + * @return void + */ +void gl_matrix4_load_identity(gl_matrix4 *result) +{ + RETM_IF(!result, "NULL arguments"); + + memset(&result->m, 0, sizeof(result->m)); + int i; + for (i = 0; i < 4; ++i) + { + result->m[i][i] = 1.0f; + } +} + + +/** + * @function gl_matrix4_load_frustum + * @since_tizen 2.3 + * @description Gl Matrix4 Load Frustum + * @parameter gl_matrix4*: Gl Matrix4 Pointer + * @return void + */ +void gl_matrix4_load_frustum(gl_matrix4 *result, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far) +{ + RETM_IF(!result, "NULL arguments"); + + GLfloat diffX = right - left; + GLfloat diffY = top - bottom; + GLfloat diffZ = far - near; + + RETM_IF((fabsf(diffX) <= GL_ZERO_EPS) || (fabsf(diffY) <= GL_ZERO_EPS) || + (diffZ <= GL_ZERO_EPS) || (near <= GL_ZERO_EPS), + "Invalid parameters"); + + result->m[0][0] = 2.0f * near / diffX; + result->m[1][1] = 2.0f * near / diffY; + result->m[2][0] = (right + left) / diffX; + result->m[2][1] = (top + bottom) / diffY; + result->m[2][2] = -(far + near) / diffZ; + result->m[2][3] = -1.0f; + result->m[3][2] = -2.0f * far * near / diffZ; + + result->m[0][1] = result->m[0][2] = result->m[0][3] = 0.0f; + result->m[1][0] = result->m[1][2] = result->m[1][3] = 0.0f; + result->m[3][0] = result->m[3][1] = result->m[3][3] = 0.0f; +} + + +/** + * @function gl_matrix4_load_perspective + * @since_tizen 2.3 + * @description Gl Matrix4 Load Perspective + * @parameter gl_matrix4*: Gl Matrix4 Pointer + * @return void + */ +void gl_matrix4_load_perspective(gl_matrix4 *result, GLfloat fov_deg, GLfloat aspect, GLfloat near, GLfloat far) +{ + RETM_IF(!result, "NULL arguments"); + RETM_IF(fabsf(fov_deg) >= GL_MAX_FOV_DEG, "Invalid parameters"); + + GLfloat dist = tanf(fov_deg * GL_DEG_TO_RAD * 0.5f) * near; + GLfloat top = (aspect < 1.0f) ? (dist / aspect) : dist; + GLfloat right = (aspect < 1.0f) ? dist : (dist * aspect); + + gl_matrix4_load_frustum(result, -right, right, -top, top, near, far); +} + + +/** + * @function gl_matrix4_translate + * @since_tizen 2.3 + * @description Gl Matrix4 Translate + * @parameter gl_matrix4*: Gl Matrix4 Pointer + * @return void + */ +void gl_matrix4_translate(gl_matrix4 *result, gl_vector3 v) +{ + RETM_IF(!result, "NULL arguments"); + + result->m[3][0] += (result->m[0][0] * v.x + result->m[1][0] * v.y + result->m[2][0] * v.z); + result->m[3][1] += (result->m[0][1] * v.x + result->m[1][1] * v.y + result->m[2][1] * v.z); + result->m[3][2] += (result->m[0][2] * v.x + result->m[1][2] * v.y + result->m[2][2] * v.z); + result->m[3][3] += (result->m[0][3] * v.x + result->m[1][3] * v.y + result->m[2][3] * v.z); +} + + +/** + * @function gl_matrix4_rotate + * @since_tizen 2.3 + * @description Gl Matrix4 Rotate + * @parameter gl_matrix4*: Gl Matrix4 Pointer + * @return void + */ +void gl_matrix4_rotate(gl_matrix4 *result, GLfloat angle_deg, gl_vector3 v) +{ + RETM_IF(!result, "NULL arguments"); + + GLfloat m = sqrtf(v.x * v.x + v.y * v.y + v.z * v.z); + RETM_IF(m <= GL_ZERO_EPS, "Invalid parameters"); + + gl_vector3 nv; + nv.x = v.x / m; + nv.y = v.y / m; + nv.z = v.z / m; + + GLfloat angle_rad = angle_deg * GL_DEG_TO_RAD; + GLfloat cosa = cosf(angle_rad); + GLfloat sina = sinf(angle_rad); + GLfloat cosa1 = 1.0f - cosa; + + gl_matrix4 rotate; + + rotate.m[0][0] = (nv.x * nv.x) * cosa1 + cosa; + rotate.m[0][1] = (nv.x * nv.y) * cosa1 + nv.z * sina; + rotate.m[0][2] = (nv.z * nv.x) * cosa1 - nv.y * sina; + rotate.m[0][3] = 0.0f; + + rotate.m[1][0] = (nv.x * nv.y) * cosa1 - nv.z * sina; + rotate.m[1][1] = (nv.y * nv.y) * cosa1 + cosa; + rotate.m[1][2] = (nv.y * nv.z) * cosa1 + nv.x * sina; + rotate.m[1][3] = 0.0f; + + rotate.m[2][0] = (nv.z * nv.x) * cosa1 + nv.y * sina; + rotate.m[2][1] = (nv.y * nv.z) * cosa1 - nv.x * sina; + rotate.m[2][2] = (nv.z * nv.z) * cosa1 + cosa; + + rotate.m[2][3] = rotate.m[3][0] = rotate.m[3][1] = rotate.m[3][2] = 0.0f; + rotate.m[3][3] = 1.0f; + + gl_matrix4_mul(result, &rotate); +} + + +/** + * @function gl_matrix4_mul + * @since_tizen 2.3 + * @description Gl Matrix4 Mul + * @parameter gl_matrix4*: Gl Matrix4 Pointer, const gl_matrix4*: Const gl Matrix4 Pointer + * @return void + */ +void gl_matrix4_mul(gl_matrix4 *result, const gl_matrix4 *rv) +{ + RETM_IF(!result || !rv, "NULL arguments"); + + gl_matrix4 tmp; + + tmp.m[0][0] = result->m[0][0] * rv->m[0][0] + result->m[1][0] * rv->m[0][1] + + result->m[2][0] * rv->m[0][2] + result->m[3][0] * rv->m[0][3]; + tmp.m[1][0] = result->m[0][0] * rv->m[1][0] + result->m[1][0] * rv->m[1][1] + + result->m[2][0] * rv->m[1][2] + result->m[3][0] * rv->m[1][3]; + tmp.m[2][0] = result->m[0][0] * rv->m[2][0] + result->m[1][0] * rv->m[2][1] + + result->m[2][0] * rv->m[2][2] + result->m[3][0] * rv->m[2][3]; + tmp.m[3][0] = result->m[0][0] * rv->m[3][0] + result->m[1][0] * rv->m[3][1] + + result->m[2][0] * rv->m[3][2] + result->m[3][0] * rv->m[3][3]; + tmp.m[0][1] = result->m[0][1] * rv->m[0][0] + result->m[1][1] * rv->m[0][1] + + result->m[2][1] * rv->m[0][2] + result->m[3][1] * rv->m[0][3]; + tmp.m[1][1] = result->m[0][1] * rv->m[1][0] + result->m[1][1] * rv->m[1][1] + + result->m[2][1] * rv->m[1][2] + result->m[3][1] * rv->m[1][3]; + tmp.m[2][1] = result->m[0][1] * rv->m[2][0] + result->m[1][1] * rv->m[2][1] + + result->m[2][1] * rv->m[2][2] + result->m[3][1] * rv->m[2][3]; + tmp.m[3][1] = result->m[0][1] * rv->m[3][0] + result->m[1][1] * rv->m[3][1] + + result->m[2][1] * rv->m[3][2] + result->m[3][1] * rv->m[3][3]; + tmp.m[0][2] = result->m[0][2] * rv->m[0][0] + result->m[1][2] * rv->m[0][1] + + result->m[2][2] * rv->m[0][2] + result->m[3][2] * rv->m[0][3]; + tmp.m[1][2] = result->m[0][2] * rv->m[1][0] + result->m[1][2] * rv->m[1][1] + + result->m[2][2] * rv->m[1][2] + result->m[3][2] * rv->m[1][3]; + tmp.m[2][2] = result->m[0][2] * rv->m[2][0] + result->m[1][2] * rv->m[2][1] + + result->m[2][2] * rv->m[2][2] + result->m[3][2] * rv->m[2][3]; + tmp.m[3][2] = result->m[0][2] * rv->m[3][0] + result->m[1][2] * rv->m[3][1] + + result->m[2][2] * rv->m[3][2] + result->m[3][2] * rv->m[3][3]; + tmp.m[0][3] = result->m[0][3] * rv->m[0][0] + result->m[1][3] * rv->m[0][1] + + result->m[2][3] * rv->m[0][2] + result->m[3][3] * rv->m[0][3]; + tmp.m[1][3] = result->m[0][3] * rv->m[1][0] + result->m[1][3] * rv->m[1][1] + + result->m[2][3] * rv->m[1][2] + result->m[3][3] * rv->m[1][3]; + tmp.m[2][3] = result->m[0][3] * rv->m[2][0] + result->m[1][3] * rv->m[2][1] + + result->m[2][3] * rv->m[2][2] + result->m[3][3] * rv->m[2][3]; + tmp.m[3][3] = result->m[0][3] * rv->m[3][0] + result->m[1][3] * rv->m[3][1] + + result->m[2][3] * rv->m[3][2] + result->m[3][3] * rv->m[3][3]; + + *result = tmp; +} diff --git a/tbtcoreapp/src/utils/gl-utils.c b/tbtcoreapp/src/utils/gl-utils.c new file mode 100644 index 0000000..840ead7 --- /dev/null +++ b/tbtcoreapp/src/utils/gl-utils.c @@ -0,0 +1,199 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +/** + * @file gl-utils.c + * @brief This file provide necessary Util functions for OpenGL operation. + * + * @author A. B. M. Nazibullah (nazib.ullah@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ + + +#include "utils/gl-utils.h" +#include "utils/logger.h" + +static const char *VERTEX_SHADER_TEXT = + "uniform mat4 u_m4P;\n" + "uniform mat4 u_m4MV;\n" + "attribute vec4 a_v4VertexCoords;\n" + "attribute vec4 a_v4VertexColor;\n" + "varying vec4 v_v4VertexColor;\n" + "void main()\n" + "{\n" + " v_v4VertexColor = a_v4VertexColor;\n" + " gl_Position = u_m4P * u_m4MV * a_v4VertexCoords;\n" + "}\n"; + +static const char *FRAGMENT_SHADER_TEXT = + "precision mediump float;\n" + "varying vec4 v_v4VertexColor;\n" + "void main()\n" + "{\n" + " gl_FragColor = v_v4VertexColor;\n" + "}\n"; + + +/** + * @function color_shader_init + * @since_tizen 2.3 + * @description Color Shader Init + * @parameter color_shader*: Color Shader Pointer, Evas_GL_API*: Evas GL API Pointer + * @return GLboolean + */ +GLboolean color_shader_init(color_shader *obj, Evas_GL_API *api) +{ + RETVM_IF(!obj || !api, GL_FALSE, "NULL arguments"); + + obj->vertex_shader = api->glCreateShader(GL_VERTEX_SHADER); + api->glShaderSource(obj->vertex_shader, 1, &VERTEX_SHADER_TEXT, NULL); + api->glCompileShader(obj->vertex_shader); + + obj->fragment_Shader = api->glCreateShader(GL_FRAGMENT_SHADER); + api->glShaderSource(obj->fragment_Shader, 1, &FRAGMENT_SHADER_TEXT, NULL); + api->glCompileShader(obj->fragment_Shader); + + obj->program = api->glCreateProgram(); + api->glAttachShader(obj->program, obj->vertex_shader); + api->glAttachShader(obj->program, obj->fragment_Shader); + + api->glBindAttribLocation(obj->program, SHADER_COORDS_ATTR, "a_v4VertexCoords"); + api->glBindAttribLocation(obj->program, SHADER_COLOR_ATTR, "a_v4VertexColor"); + + api->glLinkProgram(obj->program); + + obj->u_m4P = api->glGetUniformLocation(obj->program, "u_m4P"); + obj->u_m4MV = api->glGetUniformLocation(obj->program, "u_m4MV"); + + return ((obj->u_m4P != -1) && (obj->u_m4MV != -1)); +} + + +/** + * @function color_shader_finalize + * @since_tizen 2.3 + * @description Color Shader Finalize + * @parameter color_shader*: Color Shader Pointer, Evas_GL_API*: Evas GL API Pointer + * @return void + */ +void color_shader_finalize(color_shader *obj, Evas_GL_API *api) +{ + RETM_IF(!obj, "NULL arguments"); + + if (api) + { + if (obj->program != 0) + { + api->glDeleteProgram(obj->program); + } + if (obj->vertex_shader != 0) + { + api->glDeleteShader(obj->vertex_shader); + } + if (obj->fragment_Shader != 0) + { + api->glDeleteShader(obj->fragment_Shader); + } + } + memset(obj, 0, sizeof(color_shader)); +} + + +/** + * @function color_shader_activate + * @since_tizen 2.3 + * @description Color Shader Activate + * @parameter color_shader*: Color Shader Pointer, Evas_GL_API*: Evas GL API Pointer + * @return void + */ +void color_shader_activate(color_shader *obj, Evas_GL_API *api) +{ + RETM_IF(!obj || !api, "NULL arguments"); + + api->glUseProgram(obj->program); + api->glEnableVertexAttribArray(SHADER_COORDS_ATTR); + api->glEnableVertexAttribArray(SHADER_COLOR_ATTR); +} + + +/** + * @function color_shader_deactivate + * @since_tizen 2.3 + * @description Color Shader Deactivate + * @parameter color_shader*: Color Shader Pointer, Evas_GL_API*: Evas GL API Pointer + * @return void + */ +void color_shader_deactivate(color_shader *obj, Evas_GL_API *api) +{ + RETM_IF(!obj || !api, "NULL arguments"); + + api->glDisableVertexAttribArray(SHADER_COORDS_ATTR); + api->glDisableVertexAttribArray(SHADER_COLOR_ATTR); + api->glUseProgram(0); +} + + +/** + * @function color_shader_load_p + * @since_tizen 2.3 + * @description Color Shader Load P + * @parameter color_shader*: Color Shader Pointer, Evas_GL_API*: Evas GL API Pointer, const gl_matrix4*: Const gl Matrix4 Pointer + * @return void + */ +void color_shader_load_p(color_shader *obj, Evas_GL_API *api, const gl_matrix4 *matrix) +{ + RETM_IF(!obj || !api, "NULL arguments"); + + api->glUniformMatrix4fv(obj->u_m4P, 1, GL_FALSE, &(matrix->m[0][0])); +} + + +/** + * @function color_shader_load_mv + * @since_tizen 2.3 + * @description Color Shader Load Mv + * @parameter color_shader*: Color Shader Pointer, Evas_GL_API*: Evas GL API Pointer, const gl_matrix4*: Const gl Matrix4 Pointer + * @return void + */ +void color_shader_load_mv(color_shader *obj, Evas_GL_API *api, const gl_matrix4 *matrix) +{ + RETM_IF(!obj || !api, "NULL arguments"); + + api->glUniformMatrix4fv(obj->u_m4MV, 1, GL_FALSE, &(matrix->m[0][0])); +} + + +/** + * @function color_object3d_draw + * @since_tizen 2.3 + * @description Color Object3d Draw + * @parameter const color_object3d*: Const color Object3d Pointer, Evas_GL_API*: Evas GL API Pointer + * @return void + */ +void color_object3d_draw(const color_object3d *obj, Evas_GL_API *api) +{ + RETM_IF(!obj || !api, "NULL arguments"); + + api->glVertexAttribPointer(SHADER_COORDS_ATTR, 3, GL_FLOAT, GL_FALSE, + sizeof(obj->vertexes[0]), &obj->vertexes->coords); + api->glVertexAttribPointer(SHADER_COLOR_ATTR, 4, GL_FLOAT, GL_FALSE, + sizeof(obj->vertexes[0]), &obj->vertexes->color); + api->glDrawElements(GL_TRIANGLES, obj->indexes_length, GL_UNSIGNED_SHORT, obj->indexes); + + api->glFlush(); +} diff --git a/tbtcoreapp/src/utils/ui-utils.c b/tbtcoreapp/src/utils/ui-utils.c new file mode 100644 index 0000000..cb396b5 --- /dev/null +++ b/tbtcoreapp/src/utils/ui-utils.c @@ -0,0 +1,437 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file ui-utils.c + * @brief This file provide necessary Util functions UI. + * + * @author kallol kumar pal (kallol.kumar@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ + + +#include "utils/config.h" +#include "utils/logger.h" +#include "utils/ui-utils.h" + +#include "system_info.h" + +#define PART_POPUP_BUTTON1 "button1" +#define PART_POPUP_BUTTON2 "button2" +#define PART_POPUP_BUTTON3 "button3" +#define STYLE_POPUP_BUTTON "popup_button/default" + +/** +* @function DoesFeatureExixts +* @description Checks if a particular feature exists or not +* @parameter[IN] Feature Key +* @return bool The result of feature search +*/ + + +/** + * @function does_feature_exist + * @since_tizen 2.3 + * @description Does Feature Exist + * @parameter char*: Char Pointer + * @return bool + */ +bool does_feature_exist(char* feature) +{ + bool is_feature_available = false; + DBG("Check feature %s availability \n",feature); + system_info_get_platform_bool(feature, &is_feature_available); + DBG("Check feature %s availability value is %d \n",feature , is_feature_available ); + return is_feature_available; +} + + +/** + * @function ui_utils_toolbar_add + * @since_tizen 2.3 + * @description Ui Utils Toolbar Add + * @parameter Evas_Object*: Evas Object Pointer + * @return Evas_Object* + */ +Evas_Object *ui_utils_toolbar_add(Evas_Object *parent) +{ + Evas_Object *toolbar = elm_toolbar_add(parent); + RETVM_IF(NULL == toolbar, NULL, "toolbar is null"); + + elm_object_style_set(toolbar, "default"); + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE); + elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE); + evas_object_size_hint_weight_set(toolbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + return toolbar; +} + + +/** + * @function ui_utils_icon_create_new + * @since_tizen 2.3 + * @description Ui Utils Icon Create New + * @parameter Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return Evas_Object* + */ +Evas_Object *ui_utils_icon_create_new(Evas_Object *parent, const char *icon_name) +{ + char buf[255]; + Evas_Object *img = elm_image_add(parent); + + snprintf(buf,sizeof(buf), "%s/%s", app_get_resource_path(), icon_name); + elm_image_file_set(img, buf, NULL); + evas_object_color_set(img, 110, 162, 185, 255); + evas_object_size_hint_align_set(img, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(img, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + return img; +} + + +/** + * @function ui_utils_icon_create + * @since_tizen 2.3 + * @description Ui Utils Icon Create + * @parameter Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return Evas_Object* + */ +Evas_Object *ui_utils_icon_create(Evas_Object *parent, const char *icon_name) +{ + char buf[255]; + Evas_Object *img = elm_image_add(parent); + snprintf(buf, sizeof(buf), "%s/icon/%s.png", app_get_resource_path(), icon_name); + elm_image_file_set(img, buf, NULL); + evas_object_color_set(img, 110, 162, 185, 255); + evas_object_size_hint_align_set(img, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(img, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + return img; +} + + +/** + * @function ui_utils_create_image + * @since_tizen 2.3 + * @description Ui Utils Create Image + * @parameter Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return Evas_Object* + */ +Evas_Object *ui_utils_create_image(Evas_Object *parent, const char *file_path) +{ + RETVM_IF(NULL == parent, NULL, "create_image parent is NULL"); + + Evas_Object *image = NULL; + image = elm_image_add(parent); + RETVM_IF(NULL == image, NULL, "elm_image_add is NULL"); + + bool result = (EINA_TRUE == elm_image_file_set(image, file_path, NULL)); + if(!result) + { + ERR("error with elm_image_file_set, image name %s", file_path); + evas_object_del(image); + return NULL; + } + + elm_image_no_scale_set(image, EINA_FALSE); + elm_image_resizable_set(image, EINA_TRUE, EINA_TRUE); + elm_image_smooth_set(image, EINA_FALSE); + elm_image_aspect_fixed_set(image, EINA_TRUE); + elm_image_editable_set(image, EINA_FALSE); + evas_object_show(image); + + return image; +} + + +/** + * @function ui_utils_navi_add + * @since_tizen 2.3 + * @description Ui Utils Navi Add + * @parameter Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return Evas_Object* + */ +Evas_Object *ui_utils_navi_add(Evas_Object *parent, Eext_Event_Cb back_cb, void *cb_data) +{ + RETVM_IF(NULL == parent, NULL, "parent is null"); + Evas_Object *navi = elm_naviframe_add(parent); + eext_object_event_callback_add(navi, EEXT_CALLBACK_BACK, back_cb, cb_data); + eext_object_event_callback_add(navi, EEXT_CALLBACK_MORE, eext_naviframe_more_cb, NULL); + elm_naviframe_prev_btn_auto_pushed_set(navi, EINA_FALSE); + return navi; +} + + +/** + * @function ui_utils_layout_add + * @since_tizen 2.3 + * @description Ui Utils Layout Add + * @parameter Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return Evas_Object* + */ +Evas_Object *ui_utils_layout_add(Evas_Object *parent, Evas_Object_Event_Cb destroy_cb, void *cb_data) +{ + Evas_Object *layout = elm_layout_add(parent); + RETVM_IF(NULL == layout, NULL, "layout is null"); + evas_object_event_callback_add(layout, EVAS_CALLBACK_FREE, destroy_cb, cb_data); + return layout; +} + + +/** + * @function _eext_popup_back_cb + * @since_tizen 2.3 + * @description Eext Popup Back Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static inline void + */ +static inline void _eext_popup_back_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("eext_object_event_callback_add success. Popup back clicked"); + DBG("eext_object_event_callback_del calling..."); + eext_object_event_callback_del(obj, EEXT_CALLBACK_BACK, _eext_popup_back_cb); + evas_object_del(obj); +} + + +/** + * @function ui_utils_popup_add + * @since_tizen 2.3 + * @description Ui Utils Popup Add + * @parameter Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return Evas_Object* + */ +Evas_Object *ui_utils_popup_add(Evas_Object *parent, const char *text) +{ + RETVM_IF(NULL == parent, NULL, "popup is null"); + + Evas_Object *popup = elm_popup_add(parent); + RETVM_IF(NULL == popup, NULL, "popup is not created"); + + elm_object_part_text_set(popup, PART_POPUP_TITLE, text); + evas_object_show(popup); + eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, _eext_popup_back_cb, NULL); + + return popup; +} + + +/** + * @function ui_utils_popup_button_add + * @since_tizen 2.3 + * @description Ui Utils Popup Button Add + * @parameter Evas_Object*: Evas Object Pointer, const char*: Const char Pointer, void*: Void Pointer + * @return Evas_Object* + */ +Evas_Object * ui_utils_popup_button_add(Evas_Object *popup, const char *text, Evas_Smart_Cb func, void *data) +{ + RETVM_IF(NULL == popup, NULL, "popup is null"); + static const char *button_parts[] = + { + PART_POPUP_BUTTON1, + PART_POPUP_BUTTON2, + PART_POPUP_BUTTON3, + NULL + }; + const char **part = button_parts; + Evas_Object *button = NULL; + + while(*part && elm_object_part_content_get(popup, *part)) + { + ++part; + } + + RETVM_IF(NULL == part, NULL, "No empty button parts left"); + + button = elm_button_add(popup); + RETVM_IF(NULL == button, NULL, "Failed to create button"); + + elm_object_style_set(button, STYLE_POPUP_BUTTON); + elm_object_text_set(button, text); + elm_object_part_content_set(popup, *part, button); + evas_object_smart_callback_add(button, EVENT_CLICKED, func, data); + + return button; +} + + +/** + * @function ui_utils_push_button_add + * @since_tizen 2.3 + * @description Ui Utils Push Button Add + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return Evas_Object* + */ +Evas_Object *ui_utils_push_button_add(void *data, Evas_Object *parent, const char *name, Evas_Smart_Cb cb) +{ + RETVM_IF(NULL == data, NULL, "view is NULL"); + RETVM_IF(NULL == parent, NULL, "parent is NULL"); + + Evas_Object *push_button = elm_button_add(parent); + RETVM_IF(NULL == push_button, NULL, "Failed to create button"); + + evas_object_show(push_button); + elm_object_text_set(push_button, name); + evas_object_smart_callback_add(push_button, "clicked", cb, data); + evas_object_size_hint_expand_set(push_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(push_button, EVAS_HINT_FILL, 0.0); + + return push_button; +} + + +/** + * @function ui_utils_check_add + * @since_tizen 2.3 + * @description Ui Utils Check Add + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer + * @return Evas_Object* + */ +Evas_Object *ui_utils_check_add(void *data, Evas_Object *parent) +{ + RETVM_IF(NULL == data, NULL, "view is NULL"); + RETVM_IF(NULL == parent, NULL, "parent is NULL"); + + Evas_Object *check = elm_check_add(parent); + RETVM_IF(NULL == check, NULL, "Failed to create button"); + + evas_object_show(check); + evas_object_size_hint_expand_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(check, EVAS_HINT_FILL, 0.0); + + return check; +} + + +/** + * @function ui_utils_label_set_text + * @since_tizen 2.3 + * @description Ui Utils Label Set Text + * @parameter Evas_Object*: Evas Object Pointer, const char*: Const char Pointer, char*: Char Pointer + * @return void + */ +void ui_utils_label_set_text(Evas_Object *parent, const char *text, char *alignment) +{ + char buf[MAX_LENGTH] = {'\0'}; + snprintf(buf, MAX_LENGTH, "

%s

",alignment, text); + elm_object_text_set(parent, buf); +} + + +/** + * @function ui_utils_label_add + * @since_tizen 2.3 + * @description Ui Utils Label Add + * @parameter Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return Evas_Object* + */ +Evas_Object *ui_utils_label_add(Evas_Object *parent, const char *text) +{ + + Evas_Object *label = elm_label_add(parent); + RETVM_IF(NULL == label, NULL, "Failed to create button"); + + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, 0.5, 0.5); + evas_object_show(label); + + char buf[MAX_LENGTH] = {'\0'}; + snprintf(buf, MAX_LENGTH, "

%s

", text); + elm_object_text_set(label, buf); + + return label; +} + + +/** + * @function ui_utils_entry_add + * @since_tizen 2.3 + * @description Ui Utils Entry Add + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return Evas_Object* + */ +Evas_Object *ui_utils_entry_add(void *data, Evas_Object *parent, Elm_Input_Panel_Layout keyboard_layout, const char *text) +{ + RETVM_IF(NULL == parent, NULL, "parent is NULL"); + + Evas_Object *entry = elm_entry_add(parent); + RETVM_IF(NULL == entry, NULL, "Failed to create button"); + + elm_entry_editable_set(entry, EINA_TRUE); + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_single_line_set(entry, EINA_TRUE); + elm_entry_line_wrap_set(entry, ELM_WRAP_WORD); + elm_object_focus_set(entry, EINA_TRUE); + + + elm_entry_input_panel_layout_set(entry, keyboard_layout); + + evas_object_show(entry); + + return entry; +} + + +/** + * @function ui_utils_progressbar_add + * @since_tizen 2.3 + * @description Ui Utils Progressbar Add + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer + * @return Evas_Object* + */ +Evas_Object *ui_utils_progressbar_add(void *data, Evas_Object *parent, Evas_Smart_Cb slider_drag_stop, Evas_Smart_Cb slider_changed) +{ + RETVM_IF(NULL == data, NULL, "view is NULL"); + RETVM_IF(NULL == parent, NULL, "parent is NULL"); + + Evas_Object *slider = elm_slider_add(parent); + RETVM_IF(NULL == slider, NULL, "Failed to create button"); + + elm_slider_horizontal_set(slider, EINA_TRUE); + evas_object_show(slider); + elm_slider_indicator_format_set(slider, "%1.2f"); + evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0); + elm_slider_value_set(slider, 1); + elm_slider_indicator_show_set(slider, EINA_TRUE); + evas_object_smart_callback_add(slider, "slider,drag,stop", slider_drag_stop, data); + evas_object_smart_callback_add(slider, "changed", slider_changed, data); + + return slider; +} + + +/** + * @function ui_utils_show_toast + * @since_tizen 2.3 + * @description Ui Utils Show Toast + * @parameter const char*: Const char Pointer, const Evas_Object*: Const Evas Object Pointer + * @return void + */ +void ui_utils_show_toast(const char* message, const Evas_Object* data, float timeout) +{ + Evas_Object *popup; + Evas_Object *win = (Evas_Object*)data; + + popup = elm_popup_add(win); + elm_object_style_set(popup, "toast"); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(popup, message); + elm_popup_timeout_set(popup, timeout); + evas_object_show(popup); +} diff --git a/tbtcoreapp/src/utils/util_state_object.c b/tbtcoreapp/src/utils/util_state_object.c new file mode 100644 index 0000000..c1a215f --- /dev/null +++ b/tbtcoreapp/src/utils/util_state_object.c @@ -0,0 +1,480 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +/** + * @file util_state_object.c + * @author Muntasir (mk.chy@samung.com) + * + * @brief + * State machine + * Implementation of util_state_object + */ +#include "utils/util_state_object.h" + + +// define custom logging for state +#define __LOG(prio, fmt, arg...) dlog_print(prio, "UTIL_STATE", "%s (%d) > " fmt, __func__, __LINE__, ##arg) +#define __LOG_OUT(prio, fmt, arg...) dlog_print(prio, "UTIL_STATE", fmt, ##arg) +#define logd(fmt, arg...) __LOG(DLOG_DEBUG, fmt, ##arg) +#define logw(fmt, arg...) __LOG(DLOG_WARN, fmt, ##arg) +#define loge(fmt, arg...) __LOG(DLOG_ERROR, fmt, ##arg) +#define logi(fmt, arg...) __LOG(DLOG_INFO, fmt, ##arg) +#define log_output(fmt, arg...) __LOG_OUT(DLOG_INFO, fmt, ##arg) + + +// define structures +struct _util_state_transition +{ + int input; + util_state_info *destination; +}; + + +struct _util_state_info +{ + int state; + GList *transitions; + char *name; +}; + + +struct _util_state_object +{ + bool initiated; + char *name; + GList *states; + util_state_info *current; + + util_state_object_state_changed_cb state_changed_cb; + void *user_data; +}; + + + +// Define internals +void util_state_object_destroy_transition(util_state_transition *object); +void util_state_object_destroy_state(util_state_info *object); + + + + +// + + +/** + * @function util_state_object_create + * @since_tizen 2.3 + * @description Util State Object Create + * @parameter const char*: Const char Pointer + * @return util_state_object* + */ +util_state_object* util_state_object_create(const char *name) +{ + util_state_object *object=malloc(sizeof(util_state_object)); + RETVM_IF(!object, NULL, "malloc failed"); + object->initiated=false; + + if(name!=NULL) object->name=strdup(name); + else object->name=strdup("UN-NAMED"); + + object->current=NULL; + object->state_changed_cb=NULL; + object->states=NULL; + object->user_data=NULL; + + return object; +} + + +/** + * @function util_state_object_destroy_transition + * @since_tizen 2.3 + * @description Util State Object Destroy Transition + * @parameter util_state_transition*: Util State Transition Pointer + * @return void + */ +void util_state_object_destroy_transition(util_state_transition *object) +{ + free(object); + return; +} + + +/** + * @function util_state_object_destroy_state + * @since_tizen 2.3 + * @description Util State Object Destroy State + * @parameter util_state_info*: Util State Info Pointer + * @return void + */ +void util_state_object_destroy_state(util_state_info *object) +{ + if(object==NULL) return; + GList *it; + for(it=g_list_first(object->transitions);it!=NULL;it=it->next) + { + logd(" state %s destroying transition %d", object->name, ((util_state_transition*) it->data)->input); + util_state_object_destroy_transition((util_state_transition*) it->data); + + } + g_list_free(object->transitions); + if(object->name!=NULL) free(object->name); + free(object); + return; +} + + +/** + * @function util_state_object_destroy + * @since_tizen 2.3 + * @description Util State Object Destroy + * @parameter util_state_object*: Util State Object Pointer + * @return void + */ +void util_state_object_destroy(util_state_object *object) +{ + GList *it; + for(it=g_list_first(object->states);it!=NULL;it=it->next) + { + util_state_object_destroy_state((util_state_info*) it->data); + } + + if(object->name!=NULL) + free(object->name); + + free(object); + return; +} + + +/** + * @function util_state_object_get_state + * @since_tizen 2.3 + * @description Util State Object Get State + * @parameter util_state_object*: Util State Object Pointer, int: Int + * @return util_state_info* + */ +util_state_info* util_state_object_get_state(util_state_object *object,int state_value) +{ + if(object!=NULL) + { + GList *it; + for(it=g_list_first(object->states);it!=NULL;it=it->next) + { + if(((util_state_info*) it->data)->state==state_value) return (util_state_info*) it->data; + } + + logw("util_state_object_get_state :: state=%d not found!",state_value); + } + else loge("util_state_object_get_state :: util_state_object is NULL"); + return NULL; +} + + +/** + * @function util_state_object_add_state + * @since_tizen 2.3 + * @description Util State Object Add State + * @parameter util_state_object*: Util State Object Pointer, const char*: Const char Pointer, int: Int + * @return util_state_info* + */ +util_state_info* util_state_object_add_state(util_state_object *object,const char *name,int state_value) +{ + util_state_info* state=util_state_object_get_state(object,state_value); + if(state==NULL) + { + logi("util_state_object_add_state :: state=%d,'%s' Adding State",state_value, name); + state = malloc(sizeof(util_state_info)); + RETVM_IF(!state, NULL, "malloc failed"); + object->states = g_list_append(object->states,state); + } + else + { + logw("util_state_object_add_state :: state=%d,'%s' already defined. Over writing.",state->state, state->name); + if(state->name!=NULL) free(state->name); + g_list_free(state->transitions); + } + + state->name=strdup(name); + state->state=state_value; + state->transitions=NULL; + + return NULL; +} + + +/** + * @function util_state_object_get_transition + * @since_tizen 2.3 + * @description Util State Object Get Transition + * @parameter util_state_info*: Util State Info Pointer, int: Int + * @return util_state_transition* + */ +util_state_transition* util_state_object_get_transition(util_state_info* state,int feed) +{ + if(state!=NULL) + { + GList *it; + for(it=g_list_first(state->transitions);it!=NULL;it=it->next) + { + if(((util_state_transition*) it->data)->input==feed) return (util_state_transition*) it->data; + } + } + return NULL; +} + + +/** + * @function util_state_object_add_transition + * @since_tizen 2.3 + * @description Util State Object Add Transition + * @parameter util_state_object*: Util State Object Pointer, int: Int, int: Int, int: Int + * @return util_state_transition* + */ +util_state_transition* util_state_object_add_transition(util_state_object *object,int from_state,int feed_value,int to_state) +{ + logi("adding transition..."); + if(object!=NULL) + { + util_state_info *from=util_state_object_get_state(object,from_state); + util_state_info *to=util_state_object_get_state(object,to_state); + + if(from==NULL) + { + loge("util_state_object_add_transition :: state=%d (from) is not defined",from_state); + return NULL; + } + + if(to==NULL) + { + loge("util_state_object_add_transition :: state=%d (to) is not defined",to_state); + return NULL; + } + + util_state_transition* transition = util_state_object_get_transition(from,feed_value); + if(transition==NULL) + { + transition=malloc(sizeof(util_state_transition)); + transition->destination=to; + transition->input=feed_value; + from->transitions = g_list_append(from->transitions,transition); + + LOGI("util_state_object_add_transition :: Transition (%d , %d) => %d Added",from->state,feed_value,transition->destination->state); + } + else + { + logw("util_state_object_add_transition :: Transition Exists. (%d , %d) => %d Over writing transition",from->state,feed_value,transition->destination->state); + transition->destination=to; + transition->input=feed_value; + } + + int count = g_list_length(from->transitions); + logi("[%s] [%s] has %d transition.",object->name,from->name,count); + return transition; + + } + + loge("util_state_object_add_transition :: state_object is null"); + + return NULL; +} + + +/** + * @function util_state_object_init + * @since_tizen 2.3 + * @description Util State Object Init + * @parameter util_state_object*: Util State Object Pointer, int: Int, void*: Void Pointer + * @return bool + */ +bool util_state_object_init(util_state_object *state_object,int initial_state, util_state_object_state_changed_cb state_change_cb,void *user_data) +{ + if(state_object!=NULL && state_object->initiated==false) + { + state_object->current=util_state_object_get_state(state_object,initial_state); + state_object->user_data=user_data; + + if(state_object->current!=NULL) + { + state_object->initiated=true; + state_object->state_changed_cb=state_change_cb; + + logi("(%s,%s) state_object INIT",state_object->name, state_object->current->name); + return true; + } + else loge("util_state_object_init :: invalid state=%d",initial_state); + + } + + return false; +} + + +/** + * @function util_state_object_feed + * @since_tizen 2.3 + * @description Util State Object Feed + * @parameter util_state_object*: Util State Object Pointer, void*: Void Pointer + * @return void + */ +void util_state_object_feed(util_state_object *state_object, int feed_value,void *feed_data) +{ + if(state_object==NULL || state_object->initiated==false || state_object->current==NULL) return; + logi("(%s,%s) feeding %d",state_object->name, state_object->current->name, feed_value); + + //util_state_transition *it=NULL; + GList *it=NULL; + util_state_info *prev=state_object->current; + for(it=g_list_first(state_object->current->transitions);it!=NULL;it=it->next) + { + util_state_transition *transition=it->data; + if( transition->input == feed_value) + { + state_object->current=transition->destination; + break; + } + } + + if(state_object->state_changed_cb!=NULL) + (*state_object->state_changed_cb)(prev->state,state_object->current->state,feed_value,state_object->user_data,feed_data); + + logi("(%s,%s) Latest",state_object->name, state_object->current->name); + +} + + +/** + * @function util_state_object_info + * @since_tizen 2.3 + * @description Util State Object Info + * @parameter util_state_object*: Util State Object Pointer + * @return void + */ +void util_state_object_info(util_state_object *state_object) +{ + if(state_object==NULL) return; + + log_output("==================="); + log_output("--STATE-MACHINE(%s)",state_object->name); + GList *it=NULL,*it2=NULL; + int count; + for(it=g_list_first(state_object->states);it!=NULL;it=it->next) + { + util_state_info *state=(util_state_info*)it->data; + count=g_list_length(state->transitions); + log_output("--|--%s[%d] (%d)",state->name,state->state,count); + + for(it2=g_list_first(state->transitions);it2!=NULL;it2=it2->next) + { + util_state_transition *transition=(util_state_transition*)it2->data; + log_output("--|--|--%d => %s[%d]",transition->input,transition->destination->name,transition->destination->state); + } + log_output("--|--|"); + + } + log_output("--|"); + + log_output("==================="); + +} + + +/** + * @function on_state_changed + * @since_tizen 2.3 + * @description On State Changed + * @parameter int: Int, int: Int, int: Int, void*: Void Pointer, void*: Void Pointer + * @return static void + */ +static void on_state_changed(int previous,int now,int feed,void *user_data, void *feed_data) +{ + logi("__TEST__ on_state_changed: now=%d, from=%d, feed=%d",now,previous,feed); +} + + +/** + * @function util_state_test1 + * @since_tizen 2.3 + * @description Util State Test1 + * @parameter NA + * @return void + */ +void util_state_test1() +{ + util_state_object *state_object=util_state_object_create("test1"); + + util_state_object_add_state(state_object,"state1",0); + util_state_object_add_state(state_object,"state2",1); + util_state_object_add_state(state_object,"state3",2); + + util_state_object_add_transition(state_object,0,0,0); + util_state_object_add_transition(state_object,0,1,1); + util_state_object_add_transition(state_object,0,2,2); + + util_state_object_add_transition(state_object,1,0,0); + util_state_object_add_transition(state_object,1,1,1); + util_state_object_add_transition(state_object,1,2,2); + + util_state_object_add_transition(state_object,2,0,0); + util_state_object_add_transition(state_object,2,1,1); + util_state_object_add_transition(state_object,2,2,2); + util_state_object_add_transition(state_object,2,3,1); + + util_state_object_info(state_object); + + util_state_object_init(state_object, 0,on_state_changed,NULL); + util_state_object_feed(state_object, 1, NULL); + util_state_object_feed(state_object, 2, NULL); + util_state_object_feed(state_object, 3, NULL); + util_state_object_feed(state_object, 0, NULL); + util_state_object_feed(state_object, 0, NULL); + util_state_object_feed(state_object, 0, NULL); + util_state_object_feed(state_object, 0, NULL); + + util_state_object_destroy(state_object); +} + + +/** + * @function util_state_object_current_state + * @since_tizen 2.3 + * @description Util State Object Current State + * @parameter util_state_object*: Util State Object Pointer + * @return int + */ +int util_state_object_current_state(util_state_object *state_object) +{ + if(state_object==NULL || state_object->current==NULL || state_object->initiated==false) + return -1; + + return state_object->current->state; +} + + +/** + * @function util_state_object_current_state_name + * @since_tizen 2.3 + * @description Util State Object Current State Name + * @parameter util_state_object*: Util State Object Pointer + * @return const char* + */ +const char* util_state_object_current_state_name(util_state_object *state_object) +{ + if(state_object==NULL || state_object->current==NULL || state_object->initiated==false) + return NULL; + + return state_object->current->name; +} diff --git a/tbtcoreapp/src/utils/xml-util.c b/tbtcoreapp/src/utils/xml-util.c new file mode 100644 index 0000000..ee8d642 --- /dev/null +++ b/tbtcoreapp/src/utils/xml-util.c @@ -0,0 +1,304 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file xml-util.c + * @brief This file provide Util Funtction for writing XML Report. + * + * @author Muntasir Kabir Chowdhury (mk.chy@samsung.com) + * @date October, 2014 + * @bug + * @credit + */ + + +#include "utils/xml-util.h" +#include +#include +#include + + +static char chItoa_temp[15]; + + +/** + * @function xmlUtil_itoa + * @since_tizen 2.3 + * @description XmlUtil Itoa + * @parameter int: Int + * @return char* + */ +char* xmlUtil_itoa(int value) +{ + snprintf(chItoa_temp, sizeof(chItoa_temp), "%d", value); + return chItoa_temp; +} + + +/** + * @function xmlUtil_get_tbtinfo_by_apptype + * @since_tizen 2.3 + * @description XmlUtil Get Tbtinfo By Apptype + * @parameter const tbt_info*: Const tbt Info Pointer + * @return tbt_info* + */ +tbt_info* xmlUtil_get_tbtinfo_by_apptype(const tbt_info *infos,const int len,const int apptype) +{ + int i; + for(i=0;i3) moduleList[i].result=TBT_INFO_RESULT_NOT_TESTED; // set result not tested + passfail[moduleList[i].result]++; + } + + + + xmlTextWriterPtr writer; + writer = xmlNewTextWriterFilename(inputFilePath, 0); + xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL); + + char prefName[32]; + + // Xml Start + xmlTextWriterStartElement(writer, (xmlChar*)"tbt-core"); + { + // Device + xmlTextWriterStartElement(writer, (xmlChar*)"device-info"); + { + xmlTextWriterStartElement(writer, (xmlChar*)"device-model"); + { + if(device_id==NULL) + xmlTextWriterWriteAttribute(writer,(xmlChar*)"Name",(xmlChar*)"Unknown"); + else + { + xmlTextWriterWriteAttribute(writer,(xmlChar*)"Name",(xmlChar*)device_id); + free(device_id); + } + } + xmlTextWriterEndElement(writer); + + xmlTextWriterStartElement(writer, (xmlChar*)"device-name"); + { + if(device_name==NULL) + xmlTextWriterWriteAttribute(writer,(xmlChar*)"Name",(xmlChar*)"Unknown"); + else + { + xmlTextWriterWriteAttribute(writer,(xmlChar*)"Name",(xmlChar*)device_name); + free(device_name); + } + } + xmlTextWriterEndElement(writer); + + xmlTextWriterStartElement(writer, (xmlChar*)"device-platform"); + { + if(device_platfor_name==NULL) + xmlTextWriterWriteAttribute(writer,(xmlChar*)"Name",(xmlChar*)"Unknown"); + else + { + xmlTextWriterWriteAttribute(writer,(xmlChar*)"Name",(xmlChar*)device_platfor_name); + free(device_platfor_name); + } + } + xmlTextWriterEndElement(writer); + + + xmlTextWriterStartElement(writer, (xmlChar*)"system-country"); + { + if(device_country==NULL) + xmlTextWriterWriteAttribute(writer,(xmlChar*)"Name",(xmlChar*)"Unknown"); + else + { + xmlTextWriterWriteAttribute(writer,(xmlChar*)"Name",(xmlChar*)device_country); + free(device_country); + } + } + xmlTextWriterEndElement(writer); + + xmlTextWriterStartElement(writer, (xmlChar*)"system-language"); + { + if(device_language==NULL) + xmlTextWriterWriteAttribute(writer,(xmlChar*)"Name",(xmlChar*)"Unknown"); + else + { + xmlTextWriterWriteAttribute(writer,(xmlChar*)"Name",(xmlChar*)device_language); + free(device_language); + } + } + xmlTextWriterEndElement(writer); + } + xmlTextWriterEndElement(writer); + + + // Summary + xmlTextWriterStartElement(writer, (xmlChar*)"summary"); + { + // total + xmlTextWriterStartElement(writer, (xmlChar*)"Total"); + { + xmlTextWriterWriteAttribute(writer,(xmlChar*)"count",(xmlChar*)xmlUtil_itoa(testDataCount)); + } + xmlTextWriterEndElement(writer); + + // pass + xmlTextWriterStartElement(writer, (xmlChar*)passfailtext[TBT_INFO_RESULT_NOT_TESTED]); + { + xmlTextWriterWriteAttribute(writer,(xmlChar*)"count",(xmlChar*)xmlUtil_itoa(passfail[TBT_INFO_RESULT_NOT_TESTED])); + } + xmlTextWriterEndElement(writer); + + // fail + xmlTextWriterStartElement(writer, (xmlChar*)passfailtext[TBT_INFO_RESULT_PASS]); + { + xmlTextWriterWriteAttribute(writer,(xmlChar*)"count",(xmlChar*)xmlUtil_itoa(passfail[TBT_INFO_RESULT_PASS])); + } + xmlTextWriterEndElement(writer); + + // not tested + xmlTextWriterStartElement(writer, (xmlChar*)passfailtext[TBT_INFO_RESULT_FAIL]); + { + xmlTextWriterWriteAttribute(writer,(xmlChar*)"count",(xmlChar*)xmlUtil_itoa(passfail[TBT_INFO_RESULT_FAIL])); + } + xmlTextWriterEndElement(writer); + + // feature unsupported + xmlTextWriterStartElement(writer, (xmlChar*)passfailtext[TBT_INFO_RESULT_NOT_SUPPORTED]); + { + xmlTextWriterWriteAttribute(writer,(xmlChar*)"count",(xmlChar*)xmlUtil_itoa(passfail[TBT_INFO_RESULT_NOT_SUPPORTED])); + } + xmlTextWriterEndElement(writer); + + } + xmlTextWriterEndElement(writer); + // end of summary + + // module list start + xmlTextWriterStartElement(writer, (xmlChar*)"module-list"); + { + for (i = 0; i < testDataCount; i++) + { + test=&moduleList[i]; + + // module start + xmlTextWriterStartElement(writer, (xmlChar*)"module"); + { + xmlTextWriterWriteAttribute(writer,(xmlChar*)"name",(xmlChar*)test->name); + xmlTextWriterWriteAttribute(writer,(xmlChar*)"value",(xmlChar*)xmlUtil_itoa(test->result)); + xmlTextWriterWriteAttribute(writer,(xmlChar*)"apptype",(xmlChar*)xmlUtil_itoa(test->apptype)); + xmlTextWriterWriteAttribute(writer,(xmlChar*)"result",(xmlChar*)passfailtext[test->result]); + } + xmlTextWriterEndElement(writer); + // module end + + // lets save in preference also :) + snprintf(prefName, sizeof(prefName), "mod_%d",test->apptype); + preference_set_int (prefName, test->result); + + + } + } + xmlTextWriterEndElement(writer); + // module list end + } + xmlTextWriterEndElement(writer); + // XML end + + + + xmlTextWriterEndDocument(writer); + xmlFreeTextWriter(writer); +} + + +/** + * @function xmlUtil_readResults + * @since_tizen 2.3 + * @description XmlUtil ReadResults + * @parameter tbt_info*: Tbt Info Pointer + * @return bool + */ +bool xmlUtil_readResults(tbt_info *moduleList,const int len) +{ + int i,ret,val; + char prefName[32]; + for (i = 0; i < len; i++) + { + snprintf(prefName, sizeof(prefName), "mod_%d",moduleList[i].apptype); + ret = preference_get_int (prefName, &val); + if(ret==PREFERENCE_ERROR_NONE) + { + // save result + moduleList[i].result=val; + } + else + { + DBG("preference_get_int failed."); + } + } + + return true; + +} diff --git a/tbtcoreapp/src/view/tbt-animation-view.c b/tbtcoreapp/src/view/tbt-animation-view.c new file mode 100644 index 0000000..a58546b --- /dev/null +++ b/tbtcoreapp/src/view/tbt-animation-view.c @@ -0,0 +1,488 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-animation-view.c + * @brief covers rendering of various types of animation + * shows animation of rect, dimension, point and roation animation + * + * @author muntasir chowdhury(mk.chy@samsung.com), nazib ullah(nazib.ullah@samsung.com) + * @date October, 2014 + * @bug no known bug + * @credit + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_ANIMATION + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "utils/gl-types.h" +#include "view/tbt-common-view.h" +#include "view/tbt-animation-view.h" + +struct _animation_view +{ + common_view* view; + + int x; + int y; + int size; + + int x_pad; + int y_pad; + int screen_width; + int screen_height; + int toolbar_height; + + bool transit_flag; + gl_vector2 button_pos[4]; + + Ecore_Timer *timer; + + Evas_Object *button_lefttop; + Evas_Object *button_righttop; + Evas_Object *button_leftbottom; + Evas_Object *button_rightbottom; +}; + +static void transit_rect_animation(animation_view *this); +static void transit_point_animation(animation_view *this); +static void transit_dimension_animation(animation_view *this); +static void transit_rotation_animation(animation_view *this); +static void create_transit_button(animation_view *this); +static void get_screen_resolution(animation_view *this); +static Elm_Transit *create_transit(Evas_Object* button, Eina_Bool fade_add, Eina_Bool reverse_set); + +static void _app_destroy_cb(void* this); +static Eina_Bool _animation_view_timer_cb(void *data); + + +/** + * @function animation_view_add + * @since_tizen 2.3 + * @description Animation View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return animation_view* + */ +animation_view *animation_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + RETVM_IF(NULL == tbt_info, NULL, "tbt_info is null"); + animation_view *this = NULL; + this = calloc(1, sizeof(animation_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "animation_viewer"; + tbt_info->layout_file = get_edje_path("animation_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->x = 0; + this->y = 0; + + + this->screen_width = 0; + this->screen_height = 0; + this->transit_flag = true; + + this->toolbar_height = NAVI_TOOLBAR_HEIGHT; + + #ifdef DEVICE_TYPE_MOBILE + + this->size = 100; + this->x_pad = 50; + this->y_pad = 50 + this->toolbar_height; + + #endif + + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE) + { + this->size = 75; + this->x_pad = 80; + this->y_pad = 80; + } + else if(get_device_type() == DEVICE_WEARABLE_360_X_480) + { + this->size = 75; + this->x_pad = 80; + this->y_pad = 80; + } + else if(get_device_type() == DEVICE_WEARABLE_320_X_320) + { + this->size = 50; + this->x_pad = 100; + this->y_pad = 100; + } + else if(get_device_type() == DEVICE_WEARABLE_CIRCLE) + { + this->size = 50; + this->x_pad = 100; + this->y_pad = 100; + } + #endif + + + get_screen_resolution(this); + + create_transit_button(this); + + if(this->view->tbt_info->apptype == TBT_APP_ANIMATION_FADE) + { + elm_transit_go(create_transit(this->button_lefttop, EINA_TRUE, EINA_TRUE)); + elm_transit_go(create_transit(this->button_rightbottom, EINA_TRUE, EINA_TRUE)); + } + else if(this->view->tbt_info->apptype == TBT_APP_ANIMATION_POINT) + { + transit_point_animation(this); + } + else if(this->view->tbt_info->apptype == TBT_APP_ANIMATION_DIMENSION) + { + transit_dimension_animation(this); + } + else if(this->view->tbt_info->apptype == TBT_APP_ANIMATION_RECT) + { + transit_rect_animation(this); + } + else if(this->view->tbt_info->apptype == TBT_APP_ANIMATION_ROTATE) + { + transit_rotation_animation(this); + } + + this->timer = ecore_timer_add(5, _animation_view_timer_cb, this); + + return this; +} + + +/** + * @function create_transit_button + * @since_tizen 2.3 + * @description Create Transit Button + * @parameter animation_view*: Animation View Pointer + * @return static void + */ +static void create_transit_button(animation_view *this) +{ + RETM_IF(NULL == this, "view is NULL"); + + this->button_lefttop = ui_utils_push_button_add(this, this->view->layout, "I", NULL); + evas_object_move(this->button_lefttop, this->x_pad, this->y_pad); + evas_object_resize(this->button_lefttop, this->size, this->size); + evas_object_show(this->button_lefttop); + + this->button_righttop = ui_utils_push_button_add(this, this->view->layout, "II", NULL); + evas_object_move(this->button_righttop, (this->screen_width - this->x_pad - this->size), this->y_pad); + evas_object_resize(this->button_righttop, this->size, this->size); + evas_object_show(this->button_righttop); + + this->button_rightbottom = ui_utils_push_button_add(this, this->view->layout, "III", NULL); + evas_object_move(this->button_rightbottom, (this->screen_width - this->x_pad - this->size), (this->y_pad + this->screen_width - (2 * this->x_pad) - this->size)); + evas_object_resize(this->button_rightbottom, this->size, this->size); + evas_object_show(this->button_rightbottom); + + this->button_leftbottom = ui_utils_push_button_add(this, this->view->layout, "IV", NULL); + evas_object_move(this->button_leftbottom, this->x_pad, (this->y_pad + this->screen_width - (2 * this->x_pad) - this->size)); + evas_object_resize(this->button_leftbottom, this->size, this->size); + evas_object_show(this->button_leftbottom); +} + + +/** + * @function get_screen_resolution + * @since_tizen 2.3 + * @description Get Screen Resolution + * @parameter animation_view*: Animation View Pointer + * @return static void + */ +static void get_screen_resolution(animation_view *this) +{ + int result; + result = system_info_get_platform_int("tizen.org/feature/screen.width", &this->screen_width); + RETM_IF(result != 0, "tizen.org/feature/screen.width"); + + result = system_info_get_platform_int("tizen.org/feature/screen.height", &this->screen_height); + RETM_IF(result != 0, "tizen.org/feature/screen.height"); +} + + +/** + * @function create_transit + * @since_tizen 2.3 + * @description Create Transit + * @parameter Evas_Object*: Evas Object Pointer + * @return static Elm_Transit* + */ +static Elm_Transit *create_transit(Evas_Object* button, Eina_Bool fade_add, Eina_Bool reverse_set) +{ + RETVM_IF(NULL == button, NULL, "create_transit failed"); + Elm_Transit *transit = NULL; + transit = elm_transit_add(); + + elm_transit_object_add(transit, button); + elm_transit_event_enabled_set(transit, EINA_FALSE); + elm_transit_auto_reverse_set(transit, EINA_TRUE); + elm_transit_objects_final_state_keep_set(transit, EINA_FALSE); + elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_LINEAR); + elm_transit_repeat_times_set(transit, 0); + elm_transit_duration_set(transit, 2.0); + + if(fade_add == EINA_TRUE) + { + elm_transit_effect_fade_add(transit); + } + + elm_transit_auto_reverse_set(transit, reverse_set); + + + + return transit; +} + + +/** + * @function transit_point_animation + * @since_tizen 2.3 + * @description Transit Point Animation + * @parameter animation_view*: Animation View Pointer + * @return static void + */ +static void transit_point_animation(animation_view *this) +{ + RETM_IF(NULL == this, "view is NULL"); + + Elm_Transit *transit = NULL; + int to_dx = (this->screen_width - 2 * this->x_pad - this->size) / 2 - (this->size / 2); + int to_dy = to_dx; + + transit = create_transit(this->button_lefttop, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_translation_add(transit, 0, 0, to_dx, to_dy); + elm_transit_go(transit); + + transit = create_transit(this->button_righttop, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_translation_add(transit, 0, 0, -to_dx, to_dy); + elm_transit_go(transit); + + transit = create_transit(this->button_rightbottom, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_translation_add(transit, 0, 0, -to_dx, -to_dy); + elm_transit_go(transit); + + transit = create_transit(this->button_leftbottom, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_translation_add(transit, 0, 0, to_dx, -to_dy); + elm_transit_go(transit); +} + + +/** + * @function transit_rect_animation + * @since_tizen 2.3 + * @description Transit Rect Animation + * @parameter animation_view*: Animation View Pointer + * @return static void + */ +static void transit_rect_animation(animation_view *this) +{ + RETM_IF(NULL == this, "view is NULL"); + + float max_rate = 1.4; + Elm_Transit *transit = NULL; + + int to_dx = (this->screen_width - 2 * this->x_pad - this->size) / 2; + int to_dy = to_dx; + + transit = create_transit(this->button_lefttop, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_translation_add(transit, 0, 0, to_dx, to_dy-1.5*this->size*max_rate); + elm_transit_effect_zoom_add(transit, 1.0, max_rate); + elm_transit_go(transit); + + transit = create_transit(this->button_righttop, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_translation_add(transit, 0, 0, -to_dx, to_dy-0.5*this->size*max_rate); + elm_transit_effect_zoom_add(transit, 1.0, max_rate); + elm_transit_go(transit); + + transit = create_transit(this->button_rightbottom, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_translation_add(transit, 0, 0, -to_dx, -to_dy+1.5*this->size*max_rate); + elm_transit_effect_zoom_add(transit, 1.0, max_rate); + elm_transit_go(transit); + + transit = create_transit(this->button_leftbottom, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_translation_add(transit, 0, 0, to_dx, -to_dy+0.5*this->size*max_rate); + elm_transit_effect_zoom_add(transit, 1.0, max_rate); + elm_transit_go(transit); +} + + +/** + * @function transit_dimension_animation + * @since_tizen 2.3 + * @description Transit Dimension Animation + * @parameter animation_view*: Animation View Pointer + * @return static void + */ +static void transit_dimension_animation(animation_view *this) +{ + RETM_IF(NULL == this, "view is NULL"); + float max_rate = 1.3; + Elm_Transit *transit = NULL; + transit = create_transit(this->button_lefttop, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + + elm_transit_effect_zoom_add(transit, max_rate, 1.0); + elm_transit_go(transit); + + transit = create_transit(this->button_righttop, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + + elm_transit_effect_zoom_add(transit, 1.0, max_rate); + elm_transit_go(transit); + + transit = create_transit(this->button_rightbottom, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_zoom_add(transit, 1.0, max_rate); + elm_transit_go(transit); + + transit = create_transit(this->button_leftbottom, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_zoom_add(transit, max_rate, 1.0); + elm_transit_go(transit); +} + + +/** + * @function transit_rotation_animation + * @since_tizen 2.3 + * @description Transit Rotation Animation + * @parameter animation_view*: Animation View Pointer + * @return static void + */ +static void transit_rotation_animation(animation_view *this) +{ + RETM_IF(NULL == this, "view is NULL"); + + Elm_Transit *transit = NULL; + + transit = create_transit(this->button_lefttop, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_rotation_add(transit, 0, 180.0); + elm_transit_go(transit); + + transit = create_transit(this->button_righttop, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_rotation_add(transit, 0, 180.0); + elm_transit_go(transit); + + transit = create_transit(this->button_rightbottom, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_rotation_add(transit, 0, 180.0); + elm_transit_go(transit); + + transit = create_transit(this->button_leftbottom, EINA_FALSE, EINA_TRUE); + RETM_IF(NULL == transit, "transit is NULL"); + elm_transit_effect_rotation_add(transit, 0, 180.0); + elm_transit_go(transit); +} + + +/** + * @function _animation_view_timer_cb + * @since_tizen 2.3 + * @description Animation View Timer Cb + * @parameter void*: Void Pointer + * @return static Eina_Bool + */ +static Eina_Bool _animation_view_timer_cb(void *data) +{ + RETVM_IF(NULL == data, false,"data is NULL"); + + animation_view *this = NULL; + this = (animation_view*)data; + RETVM_IF(NULL == this, false,"view is NULL"); + + if(this->view->tbt_info->apptype == TBT_APP_ANIMATION_FADE) + { + this->transit_flag = !this->transit_flag; + + if(this->transit_flag == true) + { + elm_transit_go(create_transit(this->button_lefttop, EINA_TRUE, EINA_TRUE)); + elm_transit_go(create_transit(this->button_rightbottom, EINA_TRUE, EINA_TRUE)); + } + else + { + elm_transit_go(create_transit(this->button_righttop, EINA_TRUE, EINA_TRUE)); + elm_transit_go(create_transit(this->button_leftbottom, EINA_TRUE, EINA_TRUE)); + } + } + else if(this->view->tbt_info->apptype == TBT_APP_ANIMATION_POINT) + { + transit_point_animation(this); + } + else if(this->view->tbt_info->apptype == TBT_APP_ANIMATION_DIMENSION) + { + transit_dimension_animation(this); + } + else if(this->view->tbt_info->apptype == TBT_APP_ANIMATION_RECT) + { + transit_rect_animation(this); + } + else if(this->view->tbt_info->apptype == TBT_APP_ANIMATION_ROTATE) + { + transit_rotation_animation(this); + } + + return true; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + animation_view *view = NULL; + view = (animation_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + ecore_timer_del(view->timer); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-bluetooth-view.c b/tbtcoreapp/src/view/tbt-bluetooth-view.c new file mode 100644 index 0000000..bb508f2 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-bluetooth-view.c @@ -0,0 +1,3384 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-bluetooth-view.c + * @brief performs all the bluetooth related operations + * performs operations related to bluetooth adapter, bonding and pairing + * + * @author A. B. M. Nazibullah(nazib.ullah@samsung.com), nazmus saqib(saqib.nzms@samsung.com) + * @date October, 2014 + * @bug none + * @credit + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_BT + +#include +#include +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "utils/util_state_object.h" +#include "view/tbt-bluetooth-view.h" +#include "view/tbt-common-view.h" + +#define IS_ON_OFF_APP_AVAILABLE false +#define BT_PUSH_FILE_NAME "dial.png" + + + + +typedef enum{ + BT_DEACTIVATED=0, + BT_ACTIVATED, + BT_ACTIVATED_CLIENT, + BT_ACTIVATION_ATTEMPTED, + BT_ACTIVATION_BY_APP_FAILED, + BT_DISCOVERY_START_REQUESTED, + BT_PAIR_REQUEST_ATTEMPTED, + BT_UNPAIR_REQUEST_ATTEMPTED, + BT_BOND_CANCELLED, + BT_BOND_AUTH_FAILED, + BT_BOND_TIMED_OUT, + BT_BOND_REMOTE_DEVICE_NOT_FOUND, + BT_DISCOVERED_DEVICE_CLICKED, + BT_BOND_CLIENT_SUCCESSFULLY_CREATED, + BT_SUCCESSFULLY_UNPAIRED, + +} bt_state_machine_states; + +typedef enum{ + BT_ON_ATTEMPT=0, + BT_APP_CONTROL_SUCCESSFULL_ACTIVATION, + BT_APP_CONTROL_ACTIVATION_FAILURE, + BT_ADAPTER_ON, + BT_ADAPTER_ON_CLIENT, + BT_START_DISCOVERY_REQUEST, + BT_SELECT_DISCOVERED_DEVICE, + BT_ADAPTER_ATTEMP_PAIR, + BT_ADAPTER_ATTEMP_UNPAIR, + BT_BOND_SUCCESS, + BT_BOND_AUTH_FAIL, + BT_BOND_TIME_OUT, + BT_BOND_DEVICE_LOST, + BT_BOND_CANCEL, + BT_UNPAIR_SUCCESS, + +} bt_state_machine_feed_values; + +struct _bluetooth_view +{ + common_view* view; + + GList *devices_list; + GList *bonded_devices_list; + GList *selected_device_profile_list; + GList *service_list; + + Evas_Object *action_btn; + Evas_Object *bluetooth_btn; + Evas_Object *bluetooth_list; + Evas_Object *bluetooth_label; + Evas_Object *bluetooth_check; + Evas_Object *bluetooth_check_label; + Evas_Object *bluetooth_check_button; + + Elm_Object_Item *selected_device_item; + + util_state_object *state_object_bt_server_pair, *state_object_bt_client_pair; + + bt_adapter_state_e adapter_state; + bt_adapter_visibility_mode_e visibility_mode; + bt_adapter_device_discovery_state_e discovery_state; + bool is_discovering; + + bt_adapter_device_discovery_info_s *selected_device_info; + int no_of_profiles; + + int server_socket_fd; + bool rfcomm_created; + bool rfcomm_client_connected; + int opp_transfer_id; + bool is_opp_server_accecpt; + bool is_opp_server_push_progress; + bool is_opp_push_cancelled; + char* hdp_app_id; + unsigned int hdp_channel; + bool hdp_send_data_flag; + + player_h bt_player; +}; + +#define BT_ADAPTER_DEVICE_DISCOVERY_NONE -1 + +bool is_bluetooth_app_exist = false; + +static void adapter_device_error(int result); +static int adapter_on_off_request_send(bluetooth_view *this); +static int send_rfcomm_send_client_data(bluetooth_view *this); +static int create_rfcomm_server(bluetooth_view *this); +static Evas_Object *add_control_layout(bluetooth_view *this, Evas_Object *parent); +static void update_view_controls(bluetooth_view *this); +static void discovered_devices_list_show(bluetooth_view *this); +static bool is_new_device_found(bluetooth_view *this, bt_adapter_device_discovery_info_s *discovery_info); +static void set_connected_profiles(bluetooth_view *this); +static int update_bonded_devices(bluetooth_view *this); + +static gint bluetooth_list_find_func_cb(gconstpointer a, gconstpointer b); +static void bluetooth_list_free_func_cb(gpointer data); + +static void _app_destroy_cb(void* this); +static void _device_item_selected_cb(void *data, Evas_Object *obj, void *event_info); + +static void _control_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void _control_button_bluetooth_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void _cancel_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); + +static void _adapter_state_changed_cb(int result, bt_adapter_state_e adapter_state, void* data); +static void _adapter_device_discovery_state_changed_cb(int result, bt_adapter_device_discovery_state_e discovery_state, bt_adapter_device_discovery_info_s *discovery_info, void* data); +static void _adapter_device_bond_destroyed_cb(int result, char *remote_address, void *data); +static void _adapter_device_bond_created_cb(int result, bt_device_info_s *device_info, void *data); +static void _adapter_socket_data_received_cb(bt_socket_received_data_s *socket_data, void *data); +static void _adapter_socket_connection_state_changed_cb(int result, bt_socket_connection_state_e connection_state, bt_socket_connection_s *connection, void *data); +static bool _adapter_bonded_device_cb(bt_device_info_s *device_info, void *data); +static void _adapter_visibility_mode_changed_cb(int result, bt_adapter_visibility_mode_e visibility_mode, void *data); +static void _adapter_authorization_changed_cb(bt_device_authorization_e authorization, char *remote_address, void *data); +static void _adapter_visibility_duration_changed_cb(int duration, void *data); +static void _adapter_opp_client_push_finished_cb(int result, const char *remote_address, void *data); +static void _adapter_opp_client_push_responded_cb(int result, const char *remote_address, void *data); +static void _adapter_opp_client_push_progress_cb(const char *file, long long size, int percent, void *data); +static bool _adapter_device_connected_profile_cb(bt_profile_e profile, void *data); +static void _adapter_bt_audio_connection_state_changed_cb(int result, bool connected, const char *remote_address, bt_audio_profile_type_e type, void *user_data); +static void _adapter_bt_device_service_searched_cb(int result, bt_device_sdp_info_s *sdp_info, void *user_data); +static void _adpter_bt_opp_server_connection_requested_cb(const char *remote_address, void *user_data); +static void _adpter_bt_opp_server_transfer_progress_cb_for_opp(const char *file, long long size, int percent, void *user_data); +static void _adapter_bt_opp_server_transfer_finished_cb_for_opp(int result, const char *file, long long size, void *user_data); + +static GList* bt_get_service_name(bt_service_class_t service_enum); +static char* get_bluetooth_error(bt_error_e error); + +static char* get_bt_profile_name(bt_profile_e profile); + +static void setup_state_machine(bluetooth_view *this); +static void _bt_util_state_object_state_changed_cb_server_pair(int previous,int now,int feed,void *user_data,void *feed_data); +static void _bt_util_state_object_state_changed_cb_client_pair(int previous,int now,int feed,void *user_data,void *feed_data); +static void do_bt_state_common_check(bluetooth_view *this, int now, void *feed_data); +static void do_bt_common_feed(bluetooth_view *this, int feed_value, void* feed_data); +static void _bt_hid_host_connection_state_changed_cb(int result, bool connected, const char *remote_address, void *user_data); +static void _bt_avrcp_target_connection_state_changed_cb(bool connected, const char *remote_address, void *user_data); +static void _bt_avrcp_equalizer_state_changed_cb(bt_avrcp_equalizer_state_e equalizer, void *user_data); +static void _bt_avrcp_repeat_mode_changed_cb(bt_avrcp_repeat_mode_e repeat, void *user_data); +static void _bt_avrcp_shuffle_mode_changed_cb(bt_avrcp_shuffle_mode_e shuffle, void *user_data); +static void _bt_avrcp_scan_mode_changed_cb(bt_avrcp_scan_mode_e scan, void *user_data); + +static void _bt_hdp_connected_cb(int result, const char *remote_address, const char *app_id,bt_hdp_channel_type_e type, unsigned int channel, void *user_data); +static void _bt_hdp_disconnected_cb(int result, const char *remote_address, unsigned int channel, void *user_data); +static void _bt_hdp_data_received_cb(unsigned int channel, const char *data, unsigned int size, void *user_data); + + +/** + * @function bluetooth_view_add + * @since_tizen 2.3 + * @description Bluetooth View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return bluetooth_view* + */ +bluetooth_view *bluetooth_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + RETVM_IF(NULL == tbt_info, NULL, "tbt_info is null"); + + int result; + bluetooth_view *this = NULL; + this = calloc(1, sizeof(bluetooth_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + this->devices_list = NULL; + this->bonded_devices_list = NULL; + this->selected_device_profile_list = NULL; + this->service_list = NULL; + this->discovery_state = BT_ADAPTER_DEVICE_DISCOVERY_NONE; + this->rfcomm_created = false; + this->rfcomm_client_connected = false; + this->no_of_profiles = 0; + this->hdp_app_id = NULL; + this->hdp_channel = 0; + this->hdp_send_data_flag = false; + this->is_opp_push_cancelled = false; + + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE_320_X_320) + { + elm_theme_overlay_add(NULL, get_edje_path("custom_button.edj")); + } + #endif + + if(tbt_info->apptype == TBT_APP_BT_CLIENT_PAIRED || tbt_info->apptype == TBT_APP_BT_OPP_CLIENT) + { + tbt_info->layout_group = "bluetooth_viewer_cancel_check"; + } + else + { + tbt_info->layout_group = "bluetooth_viewer"; + } + tbt_info->layout_file = get_edje_path("bluetooth_viewer.edj"); + + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(NULL == this->view, NULL, "view is null"); + + this->bluetooth_label = ui_utils_label_add(this->view->layout, "Bluetooth"); + elm_object_part_content_set(this->view->layout, "bluetooth_text", this->bluetooth_label); + + this->bluetooth_list = elm_list_add(this->view->layout); + RETVM_IF(!this->bluetooth_list, NULL, "elm_list_add failed"); + evas_object_data_set(this->bluetooth_list, "bluetooth_view", this); + elm_object_part_content_set(this->view->layout, "bluetooth_list", this->bluetooth_list); + + if(strcmp(tbt_info->layout_group, "bluetooth_viewer_cancel_check") == 0) + { + Evas_Object *table = elm_table_add(this->view->layout); + if(tbt_info->apptype == TBT_APP_BT_CLIENT_PAIRED) + { + this->bluetooth_check_label = ui_utils_label_add(table, "Cancel Pair"); + this->bluetooth_check = ui_utils_check_add(this, table); + elm_table_pack(table, this->bluetooth_check_label, 1, 0, 1, 1); + elm_table_pack(table, this->bluetooth_check, 2, 0, 1, 1); + elm_check_state_set (this->bluetooth_check, EINA_FALSE); + + + } + else if(tbt_info->apptype == TBT_APP_BT_OPP_CLIENT) + { + DBG("CANCEL BUTTON!!"); + this->bluetooth_check_button = ui_utils_push_button_add(this, table, "Cancel Transfer", _cancel_button_pressed_cb); + elm_table_pack(table, this->bluetooth_check_button, 1, 0, 1, 1); + elm_object_disabled_set(this->bluetooth_check_button, EINA_TRUE); + + } + elm_object_part_content_set(this->view->layout, "check_part", table); + evas_object_show(table); + } + + + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + + setup_state_machine(this); + + bt_initialize(); + + //Check whether the Bluetooth Service is enabled + result = bt_adapter_get_state(&this->adapter_state); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_adapter_get_state Failed"); + + result = bt_adapter_set_state_changed_cb(_adapter_state_changed_cb , this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_adapter_set_state_changed_cb Failed"); + + result = bt_adapter_set_device_discovery_state_changed_cb(_adapter_device_discovery_state_changed_cb, this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_adapter_set_device_discovery_state_changed_cb Failed"); + + result = bt_device_set_bond_created_cb(_adapter_device_bond_created_cb, this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_device_set_bond_created_cb Failed"); + + result = bt_device_set_bond_destroyed_cb(_adapter_device_bond_destroyed_cb, this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_device_set_bond_destroyed_cb Failed"); + + result = bt_adapter_set_visibility_mode_changed_cb(_adapter_visibility_mode_changed_cb, this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_adapter_set_visibility_mode_changed_cb Failed"); + + result = bt_adapter_set_visibility_duration_changed_cb(_adapter_visibility_duration_changed_cb, this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_adapter_set_visibility_duration_changed_cb Failed"); + + result = bt_device_set_authorization_changed_cb (_adapter_authorization_changed_cb, this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_device_set_authorization_changed_cb Failed"); + + result = bt_socket_set_data_received_cb(_adapter_socket_data_received_cb, this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_device_set_authorization_changed_cb Failed"); + + result = bt_socket_set_connection_state_changed_cb(_adapter_socket_connection_state_changed_cb, this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_socket_set_connection_state_changed_cb Failed"); + + + + if(this->view->tbt_info->apptype == TBT_APP_BT_HDP) + { + result = bt_hdp_set_connection_state_changed_cb(_bt_hdp_connected_cb, _bt_hdp_disconnected_cb, this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_hdp_set_connection_state_changed_cb error: %s", get_bluetooth_error(result)); + result = bt_hdp_set_data_received_cb(_bt_hdp_data_received_cb, this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_hdp_set_data_received_cb error: %s", get_bluetooth_error(result)); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_SDP) + { + result = bt_device_set_service_searched_cb(_adapter_bt_device_service_searched_cb, this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_device_set_service_searched_cb Failed"); + } + + update_view_controls(this); + + return this; +} + + +/** + * @function setup_state_machine + * @since_tizen 2.3 + * @description Setup State Machine + * @parameter bluetooth_view*: Bluetooth View Pointer + * @return static void + */ +static void setup_state_machine(bluetooth_view *this) +{ + RETM_IF(NULL == this, "setup_state_machine Failed"); + + if(this->view->tbt_info->apptype == TBT_APP_BT_SERVER_PAIRED) + { + this->state_object_bt_server_pair = util_state_object_create("bt_server_pair"); + + util_state_object_add_state(this->state_object_bt_server_pair,"BT_DEACTIVATED",BT_DEACTIVATED); + util_state_object_add_state(this->state_object_bt_server_pair,"BT_ACTIVATION_ATTEMPTED",BT_ACTIVATION_ATTEMPTED); + util_state_object_add_state(this->state_object_bt_server_pair,"BT_ACTIVATED",BT_ACTIVATED); + util_state_object_add_state(this->state_object_bt_server_pair,"BT_ACTIVATION_BY_APP_FAILED",BT_ACTIVATION_BY_APP_FAILED); + + util_state_object_add_transition(this->state_object_bt_server_pair,BT_DEACTIVATED, BT_ON_ATTEMPT, BT_ACTIVATION_ATTEMPTED); + util_state_object_add_transition(this->state_object_bt_server_pair,BT_DEACTIVATED, BT_ADAPTER_ON, BT_ACTIVATED); + util_state_object_add_transition(this->state_object_bt_server_pair,BT_ACTIVATION_ATTEMPTED, BT_APP_CONTROL_ACTIVATION_FAILURE, BT_ACTIVATION_BY_APP_FAILED); + util_state_object_add_transition(this->state_object_bt_server_pair,BT_ACTIVATION_BY_APP_FAILED, BT_ADAPTER_ON, BT_ACTIVATED); + util_state_object_add_transition(this->state_object_bt_server_pair,BT_ACTIVATION_ATTEMPTED, BT_APP_CONTROL_SUCCESSFULL_ACTIVATION, BT_ACTIVATED); + + util_state_object_init(this->state_object_bt_server_pair, BT_DEACTIVATED,_bt_util_state_object_state_changed_cb_server_pair,this); + util_state_object_info(this->state_object_bt_server_pair); + } + + if(this->view->tbt_info->apptype == TBT_APP_BT_OPP_CLIENT || + this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT || + this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT_HANDSFREE || + this->view->tbt_info->apptype == TBT_APP_BT_AUTHORIZATION || + this->view->tbt_info->apptype == TBT_APP_BT_PROFILES || + this->view->tbt_info->apptype == TBT_APP_BT_CLIENT_SOCKET || + this->view->tbt_info->apptype == TBT_APP_BT_CLIENT_PAIRED || + this->view->tbt_info->apptype == TBT_APP_BT_SDP || + this->view->tbt_info->apptype == TBT_APP_BT_HID_CONNECT || + this->view->tbt_info->apptype == TBT_APP_BT_AVRCP || + this->view->tbt_info->apptype == TBT_APP_BT_AG || + this->view->tbt_info->apptype == TBT_APP_BT_HDP + ) + { + this->state_object_bt_client_pair = util_state_object_create("bt_client_pair"); + + util_state_object_add_state(this->state_object_bt_client_pair,"BT_DEACTIVATED",BT_DEACTIVATED); + util_state_object_add_state(this->state_object_bt_client_pair,"BT_ACTIVATION_ATTEMPTED",BT_ACTIVATION_ATTEMPTED); + util_state_object_add_state(this->state_object_bt_client_pair,"BT_ACTIVATED_CLIENT",BT_ACTIVATED_CLIENT); + util_state_object_add_state(this->state_object_bt_client_pair,"BT_ACTIVATION_BY_APP_FAILED",BT_ACTIVATION_BY_APP_FAILED); + util_state_object_add_state(this->state_object_bt_client_pair,"BT_DISCOVERY_START_REQUESTED",BT_DISCOVERY_START_REQUESTED); + util_state_object_add_state(this->state_object_bt_client_pair,"BT_PAIR_REQUEST_ATTEMPTED",BT_PAIR_REQUEST_ATTEMPTED); + util_state_object_add_state(this->state_object_bt_client_pair,"BT_UNPAIR_REQUEST_ATTEMPTED",BT_UNPAIR_REQUEST_ATTEMPTED); + util_state_object_add_state(this->state_object_bt_client_pair,"BT_DISCOVERED_DEVICE_CLICKED",BT_DISCOVERED_DEVICE_CLICKED); + util_state_object_add_state(this->state_object_bt_client_pair,"BT_SUCCESSFULLY_UNPAIRED",BT_SUCCESSFULLY_UNPAIRED); + + util_state_object_add_state(this->state_object_bt_client_pair,"BT_BOND_SUCCESSFULLY_CREATED",BT_BOND_CLIENT_SUCCESSFULLY_CREATED); + util_state_object_add_state(this->state_object_bt_client_pair,"BT_BOND_ERROR_CANCELLED",BT_BOND_CANCELLED); + util_state_object_add_state(this->state_object_bt_client_pair,"BT_BOND_ERROR_AUTH_FAILED",BT_BOND_AUTH_FAILED); + util_state_object_add_state(this->state_object_bt_client_pair,"BT_BOND_ERROR_TIMED_OUT",BT_BOND_TIMED_OUT); + util_state_object_add_state(this->state_object_bt_client_pair,"BT_BOND_ERROR_REMOTE_DEVICE_NOT_FOUND",BT_BOND_REMOTE_DEVICE_NOT_FOUND); + + util_state_object_add_transition(this->state_object_bt_client_pair,BT_DEACTIVATED, BT_ON_ATTEMPT, BT_ACTIVATION_ATTEMPTED); + util_state_object_add_transition(this->state_object_bt_client_pair,BT_DEACTIVATED, BT_ADAPTER_ON_CLIENT, BT_ACTIVATED_CLIENT); + util_state_object_add_transition(this->state_object_bt_client_pair,BT_ACTIVATION_ATTEMPTED, BT_APP_CONTROL_ACTIVATION_FAILURE, BT_ACTIVATION_BY_APP_FAILED); + util_state_object_add_transition(this->state_object_bt_client_pair,BT_ACTIVATION_BY_APP_FAILED, BT_ADAPTER_ON_CLIENT, BT_ACTIVATED_CLIENT); + util_state_object_add_transition(this->state_object_bt_client_pair,BT_ACTIVATION_ATTEMPTED, BT_APP_CONTROL_SUCCESSFULL_ACTIVATION, BT_ACTIVATED_CLIENT); + util_state_object_add_transition(this->state_object_bt_client_pair,BT_ACTIVATED_CLIENT, BT_START_DISCOVERY_REQUEST, BT_DISCOVERY_START_REQUESTED); + util_state_object_add_transition(this->state_object_bt_client_pair,BT_DISCOVERY_START_REQUESTED, BT_SELECT_DISCOVERED_DEVICE, BT_DISCOVERED_DEVICE_CLICKED); + + util_state_object_add_transition(this->state_object_bt_client_pair,BT_DISCOVERED_DEVICE_CLICKED, BT_ADAPTER_ATTEMP_PAIR, BT_PAIR_REQUEST_ATTEMPTED); + util_state_object_add_transition(this->state_object_bt_client_pair,BT_DISCOVERED_DEVICE_CLICKED, BT_ADAPTER_ATTEMP_UNPAIR, BT_UNPAIR_REQUEST_ATTEMPTED); + + util_state_object_add_transition(this->state_object_bt_client_pair,BT_PAIR_REQUEST_ATTEMPTED, BT_BOND_SUCCESS, BT_BOND_CLIENT_SUCCESSFULLY_CREATED); + util_state_object_add_transition(this->state_object_bt_client_pair,BT_PAIR_REQUEST_ATTEMPTED, BT_BOND_CANCEL, BT_BOND_CANCELLED); + util_state_object_add_transition(this->state_object_bt_client_pair,BT_PAIR_REQUEST_ATTEMPTED, BT_BOND_AUTH_FAIL, BT_BOND_AUTH_FAILED); + util_state_object_add_transition(this->state_object_bt_client_pair,BT_PAIR_REQUEST_ATTEMPTED, BT_BOND_TIME_OUT, BT_BOND_TIMED_OUT); + util_state_object_add_transition(this->state_object_bt_client_pair,BT_PAIR_REQUEST_ATTEMPTED, BT_BOND_DEVICE_LOST, BT_BOND_REMOTE_DEVICE_NOT_FOUND); + + util_state_object_add_transition(this->state_object_bt_client_pair,BT_BOND_CLIENT_SUCCESSFULLY_CREATED, BT_SELECT_DISCOVERED_DEVICE, BT_DISCOVERED_DEVICE_CLICKED); + util_state_object_add_transition(this->state_object_bt_client_pair,BT_UNPAIR_REQUEST_ATTEMPTED, BT_UNPAIR_SUCCESS, BT_SUCCESSFULLY_UNPAIRED); + + util_state_object_add_transition(this->state_object_bt_client_pair,BT_SUCCESSFULLY_UNPAIRED, BT_SELECT_DISCOVERED_DEVICE, BT_DISCOVERED_DEVICE_CLICKED); + + + util_state_object_init(this->state_object_bt_client_pair, BT_DEACTIVATED,_bt_util_state_object_state_changed_cb_client_pair,this); + util_state_object_info(this->state_object_bt_client_pair); + } + +} + + +/** + * @function update_view_controls + * @since_tizen 2.3 + * @description Update View Controls + * @parameter bluetooth_view*: Bluetooth View Pointer + * @return static void + */ +static void update_view_controls(bluetooth_view *this) +{ + DBG("update_view_controls"); + RETM_IF(NULL == this, "update_view_controls Failed"); + int result; + + //Check whether the Bluetooth Service is enabled + result = bt_adapter_get_state(&this->adapter_state); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_get_state fail > Error = %d", result); + + //If the Bluetooth Service is not enabled + if(this->adapter_state == BT_ADAPTER_DISABLED) + { + DBG("Adapter state Disabled"); + this->discovery_state = BT_ADAPTER_DEVICE_DISCOVERY_NONE; + elm_object_disabled_set(this->action_btn, EINA_TRUE); + elm_object_disabled_set(this->bluetooth_btn, EINA_FALSE); + elm_object_text_set(this->bluetooth_btn, "Bluetooth On"); + ui_utils_label_set_text(this->bluetooth_label, "Bluetooth is Switched Off", "left"); + } + else if(this->adapter_state == BT_ADAPTER_ENABLED) + { + if(this->state_object_bt_client_pair) + { + if(this->discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_STARTED) + { + if(this->view->tbt_info->apptype == TBT_APP_BT_OPP_CLIENT || + this->view->tbt_info->apptype == TBT_APP_BT_AUTHORIZATION || + this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT || + this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT_HANDSFREE || + this->view->tbt_info->apptype == TBT_APP_BT_HID_CONNECT || + this->view->tbt_info->apptype == TBT_APP_BT_AVRCP || + this->view->tbt_info->apptype == TBT_APP_BT_SDP || + this->view->tbt_info->apptype == TBT_APP_BT_AG || + this->view->tbt_info->apptype == TBT_APP_BT_HDP + ) + + { + elm_object_disabled_set(this->action_btn, EINA_TRUE); + } + + elm_object_disabled_set(this->bluetooth_btn, EINA_TRUE); + elm_object_text_set(this->bluetooth_btn, "Discover"); + ui_utils_label_set_text(this->bluetooth_label, "Discovery Started...", "left"); + discovered_devices_list_show(this); + } + else if(this->discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FOUND) + { + elm_object_disabled_set(this->bluetooth_btn, EINA_TRUE); + elm_object_text_set(this->bluetooth_btn, "Discover"); + ui_utils_label_set_text(this->bluetooth_label, "Discovery Found...", "left"); + discovered_devices_list_show(this); + } + else if(this->discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FINISHED) + { +// result = bt_adapter_stop_device_discovery(); +// RETM_IF(result != BT_ERROR_NONE, "bt_adapter_stop_device_discovery fail > Error = %s", get_bluetooth_error(result)); + this->discovery_state = BT_ADAPTER_DEVICE_DISCOVERY_NONE; + + elm_object_disabled_set(this->bluetooth_btn, EINA_FALSE); + elm_object_text_set(this->bluetooth_btn, "Discover"); + ui_utils_label_set_text(this->bluetooth_label, "Discovery Finished...", "left"); + } + else + { + DBG("I am here !! and current state is %d", util_state_object_current_state(this->state_object_bt_client_pair)); + do_bt_common_feed(this, BT_ADAPTER_ON_CLIENT, NULL); + return; + } + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_SERVER_PAIRED || + this->view->tbt_info->apptype == TBT_APP_BT_SERVER_SOCKET || + this->view->tbt_info->apptype == TBT_APP_BT_OPP_SERVER) + { + int duration; + bt_adapter_visibility_mode_e mode; + + result = bt_adapter_get_visibility(&mode, &duration); + DBG("bt_adapter_get_visibility visibility duration %d", duration); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_get_visibility fail > Error = %d", result); + + if(mode == BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE ) + { + if(this->is_opp_server_accecpt == EINA_FALSE) + { + elm_object_disabled_set(this->bluetooth_btn, TRUE); + elm_object_text_set(this->bluetooth_btn, "Set Visible"); + ui_utils_label_set_text(this->bluetooth_label, "Device is not visible", "left"); + } + } + else + { + if(this->is_opp_server_accecpt == EINA_FALSE) + { + elm_object_disabled_set(this->bluetooth_btn, EINA_TRUE); + elm_object_text_set(this->bluetooth_btn, "Set Visible"); + char *local_name; + result = bt_adapter_get_name(&local_name); + RETM_IF(result != APP_ERROR_NONE, "bt_adapter_get_name fail > Error = %d", result); + char* str = format_string("'%s' is visible",local_name); + ui_utils_label_set_text(this->bluetooth_label, str, "left"); + SAFE_DELETE(str); + SAFE_DELETE(local_name); + } + } + + if(this->view->tbt_info->apptype == TBT_APP_BT_SERVER_SOCKET) + { + DBG("TBT_APP_BT_SERVER_SOCKET"); + result = create_rfcomm_server(this); + RETM_IF(result != BT_ERROR_NONE,"create_rfcomm_server fail > Error = %d", result); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_OPP_SERVER && this->is_opp_server_accecpt == EINA_FALSE) + { + DBG("TBT_APP_BT_OPP_SERVER"); + result = bt_opp_server_initialize_by_connection_request(get_storage_image_dir_path(), _adpter_bt_opp_server_connection_requested_cb,this); + DBG("bt_opp_server_initialize_by_connection_request %s %s ", get_bluetooth_error(result), app_get_resource_path()); + RETM_IF(result != BT_ERROR_NONE, "[bt_opp_server_initialize_by_connection_request] Failed. > Error = %s", get_bluetooth_error(result)); + } + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT || + this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT_HANDSFREE || + this->view->tbt_info->apptype == TBT_APP_BT_HID_CONNECT || + this->view->tbt_info->apptype == TBT_APP_BT_AVRCP || + this->view->tbt_info->apptype == TBT_APP_BT_AG || + this->view->tbt_info->apptype == TBT_APP_BT_SDP || + this->view->tbt_info->apptype == TBT_APP_BT_HDP) + { + elm_object_text_set(this->bluetooth_btn, "Bluetooth Off"); + ui_utils_label_set_text(this->bluetooth_label, "Bluetooth is Switched On", "left"); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_AUTHORIZATION) + { + elm_object_text_set(this->bluetooth_btn, "Bluetooth Off"); + ui_utils_label_set_text(this->bluetooth_label, "Bluetooth is Switched On", "left"); + } + } +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter bluetooth_view*: Bluetooth View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(bluetooth_view *this, Evas_Object *parent) +{ + DBG("add_control_layout__"); + + RETVM_IF(NULL == this, NULL, "view is NULL"); + RETVM_IF(NULL == parent, NULL, "parent is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + + + this->bluetooth_btn = ui_utils_push_button_add(this, table, "Bluetooth", _control_button_bluetooth_pressed_cb); + RETVM_IF(NULL == this->bluetooth_btn, NULL, "this->bluetooth_btn is NULL"); + elm_table_pack(table, this->bluetooth_btn, 0, 0, 1, 1); + + if(this->view->tbt_info->apptype == TBT_APP_BT_OPP_CLIENT) + { + this->action_btn = ui_utils_push_button_add(this, table, "Send File", _control_button_pressed_cb); + RETVM_IF(NULL == this->action_btn, NULL, "this->action_btn is NULL"); + elm_table_pack(table, this->action_btn, 1, 0, 1, 1); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT) + { + this->action_btn = ui_utils_push_button_add(this, table, "Connect Audio", _control_button_pressed_cb); + RETVM_IF(NULL == this->action_btn, NULL, "this->action_btn is NULL"); + elm_table_pack(table, this->action_btn, 1, 0, 1, 1); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_HDP) + { + this->action_btn = ui_utils_push_button_add(this, table, "Connect HDP", _control_button_pressed_cb); + RETVM_IF(NULL == this->action_btn, NULL, "this->action_btn is NULL"); + elm_table_pack(table, this->action_btn, 1, 0, 1, 1); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_HID_CONNECT) + { + this->action_btn = ui_utils_push_button_add(this, table, "Connect HID", _control_button_pressed_cb); + RETVM_IF(NULL == this->action_btn, NULL, "this->action_btn is NULL"); + elm_table_pack(table, this->action_btn, 1, 0, 1, 1); + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_SDP) + { + this->action_btn = ui_utils_push_button_add(this, table, "Connected Services", _control_button_pressed_cb); + RETVM_IF(NULL == this->action_btn, NULL, "this->action_btn is NULL"); + elm_table_pack(table, this->action_btn, 1, 0, 1, 1); + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_AVRCP) + { + this->action_btn = ui_utils_push_button_add(this, table, "Connect AVRCP", _control_button_pressed_cb); + RETVM_IF(NULL == this->action_btn, NULL, "this->action_btn is NULL"); + elm_table_pack(table, this->action_btn, 1, 0, 1, 1); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_AG) + { + this->action_btn = ui_utils_push_button_add(this, table, "Connect AG", _control_button_pressed_cb); + RETVM_IF(NULL == this->action_btn, NULL, "this->action_btn is NULL"); + elm_table_pack(table, this->action_btn, 1, 0, 1, 1); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT_HANDSFREE) + { + this->action_btn = ui_utils_push_button_add(this, table, "Handsfree", _control_button_pressed_cb); + RETVM_IF(NULL == this->action_btn, NULL, "this->action_btn is NULL"); + elm_table_pack(table, this->action_btn, 1, 0, 1, 1); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_AUTHORIZATION) + { + this->action_btn = ui_utils_push_button_add(this, table, "Authorize", _control_button_pressed_cb); + RETVM_IF(NULL == this->action_btn, NULL, "this->action_btn is NULL"); + elm_table_pack(table, this->action_btn, 1, 0, 1, 1); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_CLIENT_SOCKET) + { + this->action_btn = ui_utils_push_button_add(this, table, "Send Data", _control_button_pressed_cb); + RETVM_IF(NULL == this->action_btn, NULL, "this->action_btn is NULL"); + elm_table_pack(table, this->action_btn, 1, 0, 1, 1); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_OPP_SERVER) + { + this->action_btn = ui_utils_push_button_add(this, table, "Cancel", _control_button_pressed_cb); + RETVM_IF(NULL == this->action_btn, NULL, "this->action_btn is NULL"); + elm_table_pack(table, this->action_btn, 1, 0, 1, 1); + elm_object_disabled_set(this->action_btn, EINA_TRUE); + this->is_opp_server_accecpt = EINA_FALSE; + this->is_opp_server_push_progress = EINA_FALSE; + } + + return table; +} + + +/** + * @function adapter_on_off_request_send + * @since_tizen 2.3 + * @description Adapter On Off Request Send + * @parameter bluetooth_view*: Bluetooth View Pointer + * @return static int + */ +static int adapter_on_off_request_send(bluetooth_view *this) +{ + DBG(" adapter_on_off_request_send "); + RETVM_IF(NULL == this, -1, "view is NULL"); + int result = 0; + app_control_h service = NULL; + + result = app_control_create(&service); + RETVM_IF(result != APP_CONTROL_ERROR_NONE, 0, "app_control_create fail > Error = %d", result); + if(service == NULL) + { + DBG("service_create failed!\n"); + return -1; + } + + result = app_control_set_operation(service, "http://tizen.org/appcontrol/operation/configure/bluetooth/onoff"); + DBG("app_control_set_operation is %d", result); + RETVM_IF(result != APP_CONTROL_ERROR_NONE, 0, "app_control_set_operation fail > Error = %d", result); + + result = app_control_send_launch_request(service, NULL, NULL); + if(result != APP_CONTROL_ERROR_NONE) + { + do_bt_common_feed(this, BT_APP_CONTROL_ACTIVATION_FAILURE, NULL); + return 0 ; + } + + is_bluetooth_app_exist = true; + result = app_control_destroy(service); + RETVM_IF(result != APP_CONTROL_ERROR_NONE, 0, "app_control_destroy fail > Error = %d", result); + + return 0; +} + + +/** + * @function send_rfcomm_send_client_data + * @since_tizen 2.3 + * @description Send Rfcomm Send Client Data + * @parameter bluetooth_view*: Bluetooth View Pointer + * @return static int + */ +static int send_rfcomm_send_client_data(bluetooth_view *this) +{ + DBG(" send_rfcomm_send_client_data "); + RETVM_IF(NULL == this, -1, "bluetooth_view is NULL"); + int result; + + result = bt_adapter_get_state(&this->adapter_state); + RETVM_IF(result != BT_ERROR_NONE, result,"bt_adapter_get_state fail > Error = %d", result); + + if(this->view->tbt_info->apptype == TBT_APP_BT_CLIENT_SOCKET && this->adapter_state == BT_ADAPTER_ENABLED) + { + { + DBG("Creating rfcomm connection with: %s, UUID: %s", this->selected_device_info->remote_address, BLUETOOTH_SOCKET_UUID); + result = bt_socket_connect_rfcomm (this->selected_device_info->remote_address,BLUETOOTH_SOCKET_UUID); + RETVM_IF(result != BT_ERROR_NONE, result,"bt_socket_connect_rfcomm fail > Error = %d", result); + this->rfcomm_client_connected = true; + } + } + + return result; +} + + +/** + * @function create_rfcomm_server + * @since_tizen 2.3 + * @description Create Rfcomm Server + * @parameter bluetooth_view*: Bluetooth View Pointer + * @return static int + */ +static int create_rfcomm_server(bluetooth_view *this) +{ + DBG("create_rfcomm_server__"); + RETVM_IF(NULL == this, -1, "bluetooth_view is NULL"); + int result; + result = bt_adapter_get_state(&this->adapter_state); + RETVM_IF(result != BT_ERROR_NONE, result,"bt_adapter_get_state fail > Error = %d", result); + + if(this->view->tbt_info->apptype == TBT_APP_BT_SERVER_SOCKET && this->adapter_state == BT_ADAPTER_ENABLED) + { + if(this->rfcomm_created == true) + { + DBG("Destroying rfcomm server"); + result = bt_socket_destroy_rfcomm(this->server_socket_fd); + RETVM_IF(result != BT_ERROR_NONE, result,"[bt_socket_destroy_rfcomm] Failed. > Error = %d", result); + this->rfcomm_created = true; + } + + char* local_address = NULL; + bt_adapter_get_address(&local_address); + DBG("Creating rfcomm server on device %s ",local_address); + result = bt_socket_create_rfcomm(BLUETOOTH_SOCKET_UUID, &this->server_socket_fd); + DBG("bt_socket_create_rfcomm return value is %d", result); + RETVM_IF(result != BT_ERROR_NONE, result,"[bt_socket_create_rfcomm] Failed. > Error = %d", result); + DBG("Created rfcomm server server_socket_fd: %d", this->server_socket_fd); + + result = bt_socket_listen_and_accept_rfcomm (this->server_socket_fd, 32); + DBG("bt_socket_listen_and_accept_rfcomm return value is %d", result); + RETVM_IF(result != BT_ERROR_NONE, result,"[bt_socket_listen_and_accept_rfcomm] Failed. > Error = %d", result); + + SAFE_DELETE(local_address); + } + + return result; + +} + + +/** + * @function is_new_device_found + * @since_tizen 2.3 + * @description Is New Device Found + * @parameter bluetooth_view*: Bluetooth View Pointer, bt_adapter_device_discovery_info_s*: Bt Adapter Device Discovery Info S Pointer + * @return static bool + */ +static bool is_new_device_found(bluetooth_view *this, bt_adapter_device_discovery_info_s *discovery_info) +{ + DBG(" is_new_device_found "); + RETVM_IF(NULL == this, false, "view is NULL"); + RETVM_IF(NULL == discovery_info, false, "discovery_info is NULL"); + GList *old_device = NULL; + int result = false; + + old_device = g_list_find_custom (this->devices_list, discovery_info, bluetooth_list_find_func_cb); + + if(old_device == NULL) + { + result = true; + } + + return result; +} + + +/** + * @function discovered_devices_list_show + * @since_tizen 2.3 + * @description Discovered Devices List Show + * @parameter bluetooth_view*: Bluetooth View Pointer + * @return static void + */ +static void discovered_devices_list_show(bluetooth_view *this) +{ + DBG(" discovered_devices_list_show "); + RETM_IF(NULL == this, "view is NULL"); + + elm_list_clear(this->bluetooth_list); + + GList *l; + bt_adapter_device_discovery_info_s *device_info; + + for(l = this->devices_list; l != NULL; l = l->next) + { + device_info = (bt_adapter_device_discovery_info_s*)l->data; + + if(NULL != device_info) + { + if(device_info->is_bonded == false) + { + elm_list_item_append(this->bluetooth_list, device_info->remote_name, NULL, NULL, _device_item_selected_cb, device_info); + } + else + { + elm_list_item_append(this->bluetooth_list, format_string("%s(Paired)", device_info->remote_name), NULL, NULL, _device_item_selected_cb, device_info); + } + } + } + + elm_list_go(this->bluetooth_list); + evas_object_show(this->bluetooth_list); +} + + +/** + * @function set_connected_profiles + * @since_tizen 2.3 + * @description Set Connected Profiles + * @parameter bluetooth_view*: Bluetooth View Pointer + * @return static void + */ +static void set_connected_profiles(bluetooth_view *this) +{ + DBG(" set_connected_profiles "); + RETM_IF(NULL == this, "view is NULL"); + + int result = 0; + + DBG("set_connected_profiles called"); + this->no_of_profiles = 0; + + if(this->view->tbt_info->apptype == TBT_APP_BT_PROFILES && this->selected_device_info != NULL && this->selected_device_info->is_bonded == true) + { + result = bt_audio_initialize(); + adapter_device_error(result); + RETM_IF(result != BT_ERROR_NONE, "bt_audio_initialize fail > Error = %d", result); + + result = bt_audio_set_connection_state_changed_cb(_adapter_bt_audio_connection_state_changed_cb, this); + + RETM_IF(result != BT_ERROR_NONE, "bt_audio_set_connection_state_changed_cb fail > Error = %d", result); + + if(this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT && this->selected_device_info != NULL) + { + result = bt_audio_connect(this->selected_device_info->remote_address, BT_AUDIO_PROFILE_TYPE_A2DP); + RETM_IF(result != BT_ERROR_NONE, "bt_audio_connect fail > Error = %d", result); + + elm_object_disabled_set(this->action_btn, EINA_TRUE); + } + + if(this->selected_device_info != NULL) + { + result = bt_audio_connect(this->selected_device_info->remote_address, BT_AUDIO_PROFILE_TYPE_A2DP); + RETM_IF(result != BT_ERROR_NONE, "bt_audio_connect fail > Error = %d", result); + + elm_object_disabled_set(this->action_btn, EINA_TRUE); + } + + if(this->selected_device_profile_list != NULL) + { + g_list_free_full(this->selected_device_profile_list, bluetooth_list_free_func_cb); + this->selected_device_profile_list = NULL; + } + } +} + + +/** + * @function update_bonded_devices + * @since_tizen 2.3 + * @description Update Bonded Devices + * @parameter bluetooth_view*: Bluetooth View Pointer + * @return static int + */ +static int update_bonded_devices(bluetooth_view *this) +{ + DBG(" update_bonded_devices "); + RETVM_IF(NULL == this, -1, "view is NULL"); + + int result = 0; + if(this->adapter_state == BT_ADAPTER_ENABLED) + { + result = bt_adapter_foreach_bonded_device(_adapter_bonded_device_cb, this); + RETVM_IF(result != BT_ERROR_NONE, result,"bt_adapter_foreach_bonded_device fail > Error = %d", result); + + if(this->bonded_devices_list) + { + g_list_free_full(this->bonded_devices_list, bluetooth_list_free_func_cb); + this->bonded_devices_list = NULL; + } + + } + return result; +} + + +/** + * @function _bt_hdp_connected_cb + * @since_tizen 2.3 + * @description Bt Hdp Connected Cb + * @parameter int: Int, const char*: Const char Pointer, const char*: Const char Pointer, bt_hdp_channel_type_e: Bt Hdp Channel Type E, void*: Void Pointer + * @return static void + */ +static void _bt_hdp_connected_cb(int result, const char *remote_address, const char *app_id,bt_hdp_channel_type_e type, unsigned int channel, void *user_data) +{ + DBG("Inside _bt_hdp_connected_cb..."); + bluetooth_view *this = NULL; + this = (bluetooth_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == remote_address, "remote_address is NULL"); + RETM_IF(NULL == app_id, "app_id is NULL"); + DBG("result: %d", result); + DBG("remote_address: %s", remote_address); + DBG("app_id: %s", app_id); + DBG("channel type: %d", type); + DBG("channel: %d", channel); + this->hdp_channel = channel; + + if(this->hdp_send_data_flag == false && this->hdp_channel >0) + { + ui_utils_label_set_text(this->bluetooth_label, "HDP Connected", "left"); + ui_utils_label_set_text(this->action_btn, "Get Data", "left"); + this->hdp_send_data_flag = true; + } + else + { + ui_utils_label_set_text(this->bluetooth_label, "Try to Connect Again", "left"); + } +} + + +/** + * @function _bt_hdp_disconnected_cb + * @since_tizen 2.3 + * @description Bt Hdp Disconnected Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _bt_hdp_disconnected_cb(int result, const char *remote_address, unsigned int channel, void *user_data) +{ + DBG("Inside _bt_hdp_disconnected_cb..."); + + bluetooth_view *this = NULL; + this = (bluetooth_view*) user_data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == remote_address, "remote_address is NULL"); + + DBG("result: %d", result); + DBG("remote_address: %s", remote_address); + DBG("channel: %d", channel); + + ui_utils_label_set_text(this->bluetooth_label, "HDP Disconnected", "left"); + this->hdp_channel = 0; + this->hdp_send_data_flag = false; +} + + +/** + * @function _bt_hdp_data_received_cb + * @since_tizen 2.3 + * @description Bt Hdp Data Received Cb + * @parameter const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _bt_hdp_data_received_cb(unsigned int channel, const char *data, unsigned int size, void *user_data) +{ + DBG("Inside _bt_hdp_data_received_cb..."); + + bluetooth_view *this = NULL; + this = (bluetooth_view*) user_data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == data, "data is NULL"); + + DBG("channel: %d", channel); + DBG("data: %s", data); + DBG("size: %d", size); + + char* str; + str = format_string("Data Recieved: %s", data); + ui_utils_label_set_text(this->bluetooth_label, str, "left"); + SAFE_DELETE(str); +} + + +/** + * @function adapter_device_error + * @since_tizen 2.3 + * @description Adapter Device Error + * @parameter int: Int + * @return static void + */ +static void adapter_device_error(int result) +{ + if(result != BT_ERROR_NONE) + { + if(result == BT_ERROR_CANCELLED) + { + DBG("BT_ERROR_CANCELLED"); + } + else if(result == BT_ERROR_INVALID_PARAMETER) + { + DBG("BT_ERROR_INVALID_PARAMETER"); + } + else if(result == BT_ERROR_OUT_OF_MEMORY) + { + DBG("BT_ERROR_OUT_OF_MEMORY"); + } + else if(result == BT_ERROR_RESOURCE_BUSY) + { + DBG("BT_ERROR_RESOURCE_BUSY"); + } + else if(result == BT_ERROR_TIMED_OUT) + { + DBG("BT_ERROR_TIMED_OUT"); + } + else if(result == BT_ERROR_NOW_IN_PROGRESS) + { + DBG("BT_ERROR_NOW_IN_PROGRESS"); + } + else if(result == BT_ERROR_PERMISSION_DENIED) + { + DBG("BT_ERROR_PERMISSION_DENIED"); + } + else if(result == BT_ERROR_QUOTA_EXCEEDED) + { + DBG("BT_ERROR_QUOTA_EXCEEDED"); + } + else if(result == BT_ERROR_NOT_INITIALIZED) + { + DBG("BT_ERROR_NOT_INITIALIZED"); + } + else if(result == BT_ERROR_NOT_ENABLED) + { + DBG("BT_ERROR_NOT_ENABLED"); + } + else if(result == BT_ERROR_ALREADY_DONE) + { + DBG("BT_ERROR_ALREADY_DONE"); + } + else if(result == BT_ERROR_OPERATION_FAILED) + { + DBG("BT_ERROR_OPERATION_FAILED"); + } + else if(result == BT_ERROR_NOT_IN_PROGRESS) + { + DBG("BT_ERROR_NOT_IN_PROGRESS"); + } + else if(result == BT_ERROR_REMOTE_DEVICE_NOT_BONDED) + { + DBG("BT_ERROR_REMOTE_DEVICE_NOT_BONDED"); + } + else if(result == BT_ERROR_AUTH_REJECTED) + { + DBG("BT_ERROR_AUTH_REJECTED"); + } + else if(result == BT_ERROR_AUTH_FAILED) + { + DBG("BT_ERROR_AUTH_FAILED"); + } + else if(result == BT_ERROR_REMOTE_DEVICE_NOT_FOUND) + { + DBG("BT_ERROR_REMOTE_DEVICE_NOT_FOUND"); + } + else if(result == BT_ERROR_SERVICE_SEARCH_FAILED) + { + DBG("BT_ERROR_SERVICE_SEARCH_FAILED"); + } + else if(result == BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED) + { + DBG("BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED"); + } + else if(result == BT_ERROR_AGAIN) + { + DBG("BT_ERROR_AGAIN"); + } + else if(result == BT_ERROR_SERVICE_NOT_FOUND) + { + DBG("BT_ERROR_SERVICE_NOT_FOUND"); + } + else + { + DBG("[bt_device_bond_created_cb] Failed. result(%d).", result); + } + + } +} + + +/** + * @function _control_button_pressed_cb + * @since_tizen 2.3 + * @description Control Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _control_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG(" _control_button_pressed_cb "); + + RETM_IF(NULL == data, "data is NULL"); + + int result; + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + if(this->view->tbt_info->apptype == TBT_APP_BT_OPP_CLIENT) + { + result = bt_opp_client_initialize(); + RETM_IF(result != BT_ERROR_NONE, "bt_opp_client_initialize fail > Error = %d", result); + + result = bt_opp_client_add_file(get_shared_resource_path(this->view->tbt_info->file_name)); + RETM_IF(result != BT_ERROR_NONE, "bt_opp_client_add_file fail > Error = %d", result); + + if(this->selected_device_info != NULL) + { + result = bt_opp_client_push_files(this->selected_device_info->remote_address, _adapter_opp_client_push_responded_cb, _adapter_opp_client_push_progress_cb, _adapter_opp_client_push_finished_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_opp_client_push_files fail > Error = %d", result); + + elm_object_disabled_set(this->action_btn, EINA_TRUE); + } + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_AUTHORIZATION && + this->selected_device_info != NULL) + { + result = bt_device_set_authorization(this->selected_device_info->remote_address, BT_DEVICE_AUTHORIZED); + RETM_IF(result != BT_ERROR_NONE, "bt_device_set_authorization fail > Error = %d", result); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_CLIENT_SOCKET && + this->selected_device_info != NULL) + { + DBG("inside TBT_APP_BT_CLIENT_SOCKET"); + result = send_rfcomm_send_client_data(this); + RETM_IF(result != BT_ERROR_NONE,"send_rfcomm_send_client_data fail > Error = %d", result); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_OPP_SERVER && + this->is_opp_server_accecpt == EINA_TRUE) + { + result = bt_opp_server_reject(); + DBG("bt_opp_server_reject :%d",result); + ui_utils_label_set_text(this->bluetooth_label, "Connection rejected.", "left"); + RETM_IF(result != BT_ERROR_NONE, "bt_opp_server_reject fail > Error = %d", result); + } + else if((this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT || + this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT_HANDSFREE || + this->view->tbt_info->apptype == TBT_APP_BT_AG) && + this->selected_device_info != NULL) + { + + result = bt_audio_initialize(); + DBG("BT_AUDIO INITIALIZED"); + RETM_IF(result != BT_ERROR_NONE, "bt_audio_initialize fail > Error = %d", result); + + result = bt_audio_set_connection_state_changed_cb(_adapter_bt_audio_connection_state_changed_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_audio_set_connection_state_changed_cb fail > Error = %d", result); + + if(this->selected_device_info != NULL) + { + if(this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT ) + { + result = bt_audio_connect(this->selected_device_info->remote_address, BT_AUDIO_PROFILE_TYPE_A2DP); + RETM_IF(result != BT_ERROR_NONE, "bt_audio_connect fail > Error = %d", result); + } + + else + { + result = bt_audio_connect(this->selected_device_info->remote_address, BT_AUDIO_PROFILE_TYPE_HSP_HFP); + RETM_IF(result != BT_ERROR_NONE, "bt_audio_connect fail > Error = %d", result); + } + + elm_object_disabled_set(this->action_btn, EINA_TRUE); + + + } + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_HDP) + { + + if(this->hdp_send_data_flag == false && this->selected_device_info != NULL) + { + //DO HDP Stuff + result = bt_hdp_connect_to_source(this->selected_device_info->remote_address, this->hdp_app_id); + RETM_IF(result != BT_ERROR_NONE, "bt_hdp_connect_to_source error: %s", get_bluetooth_error(result)); + } + else + { + char data[] = {'a', 'a', 'a'}; //arbitrary value + DBG("channel: %d", this->hdp_channel); + result = bt_hdp_send_data(this->hdp_channel, data, sizeof(data)); + RETM_IF(result != BT_ERROR_NONE, "bt_hdp_send_data error: %s", get_bluetooth_error(result)); + this->hdp_send_data_flag = false; + elm_object_disabled_set(this->action_btn, EINA_TRUE); + } + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_HID_CONNECT) + { + //HID Connect code goes here + result = bt_hid_host_initialize(_bt_hid_host_connection_state_changed_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_hid_host_initialize fail > Error = %s", get_bluetooth_error(result)); + if(this->selected_device_info != NULL) + { + result = bt_hid_host_connect(this->selected_device_info->remote_address); + RETM_IF(result != BT_ERROR_NONE, "bt_hid_host_connect fail > Error = %s", get_bluetooth_error(result)); + } + + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_SDP) + { + //SDP code goes here + + GList *l; + elm_list_clear(this->bluetooth_list); + elm_object_text_set(this->bluetooth_label, "Connected Service Classes:"); + for(l = this->service_list; l != NULL; l = l->next) + { + elm_list_item_append(this->bluetooth_list, l->data, NULL, NULL, NULL, NULL); + } + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_AVRCP) + { + //AVRCP connect goes here + DBG("bt_avrcp_target_initialize going to be called.."); + result = bt_avrcp_target_initialize(_bt_avrcp_target_connection_state_changed_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_avrcp_target_initialize fail > Error = %s", get_bluetooth_error(result)); + result = bt_avrcp_set_equalizer_state_changed_cb(_bt_avrcp_equalizer_state_changed_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_avrcp_set_equalizer_state_changed_cb fail > Error = %s", get_bluetooth_error(result)); + result = bt_avrcp_set_repeat_mode_changed_cb(_bt_avrcp_repeat_mode_changed_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_avrcp_set_repeat_mode_changed_cb fail > Error = %s", get_bluetooth_error(result)); + result = bt_avrcp_set_shuffle_mode_changed_cb(_bt_avrcp_shuffle_mode_changed_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_avrcp_set_shuffle_mode_changed_cb fail > Error = %s", get_bluetooth_error(result)); + result = bt_avrcp_set_scan_mode_changed_cb(_bt_avrcp_scan_mode_changed_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_avrcp_set_scan_mode_changed_cb fail > Error = %s", get_bluetooth_error(result)); + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_AG) + { + #ifdef TBT_MODULE_APP_BT_AG + result = bt_audio_connect(this->selected_device_info->remote_address, BT_AUDIO_PROFILE_TYPE_AG); + RETM_IF(result != BT_ERROR_NONE, "bt_audio_connect fail > Error = %s", get_bluetooth_error(result)); + + result = bt_ag_notify_voice_recognition_state(false); + RETM_IF(result != BT_ERROR_NONE, "bt_ag_notify_voice_recognition_state fail > Error = %d", result); + + bool isOpened; + result = bt_ag_is_sco_opened(&isOpened); + RETM_IF(result != BT_ERROR_NONE, "bt_ag_is_sco_opened fail > Error = %s", get_bluetooth_error(result)); + + result = bt_ag_set_sco_state_changed_cb(_bt_ag_sco_state_changed_cb, this); + RETM_IF(result != BT_ERROR_NONE, "_bt_ag_sco_state_changed_cb fail > Error = %s", get_bluetooth_error(result)); + if(!isOpened) + { + result = bt_ag_open_sco(); + RETM_IF(result != BT_ERROR_NONE, "bt_ag_is_sco_opened fail > Error = %s", get_bluetooth_error(result)); + } + #endif + } + +} + + +/** + * @function _cancel_button_pressed_cb + * @since_tizen 2.3 + * @description Cancel Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _cancel_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG(" _cancel_button_pressed_cb "); + + RETM_IF(NULL == data, "data is NULL"); + + int result; + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + result = bt_opp_client_cancel_push(); + RETM_IF(result != BT_ERROR_NONE, "bt_opp_client_cancel_push fail > Error = %d", result); + elm_object_disabled_set(this->bluetooth_check_button, EINA_TRUE); + this->is_opp_push_cancelled = true; +} + + +/** + * @function _control_button_bluetooth_pressed_cb + * @since_tizen 2.3 + * @description Control Button Bluetooth Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _control_button_bluetooth_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG(" _control_button_bluetooth_pressed_cb "); + + RETM_IF(NULL == data, "data is NULL"); + + int result; + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + //Check whether the Bluetooth Service is enabled + result = bt_adapter_get_state(&this->adapter_state); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_get_state fail > Error = %d", result); + + //If the Bluetooth Service is not enabled + if(this->adapter_state == BT_ADAPTER_DISABLED) + { + do_bt_common_feed(this, BT_ON_ATTEMPT, NULL); + } + else if(this->adapter_state == BT_ADAPTER_ENABLED) + { + result = update_bonded_devices(this); + RETM_IF(result != BT_ERROR_NONE, "update_bonded_devices fail > Error = %d", result); + update_view_controls(this); + + if(this->state_object_bt_client_pair) + { + do_bt_common_feed(this, BT_START_DISCOVERY_REQUEST, NULL); + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_SERVER_PAIRED || + this->view->tbt_info->apptype == TBT_APP_BT_SERVER_SOCKET || + this->view->tbt_info->apptype == TBT_APP_BT_OPP_SERVER) + { + int duration; + bt_adapter_visibility_mode_e mode; + + result = bt_adapter_get_visibility(&mode, &duration); + RETM_IF(result != BT_ERROR_NONE, "[bt_adapter_get_visibility] Failed. > Error = %d", result); + + if(mode == BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE) + { +// result = bt_adapter_set_visibility(BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE, 60); +// adapter_device_error(result); +// RETM_IF(result != BT_ERROR_NONE, "[bt_adapter_set_visibility] Failed. > Error = %d", result); + DBG("BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE"); + + } + if(this->view->tbt_info->apptype == TBT_APP_BT_SERVER_SOCKET) + { + result = bt_socket_create_rfcomm(BLUETOOTH_SOCKET_UUID, &this->server_socket_fd); + RETM_IF(result != BT_ERROR_NONE, "[bt_socket_create_rfcomm] Failed. > Error = %d", result); + + result = bt_socket_listen_and_accept_rfcomm (this->server_socket_fd, 3); + RETM_IF(result != BT_ERROR_NONE, "[bt_socket_listen_and_accept_rfcomm] Failed. > Error = %d", result); + } + if(this->view->tbt_info->apptype == TBT_APP_BT_OPP_SERVER) + { + if( this->is_opp_server_accecpt == true && this->is_opp_server_push_progress == EINA_FALSE) + { + result = bt_opp_server_accept(_adpter_bt_opp_server_transfer_progress_cb_for_opp, _adapter_bt_opp_server_transfer_finished_cb_for_opp, NULL, this, &(this->opp_transfer_id) ); + RETM_IF(result != BT_ERROR_NONE, "[bt_opp_server_accept] Failed. > Error = %d", result); + } + else if(this->is_opp_server_push_progress == EINA_TRUE) + { + result = bt_opp_server_cancel_transfer(this->opp_transfer_id); + RETM_IF(result != BT_ERROR_NONE, "[bt_opp_server_cancel_transfer] Failed. > Error = %d", result); + } + } + + } + } +} + + +/** + * @function _adapter_state_changed_cb + * @since_tizen 2.3 + * @description Adapter State Changed Cb + * @parameter int: Int, void*: Void Pointer + * @return static void + */ +static void _adapter_state_changed_cb(int result, bt_adapter_state_e adapter_state, void* data) +{ + DBG(" _adapter_state_changed_cb "); + + RETM_IF(NULL == data, "data is NULL"); + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + if(result != BT_ERROR_NONE) + { + DBG("[adapter_state_changed_cb] Failed! result=%d", result); + return; + } + + if(this->state_object_bt_client_pair) + { + do_bt_common_feed(this, BT_ADAPTER_ON_CLIENT, (void*)&adapter_state); + } + else + { + do_bt_common_feed(this, BT_ADAPTER_ON, (void*)&adapter_state); + } + +} + + +/** + * @function _adapter_device_discovery_state_changed_cb + * @since_tizen 2.3 + * @description Adapter Device Discovery State Changed Cb + * @parameter int: Int, bt_adapter_device_discovery_info_s*: Bt Adapter Device Discovery Info S Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_device_discovery_state_changed_cb(int result, bt_adapter_device_discovery_state_e discovery_state, bt_adapter_device_discovery_info_s *discovery_info, void* data) +{ + DBG(" _adapter_device_discovery_state_changed_cb "); + + RETM_IF(NULL == data, "data is NULL"); + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + adapter_device_error(result); + + this->discovery_state = discovery_state; + + if(this->discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_STARTED) + { + g_list_free_full(this->devices_list, bluetooth_list_free_func_cb); + this->devices_list = NULL; + } + else if(this->discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FOUND) + { + if(discovery_info) + { + if(is_new_device_found(this, discovery_info) == true) + { + if(this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT || this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT_HANDSFREE || this->view->tbt_info->apptype == TBT_APP_BT_PROFILES) + { + if(discovery_info->bt_class.major_device_class == BT_MAJOR_DEVICE_CLASS_AUDIO_VIDEO && + discovery_info->bt_class.minor_device_class == BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_WEARABLE_HEADSET) + { + bt_adapter_device_discovery_info_s * device_info; + device_info = malloc(sizeof(bt_adapter_device_discovery_info_s)); + + if(device_info != NULL) + { + memcpy(device_info, discovery_info, sizeof(bt_adapter_device_discovery_info_s)); + device_info->remote_address = strdup(discovery_info->remote_address); + device_info->remote_name = strdup(discovery_info->remote_name); + + //Hold the last deviceinfo pointer; + this->devices_list = g_list_append(this->devices_list, (gpointer)device_info); + } + } + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_AVRCP) + { + + if(discovery_info->bt_class.major_device_class == BT_MAJOR_DEVICE_CLASS_AUDIO_VIDEO) + { + bt_adapter_device_discovery_info_s * device_info; + device_info = malloc(sizeof(bt_adapter_device_discovery_info_s)); + + if(device_info != NULL) + { + memcpy(device_info, discovery_info, sizeof(bt_adapter_device_discovery_info_s)); + device_info->remote_address = strdup(discovery_info->remote_address); + device_info->remote_name = strdup(discovery_info->remote_name); + + //Hold the last deviceinfo pointer; + this->devices_list = g_list_append(this->devices_list, (gpointer)device_info); + } + } + + + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_AG) + { + + + if(discovery_info->bt_class.major_device_class == BT_MAJOR_DEVICE_CLASS_AUDIO_VIDEO) + { + bt_adapter_device_discovery_info_s * device_info; + device_info = malloc(sizeof(bt_adapter_device_discovery_info_s)); + + if(device_info != NULL) + { + memcpy(device_info, discovery_info, sizeof(bt_adapter_device_discovery_info_s)); + device_info->remote_address = strdup(discovery_info->remote_address); + device_info->remote_name = strdup(discovery_info->remote_name); + + //Hold the last deviceinfo pointer; + this->devices_list = g_list_append(this->devices_list, (gpointer)device_info); + } + } + + + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_HID_CONNECT) + { + + if(discovery_info->bt_class.major_device_class == BT_MAJOR_DEVICE_CLASS_PERIPHERAL &&( + discovery_info->bt_class.minor_device_class == BT_MINOR_DEVICE_CLASS_PERIPHERAL_KEY_BOARD || + discovery_info->bt_class.minor_device_class == BT_MINOR_DEVICE_CLASS_PERIPHERAL_POINTING_DEVICE || + discovery_info->bt_class.minor_device_class == BT_MINOR_DEVICE_CLASS_PERIPHERAL_COMBO_KEYBOARD_POINTING_DEVICE || + discovery_info->bt_class.minor_device_class == BT_MINOR_DEVICE_CLASS_PERIPHERAL_JOYSTICK || + discovery_info->bt_class.minor_device_class == BT_MINOR_DEVICE_CLASS_PERIPHERAL_GAME_PAD || + discovery_info->bt_class.minor_device_class == BT_MINOR_DEVICE_CLASS_PERIPHERAL_REMOTE_CONTROL || + discovery_info->bt_class.minor_device_class == BT_MINOR_DEVICE_CLASS_PERIPHERAL_SENSING_DEVICE || + discovery_info->bt_class.minor_device_class == BT_MINOR_DEVICE_CLASS_PERIPHERAL_DIGITIZER_TABLET || + discovery_info->bt_class.minor_device_class == BT_MINOR_DEVICE_CLASS_PERIPHERAL_DIGITAL_PEN || + discovery_info->bt_class.minor_device_class == BT_MINOR_DEVICE_CLASS_PERIPHERAL_HANDHELD_GESTURAL_INPUT_DEVICE)) + { + bt_adapter_device_discovery_info_s * device_info; + device_info = malloc(sizeof(bt_adapter_device_discovery_info_s)); + + if(device_info != NULL) + { + memcpy(device_info, discovery_info, sizeof(bt_adapter_device_discovery_info_s)); + device_info->remote_address = strdup(discovery_info->remote_address); + device_info->remote_name = strdup(discovery_info->remote_name); + + //Hold the last deviceinfo pointer; + this->devices_list = g_list_append(this->devices_list, (gpointer)device_info); + } + } + + + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_HDP) + { + //Filter Health Device only + if(discovery_info->bt_class.major_device_class == BT_MAJOR_DEVICE_CLASS_HEALTH) + { + bt_adapter_device_discovery_info_s * device_info; + device_info = malloc(sizeof(bt_adapter_device_discovery_info_s)); + + if(device_info != NULL) + { + memcpy(device_info, discovery_info, sizeof(bt_adapter_device_discovery_info_s)); + device_info->remote_address = strdup(discovery_info->remote_address); + device_info->remote_name = strdup(discovery_info->remote_name); + + //Hold the last deviceinfo pointer; + this->devices_list = g_list_append(this->devices_list, (gpointer)device_info); + } + } + + } + + else + { + bt_adapter_device_discovery_info_s * device_info; + device_info = malloc(sizeof(bt_adapter_device_discovery_info_s)); + + if(device_info != NULL) + { + memcpy(device_info, discovery_info, sizeof(bt_adapter_device_discovery_info_s)); + device_info->remote_address = strdup(discovery_info->remote_address); + device_info->remote_name = strdup(discovery_info->remote_name); + + //Hold the last deviceinfo pointer; + this->devices_list = g_list_append(this->devices_list, (gpointer)device_info); + } + } + } + } + } + + update_view_controls(this); +} + + +/** + * @function _device_item_selected_cb + * @since_tizen 2.3 + * @description Device Item Selected Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _device_item_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG(" _device_item_selected_cb "); + + RETM_IF(!data, "data is NULL"); + + RETM_IF(!obj, "obj is NULL"); + + bluetooth_view *this; + this = evas_object_data_get(obj, "bluetooth_view"); + RETM_IF(!this, "view is NULL"); + + bt_adapter_device_discovery_info_s *device_info; + device_info = (bt_adapter_device_discovery_info_s*)data; + RETM_IF(NULL == device_info, "bt_adapter_device_discovery_info_s is NULL"); + + Elm_Object_Item *item; + item = (Elm_Object_Item*)event_info; + elm_list_item_selected_set(item, EINA_TRUE); + this->selected_device_item = item; + do_bt_common_feed(this, BT_SELECT_DISCOVERED_DEVICE, (void*)device_info); +} + + +/** + * @function _adapter_visibility_mode_changed_cb + * @since_tizen 2.3 + * @description Adapter Visibility Mode Changed Cb + * @parameter int: Int, void*: Void Pointer + * @return static void + */ +static void _adapter_visibility_mode_changed_cb(int result, bt_adapter_visibility_mode_e visibility_mode, void *data) +{ + DBG(" _adapter_visibility_mode_changed_cb "); + + RETM_IF(NULL == data, "data is NULL"); + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(result != BT_ERROR_NONE, "result : %s", get_bluetooth_error(result)); + + int ret; + + this->visibility_mode = visibility_mode; + + if(this->view->tbt_info->apptype == TBT_APP_BT_SERVER_PAIRED || + this->view->tbt_info->apptype == TBT_APP_BT_SERVER_SOCKET) + { + if(is_bluetooth_app_exist == true) + { + if(visibility_mode == BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE) + { + elm_object_disabled_set(this->bluetooth_btn, EINA_FALSE); + elm_object_text_set(this->bluetooth_btn, "Set Visible"); + ui_utils_label_set_text(this->bluetooth_label, "Devices is not visible", "left"); + } + else if(visibility_mode == BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE) + { + elm_object_disabled_set(this->bluetooth_btn, EINA_TRUE); + elm_object_text_set(this->bluetooth_btn, "Set Visible"); + ui_utils_label_set_text(this->bluetooth_label, "Devices is visible", "left"); + } + else if(visibility_mode == BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE) + { + elm_object_disabled_set(this->bluetooth_btn, EINA_TRUE); + elm_object_text_set(this->bluetooth_btn, "Set Visible"); + ui_utils_label_set_text(this->bluetooth_label, "Devices is visible", "left"); + } + ret = create_rfcomm_server(this); + RETM_IF(ret != BT_ERROR_NONE, "create_rfcomm_server failed"); + } + else + { + if(visibility_mode == BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE) + { + elm_object_disabled_set(this->bluetooth_btn, EINA_FALSE); + elm_object_text_set(this->bluetooth_btn, "Set Visible"); + ui_utils_label_set_text(this->bluetooth_label, "Devices is not visible", "left"); + } + else if(visibility_mode == BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE) + { + elm_object_disabled_set(this->bluetooth_btn, EINA_TRUE); + elm_object_text_set(this->bluetooth_btn, "Set Visible"); + ui_utils_label_set_text(this->bluetooth_label, "Devices is visible", "left"); + } + else if(visibility_mode == BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE) + { + elm_object_disabled_set(this->bluetooth_btn, EINA_TRUE); + elm_object_text_set(this->bluetooth_btn, "Set Visible"); + ui_utils_label_set_text(this->bluetooth_label, "Devices is visible", "left"); + } + ret = create_rfcomm_server(this); + RETM_IF(ret != BT_ERROR_NONE, "create_rfcomm_server failed"); + + } + + } +} + + +/** + * @function _adapter_authorization_changed_cb + * @since_tizen 2.3 + * @description Adapter Authorization Changed Cb + * @parameter bt_device_authorization_e: Bt Device Authorization E, char*: Char Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_authorization_changed_cb(bt_device_authorization_e authorization, char *remote_address, void *data) +{ + DBG(" _adapter_authorization_changed_cb "); + + DBG("_adapter_authorization_changed_cb"); + RETM_IF(NULL == data, "data is NULL"); + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + if(this->view->tbt_info->apptype == TBT_APP_BT_AUTHORIZATION) + { + + if(authorization == BT_DEVICE_AUTHORIZED) + { + elm_object_item_text_set(this->selected_device_item, format_string("%s(Authorized)", this->selected_device_info->remote_name)); + #ifdef TIZEN_2_4 + ui_utils_label_set_text(this->bluetooth_label, "Authorized", "left"); + #endif + } + else if(authorization == BT_DEVICE_UNAUTHORIZED) + { + elm_object_item_text_set(this->selected_device_item, format_string("%s(Unauthorized)", this->selected_device_info->remote_name)); + #ifdef TIZEN_2_4 + ui_utils_label_set_text(this->bluetooth_label, "Unauthorized", "left"); + #endif + } + } + +} + + +/** + * @function _adapter_visibility_duration_changed_cb + * @since_tizen 2.3 + * @description Adapter Visibility Duration Changed Cb + * @parameter int: Int, void*: Void Pointer + * @return static void + */ +static void _adapter_visibility_duration_changed_cb(int duration, void *data) +{ + DBG(" _adapter_visibility_duration_changed_cb "); + + RETM_IF(NULL == data, "data is NULL"); + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + DBG("[_adapter_visibility_duration_changed_cb] succeeded."); +} + + +/** + * @function _adapter_device_bond_destroyed_cb + * @since_tizen 2.3 + * @description Adapter Device Bond Destroyed Cb + * @parameter int: Int, char*: Char Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_device_bond_destroyed_cb(int result, char *remote_address, void *data) +{ + DBG("_adapter_device_bond_destroyed_cb"); + RETM_IF(NULL == data, "data is NULL"); + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == remote_address, "remote_address is NULL"); + + adapter_device_error(result); + + if(this->view->tbt_info->apptype == TBT_APP_BT_OPP_CLIENT || + this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT || + this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT_HANDSFREE || + this->view->tbt_info->apptype == TBT_APP_BT_AUTHORIZATION || + this->view->tbt_info->apptype == TBT_APP_BT_CLIENT_SOCKET || + this->view->tbt_info->apptype == TBT_APP_BT_CLIENT_PAIRED || + this->view->tbt_info->apptype == TBT_APP_BT_HID_CONNECT || + this->view->tbt_info->apptype == TBT_APP_BT_SDP || + this->view->tbt_info->apptype == TBT_APP_BT_AVRCP || + this->view->tbt_info->apptype == TBT_APP_BT_HDP) + { + if(this->selected_device_info != NULL && + result == BT_ERROR_NONE && + !strcmp(remote_address, this->selected_device_info->remote_address)) + { + util_state_object_feed(this->state_object_bt_client_pair, BT_UNPAIR_SUCCESS, NULL); + } + } +} + + +/** + * @function _adapter_device_bond_created_cb + * @since_tizen 2.3 + * @description Adapter Device Bond Created Cb + * @parameter int: Int, bt_device_info_s*: Bt Device Info S Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_device_bond_created_cb(int result, bt_device_info_s *device_info, void *data) +{ + DBG("_adapter_device_bond_created_cb"); + RETM_IF(NULL == data, "data is NULL"); + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + RETM_IF(NULL == device_info, "device_info is NULL"); + + adapter_device_error(result); + + DBG("_adapter_device_bond_created_cb"); + + if(this->state_object_bt_client_pair ) + { + if(device_info != NULL && + this->selected_device_info != NULL && + result == BT_ERROR_NONE && + !strcmp(device_info->remote_address, this->selected_device_info->remote_address)) + { + if(device_info->is_bonded/* && device_info->is_connected*/) + { + + DBG("###Bond is created!!!"); + do_bt_common_feed(this, BT_BOND_SUCCESS, (void*)device_info); + + if(this->view->tbt_info->apptype == TBT_APP_BT_OPP_CLIENT || + this->view->tbt_info->apptype == TBT_APP_BT_AUTHORIZATION || + this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT || + this->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT_HANDSFREE || + this->view->tbt_info->apptype == TBT_APP_BT_HID_CONNECT || + this->view->tbt_info->apptype == TBT_APP_BT_AVRCP || + this->view->tbt_info->apptype == TBT_APP_BT_HDP) + { + elm_object_disabled_set(this->action_btn, EINA_FALSE); + } + else if(this->view->tbt_info->apptype == TBT_APP_BT_PROFILES) + { + set_connected_profiles(this); + } + + } + + } + else if(result == BT_ERROR_CANCELLED) + { + do_bt_common_feed(this, BT_BOND_CANCEL, (void*)device_info); + util_state_object_feed(this->state_object_bt_client_pair, BT_BOND_CANCEL, NULL); + DBG("_adapter_device_bond_created_cb: BT_ERROR_CANCELLED"); + } + else if(result == BT_ERROR_AUTH_FAILED) + { + util_state_object_feed(this->state_object_bt_client_pair, BT_BOND_AUTH_FAIL, NULL); + DBG("_adapter_device_bond_created_cb: BT_ERROR_AUTH_FAILED"); + } + else if(result == BT_ERROR_TIMED_OUT) + { + util_state_object_feed(this->state_object_bt_client_pair, BT_BOND_TIME_OUT, NULL); + DBG("_adapter_device_bond_created_cb: BT_ERROR_TIMED_OUT"); + } + else if(result == BT_ERROR_REMOTE_DEVICE_NOT_FOUND) + { + util_state_object_feed(this->state_object_bt_client_pair, BT_BOND_DEVICE_LOST, NULL); + DBG("_adapter_device_bond_created_cb: BT_ERROR_REMOTE_DEVICE_NOT_FOUND"); + } + } +} + + +/** + * @function _adapter_socket_data_received_cb + * @since_tizen 2.3 + * @description Adapter Socket Data Received Cb + * @parameter bt_socket_received_data_s*: Bt Socket Received Data S Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_socket_data_received_cb(bt_socket_received_data_s *socket_data, void *data) +{ + DBG(" _adapter_socket_data_received_cb "); + + + RETM_IF(NULL == data, "data is NULL"); + char* str; + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + RETM_IF(NULL == socket_data, "socket_data is NULL"); + + int result = 0; + + if(this->view->tbt_info->apptype == TBT_APP_BT_CLIENT_PAIRED || + this->view->tbt_info->apptype == TBT_APP_BT_SERVER_SOCKET|| + this->view->tbt_info->apptype == TBT_APP_BT_CLIENT_SOCKET ) + { + + str = format_string("Data: %s", socket_data->data); + ui_utils_label_set_text(this->bluetooth_label,str , "left"); + SAFE_DELETE(str); + + if(this->view->tbt_info->apptype == TBT_APP_BT_SERVER_SOCKET) + { + result = bt_socket_send_data(socket_data->socket_fd, socket_data->data, socket_data->data_size); + RETM_IF(result < 0 , "bt_socket_send_data fail > Error = %s", get_bluetooth_error(result)); + } + + } + +} + + +/** + * @function _adapter_socket_connection_state_changed_cb + * @since_tizen 2.3 + * @description Adapter Socket Connection State Changed Cb + * @parameter int: Int, bt_socket_connection_s*: Bt Socket Connection S Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_socket_connection_state_changed_cb(int result, bt_socket_connection_state_e connection_state, bt_socket_connection_s *connection, void *data) +{ + + + DBG("_adapter_socket_connection_state_changed_cb = %d ", result ); + RETM_IF(NULL == data, "data is NULL"); + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + adapter_device_error(result); + + if (connection != NULL) + { + DBG("_adapter_socket_connection_state_changed_cb socket_fd: %d", connection->socket_fd); + } + else + { + DBG("Callback: No connection data"); + return; + } + + if (connection_state == BT_SOCKET_CONNECTED && this->view->tbt_info->apptype == TBT_APP_BT_CLIENT_SOCKET) + { + DBG("connection_state == BT_SOCKET_CONNECTED "); + ui_utils_label_set_text(this->bluetooth_label, "Connected. Sending data..", "left"); + this->server_socket_fd = connection->socket_fd; + DBG("server_socket_fd: %d", this->server_socket_fd); + char* tbt_string = "Hello this is TBT"; + char* str; + + result=BT_ERROR_AGAIN; + do + { + DBG("bt_socket_send_data :: TRYING... %d ", result); + result = bt_socket_send_data (this->server_socket_fd, tbt_string, strlen(tbt_string)); + } while(result==BT_ERROR_AGAIN); + + if(result > 0) + { + str = format_string("Data sent..%d byte", result); + ui_utils_label_set_text(this->bluetooth_label, str, "left"); + SAFE_DELETE(str); + } + else + { + str = format_string("Data sent failed! error=%d",result); + ui_utils_label_set_text(this->bluetooth_label,str , "left"); + SAFE_DELETE(str); + } + if(result==BT_ERROR_NOT_INITIALIZED) DBG("bt_socket_send_data :: ERROR %d ", result); + else if(result==BT_ERROR_PERMISSION_DENIED) DBG("bt_socket_send_data :: ERROR %d ", result); + else DBG("bt_socket_send_data :: UNKNOWN_ERROR %d ", result); + + adapter_device_error(result); + DBG("bt_socket_send_data :: result %d ", result); + result = bt_socket_disconnect_rfcomm (this->server_socket_fd); + DBG("bt_socket_disconnect_rfcomm :: result %d ", result); + } + else + { + DBG("Callback: Disconnected."); + DBG("Callback: Socket of disconnection - %d.", connection->socket_fd); + DBG("Callback: Address of connection - %s.", connection->remote_address); + + } +} + + +/** + * @function _adapter_bonded_device_cb + * @since_tizen 2.3 + * @description Adapter Bonded Device Cb + * @parameter bt_device_info_s*: Bt Device Info S Pointer, void*: Void Pointer + * @return static bool + */ +static bool _adapter_bonded_device_cb(bt_device_info_s *device_info, void *data) +{ + DBG(" send_rfcomm_send_client_data "); + + RETVM_IF(NULL == data, false, "data is NULL"); + RETVM_IF(NULL == device_info, false, "device_info is NULL"); + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETVM_IF(NULL == this, false, "view is NULL"); + + bt_device_info_s * device_info_bonded; + device_info_bonded = malloc(sizeof(bt_device_info_s)); + + if(device_info_bonded != NULL) + { + memcpy(device_info_bonded, device_info, sizeof(bt_device_info_s)); + device_info_bonded->remote_address = strdup(device_info->remote_address); + device_info_bonded->remote_name = strdup(device_info->remote_name); + + //Hold the last deviceinfo pointer; + this->bonded_devices_list = g_list_append(this->bonded_devices_list, (gpointer)device_info_bonded); + } + return true; +} + + +/** + * @function _adapter_device_connected_profile_cb + * @since_tizen 2.3 + * @description Adapter Device Connected Profile Cb + * @parameter bt_profile_e: Bt Profile E, void*: Void Pointer + * @return static bool + */ +static bool _adapter_device_connected_profile_cb(bt_profile_e profile, void *data) +{ + DBG(" _adapter_device_connected_profile_cb"); + + char* str; + RETVM_IF(NULL == data, false,"data is NULL"); + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETVM_IF(NULL == this, false,"view is NULL"); + + + int ret; + bool connected_status = false; + ret = bt_device_is_profile_connected (this->selected_device_info->remote_address, profile, &connected_status); + RETVM_IF(ret != BT_ERROR_NONE, false, "bt_device_is_profile_connected failed"); + RETVM_IF(connected_status != true, false, "profile not connected"); + + + DBG("_adapter_device_connected_profile_cb called"); + + if(this->no_of_profiles == 0) + { + str = format_string("%s(Profiles)",this->selected_device_info->remote_name); + ui_utils_label_set_text(this->bluetooth_label,str , "left"); + elm_list_clear(this->bluetooth_list); + elm_list_item_append(this->bluetooth_list, this->selected_device_info->remote_name, NULL, NULL, NULL, NULL); + SAFE_DELETE(str); + } + + if(this->view->tbt_info->apptype == TBT_APP_BT_PROFILES) + { + str = format_string("%s", get_bt_profile_name(profile)); + this->selected_device_profile_list = g_list_append(this->selected_device_profile_list, (gpointer)profile); + elm_list_item_append(this->bluetooth_list, str, NULL, NULL, NULL, NULL); + elm_object_disabled_set(this->bluetooth_btn, EINA_TRUE); + SAFE_DELETE(str); + } + this->no_of_profiles++; + return true; +} + + +/** + * @function _adapter_opp_client_push_responded_cb + * @since_tizen 2.3 + * @description Adapter Opp Client Push Responded Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_opp_client_push_responded_cb(int result, const char *remote_address, void *data) +{ + DBG(" _adapter_opp_client_push_responded_cb "); + + RETM_IF(NULL == data, "data is NULL"); + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this,"view is NULL"); + + adapter_device_error(result); + RETM_IF(NULL == data, "data is NULL"); + + bluetooth_view *view = NULL; + view = (bluetooth_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + elm_object_disabled_set(view->bluetooth_check_button, EINA_FALSE); + + if(result == BT_ERROR_NONE) + { + ui_utils_label_set_text(this->bluetooth_label, "File Push Accepted","Left"); + } + else if(result == BT_ERROR_OPERATION_FAILED) + { + ui_utils_label_set_text(this->bluetooth_label, "File Push Rejected","Left"); + } + else + { + ERR("_adapter_opp_client_push_responded_cb failed: %s", get_bluetooth_error(result)); + } +} + + +/** + * @function _adapter_opp_client_push_progress_cb + * @since_tizen 2.3 + * @description Adapter Opp Client Push Progress Cb + * @parameter const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_opp_client_push_progress_cb(const char *file, long long size, int percent, void *data) +{ + DBG(" _adapter_opp_client_push_progress_cb "); + + RETM_IF(NULL == data, "data is NULL"); + RETM_IF(NULL == file, "file is NULL"); + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + elm_object_disabled_set(this->action_btn, EINA_TRUE); + elm_object_disabled_set(this->bluetooth_btn, EINA_TRUE); + elm_object_disabled_set(this->bluetooth_btn, EINA_FALSE); + + DBG("size: %ld", (long)size); + DBG("percent: %d", percent); + DBG("file: %s", file); + char* str = format_string("File Send %d %", percent); + ui_utils_label_set_text(this->bluetooth_label, str, "left"); + SAFE_DELETE(str); +} + + +/** + * @function _adapter_opp_client_push_finished_cb + * @since_tizen 2.3 + * @description Adapter Opp Client Push Finished Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_opp_client_push_finished_cb(int result, const char *remote_address, void *data) +{ + DBG(" _adapter_opp_client_push_finished_cb "); + + RETM_IF(NULL == data, "data is NULL"); + RETM_IF(NULL == remote_address, "remote_address is NULL"); + + bluetooth_view *this = NULL; + this = (bluetooth_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + if(result != BT_ERROR_NONE) + { + elm_object_disabled_set(this->action_btn, EINA_FALSE); + ui_utils_label_set_text(this->bluetooth_label, "File Send Failed", "left"); + + dlog_print(DLOG_INFO, LOG_TAG, "remote_address: %s", remote_address); + DBG("[_adapter_opp_client_push_finished_cb] %d Failed.", result); + } + else + { + elm_object_disabled_set(this->action_btn, EINA_FALSE); + if(this->is_opp_push_cancelled == true) + { + ui_utils_label_set_text(this->bluetooth_label, "File Send Cancelled", "left"); + this->is_opp_push_cancelled = false; + } + else + { + ui_utils_label_set_text(this->bluetooth_label, "File Send Successful", "left"); + } + DBG("[_adapter_opp_client_push_finished_cb] Success."); + } + + // Delete file info + result = bt_opp_client_clear_files(); + RETM_IF(result != BT_ERROR_NONE, "bt_opp_client_clear_files fail > Error = %d", result); + + result = bt_opp_client_deinitialize(); + RETM_IF(result != BT_ERROR_NONE, "bt_opp_client_deinitialize fail > Error = %d", result); + +} + + +/** + * @function bluetooth_list_find_func_cb + * @since_tizen 2.3 + * @description Bluetooth List Find Func Cb + * @parameter gconstpointer: Gconstpointer + * @return static gint + */ +static gint bluetooth_list_find_func_cb(gconstpointer a, gconstpointer b) +{ + DBG(" bluetooth_list_find_func_cb "); + + if(a && b) + { + bt_adapter_device_discovery_info_s * device_info_a; + device_info_a = (bt_adapter_device_discovery_info_s*)a; + RETVM_IF(NULL == device_info_a, -1, "device_info_a is NULL"); + + bt_adapter_device_discovery_info_s * device_info_b; + device_info_b = (bt_adapter_device_discovery_info_s*)b; + RETVM_IF(NULL == device_info_b, -1, "device_info_b is NULL"); + if(device_info_a->remote_address && device_info_b->remote_address) + { + return strcmp(device_info_a->remote_address, device_info_b->remote_address); + } + } + + return -1; + + +} + + +/** + * @function bluetooth_list_free_func_cb + * @since_tizen 2.3 + * @description Bluetooth List Free Func Cb + * @parameter gpointer: Gpointer + * @return static void + */ +static void bluetooth_list_free_func_cb(gpointer data) +{ + if(data) + { + free(data); + } +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + bluetooth_view *view = NULL; + view = (bluetooth_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE_320_X_320) + { + elm_theme_overlay_del(NULL, get_edje_path("custom_button.edj")); + } + #endif + + if(view->view->tbt_info->apptype == TBT_APP_BT_SERVER_PAIRED) + { + util_state_object_destroy(view->state_object_bt_server_pair); + } + + if(view->state_object_bt_client_pair) + { + util_state_object_destroy(view->state_object_bt_client_pair); + } + + int result = 0; + result = bt_adapter_unset_state_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_unset_state_changed_cb Failed"); + + result = bt_adapter_unset_device_discovery_state_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_unset_device_discovery_state_changed_cb Failed"); + + result = bt_device_unset_bond_created_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_device_uset_bond_created_cb Failed"); + + result = bt_device_unset_bond_destroyed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_device_unset_bond_destroyed_cb Failed"); + + result = bt_adapter_unset_visibility_mode_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_unset_visibility_mode_changed_cb Failed"); + + result = bt_adapter_unset_visibility_duration_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_unset_visibility_duration_changed_cb Failed"); + + result = bt_device_unset_authorization_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_device_unset_authorization_changed_cb Failed"); + + result = bt_socket_unset_data_received_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_socket_unset_data_received_cb Failed"); + + result = bt_socket_unset_connection_requested_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_socket_unset_connection_requested_cb Failed"); + + result = bt_socket_unset_connection_state_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_socket_unset_connection_state_changed_cb Failed"); + + + + if(view->view->tbt_info->apptype == TBT_APP_BT_CLIENT_SOCKET) + { + result = bt_socket_disconnect_rfcomm (view->server_socket_fd); + RETM_IF(result != BT_ERROR_NONE, "bt_socket_disconnect_rfcomm fail > Error = %d", result); + } + else if(view->view->tbt_info->apptype == TBT_APP_BT_OPP_SERVER) + { + result = bt_opp_server_deinitialize(); + RETM_IF(result != BT_ERROR_NONE, "bt_opp_server_deinitialize fail > Error = %d", result); + } + else if(view->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT || + view->view->tbt_info->apptype == TBT_APP_BT_AUDIO_CONNECT_HANDSFREE || + view->view->tbt_info->apptype == TBT_APP_BT_PROFILES || + view->view->tbt_info->apptype == TBT_APP_BT_AG) + { + + if(view->selected_device_info != NULL) + { + result = bt_audio_unset_connection_state_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_audio_unset_connection_state_changed_cb fail > Error = %s", get_bluetooth_error(result)); + + result = bt_audio_disconnect(view->selected_device_info->remote_address, BT_AUDIO_PROFILE_TYPE_ALL); + RETM_IF(result != BT_ERROR_NONE, "bt_audio_disconnect fail > Error = %s", get_bluetooth_error(result)); + + result = bt_audio_deinitialize(); + RETM_IF(result != BT_ERROR_NONE, "bt_audio_deinitialize fail > Error = %d", result); + } + } + else if(view->view->tbt_info->apptype == TBT_APP_BT_HID_CONNECT) + { + //HID Connect deinitialization code goes here + result = bt_hid_host_deinitialize(); + RETM_IF(result != BT_ERROR_NONE, "bt_hid_host_deinitialize fail > Error = %s", get_bluetooth_error(result)); + result = bt_hid_host_disconnect(view->selected_device_info->remote_address); + RETM_IF(result != BT_ERROR_NONE, "bt_hid_host_disconnect fail > Error = %s", get_bluetooth_error(result)); + + } + else if(view->view->tbt_info->apptype == TBT_APP_BT_AVRCP) + { + //AVRCP connect deinitialization code goes here + result = bt_avrcp_unset_equalizer_state_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_avrcp_unset_equalizer_state_changed_cb fail > Error = %s", get_bluetooth_error(result)); + result = bt_avrcp_unset_repeat_mode_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_avrcp_unset_repeat_mode_changed_cb fail > Error = %s", get_bluetooth_error(result)); + result = bt_avrcp_unset_shuffle_mode_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_avrcp_unset_shuffle_mode_changed_cb fail > Error = %s", get_bluetooth_error(result)); + result = bt_avrcp_unset_scan_mode_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_avrcp_unset_scan_mode_changed_cb fail > Error = %s", get_bluetooth_error(result)); + result = bt_avrcp_target_deinitialize(); + RETM_IF(result != BT_ERROR_NONE, "bt_avrcp_target_deinitialize fail > Error = %s", get_bluetooth_error(result)); + } + else if(view->view->tbt_info->apptype == TBT_APP_BT_HDP) + { + //HDP connect denitialization code goes here + result = bt_hdp_unset_connection_state_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_hdp_unset_connection_state_changed_cb error: %s", get_bluetooth_error(result)); + result = bt_hdp_unset_data_received_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_hdp_unset_data_received_cb error: %s", get_bluetooth_error(result)); + result = bt_hdp_unregister_sink_app(view->hdp_app_id); + RETM_IF(result != BT_ERROR_NONE, "bt_hdp_unregister_sink_app error: %s", get_bluetooth_error(result)); + } + else if(view->view->tbt_info->apptype == TBT_APP_BT_AG) + { + #ifdef TBT_MODULE_APP_BT_AG + bool isOpened; + result = bt_ag_is_sco_opened(&isOpened); + RETM_IF(result != BT_ERROR_NONE, "bt_ag_is_sco_opened fail > Error = %s", get_bluetooth_error(result)); + if(isOpened) + { + result = bt_ag_close_sco(); + RETM_IF(result != BT_ERROR_NONE, "bt_ag_close_sco fail > Error = %s", get_bluetooth_error(result)); + result = bt_ag_unset_sco_state_changed_cb(); + } + #endif + } + else if(view->view->tbt_info->apptype == TBT_APP_BT_SDP) + { + result = bt_device_unset_service_searched_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_device_unset_service_searched_cb Failed"); + } + + + if(view->discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_STARTED || view->discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FOUND) + { + result = bt_adapter_stop_device_discovery(); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_stop_device_discovery error: %s", get_bluetooth_error(result)); + } + // Release resources + g_list_free_full(view->devices_list, bluetooth_list_free_func_cb); + view->devices_list = NULL; + + //Deinitialize Bluetooth + result = bt_deinitialize(); + if(result != BT_ERROR_NONE) + { + DBG("[bt_deinitialize] Failed."); + } + + if(view->bt_player) + { + player_stop(view->bt_player); + player_unprepare(view->bt_player); + player_destroy(view->bt_player); + view->bt_player = NULL; + } + + SAFE_DELETE(view->view); + SAFE_DELETE(view); + + +} + + +/** + * @function _adapter_bt_audio_connection_state_changed_cb + * @since_tizen 2.3 + * @description Adapter Bt Audio Connection State Changed Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_bt_audio_connection_state_changed_cb(int result, bool connected, const char *remote_address, bt_audio_profile_type_e type, void *user_data) +{ + DBG(" _adapter_bt_audio_connection_state_changed_cb "); + RETM_IF(NULL == remote_address, "remote_address NULL"); + RETM_IF(NULL == user_data, "user_data NULL"); + + DBG("The value of the result is %d and BT_ERROR_NOT_INITIALIZED is %d", result, BT_ERROR_NOT_INITIALIZED); + if(connected) + { + DBG("Bluetooth audio connected"); + + int ret; + + bluetooth_view *view = NULL; + view = (bluetooth_view*)user_data; + + if(view->view->tbt_info->apptype == TBT_APP_BT_PROFILES) + { + DBG("set_connected_profiles if condition: %s", view->selected_device_info->remote_name); + ret = bt_device_foreach_connected_profiles(view->selected_device_info->remote_address, _adapter_device_connected_profile_cb, view); + adapter_device_error(result); + RETM_IF(ret != BT_ERROR_NONE, "bt_device_foreach_connected_profiles fail > Error = %d", ret); + } + } +} + + +/** + * @function _adapter_bt_device_service_searched_cb + * @since_tizen 2.3 + * @description Adapter Bt Device Service Searched Cb + * @parameter int: Int, bt_device_sdp_info_s*: Bt Device Sdp Info S Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_bt_device_service_searched_cb(int result, bt_device_sdp_info_s *sdp_info, void *user_data) +{ + DBG(" _adapter_bt_device_service_searched_cb "); + RETM_IF(NULL == user_data, "data is NULL"); + RETM_IF(NULL == sdp_info, "sdp_info is NULL"); + bt_service_class_t service_mask_list; + int ret; + + if(sdp_info->service_count) + { + int i; + for(i = 0; iservice_count; i++) + { + DBG("Service UUID %d : %s",i, sdp_info->service_uuid[i]); + } + ret = bt_device_get_service_mask_from_uuid_list(sdp_info->service_uuid, sdp_info->service_count, &service_mask_list); + RETM_IF(ret != BT_ERROR_NONE, "bt_device_get_service_mask_from_uuid_list error: %s", get_bluetooth_error(ret)); + + + DBG("SERVICE MASK: %s", bt_get_service_name(service_mask_list)); + bluetooth_view *this = NULL; + this = (bluetooth_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + this->service_list = bt_get_service_name(service_mask_list); + if(!this->service_list) + { + DBG("this->service_list is NULL"); + } + } + +} + + +/** + * @function _bt_hid_host_connection_state_changed_cb + * @since_tizen 2.3 + * @description Bt Hid Host Connection State Changed Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _bt_hid_host_connection_state_changed_cb(int result, bool connected, const char *remote_address, void *user_data) +{ + bluetooth_view *this = (bluetooth_view*) user_data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == remote_address, "remote_address is NULL"); + DBG("_bt_hid_host_connection_state_changed_cb status :%d ", connected); + if(connected) + { + elm_object_text_set(this->bluetooth_label, "HID connected"); + } +} + + +/** + * @function _bt_avrcp_target_connection_state_changed_cb + * @since_tizen 2.3 + * @description Bt Avrcp Target Connection State Changed Cb + * @parameter bool: Bool, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _bt_avrcp_target_connection_state_changed_cb(bool connected, const char *remote_address, void *user_data) +{ + DBG("Inside _bt_avrcp_target_connection_state_changed_cb"); + bluetooth_view *this = (bluetooth_view*) user_data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == remote_address, "remote_address is NULL"); + if(connected) + { + elm_object_text_set(this->bluetooth_label, "AVRCP connected"); + } + else + { + elm_object_text_set(this->bluetooth_label, "AVRCP connection Failed"); + } +} + + +/** + * @function _bt_avrcp_equalizer_state_changed_cb + * @since_tizen 2.3 + * @description Bt Avrcp Equalizer State Changed Cb + * @parameter bt_avrcp_equalizer_state_e: Bt Avrcp Equalizer State E, void*: Void Pointer + * @return static void + */ +static void _bt_avrcp_equalizer_state_changed_cb(bt_avrcp_equalizer_state_e equalizer, void *user_data) +{ + DBG("Inside _bt_avrcp_equalizer_state_changed_cb"); + bluetooth_view *this = (bluetooth_view*) user_data; + RETM_IF(NULL == this, "view is NULL"); + if(equalizer == BT_AVRCP_EQUALIZER_STATE_ON) + { + elm_object_text_set(this->bluetooth_label, "Equalizer ON"); + } + else + { + elm_object_text_set(this->bluetooth_label, "Equalizer OFF"); + } +} + + +/** + * @function _bt_avrcp_repeat_mode_changed_cb + * @since_tizen 2.3 + * @description Bt Avrcp Repeat Mode Changed Cb + * @parameter bt_avrcp_repeat_mode_e: Bt Avrcp Repeat Mode E, void*: Void Pointer + * @return static void + */ +static void _bt_avrcp_repeat_mode_changed_cb(bt_avrcp_repeat_mode_e repeat, void *user_data) +{ + DBG("Inside _bt_avrcp_repeat_mode_changed_cb"); + bluetooth_view *this = (bluetooth_view*) user_data; + RETM_IF(NULL == this, "view is NULL"); + +switch(repeat) +{ + case BT_AVRCP_REPEAT_MODE_OFF: + elm_object_text_set(this->bluetooth_label, "Repeat Mode OFF"); + break; + case BT_AVRCP_REPEAT_MODE_SINGLE_TRACK: + elm_object_text_set(this->bluetooth_label, "Repeat Mode Single"); + break; + case BT_AVRCP_REPEAT_MODE_ALL_TRACK: + elm_object_text_set(this->bluetooth_label, "Repeat Mode All"); + break; + case BT_AVRCP_REPEAT_MODE_GROUP: + elm_object_text_set(this->bluetooth_label, "Repeat Mode Group"); + break; + } +} + + +/** + * @function _bt_avrcp_shuffle_mode_changed_cb + * @since_tizen 2.3 + * @description Bt Avrcp Shuffle Mode Changed Cb + * @parameter bt_avrcp_shuffle_mode_e: Bt Avrcp Shuffle Mode E, void*: Void Pointer + * @return static void + */ +static void _bt_avrcp_shuffle_mode_changed_cb(bt_avrcp_shuffle_mode_e shuffle, void *user_data) +{ + DBG("Inside _bt_avrcp_shuffle_mode_changed_cb"); + bluetooth_view *this = (bluetooth_view*) user_data; + RETM_IF(NULL == this, "view is NULL"); + + if(shuffle == BT_AVRCP_SHUFFLE_MODE_OFF) + { + elm_object_text_set(this->bluetooth_label, "Shuffle Mode OFF"); + } + else if(BT_AVRCP_SHUFFLE_MODE_ALL_TRACK) + { + elm_object_text_set(this->bluetooth_label, "Shuffle Mode ALL"); + } + else if(BT_AVRCP_SHUFFLE_MODE_GROUP) + { + elm_object_text_set(this->bluetooth_label, "Shuffle Mode Group"); + } + +} + + +/** + * @function _bt_avrcp_scan_mode_changed_cb + * @since_tizen 2.3 + * @description Bt Avrcp Scan Mode Changed Cb + * @parameter bt_avrcp_scan_mode_e: Bt Avrcp Scan Mode E, void*: Void Pointer + * @return static void + */ +static void _bt_avrcp_scan_mode_changed_cb(bt_avrcp_scan_mode_e scan, void *user_data) +{ + DBG("Inside _bt_avrcp_scan_mode_changed_cb"); + bluetooth_view *this = (bluetooth_view*) user_data; + RETM_IF(NULL == this, "view is NULL"); + + if(scan == BT_AVRCP_SCAN_MODE_OFF) + { + elm_object_text_set(this->bluetooth_label, "Scan Mode OFF"); + } + else if(scan == BT_AVRCP_SCAN_MODE_ALL_TRACK) + { + elm_object_text_set(this->bluetooth_label, "Scan Mode All"); + } + else if(scan == BT_AVRCP_SCAN_MODE_GROUP) + { + elm_object_text_set(this->bluetooth_label, "Scan Mode Group"); + } +} + + +/** + * @function _adpter_bt_opp_server_connection_requested_cb + * @since_tizen 2.3 + * @description Adpter Bt Opp Server Connection Requested Cb + * @parameter const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _adpter_bt_opp_server_connection_requested_cb(const char *remote_address, void *user_data) +{ + bluetooth_view *this = (bluetooth_view*) user_data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == remote_address, "remote_address is NULL"); + DBG(" _adpter_bt_opp_server_connection_requested_cb "); + elm_object_text_set(this->bluetooth_label,"OPP Requested..."); + elm_object_text_set(this->bluetooth_btn,"Accept"); + elm_object_text_set(this->action_btn,"Reject"); + elm_object_disabled_set(this->bluetooth_btn, EINA_FALSE); + elm_object_disabled_set(this->action_btn, EINA_FALSE); + this->is_opp_server_accecpt = EINA_TRUE; +} + + +/** + * @function _adpter_bt_opp_server_transfer_progress_cb_for_opp + * @since_tizen 2.3 + * @description Adpter Bt Opp Server Transfer Progress Cb For Opp + * @parameter const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _adpter_bt_opp_server_transfer_progress_cb_for_opp(const char *file, long long size, int percent, void *user_data) +{ + bluetooth_view *this = (bluetooth_view *)user_data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == file, "file is NULL"); + DBG(" _adpter_bt_opp_server_transfer_progress_cb_for_opp "); + DBG("OPP Server file: %s", file); + DBG("OPP Server size: %lld", size); + DBG("OPP Server percent: %d", percent); + this->is_opp_server_push_progress = EINA_TRUE; + elm_object_text_set(this->bluetooth_btn, "Cancel"); + + char *msg = format_string("Progress : %d", percent); + elm_object_text_set(this->bluetooth_label, msg); +} + + +/** + * @function _adapter_bt_opp_server_transfer_finished_cb_for_opp + * @since_tizen 2.3 + * @description Adapter Bt Opp Server Transfer Finished Cb For Opp + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_bt_opp_server_transfer_finished_cb_for_opp(int result, const char *file, long long size, void *user_data) +{ + bluetooth_view *this = (bluetooth_view *)user_data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == file, "file is NULL"); + DBG(" _adpter_bt_opp_server_transfer_progress_cb_for_opp "); + DBG("OPP Server result: %d", result); + DBG("OPP Server file: %s", file); + DBG("OPP Server size: %ld", size); + elm_object_disabled_set(this->bluetooth_btn, EINA_TRUE); + elm_object_disabled_set(this->action_btn, EINA_TRUE); +} + + +/** + * @function get_bt_profile_name + * @since_tizen 2.3 + * @description Get Bt Profile Name + * @parameter bt_profile_e: Bt Profile E + * @return static char* + */ +static char* get_bt_profile_name(bt_profile_e profile) +{ + char* profile_name; + +switch(profile) +{ +case BT_PROFILE_RFCOMM: + profile_name = "BT_PROFILE_RFCOMM"; + break; +case BT_PROFILE_A2DP: + profile_name = "BT_PROFILE_A2DP"; + break; +case BT_PROFILE_HSP: + profile_name = "BT_PROFILE_HSP"; + break; +case BT_PROFILE_HID: + profile_name = "BT_PROFILE_HID"; + break; +case BT_PROFILE_NAP: + profile_name = "BT_PROFILE_NAP"; + break; +case BT_PROFILE_AG: + profile_name = "BT_PROFILE_AG"; + break; +case BT_PROFILE_GATT: + profile_name = "BT_PROFILE_GATT"; + break; +case BT_PROFILE_NAP_SERVER: + profile_name = "BT_PROFILE_NAP_SERVER"; + break; +default: + profile_name = "UNKNOWN"; + break; +} +return profile_name; +} + + +/** + * @function _bt_util_state_object_state_changed_cb_server_pair + * @since_tizen 2.3 + * @description Bt Util State Object State Changed Cb Server Pair + * @parameter int: Int, int: Int, int: Int, void*: Void Pointer, void*: Void Pointer + * @return static void + */ +static void _bt_util_state_object_state_changed_cb_server_pair(int previous,int now,int feed,void *user_data,void *feed_data) +{ + DBG("Current state is %d while previous state is %d", now, previous); + bluetooth_view *this = NULL; + this = (bluetooth_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + if(now < BT_BOND_CLIENT_SUCCESSFULLY_CREATED) + { + do_bt_state_common_check(this, now, feed_data); + } +} + + +/** + * @function _bt_util_state_object_state_changed_cb_client_pair + * @since_tizen 2.3 + * @description Bt Util State Object State Changed Cb Client Pair + * @parameter int: Int, int: Int, int: Int, void*: Void Pointer, void*: Void Pointer + * @return static void + */ +static void _bt_util_state_object_state_changed_cb_client_pair(int previous,int now,int feed,void *user_data,void *feed_data) +{ + DBG("Current state is %d while previous state is %d", now, previous); + bluetooth_view *this = NULL; + this = (bluetooth_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + int result = BT_ERROR_NONE; + if(now < BT_BOND_CLIENT_SUCCESSFULLY_CREATED && now != BT_BOND_CANCELLED) + { + do_bt_state_common_check(this, now, feed_data); + } + + //else + { + +switch(now) +{ + case BT_BOND_CLIENT_SUCCESSFULLY_CREATED: + { + bt_adapter_device_discovery_info_s* device_info = (bt_adapter_device_discovery_info_s*)feed_data; + DBG("_adapter_device_bond_created_cb bond succesful with: %s", device_info->remote_address); + GList *paired_device = NULL; + bt_adapter_device_discovery_info_s * device_info_paired = NULL; + + if(this->view->tbt_info->apptype == TBT_APP_BT_SDP) + { + bt_device_start_service_search(device_info->remote_address); + } + + + paired_device = g_list_find_custom (this->devices_list, this->selected_device_info, bluetooth_list_find_func_cb); + RETM_IF(NULL == paired_device, "paired_device is NULL"); + device_info_paired = (bt_adapter_device_discovery_info_s*)paired_device->data; + RETM_IF(NULL == device_info_paired, "device_info_paired is NULL"); + device_info_paired->is_bonded = true; + + elm_object_disabled_set(this->action_btn, EINA_FALSE); + evas_object_data_set(this->bluetooth_list, "bluetooth_view", this); + elm_object_item_text_set(this->selected_device_item, format_string("%s(Paired)", this->selected_device_info->remote_name)); + #ifdef TIZEN_2_4 + ui_utils_label_set_text(this->bluetooth_label, "Paired", "left"); + #endif + if(this->view->tbt_info->apptype == TBT_APP_BT_HDP) + { + // Use the appropriate IEEE 11073 data types based on the devices used. + // Below are some examples. Refer to relevant Bluetooth HDP specifications for detail. + // 0x1007 - blood pressure meter + // 0x1008 - body thermometer + // 0x100F - body weight scale + + result = bt_hdp_register_sink_app(0x1007, &this->hdp_app_id); + RETM_IF(result != BT_ERROR_NONE, "bt_hdp_register_sink_app error: %s", get_bluetooth_error(result)); + ui_utils_label_set_text(this->action_btn, "Connect HDP", "left"); + } + + break; + } + + case BT_BOND_TIMED_OUT: + elm_object_disabled_set(this->action_btn, EINA_FALSE); + evas_object_data_set(this->bluetooth_list, "bluetooth_view", this); + elm_object_item_text_set(this->selected_device_item, format_string("%s(Timedout)", this->selected_device_info->remote_name)); + #ifdef TIZEN_2_4 + ui_utils_label_set_text(this->bluetooth_label, "Timed Out", "left"); + #endif + break; + case BT_BOND_REMOTE_DEVICE_NOT_FOUND: + elm_object_disabled_set(this->action_btn, EINA_FALSE); + evas_object_data_set(this->bluetooth_list, "bluetooth_view", this); + elm_object_item_text_set(this->selected_device_item, format_string("%s(Device Not Found)", this->selected_device_info->remote_name)); + #ifdef TIZEN_2_4 + ui_utils_label_set_text(this->bluetooth_label, "Device Not Found", "left"); + #endif + break; + case BT_BOND_CANCELLED: + elm_object_disabled_set(this->action_btn, EINA_FALSE); + evas_object_data_set(this->bluetooth_list, "bluetooth_view", this); + elm_object_item_text_set(this->selected_device_item, format_string("%s(Cancelled)", this->selected_device_info->remote_name)); + #ifdef TIZEN_2_4 + ui_utils_label_set_text(this->bluetooth_label, "Cancelled", "left"); + #endif + break; + case BT_BOND_AUTH_FAILED: + elm_object_disabled_set(this->action_btn, EINA_FALSE); + evas_object_data_set(this->bluetooth_list, "bluetooth_view", this); + elm_object_item_text_set(this->selected_device_item, format_string("%s(Auth Failed)", this->selected_device_info->remote_name)); + #ifdef TIZEN_2_4 + ui_utils_label_set_text(this->bluetooth_label, "Auth Failed", "left"); + #endif + break; + + case BT_SUCCESSFULLY_UNPAIRED: + { + DBG("Success in unpairing "); + GList *unpaired_device = NULL; + bt_adapter_device_discovery_info_s * device_info_unpaired = NULL; + + unpaired_device = g_list_find_custom (this->devices_list, this->selected_device_info, bluetooth_list_find_func_cb); + device_info_unpaired = (bt_adapter_device_discovery_info_s*)unpaired_device->data; + device_info_unpaired->is_bonded = false; + + elm_object_disabled_set(this->action_btn, EINA_FALSE); + evas_object_data_set(this->bluetooth_list, "bluetooth_view", this); + elm_object_item_text_set(this->selected_device_item, this->selected_device_info->remote_name); + #ifdef TIZEN_2_4 + ui_utils_label_set_text(this->bluetooth_label, "Unpaired", "left"); + #endif + break; + } + } + if(this->view->tbt_info->apptype == TBT_APP_BT_OPP_SERVER) + { + elm_object_disabled_set(this->action_btn, EINA_TRUE); + } + } +} + + +/** + * @function do_bt_state_common_check + * @since_tizen 2.3 + * @description Do Bt State Common Check + * @parameter bluetooth_view*: Bluetooth View Pointer, void*: Void Pointer + * @return static void + */ +static void do_bt_state_common_check(bluetooth_view *this, int now, void *feed_data) +{ + RETM_IF(NULL == this, "view is NULL"); + + + int result; + +switch(now) +{ + case BT_ACTIVATED: + DBG("BT_ACTIVATED"); + update_bonded_devices(this); + + int* adapter_state = (int*)feed_data; + + this->adapter_state = *adapter_state; + DBG("Adapter state is %d", *adapter_state); + update_view_controls(this); + break; + case BT_ACTIVATED_CLIENT: + elm_object_disabled_set(this->bluetooth_btn, EINA_FALSE); + elm_object_text_set(this->bluetooth_btn, "Discover"); + ui_utils_label_set_text(this->bluetooth_label, "Ready to discover Server", "left"); + break; + case BT_ACTIVATION_ATTEMPTED: + result = adapter_on_off_request_send(this); + RETM_IF(result != BT_ERROR_NONE, "adapter_on_of_request_send fail > Error = %d", result); + break; + case BT_DISCOVERY_START_REQUESTED: + { + int discover_state; + discover_state = (int)this->discovery_state; + + if(discover_state == BT_ADAPTER_DEVICE_DISCOVERY_NONE) + { + result = bt_adapter_start_device_discovery(); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_set_device_discovery_state_changed_cb failed > Error = %d", result); + } + } + break; + case BT_DISCOVERED_DEVICE_CLICKED: + { + DBG("BT_DISCOVERED_DEVICE_CLICKED"); + bt_adapter_device_discovery_info_s *device_info; + device_info = (bt_adapter_device_discovery_info_s*)feed_data; + + + this->selected_device_info = device_info; + + if(this->selected_device_info->is_bonded == false) + { + + util_state_object_feed(this->state_object_bt_client_pair, BT_ADAPTER_ATTEMP_PAIR, (void*)device_info); + } + + else if(this->selected_device_info->is_bonded == true) + { + + util_state_object_feed(this->state_object_bt_client_pair, BT_ADAPTER_ATTEMP_UNPAIR, (void*)device_info); + + } + } + break; + + + case BT_ACTIVATION_BY_APP_FAILED: + { + DBG("Failed to launch Bluetooth On/Off app!\n"); + ui_utils_label_set_text(this->bluetooth_label, "Please Turn on Manually", "left"); + elm_object_disabled_set(this->bluetooth_btn, EINA_TRUE); + } + break; + + case BT_PAIR_REQUEST_ATTEMPTED: + { + int result; + DBG("BT_DISCOVERED_DEVICE_CLICKED"); + bt_adapter_device_discovery_info_s *device_info; + device_info = (bt_adapter_device_discovery_info_s*)feed_data; + { + result = bt_adapter_stop_device_discovery(); + DBG("The value of Stop Discovery is %s", get_bluetooth_error(result)); + this->discovery_state = BT_ADAPTER_DEVICE_DISCOVERY_FINISHED; + update_view_controls(this); + + result = bt_device_create_bond(device_info->remote_address); + + + if(result != BT_ERROR_NONE) + { + this->selected_device_info = NULL; + this->selected_device_item = NULL; + DBG("[bt_device_create_bond] Failed. result(%d).", result); + return; + } + else + { + if(this->view->tbt_info->apptype == TBT_APP_BT_CLIENT_PAIRED && elm_check_state_get(this->bluetooth_check)){ + + result = bt_device_cancel_bonding(); + DBG("bt_device_cancel_bonding : %d",result); + RETM_IF(result != BT_ERROR_NONE, "bt_device_cancel_bonding fail > Error = %d", result); + util_state_object_feed(this->state_object_bt_client_pair, BT_BOND_CANCEL, NULL); + } + elm_object_disabled_set(this->action_btn, EINA_TRUE); + evas_object_data_set(this->bluetooth_list, "bluetooth_view", NULL); + + DBG("bt_device_start_service_search"); + result = bt_device_start_service_search(this->selected_device_info->remote_address); + RETM_IF(result != BT_ERROR_NONE, "bt_device_start_service_search fail > Error = %d", result); + + elm_object_item_text_set(this->selected_device_item, format_string("%s(Pairing)", this->selected_device_info->remote_name)); + #ifdef TIZEN_2_4 + ui_utils_label_set_text(this->bluetooth_label, "Pairing..", "left"); + #endif + DBG("[bt_device_create_bond] succeeded. device_bond_created_cb callback will be called."); + } + } + break; + } + case BT_UNPAIR_REQUEST_ATTEMPTED: + { + bt_adapter_device_discovery_info_s *device_info; + device_info = (bt_adapter_device_discovery_info_s*)feed_data; + + bt_device_info_s* device_info_bonded; + result = bt_adapter_get_bonded_device_info(device_info->remote_address, &device_info_bonded); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_get_bonded_device_info fail > Error = %d", result); + result = bt_device_set_alias(device_info_bonded->remote_address,device_info_bonded->remote_name); + RETM_IF(result != BT_ERROR_NONE, "bt_device_set_alias fail > Error = %d", result); + result = bt_adapter_free_device_info (device_info_bonded); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_free_device_info fail > Error = %d", result); + + if(this->view->tbt_info->apptype == TBT_APP_BT_PROFILES) + { + set_connected_profiles(this); + } + + else + { + int result; + result = bt_device_destroy_bond(device_info->remote_address); + if(result != BT_ERROR_NONE) + { + this->selected_device_info = NULL; + DBG("[bt_device_destroy_bond] Failed. result(%d).", result); + return; + } + else + { + elm_object_disabled_set(this->action_btn, EINA_TRUE); + evas_object_data_set(this->bluetooth_list, "bluetooth_view", NULL); + elm_object_item_text_set(this->selected_device_item, format_string("%s(Unpairing)", this->selected_device_info->remote_name)); + #ifdef TIZEN_2_4 + ui_utils_label_set_text(this->bluetooth_label, "Unpairing..", "left"); + #endif + DBG("[bt_device_destroy_bond] succeeded. device_bond_destroyed_cb callback will be called."); + } + + } + break; + } + default: + break; + } +} + + +/** + * @function do_bt_common_feed + * @since_tizen 2.3 + * @description Do Bt Common Feed + * @parameter bluetooth_view*: Bluetooth View Pointer, void*: Void Pointer + * @return static void + */ +static void do_bt_common_feed(bluetooth_view *this, int feed_value, void* feed_data) +{ + RETM_IF(NULL == this, "view is NULL"); + + + if(this->state_object_bt_client_pair) + { + DBG("Feed value is %d", feed_value); + util_state_object_feed(this->state_object_bt_client_pair, feed_value, feed_data); + } + if(this->state_object_bt_server_pair) + { + util_state_object_feed(this->state_object_bt_server_pair, feed_value, feed_data); + } +} + + +/** + * @function bt_get_service_name + * @since_tizen 2.3 + * @description Bt Get Service Name + * @parameter bt_service_class_t: Bt Service Class T + * @return static GList* + */ +static GList* bt_get_service_name(bt_service_class_t service_enum) +{ + char* service_name = NULL; + GList* service_list = NULL; + + DBG("service enum %d", service_enum); + + + + if (service_enum & BT_SC_RES_SERVICE_MASK) { + service_name = "RES Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_SPP_SERVICE_MASK) { + service_name = "SPP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_DUN_SERVICE_MASK) { + service_name = "DUN Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_FAX_SERVICE_MASK) { + service_name = "FAX Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_LAP_SERVICE_MASK) { + service_name = "LAP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_HSP_SERVICE_MASK) { + service_name = "HSP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_HFP_SERVICE_MASK) { + service_name = "HFP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_OPP_SERVICE_MASK) { + service_name = "OPP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_FTP_SERVICE_MASK) { + service_name = "FTP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_CTP_SERVICE_MASK) { + service_name = "CTP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_ICP_SERVICE_MASK) { + service_name = "ICP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_SYNC_SERVICE_MASK) { + service_name = "DUN Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_BPP_SERVICE_MASK) { + service_name = "BPP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_BIP_SERVICE_MASK) { + service_name = "BIP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_PANU_SERVICE_MASK) { + service_name = "PANU Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_NAP_SERVICE_MASK) { + service_name = "DUN Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_GN_SERVICE_MASK) { + service_name = "GN Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_SAP_SERVICE_MASK) { + service_name = "SAP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_A2DP_SERVICE_MASK) { + service_name = "A2DP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_AVRCP_SERVICE_MASK) { + service_name = "AVRCP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_PBAP_SERVICE_MASK) { + service_name = "PBAP Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_HID_SERVICE_MASK) { + service_name = "HID Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + if (service_enum & BT_SC_A2DP_SOURCE_SERVICE_MASK) { + service_name = "A2DP Source Service Class"; + DBG("service name %s", service_name); + service_list = g_list_append(service_list, (gpointer)service_name); + } + return service_list; +} + + +/** + * @function get_bluetooth_error + * @since_tizen 2.3 + * @description Get Bluetooth Error + * @parameter bt_error_e: Bt Error E + * @return static char* + */ +static char* get_bluetooth_error(bt_error_e error) +{ + char* ret; + +switch(error) +{ + case BT_ERROR_NONE: + ret = "BT_ERROR_NONE"; + break; + case BT_ERROR_CANCELLED: + ret = "BT_ERROR_CANCELLED"; + break; + case BT_ERROR_INVALID_PARAMETER: + ret = "BT_ERROR_INVALID_PARAMETER"; + break; + case BT_ERROR_OUT_OF_MEMORY: + ret = "BT_ERROR_OUT_OF_MEMORY"; + break; + case BT_ERROR_RESOURCE_BUSY: + ret = "BT_ERROR_RESOURCE_BUSY"; + break; + case BT_ERROR_TIMED_OUT: + ret = "BT_ERROR_TIMED_OUT"; + break; + case BT_ERROR_NOW_IN_PROGRESS: + ret = "BT_ERROR_NOW_IN_PROGRESS"; + break; + case BT_ERROR_NOT_SUPPORTED: + ret = "BT_ERROR_NOT_SUPPORTED"; + break; + case BT_ERROR_PERMISSION_DENIED: + ret = "BT_ERROR_PERMISSION_DENIED"; + break; + case BT_ERROR_QUOTA_EXCEEDED: + ret = "BT_ERROR_QUOTA_EXCEEDED"; + break; + case BT_ERROR_NO_DATA: + ret = "BT_ERROR_NO_DATA"; + break; + case BT_ERROR_NOT_INITIALIZED: + ret = "BT_ERROR_NOT_INITIALIZED"; + break; + case BT_ERROR_NOT_ENABLED: + ret = "BT_ERROR_NOT_ENABLED"; + break; + case BT_ERROR_ALREADY_DONE: + ret = "BT_ERROR_ALREADY_DONE"; + break; + case BT_ERROR_OPERATION_FAILED: + ret = "BT_ERROR_OPERATION_FAILED"; + break; + case BT_ERROR_NOT_IN_PROGRESS: + ret = "BT_ERROR_NOT_IN_PROGRESS"; + break; + case BT_ERROR_REMOTE_DEVICE_NOT_BONDED: + ret = "BT_ERROR_REMOTE_DEVICE_NOT_BONDED"; + break; + case BT_ERROR_AUTH_REJECTED: + ret = "BT_ERROR_AUTH_REJECTED"; + break; + case BT_ERROR_AUTH_FAILED: + ret = "BT_ERROR_AUTH_FAILED"; + break; + case BT_ERROR_REMOTE_DEVICE_NOT_FOUND: + ret = "BT_ERROR_NONE"; + break; + case BT_ERROR_SERVICE_SEARCH_FAILED: + ret = "BT_ERROR_SERVICE_SEARCH_FAILED"; + break; + case BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED: + ret = "BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED"; + break; + case BT_ERROR_AGAIN: + ret = "BT_ERROR_AGAIN"; + break; + case BT_ERROR_SERVICE_NOT_FOUND: + ret = "BT_ERROR_SERVICE_NOT_FOUND"; + break; + default: + ret = "Unknown Error"; + break; + } + + return ret; +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-bluetoothle-view.c b/tbtcoreapp/src/view/tbt-bluetoothle-view.c new file mode 100644 index 0000000..45a7371 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-bluetoothle-view.c @@ -0,0 +1,1459 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-bluetoothle-view.c + * @brief Bluetooth le + * + * @author A. B. M. Nazibullah(nazib.ullah@samsung.com) + * @date June, 2015 + * @credit + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_BLE + +#include +#include +#include +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-bluetoothle-view.h" +#include "view/tbt-common-view.h" + +#define BT_ADAPTER_DEVICE_DISCOVERY_NONE -1 + +typedef enum +{ +SERVICE_LISTED, +SERVICE_SELECTED, +SERVICE_EXPANDED, +CHARACTERISTICS_LISTED, +CHARACTERISTIC_SELECTED, +CHARACTERISTIC_READ, +CHARACTERISTIC_WRITTEN, +CHARACTERISTIC_EXPANDED, +DESCRIPTORS_LISTED, +DESCRIPTORS_SELECTED, +DESCRIPTORS_READ, +DESCRIPTORS_WRITTEN + +}ctrl_btn_state_e; + +struct _bluetoothle_view +{ + Evas_Object* bluetoothle_list; + Evas_Object* bluetoothle_label; + Evas_Object *bluetoothle_btn; + Evas_Object *read_btn; + Evas_Object *write_btn; + Evas_Object *expand_btn; + Evas_Object *bluetoothle_btn2; + bt_adapter_state_e adapter_state; + bt_adapter_visibility_mode_e visibility_mode; + common_view* view; + + bt_adapter_le_device_scan_result_info_s *scan_info; + bt_adapter_le_device_discovery_state_e discovery_state; + + Elm_Object_Item *selected_device_item; + + GList *devices_list; + GList *log_list; + bt_gatt_client_h client; + bt_gatt_h gatt_handle; + bt_gatt_h characterstic_h, service_h, descriptor_h; + bool is_read_completed; + + bt_gatt_h all_characteristics[1000]; + int n_characteristics; + + bt_gatt_type_e type; + bool is_int; + +}; + +static void _app_destroy_cb(void* this); +static void init_bluetooth(void* user_data); +static void _adapter_state_changed_cb(int result, bt_adapter_state_e adapter_state, void *user_data); +static void discover_bluetooth_le(void* user_data); +static void _bt_adapter_le_scan_result_cb(int result, bt_adapter_le_device_scan_result_info_s *info, void *user_data); +static bool is_new_scanned_device_found(bluetoothle_view *this, bt_adapter_le_device_scan_result_info_s *discovery_info); +static gint bluetooth_list_find_func_cb(gconstpointer a, gconstpointer b); +static void bluetooth_list_free_func_cb(gpointer data); +static void update_view_controls(bluetoothle_view *this); +static void discovered_devices_list_show(bluetoothle_view *this); +static void _device_item_selected_cb(void *data, Evas_Object *obj, void *event_info); +static void _sevice_selected_cb(void *data, Evas_Object *obj, void *event_info); +static void _included_sevice_selected_cb(void *data, Evas_Object *obj, void *event_info); +static void _descriptor_selected_cb(void *data, Evas_Object *obj, void *event_info); +static void set_control_btn_state(ctrl_btn_state_e state, void* user_data); +static void _characteristic_selected_cb(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *add_control_layout(bluetoothle_view *this, Evas_Object *parent); +static void _control_button_pressed_cb(void *user_data, Evas_Object *obj, void *event_info); +static void _read_button_pressed_cb(void *user_data, Evas_Object *obj, void *event_info); +static void _write_button_pressed_cb(void *user_data, Evas_Object *obj, void *event_info); +static void _expand_button_pressed_cb(void *user_data, Evas_Object *obj, void *event_info); +static void _bt_gatt_connection_state_changed_cb(int result, bool connected, const char *remote_address, void *user_data); +static char* get_bluetooth_error(bt_error_e error); +static void register_callback(void* user_data); +static bool _bt_gatt_foreach_services_cb(int total, int index, bt_gatt_h gatt_handle, void *user_data); +static bool _bt_gatt_foreach_included_service(int total, int index, bt_gatt_h gatt_handle, void *user_data); +static bool _bt_gatt_foreach_characterstics_cb(int total, int index, bt_gatt_h gatt_handle, void *user_data); +static void _bt_gatt_client_write_request_completed_cb(int result, bt_gatt_h request_handle, void *user_data); +static void _bt_gatt_client_read_request_completed_cb(int result, bt_gatt_h request_handle, void *user_data); +static bool _bt_gatt_foreach_descriptors_cb(int total, int index, bt_gatt_h gatt_handle, void *user_data); +static void _bt_gatt_client_characteristic_value_changed_cb(bt_gatt_h characteristic, char *value, int len, void *user_data); +static void log_list_free_func_cb(gpointer data); + + +/** + * @function bluetoothle_view_add + * @since_tizen 2.3 + * @description Bluetoothle View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return bluetoothle_view* + */ +bluetoothle_view *bluetoothle_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + bluetoothle_view *this = NULL; + this = calloc(1, sizeof(bluetoothle_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + RETVM_IF(NULL == tbt_info, NULL, "tbt_info is NULL"); + RETVM_IF(NULL == item, NULL, "item is NULL"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "bluetoothle_viewer"; + tbt_info->layout_file = get_edje_path("bluetooth_le_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->scan_info = NULL; + this->is_read_completed = true; + this->is_int = true; + + //Add Label, Button and List + this->bluetoothle_label = ui_utils_label_add(this->view->layout, "BLE"); + elm_object_part_content_set(this->view->layout, "bluetoothle_text", this->bluetoothle_label); + + this->bluetoothle_list = elm_list_add(this->view->layout); + RETVM_IF(!this->bluetoothle_list, NULL, "elm_list_add failed"); + evas_object_data_set(this->bluetoothle_list, "bluetooth_view", this); + elm_object_part_content_set(this->view->layout, "bluetoothle_list", this->bluetoothle_list); + + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + + + //Initialize Bluetooth + init_bluetooth(this); + + return this; +} + + +/** + * @function discover_bluetooth_le + * @since_tizen 2.3 + * @description Discover Bluetooth Le + * @parameter void*: Void Pointer + * @return static void + */ +static void discover_bluetooth_le(void* user_data) +{ + int result; + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + g_list_free_full(this->devices_list, bluetooth_list_free_func_cb); + this->devices_list = NULL; + + result = bt_adapter_le_start_scan(_bt_adapter_le_scan_result_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_le_start_scan failed --> error: %s", get_bluetooth_error(result)); +} + + +/** + * @function register_callback + * @since_tizen 2.3 + * @description Register Callback + * @parameter void*: Void Pointer + * @return static void + */ +static void register_callback(void* user_data) +{ + int result; + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + result = bt_adapter_set_state_changed_cb(_adapter_state_changed_cb , this); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_set_state_changed_cb Failed"); + + result = bt_gatt_set_connection_state_changed_cb(_bt_gatt_connection_state_changed_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_set_connection_state_changed_cb failed --> error: %s", get_bluetooth_error(result)); + +} + + +/** + * @function init_bluetooth + * @since_tizen 2.3 + * @description Init Bluetooth + * @parameter void*: Void Pointer + * @return static void + */ +static void init_bluetooth(void* user_data) +{ + int result; + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + bt_initialize(); + //Check whether the Bluetooth Service is enabled + result = bt_adapter_get_state(&this->adapter_state); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_get_state Failed"); + + if(this->adapter_state == BT_ADAPTER_DISABLED) + { + elm_object_text_set(this->bluetoothle_label, "Bluetooth Switched off, Turn ON manually"); + } + + register_callback(this); +} + + +/** + * @function _adapter_state_changed_cb + * @since_tizen 2.3 + * @description Adapter State Changed Cb + * @parameter int: Int, void*: Void Pointer + * @return static void + */ +static void _adapter_state_changed_cb(int result, bt_adapter_state_e adapter_state, void* data) +{ + DBG(" _adapter_state_changed_cb "); + + RETM_IF(NULL == data, "data is NULL"); + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + if(result != BT_ERROR_NONE) + { + DBG("[adapter_state_changed_cb] Failed! result=%d", result); + return; + } + this->adapter_state = adapter_state; + if(this->adapter_state == BT_ADAPTER_ENABLED) + { + elm_object_text_set(this->bluetoothle_label, "Bluetooth ON"); + } + else + { + elm_object_text_set(this->bluetoothle_label, "Bluetooth Switched off, Turn ON manually"); + } +} + + +/** + * @function is_new_scanned_device_found + * @since_tizen 2.3 + * @description Is New Scanned Device Found + * @parameter bluetoothle_view*: Bluetoothle View Pointer, bt_adapter_le_device_scan_result_info_s*: Bt Adapter Le Device Scan Result Info S Pointer + * @return static bool + */ +static bool is_new_scanned_device_found(bluetoothle_view *this, bt_adapter_le_device_scan_result_info_s *discovery_info) +{ + + DBG(" is_new_scanned_device_found "); + RETVM_IF(NULL == this, NULL, "view is NULL"); + RETVM_IF(NULL == discovery_info, NULL, "discovery_info is NULL"); + + GList *old_device = NULL; + int result = false; + + + old_device = g_list_find_custom (this->devices_list, discovery_info, bluetooth_list_find_func_cb); + + if(old_device == NULL) + { + result = true; + } + + return result; +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter bluetoothle_view*: Bluetoothle View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(bluetoothle_view *this, Evas_Object *parent) +{ + DBG("add_control_layout__"); + + RETVM_IF(NULL == this, NULL, "view is NULL"); + RETVM_IF(NULL == parent, NULL, "parent is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + + if(this->view->tbt_info->apptype == TBT_APP_BLE_GATT_CLIENT) + { + this->bluetoothle_btn = ui_utils_push_button_add(this, table, "Discover", _control_button_pressed_cb); + elm_table_pack(table, this->bluetoothle_btn, 0, 0, 3, 1); + + this->read_btn = ui_utils_push_button_add(this, table, "Read", _read_button_pressed_cb); + elm_table_pack(table, this->read_btn, 0, 1, 1, 1); + + this->write_btn = ui_utils_push_button_add(this, table, "Write", _write_button_pressed_cb); + elm_table_pack(table, this->write_btn, 1, 1, 1, 1); + + this->expand_btn = ui_utils_push_button_add(this, table, "Expand", _expand_button_pressed_cb); + elm_table_pack(table, this->expand_btn, 2, 1, 1, 1); + + set_control_btn_state(SERVICE_LISTED, this); + } + + return table; +} + + +/** + * @function _control_button_pressed_cb + * @since_tizen 2.3 + * @description Control Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _control_button_pressed_cb(void *user_data, Evas_Object *obj, void *event_info) +{ + DBG("_control_button_pressed_cb"); + + RETM_IF(NULL == user_data, "data is NULL"); + RETM_IF(NULL == obj, "obj is NULL"); + + + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + //Discover Bluetooth LE Devices + discover_bluetooth_le(this); +} + + +/** + * @function _read_button_pressed_cb + * @since_tizen 2.3 + * @description Read Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _read_button_pressed_cb(void *user_data, Evas_Object *obj, void *event_info) +{ + DBG("_read_button_pressed_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + RETM_IF(NULL == obj, "obj is NULL"); + + + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + int result; + bt_gatt_type_e type; + result = bt_gatt_get_type(this->gatt_handle, &type); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_get_type error: %s", get_bluetooth_error(result)); + + if(type == BT_GATT_TYPE_SERVICE) + { + + } + else if(type == BT_GATT_TYPE_CHARACTERISTIC) + { + result = bt_gatt_client_read_value(this->gatt_handle, _bt_gatt_client_read_request_completed_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_client_set_characteristic_value_changed_cb error: %s", get_bluetooth_error(result)); + + + } + else if(type == BT_GATT_TYPE_DESCRIPTOR) + { + int value; + int result; + char* str; + float f_val; + + if(this->descriptor_h == NULL){DBG("THIS IS NULL");} + if(this->is_int) + { + result = bt_gatt_get_int_value(this->descriptor_h, BT_DATA_TYPE_UINT8, 0, &value); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_get_int_value failed --> error: %s", get_bluetooth_error(result)); + + str = format_string("Descriptor value %d", value); + elm_list_item_append(this->bluetoothle_list, str, NULL, NULL, NULL, NULL); + SAFE_DELETE(str); + + elm_list_go(this->bluetoothle_list); + evas_object_show(this->bluetoothle_list); + + set_control_btn_state(DESCRIPTORS_SELECTED, this); + elm_object_text_set(this->read_btn, "Read float"); + elm_object_text_set(this->write_btn, "Write float"); + this->is_int = false; + } + else + { + result = bt_gatt_get_float_value(this->descriptor_h, BT_DATA_TYPE_FLOAT, 0, &f_val); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_get_float_value error: %s", get_bluetooth_error(result)); + str = format_string("Descriptor float value %f", f_val); + elm_list_item_append(this->bluetoothle_list, str, NULL, NULL, NULL, NULL); + SAFE_DELETE(str); + + elm_list_go(this->bluetoothle_list); + evas_object_show(this->bluetoothle_list); + + set_control_btn_state(DESCRIPTORS_READ, this); + } + + } + +} + + +/** + * @function _write_button_pressed_cb + * @since_tizen 2.3 + * @description Write Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _write_button_pressed_cb(void *user_data, Evas_Object *obj, void *event_info) +{ + DBG("_write_button_pressed_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + RETM_IF(NULL == obj, "obj is NULL"); + + + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + int result; + bt_gatt_type_e type; + result = bt_gatt_get_type(this->gatt_handle, &type); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_get_type error: %s", get_bluetooth_error(result)); + + if(type == BT_GATT_TYPE_SERVICE) + { + + } + else if(type == BT_GATT_TYPE_CHARACTERISTIC) + { + result = bt_gatt_set_value(this->gatt_handle, "Nazib", 5); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_set_value error: %s", get_bluetooth_error(result)); + + result = bt_gatt_client_write_value(this->gatt_handle, _bt_gatt_client_write_request_completed_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_client_write_value error: %s", get_bluetooth_error(result)); + + } + else if(type == BT_GATT_TYPE_DESCRIPTOR) + { + if(this->is_int) + { + result = bt_gatt_set_int_value(this->descriptor_h, BT_DATA_TYPE_UINT8, 25, 0); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_set_int_value error: %s", get_bluetooth_error(result)); + + } + else + { + result = bt_gatt_set_float_value(this->descriptor_h, BT_DATA_TYPE_FLOAT, 152, 2, 0); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_set_int_value error: %s", get_bluetooth_error(result)); + } + + set_control_btn_state(DESCRIPTORS_WRITTEN, this); + + } +} + + +/** + * @function _expand_button_pressed_cb + * @since_tizen 2.3 + * @description Expand Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _expand_button_pressed_cb(void *user_data, Evas_Object *obj, void *event_info) +{ + DBG("_expand_button_pressed_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + RETM_IF(NULL == obj, "obj is NULL"); + + + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + int result; + RETM_IF(NULL == this, "view is NULL"); + + bt_gatt_type_e type; + result = bt_gatt_get_type(this->gatt_handle, &type); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_get_type error: %s", get_bluetooth_error(result)); + + if(type == BT_GATT_TYPE_SERVICE) + { + + } + else if(type == BT_GATT_TYPE_CHARACTERISTIC) + { + int properties; + result = bt_gatt_characteristic_get_properties(this->characterstic_h, &properties); + RETM_IF(result != BT_ERROR_NONE,"bt_gatt_characteristic_get_properties error: %s", get_bluetooth_error(result)); + DBG("properties: %d", properties); + + result = bt_gatt_characteristic_foreach_descriptors(this->characterstic_h, _bt_gatt_foreach_descriptors_cb, this); + RETM_IF(result != BT_ERROR_NONE,"bt_gatt_characteristic_foreach_descriptors error: %s", get_bluetooth_error(result)); + + set_control_btn_state(CHARACTERISTIC_EXPANDED, this); + } + else if(type == BT_GATT_TYPE_DESCRIPTOR) + { + + } +} + + +/** + * @function set_control_btn_state + * @since_tizen 2.3 + * @description Set Control Btn State + * @parameter ctrl_btn_state_e: Ctrl Btn State E, void*: Void Pointer + * @return static void + */ +static void set_control_btn_state(ctrl_btn_state_e state, void* user_data) +{ + RETM_IF(NULL == user_data, "data is NULL"); + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + + RETM_IF(NULL == this, "view is NULL"); + +switch(state) +{ + case SERVICE_LISTED: + { + elm_object_disabled_set(this->read_btn, EINA_TRUE); + elm_object_disabled_set(this->write_btn, EINA_TRUE); + elm_object_disabled_set(this->expand_btn, EINA_TRUE); + break; + } + case SERVICE_EXPANDED: + { + elm_object_text_set(this->bluetoothle_label, "Characteristics.."); + elm_object_disabled_set(this->read_btn, EINA_TRUE); + elm_object_disabled_set(this->write_btn, EINA_TRUE); + elm_object_disabled_set(this->expand_btn, EINA_TRUE); + break; + } + case SERVICE_SELECTED: + { + elm_object_text_set(this->bluetoothle_label, "Services.."); + elm_object_disabled_set(this->read_btn, EINA_TRUE); + elm_object_disabled_set(this->write_btn, EINA_TRUE); + elm_object_disabled_set(this->expand_btn, EINA_FALSE); + break; + } + case CHARACTERISTICS_LISTED: + { elm_object_text_set(this->bluetoothle_label, "Characteristics.."); + elm_object_disabled_set(this->read_btn, EINA_TRUE); + elm_object_disabled_set(this->write_btn, EINA_TRUE); + elm_object_disabled_set(this->expand_btn, EINA_TRUE); + break; + } + case CHARACTERISTIC_SELECTED: + { + elm_object_text_set(this->bluetoothle_label, "Characteristics.."); + elm_object_disabled_set(this->read_btn, EINA_TRUE); + elm_object_disabled_set(this->write_btn, EINA_FALSE); + elm_object_disabled_set(this->expand_btn, EINA_FALSE); + break; + } + case CHARACTERISTIC_READ: + { + elm_object_text_set(this->bluetoothle_label, "Read Successfully"); + elm_object_disabled_set(this->read_btn, EINA_TRUE); + elm_object_disabled_set(this->write_btn, EINA_TRUE); + elm_object_disabled_set(this->expand_btn, EINA_FALSE); + break; + } + case CHARACTERISTIC_WRITTEN: + { elm_object_text_set(this->bluetoothle_label, "Written Successfully"); + elm_object_disabled_set(this->read_btn, EINA_FALSE); + elm_object_disabled_set(this->write_btn, EINA_TRUE); + elm_object_disabled_set(this->expand_btn, EINA_FALSE); + break; + } + case CHARACTERISTIC_EXPANDED: + { elm_object_text_set(this->bluetoothle_label, "Descriptors.."); + elm_object_disabled_set(this->read_btn, EINA_TRUE); + elm_object_disabled_set(this->write_btn, EINA_TRUE); + elm_object_disabled_set(this->expand_btn, EINA_TRUE); + break; + } + case DESCRIPTORS_LISTED: + { elm_object_text_set(this->bluetoothle_label, "Descriptors.."); + elm_object_disabled_set(this->read_btn, EINA_TRUE); + elm_object_disabled_set(this->write_btn, EINA_TRUE); + elm_object_disabled_set(this->expand_btn, EINA_TRUE); + break; + } + case DESCRIPTORS_SELECTED: + { + elm_object_text_set(this->bluetoothle_label, "Descriptors.."); + elm_object_disabled_set(this->read_btn, EINA_TRUE); + elm_object_disabled_set(this->write_btn, EINA_FALSE); + elm_object_disabled_set(this->expand_btn, EINA_TRUE); + break; + } + case DESCRIPTORS_READ: + { + elm_object_text_set(this->bluetoothle_label, "Read Successfully"); + elm_object_disabled_set(this->read_btn, EINA_TRUE); + elm_object_disabled_set(this->write_btn, EINA_TRUE); + elm_object_disabled_set(this->expand_btn, EINA_TRUE); + break; + } + case DESCRIPTORS_WRITTEN: + { + elm_object_text_set(this->bluetoothle_label, "Written Successfully"); + elm_object_disabled_set(this->read_btn, EINA_FALSE); + elm_object_disabled_set(this->write_btn, EINA_TRUE); + elm_object_disabled_set(this->expand_btn, EINA_TRUE); + break; + } + } +} + + +/** + * @function bluetooth_list_find_func_cb + * @since_tizen 2.3 + * @description Bluetooth List Find Func Cb + * @parameter gconstpointer: Gconstpointer + * @return static gint + */ +static gint bluetooth_list_find_func_cb(gconstpointer a, gconstpointer b) +{ + DBG(" bluetooth_list_find_func_cb "); + + if(a && b) + { + bt_adapter_le_device_scan_result_info_s * device_info_a; + device_info_a = (bt_adapter_le_device_scan_result_info_s*)a; + RETVM_IF(NULL == device_info_a, -1, "device_info_a is NULL"); + + bt_adapter_le_device_scan_result_info_s * device_info_b; + device_info_b = (bt_adapter_le_device_scan_result_info_s*)b; + RETVM_IF(NULL == device_info_b, -1, "device_info_b is NULL"); + + RETVM_IF(NULL == device_info_a->remote_address, -1, "device_info_a->remote_address is NULL"); + RETVM_IF(NULL == device_info_b->remote_address, -1, "device_info_b->remote_address is NULL"); + + return strcmp(device_info_a->remote_address, device_info_b->remote_address); + } + else + { + return -1; + } + +} + + +/** + * @function bluetooth_list_free_func_cb + * @since_tizen 2.3 + * @description Bluetooth List Free Func Cb + * @parameter gpointer: Gpointer + * @return static void + */ +static void bluetooth_list_free_func_cb(gpointer data) +{ + if(data) + { + free(data); + } +} + + +/** + * @function log_list_free_func_cb + * @since_tizen 2.3 + * @description Log List Free Func Cb + * @parameter gpointer: Gpointer + * @return static void + */ +static void log_list_free_func_cb(gpointer data) +{ + if(data) + { + free(data); + } +} + + +/** + * @function _bt_adapter_le_scan_result_cb + * @since_tizen 2.3 + * @description Bt Adapter Le Scan Result Cb + * @parameter int: Int, bt_adapter_le_device_scan_result_info_s*: Bt Adapter Le Device Scan Result Info S Pointer, void*: Void Pointer + * @return static void + */ +static void _bt_adapter_le_scan_result_cb(int result, bt_adapter_le_device_scan_result_info_s *info, void *user_data) +{ + DBG("Inside device discovery"); + + RETM_IF(NULL == user_data, "data is NULL"); + RETM_IF(NULL == info, "info is NULL"); + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + if (info != NULL) + { + this->scan_info = info; + + if (is_new_scanned_device_found(this, info) == true) + { + bt_adapter_le_device_discovery_info_s * device_info; + device_info = malloc(sizeof(bt_adapter_device_discovery_info_s)); + DBG("BLE remote_address: %s", info->remote_address); + if (device_info != NULL) + { + memcpy(device_info, info, sizeof(bt_adapter_le_device_scan_result_info_s)); + device_info->remote_address = strdup(info->remote_address); + + //Hold the last deviceinfo pointer; + this->devices_list = g_list_append(this->devices_list, (gpointer) device_info); + } + } + } + + update_view_controls(this); +} + + + +/** + * @function _bt_gatt_foreach_services_cb + * @since_tizen 2.3 + * @description Bt Gatt Foreach Services Cb + * @parameter int: Int, void*: Void Pointer + * @return static bool + */ +static bool _bt_gatt_foreach_services_cb(int total, int index, bt_gatt_h gatt_handle, void *user_data) +{ + RETVM_IF(NULL == user_data, false, "data is NULL"); + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETVM_IF(NULL == this,false, "view is NULL"); + + RETVM_IF(NULL == gatt_handle,false, "gatt_handle is NULL"); + + this->gatt_handle = gatt_handle; + + g_list_free_full(this->log_list, log_list_free_func_cb); + this->log_list = NULL; + + int result; + + result = bt_gatt_service_get_client(gatt_handle, &this->service_h); + RETVM_IF(result != BT_ERROR_NONE,false, "bt_gatt_service_get_client error: %s", get_bluetooth_error(result)); + + char* uuid; + result = bt_gatt_get_uuid(gatt_handle, &uuid); + RETVM_IF(result != BT_ERROR_NONE,false, "bt_gatt_get_uuid error: %s", get_bluetooth_error(result)); + DBG("uuid: %s", uuid); + + char* str; + str = format_string("Service UUID: %s",uuid); + elm_list_item_append(this->bluetoothle_list, str, NULL, NULL, _sevice_selected_cb, gatt_handle); + SAFE_DELETE(str); + + return true; +} + + +/** + * @function _bt_gatt_foreach_included_service + * @since_tizen 2.3 + * @description Bt Gatt Foreach Included Service + * @parameter int: Int, void*: Void Pointer + * @return static bool + */ +static bool _bt_gatt_foreach_included_service(int total, int index, bt_gatt_h gatt_handle, void *user_data) +{ + RETVM_IF(NULL == user_data, false, "data is NULL"); + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETVM_IF(NULL == this,false, "view is NULL"); + + int result; + char* uuid; + result = bt_gatt_get_uuid(gatt_handle, &uuid); + RETVM_IF(result != BT_ERROR_NONE,false, "bt_gatt_get_uuid error: %s", get_bluetooth_error(result)); + RETVM_IF(NULL == uuid,false, "uuid is null"); + DBG("_bt_gatt_foreach_included_service uuid: %s", uuid); + + char* str; + str = format_string("Included Service: %s",uuid); + elm_list_item_append(this->bluetoothle_list, str, NULL, NULL, _included_sevice_selected_cb, uuid); + SAFE_DELETE(str); + SAFE_DELETE(uuid); + + return true; + +} + + +/** + * @function _bt_gatt_foreach_characterstics_cb + * @since_tizen 2.3 + * @description Bt Gatt Foreach Characterstics Cb + * @parameter int: Int, void*: Void Pointer + * @return static bool + */ +static bool _bt_gatt_foreach_characterstics_cb(int total, int index, bt_gatt_h gatt_handle, void *user_data) +{ + + DBG("_bt_gatt_foreach_characterstics_cb"); + RETVM_IF(NULL == user_data, false, "data is NULL"); + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETVM_IF(NULL == this,false, "view is NULL"); + + char* str; + int result; + RETVM_IF(NULL == gatt_handle,false, "gatt_handle is NULL"); + this->gatt_handle = gatt_handle; + + bt_gatt_write_type_e write_type; + result = bt_gatt_characteristic_get_write_type(gatt_handle, &write_type); + RETVM_IF(result != BT_ERROR_NONE,false, "bt_gatt_characteristic_get_write_type error: %s", get_bluetooth_error(result)); + + result = bt_gatt_characteristic_set_write_type(gatt_handle, BT_GATT_WRITE_TYPE_WRITE); + RETVM_IF(result != BT_ERROR_NONE,false, "bt_gatt_characteristic_set_write_type error: %s", get_bluetooth_error(result)); + + bt_gatt_h service; + result = bt_gatt_characteristic_get_service(gatt_handle, &service); + RETVM_IF(result != BT_ERROR_NONE,false, "bt_gatt_characteristic_get_service error: %s", get_bluetooth_error(result)); + this->service_h = service; + + this->n_characteristics = total; + this->all_characteristics[index] = gatt_handle; + + char* uuid; + result = bt_gatt_get_uuid(gatt_handle, &uuid); + RETVM_IF(result != BT_ERROR_NONE,false, "bt_gatt_get_uuid error: %s", get_bluetooth_error(result)); + DBG("uuid: %s", uuid); + + str = format_string("characteristic %d uuid: %s", index, uuid); + elm_list_item_append(this->bluetoothle_list, str, NULL, NULL, _characteristic_selected_cb, uuid); + SAFE_DELETE(str); + + result = bt_gatt_client_set_characteristic_value_changed_cb(gatt_handle, _bt_gatt_client_characteristic_value_changed_cb,this); + RETVM_IF(result != BT_ERROR_NONE,false, "bt_gatt_client_set_characteristic_value_changed_cb error: %s", get_bluetooth_error(result)); + this->characterstic_h = gatt_handle; + + + + char* service_uuid; + result = bt_gatt_get_uuid(gatt_handle, &service_uuid); + RETVM_IF(result != BT_ERROR_NONE,false, "bt_gatt_get_uuid error: %s", get_bluetooth_error(result)); + DBG("characteristic %d service_uuid: %s",index, service_uuid); + + DBG("Total: %d index: %d", total, index); + + return true; +} + + +/** + * @function _bt_gatt_client_characteristic_value_changed_cb + * @since_tizen 2.3 + * @description Bt Gatt Client Characteristic Value Changed Cb + * @parameter bt_gatt_h: Bt Gatt H, char*: Char Pointer, void*: Void Pointer + * @return static void + */ +static void _bt_gatt_client_characteristic_value_changed_cb(bt_gatt_h characteristic, char *value, int len, void *user_data) +{ + DBG("_bt_gatt_foreach_descriptors_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + DBG("value: %s, len %d", value, len); + + char* str; + + str = format_string("characteristics value changed"); + elm_list_item_append(this->bluetoothle_list, str, NULL, NULL, NULL, NULL); + SAFE_DELETE(str); + str = format_string("value %s length %d", value, len); + elm_list_item_append(this->bluetoothle_list, str, NULL, NULL, NULL, NULL); + SAFE_DELETE(str); + +} + + +/** + * @function _bt_gatt_foreach_descriptors_cb + * @since_tizen 2.3 + * @description Bt Gatt Foreach Descriptors Cb + * @parameter int: Int, void*: Void Pointer + * @return static bool + */ +static bool _bt_gatt_foreach_descriptors_cb(int total, int index, bt_gatt_h gatt_handle, void *user_data) +{ + DBG("_bt_gatt_foreach_descriptors_cb"); + RETVM_IF(NULL == user_data, false, "data is NULL"); + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETVM_IF(NULL == this,false, "view is NULL"); + DBG("Total: %d index: %d", total, index); + + this->gatt_handle = gatt_handle; + + char* str; + int result; + + bt_gatt_h characteristic; + result = bt_gatt_descriptor_get_characteristic(gatt_handle, &characteristic); + RETVM_IF(result != BT_ERROR_NONE,false, "bt_gatt_descriptor_get_characteristic error: %s", get_bluetooth_error(result)); + + char* characteristic_uuid; + result = bt_gatt_get_uuid(characteristic, &characteristic_uuid); + RETVM_IF(result != BT_ERROR_NONE,false, "bt_gatt_get_uuid error: %s", get_bluetooth_error(result)); + RETVM_IF(NULL == characteristic_uuid,false, "characteristic_uuid is null"); + DBG("characteristic_uuid: %s", characteristic_uuid); + + elm_list_clear(this->bluetoothle_list); + char* descriptor_uuid; + result = bt_gatt_get_uuid(gatt_handle, &descriptor_uuid); + RETVM_IF(result != BT_ERROR_NONE,false,"bt_gatt_get_uuid error: %s", get_bluetooth_error(result)); + RETVM_IF(NULL == descriptor_uuid,false, "descriptor_uuid is null"); + DBG("descriptor_uuid: %s", descriptor_uuid); + this->descriptor_h = gatt_handle; + + str = format_string("Descriptor %d uuid: %s", index, descriptor_uuid); + elm_list_item_append(this->bluetoothle_list, str, NULL, NULL, _descriptor_selected_cb, descriptor_uuid); + SAFE_DELETE(str); + SAFE_DELETE(characteristic_uuid); + SAFE_DELETE(descriptor_uuid); + return true; +} + + +/** + * @function _bt_gatt_client_write_request_completed_cb + * @since_tizen 2.3 + * @description Bt Gatt Client Write Request Completed Cb + * @parameter int: Int, void*: Void Pointer + * @return static void + */ +static void _bt_gatt_client_write_request_completed_cb(int result, bt_gatt_h request_handle, void *user_data) +{ + DBG("_bt_gatt_client_write_request_completed_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETM_IF(NULL == this,"view is NULL"); + + set_control_btn_state(CHARACTERISTIC_WRITTEN, this); +} + + +/** + * @function _bt_gatt_client_read_request_completed_cb + * @since_tizen 2.3 + * @description Bt Gatt Client Read Request Completed Cb + * @parameter int: Int, void*: Void Pointer + * @return static void + */ +static void _bt_gatt_client_read_request_completed_cb(int result, bt_gatt_h request_handle, void *user_data) +{ + + + DBG("_bt_gatt_client_read_request_completed_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETM_IF(NULL == this,"view is NULL"); + this->is_read_completed = true; + char* value; + int value_length; + result = bt_gatt_get_value(request_handle, &value, &value_length); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_get_value failed --> error: %s", get_bluetooth_error(result)); + DBG("value: %s, value_length: %d", value, value_length); + + char* str; + str = format_string("value %s len %d", value, value_length); + elm_list_item_append(this->bluetoothle_list, str, NULL, NULL, NULL, NULL); + SAFE_DELETE(str); + + DBG("read completed"); + set_control_btn_state(CHARACTERISTIC_READ, this); +} + + +/** + * @function update_view_controls + * @since_tizen 2.3 + * @description Update View Controls + * @parameter bluetoothle_view*: Bluetoothle View Pointer + * @return static void + */ +static void update_view_controls(bluetoothle_view *this) +{ + DBG("update_view_controls"); + int result; + + //Check whether the Bluetooth Service is enabled + result = bt_adapter_get_state(&this->adapter_state); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_get_state fail > Error = %d", result); + + //If the Bluetooth Service is not enabled + if(this->adapter_state == BT_ADAPTER_DISABLED) + { + this->discovery_state = BT_ADAPTER_DEVICE_DISCOVERY_NONE; + ui_utils_label_set_text(this->bluetoothle_label, "Bluetooth is Switched Off", "left"); + } + else if(this->adapter_state == BT_ADAPTER_ENABLED) + { + + ui_utils_label_set_text(this->bluetoothle_label, "Discovery Found...", "left"); + discovered_devices_list_show(this); + } +} + + +/** + * @function discovered_devices_list_show + * @since_tizen 2.3 + * @description Discovered Devices List Show + * @parameter bluetoothle_view*: Bluetoothle View Pointer + * @return static void + */ +static void discovered_devices_list_show(bluetoothle_view *this) +{ + DBG(" discovered_devices_list_show "); + RETM_IF(NULL == this, "view is NULL"); + + elm_list_clear(this->bluetoothle_list); + + GList *l; + bt_adapter_le_device_scan_result_info_s *device_info; + + for(l = this->devices_list; l != NULL; l = l->next) + { + device_info = (bt_adapter_le_device_scan_result_info_s*)l->data; + + if(NULL != device_info) + { + char* name = NULL; + bt_adapter_le_get_scan_result_device_name(device_info, BT_ADAPTER_LE_PACKET_SCAN_RESPONSE, &name); + + if(name != NULL) + { + elm_list_item_append(this->bluetoothle_list, name, NULL, NULL, _device_item_selected_cb, device_info); + } + else + { + elm_list_item_append(this->bluetoothle_list, device_info->remote_address, NULL, NULL, _device_item_selected_cb, device_info); + } + } + } + + elm_list_go(this->bluetoothle_list); + evas_object_show(this->bluetoothle_list); +} + + +/** + * @function _device_item_selected_cb + * @since_tizen 2.3 + * @description Device Item Selected Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _device_item_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG(" _device_item_selected_cb "); + int result; + + RETM_IF(!data, "data is NULL"); + + + bluetoothle_view *this; + this = evas_object_data_get(obj, "bluetooth_view"); + RETM_IF(!this, "view is NULL"); + + bt_adapter_le_device_scan_result_info_s *device_info; + device_info = (bt_adapter_le_device_scan_result_info_s*)data; + RETM_IF(NULL == device_info, "bt_adapter_device_le_discovery_info_s is NULL"); + + DBG("Device Info remote address: %s", device_info->remote_address); + + Elm_Object_Item *item; + item = (Elm_Object_Item*)event_info; + elm_list_item_selected_set(item, EINA_TRUE); + this->selected_device_item = item; + + result = bt_adapter_le_stop_scan(); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_le_stop_scan fail > Error = %d", result); + + result = bt_gatt_connect(device_info->remote_address, false); + DBG("bt_gatt_connect %s", get_bluetooth_error(result)); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_connect failed --> error: %s", get_bluetooth_error(result)); + elm_object_text_set(this->bluetoothle_label, "gatt connecting..."); + elm_object_disabled_set(this->bluetoothle_btn, EINA_TRUE); +} + + +/** + * @function _sevice_selected_cb + * @since_tizen 2.3 + * @description Sevice Selected Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _sevice_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG(" _sevice_selected_cb "); + int result; + + RETM_IF(!data, "data is NULL"); + + + bluetoothle_view *this; + this = evas_object_data_get(obj, "bluetooth_view"); + RETM_IF(!this, "view is NULL"); + + elm_list_clear(this->bluetoothle_list); + bt_gatt_h service_h = (bt_gatt_h)data; + + this->service_h = service_h; + + DBG("gatt_handle type service"); + result = bt_gatt_service_foreach_characteristics(service_h, _bt_gatt_foreach_characterstics_cb, this); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_service_foreach_characteristics failed --> error: %s", get_bluetooth_error(result)); + + result = bt_gatt_service_foreach_included_services(service_h, _bt_gatt_foreach_included_service, this); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_service_foreach_included_services failed --> error: %s", get_bluetooth_error(result)); + + set_control_btn_state(SERVICE_EXPANDED, this); + +} + + +/** + * @function _included_sevice_selected_cb + * @since_tizen 2.3 + * @description Included Sevice Selected Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _included_sevice_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("_included_sevice_selected_cb"); + int result; + + RETM_IF(!data, "data is NULL"); + + + bluetoothle_view *this; + this = evas_object_data_get(obj, "bluetooth_view"); + RETM_IF(!this, "view is NULL"); + + + char* uuid = (char*)data; + bt_gatt_h included_service; + result = bt_gatt_service_get_included_service(this->service_h, uuid, &included_service); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_service_get_included_service error: %s", get_bluetooth_error(result)); + + this->service_h = included_service; + + set_control_btn_state(SERVICE_LISTED, this); + +} + + +/** + * @function _descriptor_selected_cb + * @since_tizen 2.3 + * @description Descriptor Selected Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _descriptor_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("_descriptor_selected_cb "); + + RETM_IF(!data, "data is NULL"); + + + bluetoothle_view *this; + this = evas_object_data_get(obj, "bluetooth_view"); + RETM_IF(!this, "view is NULL"); + char* uuid = (char*)data; + bt_gatt_h descriptor; + int result; + + result = bt_gatt_characteristic_get_descriptor(this->characterstic_h, uuid, &descriptor); + RETM_IF(result != BT_ERROR_NONE,"bt_gatt_characteristic_get_descriptor error: %s", get_bluetooth_error(result)); + + this->descriptor_h = descriptor; + this->is_int = true; + + elm_object_text_set(this->read_btn, "Read int"); + elm_object_text_set(this->write_btn, "Write int"); + set_control_btn_state(DESCRIPTORS_SELECTED, this); + + +} + + +/** + * @function _characteristic_selected_cb + * @since_tizen 2.3 + * @description Characteristic Selected Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _characteristic_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG(" _characteristic_selected_cb "); + + RETM_IF(!data, "data is NULL"); + + int result; + + bluetoothle_view *this; + this = evas_object_data_get(obj, "bluetooth_view"); + RETM_IF(!this, "view is NULL"); + + char* uuid = (char*)data; + + bt_gatt_h characteristic_h; + result = bt_gatt_service_get_characteristic(this->service_h, uuid, &characteristic_h); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_service_get_characteristic error: %s", get_bluetooth_error(result)); + + + this->characterstic_h = characteristic_h; + + set_control_btn_state(CHARACTERISTIC_SELECTED, this); +} + + +/** + * @function _bt_gatt_connection_state_changed_cb + * @since_tizen 2.3 + * @description Bt Gatt Connection State Changed Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _bt_gatt_connection_state_changed_cb(int result, bool connected, const char *remote_address, void *user_data) +{ + DBG("_bt_gatt_connection_state_changed_cb: %d", result); + RETM_IF(NULL == user_data, "data is NULL"); + bluetoothle_view *this = NULL; + this = (bluetoothle_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == remote_address, "remote_address is NULL"); + + int ret; + + if(connected) + { + elm_object_text_set(this->bluetoothle_label, "gatt connected..."); + + if(this->view->tbt_info->apptype == TBT_APP_BLE_GATT_CLIENT) + { + elm_list_clear(this->bluetoothle_list); + ret = bt_gatt_client_create(remote_address, &this->client); + RETM_IF(ret != BT_ERROR_NONE, "bt_gatt_client_create error: %s", get_bluetooth_error(ret)); + + set_control_btn_state(SERVICE_LISTED, this); + + ret = bt_gatt_client_foreach_services(this->client, _bt_gatt_foreach_services_cb, this); + RETM_IF(ret != BT_ERROR_NONE, "bt_gatt_client_foreach_services error: %s", get_bluetooth_error(ret)); + + char* client_remote_address; + ret = bt_gatt_client_get_remote_address(this->client, &client_remote_address); + RETM_IF(ret != BT_ERROR_NONE, "bt_gatt_client_get_remote_address error: %s", get_bluetooth_error(ret)); + DBG("client_remote_address: %s", client_remote_address); + + char* str; + str = format_string("remote address: %s", client_remote_address); + //DBG("3.............."); + elm_list_item_append(this->bluetoothle_list, str, NULL, NULL, NULL, NULL); + SAFE_DELETE(str); + } + + } + + +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return void + */ +void _app_destroy_cb(void* this) +{ + bluetoothle_view *view = NULL; + view = (bluetoothle_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + int result; + + + if(view->view->tbt_info->apptype == TBT_APP_BLE_GATT_CLIENT) + { + bt_adapter_le_stop_scan(); + result = bt_gatt_client_destroy(view->client); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_client_destroy error: %s", get_bluetooth_error(result)); + result = bt_gatt_client_unset_characteristic_value_changed_cb(view->characterstic_h); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_client_unset_characteristic_value_changed_cb error: %s", get_bluetooth_error(result)); + } + result = bt_gatt_unset_connection_state_changed_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_gatt_unset_connection_state_changed_cb error: %s", get_bluetooth_error(result)); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + + +/** + * @function get_bluetooth_error + * @since_tizen 2.3 + * @description Get Bluetooth Error + * @parameter bt_error_e: Bt Error E + * @return static char* + */ +static char* get_bluetooth_error(bt_error_e error) +{ + char* ret; + +switch(error) +{ + case BT_ERROR_NONE: + ret = "BT_ERROR_NONE"; + break; + case BT_ERROR_CANCELLED: + ret = "BT_ERROR_CANCELLED"; + break; + case BT_ERROR_INVALID_PARAMETER: + ret = "BT_ERROR_INVALID_PARAMETER"; + break; + case BT_ERROR_OUT_OF_MEMORY: + ret = "BT_ERROR_OUT_OF_MEMORY"; + break; + case BT_ERROR_RESOURCE_BUSY: + ret = "BT_ERROR_RESOURCE_BUSY"; + break; + case BT_ERROR_TIMED_OUT: + ret = "BT_ERROR_TIMED_OUT"; + break; + case BT_ERROR_NOW_IN_PROGRESS: + ret = "BT_ERROR_NOW_IN_PROGRESS"; + break; + case BT_ERROR_NOT_SUPPORTED: + ret = "BT_ERROR_NOT_SUPPORTED"; + break; + case BT_ERROR_PERMISSION_DENIED: + ret = "BT_ERROR_PERMISSION_DENIED"; + break; + case BT_ERROR_QUOTA_EXCEEDED: + ret = "BT_ERROR_QUOTA_EXCEEDED"; + break; + case BT_ERROR_NO_DATA: + ret = "BT_ERROR_NO_DATA"; + break; + case BT_ERROR_NOT_INITIALIZED: + ret = "BT_ERROR_NOT_INITIALIZED"; + break; + case BT_ERROR_NOT_ENABLED: + ret = "BT_ERROR_NOT_ENABLED"; + break; + case BT_ERROR_ALREADY_DONE: + ret = "BT_ERROR_ALREADY_DONE"; + break; + case BT_ERROR_OPERATION_FAILED: + ret = "BT_ERROR_OPERATION_FAILED"; + break; + case BT_ERROR_NOT_IN_PROGRESS: + ret = "BT_ERROR_NOT_IN_PROGRESS"; + break; + case BT_ERROR_REMOTE_DEVICE_NOT_BONDED: + ret = "BT_ERROR_REMOTE_DEVICE_NOT_BONDED"; + break; + case BT_ERROR_AUTH_REJECTED: + ret = "BT_ERROR_AUTH_REJECTED"; + break; + case BT_ERROR_AUTH_FAILED: + ret = "BT_ERROR_AUTH_FAILED"; + break; + case BT_ERROR_REMOTE_DEVICE_NOT_FOUND: + ret = "BT_ERROR_NONE"; + break; + case BT_ERROR_SERVICE_SEARCH_FAILED: + ret = "BT_ERROR_SERVICE_SEARCH_FAILED"; + break; + case BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED: + ret = "BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED"; + break; + case BT_ERROR_AGAIN: + ret = "BT_ERROR_AGAIN"; + break; + case BT_ERROR_SERVICE_NOT_FOUND: + ret = "BT_ERROR_SERVICE_NOT_FOUND"; + break; + default: + ret = "Unknown Error"; + break; + } + + return ret; +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-bluetoothoob-view.c b/tbtcoreapp/src/view/tbt-bluetoothoob-view.c new file mode 100644 index 0000000..157b339 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-bluetoothoob-view.c @@ -0,0 +1,754 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-bluetoothoob-view.c + * @brief Bluetooth OOB + * + * @author A. B. M. Nazibullah(nazib.ullah@samsung.com) + * @date June, 2015 + * @credit + * + */ +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_BT_OOB + +#include +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-bluetoothoob-view.h" +#include "view/tbt-common-view.h" + +struct _bluetoothoob_view +{ + common_view* view; + Evas_Object *bluetoothoob_label; + Evas_Object *btn_make_pair; + + char* remote_address; + char* remote_hash; + char* remote_randomizer; + + char* local_address; + char* local_hash; + char* local_randomizer; + + +}; + +static void _app_destroy_cb(void* this); +static char* get_bt_adapter_error(int result); +static char* get_nfc_error(nfc_error_e error_code); + +static void on_make_pair_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); + +static void initialize_nfc(bluetoothoob_view *this); +static int nfc_onoff_operation(void); +static void _nfc_activation_changed_cb(bool activated , void *user_data); +static void _nfc_ndef_discovered_cb(nfc_ndef_message_h message, void *user_data); +static void _nfc_p2p_target_discovered_cb(nfc_discovered_type_e type, nfc_p2p_target_h target, void *user_data); +static void _nfc_tag_discovered_cb(nfc_discovered_type_e type, nfc_tag_h tag, void *user_data); +static void _tag_write_completed_cb(nfc_error_e result, void *user_data); +static void _nfc_tag_read_completed_cb(nfc_error_e result, nfc_ndef_message_h message, void *user_data); +static void _adapter_device_bond_created_cb(int result, bt_device_info_s *device_info, void *data); +static nfc_ndef_message_h create_ndef_message(); +static void nfc_ndef_message_read(nfc_ndef_message_h message, void *user_data); + + +/** + * @function bluetoothoob_view_add + * @since_tizen 2.3 + * @description Bluetoothoob View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return bluetoothoob_view* + */ +bluetoothoob_view *bluetoothoob_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + int result; + + bluetoothoob_view *this = NULL; + this = calloc(1, sizeof(bluetoothoob_view)); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + this->remote_address = NULL; + this->remote_hash = NULL; + this->remote_randomizer = NULL; + + tbt_info->layout_group = "bluetooth_oob_viewer"; + tbt_info->layout_file = get_edje_path("bluetooth_oob_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + if(this->view->tbt_info->apptype == TBT_APP_BT_OOB_DEVICE) + { + Evas_Object *table = elm_table_add(this->view->layout); + this->btn_make_pair = ui_utils_push_button_add(this, table, "Make Pair", on_make_pair_button_pressed_cb); + elm_table_pack(table, this->btn_make_pair, 1, 0, 1, 1); + elm_object_part_content_set(this->view->layout, "controlr_part", table); + evas_object_show(table); + } + + bt_initialize(); + + result = bt_device_set_bond_created_cb(_adapter_device_bond_created_cb, this); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_device_set_bond_created_cb Failed"); + + initialize_nfc(this); + + return this; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* view) +{ + RETM_IF(NULL == view, "data is NULL"); + int result; + + bluetoothoob_view *this = NULL; + this = (bluetoothoob_view*)view; + RETM_IF(NULL == this, "view is NULL"); + + result = bt_device_unset_bond_created_cb(); + RETM_IF(result != BT_ERROR_NONE, "bt_device_uset_bond_created_cb Failed"); + + + if(this->view->tbt_info->apptype == TBT_APP_BT_OOB_DEVICE) + { + result = bt_adapter_remove_remote_oob_data(this->remote_address); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_remove_remote_oob_data Failed"); + } + + nfc_manager_unset_activation_changed_cb(); + + nfc_manager_unset_ndef_discovered_cb(); + + nfc_manager_unset_p2p_target_discovered_cb(); + + nfc_manager_unset_tag_discovered_cb(); + + SAFE_DELETE(this->remote_address); + SAFE_DELETE(this->remote_hash); + SAFE_DELETE(this->remote_randomizer); + SAFE_DELETE(this->view); + SAFE_DELETE(this); + +} + + +/** + * @function get_bt_adapter_error + * @since_tizen 2.3 + * @description Get Bt Adapter Error + * @parameter int: Int + * @return static char* + */ +static char* get_bt_adapter_error(int result) +{ + char* err = NULL; + + if(result == BT_ERROR_NONE) + { + err = "BT_ERROR_NONE"; + } + else if(result == BT_ERROR_CANCELLED) + { + err = "BT_ERROR_CANCELLED"; + } + else if(result == BT_ERROR_INVALID_PARAMETER) + { + err = "BT_ERROR_INVALID_PARAMETER"; + } + else if(result == BT_ERROR_OUT_OF_MEMORY) + { + err = "BT_ERROR_OUT_OF_MEMORY"; + } + else if(result == BT_ERROR_RESOURCE_BUSY) + { + err = "BT_ERROR_RESOURCE_BUSY"; + } + else if(result == BT_ERROR_TIMED_OUT) + { + err = "BT_ERROR_TIMED_OUT"; + } + else if(result == BT_ERROR_NOW_IN_PROGRESS) + { + err = "BT_ERROR_NOW_IN_PROGRESS"; + } + else if(result == BT_ERROR_PERMISSION_DENIED) + { + err = "BT_ERROR_PERMISSION_DENIED"; + } + else if(result == BT_ERROR_QUOTA_EXCEEDED) + { + err = "BT_ERROR_QUOTA_EXCEEDED"; + } + else if(result == BT_ERROR_NOT_INITIALIZED) + { + err = "BT_ERROR_NOT_INITIALIZED"; + } + else if(result == BT_ERROR_NOT_ENABLED) + { + err = "BT_ERROR_NOT_ENABLED"; + } + else if(result == BT_ERROR_ALREADY_DONE) + { + err = "BT_ERROR_ALREADY_DONE"; + } + else if(result == BT_ERROR_OPERATION_FAILED) + { + err = "BT_ERROR_OPERATION_FAILED"; + } + else if(result == BT_ERROR_NOT_IN_PROGRESS) + { + err = "BT_ERROR_NOT_IN_PROGRESS"; + } + else if(result == BT_ERROR_REMOTE_DEVICE_NOT_BONDED) + { + err = "BT_ERROR_REMOTE_DEVICE_NOT_BONDED"; + } + else if(result == BT_ERROR_AUTH_REJECTED) + { + err = "BT_ERROR_AUTH_REJECTED"; + } + else if(result == BT_ERROR_AUTH_FAILED) + { + err = "BT_ERROR_AUTH_FAILED"; + } + else if(result == BT_ERROR_REMOTE_DEVICE_NOT_FOUND) + { + err = "BT_ERROR_REMOTE_DEVICE_NOT_FOUND"; + } + else if(result == BT_ERROR_SERVICE_SEARCH_FAILED) + { + err = "BT_ERROR_SERVICE_SEARCH_FAILED"; + } + else if(result == BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED) + { + err = "BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED"; + } + else if(result == BT_ERROR_AGAIN) + { + err = "BT_ERROR_AGAIN"; + } + else if(result == BT_ERROR_SERVICE_NOT_FOUND) + { + err = "BT_ERROR_SERVICE_NOT_FOUND"; + } + else + { + err = "UNKNOWN_ERROR"; + } + + return err; + +} + + +/** + * @function get_nfc_error + * @since_tizen 2.3 + * @description Get Nfc Error + * @parameter nfc_error_e: Nfc Error E + * @return static char* + */ +static char* get_nfc_error(nfc_error_e error_code) +{ + char* error; + +switch(error_code) +{ + case NFC_ERROR_NONE: + error = "NFC_ERROR_NONE"; + break; + case NFC_ERROR_OUT_OF_MEMORY: + error = "NFC_ERROR_OUT_OF_MEMORY"; + break; + case NFC_ERROR_OPERATION_FAILED: + error = "NFC_ERROR_OPERATION_FAILED"; + break; + case NFC_ERROR_INVALID_PARAMETER: + error = "NFC_ERROR_INVALID_PARAMETER"; + break; + case NFC_ERROR_INVALID_NDEF_MESSAGE: + error = "NFC_ERROR_INVALID_NDEF_MESSAGE"; + break; + case NFC_ERROR_INVALID_RECORD_TYPE: + error = "NFC_ERROR_INVALID_RECORD_TYPE"; + break; + case NFC_ERROR_TIMED_OUT: + error = "NFC_ERROR_TIMED_OUT"; + break; + case NFC_ERROR_DEVICE_BUSY: + error = "NFC_ERROR_DEVICE_BUSY"; + break; + case NFC_ERROR_NO_DEVICE: + error = "NFC_ERROR_NO_DEVICE"; + break; + case NFC_ERROR_NOT_ACTIVATED: + error = "NFC_ERROR_NOT_ACTIVATED"; + break; + case NFC_ERROR_NOT_SUPPORTED: + error = "NFC_ERROR_NOT_SUPPORTED"; + break; + case NFC_ERROR_ALREADY_ACTIVATED: + error = "NFC_ERROR_ALREADY_ACTIVATED"; + break; + case NFC_ERROR_ALREADY_DEACTIVATED: + error = "NFC_ERROR_ALREADY_DEACTIVATED"; + break; + case NFC_ERROR_READ_ONLY_NDEF: + error = "NFC_ERROR_READ_ONLY_NDEF"; + break; + case NFC_ERROR_NO_SPACE_ON_NDEF: + error = "NFC_ERROR_NO_SPACE_ON_NDEF"; + break; + case NFC_ERROR_NO_NDEF_MESSAGE: + error = "NFC_ERROR_NO_NDEF_MESSAGE"; + break; + case NFC_ERROR_NOT_NDEF_FORMAT: + error = "NFC_ERROR_NOT_NDEF_FORMAT"; + break; + case NFC_ERROR_SECURITY_RESTRICTED: + error = "NFC_ERROR_SECURITY_RESTRICTED"; + break; + case NFC_ERROR_PERMISSION_DENIED: + error = "NFC_ERROR_PERMISSION_DENIED"; + break; + case NFC_ERROR_ILLEGAL_STATE: + error = "NFC_ERROR_ILLEGAL_STATE"; + break; + case NFC_ERROR_NOT_INITIALIZED: + error = "NFC_ERROR_NOT_INITIALIZED"; + break; + case NFC_ERROR_TAG_NOT_SUPPORTED: + error = "NFC_ERROR_TAG_NOT_SUPPORTED"; + break; + } + + return error; +} + + +/** + * @function on_make_pair_button_pressed_cb + * @since_tizen 2.3 + * @description On Make Pair Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void on_make_pair_button_pressed_cb(void *user_data, Evas_Object *obj, void *event_info) +{ + DBG("on_make_pair_button_pressed_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + int result; + + bluetoothoob_view *this = NULL; + this = (bluetoothoob_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + if(this->remote_address != NULL && this->remote_hash != NULL && this->remote_randomizer != NULL) + { + result = bt_adapter_set_remote_oob_data(this->remote_address,this->remote_hash,this->remote_randomizer, sizeof(this->remote_hash),sizeof(this->remote_randomizer)); + RETM_IF(result != BT_ERROR_NONE, "bt_adapter_set_remote_oob_data failed %s",get_bt_adapter_error(result)); + result = bt_device_create_bond(this->remote_address); + RETM_IF(result != BT_ERROR_NONE, "bt_device_create_bond failed %s",get_bt_adapter_error(result)); + } +} + + +/** + * @function initialize_nfc + * @since_tizen 2.3 + * @description Initialize Nfc + * @parameter bluetoothoob_view*: Bluetoothoob View Pointer + * @return static void + */ +static void initialize_nfc(bluetoothoob_view *this) +{ + DBG("Inside initialize_nfc"); + RETM_IF(NULL == this, "view is NULL"); + + int result = NFC_ERROR_NONE; + + if(nfc_manager_is_activated() == false) + { + result = nfc_onoff_operation(); + RETM_IF(result != 0, "nfc_onoff_operation failed %d", result); + } + result = nfc_manager_initialize(); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_initialize failed %s",get_nfc_error(result)); + + + result = nfc_manager_set_activation_changed_cb(_nfc_activation_changed_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_set_activation_changed_cb failed %s",get_nfc_error(result)); + + + result = nfc_manager_set_ndef_discovered_cb(_nfc_ndef_discovered_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_set_ndef_discovered_cb failed %s",get_nfc_error(result)); + + + result = nfc_manager_set_p2p_target_discovered_cb(_nfc_p2p_target_discovered_cb,this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_set_p2p_target_discovered_cb failed %s",get_nfc_error(result)); + + + result = nfc_manager_set_tag_discovered_cb(_nfc_tag_discovered_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_set_tag_discovered_cb failed %s",get_nfc_error(result)); + + +} + + +/** + * @function nfc_onoff_operation + * @since_tizen 2.3 + * @description Nfc Onoff Operation + * @parameter NA + * @return static int + */ +static int nfc_onoff_operation(void) +{ + int ret = 0; + app_control_h service = NULL; + ret = app_control_create(&service); + RETVM_IF(ret != APP_CONTROL_ERROR_NONE, -1, "app_control_create failed"); + if (service == NULL) + { + DBG("service_create failed!"); + return -1; + } + ret = app_control_set_operation(service, "http://tizen.org/appcontrol/operation/setting/nfc"); + RETVM_IF(ret != APP_CONTROL_ERROR_NONE, -1, "app_control_set_operation nfc failed"); + ret = app_control_add_extra_data(service, "type", "nfc"); + RETVM_IF(ret != APP_CONTROL_ERROR_NONE, -1, "app_control_add_extra_data nfc failed"); + ret = app_control_send_launch_request(service, NULL, NULL); + RETVM_IF(ret != APP_CONTROL_ERROR_NONE, -1, "app_control_send_launch_request failed"); + + ret = app_control_destroy(service); + RETVM_IF(ret != APP_CONTROL_ERROR_NONE, -1, "app_control_destroy failed"); + if (ret == APP_CONTROL_ERROR_NONE) + { + DBG("Succeeded to NFC On/Off app!"); + return 0; + } + else + { + DBG("Failed to relaunch NFC On/Off app!"); + return -1; + } + return 0; +} + + +/** + * @function _nfc_activation_changed_cb + * @since_tizen 2.3 + * @description Nfc Activation Changed Cb + * @parameter bool: Bool, void*: Void Pointer + * @return static void + */ +static void _nfc_activation_changed_cb(bool activated , void *user_data) +{ + DBG("_nfc_activation_changed_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + + bluetoothoob_view *this = NULL; + this = (bluetoothoob_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + + if (activated) + { + DBG("NFC activated"); + } + else + { + DBG("NFC deactivated"); + } +} + + +/** + * @function _nfc_ndef_discovered_cb + * @since_tizen 2.3 + * @description Nfc Ndef Discovered Cb + * @parameter nfc_ndef_message_h: Nfc Ndef Message H, void*: Void Pointer + * @return static void + */ +static void _nfc_ndef_discovered_cb(nfc_ndef_message_h message, void *user_data) +{ + DBG("Inside _nfc_ndef_discovered_cb"); + + bluetoothoob_view *this = NULL; + this = (bluetoothoob_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + +} + + +/** + * @function _nfc_p2p_target_discovered_cb + * @since_tizen 2.3 + * @description Nfc P2p Target Discovered Cb + * @parameter nfc_discovered_type_e: Nfc Discovered Type E, void*: Void Pointer + * @return static void + */ +static void _nfc_p2p_target_discovered_cb(nfc_discovered_type_e type, nfc_p2p_target_h target, void *user_data) +{ + DBG("Inside _nfc_p2p_target_discovered_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + + bluetoothoob_view *this = NULL; + this = (bluetoothoob_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + +} + + +/** + * @function create_ndef_message + * @since_tizen 2.3 + * @description Create Ndef Message + * @parameter NA + * @return static nfc_ndef_message_h + */ +static nfc_ndef_message_h create_ndef_message() +{ + + int result; + nfc_ndef_message_h msg; + result = nfc_ndef_message_create(&msg); + RETVM_IF(result != NFC_ERROR_NONE, NULL, "nfc_ndef_message_create %s", get_nfc_error(result)); + RETVM_IF(NULL == msg, NULL, "nfc_ndef_message_h create failed"); + + bt_adapter_state_e adapter_state; + + result = bt_adapter_get_state (&adapter_state); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_adapter_get_state %s", get_bt_adapter_error(result)); + + if(adapter_state == BT_ADAPTER_ENABLED) + { + int hash_len; + int randomizer_len; + unsigned char* hash = NULL; + unsigned char* randomizer = NULL; + char* address = NULL; + + nfc_ndef_record_h record_address = NULL; + nfc_ndef_record_h record_hash = NULL; + nfc_ndef_record_h record_randomizer = NULL; + + result = bt_adapter_get_address(&address); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_adapter_get_address %s", get_bt_adapter_error(result)); + + result = bt_adapter_get_local_oob_data(&hash, &randomizer, &hash_len, &randomizer_len); + RETVM_IF(result != BT_ERROR_NONE, NULL, "bt_adapter_get_local_oob_data %s", get_bt_adapter_error(result)); + + DBG("Return Value # %d",result); + DBG("hash_len # %d", hash_len); + DBG("randomizer_len # %d", randomizer_len); + + result = nfc_ndef_record_create_text(&record_address, address, "en-US", NFC_ENCODE_UTF_8); + RETVM_IF(result != NFC_ERROR_NONE, NULL, "nfc_ndef_record_create_text %s", get_nfc_error(result)); + result = nfc_ndef_record_create_text(&record_hash, hash, "en-US", NFC_ENCODE_UTF_8); + RETVM_IF(result != NFC_ERROR_NONE, NULL, "nfc_ndef_record_create_text %s", get_nfc_error(result)); + result = nfc_ndef_record_create_text(&record_randomizer, randomizer, "en-US", NFC_ENCODE_UTF_8); + RETVM_IF(result != NFC_ERROR_NONE, NULL, "nfc_ndef_record_create_text %s", get_nfc_error(result)); + + result = nfc_ndef_message_append_record(msg, record_address); + RETVM_IF(result != NFC_ERROR_NONE, NULL, "nfc_ndef_message_append_record %s", get_nfc_error(result)); + result = nfc_ndef_message_append_record(msg, record_hash); + RETVM_IF(result != NFC_ERROR_NONE, NULL, "nfc_ndef_message_append_record %s", get_nfc_error(result)); + result = nfc_ndef_message_append_record(msg, record_randomizer); + RETVM_IF(result != NFC_ERROR_NONE, NULL, "nfc_ndef_message_append_record %s", get_nfc_error(result)); + } + + return msg; +} + + +/** + * @function nfc_ndef_message_read + * @since_tizen 2.3 + * @description Nfc Ndef Message Read + * @parameter nfc_ndef_message_h: Nfc Ndef Message H, void*: Void Pointer + * @return static void + */ +static void nfc_ndef_message_read(nfc_ndef_message_h message, void *user_data) +{ + DBG("Inside nfc_ndef_message_read"); + int result; + int count; + nfc_ndef_record_h record; + + RETM_IF(NULL == user_data, "data is NULL"); + RETM_IF(NULL == &message, "message is NULL"); + + bluetoothoob_view *this = NULL; + this = (bluetoothoob_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + char* address = NULL; + unsigned char* hash = NULL; + unsigned char* randomizer = NULL; + + result = nfc_ndef_message_get_record(message, 0, &record); + RETM_IF(result != NFC_ERROR_NONE, "nfc_ndef_message_get_record: %s", get_nfc_error(result)); + + result = nfc_ndef_record_get_text(record, &address); + RETM_IF(result != NFC_ERROR_NONE, "nfc_ndef_record_get_text: %s", get_nfc_error(result)); + + result = nfc_ndef_message_get_record(message, 1, &record); + RETM_IF(result != NFC_ERROR_NONE, "nfc_ndef_message_get_record: %s", get_nfc_error(result)); + + result = nfc_ndef_record_get_text(record, &hash); + RETM_IF(result != NFC_ERROR_NONE, "nfc_ndef_record_get_text: %s", get_nfc_error(result)); + + result = nfc_ndef_message_get_record(message, 2, &record); + RETM_IF(result != NFC_ERROR_NONE, "nfc_ndef_message_get_record: %s", get_nfc_error(result)); + + result = nfc_ndef_record_get_text(record, &randomizer); + RETM_IF(result != NFC_ERROR_NONE, "nfc_ndef_record_get_text: %s", get_nfc_error(result)); + + this->remote_address = address; + this->remote_hash = hash; + this->remote_randomizer = randomizer; + +} + + +/** + * @function _nfc_tag_discovered_cb + * @since_tizen 2.3 + * @description Nfc Tag Discovered Cb + * @parameter nfc_discovered_type_e: Nfc Discovered Type E, void*: Void Pointer + * @return static void + */ +static void _nfc_tag_discovered_cb(nfc_discovered_type_e type, nfc_tag_h tag, void *user_data) +{ + DBG("Inside _nfc_tag_discovered_cb"); + int result; + + RETM_IF(NULL == user_data, "data is NULL"); + RETM_IF(NULL == tag, "tag is NULL"); + + bluetoothoob_view *this = NULL; + this = (bluetoothoob_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + if(this->view->tbt_info->apptype == TBT_APP_BT_OOB_DEVICE) + { + //read + result = nfc_tag_read_ndef(tag, _nfc_tag_read_completed_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_tag_read_ndef: %s", get_nfc_error(result)); + + } + + else if(this->view->tbt_info->apptype == TBT_APP_BT_OOB_PERIPHERAL) + { + //write + nfc_ndef_message_h info_msg; + info_msg = create_ndef_message(); + + result = nfc_tag_write_ndef(tag, info_msg, _tag_write_completed_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_tag_write_ndef: %s", get_nfc_error(result)); + } + +} + + +/** + * @function _tag_write_completed_cb + * @since_tizen 2.3 + * @description Tag Write Completed Cb + * @parameter nfc_error_e: Nfc Error E, void*: Void Pointer + * @return static void + */ +static void _tag_write_completed_cb(nfc_error_e result, void *user_data) +{ + DBG("_tag_write_completed_cb %s", get_nfc_error(result)); + RETM_IF(NULL == user_data, "data is NULL"); + + bluetoothoob_view *this = NULL; + this = (bluetoothoob_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + if(result == NFC_ERROR_NONE) + { + DBG("Write Completed Successfully"); + } + else + { + DBG("Write Error"); + } +} + + +/** + * @function _nfc_tag_read_completed_cb + * @since_tizen 2.3 + * @description Nfc Tag Read Completed Cb + * @parameter nfc_error_e: Nfc Error E, void*: Void Pointer + * @return static void + */ +static void _nfc_tag_read_completed_cb(nfc_error_e result, nfc_ndef_message_h message, void *user_data) +{ + DBG("_nfc_tag_read_completed_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + RETM_IF(NULL == message, "message is NULL"); + + bluetoothoob_view *this = NULL; + this = (bluetoothoob_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + nfc_ndef_message_read(message, this); +} + + +/** + * @function _adapter_device_bond_created_cb + * @since_tizen 2.3 + * @description Adapter Device Bond Created Cb + * @parameter int: Int, bt_device_info_s*: Bt Device Info S Pointer, void*: Void Pointer + * @return static void + */ +static void _adapter_device_bond_created_cb(int result, bt_device_info_s *device_info, void *data) +{ + DBG("_adapter_device_bond_created_cb %s", get_bt_adapter_error(result)); + RETM_IF(NULL == data, "data is NULL"); + + bluetoothoob_view *this = NULL; + this = (bluetoothoob_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + if(result == BT_ERROR_NONE) + { + DBG("Bond Test Created Successfully"); + } +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-camera-view.c b/tbtcoreapp/src/view/tbt-camera-view.c new file mode 100644 index 0000000..5ce8ab5 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-camera-view.c @@ -0,0 +1,1259 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-camera-view.c + * @brief covers camera capture, recorder, camera HDR capture and camera face detection + * captures image using front camera, records using camera recorder, captures camera in HDR mode and and performs camera face detection + * + * @author golam kayes(g.kayes@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug none + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_CAMERA + +#include +#include +#include +#include +#include +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-camera-view.h" +#include "view/tbt-common-view.h" + +static const int max_face_count = 5; +struct _camera_view +{ + common_view* view; + + bool play; + char *file_path; + + camera_h camera; + player_h player; + recorder_h recorder; + + Eina_Bool recording; + + Evas_Object *image; + + Evas_Object *cam_label; + Evas_Object *image_label; + + Evas_Object *video_rect; + Evas_Object *camera_rect; + Evas_Object *capture_btn; + Evas_Object *poly_drawn[5]; +}; + +#define LIMIT_REC_SECOND 10 +#define PREFIX_FILE_NAME "tbt_camera_capture" + +static void start_player(camera_view *this); +static void destroy_player(camera_view *this); +static player_h create_player(camera_view *this); + +static camera_h create_camera(camera_view *this); +static void destroy_camera(camera_view *this); +static void start_camera(camera_view *this); +static void stop_camera(camera_view *this); +static bool check_device_property(); + +static void create_video_recorder(camera_view *view); +static void destroy_video_recorder(camera_view *view); +static void start_video_recorder(camera_view *view); +static void stop_video_recorder(camera_view *view); +static void recorder_file_format_set(camera_view *view, recorder_file_format_e format); + +static void update_view_controls(camera_view *this); +static void create_control(camera_view *this, char* btn_label); +static void create_label(camera_view *this, char *camera_label, char* output_label); +static Evas_Object *add_control_layout(camera_view *this, Evas_Object *parent); + +static char *gen_file_name(camera_view *view, char* ext); +static char *save_file(camera_view *view, camera_image_data_s *image); +void draw_lines(int x, int y, int height, int width, int face_index, void *user_data); + +static void _app_destroy_cb(void* this); +static void _capture_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void _camera_capture_completed_cb(void *data); +static void _camera_capture_cb(camera_image_data_s *image, camera_image_data_s *postview, + camera_image_data_s *thumbnail, void *data); +static void _limit_reached_cb(recorder_recording_limit_type_e type, void *user_data); +static void _record_status_cb(unsigned long long elapsed_time, unsigned long long file_size, void *user_data); +static void _camera_face_detected_cb(camera_detected_face_s *faces, int count, void *user_data); +char* get_camera_error(int error_code); +char* get_recorder_error(int error_code); + + +/** + * @function camera_view_add + * @since_tizen 2.3 + * @description Camera View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return camera_view* + */ +camera_view *camera_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + RETVM_IF(NULL == tbt_info, NULL, "tbt_info is null"); + + camera_view *this = NULL; + this = calloc(1, sizeof(camera_view)); + RETVM_IF(NULL == this, NULL, "calloc failed"); + + this->camera = NULL; + this->player = NULL; + this->recorder = NULL; + this->file_path = NULL; + this->recording = EINA_FALSE; + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE_320_X_320 || (get_device_type() == DEVICE_WEARABLE_CIRCLE)) + { + elm_theme_overlay_add(NULL, get_edje_path("custom_button.edj")); + } + #endif + + if (tbt_info->apptype == TBT_APP_CAMERA_CAPTURE || tbt_info->apptype == TBT_APP_CAMERA_RECORD + || tbt_info->apptype == TBT_APP_CAMERA_HDR_CAPTURE) + { + tbt_info->layout_group = "camera_viewer"; + tbt_info->layout_file = get_edje_path("camera_viewer.edj"); + } + else if (tbt_info->apptype == TBT_APP_CAMERA_FACE_DETECT) + { + tbt_info->layout_group = "camera_face"; + tbt_info->layout_file = get_edje_path("camera_viewer.edj"); + } + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + evas_object_size_hint_weight_set(this->view->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(this->view->layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(this->view->layout); + + Evas *evas = evas_object_evas_get(this->view->navi); + this->camera_rect = evas_object_image_filled_add(evas); + evas_object_show(this->camera_rect); + elm_object_part_content_set(this->view->layout, "camera_view", this->camera_rect); + + if (this->view->tbt_info->apptype == TBT_APP_CAMERA_CAPTURE) + { + create_control(this, "Capture"); + create_label(this, "Camera preview", "Image viewer"); + + start_camera(this); + RETVM_IF(this->camera == NULL, NULL, "start_camera fail"); + } + else if (this->view->tbt_info->apptype == TBT_APP_CAMERA_RECORD) + { + create_control(this, "Record"); + create_label(this, "Camera preview", "Video viewer"); +#ifdef DEVICE_TYPE_MOBILE + Evas *evas = evas_object_evas_get(this->view->navi); + this->video_rect = evas_object_image_filled_add(evas); +#else + + int width, height; + system_info_get_platform_int("tizen.org/feature/screen.width", &width); + system_info_get_platform_int("tizen.org/feature/screen.height", &height); + this->video_rect = elm_win_util_standard_add("Video", "Video"); + evas_object_resize(this->video_rect, width*0.15, height*0.15); + evas_object_move(this->video_rect, width*0.5-width*0.11*0.5, height*0.62); + + Evas *evas_canvas = evas_object_evas_get(this->video_rect); + Evas_Object *bg = evas_object_rectangle_add(evas_canvas); + evas_object_render_op_set(bg, EVAS_RENDER_COPY); + evas_object_color_set(bg, 0, 0, 0, 0); + evas_object_resize(bg, width*0.15, height*0.15); // covers full canvas + evas_object_show(bg); + +#endif + evas_object_show(this->video_rect); +#ifdef DEVICE_TYPE_MOBILE + elm_object_part_content_set(this->view->layout, "video_view", this->video_rect); +#endif + start_camera(this); + create_video_recorder(this); + RETVM_IF(this->camera == NULL, NULL, "start_camera fail"); + } + else if (this->view->tbt_info->apptype == TBT_APP_CAMERA_FACE_DETECT) + { + start_camera(this); + + bool support_detection; + support_detection = camera_is_supported_face_detection(this->camera); + + if (support_detection == true) + { + int result; + result = camera_start_face_detection(this->camera, _camera_face_detected_cb, this); + DBG("The returm value of face detection is %s", get_camera_error(result)); + RETVM_IF(result != CAMERA_ERROR_NONE, NULL, "camera_start_face_detection failed with error : %d", result); + + } + else + { + Evas_Object *popup = ui_utils_popup_add(this->view->navi, "Message"); + elm_object_text_set(popup, "camera_start_face_detection not supported"); + RETVM_IF(!support_detection, NULL, "camera_start_face_detection not supported"); + } + } + + else if (this->view->tbt_info->apptype == TBT_APP_CAMERA_HDR_CAPTURE) + { + create_control(this, "Capture"); + create_label(this, "Camera preview", "Image viewer"); + start_camera(this); + + bool hdr_capture; + hdr_capture = camera_attr_is_supported_hdr_capture(this->camera); + + if (hdr_capture == true) + { + int result; + result = camera_attr_set_hdr_mode(this->camera, CAMERA_ATTR_HDR_MODE_ENABLE); + RETVM_IF(result != CAMERA_ERROR_NONE, NULL, "camera_attr_set_hdr_mode fail > Error = %d", result); + } + else + { + Evas_Object *popup = ui_utils_popup_add(this->view->navi, "Message"); + elm_object_text_set(popup, "camera_attribute hdr_mode not supported"); + } + } + + update_view_controls(this); + + return this; +} + + +/** + * @function update_view_controls + * @since_tizen 2.3 + * @description Update View Controls + * @parameter camera_view*: Camera View Pointer + * @return static void + */ +static void update_view_controls(camera_view *this) +{ + RETM_IF(NULL == this, "view is NULL"); +} + + +/** + * @function create_control + * @since_tizen 2.3 + * @description Create Control + * @parameter camera_view*: Camera View Pointer, char*: Char Pointer + * @return static void + */ +static void create_control(camera_view *this, char* btn_label) +{ + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + elm_object_text_set(this->capture_btn, btn_label); +} + + +/** + * @function create_label + * @since_tizen 2.3 + * @description Create Label + * @parameter camera_view*: Camera View Pointer, char*: Char Pointer, char*: Char Pointer + * @return static void + */ +static void create_label(camera_view *this, char *camera_label, char* output_label) +{ + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == camera_label, "camera_label is NULL"); + RETM_IF(NULL == output_label, "output_label is NULL"); + + this->cam_label = ui_utils_label_add(this->view->layout, camera_label); + this->image_label = ui_utils_label_add(this->view->layout, output_label); + + elm_object_part_content_set(this->view->layout, "camera_text", this->cam_label); + elm_object_part_content_set(this->view->layout, "video_text", this->image_label); + +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter camera_view*: Camera View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(camera_view *this, Evas_Object *parent) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + RETVM_IF(NULL == parent, NULL, "parent is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + + elm_table_padding_set(table, TABLE_PADDING_HORIZONTAL, TABLE_PADDING_VERTICAL); + + this->capture_btn = ui_utils_push_button_add(this, table, "Capture", _capture_button_pressed_cb); + elm_table_pack(table, this->capture_btn, 0, 0, 1, 1); + + return table; +} + + +/** + * @function start_camera + * @since_tizen 2.3 + * @description Start Camera + * @parameter camera_view*: Camera View Pointer + * @return static void + */ +static void start_camera(camera_view *this) +{ + int result; + + if (!this->camera) + { + this->camera = create_camera(this); + } + if (this->camera) + { + camera_state_e state; + result = camera_get_state(this->camera, &state); + RETM_IF(result != CAMERA_ERROR_NONE, "camera_get_state fail > Error = %s", get_camera_error(result)); + + if (state != CAMERA_STATE_PREVIEW && this->view->tbt_info->apptype != TBT_APP_CAMERA_RECORD) + { + result = camera_start_preview(this->camera); + RETM_IF(result != CAMERA_ERROR_NONE, "camera_start_preview fail > Error = %s", get_camera_error(result)); + } + } + +} + + +/** + * @function stop_camera + * @since_tizen 2.3 + * @description Stop Camera + * @parameter camera_view*: Camera View Pointer + * @return static void + */ +static void stop_camera(camera_view *this) +{ + if (this->camera) + { + camera_state_e state; + int result = camera_get_state(this->camera, &state); + RETM_IF(result != CAMERA_ERROR_NONE, "camera_get_state fail > Error = %s", get_camera_error(result)); + if (state == CAMERA_STATE_PREVIEW) + { + result = camera_stop_preview(this->camera); + RETM_IF(result != CAMERA_ERROR_NONE, "camera_stop_preview fail > Error = %s", get_camera_error(result)); + + } + } +} + + +/** + * @function create_camera + * @since_tizen 2.3 + * @description Create Camera + * @parameter camera_view*: Camera View Pointer + * @return static camera_h + */ +static camera_h create_camera(camera_view *this) +{ + RETVM_IF(NULL == this, NULL, "this is null"); + int result; + camera_h camera = NULL; + + if (this->view->tbt_info->apptype == TBT_APP_CAMERA_HDR_CAPTURE || this->view->tbt_info->apptype ==TBT_APP_CAMERA_FACE_DETECT) + { + result = camera_create(CAMERA_DEVICE_CAMERA0, &camera); + RETVM_IF(result != CAMERA_ERROR_NONE, NULL, "camera_create fail > Error = %s", get_camera_error(result)); + RETVM_IF(NULL == camera, NULL, "camera handle null"); + } + + else + { + if(check_device_property()) + { + result = camera_create(CAMERA_DEVICE_CAMERA1, &camera); + RETVM_IF(result != CAMERA_ERROR_NONE, NULL, "camera_create fail > Error = %s", get_camera_error(result)); + } + else + { + result = camera_create(CAMERA_DEVICE_CAMERA0, &camera); + RETVM_IF(result != CAMERA_ERROR_NONE, NULL, "camera_create fail > Error = %s", get_camera_error(result)); + } + } + + result = camera_set_display(camera, CAMERA_DISPLAY_TYPE_EVAS, GET_DISPLAY(this->camera_rect)); + RETVM_IF(result != CAMERA_ERROR_NONE, NULL, "camera_set_display fail > Error = %s", get_camera_error(result)); + + + result = camera_attr_set_preview_fps(camera, CAMERA_ATTR_FPS_AUTO); + RETVM_IF(result != CAMERA_ERROR_NONE, NULL, "camera_attr_set_preview_fps fail > Error = %s", + get_camera_error(result)); + + return camera; +} + +char* get_camera_state(camera_state_e state) +{ + switch(state) + { + case CAMERA_STATE_NONE: + return "CAMERA_STATE_NONE"; + case CAMERA_STATE_CREATED: + return "CAMERA_STATE_CREATED"; + case CAMERA_STATE_PREVIEW: + return "CAMERA_STATE_PREVIEW"; + case CAMERA_STATE_CAPTURING: + return "CAMERA_STATE_CAPTURING"; + case CAMERA_STATE_CAPTURED: + return "CAMERA_STATE_CAPTURED"; + default: + return "Unknown Error"; + } + +} + +/** + * @function destroy_camera + * @since_tizen 2.3 + * @description Destroy Camera + * @parameter camera_view*: Camera View Pointer + * @return static void + */ +static void destroy_camera(camera_view *this) +{ + RETM_IF(NULL == this, "this is null"); + if (this->camera) + { + stop_camera(this); + camera_state_e state; + camera_get_state (this->camera, &state); + if(this->view->tbt_info->apptype != TBT_APP_CAMERA_RECORD) + { + int result = camera_destroy(this->camera); + RETM_IF(result != CAMERA_ERROR_NONE, "camera_destroy fail > Error = %s Camera state: %s", get_camera_error(result), get_camera_state(state)); + } + this->camera = NULL; + } +} + + +/** + * @function start_player + * @since_tizen 2.3 + * @description Start Player + * @parameter camera_view*: Camera View Pointer + * @return static void + */ +static void start_player(camera_view *this) +{ + RETM_IF(NULL == this, "this is NULL"); + int result; + if (this->player) + { + + result = player_stop(this->player); + RETM_IF(result != PLAYER_ERROR_NONE, "player_stop fail > Error = %d", result); + result = player_unprepare(this->player); + RETM_IF(result != PLAYER_ERROR_NONE, "player_unprepare fail > Error = %d", result); + result = player_destroy(this->player); + RETM_IF(result != PLAYER_ERROR_NONE, "player_destroy fail > Error = %d", result); + this->player = NULL; + + } + + this->player = create_player(this); + + if (this->player) + { + + player_state_e state; + result = player_get_state(this->player, &state); + RETM_IF(result != PLAYER_ERROR_NONE, "player_get_state fail > Error = %d", result); + if (state != PLAYER_STATE_PLAYING) + { + result = player_set_display_visible(this->player, true); + RETM_IF(result != PLAYER_ERROR_NONE, "player_set_display_visible fail > Error = %d", result); + result = player_start(this->player); + RETM_IF(result != PLAYER_ERROR_NONE, "player_start fail > Error = %s", get_camera_error(result)); + } + } +} + + +/** + * @function destroy_player + * @since_tizen 2.3 + * @description Destroy Player + * @parameter camera_view*: Camera View Pointer + * @return static void + */ +static void destroy_player(camera_view *this) +{ + RETM_IF(NULL == this, "view is NULL"); + int result; + if (this->player) + { + result = player_stop(this->player); + RETM_IF(result != PLAYER_ERROR_NONE, "player_stop fail > Error = %d", result); + result = player_unprepare(this->player); + RETM_IF(result != PLAYER_ERROR_NONE, "player_unprepare fail > Error = %d", result); + result = player_destroy(this->player); + RETM_IF(result != PLAYER_ERROR_NONE, "player_destroy fail > Error = %d", result); + this->player = NULL; + + } +} + + +/** + * @function create_player + * @since_tizen 2.3 + * @description Create Player + * @parameter camera_view*: Camera View Pointer + * @return static player_h + */ +static player_h create_player(camera_view *this) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + int result; + player_h player = NULL; + + result = player_create(&player); + RETVM_IF(NULL == player, NULL, "player handle is null"); + + if (result == PLAYER_ERROR_NONE) + { + result = player_set_sound_type(player, SOUND_TYPE_MEDIA); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_sound_type fail > Error = %d", result); + result = player_set_volume(player, 1.0, 1.0); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_volume fail > Error = %d", result); + result = player_set_looping(player, true); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_looping fail > Error = %d", result); + + result = player_set_uri(player, this->file_path); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_uri fail > Error = %d", result); + #ifdef DEVICE_TYPE_MOBILE + result = player_set_display(player, PLAYER_DISPLAY_TYPE_EVAS, GET_DISPLAY(this->video_rect)); + #else + result = player_set_display(player, PLAYER_DISPLAY_TYPE_OVERLAY, GET_DISPLAY(this->video_rect)); + #endif + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_display fail > Error = %d", result); + result = player_set_display_mode(player, PLAYER_DISPLAY_MODE_FULL_SCREEN); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_display_mode fail > Error = %d", result); + result = player_set_display_visible(player, true); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_display_visible fail > Error = %d", result); + result = player_prepare(player); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_prepare fail > Error = %d", result); + } + + return player; +} + + +/** + * @function start_video_recorder + * @since_tizen 2.3 + * @description Start Video Recorder + * @parameter camera_view*: Camera View Pointer + * @return static void + */ +static void start_video_recorder(camera_view *view) +{ + RETM_IF(NULL == view, "view is NULL"); + int result; + + if (view->recorder) + { + recorder_state_e state; + result = recorder_get_state(view->recorder, &state); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_get_state fail > Error = %s", get_recorder_error(result)); + DBG("State is %d", state); + result = recorder_start(view->recorder); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_start fail > Error = %s", get_recorder_error(result)); + } +} + + +/** + * @function stop_video_recorder + * @since_tizen 2.3 + * @description Stop Video Recorder + * @parameter camera_view*: Camera View Pointer + * @return static void + */ +static void stop_video_recorder(camera_view *view) +{ + RETM_IF(NULL == view, "view is NULL"); + if (view->recorder) + { + int result = recorder_commit(view->recorder); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_commit fail > Error = %s", get_recorder_error(result)); + + } +} + + +/** + * @function create_video_recorder + * @since_tizen 2.3 + * @description Create Video Recorder + * @parameter camera_view*: Camera View Pointer + * @return static void + */ +static void create_video_recorder(camera_view *view) +{ + RETM_IF(NULL == view, "view is NULL"); + int result; + if (view->recorder) + { + destroy_video_recorder(view); + } + + result = recorder_create_videorecorder(view->camera, &view->recorder); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_create_videorecorder fail > Error = %s", + get_recorder_error(result)); + + if (view->recorder) + { + recorder_file_format_set(view, RECORDER_FILE_FORMAT_MP4); + + result = recorder_attr_set_time_limit(view->recorder, LIMIT_REC_SECOND); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_attr_set_time_limit fail > Error = %s", + get_recorder_error(result)); + result = recorder_set_recording_limit_reached_cb(view->recorder, _limit_reached_cb, view); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_attr_set_time_limit fail > Error = %s", + get_recorder_error(result)); + result = recorder_set_recording_status_cb(view->recorder, _record_status_cb, view); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_attr_set_time_limit fail > Error = %s", + get_recorder_error(result)); + result = recorder_attr_set_recording_motion_rate(view->recorder, 0.95); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_attr_set_time_limit fail > Error = %s", + get_recorder_error(result)); + + double motion_rate; + result = recorder_attr_get_recording_motion_rate(view->recorder, &motion_rate); + RETM_IF(motion_rate < 0, "motion_rate is less than zero"); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_attr_set_time_limit fail > Error = %s", + get_recorder_error(result)); + result = recorder_prepare(view->recorder); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_attr_set_time_limit fail > Error = %s", + get_recorder_error(result)); + } +} + + +/** + * @function destroy_video_recorder + * @since_tizen 2.3 + * @description Destroy Video Recorder + * @parameter camera_view*: Camera View Pointer + * @return static void + */ +static void destroy_video_recorder(camera_view *view) +{ + RETM_IF(NULL == view, "view is NULL"); + if (view->recorder) + { + recorder_state_e state = RECORDER_STATE_NONE; + int result = recorder_get_state(view->recorder, &state); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_get_state fail > Error = %s", get_recorder_error(result)); + if (state == RECORDER_STATE_PAUSED || state == RECORDER_STATE_RECORDING) + { + result = recorder_cancel(view->recorder); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_cancel fail > Error = %s", get_recorder_error(result)); + } + result = recorder_unprepare(view->recorder); + //RETM_IF(result != RECORDER_ERROR_NONE, "recorder_unprepare fail > Error = %s", get_recorder_error(result)); + //TODO + //This is a bug, need to be reported + DBG("recorder_unprepare fail > Error = %s", get_recorder_error(result)); + result = recorder_destroy(view->recorder); + //RETM_IF(result != RECORDER_ERROR_NONE, "recorder_destroy fail > Error = %s", get_recorder_error(result)); + //TODO + //This is a bug, need to be reported + DBG("recorder_destroy fail > Error = %s", get_recorder_error(result)); + view->recorder = NULL; + result = camera_destroy(view->camera); + //RETM_IF(result != CAMERA_ERROR_NONE, "camera_destroy fail > Error = %s ", get_camera_error(result)); + } +} + + +/** + * @function recorder_file_format_set + * @since_tizen 2.3 + * @description Recorder File Format Set + * @parameter camera_view*: Camera View Pointer + * @return static void + */ +static void recorder_file_format_set(camera_view *view, recorder_file_format_e format) +{ + RETM_IF(NULL == view, "view is NULL"); + + snprintf(MEDIA_FILE_PATH, sizeof(MEDIA_FILE_PATH), "%s/%s",TBT_MEDIA_DIR,"capture.mp4"); + DBG("Reporting file set = %s",MEDIA_FILE_PATH); + + view->file_path = MEDIA_FILE_PATH; + int result; + result = recorder_set_file_format(view->recorder, format); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_set_file_format fail > Error = %s", get_recorder_error(result)); + result = recorder_set_filename(view->recorder, view->file_path); + RETM_IF(result != RECORDER_ERROR_NONE, "recorder_set_filename fail > Error = %s", get_recorder_error(result)); + + + +} + + +/** + * @function gen_file_name + * @since_tizen 2.3 + * @description Gen File Name + * @parameter camera_view*: Camera View Pointer, char*: Char Pointer + * @return static char* + */ +static char *gen_file_name(camera_view *view, char* ext) +{ + RETVM_IF(NULL == view,NULL, "view is NULL"); + RETVM_IF(NULL == ext,NULL, "ext is NULL"); + + char fileName[64]; + snprintf(fileName, sizeof(fileName), "capture.%s", ext); + return gen_data_path(fileName); +} + + +/** + * @function save_file + * @since_tizen 2.3 + * @description Save File + * @parameter camera_view*: Camera View Pointer, camera_image_data_s*: Camera Image Data S Pointer + * @return static char* + */ +static char *save_file(camera_view *view, camera_image_data_s *image) +{ + + RETVM_IF(NULL == view,NULL, "view is NULL"); + RETVM_IF(NULL == image,NULL, "image is NULL"); + + char *file_name = gen_file_name(view, "jpg"); + + RETVM_IF(NULL == file_name,NULL, "file_name is NULL"); + FILE *f = fopen(file_name, "w"); + RETVM_IF(NULL == f, NULL, "fopen fail > File = %s", file_name); + + unsigned size = image->size; + unsigned char *data = image->data; + +while (size) +{ + size_t written = fwrite(data, 1, size, f); + size -= written; + data += written; + }; + + fclose(f); + return file_name; +} + + +/** + * @function _capture_button_pressed_cb + * @since_tizen 2.3 + * @description Capture Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _capture_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + int result; + camera_view *view = NULL; + view = (camera_view*) data; + RETM_IF(NULL == view, "view is NULL"); + RETM_IF(NULL == view->camera, "view is NULL"); + + if ((view->view->tbt_info->apptype == TBT_APP_CAMERA_CAPTURE) + || (view->view->tbt_info->apptype == TBT_APP_CAMERA_HDR_CAPTURE)) + { + + result = camera_start_capture(view->camera, _camera_capture_cb, _camera_capture_completed_cb, view); + RETM_IF(result != CAMERA_ERROR_NONE, "camera_start_capture fail > Error = %s", get_camera_error(result)); + + elm_object_disabled_set(view->capture_btn, false); + } + else if (view->view->tbt_info->apptype == TBT_APP_CAMERA_RECORD) + { + if (view->recording) + { + view->recording = EINA_FALSE; + + stop_video_recorder(view); + + start_player(view); + + elm_object_text_set(view->capture_btn, "Record"); + } + else + { + RETM_IF(NULL == view->camera, "view is NULL"); + + view->recording = EINA_TRUE; + start_video_recorder(view); + + if (view->player) + { + result = player_set_display_visible(view->player, false); + RETM_IF(result != PLAYER_ERROR_NONE, "player_set_display_visible fail > Error = %s", result); + } + + elm_object_text_set(view->capture_btn, " Stop "); + evas_object_size_hint_expand_set(view->capture_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + } + } +} + + +/** + * @function _camera_capture_cb + * @since_tizen 2.3 + * @description Camera Capture Cb + * @parameter camera_image_data_s*: Camera Image Data S Pointer, camera_image_data_s*: Camera Image Data S Pointer, camera_image_data_s*: Camera Image Data S Pointer, void*: Void Pointer + * @return static void + */ +static void _camera_capture_cb(camera_image_data_s *image, camera_image_data_s *postview, camera_image_data_s *thumbnail, void *data) +{ + RETM_IF(NULL == data, "data is NULL"); + RETM_IF(NULL == image, "image is NULL"); + + if(postview == NULL) + { + DBG("postview is NULL"); + } + camera_view *view = NULL; + view = (camera_view*) data; + RETM_IF(NULL == view, "view is NULL"); + + if ((view->view->tbt_info->apptype == TBT_APP_CAMERA_CAPTURE) + || (view->view->tbt_info->apptype == TBT_APP_CAMERA_HDR_CAPTURE)) + { + if (view->file_path != NULL) + { + remove(view->file_path); + SAFE_DELETE(view->file_path); + } + + view->file_path = save_file(view, image); + } +} + + +/** + * @function _camera_capture_completed_cb + * @since_tizen 2.3 + * @description Camera Capture Completed Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _camera_capture_completed_cb(void *data) +{ + RETM_IF(NULL == data, "data is NULL"); + + int result; + camera_view *view = NULL; + view = (camera_view*) data; + RETM_IF(NULL == view, "view is NULL"); + + result = camera_start_preview(view->camera); + RETM_IF(result != CAMERA_ERROR_NONE, "camera_start_preview fail > Error = %s", get_camera_error(result)); + + if ((view->view->tbt_info->apptype == TBT_APP_CAMERA_CAPTURE) + || (view->view->tbt_info->apptype == TBT_APP_CAMERA_HDR_CAPTURE)) + { + view->image = ui_utils_create_image(view->view->layout, view->file_path); + RETM_IF(NULL == view->image, "ui_utils_create_image fail > Error = %s", view->file_path); + + elm_object_part_content_set(view->view->layout, "video_view", view->image); + } +} + + +/** + * @function _limit_reached_cb + * @since_tizen 2.3 + * @description Limit Reached Cb + * @parameter recorder_recording_limit_type_e: Recorder Recording Limit Type E, void*: Void Pointer + * @return static void + */ +static void _limit_reached_cb(recorder_recording_limit_type_e type, void *user_data) +{ + RETM_IF(NULL == user_data, "data is NULL"); + camera_view *view = (camera_view *) user_data; + if (view) + { + view->recording = EINA_FALSE; + + stop_video_recorder(view); + destroy_video_recorder(view); + destroy_camera(view); + destroy_player(view); + + start_camera(view); + start_player(view); + + elm_object_text_set(view->capture_btn, "Record"); + evas_object_size_hint_expand_set(view->capture_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + } +} + + +/** + * @function _record_status_cb + * @since_tizen 2.3 + * @description Record Status Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _record_status_cb(unsigned long long elapsed_time, unsigned long long file_size, void *user_data) +{ + DBG("Inside _record_status_cb File size %lld",file_size); +} + + +/** + * @function _camera_face_detected_cb + * @since_tizen 2.3 + * @description Camera Face Detected Cb + * @parameter camera_detected_face_s*: Camera Detected Face S Pointer, void*: Void Pointer + * @return static void + */ +static void _camera_face_detected_cb(camera_detected_face_s *faces, int count, void *user_data) +{ + DBG("Face Detection count is %d", count); + RETM_IF(NULL == user_data, "data is NULL"); + RETM_IF(NULL == faces, "faces is NULL"); + + camera_view *view = NULL; + view = (camera_view*) user_data; + RETM_IF(NULL == view, "view is NULL"); + + int ret, height, width; + Evas_Coord canvas_width, canvas_height; + ret = camera_get_preview_resolution(view->camera, &width, &height); + RETM_IF(width < 0 || height < 0, "width or height cannot be less than zero"); + RETM_IF(ret != CAMERA_ERROR_NONE, "camera_get_preview_resolution error: %s", get_camera_error(ret)); + + DBG("The Count of detected faces is %d", count); + evas_object_geometry_get(view->camera_rect, NULL, NULL, &canvas_width, &canvas_height); + + DBG("THe canvas width and height is %d %d", canvas_width, canvas_height); + + int i; + for (i = 0; i < max_face_count; i++) + { + if (view->poly_drawn[i]) + { + evas_object_del(view->poly_drawn[i]); + view->poly_drawn[i] = NULL; + } + } + + for (i = 0; i < count; i++) + { + draw_lines(faces[i].x, faces[i].y, faces[i].width, faces[i].height, i, view); + } + +} + + +/** + * @function draw_lines + * @since_tizen 2.3 + * @description Draw Lines + * @parameter int: Int, void*: Void Pointer + * @return void + */ +void draw_lines(int x, int y, int height, int width, int face_index, void *user_data) +{ + RETM_IF(NULL == user_data, "data is NULL"); + + camera_view *view = NULL; + view = (camera_view*) user_data; + RETM_IF(NULL == view, "view is NULL"); + + view->poly_drawn[face_index] = evas_object_polygon_add(evas_object_evas_get(view->camera_rect)); + + evas_object_polygon_point_add(view->poly_drawn[face_index], x, y); + evas_object_polygon_point_add(view->poly_drawn[face_index], x + width, y); + evas_object_polygon_point_add(view->poly_drawn[face_index], x + width, y + height); + evas_object_polygon_point_add(view->poly_drawn[face_index], x, y + height); + + evas_object_color_set(view->poly_drawn[face_index], 0, 0, 255, 100); + evas_object_show(view->poly_drawn[face_index]); + +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + int result; + camera_view *view = NULL; + view = (camera_view*) this; + RETM_IF(NULL == view, "view is NULL"); + + if (view->view->tbt_info->apptype == TBT_APP_CAMERA_RECORD) + { + evas_object_del(view->video_rect); + } + if (view->view->tbt_info->apptype == TBT_APP_CAMERA_FACE_DETECT) + { + bool support_detection; + support_detection = camera_is_supported_face_detection(view->camera); + if (support_detection == true) + { + result = camera_stop_face_detection(view->camera); + RETM_IF(result != CAMERA_ERROR_NONE, "camera_stop_face_detection fail > Error = %s", + get_camera_error(result)); + } + else + { + view->view->tbt_info->result = TBT_INFO_RESULT_NOT_SUPPORTED; + elm_genlist_item_update(view->view->item); + } + + int i; + for (i = 0; i < max_face_count; i++) + { + if (view->poly_drawn[i]) + { + evas_object_del(view->poly_drawn[i]); + view->poly_drawn[i] = NULL; + } + } + } + + if (view->view->tbt_info->apptype == TBT_APP_CAMERA_HDR_CAPTURE) + { + bool hdr_capture; + hdr_capture = camera_attr_is_supported_hdr_capture(view->camera); + if (!hdr_capture) + { + view->view->tbt_info->result = TBT_INFO_RESULT_NOT_SUPPORTED; + elm_genlist_item_update(view->view->item); + } + } + + destroy_camera(view); + destroy_player(view); + destroy_video_recorder(view); + + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE_320_X_320 || (get_device_type() == DEVICE_WEARABLE_CIRCLE)) + { + elm_theme_overlay_del(NULL, get_edje_path("custom_button.edj")); + } + #endif + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + + +/** + * @function get_camera_error + * @since_tizen 2.3 + * @description Get Camera Error + * @parameter int: Int + * @return char* + */ +char* get_camera_error(int error_code) +{ + char* error = NULL; + +switch (error_code) +{ + case CAMERA_ERROR_NONE: + error = "CAMERA_ERROR_NONE"; + break; + + case CAMERA_ERROR_INVALID_PARAMETER: + error = "CAMERA_ERROR_INVALID_PARAMETER"; + break; + case CAMERA_ERROR_INVALID_STATE: + error = "CAMERA_ERROR_INVALID_STATE"; + break; + case CAMERA_ERROR_OUT_OF_MEMORY: + error = "CAMERA_ERROR_OUT_OF_MEMORY"; + break; + case CAMERA_ERROR_DEVICE: + error = "CAMERA_ERROR_DEVICE"; + break; + case CAMERA_ERROR_INVALID_OPERATION: + error = "CAMERA_ERROR_INVALID_OPERATION"; + break; + case CAMERA_ERROR_SOUND_POLICY: + error = "CAMERA_ERROR_SOUND_POLICY"; + break; + case CAMERA_ERROR_SECURITY_RESTRICTED: + error = "CAMERA_ERROR_SECURITY_RESTRICTED"; + break; + case CAMERA_ERROR_DEVICE_BUSY: + error = "CAMERA_ERROR_DEVICE_BUSY"; + break; + case CAMERA_ERROR_DEVICE_NOT_FOUND: + error = "CAMERA_ERROR_DEVICE_NOT_FOUND"; + break; + case CAMERA_ERROR_SOUND_POLICY_BY_CALL: + error = "CAMERA_ERROR_SOUND_POLICY_BY_CALL"; + break; + case CAMERA_ERROR_SOUND_POLICY_BY_ALARM: + error = "CAMERA_ERROR_SOUND_POLICY_BY_ALARM"; + break; + case CAMERA_ERROR_ESD: + error = "CAMERA_ERROR_ESD"; + break; + case CAMERA_ERROR_PERMISSION_DENIED: + error = "CAMERA_ERROR_PERMISSION_DENIED"; + break; + case CAMERA_ERROR_NOT_SUPPORTED: + error = "CAMERA_ERROR_NOT_SUPPORTED"; + break; + } + + return error; + +} + + +/** + * @function get_recorder_error + * @since_tizen 2.3 + * @description Get Recorder Error + * @parameter int: Int + * @return char* + */ +char* get_recorder_error(int error_code) +{ + char* error = NULL; + +switch (error_code) +{ + + case RECORDER_ERROR_NONE: + error = "RECORDER_ERROR_NONE"; + break; + case RECORDER_ERROR_INVALID_PARAMETER: + error = "RECORDER_ERROR_INVALID_PARAMETER"; + break; + case RECORDER_ERROR_INVALID_STATE: + error = "RECORDER_ERROR_INVALID_STATE"; + break; + case RECORDER_ERROR_OUT_OF_MEMORY: + error = "RECORDER_ERROR_OUT_OF_MEMORY"; + break; + case RECORDER_ERROR_DEVICE: + error = "RECORDER_ERROR_DEVICE"; + break; + case RECORDER_ERROR_INVALID_OPERATION: + error = "RECORDER_ERROR_INVALID_OPERATION"; + break; + case RECORDER_ERROR_SOUND_POLICY: + error = "RECORDER_ERROR_SOUND_POLICY"; + break; + case RECORDER_ERROR_SECURITY_RESTRICTED: + error = "RECORDER_ERROR_SECURITY_RESTRICTED"; + break; + case RECORDER_ERROR_SOUND_POLICY_BY_CALL: + error = "RECORDER_ERROR_SOUND_POLICY_BY_CALL"; + break; + case RECORDER_ERROR_SOUND_POLICY_BY_ALARM: + error = "RECORDER_ERROR_SOUND_POLICY_BY_ALARM"; + break; + case RECORDER_ERROR_ESD: + error = "RECORDER_ERROR_ESD"; + break; + case RECORDER_ERROR_OUT_OF_STORAGE: + error = "RECORDER_ERROR_OUT_OF_STORAGE"; + break; + case RECORDER_ERROR_PERMISSION_DENIED: + error = "RECORDER_ERROR_PERMISSION_DENIED"; + break; + case RECORDER_ERROR_NOT_SUPPORTED: + error = "RECORDER_ERROR_NOT_SUPPORTED"; + break; + } + + return error; +} + + +/** + * @function check_device_property + * @since_tizen 2.3 + * @description Check Device Property + * @parameter NA + * @return static bool + */ +static bool check_device_property() +{ + char* value; + int result; + result = system_info_get_platform_string("http://tizen.org/system/model_name",&value); + RETVM_IF(result != SYSTEM_INFO_ERROR_NONE, false, "system_info_get_platform_string error"); + RETVM_IF(NULL == value, false, "value is null"); + if(!strcmp(value,"Emulator")) + return true; + else return false; +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-common-view.c b/tbtcoreapp/src/view/tbt-common-view.c new file mode 100644 index 0000000..d214ae2 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-common-view.c @@ -0,0 +1,391 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-common-view.h + * @brief A common view defination used by all other view + * @author amlan.c@samsung.com + * @date October, 2014 + * @bug camera preview is shown in rotated manner + * @credit Tizen SDK Version 2.3.0 Sample Example + */ +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-common-view.h" + + + + +static void update_view_controls(common_view *view); +static bool create_layout_elements(common_view *view); +static Evas_Object *create_toolbar(common_view *view); + +#ifndef DEVICE_TYPE_MOBILE + static Evas_Object *create_wearable_toolbar(common_view *view); +#endif + +static void toolbar_item_info_popup(common_view *view); +static void toolbar_item_pass_pressed(common_view *view); +static void toolbar_item_fail_pressed(common_view *view); +static void _toolbar_button_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void _toolbar_item_popup_destroy_cb(void *data, Evas_Object *obj, void *event_info); +static void _main_layout_destroy_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); + +#ifndef DEVICE_TYPE_MOBILE +static void wearable_toolbar_pass_pressed(void *data, Evas_Object *obj, void *event_info); +static void wearable_toolbar_fail_pressed(void *data, Evas_Object *obj, void *event_info); +static void wearable_toolbar_info_pressed(void *data, Evas_Object *obj, void *event_info); +#endif + + +common_view *common_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item, common_view *view, void (*_app_destroy_cb)(void*), void* app_view) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + RETVM_IF(NULL == view, NULL, "view is null"); + RETVM_IF(NULL == tbt_info, NULL, "tbt_info is null"); + RETVM_IF(NULL == item, NULL, "item is null"); + + view->navi = navi; + view->item = item; + view->app_view = app_view; + view->tbt_info = tbt_info; + view->layout = ui_utils_layout_add(navi, _main_layout_destroy_cb, view); + view->_app_destroy_cb = _app_destroy_cb; + + if(NULL == view->layout) + { + RETVM_IF(!view->layout, NULL, "ui_utils_layout_add failed"); + SAFE_DELETE(view); + return NULL; + } + + if(false == create_layout_elements(view)) + { + evas_object_del(view->layout); + SAFE_DELETE(view); + return NULL; + } + + view->navi_item = elm_naviframe_item_push(view->navi, view->tbt_info->name, NULL, NULL, view->layout, NULL); + #ifdef DEVICE_TYPE_MOBILE + elm_object_item_part_content_set(elm_naviframe_top_item_get(view->navi), "toolbar", view->toolbar); + #endif + + update_view_controls(view); + + return view; +} + + +/** + * @function update_view_controls + * @since_tizen 2.3 + * @description Update View Controls + * @parameter common_view*: Common View Pointer + * @return static void + */ +static void update_view_controls(common_view *view) +{ + RETM_IF(NULL == view, "view is NULL"); + +} + + +/** + * @function create_layout_elements + * @since_tizen 2.3 + * @description Create Layout Elements + * @parameter common_view*: Common View Pointer + * @return static bool + */ +static bool create_layout_elements(common_view *view) +{ + RETVM_IF(NULL == view, false, "create of layout elements failed"); + + elm_layout_file_set(view->layout, view->tbt_info->layout_file, view->tbt_info->layout_group); + + evas_object_size_hint_weight_set(view->layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_align_set(view->layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + + int x,y,w,h; + evas_object_geometry_get(view->layout, &x, &y, &w, &h); + DBG("layout Dim: %d %d %d %d", x, y, w, h); + + + evas_object_show(view->layout); + + #ifdef DEVICE_TYPE_MOBILE + view->toolbar = create_toolbar(view); + #else + view->toolbar = create_wearable_toolbar(view); + #endif + + RETVM_IF(NULL == view->toolbar, false, "create of layout toolbar elements failed"); + + return true; +} + +#ifndef DEVICE_TYPE_MOBILE + +/** + * @function create_wearable_toolbar + * @since_tizen 2.3 + * @description Create Wearable Toolbar + * @parameter common_view*: Common View Pointer + * @return static Evas_Object* + */ +static Evas_Object *create_wearable_toolbar(common_view *view) +{ + DBG("Inside create_wearable_toolbar"); + RETVM_IF(NULL == view, NULL, "view is null"); + Evas_Object *table = elm_table_add(view->layout); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + + Evas_Object* pass_btn = ui_utils_push_button_add(view, table, "Pass", wearable_toolbar_pass_pressed); + Evas_Object* fail_btn = ui_utils_push_button_add(view, table, "Fail", wearable_toolbar_fail_pressed); + Evas_Object* info_btn = ui_utils_push_button_add(view, table, "Info", wearable_toolbar_info_pressed); + + evas_object_show(table); + elm_table_pack(table, pass_btn, 0, 0, 1, 1); + elm_table_pack(table, fail_btn, 1, 0, 1, 1); + elm_table_pack(table, info_btn, 2, 0, 1, 1); + elm_object_part_content_set(view->layout, "wearable_toolbar", table); + return table; +} +#endif + +#ifndef DEVICE_TYPE_MOBILE + +/** + * @function wearable_toolbar_pass_pressed + * @since_tizen 2.3 + * @description Wearable Toolbar Pass Pressed + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void wearable_toolbar_pass_pressed(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is null"); + RETM_IF(NULL == obj, "obj is null"); + + + common_view *view =(common_view*) data; + toolbar_item_pass_pressed(view); +} + + +/** + * @function wearable_toolbar_fail_pressed + * @since_tizen 2.3 + * @description Wearable Toolbar Fail Pressed + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void wearable_toolbar_fail_pressed(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is null"); + RETM_IF(NULL == obj, "obj is null"); + + + common_view *view =(common_view*) data; + toolbar_item_fail_pressed(view); +} + + +/** + * @function wearable_toolbar_info_pressed + * @since_tizen 2.3 + * @description Wearable Toolbar Info Pressed + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void wearable_toolbar_info_pressed(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is null"); + RETM_IF(NULL == obj, "obj is null"); + + + common_view *view =(common_view*) data; + toolbar_item_info_popup(view); +} + +#endif + + + +/** + * @function create_toolbar + * @since_tizen 2.3 + * @description Create Toolbar + * @parameter common_view*: Common View Pointer + * @return static Evas_Object* + */ +static Evas_Object *create_toolbar(common_view *view) +{ + RETVM_IF(NULL == view, NULL, "view is null"); + + Evas_Object *toolbar = NULL; + toolbar = ui_utils_toolbar_add(view->navi); + RETVM_IF(NULL == toolbar, NULL, "toolbar is null"); + elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE); + + unsigned int i; + for(i = 0; i < TOOLBAR_ITEM_INDEX_COUNT_MAX; ++i) + { + view->toolbar_items[i] = elm_toolbar_item_append(toolbar, NULL, toolbar_item_names[i], _toolbar_button_clicked_cb, view); + evas_object_data_set(elm_toolbar_item_object_get(view->toolbar_items[i]), TOOLBAR_BUTTON_DATA_KEY, (void*)(&toolbar_item_ids[i])); + } + + return toolbar; +} + + +/** + * @function toolbar_item_pass_pressed + * @since_tizen 2.3 + * @description Toolbar Item Pass Pressed + * @parameter common_view*: Common View Pointer + * @return static void + */ +static void toolbar_item_pass_pressed(common_view *view) +{ + RETM_IF(NULL == view, "view is NULL"); + + view->tbt_info->result = TBT_INFO_RESULT_PASS; + elm_genlist_item_update(view->item); + elm_naviframe_item_pop(view->navi); +} + + +/** + * @function toolbar_item_fail_pressed + * @since_tizen 2.3 + * @description Toolbar Item Fail Pressed + * @parameter common_view*: Common View Pointer + * @return static void + */ +static void toolbar_item_fail_pressed(common_view *view) +{ + RETM_IF(NULL == view, "view is NULL"); + + view->tbt_info->result = TBT_INFO_RESULT_FAIL; + elm_genlist_item_update(view->item); + elm_naviframe_item_pop(view->navi); +} + + +/** + * @function _toolbar_button_clicked_cb + * @since_tizen 2.3 + * @description Toolbar Button Clicked Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _toolbar_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + + common_view *view = NULL; + view = (common_view*)data; + + void *item_data = evas_object_data_get(elm_toolbar_item_object_get(event_info), TOOLBAR_BUTTON_DATA_KEY); + RETM_IF(NULL == item_data, "Toolbar item data is NULL"); + int item_index = *((int*)item_data); + +switch(item_index) +{ + case TOOLBAR_ITEM_INDEX_PASS: + toolbar_item_pass_pressed(view); + break; + case TOOLBAR_ITEM_INDEX_FAIL: + toolbar_item_fail_pressed(view); + break; + case TOOLBAR_ITEM_INDEX_INFO: + toolbar_item_info_popup(view); + break; + default: + ERR("Not supported button"); + break; + } +} + + +/** + * @function toolbar_item_info_popup + * @since_tizen 2.3 + * @description Toolbar Item Info Popup + * @parameter common_view*: Common View Pointer + * @return static void + */ +static void toolbar_item_info_popup(common_view *view) +{ + RETM_IF(NULL == view, "view is NULL"); + + Evas_Object *popup = ui_utils_popup_add(view->navi, toolbar_item_names[TOOLBAR_ITEM_INDEX_INFO]); + RETM_IF(NULL == popup, "popup is not created"); + elm_object_text_set(popup, view->tbt_info->info); + + ui_utils_popup_button_add(popup, caption_ok, _toolbar_item_popup_destroy_cb, popup); +} + + +/** + * @function _toolbar_item_popup_destroy_cb + * @since_tizen 2.3 + * @description Toolbar Item Popup Destroy Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _toolbar_item_popup_destroy_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is null"); + + Evas_Object *obj_to_del = data; + evas_object_del(obj_to_del); + + if(event_info) + { + Elm_Object_Item *item = event_info; + elm_genlist_item_selected_set(item, EINA_FALSE); + } +} + + +/** + * @function _main_layout_destroy_cb + * @since_tizen 2.3 + * @description Main Layout Destroy Cb + * @parameter void*: Void Pointer, Evas*: Evas Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _main_layout_destroy_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + common_view *view = NULL; + view = (common_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + evas_object_del(view->layout); + + (*view->_app_destroy_cb)(view->app_view); +} diff --git a/tbtcoreapp/src/view/tbt-datacontrol-view.c b/tbtcoreapp/src/view/tbt-datacontrol-view.c new file mode 100644 index 0000000..d4bf0fa --- /dev/null +++ b/tbtcoreapp/src/view/tbt-datacontrol-view.c @@ -0,0 +1,1281 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_DC + +#include +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-datacontrol-view.h" +#include "view/tbt-common-view.h" + + + +struct _datacontrol_view +{ + common_view* view; + + int row_count; + long long row_id; + int current_row; + int data_inserted_flag; + int row_increment; + int result_index; + int current_state; + int nums_selected_rows; + + int data_row[1000]; + + Evas_Object *dc_list; + Evas_Object *next_btn; + Evas_Object *prev_btn; + Evas_Object *last_btn; + Evas_Object *start_btn; + Evas_Object *first_btn; + + data_control_h provider; +}; + +static datacontrol_view *this; +data_control_sql_response_cb sql_callback; +data_control_map_response_cb map_callback; + +static int data_consumer_create(datacontrol_view *this); +static int data_consumer_map_create(datacontrol_view *this); + +static int data_consumer_data_map(datacontrol_view *this); +static int data_consumer_data_insert(datacontrol_view *this); +static int data_consumer_data_delete(datacontrol_view *this); +static int data_consumer_data_update(datacontrol_view *this); +static int data_consumer_data_select(datacontrol_view *this); +static int data_consumer_data_cursor(datacontrol_view *this); + +static Evas_Object *add_control_layout(datacontrol_view *this, Evas_Object *parent); + +static void _app_destroy_cb(void* this); +static void _first_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void _next_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void _prev_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void _last_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void _start_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); + +static void _sql_insert_response_cb(int request_id, data_control_h provider, long long inserted_row_id, bool provider_result, const char *error, void *user_data); +static void _sql_delete_response_cb(int request_id, data_control_h provider, bool provider_result, const char *error, void *user_data); +static void _sql_select_response_cb(int request_id, data_control_h provider, result_set_cursor cursor, bool provider_result, const char *error, void *user_data); +static void _sql_update_response_cb(int request_id, data_control_h provider, bool provider_result, const char *error, void *user_data); +static void _map_get_response_cb(int request_id, data_control_h provider_map, char **result_value_list , int result_value_count, bool provider_result, const char *error, void *user_data); +static void _map_add_response_cb(int request_id, data_control_h provider_map, bool provider_result, const char *error, void *user_data); + + +/** + * @function get_data_control_error + * @since_tizen 2.3 + * @description Get Data Control Error + * @parameter int: Int + * @return static char* + */ +static char* get_data_control_error(int ret) +{ + char* error; + +switch (ret) +{ + case DATA_CONTROL_ERROR_NONE: + error = "DATA_CONTROL_ERROR_NONE"; + break; + case DATA_CONTROL_ERROR_OUT_OF_MEMORY: + error = "DATA_CONTROL_ERROR_OUT_OF_MEMORY"; + break; + case DATA_CONTROL_ERROR_IO_ERROR: + error = "DATA_CONTROL_ERROR_IO_ERROR"; + break; + case DATA_CONTROL_ERROR_INVALID_PARAMETER: + error = "DATA_CONTROL_ERROR_INVALID_PARAMETER"; + break; + case DATA_CONTROL_ERROR_PERMISSION_DENIED: + error = "DATA_CONTROL_ERROR_PERMISSION_DENIED"; + break; + case DATA_CONTROL_ERROR_MAX_EXCEEDED: + error = "DATA_CONTROL_ERROR_MAX_EXCEEDED "; + break; + default: + error = "Unknown Error"; + } + return error; +} + + +/** + * @function datacontrol_view_add + * @since_tizen 2.3 + * @description Datacontrol View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return datacontrol_view* + */ +datacontrol_view *datacontrol_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + this = calloc(1, sizeof(datacontrol_view)); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + this->data_inserted_flag = 0; + this->row_count = MAX_LENGTH; + this->result_index = 0; + this->current_state = CURSOR_NONE_PRESSED; + + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE_320_X_320 || (get_device_type() == DEVICE_WEARABLE_CIRCLE)) + { + elm_theme_overlay_add(NULL, get_edje_path("custom_button.edj")); + } + #endif + + if(tbt_info->apptype == TBT_APP_DC_CURSOR) + { + tbt_info->layout_group = "cursor_viewer"; + tbt_info->layout_file = get_edje_path("datacontrol_viewer.edj"); + } + else + { + tbt_info->layout_group = "datacontrol_viewer"; + tbt_info->layout_file = get_edje_path("datacontrol_viewer.edj"); + } + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + + this->dc_list = elm_list_add(this->view->layout); + RETVM_IF(!this->dc_list, NULL, "elm_list_add failed"); + evas_object_data_set(this->dc_list, "view_data", this); + elm_list_item_append(this->dc_list, "Press start to check", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + elm_object_part_content_set(this->view->layout, "datacontrol_view", this->dc_list); + + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + + + if(this->view->tbt_info->apptype == TBT_APP_DC_INSERT || + this->view->tbt_info->apptype == TBT_APP_DC_DELETE || + this->view->tbt_info->apptype == TBT_APP_DC_UPDATE || + this->view->tbt_info->apptype == TBT_APP_DC_SELECT || + this->view->tbt_info->apptype == TBT_APP_DC_CURSOR) + { + data_consumer_create(this); + } + else if(this->view->tbt_info->apptype == TBT_APP_DC_MAP) + { + data_consumer_map_create(this); + } + + return this; +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter datacontrol_view*: Datacontrol View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(datacontrol_view *this, Evas_Object *parent) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + + Evas_Object *table = elm_table_add(parent); + RETVM_IF(!table, NULL, "elm_table_add failed"); + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + + elm_table_padding_set(table, TABLE_PADDING_HORIZONTAL, TABLE_PADDING_VERTICAL); + + if(this->view->tbt_info->apptype == TBT_APP_DC_CURSOR) + { + elm_table_padding_set(table, 0, 0); + + this->first_btn = ui_utils_push_button_add(this, table, "First", _first_button_pressed_cb); + elm_table_pack(table, this->first_btn, 0, 0, 1, 1); + + this->next_btn = ui_utils_push_button_add(this, table, "Next", _next_button_pressed_cb); + elm_table_pack(table, this->next_btn, 1, 0, 1, 1); + + this->prev_btn = ui_utils_push_button_add(this, table, "Prev", _prev_button_pressed_cb); + elm_table_pack(table, this->prev_btn, 2, 0, 1, 1); + + this->last_btn = ui_utils_push_button_add(this, table, "Last", _last_button_pressed_cb); + elm_table_pack(table, this->last_btn, 3, 0, 1, 1); + + this->start_btn = ui_utils_push_button_add(this, table, "Start", _start_button_pressed_cb); + elm_table_pack(table, this->start_btn, 0, 1, 5, 1); + + elm_object_disabled_set(this->first_btn,EINA_TRUE); + elm_object_disabled_set(this->next_btn,EINA_TRUE); + elm_object_disabled_set(this->prev_btn,EINA_TRUE); + elm_object_disabled_set(this->last_btn,EINA_TRUE); + } + else + { + this->start_btn = ui_utils_push_button_add(this, table, "Start", _start_button_pressed_cb); + elm_table_pack(table, this->start_btn, 0, 0, 1, 1); + } + + return table; +} + + +/** + * @function data_consumer_create + * @since_tizen 2.3 + * @description Data Consumer Create + * @parameter datacontrol_view*: Datacontrol View Pointer + * @return static int + */ +static int data_consumer_create(datacontrol_view *this) +{ + int result = 0; + + const char *provider_id = DATA_CONTROL_PROVIDER_ID; + const char *data_id = DATA_CONTROL_PROVIDER_DATA_ID; + + result = data_control_sql_create(&this->provider); + RETVM_IF(result != DATA_CONTROL_ERROR_NONE, result, "data_control_sql_create fail > Error = %s", get_data_control_error(result)); + + result = data_control_sql_set_provider_id(this->provider, provider_id); + RETVM_IF(result != DATA_CONTROL_ERROR_NONE, result, "data_control_sql_set_provider_id fail > Error = %s", get_data_control_error(result)); + + result = data_control_sql_set_data_id(this->provider, data_id); + RETVM_IF(result != DATA_CONTROL_ERROR_NONE, result, "data_control_sql_set_data_id fail > Error = %s", get_data_control_error(result)); + + sql_callback.delete_cb = _sql_delete_response_cb; + sql_callback.insert_cb = _sql_insert_response_cb; + sql_callback.select_cb = _sql_select_response_cb; + sql_callback.update_cb = _sql_update_response_cb; + + result = data_control_sql_register_response_cb(this->provider, &sql_callback, NULL); + RETVM_IF(result != DATA_CONTROL_ERROR_NONE, result, "data_control_sql_register_response_cb fail > Error = %s", get_data_control_error(result)); + return result; +} + + +/** + * @function data_consumer_map_create + * @since_tizen 2.3 + * @description Data Consumer Map Create + * @parameter datacontrol_view*: Datacontrol View Pointer + * @return static int + */ +static int data_consumer_map_create(datacontrol_view *this) +{ + int result = 0; + const char *data_id = DATA_CONTROL_PROVIDER_MAP_ID; + const char *provider_id = DATA_CONTROL_MAP_PROVIDER_ID; + + map_callback.get_cb = _map_get_response_cb; + map_callback.add_cb = _map_add_response_cb; + + result = data_control_map_create(&this->provider); + RETVM_IF(result != DATA_CONTROL_ERROR_NONE, result, "data_control_map_create fail > Error = %s", get_data_control_error(result)); + + + result = data_control_map_set_provider_id(this->provider, provider_id); + RETVM_IF(result != DATA_CONTROL_ERROR_NONE, result, "data_control_map_set_provider_id fail > Error = %s", get_data_control_error(result)); + + + result = data_control_map_set_data_id(this->provider, data_id); + RETVM_IF(result != DATA_CONTROL_ERROR_NONE, result, "data_control_map_set_data_id fail > Error = %s", get_data_control_error(result)); + + + result = data_control_map_register_response_cb(this->provider, &map_callback, NULL); + RETVM_IF(result != DATA_CONTROL_ERROR_NONE, result, "data_control_map_register_response_cb fail > Error = %s", get_data_control_error(result)); + + return result; +} + + +/** + * @function data_consumer_data_insert + * @since_tizen 2.3 + * @description Data Consumer Data Insert + * @parameter datacontrol_view*: Datacontrol View Pointer + * @return static int + */ +static int data_consumer_data_insert(datacontrol_view *this) +{ + int result = 0; + int req_id = 0; + bundle *b = NULL; + + this->data_inserted_flag = 1 ; + + b = bundle_create(); + bundle_add_str(b, "WORD", "'test'"); + bundle_add_str(b, "WORD_DESC", "'test description'"); + bundle_add_str(b, "WORD_LEN", "4"); + bundle_add_str(b, "WORD_DESC_LEN", "10"); + bundle_add_str(b, "WORD_NUMBER", "10000"); + + + result = data_control_sql_insert(this->provider, b, &req_id); + //RETVM_IF(result != DATA_CONTROL_ERROR_NONE, result, "data_control_sql_insert fail > Error = %s", get_data_control_error(result)); + if(result != DATA_CONTROL_ERROR_NONE) + { + elm_list_item_append(this->dc_list, "The insert request sending failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + DBG( "data_control_sql_insert fail > Error = %s", get_data_control_error(result)); + } + else + { + elm_list_item_append(this->dc_list, "The insert request sent.", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } + + bundle_free(b); + + return result; +} + + +/** + * @function data_consumer_data_delete + * @since_tizen 2.3 + * @description Data Consumer Data Delete + * @parameter datacontrol_view*: Datacontrol View Pointer + * @return static int + */ +static int data_consumer_data_delete(datacontrol_view *this) +{ + int result; + int req_id; + char *sql_string; + + sql_string = format_string("ID = %lld",this->row_id); + result = data_control_sql_delete(this->provider, sql_string, &req_id); + //RETVM_IF(result != DATA_CONTROL_ERROR_NONE, result, "data_control_sql_delete fail > Error = %s", get_data_control_error(result)); + SAFE_DELETE(sql_string); + + if(result == DATA_CONTROL_ERROR_NONE) + { + elm_list_item_append(this->dc_list, "The delete request sent", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } + else + { + elm_list_item_append(this->dc_list, "The delete request sending failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + DBG( "data_control_sql_delete fail > Error = %s", get_data_control_error(result)); + } + + + return result; +} + + +/** + * @function data_consumer_data_update + * @since_tizen 2.3 + * @description Data Consumer Data Update + * @parameter datacontrol_view*: Datacontrol View Pointer + * @return static int + */ +static int data_consumer_data_update(datacontrol_view *this) +{ + int result; + int req_id; + + bundle* b = bundle_create(); + RETVM_IF(!b, -1, "bundle_create failed"); + bundle_add_str(b, "WORD_DESC_LEN", "20"); + + char *sql_string; + sql_string = format_string("ID = %lld",this->row_id); + result = data_control_sql_update(this->provider, b, sql_string, &req_id); +// RETVM_IF(result != DATA_CONTROL_ERROR_NONE, result, "data_control_sql_update fail > Error = %s", get_data_control_error(result)); + SAFE_DELETE(sql_string); + + + if(result != DATA_CONTROL_ERROR_NONE) + { + elm_list_item_append(this->dc_list, "THE UPDATE REQUEST SENDING FAILED", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + DBG( "data_control_sql_update fail > Error = %s", get_data_control_error(result)); + } + else + { + ERR("data_control_sql_update fail > Error = %s", get_data_control_error(result)); + elm_list_item_append(this->dc_list, "The update request sent", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } + + return result; +} + + +/** + * @function data_consumer_data_select + * @since_tizen 2.3 + * @description Data Consumer Data Select + * @parameter datacontrol_view*: Datacontrol View Pointer + * @return static int + */ +static int data_consumer_data_select(datacontrol_view *this) +{ + int result; + int req_id; + + const char *order = "ID ASC"; + char *column_list[6]; + + column_list[0] = "ID"; + column_list[1] = "WORD"; + column_list[2] = "WORD_DESC"; + column_list[3] = "WORD_LEN"; + column_list[4] = "WORD_DESC_LEN"; + column_list[5] = "WORD_NUMBER"; + + char *sql_string; + sql_string = format_string("ID = %lld",this->row_id); + result = data_control_sql_select(this->provider, column_list, 6, sql_string, order, &req_id); + //RETVM_IF(result != DATA_CONTROL_ERROR_NONE, result, "data_control_sql_select fail > Error = %s", get_data_control_error(result)); + SAFE_DELETE(sql_string); + if(result != DATA_CONTROL_ERROR_NONE) + { + elm_list_item_append(this->dc_list,"The select request sending failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + ERR( "data_control_sql_select fail > Error = = %s", get_data_control_error(result)); + } + else + { + elm_list_item_append(this->dc_list,"The select request sent", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } + + return result; +} + + +/** + * @function data_consumer_data_map + * @since_tizen 2.3 + * @description Data Consumer Data Map + * @parameter datacontrol_view*: Datacontrol View Pointer + * @return static int + */ +static int data_consumer_data_map(datacontrol_view *this) +{ + int result; + int req_id = 0; + char *key_map = "key"; + char *value[3] = {"value1","value2","value3"}; + + result = data_control_map_add(this->provider, key_map, value[1], &req_id); + DBG("data_control_map_add : %s", get_data_control_error(result)); + if(result != DATA_CONTROL_ERROR_NONE) + { + elm_list_item_append(this->dc_list,"Adding map data failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + DBG( "data_control_map_add fail > Error = %s", get_data_control_error(result)); + } + else + { + elm_list_item_append(this->dc_list,"Adding map data requested", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } + + return result; +} + + +/** + * @function data_consumer_data_cursor + * @since_tizen 2.3 + * @description Data Consumer Data Cursor + * @parameter datacontrol_view*: Datacontrol View Pointer + * @return static int + */ +static int data_consumer_data_cursor(datacontrol_view *this) +{ + int result = 0; + int req_id = 0; + int loopIterator; + bundle *b = NULL; + + b = bundle_create(); + + bundle_add_str(b, "WORD", "'cursor'"); + bundle_add_str(b, "WORD_DESC", "'cursor description'"); + bundle_add_str(b, "WORD_LEN", "6"); + bundle_add_str(b, "WORD_DESC_LEN", "17"); + bundle_add_str(b, "WORD_NUMBER", "10000"); + + for(loopIterator = 0; loopIterator < this->row_count ; loopIterator++ ) + { + result = data_control_sql_insert(this->provider, b, &req_id); + if(result != DATA_CONTROL_ERROR_NONE) + { + elm_list_item_append(this->dc_list, "The Insert request sending failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + DBG( "data_control_sql_insert fail > Error = %s", get_data_control_error(result)); + } + else + { + elm_list_item_append(this->dc_list, "The Insert request sent", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } + } + + bundle_free(b); + + return result; +} + + +/** + * @function data_cursor_select_data + * @since_tizen 2.3 + * @description Data Cursor Select Data + * @parameter datacontrol_view*: Datacontrol View Pointer + * @return static int + */ +static int data_cursor_select_data(datacontrol_view *this) +{ + int result; + int req_id; + const char *order = "ID ASC"; + char *column_list[6]; + column_list[0] = "ID"; + column_list[1] = "WORD"; + column_list[2] = "WORD_DESC"; + column_list[3] = "WORD_LEN"; + column_list[4] = "WORD_DESC_LEN"; + column_list[5] = "WORD_NUMBER"; + + result = data_control_sql_select(this->provider, column_list, 6, "WORD = 'cursor'", order, &req_id); + + if(result != DATA_CONTROL_ERROR_NONE) + { + elm_list_item_append(this->dc_list,"The select request sending failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + DBG( "data_control_sql_select fail > Error = %s", get_data_control_error(result)); + } + else + { + elm_list_item_append(this->dc_list,"The select request sent", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } + + return result; +} + + +/** + * @function data_control_destroy + * @since_tizen 2.3 + * @description Data Control Destroy + * @parameter datacontrol_view*: Datacontrol View Pointer + * @return static void + */ +static void data_control_destroy(datacontrol_view *this) +{ + int result; + if(this->data_inserted_flag > 0) + { + this->data_inserted_flag = 0; + result = data_control_sql_unregister_response_cb(this->provider); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_unregister_response_cb fail > Error = %s", get_data_control_error(result)); + } + result = data_control_sql_destroy(this->provider); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_destroy fail > Error = %s", get_data_control_error(result)); + } + } + if(this->view->tbt_info->apptype == TBT_APP_DC_MAP) + { + result = data_control_map_unregister_response_cb (this->provider); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_map_unregister_response_cb fail > Error = %s", get_data_control_error(result)); + } + } +} + + +/** + * @function _first_button_pressed_cb + * @since_tizen 2.3 + * @description First Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _first_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + datacontrol_view *this = NULL; + this = (datacontrol_view*)data; + RETM_IF(NULL == this, "this is NULL"); + + elm_list_clear(this->dc_list); + + if(this->current_state >= 0 ) + { + this->current_state = CURSOR_FIRST_PRESSED; + this->current_row = 0; + elm_object_disabled_set(this->next_btn,EINA_TRUE); + elm_object_disabled_set(this->prev_btn,EINA_TRUE); + elm_object_disabled_set(this->last_btn,EINA_TRUE); + data_cursor_select_data(this); + } + +} + + +/** + * @function _next_button_pressed_cb + * @since_tizen 2.3 + * @description Next Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _next_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + datacontrol_view *this = NULL; + this = (datacontrol_view*)data; + RETM_IF(NULL == this, "this is NULL"); + + + if(this->current_state >= 0) + { + + if(this->current_row < this->nums_selected_rows) + { + this->current_state = CURSOR_NEXT_PRESSED; + elm_list_clear(this->dc_list); + this->current_row++; + elm_object_disabled_set(this->first_btn,EINA_TRUE); + elm_object_disabled_set(this->prev_btn,EINA_TRUE); + elm_object_disabled_set(this->last_btn,EINA_TRUE); + data_cursor_select_data(this); + } + } + +} + + +/** + * @function _prev_button_pressed_cb + * @since_tizen 2.3 + * @description Prev Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _prev_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + datacontrol_view *this = NULL; + this = (datacontrol_view*)data; + RETM_IF(NULL == this, "this is NULL"); + + + if(this->current_state >= 0) + { + + if(this->current_row > 0) + { + elm_list_clear(this->dc_list); + this->current_state = CURSOR_PREVIOUS_PRESSED; + this->current_row--; + elm_object_disabled_set(this->first_btn,EINA_TRUE); + elm_object_disabled_set(this->last_btn,EINA_TRUE); + elm_object_disabled_set(this->next_btn,EINA_TRUE); + data_cursor_select_data(this); + } + } + +} + + +/** + * @function _last_button_pressed_cb + * @since_tizen 2.3 + * @description Last Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _last_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + datacontrol_view *this = NULL; + this = (datacontrol_view*)data; + RETM_IF(NULL == this, "this is NULL"); + + elm_list_clear(this->dc_list); + if(this->current_state >= 0) + { + this->current_state = CURSOR_LAST_PRESSED; + this->current_row = this->nums_selected_rows; + elm_object_disabled_set(this->first_btn,EINA_TRUE); + elm_object_disabled_set(this->prev_btn,EINA_TRUE); + elm_object_disabled_set(this->next_btn,EINA_TRUE); + data_cursor_select_data(this); + } + +} + + +/** + * @function _start_button_pressed_cb + * @since_tizen 2.3 + * @description Start Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _start_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + datacontrol_view *this = NULL; + this = (datacontrol_view*)data; + RETM_IF(NULL == this, "this is NULL"); + + elm_list_clear(this->dc_list); + + if(this->view->tbt_info->apptype == TBT_APP_DC_INSERT || + this->view->tbt_info->apptype == TBT_APP_DC_DELETE || + this->view->tbt_info->apptype == TBT_APP_DC_UPDATE || + this->view->tbt_info->apptype == TBT_APP_DC_SELECT) + { + data_consumer_data_insert(this); + } + else if(this->view->tbt_info->apptype == TBT_APP_DC_CURSOR) + { + + this->current_state = CURSOR_START_PRESSED; + + this->row_count = 4; + this->row_increment = 0; + data_consumer_data_cursor(this); + + + } + else if(this->view->tbt_info->apptype == TBT_APP_DC_MAP) + { + data_consumer_data_map(this); + } +} + + +/** + * @function _sql_insert_response_cb + * @since_tizen 2.3 + * @description Sql Insert Response Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _sql_insert_response_cb(int request_id, data_control_h provider, long long inserted_row_id, bool provider_result, const char *error, void *user_data) +{ + if(provider_result) + { + if(this->view->tbt_info->apptype == TBT_APP_DC_CURSOR) + { + this->row_increment += 1; + this->row_id = inserted_row_id; + + if(this->row_increment == this->row_count) + { + this->row_increment = 0; + data_cursor_select_data(this); + } + } + else + { + this->row_id = inserted_row_id; + DBG(" success:"); + + elm_list_item_append(this->dc_list, "The insert operation is successful", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + + char *sql_string; + sql_string = format_string("Test Data Inserted into row # %lld", this->row_id); + elm_list_item_append(this->dc_list, sql_string, NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + SAFE_DELETE(sql_string); + + if(this->view->tbt_info->apptype == TBT_APP_DC_DELETE) + { + data_consumer_data_delete(this); + } + else if(this->view->tbt_info->apptype == TBT_APP_DC_UPDATE) + { + data_consumer_data_update(this); + } + else if(this->view->tbt_info->apptype == TBT_APP_DC_SELECT) + { + data_consumer_data_select(this); + } + } + } + else + { + elm_list_item_append(this->dc_list, "The insert operation failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } +} + + +/** + * @function _sql_delete_response_cb + * @since_tizen 2.3 + * @description Sql Delete Response Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return void + */ +void _sql_delete_response_cb(int request_id, data_control_h provider, bool provider_result, const char *error, void *user_data) +{ + if(provider_result) + { + elm_list_item_append(this->dc_list, "The delete operation is successful", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + + char *sql_string; + sql_string = format_string("Test Data deleted from row # %lld", this->row_id); + elm_list_item_append(this->dc_list, sql_string, NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + SAFE_DELETE(sql_string); + } + else + { + elm_list_item_append(this->dc_list, "The delete operation failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } +} + + +/** + * @function _sql_select_response_cb + * @since_tizen 2.3 + * @description Sql Select Response Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _sql_select_response_cb(int request_id, data_control_h provider, result_set_cursor cursor, bool provider_result, const char *error, void *user_data) +{ + RETM_IF(NULL == cursor, "> cursor is null"); + int result = 0; + if(this->view->tbt_info->apptype == TBT_APP_DC_CURSOR) + { + int wordLen = -1; + if(provider_result) + { + this->result_index = 0; + + if( (result = data_control_sql_step_first(cursor)) == DATA_CONTROL_ERROR_NONE) + { + + if(this->current_state == CURSOR_FIRST_PRESSED) + { + result = data_control_sql_get_int_data(cursor, 0, &wordLen); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_get_int_data fail > Error = %s", get_data_control_error(result)); + } + char *sql_string = format_string("Selected Row ID#%d", wordLen); + DBG("For First Clicked wordlen : %d Current Row : %d",wordLen,this->current_row); + elm_list_item_append(this->dc_list, sql_string, NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list);SAFE_DELETE(sql_string); + elm_object_disabled_set(this->prev_btn,EINA_FALSE); + elm_object_disabled_set(this->next_btn,EINA_FALSE); + elm_object_disabled_set(this->last_btn,EINA_FALSE); + //this->data_row[this->result_index++] = wordLen; + } + else if(this->current_state == CURSOR_NEXT_PRESSED) + { + int steps = 0; + + while(steps < this->current_row) + { + DBG("For Next Clicked Current Row : %d Steps %d: ",this->current_row,steps); + data_control_sql_step_next(cursor); + steps ++; + } + + result = data_control_sql_get_int_data(cursor, 0, &wordLen); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_get_int_data fail > Error = %s", get_data_control_error(result)); + } + DBG("For Next Clicked Wordlen ; %d Current Row : %d Steps %d: ",wordLen,this->current_row,steps); + char *sql_string = format_string("Selected Row ID#%d", wordLen); + elm_list_item_append(this->dc_list, sql_string, NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + SAFE_DELETE(sql_string); + elm_object_disabled_set(this->prev_btn,EINA_FALSE); + elm_object_disabled_set(this->first_btn,EINA_FALSE); + elm_object_disabled_set(this->last_btn,EINA_FALSE); + + } + else if(this->current_state == CURSOR_PREVIOUS_PRESSED) + { + data_control_sql_step_last(cursor); + int steps = this->nums_selected_rows; + while(steps > this->current_row) + { + DBG("For Prev Clicked Current Row : %d Steps %d: ",this->current_row,steps); + data_control_sql_step_previous(cursor); + steps--; + } + + result = data_control_sql_get_int_data(cursor, 0, &wordLen); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_get_int_data fail > Error = %s", get_data_control_error(result)); + } + DBG("For Prev Clicked WordLen : %d Current Row : %d Steps %d: ",wordLen,this->current_row,steps); + char *sql_string = format_string("Selected Row ID#%d", wordLen); + elm_list_item_append(this->dc_list, sql_string, NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + SAFE_DELETE(sql_string); + elm_object_disabled_set(this->next_btn,EINA_FALSE); + elm_object_disabled_set(this->first_btn,EINA_FALSE); + elm_object_disabled_set(this->last_btn,EINA_FALSE); + + } + else if(this->current_state == CURSOR_LAST_PRESSED) + { + result = data_control_sql_step_last(cursor); + RETM_IF(result != DATA_CONTROL_ERROR_NONE, "data_control_sql_step_last fail > Error = %s", get_data_control_error(result)); + DBG("For last Current Row : %d ",this->current_row); + result = data_control_sql_get_int_data(cursor, 0, &wordLen); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_get_int_data fail > Error = %s", get_data_control_error(result)); + } + DBG("For last Current Row : %d wordlen: %d ",this->current_row,wordLen); + char *sql_string = format_string("Selected Row ID#%d", wordLen); + elm_list_item_append(this->dc_list, sql_string, NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + SAFE_DELETE(sql_string); + elm_object_disabled_set(this->prev_btn,EINA_FALSE); + elm_object_disabled_set(this->first_btn,EINA_FALSE); + elm_object_disabled_set(this->next_btn,EINA_FALSE); + + } + else if(this->current_state == CURSOR_START_PRESSED) + { + this->nums_selected_rows = 0; + this->current_row = 0; + +while (true) +{ + + { + DBG("selected_rows : %d ",this->nums_selected_rows); + result = data_control_sql_get_int_data(cursor, 0, &wordLen); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_get_int_data fail > Error = %s", get_data_control_error(result)); + } + char *sql_string = format_string("Selected Row ID#%d", wordLen); + elm_list_item_append(this->dc_list, sql_string, NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + SAFE_DELETE(sql_string); + + if(data_control_sql_step_next(cursor) != DATA_CONTROL_ERROR_NONE) + { + break; + } + else + { + this->nums_selected_rows++; + } + } + + } + DBG("Selected Rows : %d",this->nums_selected_rows); + elm_object_disabled_set(this->first_btn,EINA_FALSE); + elm_object_disabled_set(this->next_btn,EINA_FALSE); + elm_object_disabled_set(this->prev_btn,EINA_FALSE); + elm_object_disabled_set(this->last_btn,EINA_FALSE); + + } + + } + else + { + RETM_IF(true, "data_control_sql_step_first failed : %s", get_data_control_error(result)); + } + + } + else + { + elm_list_item_append(this->dc_list, "The select operation is failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + RETM_IF(result != DATA_CONTROL_ERROR_NONE, "data_control_sql_step_first fail > Error = %s", get_data_control_error(result)); + } + } + else + { + char wordDesc[32] = {0,}; + char column_name[32]= {0,}; + data_control_sql_column_type_e columnType = DATA_CONTROL_SQL_COLUMN_TYPE_UNDEFINED; + int columnsize = 0; + int columnCount = 0; + int wordLen = -1; + long long wordDesLen = -1; + double wordNumber = -1; + + if(provider_result) + { + elm_list_item_append(this->dc_list, "Select operation is successful.", NULL, NULL, NULL, NULL); + + char *sql_string; + sql_string = format_string("Test Data Selected from row # %lld", this->row_id); + elm_list_item_append(this->dc_list, sql_string, NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + SAFE_DELETE(sql_string); + + result = data_control_sql_step_first(cursor); + RETM_IF(result != DATA_CONTROL_ERROR_NONE, "data_control_sql_step_first fail > Error = %s", get_data_control_error(result)); + result = data_control_sql_get_text_data(cursor, 1, wordDesc); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_get_text_data fail > Error = %s", get_data_control_error(result)); + } + result = data_control_sql_get_double_data(cursor, 5, &wordNumber); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_get_double_data fail > Error = %s", get_data_control_error(result)); + } + result = data_control_sql_get_int64_data(cursor, 4, &wordDesLen); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_get_int64_data fail > Error = %s", get_data_control_error(result)); + } + result = data_control_sql_get_int_data(cursor, 3, &wordLen); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_get_int_data fail > Error = %s", get_data_control_error(result)); + } + result = data_control_sql_get_column_name(cursor,1,column_name ); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_get_column_name fail > Error = %s", get_data_control_error(result)); + } + result = columnCount = data_control_sql_get_column_count(cursor); + if(result < 0) + { + DBG("data_control_sql_get_int_data fail > Error = %s", get_data_control_error(result)); + } + result = data_control_sql_get_column_item_type(cursor, 5, &columnType); + if(result != DATA_CONTROL_ERROR_NONE) + { + DBG("data_control_sql_get_column_item_type fail > Error = %s", get_data_control_error(result)); + } + result = columnsize = data_control_sql_get_column_item_size(cursor,2 ); + if(result == DATA_CONTROL_ERROR_IO_ERROR || result == DATA_CONTROL_ERROR_INVALID_PARAMETER) + { + DBG("data_control_sql_get_int_data fail > Error = %s", get_data_control_error(result)); + } + } + else + { + elm_list_item_append(this->dc_list, "The select operation is failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } + } +} + + +/** + * @function _sql_update_response_cb + * @since_tizen 2.3 + * @description Sql Update Response Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _sql_update_response_cb(int request_id, data_control_h provider, bool provider_result, const char *error, void *user_data) +{ + if(provider_result) + { + elm_list_item_append(this->dc_list, "The update operation is successful", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + + char *sql_string; + sql_string = format_string("Test Data updated into row # %lld", this->row_id); + elm_list_item_append(this->dc_list, sql_string, NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + SAFE_DELETE(sql_string); + } + else + { + elm_list_item_append(this->dc_list, "The update operation failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } +} + + +/** + * @function _map_get_response_cb + * @since_tizen 2.3 + * @description Map Get Response Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _map_get_response_cb(int request_id, data_control_h provider, char **result_value_list , int result_value_count, bool provider_result, const char *error, void *user_data) +{ + if(provider_result) + { + char *sql_string; + elm_list_item_append(this->dc_list,"Map Data get operation successful.", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + int i; + for(i = 0 ; i < result_value_count ; i++) + { + sql_string = format_string("#%d %s",i+1,result_value_list[i]); + elm_list_item_append(this->dc_list, sql_string, NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + SAFE_DELETE(sql_string); + } + } + else + { + elm_list_item_append(this->dc_list,"Map Data get operation failed.", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } +} + + +/** + * @function _map_add_response_cb + * @since_tizen 2.3 + * @description Map Add Response Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _map_add_response_cb(int request_id, data_control_h provider, bool provider_result, const char *error, void *user_data) +{ + if(provider_result) + { + int result,req_id ; + char *key_map = "key"; + result = data_control_map_get(this->provider, key_map, &req_id); + + if(result != DATA_CONTROL_ERROR_NONE) + { + elm_list_item_append(this->dc_list, "Map Data add operation failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + DBG("data_control_map_get fail > Error = %s", get_data_control_error(result)); + } + else + { + elm_list_item_append(this->dc_list, "Map Data add operation Success", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + } + } + else + { + elm_list_item_append(this->dc_list, "Map Data add operation failed", NULL, NULL, NULL, NULL); + elm_list_go(this->dc_list); + evas_object_show(this->dc_list); + DBG("No data provided from coretbt_dataprovider as add response"); + } +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* data) +{ + RETM_IF(NULL == data, "data is NULL"); + + datacontrol_view *this = NULL; + this = (datacontrol_view*)data; + RETM_IF(NULL ==this, "view is NULL"); + + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE_320_X_320 || (get_device_type() == DEVICE_WEARABLE_CIRCLE)) + { + elm_theme_overlay_del(NULL, get_edje_path("custom_button.edj")); + } + #endif + + data_control_destroy(this); + + SAFE_DELETE(this->view); + SAFE_DELETE(this); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-display-view.c b/tbtcoreapp/src/view/tbt-display-view.c new file mode 100644 index 0000000..e2bb64e --- /dev/null +++ b/tbtcoreapp/src/view/tbt-display-view.c @@ -0,0 +1,123 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-display-view.c + * @brief This view provide the informtaion about display + * + * @author Golam Kayas (g.kayes@samsung.com) + * @date October, 2014 + * @bug data_control_sql_remove_cursor() api does not work. + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_DISPLAY + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-display-view.h" +#include "view/tbt-common-view.h" + +struct _display_view +{ + common_view* view; + + int width; + int height; + + Evas_Object *width_label; + Evas_Object *height_label; +}; + +static void _app_destroy_cb(void* this); + + +/** + * @function display_view_add + * @since_tizen 2.3 + * @description Display View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return display_view* + */ +display_view *display_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + display_view *this = NULL; + this = calloc(1, sizeof(display_view)); + RETVM_IF(!this, NULL, "calloc failed"); + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "display_viewer"; + tbt_info->layout_file = get_edje_path("display_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + int res; + res = system_info_get_platform_int("tizen.org/feature/screen.width", &this->width); + RETVM_IF(res != 0, NULL, "tizen.org/feature/screen.width"); + res = system_info_get_platform_int("tizen.org/feature/screen.height", &this->height); + RETVM_IF(res != 0, NULL, "tizen.org/feature/screen.height"); + + + this->width_label = ui_utils_label_add(this->view->layout, "Width: "); + this->height_label = ui_utils_label_add(this->view->layout, "Height: "); + + + char buf[MAX_LENGTH] = {'\0'}; + snprintf(buf, MAX_LENGTH, "Screen Width: %d", this->width); + ui_utils_label_set_text(this->width_label, buf, "left"); + snprintf(buf, MAX_LENGTH, "Screen Height: %d", this->height); + ui_utils_label_set_text(this->height_label, buf, "left"); + + + elm_object_part_content_set(this->view->layout, "width_text", this->width_label); + elm_object_part_content_set(this->view->layout, "height_text", this->height_label); + + + return this; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + display_view *view = NULL; + view = (display_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-efl-callbacks.c b/tbtcoreapp/src/view/tbt-efl-callbacks.c new file mode 100644 index 0000000..edf6917 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-efl-callbacks.c @@ -0,0 +1,237 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-efl-callbacks.c + * @brief Checks eext_object_event_callback_del() and eext_object_event_callback_add() functionality. + * + * @author Muntasir (mk.chy@samsung.com) + * @date December, 2014 + * @bug NA + * @credit + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_EFL + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-efl-callbacks.h" +#include "view/tbt-common-view.h" +#include "utils/config.h" + +bool __is_efl_test_running = false; + +struct _efl_callbacks_view { + common_view* view; + location_manager_h manager; + + Evas_Object *lat_label; + Evas_Object *lon_label; + Evas_Object *action_btn; + bool callbackAdded; +}; + +static void _app_destroy_cb(void* this); +static Evas_Object *add_control_layout(efl_callbacks_view *this, + Evas_Object *parent); +static void _control_button_pressed_cb(void *data, Evas_Object *obj, + void *event_info); +static void update(efl_callbacks_view *this); +static void on_hardware_back_button_pressed(void *data, Evas_Object *obj, + void *event_info); + + +/** + * @function efl_callbacks_view_add + * @since_tizen 2.3 + * @description Efl Callbacks View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return efl_callbacks_view* + */ +efl_callbacks_view *efl_callbacks_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + efl_callbacks_view *this = NULL; + this = calloc(1, sizeof(efl_callbacks_view)); + RETVM_IF(!this, NULL, "calloc failed"); + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "efl_test"; + tbt_info->layout_file = get_edje_path("efl_callback_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->lat_label = ui_utils_label_add(this->view->layout, "???"); + this->lon_label = ui_utils_label_add(this->view->layout, "???"); + + elm_label_line_wrap_set(this->lat_label, ELM_WRAP_CHAR); + elm_label_line_wrap_set(this->lat_label, ELM_WRAP_CHAR); + + ui_utils_label_set_text(this->lat_label, "???", "left"); + ui_utils_label_set_text(this->lon_label, "???", "left"); + + elm_object_part_content_set(this->view->layout, "_title", this->lat_label); + elm_object_part_content_set(this->view->layout, "_callback", + this->lon_label); + + Evas_Object *table = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", table); + + __is_efl_test_running = true; + + this->callbackAdded = true; + eext_object_event_callback_add(this->action_btn, EEXT_CALLBACK_BACK, + on_hardware_back_button_pressed, this); + update(this); + + return this; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + efl_callbacks_view *view = NULL; + view = (efl_callbacks_view*) this; + RETM_IF(NULL == view, "view is NULL"); + + __is_efl_test_running = false; + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter efl_callbacks_view*: Efl Callbacks View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(efl_callbacks_view *this, Evas_Object *parent) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + + elm_table_padding_set(table, TABLE_PADDING_HORIZONTAL, + TABLE_PADDING_VERTICAL); + + this->action_btn = ui_utils_push_button_add(this, table, "Button", + _control_button_pressed_cb); + elm_table_pack(table, this->action_btn, 0, 0, 1, 1); + + return table; +} + + +/** + * @function _control_button_pressed_cb + * @since_tizen 2.3 + * @description Control Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _control_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + efl_callbacks_view *this = (efl_callbacks_view*) data; + RETM_IF(NULL == this, "efl_callbacks_view is null"); + + if (this->callbackAdded) + { + this->callbackAdded = false; + eext_object_event_callback_del(this->action_btn, EEXT_CALLBACK_BACK, + on_hardware_back_button_pressed); + } + else + { + this->callbackAdded = true; + eext_object_event_callback_add(this->action_btn, EEXT_CALLBACK_BACK, + on_hardware_back_button_pressed, this); + } + + update(this); + +} + + +/** + * @function update + * @since_tizen 2.3 + * @description Update + * @parameter efl_callbacks_view*: Efl Callbacks View Pointer + * @return static void + */ +static void update(efl_callbacks_view *this) +{ + RETM_IF(NULL == this, "efl_callbacks_view is null"); + + if (this->callbackAdded) + { + ui_utils_label_set_text(this->lat_label, "Callback added.", "left"); + elm_object_text_set(this->action_btn, "Delete Callback"); + ui_utils_label_set_text(this->lon_label, "Waiting for callback...", + "left"); + } + else + { + ui_utils_label_set_text(this->lat_label, "Callback deleted.", "left"); + elm_object_text_set(this->action_btn, "Add Callback"); + ui_utils_label_set_text(this->lon_label, "Waiting for callback...", + "left"); + } +} + + +/** + * @function on_hardware_back_button_pressed + * @since_tizen 2.3 + * @description On Hardware Back Button Pressed + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void on_hardware_back_button_pressed(void *data, Evas_Object *obj, void *event_info) +{ + efl_callbacks_view *this = (efl_callbacks_view*) data; + RETM_IF(NULL == this, "efl_callbacks_view is null"); + + ui_utils_label_set_text(this->lon_label, " BACK BUTTON PRESS DETECTED ", + "left"); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-event-view.c b/tbtcoreapp/src/view/tbt-event-view.c new file mode 100644 index 0000000..802cd93 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-event-view.c @@ -0,0 +1,218 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-event-view.c + * @brief Checks out app event callback's + * @author Amlan Chowdhury (amlan.c@samsung.com) + * @date October, 2014 + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_EVENT + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-event-view.h" +#include "view/tbt-common-view.h" + +struct _event_view +{ + common_view* view; + app_event_handler_h language_handler; + app_event_handler_h orientation_handler; + app_event_handler_h region_handler; + app_event_handler_h low_battery_handler; + app_event_handler_h low_memory_handler; + + + Evas_Object *language_label; + Evas_Object *orientation_label; + Evas_Object *region_label; + Evas_Object *low_battery_label; + Evas_Object *low_memory_label; + Evas_Object *event_label; + +}; + +static void _app_language_event_cb(app_event_info_h event_info, void *user_data); +static void _app_orientation_event_cb(app_event_info_h event_info, void *user_data); +static void _app_region_event_cb(app_event_info_h event_info, void *user_data); +static void _app_low_battery_cb(app_event_info_h event_info, void *user_data); +static void _app_low_memory_cb(app_event_info_h event_info, void *user_data); + +static void _app_destroy_cb(void* this); + + +/** + * @function _app_language_event_cb + * @since_tizen 2.3 + * @description App Language Event Cb + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void _app_language_event_cb(app_event_info_h event_info, void *user_data) +{ + DBG("app_language_event_cb called"); + event_view *this = NULL; + this = (event_view*)user_data; + char *lang; + int ret = app_event_get_language(event_info, &lang); + RETM_IF(ret != APP_ERROR_NONE, "app_event_get_language failed"); + RETM_IF(!lang, "language NULL"); + char text[100]; + snprintf(text, sizeof(text), "Language Changed to:%s", lang); + ui_utils_label_set_text(this->language_label, text, "left"); + free(lang); + DBG("app_language_event_cb called"); +} + + +/** + * @function _app_orientation_event_cb + * @since_tizen 2.3 + * @description App Orientation Event Cb + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void _app_orientation_event_cb(app_event_info_h event_info, void *user_data) +{ + DBG("app_orientation_event_cb called"); + event_view *this = NULL; + this = (event_view*)user_data; + app_device_orientation_e orientation; + int ret = app_event_get_device_orientation(event_info, &orientation); + RETM_IF(ret != APP_ERROR_NONE, "app_event_get_device_orientation failed"); + ui_utils_label_set_text(this->orientation_label, "Orientation Changed", "left"); + DBG("app_orientation_event_cb called"); +} + + +/** + * @function _app_region_event_cb + * @since_tizen 2.3 + * @description App Region Event Cb + * @parameter app_event_info_h: App Event Info H, void*: Void Pointer + * @return static void + */ +static void _app_region_event_cb(app_event_info_h event_info, void *user_data) +{ + DBG("app_region_event_cb called"); + event_view *this = NULL; + this = (event_view*)user_data; + char *region; + int ret = app_event_get_region_format(event_info, ®ion); + RETM_IF(ret != APP_ERROR_NONE, "app_event_get_region_format failed"); + RETM_IF(!region, "region NULL"); + char text[100]; + snprintf(text, sizeof(text), "Region Changed to:%s", region); + free(region); + ui_utils_label_set_text(this->region_label, text, "left"); + DBG("app_region_event_cb called"); + +} + + +/** + * @function event_view_add + * @since_tizen 2.3 + * @description Event View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return event_view* + */ +event_view *event_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + event_view *this = NULL; + this = calloc(1, sizeof(event_view)); + RETVM_IF(!this, NULL, "calloc failed"); + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "event_viewer"; + tbt_info->layout_file = get_edje_path("event_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + bool is_orientation_supported = does_feature_exist("tizen.org/feature/screen.auto_rotation"); + int result = APP_ERROR_NONE; + DBG("ui_app_add_event_handler"); + result = ui_app_add_event_handler(&this->language_handler, APP_EVENT_LANGUAGE_CHANGED, _app_language_event_cb, this); + RETVM_IF(result != APP_ERROR_NONE, false, "service_app_add_event_handler(language_handler) fail > Error = %d", result); + if (is_orientation_supported) + { + result = ui_app_add_event_handler(&this->orientation_handler, APP_EVENT_DEVICE_ORIENTATION_CHANGED, _app_orientation_event_cb, this); + RETVM_IF(result != APP_ERROR_NONE, false, "service_app_add_event_handler(orientation_handler) fail > Error = %d", result); + } + result = ui_app_add_event_handler(&this->region_handler, APP_EVENT_REGION_FORMAT_CHANGED, _app_region_event_cb, this); + RETVM_IF(result != APP_ERROR_NONE, false, "service_app_add_event_handler(region_handler) fail > Error = %d", result); + + this->language_label = ui_utils_label_add(this->view->layout, "Language: "); + ui_utils_label_set_text(this->language_label, "Language: ", "left"); + elm_object_part_content_set(this->view->layout, "language_text", this->language_label); + + if (is_orientation_supported) + { + this->orientation_label = ui_utils_label_add(this->view->layout, "Orientation: "); + ui_utils_label_set_text(this->orientation_label, "Orientation: ", "left"); + elm_object_part_content_set(this->view->layout, "orientation_text", this->orientation_label); + } + + this->region_label = ui_utils_label_add(this->view->layout, "Region: "); + ui_utils_label_set_text(this->region_label, "Region: ", "left"); + elm_object_part_content_set(this->view->layout, "region_text", this->region_label); + + + return this; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + event_view *view = NULL; + view = (event_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + int result = APP_ERROR_NONE; + result = ui_app_remove_event_handler(view->language_handler); + RETM_IF(result != APP_ERROR_NONE, "service_app_remove_event_handler(language_handler) fail > Error = %d", result); + if (does_feature_exist("tizen.org/feature/screen.auto_rotation")) + { + result = ui_app_remove_event_handler(view->orientation_handler); + RETM_IF(result != APP_ERROR_NONE, "service_app_remove_event_handler(orientation_handler) fail > Error = %d", result); + } + result = ui_app_remove_event_handler(view->region_handler); + RETM_IF(result != APP_ERROR_NONE, "service_app_remove_event_handler(region_handler) fail > Error = %d", result); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-feature-view.c b/tbtcoreapp/src/view/tbt-feature-view.c new file mode 100644 index 0000000..a186bc2 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-feature-view.c @@ -0,0 +1,249 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-feature-view.h + * @brief checks required features are available or not + * + * @author A B M Nazibullah(nazib.ullah@samsung.com) + * @date October, 2014 + * @bug NA + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_FEATURE + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-feature-view.h" +#include "view/tbt-common-view.h" + +struct _feature_view +{ + common_view* view; + + Evas_Object *list; +}; + +#define FEATURE_COUNT 62 + +static bool is_feature_exist(char* feature); +static void feature_summary_list_prepare(feature_view *this); +static char* get_system_info_error(system_info_error_e err_code); +static void _app_destroy_cb(void* this); + + +/** + * @function feature_view_add + * @since_tizen 2.3 + * @description Feature View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return feature_view* + */ +feature_view *feature_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + feature_view *this = NULL; + this = calloc(1, sizeof(feature_view)); + RETVM_IF(!this, NULL, "calloc failed"); + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "feature_viewer"; + tbt_info->layout_file = get_edje_path("feature_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->list = elm_list_add(this->view->layout); + RETVM_IF(!this->list, NULL, "elm_list_add failed"); + evas_object_data_set(this->list, "view_data", this); + elm_object_part_content_set(this->view->layout, "feature_view", this->list); + + feature_summary_list_prepare(this); + + return this; +} + + +/** + * @function is_feature_exist + * @since_tizen 2.3 + * @description Is Feature Exist + * @parameter char*: Char Pointer + * @return static bool + */ +static bool is_feature_exist(char* feature) +{ + int err; + bool feature_exist; + err = system_info_get_platform_bool(feature, &feature_exist); + RETVM_IF(err != SYSTEM_INFO_ERROR_NONE, false, "system_info_get_platform_bool fail > Error = %s", get_system_info_error(err)); + return feature_exist; +} + + +/** + * @function feature_summary_list_prepare + * @since_tizen 2.3 + * @description Feature Summary List Prepare + * @parameter feature_view*: Feature View Pointer + * @return static void + */ +static void feature_summary_list_prepare(feature_view *this) +{ + RETM_IF(NULL == this, "view is NULL"); + + char *features[1024] = {"tizen.org/feature/camera", + "tizen.org/feature/camera.back", + "tizen.org/feature/camera.back.flash", + "tizen.org/feature/camera.front", + "tizen.org/feature/camera.front.flash", + "tizen.org/feature/database.encryption", + "tizen.org/feature/fmradio", + "tizen.org/feature/graphics.acceleration", + "tizen.org/feature/input.keyboard", + "tizen.org/feature/input.keyboard.layout", + "tizen.org/feature/location", + "tizen.org/feature/location.gps", + "tizen.org/feature/location.wps", + "tizen.org/feature/microphone", + "tizen.org/feature/multi_point_touch.point_count", + "tizen.org/feature/multi_point_touch.pinch_zoom", + "tizen.org/feature/network.bluetooth", + "tizen.org/feature/network.nfc", + "tizen.org/feature/network.nfc.reserved_push", + "tizen.org/feature/network.push", + "tizen.org/feature/network.secure_element", + "tizen.org/feature/network.telephony", + "tizen.org/feature/network.telephony.mms", + "tizen.org/feature/network.telephony.sms.cbs", + "tizen.org/feature/network.wifi", + "tizen.org/feature/network.wifi.direct", + "tizen.org/feature/opengles.texture_format.3dc", + "tizen.org/feature/opengles.texture_format.atc", + "tizen.org/feature/opengles.texture_format.etc", + "tizen.org/feature/opengles.texture_format.ptc", + "tizen.org/feature/opengles.texture_format.pvrtc", + "tizen.org/feature/opengles.texture_format.utc", + "tizen.org/feature/opengles.version.1_1", + "tizen.org/feature/opengles.version.2_0", + "tizen.org/feature/platform.core.cpu.arch.armv7", + "tizen.org/feature/platform.core.fpu.arch.sse2", + "tizen.org/feature/platform.core.fpu.arch.sse3", + "tizen.org/feature/platform.core.fpu.arch.ssse3", + "tizen.org/feature/platform.core.fpu.arch.vfpv3", + "tizen.org/feature/platform.core.cpu.arch.x86", + "tizen.org/feature/platform.native.osp_compatible", + "tizen.org/feature/screen.auto_rotation", + "tizen.org/feature/sensor.accelerometer", + "tizen.org/feature/sensor.accelerometer.wakeup", + "tizen.org/feature/sensor.gyroscope", + "tizen.org/feature/sensor.gyroscope.wakeup", + "tizen.org/feature/sensor.magnetometer", + "tizen.org/feature/sensor.magnetometer.wakeup", + "tizen.org/feature/sensor.proximity", + "tizen.org/feature/sensor.proximity.wakeup", + "tizen.org/feature/sensor.tiltmeter", + "tizen.org/feature/sensor.tiltmeter.wakeup", + "tizen.org/feature/shell.appwidget", + "tizen.org/feature/sip.voip", + "tizen.org/feature/speech.recognition", + "tizen.org/feature/speech.synthesis", + "tizen.org/feature/usb.accessory", + "tizen.org/feature/usb.host", + "tizen.org/feature/vision.face_recognition", + "tizen.org/feature/vision.image_recognition", + "tizen.org/feature/vision.qrcode_generation", + "tizen.org/feature/vision.qrcode_recognition"}; + + char chResult[1000]; + int i; + for(i = 0; i < FEATURE_COUNT ;i++) + { + if(is_feature_exist(features[i])) + { + snprintf(chResult, sizeof(chResult), "%s%s%s%s", "[ ","TRUE"," ] ", features[i] + 18); + elm_list_item_append(this->list, chResult, NULL, NULL, NULL, NULL); + } + else + { + snprintf(chResult, sizeof(chResult), "%s%s%s%s", "[ ","FALSE"," ] ", features[i] + 18); + elm_list_item_append(this->list, chResult, NULL, NULL, NULL, NULL); + } + } + + evas_object_show(this->list); +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + feature_view *view = NULL; + view = (feature_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +static char* get_system_info_error(system_info_error_e err_code) +{ + char* err_msg; + + switch (err_code) { + case SYSTEM_INFO_ERROR_NONE: + err_msg = "SYSTEM_INFO_ERROR_NONE"; + break; + case SYSTEM_INFO_ERROR_INVALID_PARAMETER: + err_msg = "SYSTEM_INFO_ERROR_INVALID_PARAMETER"; + break; + case SYSTEM_INFO_ERROR_OUT_OF_MEMORY: + err_msg = "SYSTEM_INFO_ERROR_OUT_OF_MEMORY"; + break; + case SYSTEM_INFO_ERROR_IO_ERROR: + err_msg = "SYSTEM_INFO_ERROR_IO_ERROR"; + break; + case SYSTEM_INFO_ERROR_PERMISSION_DENIED: + err_msg = "SYSTEM_INFO_ERROR_PERMISSION_DENIED"; + break; + default: + err_msg = "Unknown Error"; + break; + + } + return err_msg; +} + + + +#endif diff --git a/tbtcoreapp/src/view/tbt-genlist-view.c b/tbtcoreapp/src/view/tbt-genlist-view.c new file mode 100644 index 0000000..b730961 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-genlist-view.c @@ -0,0 +1,920 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-genlist-view.h + * @brief Brief description of file. + * Detailed description of file. + * + * @author kallol Kumar (kallol.kumar@samsung.com) + * @date October, 2014 + * @bug No Known bugs + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ +#include "utils/app_module_config.h" + +#include +#include +#include + +#ifdef TIZEN_2_4 + #include +#endif +#ifdef TIZEN_2_3_1 + #include "efl_extension_events.h" +#endif + +#include "utils/config.h" +#include "utils/logger.h" +#include "utils/ui-utils.h" +#include "model/tbt-list.h" + +#include "view/tbt-camera-view.h" +#include "view/tbt-ui-view.h" +#include "view/tbt-gps-view.h" +#include "view/tbt-input-view.h" +#include "view/tbt-wifi-view.h" +#include "view/tbt-wifidirect-view.h" +#include "view/tbt-bluetooth-view.h" +#include "view/tbt-local-view.h" +#include "view/tbt-image-view.h" +#include "view/tbt-sound-view.h" +#include "view/tbt-sensor-view.h" + +#include "view/tbt-genlist-view.h" +#include "view/tbt-display-view.h" +#include "view/tbt-bluetooth-view.h" +#include "view/tbt-animation-view.h" +#include "view/tbt-feature-view.h" +#include "view/tbt-touch-view.h" +#include "view/tbt-datacontrol-view.h" +#include "view/tbt-graphics-view.h" +#include "view/tbt-pick-view.h" +#include "view/tbt-oauth2-view.h" +#include "view/tbt-push-view.h" +#include "view/tbt-mock-view.h" +#include "view/tbt-efl-callbacks.h" +#include "view/tbt-nfc-view.h" +#include "view/tbt-shortcut-view.h" +#include "view/tbt-event-view.h" +#include "view/tbt-runtimeinfo-view.h" +#include "view/tbt-bluetoothoob-view.h" +#include "view/tbt-ime-view.h" +#include "view/tbt-widget-view.h" +#include "view/tbt-bluetoothle-view.h" + +typedef struct +{ + Evas_Object *navi; + Evas_Object *genlist; + Elm_Object_Item *navi_item; +}genlist_view; +static char* group_index_tag; +typedef struct +{ + int index; + Elm_Object_Item *item; +}item_data; +static Elm_Object_Item *group_item_array[100]; +static int group_item_count = 0; + +static void tbt_genlist_view_fill(genlist_view *view); + +static void _gl_del_cb(void *data, Evas_Object *obj EINA_UNUSED); +static void _gl_expanded_cb(void *data, Evas_Object *obj, void *event_info); +static char *_gl_text_get_cb(void *data, Evas_Object *obj, const char *part); +static Evas_Object *_gl_content_get_cb(void *data, Evas_Object *obj, const char *part); +static void _gl_item_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info); +static void _gl_loaded_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED); +static void _gl_realized_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); +static void _gl_contracted_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); +static void _gl_longpressed_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); +static void _gl_group_selected_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); + + +/** + * @function tbt_genlist_view_create + * @since_tizen 2.3 + * @description Tbt Genlist View Create + * @parameter Evas_Object*: Evas Object Pointer + * @return Evas_Object* + */ +Evas_Object *tbt_genlist_view_create(Evas_Object *navi) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + genlist_view *view = NULL; + view = calloc(1, sizeof(genlist_view)); + RETVM_IF(!view, NULL, "calloc failed"); + + #ifdef DEVICE_TYPE_MOBILE + group_index_tag = "group_index"; + #else + group_index_tag = "groupindex"; + #endif + + view->navi = navi; + view->genlist = elm_genlist_add(view->navi); + if(!view->genlist) + { + SAFE_DELETE(view); + return NULL; + } + + tbt_list_init(); + tbt_genlist_view_fill(view); + + view->navi_item = elm_naviframe_item_push(view->navi, "TBT", NULL, NULL, view->genlist, NULL); + + return view->genlist; +} + + +/** + * @function tbt_genlist_view_fill + * @since_tizen 2.3 + * @description Tbt Genlist View Fill + * @parameter genlist_view*: Genlist View Pointer + * @return static void + */ +static void tbt_genlist_view_fill(genlist_view *view) +{ + int index; + group_item_count = 0; + unsigned count = 0; + const tbt_info *end; + tbt_info *item; + Elm_Object_Item *git; + + item = (tbt_info*)tbt_list_get(&count); + RETM_IF(!item, "item is NULL"); + end = item + count; + + //Create item class + Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new(); + Elm_Genlist_Item_Class *gitc = elm_genlist_item_class_new(); + + gitc->item_style = group_index_tag; + gitc->func.text_get = _gl_text_get_cb; + gitc->func.content_get = _gl_content_get_cb; + gitc->func.del = _gl_del_cb; + + itc->item_style = "default"; + itc->func.text_get = _gl_text_get_cb; + itc->func.content_get = _gl_content_get_cb; + itc->func.del = _gl_del_cb; + + elm_scroller_single_direction_set(view->genlist, ELM_SCROLLER_SINGLE_DIRECTION_HARD); + + //HOMOGENEOUS MODE + //If item height is same when each style name is same, Use homogeneous mode. + elm_genlist_homogeneous_set(view->genlist, EINA_TRUE); + + //COMPRESS MODE + //For the Mobile view, because it has full window, compresse mode should be used. + elm_genlist_mode_set(view->genlist, ELM_LIST_COMPRESS); + + //Add Smart Callback + evas_object_smart_callback_add(view->genlist, "realized", _gl_realized_cb, NULL); + evas_object_smart_callback_add(view->genlist, "loaded", _gl_loaded_cb, NULL); + evas_object_smart_callback_add(view->genlist, "longpressed", _gl_longpressed_cb, NULL); + evas_object_smart_callback_add(view->genlist, "expanded", _gl_expanded_cb, view); + evas_object_smart_callback_add(view->genlist, "contracted", _gl_contracted_cb, NULL); + + + char parent[MAX_LENGTH] = {'\0'}; + char groupIcon[128]; + + index = count -1; + item = (tbt_info*)(end -1);//last valide item of the list + + while(index >= 0) + { + /// + /// lets available features and set tbt_info + /// + // FEATURE + bool features_exists=true; + int feature_count=item->required_features_count; + while(features_exists && feature_count-->0) + { + features_exists = does_feature_exist(feature_list[item->features_required[feature_count]]); + } + + if(!features_exists) item->result=TBT_INFO_RESULT_NOT_SUPPORTED; + + if(&parent[0] != NULL && strcmp(parent, item->parent) != 0) + { + item_data *id = NULL; + id = calloc(sizeof(item_data), 1); + RETM_IF(!id, "calloc is NULL"); + id->index = index; + + strncpy(parent, item->parent, sizeof(parent)); + snprintf(groupIcon, sizeof(groupIcon), "%simages/%s",app_get_resource_path(),"g_camera.png"); + git = elm_genlist_item_prepend(view->genlist, //genlist object + gitc, //item class + id, //item class user data + NULL, + ELM_GENLIST_ITEM_TREE, //item type + _gl_group_selected_cb, //select smart callback + id); //smart callback user data + id->item = git; + group_item_array[group_item_count++] = git; + elm_genlist_item_expanded_set(git, EINA_TRUE); + + } + index --; + item --; + } + elm_genlist_item_class_free(gitc); + elm_genlist_item_class_free(itc); + + + //FIXME: this code was working fine in 2.3, it is need for viewing the genlist from top. In 2.4 it causes launch problem + //elm_genlist_item_expanded_set(group_item_array[0], EINA_FALSE); + evas_object_show(view->genlist); + elm_genlist_item_show( elm_genlist_nth_item_get(view->genlist, 0) , ELM_GENLIST_ITEM_SCROLLTO_TOP); +} + + +/** + * @function _gl_text_get_cb + * @since_tizen 2.3 + * @description Gl Text Get Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return static char* + */ +static char *_gl_text_get_cb(void *data, Evas_Object *obj, const char *part) +{ + item_data *id = data; + RETVM_IF(!id, NULL, "item is NULL"); + + char buf[1024]; + const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(id->item); + + const tbt_info *item = NULL; + item = tbt_list_item_get(id->index); + RETVM_IF(!item, NULL, "item is NULL"); + + DBG("ITEM STYLE: %s", itc->item_style); + + if(itc->item_style && !strcmp(itc->item_style, group_index_tag)) + { + /*if(part && !strcmp(part, "elm.text.main"))*/ + if(part && !strcmp(part, "elm.text")) + { + snprintf(buf, 1023, "%s", item->parent); + return strdup(buf); + } + } + else if(itc->item_style && !strcmp(itc->item_style, "default")) + { + + if(part && !strcmp(part, "elm.text")) + { + return strdup(item->name); + } + + + } + + return NULL; +} + + +/** + * @function _gl_content_get_cb + * @since_tizen 2.3 + * @description Gl Content Get Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return static Evas_Object* + */ +static Evas_Object *_gl_content_get_cb(void *data, Evas_Object *obj, const char *part) +{ + item_data *id = data; + RETVM_IF(!id, NULL, "item is NULL"); + + const tbt_info *item = NULL; + item = tbt_list_item_get(id->index); + RETVM_IF(!item, NULL, "item is NULL"); + + + Evas_Object *content = NULL; + const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(id->item); + + DBG("hoho PART NAME: %s", part); + if(itc->item_style && + !strcmp(itc->item_style, "default")) + { + DBG("hoho almost I m here!!!"); + if(part && + !strcmp(part, "elm.swallow.icon")) + { + DBG("hoho I m here!!!"); + switch(item->result) + { + case TBT_INFO_RESULT_NOT_TESTED: + content = ui_utils_icon_create_new(obj, "icon/app_not_tested.png"); + break; + case TBT_INFO_RESULT_PASS: + content = ui_utils_icon_create_new(obj, "icon/app_passed.png"); + break; + case TBT_INFO_RESULT_FAIL: + content = ui_utils_icon_create_new(obj, "icon/app_failed.png"); + break; + case TBT_INFO_RESULT_NOT_SUPPORTED: + content = ui_utils_icon_create_new(obj, "icon/app_not_supported.png"); + break; + default: + content = ui_utils_icon_create_new(obj, "icon/app_not_supported.png"); + break; + } + //elm_layout_content_set(content, "elm.swallow.icon", icon); + //This code is needed to make the icon visiable in the wearable targerts + evas_object_size_hint_min_set(content, 50, 50); + evas_object_size_hint_max_set(content, 50, 50); + + } + } + + return content; +} + + +/** + * @function _gl_del_cb + * @since_tizen 2.3 + * @description Gl Del Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer + * @return static void + */ +static void _gl_del_cb(void *data, Evas_Object *obj EINA_UNUSED) +{ + //Unrealized callback can be called after this. + //Accessing item_data_s can be dangerous on unrealized callback. + item_data *id = data; + RETM_IF(!id, "item is NULL"); + SAFE_DELETE(id); +} + + +/** + * @function _gl_loaded_cb + * @since_tizen 2.3 + * @description Gl Loaded Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _gl_loaded_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + +} + + +/** + * @function _gl_realized_cb + * @since_tizen 2.3 + * @description Gl Realized Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _gl_realized_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *it = event_info; + item_data *id = elm_object_item_data_get(it); + RETM_IF(!id, "item is NULL"); +} + + +/** + * @function _gl_longpressed_cb + * @since_tizen 2.3 + * @description Gl Longpressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _gl_longpressed_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *it = event_info; + item_data *id = elm_object_item_data_get(it); + RETM_IF(!id, "item is NULL"); +} + + +/** + * @function _gl_expanded_cb + * @since_tizen 2.3 + * @description Gl Expanded Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _gl_expanded_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(!data, "data is NULL"); + + + genlist_view *view; + view = (genlist_view*)data; + RETM_IF(!view, "view is NULL"); + + Elm_Object_Item *it; + Elm_Object_Item *git = event_info; + item_data *item = elm_object_item_data_get(git); + + int index = 0; + int item_count = 0; + + item_count = tbt_list_item_count(item->index); + + if(item_count < 0) + { + return; + } + DBG("Item Count : %d index : %d",item_count,item->index); + Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new(); + + itc->item_style = "default"; + itc->func.text_get = _gl_text_get_cb; + itc->func.content_get = _gl_content_get_cb; + itc->func.del = _gl_del_cb; + + for(index = item_count; index <= item->index; index++) + { + item_data *id = calloc(sizeof(item_data), 1); + RETM_IF(!id, "calloc failed"); + id->index = index; + + it = elm_genlist_item_append(obj, //genlist object + itc, //item class + id, //item class user data + git, //parent item + ELM_GENLIST_ITEM_NONE, //item type + _gl_item_selected_cb, //select smart callback + view); + + id->item = it; + } + + elm_genlist_item_class_free(itc); +} + + +/** + * @function _gl_contracted_cb + * @since_tizen 2.3 + * @description Gl Contracted Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _gl_contracted_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *it = event_info; + elm_genlist_item_subitems_clear(it); +} + + +/** + * @function _gl_item_selected_cb + * @since_tizen 2.3 + * @description Gl Item Selected Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _gl_item_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + RETM_IF(!data, "data is NULL"); + + + genlist_view *view = NULL; + view = (genlist_view*)data; + RETM_IF(!view, "view is NULL"); + + Elm_Object_Item *it = event_info; + item_data *id = elm_object_item_data_get(it); + RETM_IF(!id, "item is NULL"); + + //Un-highlight item + elm_genlist_item_selected_set(it, EINA_FALSE); + + tbt_info *info = NULL; + info = tbt_list_item_get(id->index); + RETM_IF(!info, "item is NULL"); + + + + /// + /// lets check all features exists or not + /// + + bool features_exists = true; + char *required_feature = NULL; + + int feature_count = info->required_features_count; + + while(features_exists && feature_count-->0) + { + features_exists = does_feature_exist(feature_list[info->features_required[feature_count]]); + required_feature = feature_list[info->features_required[feature_count]]; + } + + + if(!features_exists) + { + // As feature doesn't exists show a friendly popup, and exit + Evas_Object *popup = ui_utils_popup_add(view->navi, "Feature Not Supported"); + char msg[512]; + snprintf(msg, sizeof(msg),"'%s'
requires feature:
'%s'
Which is not supported.",info->name,required_feature); + + elm_object_text_set(popup, msg); + + DBG("__BB Calling popup done. r eturning"); + RETM_IF(true, "'%s' can't start because feature '%s' doesn't supported in this device.",info->name,required_feature); + } + + + + + switch(info->apptype) + { + #ifdef TBT_MODULE_CAMERA + case TBT_APP_CAMERA_CAPTURE: + camera_view_add(view->navi, info, it); + break; + case TBT_APP_CAMERA_RECORD: + camera_view_add(view->navi, info, it); + break; + case TBT_APP_CAMERA_FACE_DETECT: + camera_view_add(view->navi, info, it); + break; + case TBT_APP_CAMERA_HDR_CAPTURE: + camera_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_AUDIO + case TBT_APP_SOUND_AUDIO: + sound_view_add(view->navi, info, it); + break; + case TBT_APP_SOUND_VOLUME: + sound_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_GPS + case TBT_APP_GPS_GPS: + gps_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_BT + case TBT_APP_BT_CLIENT_PAIRED: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_SERVER_PAIRED: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_AUDIO_CONNECT: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_AUDIO_CONNECT_HANDSFREE: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_AUTHORIZATION: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_OPP_CLIENT: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_OPP_SERVER: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_PROFILES: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_SDP: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_SERVER_SOCKET: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_CLIENT_SOCKET: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_HID_CONNECT: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_AVRCP: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_AG: + bluetooth_view_add(view->navi, info, it); + break; + case TBT_APP_BT_HDP: + bluetooth_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_BT_OOB + case TBT_APP_BT_OOB_PERIPHERAL: + bluetoothoob_view_add(view->navi, info, it); + break; + case TBT_APP_BT_OOB_DEVICE: + bluetoothoob_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_BLE + case TBT_APP_BLE_GATT_CLIENT: + bluetoothle_view_add(view->navi, info, it); + break; + #endif + #ifdef TBT_MODULE_WIFI + case TBT_APP_WIFI_WIFI: + wifi_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_WIFIDIRECT + case TBT_APP_WIFIDIRECT: + wifidirect_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_NFC + case TBT_APP_NFC_P2P: + nfc_view_add(view->navi, info, it); + break; + case TBT_APP_NFC_TAG: + nfc_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_DISPLAY + case TBT_APP_DISPLAY_DISPLAY: + display_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_GRAPHICS + case TBT_APP_GRAPHICS_GRAPHICS: + graphics_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_KEYPAD + case TBT_APP_IDEV_NUM_KEYPAD: + input_view_add(view->navi, info, it); + break; + case TBT_APP_IDEV_PH_NUM_KEYPAD: + input_view_add(view->navi, info, it); + break; + case TBT_APP_IDEV_IP_KEYPAD: + input_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_IME + case TBT_APP_IME_ALPHABATIC: + ime_view_add(view->navi, info, it); + break; + case TBT_APP_IME_NUMERIC: + ime_view_add(view->navi, info, it); + break; + case TBT_APP_IME_EVENT: + ime_view_add(view->navi, info, it); + break; + case TBT_APP_IME_CONTEXT_GET: + ime_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_WIDGET + case TBT_APP_WIDGET: + widget_view_add(view->navi, info, it); + break; + + #endif + + #ifdef TBT_MODULE_LOCAL + case TBT_APP_LOCAL_MPEG4: + local_view_add(view->navi, info, it); + break; + case TBT_APP_LOCAL_H263: + local_view_add(view->navi, info, it); + break; + case TBT_APP_LOCAL_H264: + local_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_IMAGEVIEW + case TBT_APP_IMAGEVIEW_JPEG: + image_view_add(view->navi, info, it); + break; + case TBT_APP_IMAGEVIEW_BMP: + image_view_add(view->navi, info, it); + break; + case TBT_APP_IMAGEVIEW_GIF: + image_view_add(view->navi, info, it); + break; + case TBT_APP_IMAGEVIEW_PNG: + image_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_DC + case TBT_APP_DC_INSERT: + datacontrol_view_add(view->navi, info, it); + break; + case TBT_APP_DC_DELETE: + datacontrol_view_add(view->navi, info, it); + break; + case TBT_APP_DC_UPDATE: + datacontrol_view_add(view->navi, info, it); + break; + case TBT_APP_DC_SELECT: + datacontrol_view_add(view->navi, info, it); + break; + case TBT_APP_DC_CURSOR: + datacontrol_view_add(view->navi, info, it); + break; + case TBT_APP_DC_MAP: + datacontrol_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_APP + case TBT_APP_PICK_VIEW_APP: + pick_view_add(view->navi, info, it); + break; + case TBT_APP_PICK_PICK_APP: + pick_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_SENSOR + case TBT_APP_SENSOR_ACCELEROMETER: + sensor_view_add(view->navi, info, it); + break; + + case TBT_APP_SENSOR_GYROSCOPE: + sensor_view_add(view->navi, info, it); + break; + + case TBT_APP_SENSOR_PROXIMITY: + sensor_view_add(view->navi, info, it); + break; + + case TBT_APP_SENSOR_LIGHT: + sensor_view_add(view->navi, info, it); + break; + + case TBT_APP_SENSOR_ULTRA_VIOLET: + sensor_view_add(view->navi, info, it); + break; + + case TBT_APP_SENSOR_MAGNATOMETER: + sensor_view_add(view->navi, info, it); + break; + + case TBT_APP_SENSOR_PRESSURE: + sensor_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_ANIMATION + case TBT_APP_ANIMATION_FADE: + animation_view_add(view->navi, info, it); + break; + case TBT_APP_ANIMATION_POINT: + animation_view_add(view->navi, info, it); + break; + case TBT_APP_ANIMATION_DIMENSION: + animation_view_add(view->navi, info, it); + break; + case TBT_APP_ANIMATION_RECT: + animation_view_add(view->navi, info, it); + break; + case TBT_APP_ANIMATION_ROTATE: + animation_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_UI + case TBT_APP_UI_RESIZE: + ui_view_add(view->navi, info, it); + break; + case TBT_APP_UI_SHAPE: + ui_view_add(view->navi, info, it); + break; + case TBT_APP_UI_ROTATE: + ui_view_add(view->navi, info, it); + break; + case TBT_APP_UI_FONT: + ui_view_add(view->navi, info, it); + break; + case TBT_APP_UI_LINE: + ui_view_add(view->navi, info, it); + break; + case TBT_APP_UI_ALPHA: + ui_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_TOUCH + case TBT_APP_TOUCH_TOUCH: + touch_view_add(view->navi, info, it); + break; + #endif + #ifdef TBT_MODULE_MOCK + case TBT_APP_MOCK: + mock_view_add(view->navi, info, it); + break; + #endif + #ifdef TBT_MODULE_EVENT + case TBT_APP_EVENT_VIEW: + event_view_add(view->navi, info, it); + break; + #endif + #ifdef TBT_MODULE_EFL + case TBT_APP_EFL_CALLBACK: + efl_callbacks_view_add(view->navi, info, it); + break; + #endif + #ifdef TBT_MODULE_SHORTCUT + case TBT_APP_SHORTCUT: + shortcut_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_OAUTH2 + case TBT_APP_OAUTH2: + oauth2_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_PUSH + case TBT_APP_PUSH_SERVICE: + push_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_RUNTIME + case TBT_APP_RUNTIME_INFO: + runtimeinfo_view_add(view->navi, info, it); + break; + #endif + + #ifdef TBT_MODULE_FEATURE + case TBT_APP_FEATURE_SUMMARY: + feature_view_add(view->navi, info, it); + break; + #endif + + + + default: + assert(false); + break; + } +} + + +/** + * @function _gl_group_selected_cb + * @since_tizen 2.3 + * @description Gl Group Selected Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _gl_group_selected_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *it = event_info; + item_data *id = elm_object_item_data_get(it); + DBG("item_data getting "); + RETM_IF(!id, "item is NULL"); + DBG("item_data found "); + //Unhighlight item + elm_genlist_item_selected_set(it, EINA_FALSE); + + Eina_Bool expanded = elm_genlist_item_expanded_get(it); + DBG("Expanded getting%d: ",expanded); + elm_genlist_item_expanded_set(it, !expanded); + + DBG("Expanded found%d: ",expanded); +} diff --git a/tbtcoreapp/src/view/tbt-gps-view.c b/tbtcoreapp/src/view/tbt-gps-view.c new file mode 100644 index 0000000..5fcec6b --- /dev/null +++ b/tbtcoreapp/src/view/tbt-gps-view.c @@ -0,0 +1,205 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-gps-view.c + * @brief covers locationn retrieval + * starts location service using gps method and continuously updates the current location + * + * @author golam kayes(g.kayes@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug location manager does not start in device + * @credit + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_GPS + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-gps-view.h" +#include "view/tbt-common-view.h" + +struct _gps_view +{ + common_view* view; + location_manager_h manager; + + Evas_Object *lat_label; + Evas_Object *lon_label; +}; + +static void _position_updated_cb(double latitude, double longitude, double altitude, time_t timestamp, void *data); +static void _gps_state_changed_cb(location_service_state_e state, void *data); +static void _app_destroy_cb(void* this); + + +/** + * @function gps_view_add + * @since_tizen 2.3 + * @description Gps View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return gps_view* + */ +gps_view *gps_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + gps_view *this = NULL; + this = calloc(1, sizeof(gps_view)); + RETVM_IF(!this, NULL, "calloc failed"); + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "gps_viewer"; + tbt_info->layout_file = get_edje_path("gps_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + int ret = location_manager_create(LOCATIONS_METHOD_GPS, &this->manager); + RETVM_IF(ret != LOCATIONS_ERROR_NONE, NULL, "location_manager_create fail > Error = %d", ret); + + ret = location_manager_set_service_state_changed_cb(this->manager, _gps_state_changed_cb, this); + if(ret != LOCATIONS_ERROR_NONE) + { + location_manager_destroy(this->manager); + ERR("location_manager_set_service_state_changed_cb fail > Error = %d", ret); + return NULL; + } + + ret = location_manager_set_position_updated_cb(this->manager, _position_updated_cb, 1, this); + if(ret != LOCATIONS_ERROR_NONE) + { + location_manager_unset_service_state_changed_cb( this->manager); + location_manager_destroy(this->manager); + ERR("location_manager_set_position_updated_cb fail > Error = %d", ret); + return NULL; + } + + ret = location_manager_start(this->manager); + if(ret != LOCATIONS_ERROR_NONE) + { + location_manager_unset_service_state_changed_cb( this->manager); + location_manager_unset_position_updated_cb( this->manager); + location_manager_destroy(this->manager); + ERR("location_manager_start fail > Error = %d", ret); + } + + this->lat_label = ui_utils_label_add(this->view->layout, "Latitude: "); + this->lon_label = ui_utils_label_add(this->view->layout, "Longitude: "); + + ui_utils_label_set_text(this->lat_label, "Latitude: ", "left"); + ui_utils_label_set_text(this->lon_label, "Longitude: ", "left"); + + elm_object_part_content_set(this->view->layout, "lat_text", this->lat_label); + elm_object_part_content_set(this->view->layout, "lon_text", this->lon_label); + + return this; +} + +static void _position_updated_cb(double latitude, double longitude, double altitude, time_t timestamp, void *data){ + + gps_view *this = NULL; + this = (gps_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + char buf[MAX_LENGTH] = {'\0'}; + snprintf(buf, MAX_LENGTH, "Latitude: %f", latitude); + ui_utils_label_set_text(this->lat_label, buf, "left"); + snprintf(buf, MAX_LENGTH, "Longitude: %f", longitude); + ui_utils_label_set_text(this->lon_label, buf, "left"); +} + + +/** + * @function _gps_state_changed_cb + * @since_tizen 2.3 + * @description Gps State Changed Cb + * @parameter location_service_state_e: Location Service State E, void*: Void Pointer + * @return static void + */ +static void _gps_state_changed_cb(location_service_state_e state, void *data) +{ + gps_view *this = NULL; + this = (gps_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + int err; + double dbLatitute, dbAltitute,dbLongitude,dbDirection,dbSpeed,dbClimb,dbHorizontal,dbVertical; + time_t timestamp; + location_accuracy_level_e level; + err = location_manager_get_location(this->manager,&dbAltitute,&dbLatitute,&dbLongitude,&dbClimb,&dbDirection,&dbSpeed,&level,&dbHorizontal,&dbVertical,×tamp); + RETM_IF(err != LOCATIONS_ERROR_NONE, "location_manager_get_location fail > Error = %d", err); + + char buf[MAX_LENGTH] = {'\0'}; + snprintf(buf, MAX_LENGTH, "Latitude: %f", dbLatitute); + ui_utils_label_set_text(this->lat_label, buf, "left"); + snprintf(buf, MAX_LENGTH, "Longitude: %f", dbLongitude); + ui_utils_label_set_text(this->lon_label, buf, "left"); +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + location_error_e err; + RETM_IF(NULL == this, "data is NULL"); + + gps_view *view = NULL; + view = (gps_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + err = location_manager_unset_service_state_changed_cb(view->manager); + if(err != LOCATIONS_ERROR_NONE) + { + DBG( "location_manager_unset_service_state_changed_cb fail > Error = %d", err); + } + + location_manager_unset_position_updated_cb(view->manager); + if(err != LOCATIONS_ERROR_NONE) + { + DBG( "location_manager_unset_position_updated_cb fail > Error = %d", err); + } + + err = location_manager_stop(view->manager); + if(err != LOCATIONS_ERROR_NONE) + { + DBG( "location_manager_stop fail > Error = %d", err); + } + + err= location_manager_destroy(view->manager); + if(err != LOCATIONS_ERROR_NONE) + { + DBG( "location_manager_destroy fail > Error = %d", err); + } + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-graphics-view.c b/tbtcoreapp/src/view/tbt-graphics-view.c new file mode 100644 index 0000000..8999677 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-graphics-view.c @@ -0,0 +1,410 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-graphics-view.c + * @brief covers graphics rendring + * initializes the graphics rendering using opengl + * + * @author golam kayes(g.kayes@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug no known bug + * @credit + * + */ +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_GRAPHICS + +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "utils/gl-utils.h" +#include "view/tbt-graphics-view.h" +#include "view/tbt-common-view.h" + +struct _graphics_view +{ + common_view* view; + + Evas_Object *gl_label; + Evas_Object *gl_layout; + + Ecore_Timer *animation_timer; + + color_shader shader; + GLboolean shader_ok; + GLboolean resize_ok; + GLfloat angle; +}; + +#define GLVIEW_VIEW_DATA_NAME "view_data" + +#define VIEW_BG_COLOR 0.0f, 0.0f, 0.0f, 1.0f + +#define ANIMATION_TIMER_INTERVAL_SEC 0.010f + +#define PERSPECTIVE_FOV_DEG 40.0f +#define PERSPECTIVE_NEAR 1.0f +#define PERSPECTIVE_FAR 20.0f + +static const gl_vector3 CUBE_XYZ_POSITION = {{0.0f, 0.0f, -2.5f}}; +static const gl_vector3 CUBE_ROTATE_VECTOR = {{1.0f, 0.0f, 1.0f}}; +#define CUBE_ROTATE_START_ANGLE_DEG -45.0f +#define CUBE_ROTATE_STEP_ANGLE_DEG -5.0f + +#define CIRCLE_FULL_DEG 360.0f + +static const color_vertex3d CUBE_VERTEXES[] = +{ + {{{-0.5f, -0.5f, -0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + {{{-0.5f, -0.5f, 0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, -0.5f, 0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + {{{ 0.5f, -0.5f, -0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + + {{{-0.5f, 0.5f, -0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + {{{-0.5f, 0.5f, 0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + {{{ 0.5f, 0.5f, 0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, 0.5f, -0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + + {{{-0.5f, -0.5f, -0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + {{{-0.5f, 0.5f, -0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, 0.5f, -0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, -0.5f, -0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + + {{{-0.5f, -0.5f, 0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + {{{-0.5f, 0.5f, 0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, 0.5f, 0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + {{{ 0.5f, -0.5f, 0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + + {{{-0.5f, -0.5f, -0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + {{{-0.5f, -0.5f, 0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + {{{-0.5f, 0.5f, 0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + {{{-0.5f, 0.5f, -0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + + {{{ 0.5f, -0.5f, -0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + {{{ 0.5f, -0.5f, 0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, 0.5f, 0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, 0.5f, -0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}} +}; + +static const GLshort CUBE_INDICES[] = +{ + 0, 2, 1, + 0, 3, 2, + 4, 5, 6, + 4, 6, 7, + 8, 9, 10, + 8, 10, 11, + 12, 15, 14, + 12, 14, 13, + 16, 17, 18, + 16, 18, 19, + 20, 23, 22, + 20, 22, 21 +}; + +static const color_object3d CUBE_OBJECT3D = +{ + CUBE_VERTEXES, CUBE_INDICES, + sizeof(CUBE_INDICES) / sizeof(CUBE_INDICES[0]) +}; + +static void gles_cube_view_del(graphics_view *this); +static Evas_Object *gles_cube_view_init(graphics_view *this); + + +static void _app_destroy_cb(void* this); +static Eina_Bool _gles_cube_view_timer_cb(void *data); +static void _gles_cube_view_glview_init_cb(Evas_Object *obj); +static void _gles_cube_view_glview_del_cb(Evas_Object *obj); +static void _gles_cube_view_glview_resize_cb(Evas_Object *obj); +static void _gles_cube_view_glview_render_cb(Evas_Object *obj); +static void _gles_cube_view_layout_free_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); + + +/** + * @function graphics_view_add + * @since_tizen 2.3 + * @description Graphics View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return graphics_view* + */ +graphics_view *graphics_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + graphics_view *this = NULL; + this = calloc(1, sizeof(graphics_view)); + RETVM_IF(!this, NULL, "calloc failed"); + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "graphics_viewer"; + tbt_info->layout_file = get_edje_path("graphics_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->gl_layout = gles_cube_view_init(this); + if(this->gl_layout == NULL) + { + gles_cube_view_del(this); + return NULL; + } + + elm_object_part_content_set(this->view->layout, "graphics_view", this->gl_layout); + + return this; +} + + +/** + * @function gles_cube_view_init + * @since_tizen 2.3 + * @description Gles Cube View Init + * @parameter graphics_view*: Graphics View Pointer + * @return static Evas_Object* + */ +static Evas_Object *gles_cube_view_init(graphics_view *this) +{ + RETVM_IF(!this, NULL, "this is NULL"); + + this->angle = CUBE_ROTATE_START_ANGLE_DEG; + + Evas_Object *layout = elm_glview_add(this->view->navi); + RETVM_IF(!layout, NULL, "Failed to create elm_glview") + + evas_object_data_set(layout, GLVIEW_VIEW_DATA_NAME, this); + evas_object_event_callback_add(layout, EVAS_CALLBACK_FREE, _gles_cube_view_layout_free_cb, this); + + elm_glview_mode_set(layout, ELM_GLVIEW_DEPTH); + elm_glview_init_func_set(layout, _gles_cube_view_glview_init_cb); + elm_glview_del_func_set(layout, _gles_cube_view_glview_del_cb); + elm_glview_resize_func_set(layout, _gles_cube_view_glview_resize_cb); + elm_glview_render_func_set(layout, _gles_cube_view_glview_render_cb); + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(layout); + + this->animation_timer = ecore_timer_add(ANIMATION_TIMER_INTERVAL_SEC, _gles_cube_view_timer_cb, this); + + return layout; +} + + +/** + * @function _gles_cube_view_glview_init_cb + * @since_tizen 2.3 + * @description Gles Cube View Glview Init Cb + * @parameter Evas_Object*: Evas Object Pointer + * @return static void + */ +static void _gles_cube_view_glview_init_cb(Evas_Object *obj) +{ + graphics_view *view = evas_object_data_get(obj, GLVIEW_VIEW_DATA_NAME); + RETM_IF(!view, "View data is NULL"); + Evas_GL_API *api = elm_glview_gl_api_get(obj); + RETM_IF(!api, "GL API is NULL"); + + view->shader_ok = color_shader_init(&view->shader, api); + RETM_IF(!view->shader_ok, "Shader initialisation failed"); + + api->glClearColor(VIEW_BG_COLOR); + api->glEnable(GL_DEPTH_TEST); +} + + +/** + * @function _gles_cube_view_glview_del_cb + * @since_tizen 2.3 + * @description Gles Cube View Glview Del Cb + * @parameter Evas_Object*: Evas Object Pointer + * @return static void + */ +static void _gles_cube_view_glview_del_cb(Evas_Object *obj) +{ + graphics_view *view = evas_object_data_get(obj, GLVIEW_VIEW_DATA_NAME); + RETM_IF(!view, "View data is NULL"); + Evas_GL_API *api = elm_glview_gl_api_get(obj); + RETM_IF(!api, "GL API is NULL"); + + color_shader_finalize(&view->shader, api); +} + + +/** + * @function _gles_cube_view_glview_resize_cb + * @since_tizen 2.3 + * @description Gles Cube View Glview Resize Cb + * @parameter Evas_Object*: Evas Object Pointer + * @return static void + */ +static void _gles_cube_view_glview_resize_cb(Evas_Object *obj) +{ + DBG("_gles_cube_view_glview_resize_cb"); + + graphics_view *view = evas_object_data_get(obj, GLVIEW_VIEW_DATA_NAME); + RETM_IF(!view, "View data is NULL"); + RETM_IF(!view->shader_ok, "Shader is not initialised"); + Evas_GL_API *api = elm_glview_gl_api_get(obj); + RETM_IF(!api, "GL API is NULL"); + + Evas_Coord width = 0, height = 0; + elm_glview_size_get(obj, &width, &height); + RETM_IF((width == 0) || (height == 0), "Zero size."); + + api->glViewport(0, 0, width, height); + + gl_matrix4 matrix; + gl_matrix4_load_perspective(&matrix, PERSPECTIVE_FOV_DEG, + (GLfloat)width / (GLfloat)height, + PERSPECTIVE_NEAR, PERSPECTIVE_FAR); + + color_shader_activate(&view->shader, api); + color_shader_load_p(&view->shader, api, &matrix); + color_shader_deactivate(&view->shader, api); + + view->resize_ok = GL_TRUE; +} + + +/** + * @function _gles_cube_view_glview_render_cb + * @since_tizen 2.3 + * @description Gles Cube View Glview Render Cb + * @parameter Evas_Object*: Evas Object Pointer + * @return static void + */ +static void _gles_cube_view_glview_render_cb(Evas_Object *obj) +{ + graphics_view *view = evas_object_data_get(obj, GLVIEW_VIEW_DATA_NAME); + RETM_IF(!view, "View data is NULL"); + RETM_IF(!view->resize_ok, "Viewport is not ready"); + Evas_GL_API *api = elm_glview_gl_api_get(obj); + RETM_IF(!api, "GL API is NULL"); + + gl_matrix4 matrix; + gl_matrix4_load_identity(&matrix); + gl_matrix4_translate(&matrix, CUBE_XYZ_POSITION); + gl_matrix4_rotate(&matrix, view->angle, CUBE_ROTATE_VECTOR); + + api->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + color_shader_activate(&view->shader, api); + color_shader_load_mv(&view->shader, api, &matrix); + color_object3d_draw(&CUBE_OBJECT3D, api); + color_shader_deactivate(&view->shader, api); +} + + +/** + * @function gles_cube_view_del + * @since_tizen 2.3 + * @description Gles Cube View Del + * @parameter graphics_view*: Graphics View Pointer + * @return static void + */ +static void gles_cube_view_del(graphics_view *this) +{ + if(this->animation_timer) + { + ecore_timer_del(this->animation_timer); + } +} + + +/** + * @function _gles_cube_view_timer_cb + * @since_tizen 2.3 + * @description Gles Cube View Timer Cb + * @parameter void*: Void Pointer + * @return static Eina_Bool + */ +static Eina_Bool _gles_cube_view_timer_cb(void *data) +{ + RETVM_IF(!data, EINA_TRUE, "data is NULL"); + + graphics_view *this = NULL; + this = (graphics_view*)data; + RETVM_IF(NULL == this, false, "view is NULL"); + + + this->angle += CUBE_ROTATE_STEP_ANGLE_DEG; + if (this->angle < 0.0f) + { + while (this->angle <= -CIRCLE_FULL_DEG) + { + this->angle += CIRCLE_FULL_DEG; + } + } + else + { + while (this->angle >= CIRCLE_FULL_DEG) + { + this->angle -= CIRCLE_FULL_DEG; + } + } + + elm_glview_changed_set(this->gl_layout); + + return EINA_TRUE; +} + + +/** + * @function _gles_cube_view_layout_free_cb + * @since_tizen 2.3 + * @description Gles Cube View Layout Free Cb + * @parameter void*: Void Pointer, Evas*: Evas Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _gles_cube_view_layout_free_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + RETM_IF(!data, "data is NULL"); + + graphics_view *this = NULL; + this = (graphics_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + this->gl_layout = NULL; // NULL the layout so we do not delete it twice in _gles_cube_view_del() + gles_cube_view_del(this); // Delete self when layout is deleted by parent object +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + graphics_view *view = NULL; + view = (graphics_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + gles_cube_view_del(view); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-image-view.c b/tbtcoreapp/src/view/tbt-image-view.c new file mode 100644 index 0000000..60d2e5c --- /dev/null +++ b/tbtcoreapp/src/view/tbt-image-view.c @@ -0,0 +1,119 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-image-view.c + * @brief shows image using elm APIs + * image of various format are shown of screen using elm at one portion of the screen + * + * @author golam kayes(g.kayes@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug no known bug + * @credit + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_IMAGEVIEW + +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-image-view.h" +#include "view/tbt-common-view.h" + + +struct _image_view +{ + common_view* view; + Evas_Object *image; +}; + +static void _app_destroy_cb(void* this); + + +/** + * @function image_view_add + * @since_tizen 2.3 + * @description Image View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return image_view* + */ +image_view *image_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + int x,y,w,h; + evas_object_geometry_get(navi, &x, &y, &w, &h); + DBG("Dim: %d %d %d %d", x, y, w, h); + + image_view *this = NULL; + this = calloc(1, sizeof(image_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "image_viewer"; + tbt_info->layout_file = get_edje_path("image_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + const char *file_path; + file_path = get_resource_path(this->view->tbt_info->file_name); + this->image = ui_utils_create_image(this->view->layout, file_path); + + //int x,y,w,h; + evas_object_geometry_get(this->image, &x, &y, &w, &h); + DBG("Dim: %d %d %d %d", x, y, w, h); + + RETVM_IF(NULL == this->image, false, "create of layout elements failed"); + + if(EINA_TRUE == elm_image_animated_available_get(this->image)) + { + elm_image_animated_set(this->image, EINA_TRUE); + elm_image_animated_play_set(this->image, EINA_TRUE); + } + + elm_object_part_content_set(this->view->layout, "image_view", this->image); + + return this; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + image_view *view = NULL; + view = (image_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-ime-view.c b/tbtcoreapp/src/view/tbt-ime-view.c new file mode 100644 index 0000000..23a3903 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-ime-view.c @@ -0,0 +1,195 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-ime-view.c + * @brief Checks the custom ime is working or not. + * @author Golam kayas (g.kayes) + * @date JUNE, 2015 + * @bug no known bug + * @credit + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_IME + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-ime-view.h" +#include "view/tbt-common-view.h" +#include "inputmethod.h" + +struct _ime_view +{ + common_view* view; + Evas_Object *ime_entry1; + Evas_Object *ime_entry2; + Evas_Object *ime_event_lang_set; + Evas_Object *ime_event_lang_get; + Evas_Object *ime_event_return_key; + Evas_Object *ime_label; +}; + +static void _app_destroy_cb(void* this); +static void _lang_set_button_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void _lang_get_button_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void _return_key_button_clicked_cb(void *data, Evas_Object *obj, void *event_info); + + +/** + * @function ime_view_add + * @since_tizen 2.3 + * @description Ime View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return ime_view* + */ +ime_view *ime_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + DBG("Inside ime_view_add"); + + ime_view *this = NULL; + this = calloc(1, sizeof(ime_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "ime_viewer"; + tbt_info->layout_file = get_edje_path("ime_viewer.edj"); + + + DBG("EDJ added."); + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + + if(this->view->tbt_info->apptype == TBT_APP_IME_ALPHABATIC) + { + this->ime_entry1 = ui_utils_entry_add(this, this->view->layout, ELM_INPUT_PANEL_LAYOUT_NORMAL, ""); + elm_entry_input_panel_language_set(this->ime_entry1, ELM_INPUT_PANEL_LANG_AUTOMATIC); + Elm_Input_Panel_Lang lang = elm_entry_input_panel_language_get(this->ime_entry1); + char msg[100]; + sprintf(msg, "Language : %d", lang ); + elm_object_part_text_set(this->ime_entry1, PART_ENTRY_GUIDE, msg); + + elm_object_part_content_set(this->view->layout, "input_text", this->ime_entry1); + + } + else if(this->view->tbt_info->apptype == TBT_APP_IME_NUMERIC) + { + this->ime_entry1 = ui_utils_entry_add(this, this->view->layout, ELM_INPUT_PANEL_LAYOUT_NUMBER, ""); + elm_entry_input_panel_language_set(this->ime_entry1, ELM_INPUT_PANEL_LANG_AUTOMATIC); + elm_object_part_text_set(this->ime_entry1, PART_ENTRY_GUIDE, "Input Number"); + elm_object_part_content_set(this->view->layout, "input_text", this->ime_entry1); + } + else if(this->view->tbt_info->apptype == TBT_APP_IME_EVENT) + { + this->ime_entry1 = ui_utils_entry_add(this, this->view->layout, ELM_INPUT_PANEL_LAYOUT_IP, ""); + elm_object_part_text_set(this->ime_entry1, PART_ENTRY_GUIDE, "Do event."); + elm_object_part_content_set(this->view->layout, "input_text", this->ime_entry1); + } + else if(this->view->tbt_info->apptype == TBT_APP_IME_CONTEXT_GET) + { + this->ime_entry1 = ui_utils_entry_add(this, this->view->layout, ELM_INPUT_PANEL_LAYOUT_HEX, ""); + elm_object_part_text_set(this->ime_entry1, PART_ENTRY_GUIDE, "See Context Variables."); + elm_object_part_content_set(this->view->layout, "input_text", this->ime_entry1); + } + + Elm_Input_Panel_Layout l; + l = elm_entry_input_panel_layout_get(this->ime_entry1); + + + return this; +} + + +/** + * @function _lang_set_button_clicked_cb + * @since_tizen 2.3 + * @description Lang Set Button Clicked Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _lang_set_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + + ime_view *this = NULL; + this = (ime_view*)data; + DBG("Inside language set."); + elm_entry_input_panel_language_set(this->ime_entry1, ELM_INPUT_PANEL_LANG_ALPHABET); +} + + +/** + * @function _lang_get_button_clicked_cb + * @since_tizen 2.3 + * @description Lang Get Button Clicked Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _lang_get_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + + ime_view *this = NULL; + this = (ime_view*)data; + Elm_Input_Panel_Lang lang = elm_entry_input_panel_language_get(this->ime_entry1); + DBG("Language found : %d", lang); +} + + +/** + * @function _return_key_button_clicked_cb + * @since_tizen 2.3 + * @description Return Key Button Clicked Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _return_key_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + + ime_view *this = NULL; + this = (ime_view*)data; + elm_entry_input_panel_return_key_type_set(this->ime_entry1, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DEFAULT); + DBG("Inside _return_key_button_clicked_cb_return_key_button_clicked_cb"); +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + ime_view *view = NULL; + view = (ime_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-input-view.c b/tbtcoreapp/src/view/tbt-input-view.c new file mode 100644 index 0000000..80360dd --- /dev/null +++ b/tbtcoreapp/src/view/tbt-input-view.c @@ -0,0 +1,118 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-input-view.h + * @brief Checks the input field is working or not. + * @author A B M Nazibullah (nazib.ullah@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug no known bug + * @credit + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_KEYPAD + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-input-view.h" +#include "view/tbt-common-view.h" + +struct _input_view +{ + common_view* view; + Evas_Object *input_text; + Evas_Object *input_label; +}; + +static void _app_destroy_cb(void* this); + + +/** + * @function input_view_add + * @since_tizen 2.3 + * @description Input View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return input_view* + */ +input_view *input_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + input_view *this = NULL; + this = calloc(1, sizeof(input_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "input_viewer"; + tbt_info->layout_file = get_edje_path("input_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + if(this->view->tbt_info->apptype == TBT_APP_IDEV_NUM_KEYPAD) + { + this->input_text = ui_utils_entry_add(this, this->view->layout, ELM_INPUT_PANEL_LAYOUT_NUMBER, ""); + elm_object_part_text_set(this->input_text, PART_ENTRY_GUIDE, "Enter Number:"); + } + else if(this->view->tbt_info->apptype == TBT_APP_IDEV_PH_NUM_KEYPAD) + { + this->input_text = ui_utils_entry_add(this, this->view->layout, ELM_INPUT_PANEL_LAYOUT_PHONENUMBER, ""); + elm_object_part_text_set(this->input_text, PART_ENTRY_GUIDE, "Enter Phone Number:"); + } + else if(this->view->tbt_info->apptype == TBT_APP_IDEV_IP_KEYPAD) + { + this->input_text = ui_utils_entry_add(this, this->view->layout, ELM_INPUT_PANEL_LAYOUT_IP , ""); + elm_object_part_text_set(this->input_text, PART_ENTRY_GUIDE, "Enter IP:"); + } + + + elm_object_part_content_set(this->view->layout, "input_text", this->input_text); + + Elm_Input_Panel_Layout l; + l = elm_entry_input_panel_layout_get(this->input_text); + RETVM_IF(ELM_INPUT_PANEL_LAYOUT_INVALID == l, NULL, "elm_entry_input_panel_layout_get failed"); + + return this; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + input_view *view = NULL; + view = (input_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-list-view.c b/tbtcoreapp/src/view/tbt-list-view.c new file mode 100644 index 0000000..5cc5149 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-list-view.c @@ -0,0 +1,152 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-list-view.h + * @brief creates the main genlist + * @author amlan.c@samsung.com + * @date October, 2014 + * @bug no known bug + * @credit + * + */ +#include +#include +#include + +#include "utils/logger.h" +#include "model/tbt-list.h" +#include "view/tbt-list-view.h" +#include "view/tbt-image-view.h" +#include "view/tbt-sensor-view.h" + + +typedef struct +{ + Evas_Object *list; + Evas_Object *navi; + Elm_Object_Item *navi_item; + +}list_view; + + +static void tbt_list_view_fill(list_view *view); +static void _list_view_sel_cb(void *data, Evas_Object *obj, void *event_info); +static void _list_view_destroy_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); + + +/** + * @function tbt_list_view_create + * @since_tizen 2.3 + * @description Tbt List View Create + * @parameter Evas_Object*: Evas Object Pointer + * @return Evas_Object* + */ +Evas_Object *tbt_list_view_create(Evas_Object *navi) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + list_view *view = NULL; + view = calloc(1, sizeof(list_view)); + RETVM_IF(!view, NULL, "calloc failed"); + + view->navi = navi; + view->list = elm_list_add(view->navi); + if(!view->list) + { + ERR("elm_list_add failed"); + SAFE_DELETE(view); + return NULL; + } + + tbt_list_init(); + tbt_list_view_fill(view); + + evas_object_data_set(view->list, "view_data", view); + evas_object_event_callback_add(view->list, EVAS_CALLBACK_FREE, _list_view_destroy_cb, view); + + view->navi_item = elm_naviframe_item_push(view->navi, "TBT", NULL, NULL, view->list, NULL); + RETVM_IF(!view->navi_item, NULL, "elm_naviframe_item_push failed"); + return view->list; +} + + +/** + * @function tbt_list_view_fill + * @since_tizen 2.3 + * @description Tbt List View Fill + * @parameter list_view*: List View Pointer + * @return static void + */ +static void tbt_list_view_fill(list_view *view) +{ + unsigned count = 0; + const tbt_info *end; + const tbt_info *item; + + item = tbt_list_get(&count); + end = item + count; + + RETM_IF(!item, "item is NULL"); + + for(; item != end; ++item) + { + if(item->apptype == TBT_APP_CAMERA_CAPTURE || + item->apptype == TBT_APP_IMAGEVIEW_JPEG) + { + elm_list_item_append(view->list, item->name, NULL, NULL, _list_view_sel_cb, item); + } + else if(item->apptype == TBT_APP_SENSOR_ACCELEROMETER) + { + bool is_supported = true; + sensor_is_supported(item->sensortype, &is_supported); + + if(is_supported) + { + elm_list_item_append(view->list, item->name, NULL, NULL, _list_view_sel_cb, item); + } + } + } +} + + +/** + * @function _list_view_sel_cb + * @since_tizen 2.3 + * @description List View Sel Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _list_view_sel_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(!data, "data is NULL"); + + + elm_list_item_selected_set(event_info, EINA_FALSE); + +} + + +/** + * @function _list_view_destroy_cb + * @since_tizen 2.3 + * @description List View Destroy Cb + * @parameter void*: Void Pointer, Evas*: Evas Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _list_view_destroy_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + SAFE_DELETE(data); +} diff --git a/tbtcoreapp/src/view/tbt-local-view.c b/tbtcoreapp/src/view/tbt-local-view.c new file mode 100644 index 0000000..7645ffe --- /dev/null +++ b/tbtcoreapp/src/view/tbt-local-view.c @@ -0,0 +1,606 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-local-view.c + * @brief This view provide the Apps tested the video playing capability of the device. + * + * @author Golam Kayas (g.kayes@samsung.com) + * @date October, 2014 + * @bug No known bug. + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_LOCAL + +#include +#include + + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-local-view.h" +#include "view/tbt-common-view.h" + +#ifdef DEVICE_TYPE_MOBILE + #include +#endif + +struct _local_view +{ + common_view* view; + + bool play; + player_h player; + Evas_Object *video_rect; + + Evas_Object *play_btn; + Evas_Object *stop_btn; + Evas_Object *pause_btn; +}; + + + +static void start_player(local_view *this); +static void stop_player(local_view *this); +static void pause_player(local_view *this); + + +static void destroy_player(local_view *this); +static player_h create_player(local_view *this); + +static void update_view_controls(local_view *this); + +static Evas_Object *add_control_layout(local_view *this, Evas_Object *parent); +static void disable_control_button(local_view *this, bool play, bool pause, bool stop); +static char* get_local_view_error(player_error_e error_state); + +static void _app_destroy_cb(void* this); +static void _start_player_cb(void *data, Evas_Object *obj, void *event_info); +static void _stop_player_cb(void *data, Evas_Object *obj, void *event_info); +static void _pause_player_cb(void *data, Evas_Object *obj, void *event_info); +static void _on_app_pause_resume_cb(bool resume); +static bool was_playing; +static local_view *view; + + +/** + * @function get_system_error + * @since_tizen 2.3 + * @description Get System Error + * @parameter int: Int + * @return static char* + */ +static char* get_system_error(int ret) +{ + char* error; + +switch (ret) +{ + case SYSTEM_INFO_ERROR_NONE: + error = "SYSTEM_INFO_ERROR_NONE "; + break; + case SYSTEM_INFO_ERROR_INVALID_PARAMETER: + error = "SYSTEM_INFO_ERROR_INVALID_PARAMETER"; + break; + case SYSTEM_INFO_ERROR_OUT_OF_MEMORY: + error = "SYSTEM_INFO_ERROR_OUT_OF_MEMORY "; + break; + case SYSTEM_INFO_ERROR_IO_ERROR: + error = "SYSTEM_INFO_ERROR_IO_ERROR "; + break; + case SYSTEM_INFO_ERROR_PERMISSION_DENIED: + error = "SYSTEM_INFO_ERROR_PERMISSION_DENIED"; + break; + default: + error = "Unknown error"; + } + return error; +} + + +/** + * @function _on_app_pause_resume_cb + * @since_tizen 2.3 + * @description On App Pause Resume Cb + * @parameter bool: Bool + * @return static void + */ +static void _on_app_pause_resume_cb(bool resume ) +{ + int ret; + if(resume) + { + DBG("Inside Resume"); + if(was_playing) + { + start_player(view); + DBG("Player started again"); + } + } + else + { + DBG("Inside Pause"); + player_state_e state; + ret = player_get_state ( view->player, &state); + RETM_IF(PLAYER_ERROR_NONE!=ret, "player_get_state failed %s", get_local_view_error(ret)); + if(state == PLAYER_STATE_PLAYING) + { + was_playing = true; + pause_player(view); + DBG("Player paused"); + } + } + +} + + +/** + * @function local_view_add + * @since_tizen 2.3 + * @description Local View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return local_view* + */ +local_view *local_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + local_view *this = NULL; + + _tbt_pause_resume_cb = _on_app_pause_resume_cb; + _tbt_app_terminate_cb = _app_destroy_cb; + this = calloc(1, sizeof(local_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + view = this; + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "video_player"; + tbt_info->layout_file = get_edje_path("video_player.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE_320_X_320 || (get_device_type() == DEVICE_WEARABLE_CIRCLE)) + { + elm_theme_overlay_add(NULL, get_edje_path("custom_button.edj")); + } + #endif + + #ifdef DEVICE_TYPE_MOBILE + Evas *evas = evas_object_evas_get(this->view->navi); + this->video_rect = evas_object_image_filled_add(evas); + #else + int width, height; + + int ret = system_info_get_platform_int("tizen.org/feature/screen.width", &width); + RETVM_IF(SYSTEM_INFO_ERROR_NONE!=ret, NULL, "system_info_get_platform_int failed %s", get_system_error(ret)); + RETVM_IF(width <= 0, NULL, "width is zero or negative"); + ret = system_info_get_platform_int("tizen.org/feature/screen.height", &height); + RETVM_IF(SYSTEM_INFO_ERROR_NONE!=ret, NULL, "system_info_get_platform_int failed %s", get_system_error(ret)); + RETVM_IF(height <= 0, NULL, "height is zero or negative"); + + this->video_rect = elm_win_util_standard_add("Video", "Video"); + evas_object_resize(this->video_rect, width*0.23, height*0.23); + evas_object_move(this->video_rect, width*0.5-width*0.23*0.5, height*0.2); + + + Evas *evas_canvas = evas_object_evas_get(this->video_rect); + Evas_Object *bg = evas_object_rectangle_add(evas_canvas); + evas_object_render_op_set(bg, EVAS_RENDER_COPY); + evas_object_color_set(bg, 0, 0, 0, 0); + evas_object_resize(bg, width*0.23, height*0.23); // covers full canvas + evas_object_show(bg); + + #endif + + evas_object_show(this->video_rect); + #ifdef DEVICE_TYPE_MOBILE + elm_object_part_content_set(this->view->layout, "video_view", this->video_rect); + #endif + + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + + update_view_controls(this); + + return this; +} + + +/** + * @function update_view_controls + * @since_tizen 2.3 + * @description Update View Controls + * @parameter local_view*: Local View Pointer + * @return static void + */ +static void update_view_controls(local_view *this) +{ + RETM_IF(NULL == this, "this is NULL"); +} + + +/** + * @function start_player + * @since_tizen 2.3 + * @description Start Player + * @parameter local_view*: Local View Pointer + * @return static void + */ +static void start_player(local_view *this) +{ + RETM_IF(NULL == this, "this is NULL"); + int result; + if(!this->player) + { + this->player = create_player(this); + } + + if(this->player) + { + player_state_e state; + result = player_get_state(this->player, &state); + DBG( "player_get_state fail > Error = %s", get_local_view_error(result)); + if(state != PLAYER_STATE_PLAYING) + { + result = player_set_display_visible(this->player, true); + RETM_IF(result != PLAYER_ERROR_NONE, "player_set_display_visible fail > Error = %s", get_local_view_error(result)); + result = player_start(this->player); + RETM_IF(result != PLAYER_ERROR_NONE, "player_start fail > Error = %s", get_local_view_error(result)); + } + } +} + + +/** + * @function stop_player + * @since_tizen 2.3 + * @description Stop Player + * @parameter local_view*: Local View Pointer + * @return static void + */ +static void stop_player(local_view *this) +{ + RETM_IF(NULL == this, "this is NULL"); + int result; + if(this->player) + { + player_state_e state; + result = player_get_state(this->player, &state); + DBG( "player_get_state fail > Error = %s", get_local_view_error(result)); + if(state == PLAYER_STATE_PLAYING || state == PLAYER_STATE_PAUSED) + { + result = player_stop(this->player); + RETM_IF(result != PLAYER_ERROR_NONE, "player_stop fail > Error = %s", get_local_view_error(result)); + result = player_set_display_visible(this->player, false); + RETM_IF(result != PLAYER_ERROR_NONE, "player_set_display_visible fail > Error = %s", get_local_view_error(result)); + } + } +} + + +/** + * @function pause_player + * @since_tizen 2.3 + * @description Pause Player + * @parameter local_view*: Local View Pointer + * @return static void + */ +static void pause_player(local_view *this) +{ + RETM_IF(NULL == this, "this is NULL"); + int result; + if(this->player) + { + player_state_e state; + result = player_get_state(this->player, &state); + DBG( "player_get_state fail > Error = %s", get_local_view_error(result)); + if(state == PLAYER_STATE_PLAYING) + { + result = player_pause(this->player); + RETM_IF(result != PLAYER_ERROR_NONE, "player_pause fail > Error = %s", get_local_view_error(result)); + } + } +} + + +/** + * @function destroy_player + * @since_tizen 2.3 + * @description Destroy Player + * @parameter local_view*: Local View Pointer + * @return static void + */ +static void destroy_player(local_view *this) +{ + RETM_IF(NULL == this, "view is NULL"); + int result; + if(this->player) + { + result = player_stop(this->player); + DBG( "player_stop fail > Error = %s", get_local_view_error(result)); + result = player_unprepare(this->player); + DBG( "player_unprepare fail > Error = %s", get_local_view_error(result)); + result = player_destroy(this->player); + DBG( "player_destroy fail > Error = %s", get_local_view_error(result)); + this->player = NULL; + } +} + + +/** + * @function create_player + * @since_tizen 2.3 + * @description Create Player + * @parameter local_view*: Local View Pointer + * @return static player_h + */ +static player_h create_player(local_view *this) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + + player_h player = NULL; + int result = player_create(&player); + if(result == PLAYER_ERROR_NONE) + { + result = player_set_sound_type(player, SOUND_TYPE_MEDIA); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_sound_type fail > Error = %s", get_local_view_error(result)); + result = player_set_volume(player, 1.0, 1.0); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_volume fail > Error = %s", get_local_view_error(result)); + result = player_set_looping(player, true); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_looping fail > Error = %s", get_local_view_error(result)); + result = player_set_uri(player, get_resource_path(this->view->tbt_info->file_name)); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_uri fail > Error = %s", get_local_view_error(result)); + #ifdef DEVICE_TYPE_MOBILE + result = player_set_display(player, PLAYER_DISPLAY_TYPE_EVAS, GET_DISPLAY(this->video_rect)); + #else + result = player_set_display(player, PLAYER_DISPLAY_TYPE_OVERLAY, GET_DISPLAY(this->video_rect)); + #endif + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_display fail > Error = %s", get_local_view_error(result)); + result = player_set_display_mode(player, PLAYER_DISPLAY_MODE_FULL_SCREEN); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_display_mode fail > Error = %s", get_local_view_error(result)); + result = player_set_display_visible(player, true); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_set_display_visible fail > Error = %s", get_local_view_error(result)); + result = player_prepare(player); + DBG("result is %d", result); + RETVM_IF(result != PLAYER_ERROR_NONE, NULL, "player_prepare fail > Error = %s", get_local_view_error(result)); + } + else + { + ERR("player_pause fail > Error = %s", get_local_view_error(result)); + } + + return player; +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter local_view*: Local View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(local_view *this, Evas_Object *parent) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + +//#ifdef DEVICE_TYPE_MOBILE +// elm_table_padding_set(table, TABLE_PADDING_HORIZONTAL, TABLE_PADDING_VERTICAL); +//#endif + + this->play_btn = ui_utils_push_button_add(this, table, "Play", _start_player_cb); + elm_table_pack(table, this->play_btn, 0, 0, 1, 1); + + this->pause_btn = ui_utils_push_button_add(this, table, "Pause", _pause_player_cb); + elm_table_pack(table, this->pause_btn, 1, 0, 1, 1); + + this->stop_btn = ui_utils_push_button_add(this, table, "Stop", _stop_player_cb); + elm_table_pack(table, this->stop_btn, 2, 0, 1, 1); + + disable_control_button(this, false, true, true); + + return table; +} + + +/** + * @function disable_control_button + * @since_tizen 2.3 + * @description Disable Control Button + * @parameter local_view*: Local View Pointer + * @return static void + */ +static void disable_control_button(local_view *this, bool play, bool pause, bool stop) +{ + RETM_IF(NULL == this, "view is NULL"); + + elm_object_disabled_set(this->play_btn, play); + elm_object_disabled_set(this->pause_btn, pause); + elm_object_disabled_set(this->stop_btn, stop); +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + _tbt_app_terminate_cb = NULL; + RETM_IF(NULL == this, "data is NULL"); + local_view *view = NULL; + view = (local_view*)this; + RETM_IF(NULL == view, "view is NULL"); + #ifdef DEVICE_TYPE_WEARABLE + if(get_device_type() == DEVICE_WEARABLE_320_X_320 || (get_device_type() == DEVICE_WEARABLE_CIRCLE)) + { + elm_theme_overlay_del(NULL, get_edje_path("custom_button.edj")); + } + #endif + + _tbt_pause_resume_cb = NULL; + _tbt_app_terminate_cb = NULL; + #ifndef DEVICE_TYPE_MOBILE + evas_object_del(view->video_rect); + #endif + destroy_player(view); + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + + +/** + * @function _start_player_cb + * @since_tizen 2.3 + * @description Start Player Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _start_player_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + local_view *view = NULL; + view = (local_view*)data; + RETM_IF(NULL == view, "view is NULL"); + start_player(view); + disable_control_button(view, true, false, false); +} + + +/** + * @function _stop_player_cb + * @since_tizen 2.3 + * @description Stop Player Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _stop_player_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + local_view *view = NULL; + view = (local_view*)data; + RETM_IF(NULL == view, "view is NULL"); + stop_player(view); + disable_control_button(view, false, true, true); +} + + +/** + * @function _pause_player_cb + * @since_tizen 2.3 + * @description Pause Player Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _pause_player_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + local_view *view = NULL; + view = (local_view*)data; + RETM_IF(NULL == view, "view is NULL"); + pause_player(view); + disable_control_button(view, false, true, false); +} + + +/** + * @function get_local_view_error + * @since_tizen 2.3 + * @description Get Local View Error + * @parameter player_error_e: Player Error E + * @return static char* + */ +static char* get_local_view_error(player_error_e error_state) +{ + +switch(error_state) +{ + case PLAYER_ERROR_OUT_OF_MEMORY: + return "PLAYER_ERROR_OUT_OF_MEMORY"; + + case PLAYER_ERROR_INVALID_PARAMETER: + return "PLAYER_ERROR_INVALID_PARAMETER"; + + case PLAYER_ERROR_NO_SUCH_FILE: + return "PLAYER_ERROR_NO_SUCH_FILE"; + + case PLAYER_ERROR_FILE_NO_SPACE_ON_DEVICE: + return "PLAYER_ERROR_FILE_NO_SPACE_ON_DEVICE"; + + case PLAYER_ERROR_INVALID_OPERATION: + return "PLAYER_ERROR_INVALID_OPERATION"; + + case PLAYER_ERROR_FEATURE_NOT_SUPPORTED_ON_DEVICE: + return "PLAYER_ERROR_FEATURE_NOT_SUPPORTED_ON_DEVICE"; + + case PLAYER_ERROR_SEEK_FAILED: + return "PLAYER_ERROR_SEEK_FAILED"; + + case PLAYER_ERROR_INVALID_STATE: + return "PLAYER_ERROR_INVALID_STATE"; + + case PLAYER_ERROR_NOT_SUPPORTED_FILE: + return "PLAYER_ERROR_NOT_SUPPORTED_FILE"; + + case PLAYER_ERROR_INVALID_URI: + return "PLAYER_ERROR_INVALID_URI"; + + case PLAYER_ERROR_SOUND_POLICY: + return "PLAYER_ERROR_SOUND_POLICY"; + + case PLAYER_ERROR_CONNECTION_FAILED: + return "PLAYER_ERROR_CONNECTION_FAILED"; + + case PLAYER_ERROR_VIDEO_CAPTURE_FAILED: + return "PLAYER_ERROR_VIDEO_CAPTURE_FAILED"; + case PLAYER_ERROR_DRM_EXPIRED: + return "PLAYER_ERROR_DRM_EXPIRED"; + case PLAYER_ERROR_DRM_NO_LICENSE: + return "PLAYER_ERROR_DRM_NO_LICENSE"; + case PLAYER_ERROR_DRM_FUTURE_USE: + return "PLAYER_ERROR_DRM_FUTURE_USE"; + case PLAYER_ERROR_DRM_NOT_PERMITTED: + return "PLAYER_ERROR_DRM_NOT_PERMITTED"; + case PLAYER_ERROR_RESOURCE_LIMIT: + return "PLAYER_ERROR_RESOURCE_LIMIT"; + case PLAYER_ERROR_PERMISSION_DENIED: + return "PLAYER_ERROR_PERMISSION_DENIED"; + default: + return "ERROR_NOT_FOUND"; + + + } +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-mock-view.c b/tbtcoreapp/src/view/tbt-mock-view.c new file mode 100644 index 0000000..7e57730 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-mock-view.c @@ -0,0 +1,605 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-mock-view.c + * @brief Feeding input event, EFL API mock event test. + * + * @author Muntasir Kabir (mk.chy@samsung.com) + * @date November, 2014 + * @bug none + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_MOCK + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-mock-view.h" +#include "view/tbt-common-view.h" + +struct _mock_view +{ + common_view* view; + + int x; + int y; + int screen_width; + int screen_height; + int step; + + Evas_Object* label; + Evas_Object* canvas; + Evas_Object *btn_click; + Evas_Object *btn_draw_line; + Evas_Object *btn_long_click; + + Evas *evas; + + // List of mouse spots + Eina_List *spots; + + // Flag for checking the mouse down event + Eina_Bool down; + Ecore_Timer *timer; + bool is_mock_event; +}; + +static void _app_destroy_cb(void* this); +static Evas_Object *add_control_layout(mock_view *this, Evas_Object *parent); +static void get_screen_resolution(mock_view *this); + +static void _control_button_mock_click_cb(void *pData, Evas_Object *pObj, void *pEventInfo); +static void _control_button_mock_long_click(void *pData, Evas_Object *pObj, void *pEventInfo); +static void _control_button_mock_draw_cb(void *pData, Evas_Object *pObj, void *pEventInfo); + +static Eina_Bool _mock_view_draw_timer_cb(void *data); +static Eina_Bool _mock_view_long_click_timer_cb(void *data); + +static void _mouse_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); +static void _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); +static void _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); + +static Evas_Object *create_spot(Evas_Object *parent, Evas_Coord x, Evas_Coord y, int size); +static void clear_spots(mock_view *this); +static void enable_control(mock_view *this, bool enable); + +static bool __is_mock_test_running=false; + + +/** + * @function get_system_error + * @since_tizen 2.3 + * @description Get System Error + * @parameter int: Int + * @return static char* + */ +static char* get_system_error(int ret) +{ + char* error; + +switch (ret) +{ + case SYSTEM_INFO_ERROR_NONE: + error = "SYSTEM_INFO_ERROR_NONE "; + break; + case SYSTEM_INFO_ERROR_INVALID_PARAMETER: + error = "SYSTEM_INFO_ERROR_INVALID_PARAMETER"; + break; + case SYSTEM_INFO_ERROR_OUT_OF_MEMORY: + error = "SYSTEM_INFO_ERROR_OUT_OF_MEMORY "; + break; + case SYSTEM_INFO_ERROR_IO_ERROR: + error = "SYSTEM_INFO_ERROR_IO_ERROR "; + break; + case SYSTEM_INFO_ERROR_PERMISSION_DENIED: + error = "SYSTEM_INFO_ERROR_PERMISSION_DENIED"; + break; + default: + error = "Unknown error"; + } + return error; +} + + +/** + * @function mock_view_add + * @since_tizen 2.3 + * @description Mock View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return mock_view* + */ +mock_view *mock_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + mock_view *this = NULL; + this = calloc(1, sizeof(mock_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + this->down = false; + tbt_info->layout_group = "mock_viewer"; + tbt_info->layout_file = get_edje_path("mock_viewer.edj"); + + get_screen_resolution(this); + this->timer = NULL; + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->is_mock_event = false; + this->label = ui_utils_label_add(this->view->layout, ""); + ui_utils_label_set_text(this->label, "Clear: ", "left"); + elm_object_part_content_set(this->view->layout, "cursor_text", this->label); + + Evas *evas = evas_object_evas_get(this->view->layout); + this->canvas = evas_object_rectangle_add(evas); + this->evas = evas_object_evas_get(this->canvas); + + elm_object_part_content_set(this->view->layout, "touch_view", this->canvas); + evas_object_size_hint_weight_set(this->canvas, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(this->canvas, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_color_set(this->canvas, 255, 255, 255, 255); + evas_object_repeat_events_set(this->canvas, EINA_TRUE); + evas_object_show(this->canvas); + + evas_object_data_set(this->canvas, "mock_view", this); + + evas_object_event_callback_add(this->canvas, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL); + evas_object_event_callback_add(this->canvas, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, NULL); + evas_object_event_callback_add(this->canvas, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, NULL); + + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + + return this; +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter mock_view*: Mock View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(mock_view *this, Evas_Object *parent) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_show(table); + + elm_table_padding_set(table, 0, 0); + + this->btn_click = ui_utils_push_button_add(this, table, "Tap", _control_button_mock_click_cb); + elm_table_pack(table, this->btn_click, 0, 0, 1, 1); + + this->btn_long_click = ui_utils_push_button_add(this, table, "Long Tap", _control_button_mock_long_click); + elm_table_pack(table, this->btn_long_click, 1, 0, 1, 1); + + this->btn_draw_line = ui_utils_push_button_add(this, table, "Draw", _control_button_mock_draw_cb); + elm_table_pack(table, this->btn_draw_line, 2, 0, 1, 1); + + return table; +} + + +/** + * @function get_screen_resolution + * @since_tizen 2.3 + * @description Get Screen Resolution + * @parameter mock_view*: Mock View Pointer + * @return static void + */ +static void get_screen_resolution(mock_view *this) +{ + + + int ret = system_info_get_platform_int("tizen.org/feature/screen.width", &this->screen_width); + RETM_IF(SYSTEM_INFO_ERROR_NONE!=ret, "system_info_get_platform_int failed %s", get_system_error(ret)); + RETM_IF(this->screen_width <= 0, "width is zero or negative"); + ret = system_info_get_platform_int("tizen.org/feature/screen.height", &this->screen_height); + RETM_IF(SYSTEM_INFO_ERROR_NONE!=ret, "system_info_get_platform_int failed %s", get_system_error(ret)); + RETM_IF(this->screen_height <= 0, "height is zero or negative"); +} + + +/** + * @function _mock_view_draw_timer_cb + * @since_tizen 2.3 + * @description Mock View Draw Timer Cb + * @parameter void*: Void Pointer + * @return static Eina_Bool + */ +static Eina_Bool _mock_view_draw_timer_cb(void *data) +{ + mock_view *this = (mock_view*) data; + RETVM_IF(NULL == this, 0, "_control_button_mock_click_cb mock_view NULL"); + RETVM_IF(NULL == this->evas, 0, "_control_button_mock_click_cb mock_view->evas NULL"); + + --this->step; + DBG("Timer draw %d", this->step);evas_object_data_set(this->canvas, "mock_view", this); + + if (this->step > 0) + { + this->x += 3; + evas_event_feed_mouse_move(this->evas, this->x, this->y, ecore_time_get(), this); + } + else + { + evas_event_feed_mouse_up(this->evas, 1, EVAS_BUTTON_NONE, ecore_time_get(), this); + enable_control(this, true); + __is_mock_test_running = false; + } + + return this->step > 0 ? 1 : 0; +} + + +/** + * @function _mock_view_long_click_timer_cb + * @since_tizen 2.3 + * @description Mock View Long Click Timer Cb + * @parameter void*: Void Pointer + * @return static Eina_Bool + */ +static Eina_Bool _mock_view_long_click_timer_cb(void *data) +{ + mock_view *this = (mock_view*) data; + RETVM_IF(NULL == this, 0, "_control_button_mock_click_cb mock_view NULL"); + RETVM_IF(NULL == this->evas, 0, "_control_button_mock_click_cb mock_view->evas NULL"); + + --this->step; + DBG("Timer long click %d", this->step); + if (this->step == 0) + { + evas_event_feed_mouse_up(this->evas, 1, EVAS_BUTTON_NONE, ecore_time_get(), this); + enable_control(this, true); + __is_mock_test_running = false; + } + else + evas_event_feed_mouse_move(this->evas, this->x, this->y, ecore_time_get(), this); + + return this->step > 0 ? 1 : 0; +} + + +/** + * @function _control_button_mock_click_cb + * @since_tizen 2.3 + * @description Control Button Mock Click Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _control_button_mock_click_cb(void *pData, Evas_Object *pObj, void *pEventInfo) +{ + + mock_view *this = (mock_view*) pData; + RETM_IF(NULL == this, "_control_button_mock_click_cb mock_view NULL"); + RETM_IF(NULL == this->evas, "_control_button_mock_click_cb mock_view->evas NULL"); + + DBG("MOCK CLICK"); + clear_spots(this); + + // get in middle + __is_mock_test_running = true; + evas_event_feed_mouse_move(this->evas, this->screen_width / 2, this->screen_height / 2, ecore_time_get(), this); + evas_event_feed_mouse_down(this->evas, 1, EVAS_BUTTON_NONE, ecore_time_get(), this); + evas_event_feed_mouse_up(this->evas, 1, EVAS_BUTTON_NONE, ecore_time_get(), this); + __is_mock_test_running = false; + this->is_mock_event = true; +} + + +/** + * @function _control_button_mock_long_click + * @since_tizen 2.3 + * @description Control Button Mock Long Click + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _control_button_mock_long_click(void *pData, Evas_Object *pObj, void *pEventInfo) +{ + mock_view *this = (mock_view*) pData; + RETM_IF(NULL == this, "_control_button_mock_long_click mock_view NULL"); + + DBG("MOCK LONG CLICK"); + if (this->timer != NULL) + ecore_timer_del(this->timer); + + enable_control(this, false); + clear_spots(this); + this->x = this->screen_width / 2; + this->y = this->screen_height / 2; + __is_mock_test_running = true; + evas_event_feed_mouse_move(this->evas, this->x, this->y, ecore_time_get(), this); + evas_event_feed_mouse_down(this->evas, 1, EVAS_BUTTON_NONE, ecore_time_get(), this); + + this->step = 20; // about 2 sec + this->timer = ecore_timer_add(0.1, _mock_view_long_click_timer_cb, this); + + this->is_mock_event = true; +} + + +/** + * @function _control_button_mock_draw_cb + * @since_tizen 2.3 + * @description Control Button Mock Draw Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _control_button_mock_draw_cb(void *pData, Evas_Object *pObj, void *pEventInfo) +{ + mock_view *this = (mock_view*) pData; + RETM_IF(NULL == this, "_control_button_mock_long_click mock_view NULL"); + + DBG("MOCK DRAW"); + if (this->timer != NULL) + ecore_timer_del(this->timer); + + this->x = this->screen_width / 2; + this->y = this->screen_height / 2; + this->step = 20; // about 2 sec + + enable_control(this, false); + clear_spots(this); + __is_mock_test_running = true; + evas_event_feed_mouse_move(this->evas, this->x, this->y, ecore_time_get(), this); + evas_event_feed_mouse_down(this->evas, 1, EVAS_BUTTON_NONE, ecore_time_get(), this); + this->timer = ecore_timer_add(0.1, _mock_view_draw_timer_cb, this); +} + + +/** + * @function _mouse_up_cb + * @since_tizen 2.3 + * @description Mouse Up Cb + * @parameter void*: Void Pointer, Evas*: Evas Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _mouse_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Evas_Event_Mouse_Up *ev = event_info; + + if(__is_mock_test_running && NULL == ev->data) + { + DBG("event data is NULL and mock test running"); + return; + } + + DBG("Mouse Up"); + mock_view *this = NULL; + this = evas_object_data_get(obj, "mock_view"); + RETM_IF(NULL == this, "view is NULL"); + + + Evas_Coord x = ev->canvas.x; + Evas_Coord y = ev->canvas.y; + + if (this->down == true) + { + char buf[1024]; + Evas_Object *spot; + + this->down = false; + int size = (int) 10 * elm_config_scale_get(); + + snprintf(buf, sizeof(buf), "Mouse Up, %d, %d", x, y); + ui_utils_label_set_text(this->label, buf, "left"); + + // Draw spot on event position + spot = create_spot(this->canvas, x, y, size); + evas_object_color_set(spot, 255, 0, 0, 255); + this->spots = eina_list_append(this->spots, spot); + } +} + + +/** + * @function _mouse_down_cb + * @since_tizen 2.3 + * @description Mouse Down Cb + * @parameter void*: Void Pointer, Evas*: Evas Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Evas_Event_Mouse_Down *ev = event_info; + if(__is_mock_test_running && NULL == ev->data) + { + DBG("event data is NULL and mock test running"); + return; + } + + DBG("Mouse Down"); + + mock_view *this = NULL; + this = evas_object_data_get(obj, "mock_view"); + RETM_IF(NULL == this, "view is NULL"); + + clear_spots(this); + + Evas_Coord x = ev->canvas.x; + Evas_Coord y = ev->canvas.y; + + if (this->down == false) + { + char buf[1024]; + Evas_Object *spot; + + this->down = true; + int size = (int) 10 * elm_config_scale_get(); + + snprintf(buf, sizeof(buf), "Mouse Down, %d, %d", x, y); + ui_utils_label_set_text(this->label, buf, "left"); + + // Draw spot on event position + spot = create_spot(this->canvas, x, y, size); + evas_object_color_set(spot, 0, 255, 0, 255); + this->spots = eina_list_append(this->spots, spot); + } +} + + +/** + * @function _mouse_move_cb + * @since_tizen 2.3 + * @description Mouse Move Cb + * @parameter void*: Void Pointer, Evas*: Evas Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Evas_Event_Mouse_Move *ev = event_info; + if(__is_mock_test_running && NULL == ev->data) + { + DBG("event data is NULL and mock test running"); + return; + } + + mock_view *this = NULL; + this = evas_object_data_get(obj, "mock_view"); + RETM_IF(NULL == this, "view is NULL"); + + //Evas_Event_Mouse_Move *ev = event_info; + Evas_Coord x = ev->cur.canvas.x; + Evas_Coord y = ev->cur.canvas.y; + + if (this->down == true) + { + char buf[1024]; + Evas_Object *spot; + + int size = (int) 5 * elm_config_scale_get(); + snprintf(buf, sizeof(buf), "Mouse Move, %d, %d", x, y); + ui_utils_label_set_text(this->label, buf, "left"); + + // Draw spot on event position + spot = create_spot(this->canvas, x, y, size); + evas_object_color_set(spot, 0, 0, 255, 255); + this->spots = eina_list_append(this->spots, spot); + } +} + + +/** + * @function create_spot + * @since_tizen 2.3 + * @description Create Spot + * @parameter Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *create_spot(Evas_Object *parent, Evas_Coord x, Evas_Coord y, int size) +{ + RETVM_IF(NULL == parent, NULL, "parent is NULL"); + + Evas_Object *spot; + spot = evas_object_rectangle_add(evas_object_evas_get(parent)); + evas_object_resize(spot, size, size); + + // Adjust x, y positions to be center of object + evas_object_move(spot, x - (size / 2), y - (size / 2)); + evas_object_show(spot); + return spot; +} + + +/** + * @function clear_spots + * @since_tizen 2.3 + * @description Clear Spots + * @parameter mock_view*: Mock View Pointer + * @return static void + */ +static void clear_spots(mock_view *this) +{ + Evas_Object *spot; + + EINA_LIST_FREE(this->spots, spot) + { + evas_object_del(spot); + spot = NULL; + } + + ui_utils_label_set_text(this->label, "Clear: ", "left"); +} + + +/** + * @function enable_control + * @since_tizen 2.3 + * @description Enable Control + * @parameter mock_view*: Mock View Pointer + * @return static void + */ +static void enable_control(mock_view *this, bool enable) +{ + RETM_IF(NULL == this, "enable_control(%d) mock_view NULL", enable); + + if (enable) + { + elm_object_disabled_set(this->btn_click, EINA_FALSE); + elm_object_disabled_set(this->btn_long_click, EINA_FALSE); + elm_object_disabled_set(this->btn_draw_line, EINA_FALSE); + } + else + { + elm_object_disabled_set(this->btn_click, EINA_TRUE); + elm_object_disabled_set(this->btn_long_click, EINA_TRUE); + elm_object_disabled_set(this->btn_draw_line, EINA_TRUE); + } +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + mock_view *view = NULL; + view = (mock_view*) this; + RETM_IF(NULL == view, "view is NULL"); + + if (view->timer != NULL) + ecore_timer_del(view->timer); + + clear_spots(view); + evas_object_del(view->canvas); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-nfc-view.c b/tbtcoreapp/src/view/tbt-nfc-view.c new file mode 100644 index 0000000..36fe25c --- /dev/null +++ b/tbtcoreapp/src/view/tbt-nfc-view.c @@ -0,0 +1,1415 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-nfc-view.c + * @brief covers NFC APIs + * covers NFC operations + * + * @author A. B. M. Nazibullah(nazib.ullah@samsung.com) + * @date October, 2014 + * @bug None + * @credit + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_NFC + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-nfc-view.h" +#include "view/tbt-common-view.h" +#include + +struct _nfc_view +{ + common_view* view; + + Evas_Object *nfc_btn; + Evas_Object *nfc_list; + Evas_Object *nfc_label; + Evas_Object *read_btn; + Evas_Object *write_btn; + Evas_Object *control; + nfc_p2p_target_h target; + nfc_p2p_snep_h snep_service; + + +}; +bool is_tab_1_clicked = false; +bool is_tab_2_clicked = false; + +static void _app_destroy_cb(void* this); +void initialize_nfc(nfc_view *this); +int nfc_onoff_operation(void); +char* get_nfc_error(nfc_error_e result); + +void _nfc_activation_changed_cb(bool activated , void *user_data); +void _nfc_tag_discovered_cb(nfc_discovered_type_e type, nfc_tag_h tag, void *user_data); +void _nfc_ndef_discovered_cb(nfc_ndef_message_h message, void *user_data); +void _nfc_p2p_target_discovered_cb(nfc_discovered_type_e type, nfc_p2p_target_h target, void *user_data); +void _nfc_se_event_cb(nfc_se_event_e event , void *user_data); +void _nfc_se_transaction_event_cb(nfc_se_type_e se_type, unsigned char* aid, int aid_size , unsigned char* param, int param_size, void *user_data); +void _nfc_p2p_data_received_cb(nfc_p2p_target_h target, nfc_ndef_message_h message, void *user_data); +static char* get_nfc_tag_name(nfc_tag_type_e type); +bool _nfc_tag_information_cb(const char *key, const unsigned char *value, int value_size, void *user_data); +void _nfc_tag_transceive_completed_cb(nfc_error_e result, unsigned char *buffer, int buffer_size, void *user_data); +void _nfc_mifare_read_block_completed_cb(nfc_error_e result, unsigned char *buffer, int bufer_size, void *user_data); +void _nfc_mifare_read_page_completed_cb(nfc_error_e result, unsigned char *buffer, int bufer_size, void *user_data); +char* nfc_util_itoa(char* fmt, ...); +nfc_ndef_message_h create_ndef_message(); +void _tag_write_completed_cb(nfc_error_e result, void *user_data); +void _nfc_mifare_write_block_completed_cb(nfc_error_e result, void *user_data); +void _nfc_mifare_authenticate_with_keyA_completed_cb(nfc_error_e result, void *user_data); +void _nfc_mifare_authenticate_with_keyB_completed_cb(nfc_error_e result, void *user_data); +static Evas_Object* create_2_text_with_title_tabbar(Evas_Object *parent, void* user_data); + +#ifndef DEVICE_TYPE_MOBILE +static Evas_Object* wearable_create_2_text_with_title_tabbar(Evas_Object *parent, void* user_data); +#endif + +static void toolbar_tab_1_cb(void *data, Evas_Object *obj, void *event_info); +static void toolbar_tab_2_cb(void *data, Evas_Object *obj, void *event_info); +void _nfc_tag_format_completed_cb(nfc_error_e result, void *user_data); +void _nfc_snep_event_cb(nfc_p2p_snep_h handle, nfc_snep_event_e event, nfc_error_e result, nfc_ndef_message_h msg, void *user_data); +void _nfc_tag_read_completed_cb(nfc_error_e result, nfc_ndef_message_h message, void *user_data); +void nfc_ndef_message_read(nfc_ndef_message_h message, void *user_data); +void on_nfc_snep_started(void* data); +void on_nfc_snep_get(void* data); +void _nfc_p2p_send_completed_cb(nfc_error_e result, void *user_data); + + +/** + * @function nfc_view_add + * @since_tizen 2.3 + * @description Nfc View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return nfc_view* + */ +nfc_view *nfc_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + nfc_view *this = NULL; + this = calloc(1, sizeof(nfc_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + if(tbt_info->apptype == TBT_APP_NFC_TAG) + { + tbt_info->layout_group = "nfc_viewer_tag"; + tbt_info->layout_file = get_edje_path("nfc_viewer.edj"); + + + } + else if(tbt_info->apptype == TBT_APP_NFC_P2P) + { + tbt_info->layout_group = "nfc_viewer_p2p"; + tbt_info->layout_file = get_edje_path("nfc_viewer.edj"); + } + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this->view, NULL, "view NULL after common_view_add"); + Evas_Object *tabbar; + Elm_Object_Item *nf_it; + Evas_Object *nf = this->view->navi; + + nf_it = elm_naviframe_top_item_get(nf); + elm_naviframe_item_style_set(nf_it, "tabbar"); + + + #ifdef DEVICE_TYPE_MOBILE + tabbar = create_2_text_with_title_tabbar(nf, this); + elm_object_item_part_content_set(nf_it, "tabbar", tabbar); + #else + tabbar = wearable_create_2_text_with_title_tabbar(nf, this); + #endif + + + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + is_tab_1_clicked = true; + this->nfc_label = ui_utils_label_add(this->view->layout, "NFC Read"); + elm_object_part_content_set(this->view->layout, "nfc_text", this->nfc_label); + + this->nfc_list = elm_list_add(this->view->layout); + RETVM_IF(!this->nfc_list, NULL, "elm_list_add failed"); + evas_object_data_set(this->nfc_list, "nfc_view", this); + elm_object_part_content_set(this->view->layout, "nfc_list", this->nfc_list); + + + initialize_nfc(this); + + return this; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + + int result; + + RETM_IF(NULL == this, "data is NULL"); + + nfc_view *view = NULL; + view = (nfc_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + is_tab_1_clicked = false; + + + nfc_manager_unset_activation_changed_cb(); + if (view->view->tbt_info->apptype == TBT_APP_NFC_TAG) + { + nfc_manager_unset_tag_discovered_cb(); + } + nfc_manager_unset_ndef_discovered_cb(); + if (view->view->tbt_info->apptype == TBT_APP_NFC_P2P) + { + nfc_manager_unset_p2p_target_discovered_cb(); + nfc_snep_stop_service(view->target, view->snep_service); + nfc_p2p_unset_data_received_cb(view->target); + + + } + + result = nfc_manager_deinitialize(); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_deinitialize failed %s",get_nfc_error(result)); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + + +/** + * @function initialize_nfc + * @since_tizen 2.3 + * @description Initialize Nfc + * @parameter nfc_view*: Nfc View Pointer + * @return void + */ +void initialize_nfc(nfc_view *this) +{ + DBG("Inside initialize_nfc"); + + int result = NFC_ERROR_NONE; + + if(nfc_manager_is_activated() == false) + { + result = nfc_onoff_operation(); + RETM_IF(result != 0, "nfc_onoff_operation failed %d", result); + } + result = nfc_manager_initialize(); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_initialize failed %s",get_nfc_error(result)); + + nfc_manager_set_tag_filter(NFC_TAG_FILTER_ALL_ENABLE); + + + result = nfc_manager_set_activation_changed_cb(_nfc_activation_changed_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_set_activation_changed_cb failed %s",get_nfc_error(result)); + + if(this->view->tbt_info->apptype == TBT_APP_NFC_TAG) + { + + result = nfc_manager_set_tag_discovered_cb(_nfc_tag_discovered_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_set_tag_discovered_cb failed %s",get_nfc_error(result)); + } + + result = nfc_manager_set_ndef_discovered_cb(_nfc_ndef_discovered_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_set_ndef_discovered_cb failed %s",get_nfc_error(result)); + + if(this->view->tbt_info->apptype == TBT_APP_NFC_P2P) + { + result = nfc_manager_set_p2p_target_discovered_cb(_nfc_p2p_target_discovered_cb,this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_set_p2p_target_discovered_cb failed %s",get_nfc_error(result)); + } + +} + + +/** + * @function nfc_onoff_operation + * @since_tizen 2.3 + * @description Nfc Onoff Operation + * @parameter NA + * @return int + */ +int nfc_onoff_operation(void) +{ + int ret = 0; + app_control_h service = NULL; + app_control_create(&service); + if (service == NULL) + { + DBG("service_create failed!"); + return 0; + } + app_control_set_operation(service, "http://tizen.org/appcontrol/operation/setting/nfc"); + app_control_add_extra_data(service, "type", "nfc"); + ret = app_control_send_launch_request(service, NULL, NULL); + + app_control_destroy(service); + if (ret == APP_CONTROL_ERROR_NONE) + { + DBG("Succeeded to NFC On/Off app!"); + return 0; + } + else + { + DBG("Failed to relaunch NFC On/Off app!"); + return -1; + } + return 0; +} + + +/** + * @function get_nfc_error + * @since_tizen 2.3 + * @description Get Nfc Error + * @parameter nfc_error_e: Nfc Error E + * @return char* + */ +char* get_nfc_error(nfc_error_e error_code) +{ + char* error; + +switch(error_code) +{ + case NFC_ERROR_NONE: + error = "NFC_ERROR_NONE"; + break; + case NFC_ERROR_OUT_OF_MEMORY: + error = "NFC_ERROR_OUT_OF_MEMORY"; + break; + case NFC_ERROR_OPERATION_FAILED: + error = "NFC_ERROR_OPERATION_FAILED"; + break; + case NFC_ERROR_INVALID_PARAMETER: + error = "NFC_ERROR_INVALID_PARAMETER"; + break; + case NFC_ERROR_INVALID_NDEF_MESSAGE: + error = "NFC_ERROR_INVALID_NDEF_MESSAGE"; + break; + case NFC_ERROR_INVALID_RECORD_TYPE: + error = "NFC_ERROR_INVALID_RECORD_TYPE"; + break; + case NFC_ERROR_TIMED_OUT: + error = "NFC_ERROR_TIMED_OUT"; + break; + case NFC_ERROR_DEVICE_BUSY: + error = "NFC_ERROR_DEVICE_BUSY"; + break; + case NFC_ERROR_NO_DEVICE: + error = "NFC_ERROR_NO_DEVICE"; + break; + case NFC_ERROR_NOT_ACTIVATED: + error = "NFC_ERROR_NOT_ACTIVATED"; + break; + case NFC_ERROR_NOT_SUPPORTED: + error = "NFC_ERROR_NOT_SUPPORTED"; + break; + case NFC_ERROR_ALREADY_ACTIVATED: + error = "NFC_ERROR_ALREADY_ACTIVATED"; + break; + case NFC_ERROR_ALREADY_DEACTIVATED: + error = "NFC_ERROR_ALREADY_DEACTIVATED"; + break; + case NFC_ERROR_READ_ONLY_NDEF: + error = "NFC_ERROR_READ_ONLY_NDEF"; + break; + case NFC_ERROR_NO_SPACE_ON_NDEF: + error = "NFC_ERROR_NO_SPACE_ON_NDEF"; + break; + case NFC_ERROR_NO_NDEF_MESSAGE: + error = "NFC_ERROR_NO_NDEF_MESSAGE"; + break; + case NFC_ERROR_NOT_NDEF_FORMAT: + error = "NFC_ERROR_NOT_NDEF_FORMAT"; + break; + case NFC_ERROR_SECURITY_RESTRICTED: + error = "NFC_ERROR_SECURITY_RESTRICTED"; + break; + case NFC_ERROR_PERMISSION_DENIED: + error = "NFC_ERROR_PERMISSION_DENIED"; + break; + case NFC_ERROR_ILLEGAL_STATE: + error = "NFC_ERROR_ILLEGAL_STATE"; + break; + case NFC_ERROR_NOT_INITIALIZED: + error = "NFC_ERROR_NOT_INITIALIZED"; + break; + case NFC_ERROR_TAG_NOT_SUPPORTED: + error = "NFC_ERROR_TAG_NOT_SUPPORTED"; + break; + case NFC_ERROR_AID_ALREADY_REGISTERED: + error = "NFC_ERROR_AID_ALREADY_REGISTERED"; + } + + return error; +} + + +/** + * @function _nfc_activation_changed_cb + * @since_tizen 2.3 + * @description Nfc Activation Changed Cb + * @parameter bool: Bool, void*: Void Pointer + * @return void + */ +void _nfc_activation_changed_cb(bool activated , void *user_data) +{ + DBG("_nfc_activation_changed_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + + if (activated) + { + DBG("NFC activated"); + ui_utils_label_set_text(this->nfc_label, "NFC activated", "left"); + } + else + { + DBG("NFC deactivated"); + ui_utils_label_set_text(this->nfc_label, "NFC deactivated", "left"); + } +} + + +/** + * @function _nfc_tag_discovered_cb + * @since_tizen 2.3 + * @description Nfc Tag Discovered Cb + * @parameter nfc_discovered_type_e: Nfc Discovered Type E, void*: Void Pointer + * @return void + */ +void _nfc_tag_discovered_cb(nfc_discovered_type_e type, nfc_tag_h tag, void *user_data) +{ + DBG("Inside _nfc_tag_discovered_cb"); + + RETM_IF(NULL == user_data, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + if(this->view->tbt_info->apptype == TBT_APP_NFC_TAG) + { + if(type == NFC_DISCOVERED_TYPE_ATTACHED) + { + + int result; + char* fmt_str = NULL; + RETM_IF(NULL == user_data, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + nfc_tag_h nfc_tag; + result = nfc_manager_get_connected_tag(&nfc_tag); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_get_connected_tag error: %s", get_nfc_error(result)); + + elm_list_clear(this->nfc_list); + nfc_tag_type_e tag_type; + result = nfc_tag_get_type(nfc_tag, &tag_type); + RETM_IF(result != NFC_ERROR_NONE, "nfc_tag_get_type error: %s", get_nfc_error(result)); + + if(is_tab_1_clicked == true) + { + + unsigned char KEY_DEFAULT[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + result = nfc_mifare_authenticate_with_keyA(tag, 0, KEY_DEFAULT, _nfc_mifare_authenticate_with_keyA_completed_cb, this); + DBG("nfc_mifare_authenticate_with_keyA: %s", get_nfc_error(result)); + + result = nfc_mifare_authenticate_with_keyB(tag, 0, KEY_DEFAULT, _nfc_mifare_authenticate_with_keyB_completed_cb, this); + DBG("nfc_mifare_authenticate_with_keyA: %s", get_nfc_error(result)); + + if(result == NFC_ERROR_NONE) + { + result = nfc_mifare_read_block(tag, 1, _nfc_mifare_read_block_completed_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_mifare_read_block: %s", get_nfc_error(result)); + DBG("nfc_mifare_read_block: %s", get_nfc_error(result)); + + result = nfc_mifare_read_page(tag, 1, _nfc_mifare_read_page_completed_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_mifare_read_page: %s", get_nfc_error(result)); + DBG("nfc_mifare_read_page: %s", get_nfc_error(result)); + } + + fmt_str = nfc_util_itoa("Tag Type: %s",get_nfc_tag_name(tag_type)); + elm_list_item_append(this->nfc_list, fmt_str, NULL, NULL, NULL, NULL); + SAFE_DELETE(fmt_str); + + bool is_supported_ndef; + result = nfc_tag_is_support_ndef(tag, &is_supported_ndef); + RETM_IF(result != NFC_ERROR_NONE, "nfc_tag_is_support_ndef: %s", get_nfc_error(result)); + + fmt_str = nfc_util_itoa("NDEF Support: %s",is_supported_ndef==true?"Yes":"No"); + elm_list_item_append(this->nfc_list, fmt_str, NULL, NULL, NULL, NULL); + SAFE_DELETE(fmt_str); + + DBG("Tag Type: %s", get_nfc_tag_name(tag_type)); + DBG("Is Supported: %s", is_supported_ndef==true?"true":"false"); + + unsigned int ndef_byte_size; + unsigned int max_ndef_byte_size; + + if(is_supported_ndef == true) + { + + + result = nfc_tag_get_ndef_size(tag, &ndef_byte_size); + RETM_IF(result != NFC_ERROR_NONE, "nfc_tag_get_ndef_size: %s", get_nfc_error(result)); + DBG("Ndef Byte Size: %d", ndef_byte_size); + + fmt_str = nfc_util_itoa("NDEF Msg Size: %d Byte", ndef_byte_size); + elm_list_item_append(this->nfc_list, fmt_str, NULL, NULL, NULL, NULL); + SAFE_DELETE(fmt_str); + + nfc_tag_get_maximum_ndef_size(tag, &max_ndef_byte_size); + RETM_IF(result != NFC_ERROR_NONE, "nfc_tag_get_maximum_ndef_size: %s", get_nfc_error(result)); + DBG("Ndef Max Byte Size: %d", max_ndef_byte_size); + + fmt_str = nfc_util_itoa("NDEF Max Msg Size: %d Byte", max_ndef_byte_size); + elm_list_item_append(this->nfc_list, fmt_str, NULL, NULL, NULL, NULL); + SAFE_DELETE(fmt_str); + + result = nfc_tag_read_ndef(tag, _nfc_tag_read_completed_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_tag_read_ndef: %s", get_nfc_error(result)); + DBG("nfc_tag_read_ndef: %s", get_nfc_error(result)); + + nfc_ndef_message_h ndef_message; + result = nfc_manager_get_cached_message(&ndef_message); + + if(result != NFC_ERROR_NO_NDEF_MESSAGE) + { + + DBG("Cached Message Found"); + nfc_ndef_message_read(ndef_message,this); + } + else if(result == NFC_ERROR_NO_NDEF_MESSAGE) + { + fmt_str = nfc_util_itoa("No Cached NDEF Message Found"); + elm_list_item_append(this->nfc_list, fmt_str, NULL, NULL, NULL, NULL); + DBG("No Cached Message Found"); + SAFE_DELETE(fmt_str); + } + + } + + result = nfc_tag_foreach_information(tag, _nfc_tag_information_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_tag_foreach_information: %s", get_nfc_error(result)); + + unsigned char buffer[256]; + result = nfc_tag_transceive(tag, buffer, sizeof(buffer), _nfc_tag_transceive_completed_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_tag_transceive: %s", get_nfc_error(result)); + + elm_list_go(this->nfc_list); + evas_object_show(this->nfc_list); + + } + + else if(is_tab_2_clicked == true) + { + result = nfc_tag_format_ndef(tag, NULL, 0, _nfc_tag_format_completed_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_tag_format_ndef failed: %s", get_nfc_error(result)); + + nfc_ndef_message_h msg = create_ndef_message(); + RETM_IF(NULL == msg, "ndef message is NULL"); + + int count; + result = nfc_ndef_message_get_record_count(msg, &count); + RETM_IF(result != NFC_ERROR_NONE, "nfc_ndef_message_get_record_count: %s", get_nfc_error(result)); + int i; + for(i = 0; infc_list, fmt_str, NULL, NULL, NULL, NULL); + DBG("Type: %s", fmt_str); + SAFE_DELETE(fmt_str); + + + + result = nfc_ndef_record_get_text(record, &text); + RETM_IF(result != NFC_ERROR_NONE, "nfc_ndef_record_get_text: %s", get_nfc_error(result)); + + fmt_str = nfc_util_itoa("Record %d Text: %s", i, text); + elm_list_item_append(this->nfc_list, fmt_str, NULL, NULL, NULL, NULL); + DBG("Text: %s", fmt_str); + SAFE_DELETE(fmt_str); + SAFE_DELETE(text); + } + + + result = nfc_tag_write_ndef(tag, msg, _tag_write_completed_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_tag_write_ndef: %s", get_nfc_error(result)); + + elm_list_go(this->nfc_list); + evas_object_show(this->nfc_list); + } + + } + } +} + + +/** + * @function _nfc_ndef_discovered_cb + * @since_tizen 2.3 + * @description Nfc Ndef Discovered Cb + * @parameter nfc_ndef_message_h: Nfc Ndef Message H, void*: Void Pointer + * @return void + */ +void _nfc_ndef_discovered_cb(nfc_ndef_message_h message, void *user_data) +{ + DBG("Inside _nfc_ndef_discovered_cb"); + int result; + int count; + nfc_ndef_record_h record; + + + RETM_IF(NULL == user_data, "data is NULL"); + + + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + if(this->view->tbt_info->apptype == TBT_APP_NFC_TAG) + { + if(is_tab_1_clicked == true) + { + result = nfc_ndef_message_get_record_count(message, &count); + DBG("NDEF Msg Count: %d", count); + RETM_IF(result != NFC_ERROR_NONE, "nfc_ndef_message_get_record_count: %s", get_nfc_error(result)); + int i; + for(i = 0; infc_list, fmt_str, NULL, NULL, NULL, NULL); + DBG("Type: %s", fmt_str); + SAFE_DELETE(fmt_str); + + + + result = nfc_ndef_record_get_text(record, &text); + RETM_IF(result != NFC_ERROR_NONE, "nfc_ndef_record_get_text: %s", get_nfc_error(result)); + + fmt_str = nfc_util_itoa("Record %d Text: %s", i, text); + elm_list_item_append(this->nfc_list, fmt_str, NULL, NULL, NULL, NULL); + DBG("Text: %s", fmt_str); + SAFE_DELETE(fmt_str); + SAFE_DELETE(text); + } + + } + } + else if(this->view->tbt_info->apptype == TBT_APP_NFC_P2P) + { + nfc_p2p_target_h target; + result = nfc_manager_get_connected_target(&target); + RETM_IF(result != NFC_ERROR_NONE, "nfc_manager_get_connected_target: %s", get_nfc_error(result)); + } + +} + + +/** + * @function _nfc_p2p_target_discovered_cb + * @since_tizen 2.3 + * @description Nfc P2p Target Discovered Cb + * @parameter nfc_discovered_type_e: Nfc Discovered Type E, void*: Void Pointer + * @return void + */ +void _nfc_p2p_target_discovered_cb(nfc_discovered_type_e type, nfc_p2p_target_h target, void *user_data) +{ + DBG("Inside _nfc_p2p_target_discovered_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + this->target = target; + + int result; + + if(this->view->tbt_info->apptype == TBT_APP_NFC_P2P) + { + DBG("Inside TBT_APP_NFC_P2P"); + if(is_tab_1_clicked == true) + { + DBG("Inside server"); + result = nfc_p2p_set_data_received_cb(this->target, _nfc_p2p_data_received_cb, this); +// result = nfc_snep_register_server("default", 4, _nfc_snep_event_cb, this); +// DBG("nfc_snep_register_server %s", get_nfc_error(result)); +// RETM_IF(result != NFC_ERROR_NONE, "nfc_snep_register_server: %s", get_nfc_error(result)); +// +// result = nfc_snep_start_server(this->target, "default", 4, _nfc_snep_event_cb, this); +// RETM_IF(result != NFC_ERROR_NONE, "nfc_snep_start_server: %s", get_nfc_error(result)); + + } + else if(is_tab_2_clicked == true) + { + nfc_ndef_message_h message = create_ndef_message(); + nfc_p2p_send(this->target, message, _nfc_p2p_send_completed_cb, this); +// result = nfc_snep_start_client(this->target, "urn:nfc:sn:snep", 4, _nfc_snep_event_cb, this); +// RETM_IF(result != NFC_ERROR_NONE, "nfc_snep_start_client: %s", get_nfc_error(result)); + } + + + } + + +} + + +/** + * @function _nfc_se_event_cb + * @since_tizen 2.3 + * @description Nfc Se Event Cb + * @parameter nfc_se_event_e: Nfc Se Event E, void*: Void Pointer + * @return void + */ +void _nfc_se_event_cb(nfc_se_event_e event , void *user_data) +{ + DBG("Inside _nfc_se_event_cb"); +} + + +/** + * @function _nfc_se_transaction_event_cb + * @since_tizen 2.3 + * @description Nfc Se Transaction Event Cb + * @parameter nfc_se_type_e: Nfc Se Type E, unsigned char*: Unsigned char Pointer, unsigned char*: Unsigned char Pointer, void*: Void Pointer + * @return void + */ +void _nfc_se_transaction_event_cb(nfc_se_type_e se_type, unsigned char* aid, int aid_size , unsigned char* param, int param_size, void *user_data) +{ + DBG("Inside _nfc_se_transaction_event_cb"); +} + + +/** + * @function _nfc_p2p_data_received_cb + * @since_tizen 2.3 + * @description Nfc P2p Data Received Cb + * @parameter nfc_p2p_target_h: Nfc P2p Target H, void*: Void Pointer + * @return void + */ +void _nfc_p2p_data_received_cb(nfc_p2p_target_h target, nfc_ndef_message_h message, void *user_data) +{ + DBG("Inside _nfc_p2p_data_received_cb"); + + RETM_IF(NULL == user_data, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + ui_utils_label_set_text(this->nfc_label, "Data Received Successfully", "left"); + nfc_ndef_message_read(message, this); + +} + + +/** + * @function get_nfc_tag_name + * @since_tizen 2.3 + * @description Get Nfc Tag Name + * @parameter nfc_tag_type_e: Nfc Tag Type E + * @return static char* + */ +static char* get_nfc_tag_name(nfc_tag_type_e type) +{ + char* type_name; + +switch(type) +{ + case NFC_UNKNOWN_TARGET: + type_name = "NFC_UNKNOWN_TARGET"; + break; + case NFC_GENERIC_PICC: + type_name = "NFC_GENERIC_PICC"; + break; + case NFC_ISO14443_A_PICC: + type_name = "NFC_ISO14443_A_PICC"; + break; + case NFC_ISO14443_4A_PICC: + type_name = "NFC_ISO14443_4A_PICC"; + break; + case NFC_ISO14443_3A_PICC: + type_name = "NFC_ISO14443_3A_PICC"; + break; + case NFC_MIFARE_MINI_PICC: + type_name = "NFC_MIFARE_MINI_PICC"; + break; + case NFC_MIFARE_1K_PICC: + type_name = "NFC_MIFARE_1K_PICC"; + break; + case NFC_MIFARE_4K_PICC: + type_name = "NFC_MIFARE_4K_PICC"; + break; + case NFC_MIFARE_ULTRA_PICC: + type_name = "NFC_MIFARE_ULTRA_PICC"; + break; + case NFC_MIFARE_DESFIRE_PICC: + type_name = "NFC_MIFARE_DESFIRE_PICC"; + break; + case NFC_ISO14443_B_PICC: + type_name = "NFC_ISO14443_B_PICC"; + break; + case NFC_ISO14443_4B_PICC: + type_name = "NFC_ISO14443_4B_PICC"; + break; + case NFC_ISO14443_BPRIME_PICC: + type_name = "NFC_ISO14443_BPRIME_PICC"; + break; + case NFC_FELICA_PICC: + type_name = "NFC_FELICA_PICC"; + break; + case NFC_JEWEL_PICC: + type_name = "NFC_JEWEL_PICC"; + break; + case NFC_ISO15693_PICC: + type_name = "NFC_ISO15693_PICC"; + break; + case NFC_BARCODE_128_PICC: + type_name = "NFC_BARCODE_128_PICC"; + break; + case NFC_BARCODE_256_PICC: + type_name = "NFC_BARCODE_256_PICC"; + break; + + case NFC_NFCIP1_TARGET: + type_name = "NFC_NFCIP1_TARGET"; + break; + case NFC_NFCIP1_INITIATOR: + type_name = "NFC_NFCIP1_INITIATOR"; + break; + default: + type_name = "UNKNOWN_TYPE"; + break; + + } + return type_name; +} + + +/** + * @function _nfc_tag_information_cb + * @since_tizen 2.3 + * @description Nfc Tag Information Cb + * @parameter const char*: Const char Pointer, const unsigned char*: Const unsigned char Pointer, void*: Void Pointer + * @return bool + */ +bool _nfc_tag_information_cb(const char *key, const unsigned char *value, int value_size, void *user_data) +{ + RETVM_IF(NULL == user_data, false, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETVM_IF(NULL == this,false, "view is NULL"); + + DBG("Key: %s, value: %s, value_size: %d", key, value, value_size); + char* fmt_str = NULL; + fmt_str = nfc_util_itoa("Key: %s, Value: %s", key, value); + elm_list_item_append(this->nfc_list, fmt_str, NULL, NULL, NULL, NULL); + SAFE_DELETE(fmt_str); + + + return true; +} + + +/** + * @function _nfc_tag_transceive_completed_cb + * @since_tizen 2.3 + * @description Nfc Tag Transceive Completed Cb + * @parameter nfc_error_e: Nfc Error E, unsigned char*: Unsigned char Pointer, void*: Void Pointer + * @return void + */ +void _nfc_tag_transceive_completed_cb(nfc_error_e result, unsigned char *buffer, int buffer_size, void *user_data) +{ + DBG("Inside _nfc_tag_transceive_completed_cb"); + DBG("buffer: %s, buffer_size: %d", buffer, buffer_size); + RETM_IF(NULL == user_data, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + char* fmt_str = NULL; + + fmt_str = nfc_util_itoa("Transceive Data: %s size: %d", buffer, buffer_size); + elm_list_item_append(this->nfc_list, fmt_str, NULL, NULL, NULL, NULL); + SAFE_DELETE(fmt_str); + +} + + +/** + * @function _nfc_mifare_read_block_completed_cb + * @since_tizen 2.3 + * @description Nfc Mifare Read Block Completed Cb + * @parameter nfc_error_e: Nfc Error E, unsigned char*: Unsigned char Pointer, void*: Void Pointer + * @return void + */ +void _nfc_mifare_read_block_completed_cb(nfc_error_e result, unsigned char *buffer, int bufer_size, void *user_data) +{ + DBG("Inside _nfc_mifare_read_block_completed_cb"); + DBG("buffer: %s buffer_size: %d", buffer, bufer_size); + + RETM_IF(NULL == user_data , "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this , "view is NULL"); + + char* fmt_str = NULL; + + fmt_str = nfc_util_itoa("Mifare Block Data: %s size: %d", buffer, bufer_size); + elm_list_item_append(this->nfc_list, fmt_str, NULL, NULL, NULL, NULL); + SAFE_DELETE(fmt_str); + +} + + + +/** + * @function _nfc_mifare_read_page_completed_cb + * @since_tizen 2.3 + * @description Nfc Mifare Read Page Completed Cb + * @parameter nfc_error_e: Nfc Error E, unsigned char*: Unsigned char Pointer, void*: Void Pointer + * @return void + */ +void _nfc_mifare_read_page_completed_cb(nfc_error_e result, unsigned char *buffer, int bufer_size, void *user_data) +{ + DBG("Inside _nfc_mifare_read_page_completed_cb"); + DBG("buffer: %s buffer_size: %d", buffer, bufer_size); + + RETM_IF(NULL == user_data, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + char* fmt_str = NULL; + + fmt_str = nfc_util_itoa("Mifare Page Data: %s size: %d", buffer, bufer_size); + elm_list_item_append(this->nfc_list, fmt_str, NULL, NULL, NULL, NULL); + SAFE_DELETE(fmt_str); + +} + +char* nfc_util_itoa(char* fmt, ...) +{ + char str[128]; + va_list arguments; + va_start ( arguments, fmt ); + vsnprintf(str, sizeof(str), fmt, arguments); + va_end ( arguments ); + + return strdup(str); +} + + +/** + * @function create_ndef_message + * @since_tizen 2.3 + * @description Create Ndef Message + * @parameter NA + * @return nfc_ndef_message_h + */ +nfc_ndef_message_h create_ndef_message() +{ + int result; + double time = ecore_time_unix_get(); + + + nfc_ndef_message_h msg; + result = nfc_ndef_message_create(&msg); + RETVM_IF(result != NFC_ERROR_NONE, NULL, "nfc_ndef_message_create %s", get_nfc_error(result)); + + char* time_str = nfc_util_itoa("Time: %.2lf Sec Since 1970", time); + nfc_ndef_record_h ndef_name_record = NULL; + nfc_ndef_record_create_text(&ndef_name_record, time_str, "en-US", NFC_ENCODE_UTF_8); + nfc_ndef_message_append_record(msg, ndef_name_record); + SAFE_DELETE(time_str); + + return msg; +} + + +/** + * @function _tag_write_completed_cb + * @since_tizen 2.3 + * @description Tag Write Completed Cb + * @parameter nfc_error_e: Nfc Error E, void*: Void Pointer + * @return void + */ +void _tag_write_completed_cb(nfc_error_e result, void *user_data) +{ + DBG("_tag_write_completed_cb %s", get_nfc_error(result)); + RETM_IF(NULL == user_data, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + if(result == NFC_ERROR_NONE) + { + elm_object_text_set(this->nfc_label, "Write Completed Successfully"); + } + else + { + elm_object_text_set(this->nfc_label, "Write Error"); + } +} + + + +/** + * @function _nfc_mifare_write_block_completed_cb + * @since_tizen 2.3 + * @description Nfc Mifare Write Block Completed Cb + * @parameter nfc_error_e: Nfc Error E, void*: Void Pointer + * @return void + */ +void _nfc_mifare_write_block_completed_cb(nfc_error_e result, void *user_data) +{ + DBG("Inside _nfc_mifare_write_block_completed_cb %s", get_nfc_error(result)); +} + + +/** + * @function _nfc_mifare_authenticate_with_keyA_completed_cb + * @since_tizen 2.3 + * @description Nfc Mifare Authenticate With KeyA Completed Cb + * @parameter nfc_error_e: Nfc Error E, void*: Void Pointer + * @return void + */ +void _nfc_mifare_authenticate_with_keyA_completed_cb(nfc_error_e result, void *user_data) +{ + DBG("Inside _nfc_mifare_authenticate_with_keyA_completed_cb %s", get_nfc_error(result)); +} + + + +/** + * @function _nfc_mifare_authenticate_with_keyB_completed_cb + * @since_tizen 2.3 + * @description Nfc Mifare Authenticate With KeyB Completed Cb + * @parameter nfc_error_e: Nfc Error E, void*: Void Pointer + * @return void + */ +void _nfc_mifare_authenticate_with_keyB_completed_cb(nfc_error_e result, void *user_data) +{ + DBG("Inside _nfc_mifare_authenticate_with_keyB_completed_cb %s", get_nfc_error(result)); +} + + +/** + * @function create_2_text_with_title_tabbar + * @since_tizen 2.3 + * @description Create 2 Text With Title Tabbar + * @parameter Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static Evas_Object* + */ +static Evas_Object* create_2_text_with_title_tabbar(Evas_Object *parent, void* user_data) +{ + + RETVM_IF(NULL == user_data,NULL, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETVM_IF(NULL == this, NULL, "view is NULL"); + + Evas_Object *toolbar; + + toolbar = elm_toolbar_add(parent); + elm_object_style_set(toolbar, "tabbar_with_title"); + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE); + + if(this->view->tbt_info->apptype == TBT_APP_NFC_TAG) + { + elm_toolbar_item_append(toolbar, NULL, "Read", toolbar_tab_1_cb, this); + elm_toolbar_item_append(toolbar, NULL, "Write", toolbar_tab_2_cb, this); + } + else if(this->view->tbt_info->apptype == TBT_APP_NFC_P2P) + { + elm_toolbar_item_append(toolbar, NULL, "Server", toolbar_tab_1_cb, this); + elm_toolbar_item_append(toolbar, NULL, "Client", toolbar_tab_2_cb, this); + } + elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_ALWAYS); + + return toolbar; +} +#ifndef DEVICE_TYPE_MOBILE + +/** + * @function wearable_create_2_text_with_title_tabbar + * @since_tizen 2.3 + * @description Wearable Create 2 Text With Title Tabbar + * @parameter Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static Evas_Object* + */ +static Evas_Object* wearable_create_2_text_with_title_tabbar(Evas_Object *parent, void* user_data) +{ + + RETVM_IF(NULL == user_data,NULL, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETVM_IF(NULL == this, NULL, "view is NULL"); + + + Evas_Object *table = elm_table_add(this->view->layout); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + Evas_Object* btn1 = NULL; + Evas_Object* btn2 = NULL; + + if(this->view->tbt_info->apptype == TBT_APP_NFC_TAG) + { + btn1 = ui_utils_push_button_add(this, table, "Read", toolbar_tab_1_cb); + btn2 = ui_utils_push_button_add(this, table, "Write", toolbar_tab_2_cb); + + } + else if(this->view->tbt_info->apptype == TBT_APP_NFC_P2P) + { + + btn1 = ui_utils_push_button_add(this, table, "Server", toolbar_tab_1_cb); + btn2 = ui_utils_push_button_add(this, table, "Client", toolbar_tab_2_cb); + + } + evas_object_show(table); + elm_table_pack(table, btn1, 0, 0, 1, 1); + elm_table_pack(table, btn2, 1, 0, 1, 1); + + elm_object_part_content_set(this->view->layout, "nfc_tabbar", table); + return table; + +} +#endif + + +/** + * @function toolbar_tab_1_cb + * @since_tizen 2.3 + * @description Toolbar Tab 1 Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void toolbar_tab_1_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("Inside toolbar_tab_1_cb"); + RETM_IF(NULL == data, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + is_tab_1_clicked = true; + is_tab_2_clicked = false; + + elm_list_clear(this->nfc_list); + evas_object_hide(this->control); + elm_object_part_content_unset(this->view->layout, "controlr_part"); + elm_object_text_set(this->nfc_label, "NFC Read"); +} + + +/** + * @function toolbar_tab_2_cb + * @since_tizen 2.3 + * @description Toolbar Tab 2 Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void toolbar_tab_2_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("Inside toolbar_tab_2_cb"); + + RETM_IF(NULL == data, "data is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + is_tab_2_clicked = true; + is_tab_1_clicked = false; + + elm_list_clear(this->nfc_list); + + elm_object_text_set(this->nfc_label, "NFC Write"); +} + + +/** + * @function _nfc_tag_format_completed_cb + * @since_tizen 2.3 + * @description Nfc Tag Format Completed Cb + * @parameter nfc_error_e: Nfc Error E, void*: Void Pointer + * @return void + */ +void _nfc_tag_format_completed_cb(nfc_error_e result, void *user_data) +{ + DBG("Inside _nfc_tag_format_completed_cb %s", get_nfc_error(result)); +} + + +/** + * @function _nfc_snep_event_cb + * @since_tizen 2.3 + * @description Nfc Snep Event Cb + * @parameter nfc_p2p_snep_h: Nfc P2p Snep H, void*: Void Pointer + * @return void + */ +void _nfc_snep_event_cb(nfc_p2p_snep_h handle, nfc_snep_event_e event, nfc_error_e result, nfc_ndef_message_h msg, void *user_data) +{ + DBG("Inside _nfc_snep_event_cb"); + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + this->snep_service = handle; + +switch(event) +{ + case NFC_SNEP_EVENT_STOP: + DBG("NFC_SNEP_EVENT_STOP"); + break; + case NFC_SNEP_EVENT_START: + on_nfc_snep_started(this); + DBG("NFC_SNEP_EVENT_START"); + break; + case NFC_SNEP_EVENT_GET: + on_nfc_snep_get(this); + DBG("NFC_SNEP_EVENT_GET"); + break; + case NFC_SNEP_EVENT_PUT: + DBG("NFC_SNEP_EVENT_PUT"); + break; + case NFC_SNEP_EVENT_REGISTER: + DBG("NFC_SNEP_EVENT_REGISTER"); + + break; + case NFC_SNEP_EVENT_UNREGISTER: + DBG("NFC_SNEP_EVENT_UNREGISTER"); + break; + } +} + + +/** + * @function _nfc_tag_read_completed_cb + * @since_tizen 2.3 + * @description Nfc Tag Read Completed Cb + * @parameter nfc_error_e: Nfc Error E, void*: Void Pointer + * @return void + */ +void _nfc_tag_read_completed_cb(nfc_error_e result, nfc_ndef_message_h message, void *user_data) +{ + DBG("_nfc_tag_read_completed_cb"); + + int count; + int ret = NFC_ERROR_NONE; + + RETM_IF(result != NFC_ERROR_NONE, "_nfc_tag_read_completed_cb failed with error: %s", get_nfc_error(result)); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + ret = nfc_ndef_message_get_record_count(message, &count); + RETM_IF(ret != NFC_ERROR_NONE, "nfc_ndef_message_get_record_count failed with error: %s", get_nfc_error(ret)); + + char* fmt_str = NULL; + fmt_str = nfc_util_itoa("NDEF Record Count: %d", count); + elm_list_item_append(this->nfc_list, fmt_str, NULL, NULL, NULL, NULL); + + elm_list_go(this->nfc_list); + evas_object_show(this->nfc_list); + + DBG("_nfc_tag_read_completed_cb %s", fmt_str); + SAFE_DELETE(fmt_str); + + +} + + +/** + * @function nfc_ndef_message_read + * @since_tizen 2.3 + * @description Nfc Ndef Message Read + * @parameter nfc_ndef_message_h: Nfc Ndef Message H, void*: Void Pointer + * @return void + */ +void nfc_ndef_message_read(nfc_ndef_message_h message, void *user_data) +{ + DBG("Inside nfc_ndef_message_read"); + int result; + int count; + nfc_ndef_record_h record; + + RETM_IF(NULL == user_data, "data is NULL"); + RETM_IF(NULL == &message, "message is NULL"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + result = nfc_ndef_message_get_record_count(message, &count); + DBG("NDEF Msg Count: %d", count); + RETM_IF(result != NFC_ERROR_NONE, "nfc_ndef_message_get_record_count: %s", get_nfc_error(result)); + int i; + for(i = 0; infc_list, fmt_str, NULL, NULL, NULL, NULL); + DBG("Text: %s", fmt_str); + SAFE_DELETE(fmt_str); + SAFE_DELETE(text); + } + + elm_list_go(this->nfc_list); + evas_object_show(this->nfc_list); +} + + +/** + * @function on_nfc_snep_started + * @since_tizen 2.3 + * @description On Nfc Snep Started + * @parameter void*: Void Pointer + * @return void + */ +void on_nfc_snep_started(void* user_data) +{ + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + int result = NFC_ERROR_NONE; + //if p2p server + nfc_ndef_message_h msg = create_ndef_message(); + result = nfc_snep_send_client_request(this->snep_service, NFC_SNEP_GET, msg, _nfc_snep_event_cb, this); + RETM_IF(result != NFC_ERROR_NONE, "nfc_snep_send_client_request: %s", get_nfc_error(result)); + +} + + +/** + * @function on_nfc_snep_get + * @since_tizen 2.3 + * @description On Nfc Snep Get + * @parameter void*: Void Pointer + * @return void + */ +void on_nfc_snep_get(void* user_data) +{ + + //if client + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + nfc_ndef_message_h message = create_ndef_message(); + + int ret = nfc_p2p_send(this->target, message, _nfc_p2p_send_completed_cb, this); + RETM_IF(NFC_ERROR_NONE != ret, "nfc_p2p_send failed: %s",get_nfc_error(ret)); +} + + +/** + * @function _nfc_p2p_send_completed_cb + * @since_tizen 2.3 + * @description Nfc P2p Send Completed Cb + * @parameter nfc_error_e: Nfc Error E, void*: Void Pointer + * @return void + */ +void _nfc_p2p_send_completed_cb(nfc_error_e result, void *user_data) +{ + DBG("Inside _nfc_p2p_send_completed_cb"); + + nfc_view *this = NULL; + this = (nfc_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + if(result == NFC_ERROR_NONE) + { + ui_utils_label_set_text(this->nfc_label, "Data Sent Successfully", "left"); + } + +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-oauth2-info-view.c b/tbtcoreapp/src/view/tbt-oauth2-info-view.c new file mode 100644 index 0000000..faa4595 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-oauth2-info-view.c @@ -0,0 +1,130 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-oauth2-view.c + * @brief connect device via Wifi Direct + * + * @author A. B. M. Nazibullah(nazib.ullah@samsung.com) + * @date June, 2015 + * @bug NA + * @credit + * + */ +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_OAUTH2 + +#include +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-oauth2-view.h" +#include "view/tbt-common-view.h" + +static void _app_destroy_cb(void* this); + + +/** + * @function _oauth2_info_view_add + * @since_tizen 2.3 + * @description Oauth2 Info View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return oauth2_info_view* + */ +oauth2_info_view *_oauth2_info_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + + RETVM_IF(NULL == navi, NULL, "navi is null"); + + oauth2_info_view *this = NULL; + this = calloc(1, sizeof(oauth2_info_view)); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "oauth2_viewer"; + tbt_info->layout_file = get_edje_path("oauth2_info_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->access_token = NULL; + this->expire_in = 0; + this->refresh_token = NULL; + this->scope = NULL; + this->token_type = NULL; + this->state = NULL; + this->custom_data = NULL; + + return this; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + DBG("_app_destroy_cb called"); +} + + +/** + * @function _oauth2_info_show + * @since_tizen 2.3 + * @description Oauth2 Info Show + * @parameter void*: Void Pointer + * @return void + */ +void _oauth2_info_show(void* data) +{ + + RETM_IF(NULL == data, "data is NULL"); + + oauth2_info_view *this = NULL; + this = (oauth2_info_view*) data; + RETM_IF(NULL == this, "view is NULL"); + + + char* str; + elm_label_line_wrap_set(this->view->layout, ELM_WRAP_MIXED); + + str = format_string("Expire in: %lld",this->expire_in); + elm_object_part_text_set(this->view->layout, "info3", str); + SAFE_DELETE(str); + + str = format_string("Token type : %s",this->token_type); + elm_object_part_text_set(this->view->layout, "info4", str); + SAFE_DELETE(str); + + str = format_string("Scope : %s",this->scope); + elm_object_part_text_set(this->view->layout, "info5", str); + SAFE_DELETE(str); + + str = format_string("State : %s",this->state); + elm_object_part_text_set(this->view->layout, "info6", str); + SAFE_DELETE(str); + +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-oauth2-view.c b/tbtcoreapp/src/view/tbt-oauth2-view.c new file mode 100644 index 0000000..db9e867 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-oauth2-view.c @@ -0,0 +1,695 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-oauth2-view.h + * @brief checks required oauth2s are available or not + * + * @author A B M Nazibullah(nazib.ullah@samsung.com) + * @date June, 2015 + * @bug NA + * @credit + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_OAUTH2 + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-oauth2-view.h" +#include "view/tbt-common-view.h" +#include +#include + +//Following client_id and client secret generated against srbd.tizen.tbt.test@gmail.com pass: tizentbttest + +#define GOOGLE_CLIENT_ID "670877175811-sfjbiiambdqg411db9472u13ko89m972.apps.googleusercontent.com" +#define GOOGLE_CLIENT_SECRET "FHPYeaQnAD2nFEA7yyJac2SS" + +#define OAUTH2_TYPE_STR(k) #k + + +typedef enum { + GOOGLE_OAUTH2_CODE, + ALL_OAUTH2_TYPE +} oauth2_type_e; + + +struct _oauth2_view +{ + common_view* view; + Evas_Object *list; + Evas_Object *btn_clear_cache; + Evas_Object *btn_oauth2_info; + oauth2_manager_h oauth2_mgr; + CURL *curl_handle; + + const char* google_name; + const char* google_pic; + const char* google_gender; + + Evas_Object* google_pic_obj; + Evas_Object* google_desc_obj; + Evas_Object* google_img_text; + + const char *access_token; + const char *refresh_token; + long long int expire_in; + const char *token_type; + const char *scope; + const char *state; + const char *custom_data; +}; + +static char *oauth2_list[1024] = { + OAUTH2_TYPE_STR(GOOGLE_OAUTH2_CODE), +}; + +static void _app_destroy_cb(void* this); +static void prepare_oauth2_list(oauth2_view *this); +static void list_selected_cb(void *data, Evas_Object *obj, void *event_info); +static void start_google_oauth_code(void* data); +static void token_response_cb(oauth2_response_h response, void *user_data); +static void clear_chache_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static size_t _curl_response_cb(char *ptr, size_t size, size_t nmemb, void *userdata); +static void parse_json_data(char* json_data, void* user_data); +static char* strip_google_json(const char *s); +static void show_google_auth_output(void* user_data); +static void oauth2_info_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static char* get_oauth2_error(oauth2_error_e error); + + +/** + * @function oauth2_view_add + * @since_tizen 2.3 + * @description Oauth2 View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return oauth2_view* + */ +oauth2_view *oauth2_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + oauth2_view *this = NULL; + this = calloc(1, sizeof(oauth2_view)); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "oauth2_viewer"; + tbt_info->layout_file = get_edje_path("oauth2_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->oauth2_mgr = NULL; + this->google_name = NULL; + this->google_pic = NULL; + this->google_gender = NULL; + + this->access_token = NULL; + this->expire_in =0; + this->refresh_token = NULL; + this->scope = NULL; + this->token_type = NULL; + this->state = NULL; + this->custom_data = NULL; + + this->list = elm_list_add(this->view->layout); + RETVM_IF(!this->list, NULL, "elm_list_add failed"); + elm_object_part_content_set(this->view->layout, "oauth2_view", this->list); + + prepare_oauth2_list(this); + + this->btn_clear_cache = ui_utils_push_button_add(this, this->view->layout, "Clear Cache", clear_chache_button_pressed_cb); + elm_object_part_content_set(this->view->layout, "oauth2_btn", this->btn_clear_cache); + evas_object_show(this->btn_clear_cache); + + this->btn_oauth2_info = ui_utils_push_button_add(this, this->view->layout, "Info", oauth2_info_button_pressed_cb); + elm_object_part_content_set(this->view->layout, "oauth2_info_btn", this->btn_oauth2_info); + evas_object_show(this->btn_oauth2_info); + + this->google_desc_obj = ui_utils_label_add(this->view->layout, ""); + elm_object_part_content_set(this->view->layout, "oauth2_description", this->google_desc_obj); + evas_object_show(this->google_desc_obj); + + this->google_img_text = ui_utils_label_add(this->view->layout, "Image"); + + return this; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + oauth2_view *view = NULL; + view = (oauth2_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + + +/** + * @function prepare_oauth2_list + * @since_tizen 2.3 + * @description Prepare Oauth2 List + * @parameter oauth2_view*: Oauth2 View Pointer + * @return static void + */ +static void prepare_oauth2_list(oauth2_view *this) +{ + RETM_IF(NULL == this, "view is NULL"); + + int i; + for (i = 0; i < ALL_OAUTH2_TYPE ; i++) { + elm_list_item_append(this->list, oauth2_list[i], NULL, NULL, list_selected_cb, this); + } + + evas_object_show(this->list); +} + + +/** + * @function list_selected_cb + * @since_tizen 2.3 + * @description List Selected Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void list_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("list_selected_cb"); + RETM_IF(NULL == data,"data is NULL"); + + oauth2_view *this = NULL; + this = (oauth2_view*)data; + RETM_IF(NULL == this,"view is NULL"); + + Elm_Object_Item *it = event_info; + elm_list_item_selected_set(it, EINA_FALSE); + + const char* enum_text = elm_object_item_part_text_get(it, NULL); + + if(!strcmp(enum_text, OAUTH2_TYPE_STR(GOOGLE_OAUTH2_CODE))) + { + start_google_oauth_code(this); + } +} + + +/** + * @function start_google_oauth_code + * @since_tizen 2.3 + * @description Start Google Oauth Code + * @parameter void*: Void Pointer + * @return static void + */ +static void start_google_oauth_code(void* data) +{ + DBG("clear_chache_button_pressed_cb"); + RETM_IF(NULL == data, "data is NULL"); + + oauth2_view *this = NULL; + this = (oauth2_view*) data; + RETM_IF(NULL == this, "view is NULL"); + + + oauth2_manager_h mgr = NULL; + oauth2_error_e ret; + ret = oauth2_manager_create(&mgr); + RETM_IF(ret != OAUTH2_ERROR_NONE, "oauth2_manager_create error: %s", get_oauth2_error(ret)); + + oauth2_request_h request = NULL; + ret = oauth2_request_create(&request); + RETM_IF(ret != OAUTH2_ERROR_NONE, "oauth2_request_create error: %s", get_oauth2_error(ret)); + RETM_IF(NULL == request, "request is NULL"); + + ret = oauth2_request_set_auth_end_point_url(request,"https://accounts.google.com/o/oauth2/auth"); + RETM_IF(ret != OAUTH2_ERROR_NONE, "oauth2_request_set_auth_end_point_url error: %s", get_oauth2_error(ret)); + + ret = oauth2_request_set_token_end_point_url(request,"https://accounts.google.com/o/oauth2/token"); + RETM_IF(ret != OAUTH2_ERROR_NONE, "oauth2_request_set_token_end_point_url error: %s", get_oauth2_error(ret)); + + ret = oauth2_request_set_redirection_url(request,"https://localhost:8080"); + RETM_IF(ret != OAUTH2_ERROR_NONE, "oauth2_request_set_redirection_url error: %s", get_oauth2_error(ret)); + + ret = oauth2_request_set_client_id(request, GOOGLE_CLIENT_ID); + RETM_IF(ret != OAUTH2_ERROR_NONE, "oauth2_request_set_client_id error: %s", get_oauth2_error(ret)); + + ret = oauth2_request_set_client_secret(request, GOOGLE_CLIENT_SECRET); + RETM_IF(ret != OAUTH2_ERROR_NONE, "oauth2_request_set_client_secret error: %s", get_oauth2_error(ret)); + + ret = oauth2_request_set_scope(request, "email"); + RETM_IF(ret != OAUTH2_ERROR_NONE, "oauth2_request_set_scope error: %s", get_oauth2_error(ret)); + + ret = oauth2_request_set_response_type(request, OAUTH2_RESPONSE_TYPE_CODE); + RETM_IF(ret != OAUTH2_ERROR_NONE, "oauth2_request_set_response_type error: %s", get_oauth2_error(ret)); + + ret = oauth2_request_add_custom_data(request, "c_key", "c_val"); + RETM_IF(ret != OAUTH2_ERROR_NONE, "oauth2_request_add_custom_data error: %s", get_oauth2_error(ret)); + + + if (mgr && request) + { + this->oauth2_mgr = mgr; + ret = oauth2_manager_request_token(mgr, request, token_response_cb, this); + RETM_IF(ret != OAUTH2_ERROR_NONE, "oauth2_manager_request_token error: %s", get_oauth2_error(ret)); + } +} + + +/** + * @function token_response_cb + * @since_tizen 2.3 + * @description Token Response Cb + * @parameter oauth2_response_h: Oauth2 Response H, void*: Void Pointer + * @return static void + */ +static void token_response_cb(oauth2_response_h response, void *user_data) +{ + + DBG("token_response_cb"); + RETM_IF(NULL == user_data, "data is NULL"); + + oauth2_view *this = NULL; + this = (oauth2_view*) user_data; + RETM_IF(NULL == this, "view is NULL"); + + oauth2_error_e result; + + char* token_type = NULL; + result = oauth2_response_get_token_type(response, &token_type); + RETM_IF(result != OAUTH2_ERROR_NONE, "oauth2_response_get_token_type error: %s", get_oauth2_error(result)); + RETM_IF(NULL == token_type, "token_type NULL!"); + this->token_type = token_type; + + char *acc_token = NULL; + result = oauth2_response_get_access_token(response, &acc_token); + RETM_IF(result != OAUTH2_ERROR_NONE, "oauth2_response_get_access_token error: %s", get_oauth2_error(result)); + RETM_IF(NULL == acc_token, "acc_token NULL!"); + this->access_token = acc_token; + + char *ref_token = NULL; + result = oauth2_response_get_refresh_token(response, &ref_token); + RETM_IF(result != OAUTH2_ERROR_NONE, "oauth2_response_get_refresh_token error: %s", get_oauth2_error(result)); + RETM_IF(NULL == ref_token, "ref_token NULL!"); + this->refresh_token = ref_token; + + long long int expires_in = 0; + result = oauth2_response_get_expires_in(response, &expires_in); + RETM_IF(result != OAUTH2_ERROR_NONE, "oauth2_response_get_expires_in error: %s", get_oauth2_error(result)); + DBG("Expires in : %lld", expires_in); + this->expire_in = expires_in; + + + char* scope = NULL; + result = oauth2_response_get_scope(response, &scope); + //RETM_IF(result != OAUTH2_ERROR_NONE, "oauth2_response_get_scope error: %s", get_oauth2_error(result)); + //RETM_IF(NULL == scope, "scope NULL!"); + this->scope = scope; + + char* state = NULL; + result = oauth2_response_get_state(response, &state); + //RETM_IF(result != OAUTH2_ERROR_NONE, "oauth2_response_get_state error: %s", get_oauth2_error(result)); + //RETM_IF(NULL == state, "state NULL!"); + this->state = state; + + + char displayStr[1024] = {0,}; + if (acc_token) { + displayStr[0] = '\0'; + strcpy(displayStr, "access token= "); + strcat(displayStr, acc_token); + } + else { + oauth2_error_h e_handle = NULL; + result = oauth2_response_get_error(response, &e_handle); + RETM_IF(result != OAUTH2_ERROR_NONE, "oauth2_response_get_error error: %s", get_oauth2_error(result)); + RETM_IF(NULL == e_handle, "e_handle NULL!"); + char *error_val = NULL; + result = oauth2_error_get_custom_data(e_handle, "error", &error_val); + RETM_IF(result != OAUTH2_ERROR_NONE, "oauth2_error_get_custom_data error: %s", get_oauth2_error(result)); + RETM_IF(NULL == error_val, "error_val NULL!"); + if (error_val) + strcpy(displayStr, error_val); + else { + int error_code = 0; + int platform_error_code = 0; + + result = oauth2_error_get_code(e_handle, &error_code,&platform_error_code); + RETM_IF(result != OAUTH2_ERROR_NONE, "oauth2_error_get_code error: %s", get_oauth2_error(result)); + if (error_code != 0 || platform_error_code != 0) { + sprintf(displayStr, "Error=[%d][%d]",error_code, platform_error_code); + } else + strcpy(displayStr, "Unknown server error"); + } + } + + // CURL Request + + CURLcode curl_err; + this->curl_handle = curl_easy_init(); + DBG("Curl handle created."); + + char url_to_hit[1024]; + sprintf(url_to_hit, "%s%s", "https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=", acc_token); + + DBG("url_to_hit : %s", url_to_hit); + curl_err = curl_easy_setopt(this->curl_handle, CURLOPT_URL, url_to_hit); + RETM_IF(curl_err != CURLE_OK, "curl_easy_setopt - Adding CURLOPT_URL Failed %d", curl_err); + + curl_easy_setopt(this->curl_handle, CURLOPT_SSL_VERIFYPEER, 0L); + curl_easy_setopt(this->curl_handle, CURLOPT_WRITEFUNCTION, _curl_response_cb); + curl_easy_setopt(this->curl_handle, CURLOPT_WRITEDATA, this); + + curl_err = curl_easy_perform(this->curl_handle); + RETM_IF(curl_err != CURLE_OK, "curl_easy_perform Failed %s", curl_easy_strerror(curl_err)); + + return; +} + + +/** + * @function clear_chache_button_pressed_cb + * @since_tizen 2.3 + * @description Clear Chache Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void clear_chache_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("clear_chache_button_pressed_cb"); + RETM_IF(NULL == data, "data is NULL"); + + oauth2_view *this = NULL; + this = (oauth2_view*) data; + RETM_IF(NULL == this, "view is NULL"); + + oauth2_error_e result; + + if (this->oauth2_mgr != NULL) { + result = oauth2_manager_clear_cache(this->oauth2_mgr); + RETM_IF(result != OAUTH2_ERROR_NONE, "oauth2_manager_clear_cache error: %s", get_oauth2_error(result)); + result = oauth2_manager_clear_cookies(this->oauth2_mgr); + RETM_IF(result != OAUTH2_ERROR_NONE, "oauth2_manager_clear_cookies error: %s", get_oauth2_error(result)); + + this->oauth2_mgr = NULL; + DBG("cache and cookie data cleared!!!"); + return; + } +} + + +/** + * @function oauth2_info_button_pressed_cb + * @since_tizen 2.3 + * @description Oauth2 Info Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void oauth2_info_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("oauth2_info_button_pressed_cb"); + RETM_IF(NULL == data, "data is NULL"); + + oauth2_view *this = NULL; + this = (oauth2_view*) data; + RETM_IF(NULL == this, "view is NULL"); + + oauth2_info_view *data_view = _oauth2_info_view_add(this->view->navi, this->view->tbt_info, this->view->item); + data_view->access_token = this->access_token; + data_view->expire_in = this->expire_in; + data_view->refresh_token = this->refresh_token; + data_view->scope = this->scope; + data_view->token_type = this->token_type; + data_view->state = this->state; + data_view->custom_data = this->custom_data; + + _oauth2_info_show(data_view); + + +} + + +/** + * @function _curl_response_cb + * @since_tizen 2.3 + * @description Curl Response Cb + * @parameter char*: Char Pointer, void*: Void Pointer + * @return static size_t + */ +static size_t _curl_response_cb(char *ptr, size_t size, size_t nmemb, void *userdata) +{ + DBG("Inside _curl_response_cb"); + RETVM_IF(NULL == userdata,-1, "data is NULL"); + + oauth2_view *this = NULL; + this = (oauth2_view*) userdata; + RETVM_IF(NULL == this,-1, "view is NULL"); + //parse json + parse_json_data(ptr, this); + show_google_auth_output(this); + + return size*nmemb; +} + + +/** + * @function strip_google_json + * @since_tizen 2.3 + * @description Strip Google Json + * @parameter const char*: Const char Pointer + * @return static char* + */ +static char* strip_google_json(const char *s) +{ + char *p = malloc(strlen(s) + 1); + if(p) { + char *p2 = p; + while(*s != '}') { + if(*s != '\t' && *s != '\n') { + *p2++ = *s++; + } else { + ++s; + } + } + *p2 = '}'; + *(p2+1) = '\0'; + } + return p; +} + + +/** + * @function parse_json_data + * @since_tizen 2.3 + * @description Parse Json Data + * @parameter char*: Char Pointer, void*: Void Pointer + * @return static void + */ +static void parse_json_data(char* json_data, void* user_data) +{ + DBG("parse_json_data"); + RETM_IF(NULL == user_data, "data is NULL"); + + oauth2_view *this = NULL; + this = (oauth2_view*) user_data; + RETM_IF(NULL == this, "view is NULL"); + + DBG("json_data :%s", json_data); + /* str contains the JSON from the example above */ + + JsonParser *parser; + JsonNode *root; + GError *error; + + char *a = strip_google_json(json_data); + DBG("strip json: %s", a); + parser = json_parser_new(); + gboolean result = json_parser_load_from_data(parser, a, strlen(a), &error); + //DBG("json_parser_load_from_data error = %s", (char*)error->message); + if(result) + { + root = json_parser_get_root(parser); + + JsonObject *object; + object = json_node_get_object(root); + const char* name = NULL; + const char* picture = NULL; + const char* gender = NULL; + if(json_object_has_member(object, "name")) + { + name = json_object_get_string_member(object, "name"); + } + if(json_object_has_member(object, "picture")) + { + picture = json_object_get_string_member(object, "picture"); + } + if(json_object_has_member(object, "gender")) + { + gender = json_object_get_string_member(object, "gender"); + } + DBG("name: %s picture: %s gender: %s", name, picture, gender); + + this->google_name = name; + this->google_pic = picture; + this->google_gender = gender; + } + +} + + +/** + * @function show_google_auth_output + * @since_tizen 2.3 + * @description Show Google Auth Output + * @parameter void*: Void Pointer + * @return static void + */ +static void show_google_auth_output(void* user_data) +{ + DBG("show_google_auth_output"); + RETM_IF(NULL == user_data, "data is NULL"); + + oauth2_view *this = NULL; + this = (oauth2_view*) user_data; + RETM_IF(NULL == this, "view is NULL"); + + char desc_text[1024]; + char* gen; + if(this->google_gender != NULL) + { + if(strlen(this->google_gender) != 0) + { + gen = strcmp(this->google_gender, "male")?"Ms. ":"Mr. "; + } + } + if(this->google_name != NULL) + { + if(strlen(this->google_name) != 0) + { + if(gen != NULL) + { + sprintf(desc_text, "%s%s%s", "Hi ", gen, this->google_name); + } + else + { + sprintf(desc_text, "%s%s", "Hi ", this->google_name); + } + } + else + { + sprintf(desc_text, "%s", "Hi there !!"); + } + } + else + { + sprintf(desc_text, "%s", "Hi there !!"); + } + elm_label_line_wrap_set(this->google_desc_obj, ELM_WRAP_MIXED); + elm_object_text_set(this->google_desc_obj, desc_text); + + if(this->google_pic != NULL) + { + if(strlen(this->google_pic) != 0) + { + this->google_pic_obj = ui_utils_create_image(this->view->layout, this->google_pic); + elm_object_part_content_set(this->view->layout, "oauth2_pic", this->google_pic_obj); + evas_object_show(this->google_pic_obj); + } + else + { + elm_object_part_content_set(this->view->layout, "oauth2_pic", this->google_img_text); + elm_object_text_set(this->google_desc_obj, "No Image"); + evas_object_show(this->google_img_text); + } + } + else + { + elm_object_part_content_set(this->view->layout, "oauth2_pic", this->google_img_text); + evas_object_show(this->google_img_text); + } +} + + +/** + * @function get_oauth2_error + * @since_tizen 2.3 + * @description Get Oauth2 Error + * @parameter oauth2_error_e: Oauth2 Error E + * @return static char* + */ +static char* get_oauth2_error(oauth2_error_e error) +{ + char* ret = NULL; + +switch (error) +{ + case OAUTH2_ERROR_NONE: + ret = "OAUTH2_ERROR_NONE"; + break; + case OAUTH2_ERROR_OUT_OF_MEMORY: + ret = "OAUTH2_ERROR_OUT_OF_MEMORY"; + break; + case OAUTH2_ERROR_INVALID_PARAMETER: + ret = "OAUTH2_ERROR_INVALID_PARAMETER"; + break; + case OAUTH2_ERROR_ALREADY_IN_PROGRESS: + ret = "OAUTH2_ERROR_ALREADY_IN_PROGRESS"; + break; + case OAUTH2_ERROR_NOT_SUPPORTED: + ret = "OAUTH2_ERROR_NOT_SUPPORTED"; + break; + case OAUTH2_ERROR_PERMISSION_DENIED: + ret = "OAUTH2_ERROR_PERMISSION_DENIED"; + break; + case OAUTH2_ERROR_PARSE_FAILED: + ret = "OAUTH2_ERROR_PARSE_FAILED"; + break; + case OAUTH2_ERROR_NETWORK_ERROR: + ret = "OAUTH2_ERROR_NETWORK_ERROR"; + break; + case OAUTH2_ERROR_SERVER: + ret = "OAUTH2_ERROR_SERVER"; + break; + case OAUTH2_ERROR_USER_CANCELLED: + ret = "OAUTH2_ERROR_USER_CANCELLED"; + break; + case OAUTH2_ERROR_VALUE_NOT_FOUND: + ret = "OAUTH2_ERROR_VALUE_NOT_FOUND"; + break; + case OAUTH2_ERROR_UNKNOWN: + ret = "OAUTH2_ERROR_UNKNOWN"; + break; + } + return ret; +} +#endif diff --git a/tbtcoreapp/src/view/tbt-pick-view.c b/tbtcoreapp/src/view/tbt-pick-view.c new file mode 100644 index 0000000..5aa9ae8 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-pick-view.c @@ -0,0 +1,489 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-pick-view.c + * @brief pick single and multiple item. + * + * @author Muntasir Kabir (mk.chy@samsung.com) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_APP + +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-pick-view.h" +#include "view/tbt-common-view.h" + +struct _pick_view +{ + common_view* view; + + Evas_Object *label; + Evas_Object *data_list; + Evas_Object* single_btn; + Evas_Object* multiple_btn; + + app_control_h service; +}; + + +static void pick_list_view_append(pick_view *this, char* item_text); +static Evas_Object *add_control_layout(pick_view *this, Evas_Object *parent); + +static void _app_destroy_cb(void* this); +static void _view_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void _view_service_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void _single_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void _multiple_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void app_control_view_reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *data); +static void app_control_pick_single_reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *data); +static void app_control_pick_multiple_reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *data); + + +/** + * @function get_app_control_error + * @since_tizen 2.3 + * @description Get App Control Error + * @parameter int: Int + * @return static char* + */ +static char* get_app_control_error(int ret) +{ + char* error = NULL; + + switch (ret) { + case APP_CONTROL_ERROR_NONE: + error = "APP_CONTROL_ERROR_NONE"; + break; + case APP_CONTROL_ERROR_INVALID_PARAMETER: + error = "APP_CONTROL_ERROR_INVALID_PARAMETER"; + break; + case APP_CONTROL_ERROR_OUT_OF_MEMORY: + error = "APP_CONTROL_ERROR_OUT_OF_MEMORY"; + break; + case APP_CONTROL_ERROR_APP_NOT_FOUND: + error = "APP_CONTROL_ERROR_APP_NOT_FOUND"; + break; + case APP_CONTROL_ERROR_KEY_NOT_FOUND: + error = "APP_CONTROL_ERROR_KEY_NOT_FOUND"; + break; + case APP_CONTROL_ERROR_KEY_REJECTED: + error = "APP_CONTROL_ERROR_KEY_REJECTED"; + break; + case APP_CONTROL_ERROR_INVALID_DATA_TYPE: + error = "APP_CONTROL_ERROR_INVALID_DATA_TYPE"; + break; + case APP_CONTROL_ERROR_LAUNCH_REJECTED: + error = "APP_CONTROL_ERROR_LAUNCH_REJECTED"; + break; + case APP_CONTROL_ERROR_PERMISSION_DENIED: + error = "APP_CONTROL_ERROR_PERMISSION_DENIED"; + break; + case APP_CONTROL_ERROR_LAUNCH_FAILED: + error = "APP_CONTROL_ERROR_LAUNCH_FAILED"; + break; + case APP_CONTROL_ERROR_TIMED_OUT: + error = "APP_CONTROL_ERROR_TIMED_OUT"; + break; +#ifdef TIZEN_2_4 + case APP_CONTROL_ERROR_IO_ERROR: + error = "APP_CONTROL_ERROR_IO_ERROR"; + break; +#endif + default: + error = "Unknown Error"; + break; + } + return error; +} + + +/** + * @function pick_view_add + * @since_tizen 2.3 + * @description Pick View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return pick_view* + */ +pick_view *pick_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + pick_view *this = NULL; + this = calloc(1, sizeof(pick_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "pick_viewer"; + tbt_info->layout_file = get_edje_path("pick_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->label = ui_utils_label_add(this->view->layout, ""); + RETVM_IF(!this->label, NULL, "elm_list_add failed"); + ui_utils_label_set_text(this->label, "Pick/View Data: ", "left"); + elm_object_part_content_set(this->view->layout, "pick_text", this->label); + + this->data_list = elm_list_add(this->view->layout); + RETVM_IF(!this->data_list, NULL, "elm_list_add failed"); + evas_object_data_set(this->data_list, "data_view", this); + elm_object_part_content_set(this->view->layout, "pick_list", this->data_list); + + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + + return this; +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter pick_view*: Pick View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(pick_view *this, Evas_Object *parent) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + + elm_table_padding_set(table, 0, 0); + + if(this->view->tbt_info->apptype == TBT_APP_PICK_VIEW_APP) + { + this->single_btn = ui_utils_push_button_add(this, table, "View UI", _view_button_pressed_cb); + elm_table_pack(table, this->single_btn, 0, 0, 1, 1); + + this->multiple_btn = ui_utils_push_button_add(this, table, "View Service", _view_service_button_pressed_cb); + elm_table_pack(table, this->multiple_btn, 1, 0, 1, 1); + } + else if(this->view->tbt_info->apptype == TBT_APP_PICK_PICK_APP) + { + this->single_btn = ui_utils_push_button_add(this, table, "Single", _single_button_pressed_cb); + elm_table_pack(table, this->single_btn, 0, 0, 1, 1); + + this->multiple_btn = ui_utils_push_button_add(this, table, "Multiple", _multiple_button_pressed_cb); + elm_table_pack(table, this->multiple_btn, 1, 0, 1, 1); + } + + return table; +} + + +/** + * @function pick_list_view_append + * @since_tizen 2.3 + * @description Pick List View Append + * @parameter pick_view*: Pick View Pointer, char*: Char Pointer + * @return static void + */ +static void pick_list_view_append(pick_view *this, char* item_text) +{ + RETM_IF(NULL == this, "view is NULL"); + + elm_list_item_append(this->data_list, item_text, NULL, NULL, NULL, NULL); + elm_list_go(this->data_list); + evas_object_show(this->data_list); +} + + +/** + * @function _view_button_pressed_cb + * @since_tizen 2.3 + * @description View Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _view_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + pick_view *view = NULL; + view = (pick_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + char *appid = PICK_VIEW_APP_PACKAGE_NAME; + int ret = app_control_create(&view->service); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_create failed :%s", get_app_control_error(ret)); + RETM_IF(NULL == view->service, "Service NULL! "); + ret = app_control_set_app_id(view->service, appid); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_set_app_id failed :%s", get_app_control_error(ret)); + ret = app_control_send_launch_request(view->service , app_control_view_reply_cb, view); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_send_launch_request failed :%s", get_app_control_error(ret)); + ui_utils_label_set_text(view->label, "App launch requested.", "left"); +} + + +/** + * @function _view_service_button_pressed_cb + * @since_tizen 2.3 + * @description View Service Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _view_service_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + pick_view *view = NULL; + view = (pick_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + char *appid = PICK_VIEW_SERVICEAPP_PACKAGE_NAME; + int ret = app_control_create(&view->service); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_create failed :%s", get_app_control_error(ret)); + RETM_IF(NULL == view->service, "Service NULL! "); + ret = app_control_set_app_id(view->service, appid); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_set_app_id failed :%s", get_app_control_error(ret)); + ret = app_control_send_launch_request(view->service , app_control_view_reply_cb, view); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_send_launch_request failed :%s", get_app_control_error(ret)); + ui_utils_label_set_text(view->label, "App launch requested.", "left"); +} + + +/** + * @function _single_button_pressed_cb + * @since_tizen 2.3 + * @description Single Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _single_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + pick_view *view = NULL; + view = (pick_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + char *appid = PICK_VIEW_APP_PACKAGE_NAME; + + char *key="type"; + char *value="TBT_TEST_APP_ECHO"; + + int ret = app_control_create(&view->service); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_create failed :%s", get_app_control_error(ret)); + RETM_IF(NULL == view->service, "Service NULL! "); + ret = app_control_set_app_id(view->service, appid); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_set_app_id failed :%s", get_app_control_error(ret)); + ret = app_control_set_operation(view->service, APP_CONTROL_OPERATION_PICK); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_set_operation failed :%s", get_app_control_error(ret)); + ret = app_control_add_extra_data(view-> service, APP_CONTROL_DATA_SELECTION_MODE, "single"); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_add_extra_data failed :%s", get_app_control_error(ret)); + ret = app_control_add_extra_data(view-> service, key, value); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_add_extra_data failed :%s", get_app_control_error(ret)); + ret = app_control_send_launch_request(view->service , app_control_pick_single_reply_cb, view); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_send_launch_request failed :%s", get_app_control_error(ret)); + + ui_utils_label_set_text(view->label, "App launch requested.", "left"); +} + + +/** + * @function _multiple_button_pressed_cb + * @since_tizen 2.3 + * @description Multiple Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _multiple_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + pick_view *view = NULL; + view = (pick_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + char *appid = PICK_VIEW_APP_PACKAGE_NAME; + + char *key="type"; + char *value="TBT_TEST_APP_ECHO"; + + int ret = app_control_create(&view->service); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_create failed :%s", get_app_control_error(ret)); + RETM_IF(NULL == view->service, "Service NULL! "); + ret = app_control_set_app_id(view->service, appid); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_set_app_id failed :%s", get_app_control_error(ret)); + ret = app_control_set_operation(view->service, APP_CONTROL_OPERATION_PICK); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_set_operation failed :%s", get_app_control_error(ret)); + ret = app_control_add_extra_data(view-> service, APP_CONTROL_DATA_SELECTION_MODE, "multiple"); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_add_extra_data failed :%s", get_app_control_error(ret)); + ret = app_control_add_extra_data(view-> service, key, value); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_add_extra_data failed :%s", get_app_control_error(ret)); + ret = app_control_send_launch_request(view->service , app_control_pick_multiple_reply_cb, view); + RETM_IF(APP_CONTROL_ERROR_NONE != ret, "app_control_send_launch_request failed :%s", get_app_control_error(ret)); + + ui_utils_label_set_text(view->label, "App launch requested.", "left"); +} + + +/** + * @function app_control_view_reply_cb + * @since_tizen 2.3 + * @description App Control View Reply Cb + * @parameter app_control_h: App Control H, void*: Void Pointer + * @return static void + */ +static void app_control_view_reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *data) +{ + RETM_IF(NULL == data, "data is NULL"); + + pick_view *view = NULL; + view = (pick_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + if(result == APP_CONTROL_RESULT_SUCCEEDED) + { + int result; + char *app_id; + + if(reply != NULL) + { + result = app_control_get_app_id(reply, &app_id); + RETM_IF(APP_CONTROL_ERROR_NONE != result, "app_control_create failed :%s", get_app_control_error(result)); + DBG("app_id is %s", app_id); + + ui_utils_label_set_text(view->label, "App launched successfully.", "left"); + } + } +} + + +/** + * @function app_control_pick_single_reply_cb + * @since_tizen 2.3 + * @description App Control Pick Single Reply Cb + * @parameter app_control_h: App Control H, void*: Void Pointer + * @return static void + */ +static void app_control_pick_single_reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *data) +{ + RETM_IF(NULL == data, "data is NULL"); + + pick_view *view = NULL; + view = (pick_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + if(result == APP_CONTROL_RESULT_SUCCEEDED) + { + char *count; + char **values; + int valCount = 0; + + result = app_control_get_extra_data(reply, "count", &count); + RETM_IF(APP_CONTROL_ERROR_NONE != result, "app_control_create failed :%s", get_app_control_error(result)); + RETM_IF(count == NULL, "count is NULL"); + result = app_control_get_extra_data_array(reply, "values", &values, &valCount); + RETM_IF(APP_CONTROL_ERROR_NONE != result, "app_control_create failed :%s", get_app_control_error(result)); + RETM_IF(values == NULL, "value is NULL"); + RETM_IF(valCount < 0, "valcount negative"); + + elm_list_clear(view->data_list); + { + pick_list_view_append(view, values[0]); + ui_utils_label_set_text(view->label, "Single Select List:", "left"); + } + } + else + { + ui_utils_label_set_text(view->label, "Pick Single: Error", "left"); + } +} + + +/** + * @function app_control_pick_multiple_reply_cb + * @since_tizen 2.3 + * @description App Control Pick Multiple Reply Cb + * @parameter app_control_h: App Control H, void*: Void Pointer + * @return static void + */ +static void app_control_pick_multiple_reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *data) +{ + RETM_IF(NULL == data, "data is NULL"); + + pick_view *view = NULL; + view = (pick_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + if(result == APP_CONTROL_RESULT_SUCCEEDED) + { + char *count; + char **values; + int valCount = 0; + + result = app_control_get_extra_data(reply, "count", &count); + RETM_IF(APP_CONTROL_ERROR_NONE != result, "app_control_get_extra_data failed :%s", get_app_control_error(result)); + RETM_IF(count == NULL, "count is NULL"); + result = app_control_get_extra_data_array(reply, "values", &values, &valCount); + RETM_IF(APP_CONTROL_ERROR_NONE != result, "app_control_get_extra_data_array failed :%s", get_app_control_error(result)); + RETM_IF(values == NULL, "value is NULL"); + RETM_IF(valCount < 0, "valcount negative"); + + elm_list_clear(view->data_list); + int i; + for(i = 0; i < valCount; ++i) + { + pick_list_view_append(view, values[i]); + } + + ui_utils_label_set_text(view->label, "Multiple Select List:", "left"); + + } + else + { + ui_utils_label_set_text(view->label, "Pick Single: Error", "left"); + } +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + pick_view *view = NULL; + view = (pick_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-push-view.c b/tbtcoreapp/src/view/tbt-push-view.c new file mode 100644 index 0000000..f93b697 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-push-view.c @@ -0,0 +1,666 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-push-view.c + * @brief covers push service implementation + * activates the push service and sends a request for push message at a remote server and finally launches the TBT application when the push message is received + * + * @author A. B. M. Nazibullah (nazib.ullah@samsung.com) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_PUSH + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-push-view.h" +#include "view/tbt-common-view.h" + + +typedef enum { + CONNECTED_STATE = 0, + DISCONNECTED_STATE, + DISABLED_STATE +} _push_btn_state; + +struct _push_view +{ + common_view* view; + location_manager_h manager; + + Evas_Object *start_btn; + Evas_Object *disconnect_btn; + Evas_Object *message_btn; + Evas_Object *push_label; + Evas_Object* push_app_ID_entry; + Evas_Object* push_app_secret_entry; + + char* push_app_server; + char* reg_id; + + char* push_app_id_text; + char* push_app_secret_text; + + CURL *curl_handle; + _push_btn_state push_btn_state; +}; + + +#define CONNECTED_STATE 0 +#define DISCONNECTED_STATE 1 +#define DISABLED_STATE 2 + +static push_service_connection_h connection = NULL; +bool bIsNotiArrived; + +static void _app_destroy_cb(void* this); +static Evas_Object *add_control_layout(push_view *this, Evas_Object *parent); +static void _control_button_push_service_start_pressed_cb(void *pData, Evas_Object *pObj, void *pEventInfo); +static void _control_button_push_service_get_message_pressed_cb(void *pData, Evas_Object *pObj, void *pEventInfo); +static void _control_button_push_service_disconnect_pressed_cb(void *pData, Evas_Object *pObj, void *pEventInfo); +static void _state_changed_cb(push_service_state_e state, const char *err, void *user_data); +static void _notify_cb(push_service_notification_h noti, void *user_data); +static void _on_state_unregistered(void *user_data); +static void _on_state_registered(void *user_data); +static void _result_cb(push_service_result_e result, const char *msg, void *user_data); +static void send_push_data_to_server(void* user_data); +static char* push_service_get_server_address(char* reg_id); +static size_t _curl_response_cb(char *ptr, size_t size, size_t nmemb, void *userdata); +static void push_service_update_btn_state(void* user_data); +static char* push_service_get_error(int error_code); + + +/** + * @function push_view_add + * @since_tizen 2.3 + * @description Push View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return push_view* + */ +push_view *push_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + push_view *this = NULL; + this = calloc(1, sizeof(push_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + this->push_btn_state = DISCONNECTED_STATE; + push_service_update_btn_state(this); + + tbt_info->layout_group = "push_service"; + tbt_info->layout_file = get_edje_path("push_service.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->push_app_id_text = PUSH_APP_ID; + this->push_app_secret_text = PUSH_APP_SECRET; + this->push_label = ui_utils_label_add(this->view->layout, "Push"); + elm_object_part_content_set(this->view->layout, "push_text", this->push_label); + + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + + if(tbt_info->is_push_from_outside == true) + { + //Get Push from outside + this->push_btn_state = DISABLED_STATE; + push_service_update_btn_state(this); + char *noti_data = NULL; + noti_data = push_service_app_control_to_noti_data(tbt_info->push_app_control, tbt_info->push_operation_id); + RETVM_IF( NULL == noti_data, NULL, "noti_data is NULL"); + elm_object_text_set(this->push_label, noti_data); + + if (noti_data) { + free(noti_data); + } + + tbt_info->is_push_from_outside = false; + } + + + + return this; +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter push_view*: Push View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(push_view *this, Evas_Object *parent) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + + elm_table_padding_set(table, 0, 0); + + this->start_btn = ui_utils_push_button_add(this, table, "Start", _control_button_push_service_start_pressed_cb); + elm_table_pack(table, this->start_btn, 0, 0, 1, 1); + + this->message_btn = ui_utils_push_button_add(this, table, "Message", _control_button_push_service_get_message_pressed_cb); + elm_table_pack(table, this->message_btn, 1, 0, 1, 1); + + + this->disconnect_btn = ui_utils_push_button_add(this, table, "Disconnect", _control_button_push_service_disconnect_pressed_cb); + elm_table_pack(table, this->disconnect_btn, 2, 0, 1, 1); + + + return table; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + + RETM_IF(NULL == this, "data is NULL"); + + push_view *view = NULL; + view = (push_view*)this; + RETM_IF(NULL == view, "view is NULL"); + if(connection != NULL) + { + + DBG(" Before Push Service Disconnect result "); + push_service_disconnect(connection); + connection = NULL; + + + } + SAFE_DELETE(view->reg_id); + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + + +/** + * @function _control_button_push_service_start_pressed_cb + * @since_tizen 2.3 + * @description Control Button Push Service Start Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _control_button_push_service_start_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("Inside _control_button_push_service_start_pressed_cb"); + + RETM_IF(NULL == data, "data is NULL"); + + int result; + push_view *this = NULL; + this = (push_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + this->push_btn_state = CONNECTED_STATE; + push_service_update_btn_state(this); + + DBG("push app id: %s", this->push_app_id_text); + + result = push_service_connect(this->push_app_id_text, _state_changed_cb, _notify_cb, this, &connection); + RETM_IF(result != PUSH_SERVICE_ERROR_NONE, "push_service_connect :%s",push_service_get_error(result)); + RETM_IF(NULL != connection, "Connection Failed"); +} + + +/** + * @function _control_button_push_service_get_message_pressed_cb + * @since_tizen 2.3 + * @description Control Button Push Service Get Message Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _control_button_push_service_get_message_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("Inside _control_button_push_service_get_message_pressed_cb"); + + push_view *this = NULL; + this = (push_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + push_service_notification_h noti; + int result; + + do { + DBG("get Notification.."); + result = push_service_get_unread_notification(connection, ¬i); + RETM_IF(result != PUSH_SERVICE_ERROR_NONE,"push_service_get_unread_notification Failed %s", push_service_get_error(result)); + if (!noti) + break; + // Your implementation to process unread message noti. + char* data = NULL; + result = push_service_get_notification_data(noti, &data); + RETM_IF(result != PUSH_SERVICE_ERROR_NONE, "push_service_get_notification_data Failed %s", push_service_get_error(result)); + RETM_IF(NULL == data, "data is NULL"); + + elm_object_text_set(this->push_label, data); + + push_service_free_notification(noti); + } while (1); +} + + +/** + * @function _control_button_push_service_disconnect_pressed_cb + * @since_tizen 2.3 + * @description Control Button Push Service Disconnect Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _control_button_push_service_disconnect_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("Inside _control_button_push_service_disconnect_pressed_cb"); + push_view *this = NULL; + this = (push_view*)data; + RETM_IF(NULL == this, "view is NULL"); + this->push_btn_state = DISCONNECTED_STATE; + push_service_update_btn_state(this); + push_service_disconnect(connection); + connection = NULL; + elm_object_text_set(this->push_label, "Disconnected Successfully"); +} + + +/** + * @function _state_changed_cb + * @since_tizen 2.3 + * @description State Changed Cb + * @parameter push_service_state_e: Push Service State E, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _state_changed_cb(push_service_state_e state, const char *err, void *user_data) +{ + DBG("Inside _state_changed_cb"); + +switch (state) +{ + case PUSH_SERVICE_STATE_UNREGISTERED: + DBG("Arrived at STATE_UNREGISTERED"); + _on_state_unregistered(user_data); + break; + + case PUSH_SERVICE_STATE_REGISTERED: + DBG("Arrived at STATE_REGISTERED"); + _on_state_registered(user_data); + break; + + case PUSH_SERVICE_STATE_ERROR: + DBG("Arrived at STATE_ERROR"); + break; + + default: + DBG("Unknown State"); + break; + } +} + + +/** + * @function _notify_cb + * @since_tizen 2.3 + * @description Notify Cb + * @parameter push_service_notification_h: Push Service Notification H, void*: Void Pointer + * @return static void + */ +static void _notify_cb(push_service_notification_h noti, void *user_data) +{ + DBG("Inside _notify_cb"); + RETM_IF(NULL == noti, "Null Notification"); + + push_view *this = NULL; + this = (push_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + int result; + char *data=NULL; // App data loaded on the notification + char *msg=NULL; // Noti message + long long int time_stamp; // Time when the noti is generated + + result = push_service_get_notification_data(noti, &data); + RETM_IF(result != PUSH_SERVICE_ERROR_NONE, "push_service_get_notification_data Failed %s", push_service_get_error(result)); + RETM_IF(NULL == data, "data is NULL"); + + elm_object_text_set(this->push_label, data); + + result = push_service_get_notification_message(noti, &msg); + RETM_IF(result != PUSH_SERVICE_ERROR_NONE, "push_service_get_notification_message Failed %s", push_service_get_error(result)); + RETM_IF(NULL == msg, "Message is NULL"); + + + result = push_service_get_notification_time(noti, &time_stamp); + RETM_IF(result != PUSH_SERVICE_ERROR_NONE, "push_service_get_notification_time Failed %s", push_service_get_error(result)); + + SAFE_DELETE(data); + SAFE_DELETE(msg); +} + + +/** + * @function _on_state_unregistered + * @since_tizen 2.3 + * @description On State Unregistered + * @parameter void*: Void Pointer + * @return static void + */ +static void _on_state_unregistered(void *user_data) +{ + DBG("_on_state_unregistered"); + + int result; + result = push_service_register(connection, _result_cb, user_data); + DBG("_on_state_unregistered result: %s", push_service_get_error(result)); +} + + +/** + * @function _on_state_registered + * @since_tizen 2.3 + * @description On State Registered + * @parameter void*: Void Pointer + * @return static void + */ +static void _on_state_registered(void *user_data) +{ + DBG("_on_state_registered"); + int result; + push_view *this = NULL; + this = (push_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + this->reg_id = NULL; + this->reg_id = calloc(1,sizeof(char)*1024); + + result = push_service_get_registration_id(connection, &this->reg_id); + DBG("reg_id: %s", this->reg_id); + RETM_IF(result != PUSH_SERVICE_ERROR_NONE, "push_service_get_registration_id Failed %s", push_service_get_error(result)); + + send_push_data_to_server(this); +} + + +/** + * @function _result_cb + * @since_tizen 2.3 + * @description Result Cb + * @parameter push_service_result_e: Push Service Result E, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _result_cb(push_service_result_e result, const char *msg, void *user_data) +{ + DBG("Inside _result_cb"); + RETM_IF(result != PUSH_SERVICE_ERROR_NONE, "Registration ERROR %s", push_service_get_error(result)); +} + + +/** + * @function send_push_data_to_server + * @since_tizen 2.3 + * @description Send Push Data To Server + * @parameter void*: Void Pointer + * @return static void + */ +static void send_push_data_to_server(void* user_data) +{ + DBG("Inside send_push_data_to_server"); + + push_view *this = NULL; + this = (push_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + CURLcode curl_err; + struct curl_slist *header_list = NULL; + char* post_data = NULL; + int delay = 1; + char* reg = this->reg_id; + DBG("before format_string %s", reg); + + post_data = format_string("{ \"regID\" : \"%s\", \"requestID\" : \"%s\" , \"message\" : \"badgeOption=INCREASE&badgeNumber=1&action=ALERT&alertMessage=Hi\", \"appData\" : \"Hello Tizen\", \"delayDate\" : %d}", this->reg_id,"000001", delay); + + DBG("post_data : %s", post_data); + + // Creating header + char appID[1024]; + snprintf(appID, 1024, "appID:%s", PUSH_APP_ID); + header_list = curl_slist_append(header_list, appID); + + char appSecret[1024]; + snprintf(appSecret, 1024, "appSecret:%s", PUSH_APP_SECRET); + header_list = curl_slist_append(header_list, appSecret); + + + + DBG("app_id: %s", this->push_app_id_text); + DBG("app_secret: %s",this->push_app_secret_text); + + this->curl_handle = curl_easy_init(); + DBG("Curl handle created."); + + // adding header + curl_err = curl_easy_setopt(this->curl_handle, CURLOPT_HTTPHEADER, header_list); + RETM_IF(curl_err != CURLE_OK, "curl_easy_setopt - Adding header_list Failed %d", curl_err); + + // adding body/post + curl_err = curl_easy_setopt(this->curl_handle, CURLOPT_POSTFIELDS, post_data); + RETM_IF(curl_err != CURLE_OK, "curl_easy_setopt - Adding post_data Failed %d", curl_err); + + + + char* server = push_service_get_server_address(this->reg_id); + DBG("Server Address: %s", server); + + curl_err = curl_easy_setopt(this->curl_handle, CURLOPT_URL, push_service_get_server_address(this->reg_id)); + RETM_IF(curl_err != CURLE_OK, "curl_easy_setopt - Adding CURLOPT_URL Failed %d", curl_err); + + curl_easy_setopt(this->curl_handle, CURLOPT_SSL_VERIFYPEER, 0L); + curl_easy_setopt(this->curl_handle, CURLOPT_WRITEFUNCTION, _curl_response_cb); + curl_easy_setopt(this->curl_handle, CURLOPT_WRITEDATA, user_data); + + // lets send curl http request + curl_err = curl_easy_perform(this->curl_handle); + if(curl_err != CURLE_OK) + { + char *e = format_string(curl_easy_strerror(curl_err)); + elm_object_text_set(this->push_label, e); + SAFE_DELETE(e); + } + SAFE_DELETE(post_data); + RETM_IF(curl_err != CURLE_OK, "curl_easy_perform Failed %s", curl_easy_strerror(curl_err)); + +} + + +/** + * @function push_service_get_server_address + * @since_tizen 2.3 + * @description Push Service Get Server Address + * @parameter char*: Char Pointer + * @return static char* + */ +static char* push_service_get_server_address(char* reg_id) +{ + DBG("Inside push_service_get_server_address"); + + char* server_address = NULL; + + if (reg_id == NULL) + return NULL ; + // Determine RQM server + if (strncmp(reg_id, "00", 2) == 0) { + server_address = + "https://useast.push.samsungosp.com:8088/spp/pns/api/push"; + } else if (strncmp(reg_id, "01", 2) == 0) { + server_address = + "https://uswest.push.samsungosp.com:8088/spp/pns/api/push"; + } else if (strncmp(reg_id, "02", 2) == 0) { + server_address = + "https://apsoutheast.push.samsungosp.com:8088/spp/pns/api/push"; + } else if (strncmp(reg_id, "03", 2) == 0) { + server_address = + "https://euwest.push.samsungosp.com:8088/spp/pns/api/push"; + } else if (strncmp(reg_id, "04", 2) == 0) { + server_address = + "https://apnortheast.push.samsungosp.com:8088/spp/pns/api/push"; + } else if (strncmp(reg_id, "05", 2) == 0) { + server_address = + "https://apkorea.push.samsungosp.com:8088/spp/pns/api/push"; + } else if (strncmp(reg_id, "06", 2) == 0) { + server_address = + "https://apchina.push.samsungosp.com.cn:8088/spp/pns/api/push"; + } else { + DBG("REG_ID has a wrong prefix"); + } + return server_address; +} + + +/** + * @function _curl_response_cb + * @since_tizen 2.3 + * @description Curl Response Cb + * @parameter char*: Char Pointer, void*: Void Pointer + * @return static size_t + */ +static size_t _curl_response_cb(char *ptr, size_t size, size_t nmemb, void *userdata) +{ + DBG("Inside _curl_response_cb"); + + push_view *this = NULL; + this = (push_view*)userdata; + RETVM_IF(NULL == this,0,"view is NULL"); + + elm_object_text_set(this->push_label, "Get Response from Server
Successfully"); + DBG("Response: %s", ptr); + return size*nmemb; +} + + +/** + * @function push_service_update_btn_state + * @since_tizen 2.3 + * @description Push Service Update Btn State + * @parameter void*: Void Pointer + * @return static void + */ +static void push_service_update_btn_state(void* user_data) +{ + DBG("Inside push_service_update_btn_state"); + + push_view *this = NULL; + this = (push_view*)user_data; + RETM_IF(NULL == this,"view is NULL"); + + switch(this->push_btn_state) + { + case CONNECTED_STATE: + { + elm_object_disabled_set(this->start_btn, EINA_TRUE); + elm_object_disabled_set(this->message_btn, EINA_FALSE); + elm_object_disabled_set(this->disconnect_btn, EINA_FALSE); + break; + } + case DISCONNECTED_STATE: + { + elm_object_disabled_set(this->start_btn, EINA_FALSE); + elm_object_disabled_set(this->message_btn, EINA_TRUE); + elm_object_disabled_set(this->disconnect_btn, EINA_TRUE); + DBG("DISCONNECTED STATE"); + break; + } + case DISABLED_STATE: + { + elm_object_disabled_set(this->start_btn, EINA_TRUE); + elm_object_disabled_set(this->message_btn, EINA_TRUE); + elm_object_disabled_set(this->disconnect_btn, EINA_TRUE); + break; + } + + } +} + + +/** + * @function push_service_get_error + * @since_tizen 2.3 + * @description Push Service Get Error + * @parameter int: Int + * @return static char* + */ +static char* push_service_get_error(int error_code) +{ + if (error_code == PUSH_SERVICE_ERROR_NONE) + { + return "PUSH_SERVICE_ERROR_NONE"; + } + else if (error_code == PUSH_SERVICE_ERROR_OUT_OF_MEMORY) + { + return "PUSH_SERVICE_ERROR_OUT_OF_MEMORY"; + } + else if (error_code == PUSH_SERVICE_ERROR_INVALID_PARAMETER) + { + return "PUSH_SERVICE_ERROR_INVALID_PARAMETER"; + } + else if (error_code == PUSH_SERVICE_ERROR_NOT_CONNECTED) + { + return "PUSH_SERVICE_ERROR_NOT_CONNECTED"; + } + else if (error_code == PUSH_SERVICE_ERROR_NO_DATA) + { + return "PUSH_SERVICE_ERROR_NO_DATA"; + } + else if (error_code == PUSH_SERVICE_ERROR_OPERATION_FAILED) + { + return "PUSH_SERVICE_ERROR_OPERATION_FAILED"; + } + else if (error_code == PUSH_SERVICE_ERROR_PERMISSION_DENIED) + { + return "PUSH_SERVICE_ERROR_PERMISSION_DENIED"; + } + else + { + return "Unknown ERROR"; + } + +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-runtimeinfo-view.c b/tbtcoreapp/src/view/tbt-runtimeinfo-view.c new file mode 100644 index 0000000..cb92507 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-runtimeinfo-view.c @@ -0,0 +1,234 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-runtimeinfo-view.c + * @brief retrieves runtime info + * + * @author A. B. M. Nazibullah(nazib.ullah@samsung.com) + * @date October, 2014 + * @bug none + * @credit + * + */ +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_RUNTIME + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-runtimeinfo-view.h" +#include "view/tbt-common-view.h" + +struct _runtimeinfo_view +{ + common_view* view; + + Evas_Object *info_label; +}; + +static void _app_destroy_cb(void* this); +void _runtime_info_changed_cb(runtime_info_key_e key, void *user_data); + + +/** + * @function get_runtime_info_error + * @since_tizen 2.3 + * @description Get Runtime Info Error + * @parameter int: Int + * @return char* + */ +char* get_runtime_info_error(int ret) +{ + char* err_msg = NULL; + switch (ret) { + case RUNTIME_INFO_ERROR_NONE: + err_msg = "RUNTIME_INFO_ERROR_NONE"; + break; + case RUNTIME_INFO_ERROR_INVALID_PARAMETER: + err_msg = "RUNTIME_INFO_ERROR_INVALID_PARAMETER"; + break; + case RUNTIME_INFO_ERROR_OUT_OF_MEMORY: + err_msg = "RUNTIME_INFO_ERROR_OUT_OF_MEMORY"; + break; + case RUNTIME_INFO_ERROR_IO_ERROR: + err_msg = "RUNTIME_INFO_ERROR_IO_ERROR"; + break; +#ifdef TIZEN_2_4 + case RUNTIME_INFO_ERROR_REMOTE_IO: + err_msg = "RUNTIME_INFO_ERROR_REMOTE_IO"; + break; +#endif + case RUNTIME_INFO_ERROR_PERMISSION_DENIED: + err_msg = "RUNTIME_INFO_ERROR_PERMISSION_DENIED"; + break; + case RUNTIME_INFO_ERROR_NOT_SUPPORTED: + err_msg = "RUNTIME_INFO_ERROR_NOT_SUPPORTED"; + break; + default: + err_msg = "Unknown Error"; + } + + return err_msg; +} + + +/** + * @function runtimeinfo_view_add + * @since_tizen 2.3 + * @description Runtimeinfo View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return runtimeinfo_view* + */ +runtimeinfo_view *runtimeinfo_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + int ret, value; + runtimeinfo_view *this = NULL; + this = calloc(1, sizeof(runtimeinfo_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "runtimeinfo_viewer"; + tbt_info->layout_file = get_edje_path("runtimeinfo_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, _runtime_info_changed_cb, this); + RETVM_IF(ret != RUNTIME_INFO_ERROR_NONE && ret != RUNTIME_INFO_ERROR_NOT_SUPPORTED, NULL, "runtime_info_set_changed_cb failed : %s", get_runtime_info_error(ret)); + + this->info_label = ui_utils_label_add(this->view->layout, "Latitude: "); + elm_label_line_wrap_set(this->info_label, ELM_WRAP_WORD); + + if(ret == RUNTIME_INFO_ERROR_NOT_SUPPORTED) + { + ui_utils_label_set_text(this->info_label, "Audio Jack is not supported", "left"); + elm_object_part_content_set(this->view->layout, "info_text", this->info_label); + return this; + } + + ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &value); + RETVM_IF(ret != RUNTIME_INFO_ERROR_NONE && ret != RUNTIME_INFO_ERROR_NOT_SUPPORTED, NULL, "runtime_info_get_value_int failed: %s",get_runtime_info_error(ret)); + if(ret == RUNTIME_INFO_ERROR_NOT_SUPPORTED) + { + ui_utils_label_set_text(this->info_label, "Audio Jack is not supported", "left"); + elm_object_part_content_set(this->view->layout, "info_text", this->info_label); + return this; + } + + DBG("value: %d", value); + +switch(value) +{ + case 0: + ui_utils_label_set_text(this->info_label, "Audio Jack Not connected", "left"); + break; + + case 1: + ui_utils_label_set_text(this->info_label, "Audio Jack Connected with 3 wire earjack", "left"); + break; + + case 2: + ui_utils_label_set_text(this->info_label, "Audio Jack Connected with 4 wire earjack", "left"); + break; + + default: + ui_utils_label_set_text(this->info_label, "Unknown status", "left"); + break; + + } + + + elm_object_part_content_set(this->view->layout, "info_text", this->info_label); + + + return this; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + + RETM_IF(NULL == this, "data is NULL"); + + runtimeinfo_view *view = NULL; + view = (runtimeinfo_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + + +/** + * @function _runtime_info_changed_cb + * @since_tizen 2.3 + * @description Runtime Info Changed Cb + * @parameter runtime_info_key_e: Runtime Info Key E, void*: Void Pointer + * @return void + */ +void _runtime_info_changed_cb(runtime_info_key_e key, void *user_data) +{ + + RETM_IF(NULL == user_data, "user_data is null"); + int ret, value; + runtimeinfo_view *this = NULL; + this = (runtimeinfo_view*) user_data; + + ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &value); + RETM_IF(ret != RUNTIME_INFO_ERROR_NONE && ret != RUNTIME_INFO_ERROR_NOT_SUPPORTED,"runtime_info_get_value_int failed :%s",get_runtime_info_error(ret)); + if(ret == RUNTIME_INFO_ERROR_NOT_SUPPORTED) + { + ui_utils_label_set_text(this->info_label, "Audio Jack is not supported", "left"); + return; + } + + DBG("value: %d", value); + +switch(value) +{ + case 0: + ui_utils_label_set_text(this->info_label, "Audio Jack Not connected", "left"); + break; + + case 1: + ui_utils_label_set_text(this->info_label, "Audio Jack Connected with 3 wire earjack", "left"); + break; + + case 2: + ui_utils_label_set_text(this->info_label, "Audio Jack Connected with 4 wire earjack", "left"); + break; + + default: + ui_utils_label_set_text(this->info_label, "Unknown status", "left"); + break; + } +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-sensor-view.c b/tbtcoreapp/src/view/tbt-sensor-view.c new file mode 100644 index 0000000..287b7d4 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-sensor-view.c @@ -0,0 +1,1762 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + +/** + * @file tbt-sensor-view.c + * @brief checks the sensors works or not + * @author A B M Nazibullah (nazib.ullah@samsung.com) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_SENSOR + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "utils/gl-utils.h" +#include "utils/color-utils.h" +#include "view/tbt-sensor-view.h" +#include "view/tbt-common-view.h" + + +#define GROUP_TITLE_LEN 64 +#define ITEM_TEXT_LEN 32 +#define SENSOR_INTERVAL 100 + +#ifdef DEVICE_TYPE_MOBILE +#ifdef TIZEN_2_4 + #define STYLE_ITEM_TITLE "group_index" + #define PART_TITLE "elm.text" +#else + #define STYLE_ITEM_TITLE "groupindex" + #define PART_TITLE "elm.text.main" +#endif +#define STYLE_ITEM_VALUE "1line" + +#define PART_LABEL "elm.text.main.left" +#define PART_VALUE "elm.text.sub.right" +#define PART_ICON "elm.icon.left" + +#else +#define STYLE_ITEM_TITLE "groupindex" +#define STYLE_ITEM_VALUE "default" + +#define PART_TITLE "elm.text" +#define PART_LABEL "elm.text" +#define PART_VALUE "elm.text" +#define PART_ICON "elm.swallow.icon" +#endif + + +static const int genlist_item_color[] = +{ + 0xffa050, + 0x50a0ff, + 0xa0ff50 +}; + +typedef struct +{ + Elm_Object_Item *obj_item; + int color; + const char *label; + float value; +} sensor_value_item; + +typedef struct +{ + Elm_Object_Item *obj_item; + float value; + sensor_extra_value *value_info; +} sensor_extra_value_item; + +struct _sensor_view +{ + common_view* view; + + Evas_Object *glview; + Evas_Object *genlist; + + sensor_value_item *value_items; + sensor_extra_value_item *extra_items; + + tbt_info *sensor_info; + sensor_listener_h sensor_listener; + + + GLfloat angle; + GLfloat gl_angle; + gl_vector3 gl_orientation; + color_shader shader; + GLboolean shader_ok; + GLboolean resize_ok; + Ecore_Timer *animation_timer; + Evas_Object *next_btn; + int gyro_current_state; + gl_vector4 gyro_back_color; + + Evas_Object *proximity_on_image; + Evas_Object *proximity_off_image; + Evas_Object *light_image; + Evas_Object *light_label; + Evas_Object *pressure_label; + + Evas_Object *ultraviolet_image; + Evas_Object *ultraviolet_label; + + Evas_Object *fork_x; + Evas_Object *fork_y; + Evas_Object *fork_z; + + int screen_width; + int screen_height; + + const char *file_path; + const char *extra_file_path; +}; + +#define GLVIEW_VIEW_DATA_NAME "gl_view_data" +#define VIEW_BG_COLOR 0.0f, 0.0f, 0.0f, 1.0f +#define ANIMATION_TIMER_INTERVAL_SEC 0.010f +#define PERSPECTIVE_FOV_DEG 40.0f +#define PERSPECTIVE_NEAR 1.0f +#define PERSPECTIVE_FAR 20.0f + +static const gl_vector3 CUBE_XYZ_POSITION = {{0.0f, 0.0f, -2.5f}}; + + +static int start_x = 0; +static int start_y = 0; +static int end_y = 50; +static int fork_height = 20; + +#define CUBE_ROTATE_START_ANGLE_DEG 0.0f +#define CUBE_ROTATE_STEP_ANGLE_DEG -5.0f + +#define CIRCLE_FULL_DEG 360.0f + +static const color_vertex3d CUBE_VERTEXES[] = +{ + {{{-0.5f, -0.5f, -0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + {{{-0.5f, -0.5f, 0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, -0.5f, 0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + {{{ 0.5f, -0.5f, -0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + + {{{-0.5f, 0.5f, -0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + {{{-0.5f, 0.5f, 0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + {{{ 0.5f, 0.5f, 0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, 0.5f, -0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + + {{{-0.5f, -0.5f, -0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + {{{-0.5f, 0.5f, -0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, 0.5f, -0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, -0.5f, -0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + + {{{-0.5f, -0.5f, 0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + {{{-0.5f, 0.5f, 0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, 0.5f, 0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + {{{ 0.5f, -0.5f, 0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + + {{{-0.5f, -0.5f, -0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + {{{-0.5f, -0.5f, 0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + {{{-0.5f, 0.5f, 0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + {{{-0.5f, 0.5f, -0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + + {{{ 0.5f, -0.5f, -0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}}, + {{{ 0.5f, -0.5f, 0.5f}}, {{1.0f, 0.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, 0.5f, 0.5f}}, {{0.0f, 1.0f, 0.0f, 1.0f}}}, + {{{ 0.5f, 0.5f, -0.5f}}, {{0.0f, 0.0f, 1.0f, 1.0f}}} +}; + +static const GLshort CUBE_INDICES[] = +{ + 0, 2, 1, + 0, 3, 2, + 4, 5, 6, + 4, 6, 7, + 8, 9, 10, + 8, 10, 11, + 12, 15, 14, + 12, 14, 13, + 16, 17, 18, + 16, 18, 19, + 20, 23, 22, + 20, 22, 21 +}; + +static const color_object3d CUBE_OBJECT3D = +{ + CUBE_VERTEXES, CUBE_INDICES, + sizeof(CUBE_INDICES) / sizeof(CUBE_INDICES[0]) +}; + +//opengl +static void gles_cube_view_del(sensor_view *this); +static Evas_Object *gles_cube_view_init(sensor_view *this); + +static Eina_Bool _gles_cube_view_timer_cb(void *data); +static void _gles_cube_view_glview_init_cb(Evas_Object *obj); +static void _gles_cube_view_glview_del_cb(Evas_Object *obj); +static void _gles_cube_view_glview_resize_cb(Evas_Object *obj); +static void _gles_cube_view_glview_render_cb(Evas_Object *obj); +static void _gles_cube_view_layout_free_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); + + +static void sensor_start(sensor_view *view); +static Evas_Object *genlist_create(sensor_view *this); +static void genlist_sensor_value_items_update(sensor_view *view, float *values); +static void genlist_sensor_extra_items_update(sensor_view *view, float *values); +static bool is_correct_sensor_values(sensor_event_s *sensor_data, const tbt_info *sensor_info); + +//genlist +static void genlist_title_append(sensor_view *view); +static void sensor_value_items_create(sensor_view *view); +static void sensor_value_items_prepare(sensor_view *view); +static void genlist_sensor_value_items_append(sensor_view *view); +static void genlist_sensor_value_extra_items_append(sensor_view *view); +static Elm_Object_Item *genlist_item_append(Evas_Object *genlist, Elm_Genlist_Item_Class *itc, void *item_data); + +static bool is_sensor_supported(sensor_view *view); + +static void _app_destroy_cb(void* this); +static void _genlist_title_del_cb(void *data, Evas_Object *obj); +static char *_genlist_title_get_cb(void *data, Evas_Object *obj, const char *part); +static char *_genlist_text_get_cb(void *data, Evas_Object *obj, const char *part); + +#ifndef DEVICE_TYPE_MOBILE +static char *_wearable_genlist_text_get_cb(void *data, Evas_Object *obj, const char *part); +#endif + +static char *_genlist_extra_text_get_cb(void *data, Evas_Object *obj, const char *part); +static Evas_Object *_genlist_content_get_cb(void *data, Evas_Object *obj, const char *part); + +static void _sensor_listener_cb(sensor_h sensor, sensor_event_s *sensor_data, void *user_data); +static void _sensor_view_transition_finished_cb(void *data, Evas_Object *obj, void *event_info); +static void create_control(sensor_view *this, char* btn_label); +static Evas_Object *add_control_layout(sensor_view *this, Evas_Object *parent); +static void _sensor_listener_accuracy_cb(sensor_h sensor, unsigned long long timestamp, sensor_data_accuracy_e accuracy, void *data); + +static void gyro_sensor_next_btn_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void get_screen_resolution(sensor_view *this); +static void rotate_image(Evas_Object* obj, float angle); +static float convert_magnatic_value(float value); +static float convert_pressure_value(float value); +static void get_current_sensor_data(sensor_view *view); + + +/** + * @function get_sensor_error + * @since_tizen 2.3 + * @description Get Sensor Error + * @parameter int: Int + * @return static char* + */ +static char* get_sensor_error(int ret) +{ + char * error = NULL; + + switch (ret) { + case SENSOR_ERROR_NONE: + error = "SENSOR_ERROR_NONE"; + break; + case SENSOR_ERROR_IO_ERROR: + error = "SENSOR_ERROR_IO_ERROR "; + break; + case SENSOR_ERROR_INVALID_PARAMETER: + error = "SENSOR_ERROR_INVALID_PARAMETER"; + break; + case SENSOR_ERROR_NOT_SUPPORTED: + error = "SENSOR_ERROR_NOT_SUPPORTED"; + break; + case SENSOR_ERROR_PERMISSION_DENIED: + error = "SENSOR_ERROR_PERMISSION_DENIED"; + break; + case SENSOR_ERROR_OUT_OF_MEMORY: + error = "SENSOR_ERROR_OUT_OF_MEMORY"; + break; + case SENSOR_ERROR_NOT_NEED_CALIBRATION: + error = "SENSOR_ERROR_NOT_NEED_CALIBRATION"; + break; + case SENSOR_ERROR_OPERATION_FAILED: + error = "SENSOR_ERROR_OPERATION_FAILED"; + break; + } + return error; +} + + +/** + * @function sensor_view_add + * @since_tizen 2.3 + * @description Sensor View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return sensor_view* + */ +sensor_view *sensor_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + DBG("Inside sensor_view_add"); + RETVM_IF(NULL == navi, NULL, "navi is null"); + + sensor_view *this = NULL; + this = calloc(1, sizeof(sensor_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + if (tbt_info->apptype == TBT_APP_SENSOR_PROXIMITY) + { + tbt_info->layout_group = "image_viewer"; + tbt_info->layout_file = get_edje_path("image_viewer.edj"); + + } + else if (tbt_info->apptype == TBT_APP_SENSOR_LIGHT) + { + tbt_info->layout_group = "light_sensor_viewer"; + tbt_info->layout_file = get_edje_path("sensor_viewer.edj"); + } + else if (tbt_info->apptype == TBT_APP_SENSOR_ULTRA_VIOLET) + { + tbt_info->layout_group = "ultra_violet_sensor_viewer"; + tbt_info->layout_file = get_edje_path("sensor_viewer.edj"); + } + + else if (tbt_info->apptype == TBT_APP_SENSOR_PRESSURE) + { + tbt_info->layout_group = "pressure_sensor_viewer"; + tbt_info->layout_file = get_edje_path("sensor_viewer.edj"); + } + + else if (tbt_info->apptype == TBT_APP_SENSOR_ACCELEROMETER) + { + tbt_info->layout_group = "accelerometer_sensor_viewer"; + tbt_info->layout_file = get_edje_path("sensor_viewer.edj"); + } + else if(tbt_info->apptype == TBT_APP_SENSOR_GYROSCOPE) + { + tbt_info->layout_group = "gyro_sensor_viewer"; + tbt_info->layout_file = get_edje_path("sensor_viewer.edj"); + + } + else if(tbt_info->apptype == TBT_APP_SENSOR_MAGNATOMETER) + { + tbt_info->layout_group = "magnatometer_sensor_viewer"; + tbt_info->layout_file = get_edje_path("sensor_viewer.edj"); + } + else + { + tbt_info->layout_group = "sensor_viewer"; + tbt_info->layout_file = get_edje_path("sensor_viewer.edj"); + } + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->sensor_info = this->view->tbt_info; + + if(is_sensor_supported(this) == false) + { + Evas_Object *popup = ui_utils_popup_add(this->view->navi, "Message"); + elm_object_text_set(popup, "Sensor is not supported"); + RETVM_IF(!this->view, NULL,"Sensor is not supported"); + + } + + if(this->sensor_info->apptype == TBT_APP_SENSOR_GYROSCOPE) + { + this->gyro_current_state = 1; + create_control(this, "Next"); + } + else if(this->sensor_info->apptype == TBT_APP_SENSOR_PROXIMITY) + { + + this->file_path = get_resource_path(this->view->tbt_info->extra_file_name); + this->proximity_off_image = ui_utils_create_image(this->view->layout, this->file_path); + RETVM_IF(NULL == this->proximity_off_image, false, "create of proximity_off_image failed"); + + DBG("File loaded successfull"); + + elm_object_part_content_set(this->view->layout, "image_view", this->proximity_off_image); + + this->light_label = ui_utils_label_add(this->view->layout, ""); + elm_object_part_content_set(this->view->layout, "text_view", this->light_label); + + } + + else if(this->sensor_info->apptype == TBT_APP_SENSOR_LIGHT) + { + get_screen_resolution(this); + Evas *evas = evas_object_evas_get(this->view->layout); + this->light_image = evas_object_rectangle_add(evas); + + evas_object_move(this->light_image, 0, 200); + evas_object_resize(this->light_image, this->screen_width, this->screen_height -400); + elm_object_part_content_set(this->view->layout, "image_view", this->light_image); + + this->light_label = ui_utils_label_add(this->view->layout, ""); + elm_object_part_content_set(this->view->layout, "text_view", this->light_label); + + } + + else if(this->sensor_info->apptype == TBT_APP_SENSOR_ULTRA_VIOLET) + { + get_screen_resolution(this); + Evas *evas = evas_object_evas_get(this->view->layout); + this->ultraviolet_image = evas_object_rectangle_add(evas); + + evas_object_move(this->ultraviolet_image, 0, 200); + evas_object_resize(this->ultraviolet_image, this->screen_width, this->screen_height -400); + elm_object_part_content_set(this->view->layout, "image_view", this->ultraviolet_image); + + this->ultraviolet_label = ui_utils_label_add(this->view->layout, ""); + elm_object_part_content_set(this->view->layout, "text_view", this->ultraviolet_label); + + } + + else if(this->sensor_info->apptype == TBT_APP_SENSOR_PRESSURE) + { + + get_screen_resolution(this); + + + int lx,ly,lw,lh; + evas_object_geometry_get(this->view->layout, &lx,&ly,&lw,&lh); + + start_y = ly+5; + end_y = start_y + lw*0.3*0.508009153; + fork_height = (end_y - start_y)*0.28; + + + this->file_path = get_resource_path(this->view->tbt_info->file_name); + + this->extra_file_path = get_resource_path(this->view->tbt_info->extra_file_name); + + Evas_Object *dial_y = ui_utils_create_image(this->view->layout, this->file_path); + RETVM_IF(NULL == dial_y, false, "create of dial_x failed"); + evas_object_move(dial_y, start_x+lw*0.33, start_y); + evas_object_resize(dial_y, lw*0.3, end_y - start_y); + + this->fork_y = ui_utils_create_image(this->view->layout, this->extra_file_path); + RETVM_IF(NULL == this->fork_y , false, "create of fork_y failed"); + evas_object_move(this->fork_y, start_x+lw*0.33, end_y - fork_height); + evas_object_resize(this->fork_y, lw*0.3, fork_height); + + rotate_image(this->fork_y, 0); + + this->pressure_label = ui_utils_label_add(this->view->layout, ""); + elm_object_part_content_set(this->view->layout, "text_view_label", this->pressure_label); + } + + + else if(this->sensor_info->apptype == TBT_APP_SENSOR_MAGNATOMETER) + { + get_screen_resolution(this); + + + int lx,ly,lw,lh; + evas_object_geometry_get(this->view->layout, &lx,&ly,&lw,&lh); + + start_y = ly+5; + end_y = start_y + lw*0.3*0.508009153; + fork_height = (end_y - start_y)*0.28; + + + this->file_path = get_resource_path(this->view->tbt_info->file_name); + + this->extra_file_path = get_resource_path(this->view->tbt_info->extra_file_name); + + + + Evas_Object *dial_x = ui_utils_create_image(this->view->layout, this->file_path); + RETVM_IF(NULL == dial_x, false, "create of dial_x failed"); + evas_object_move(dial_x, start_x, start_y); + evas_object_resize(dial_x, lw*0.3, end_y - start_y); + + Evas_Object *dial_y = ui_utils_create_image(this->view->layout, this->file_path); + RETVM_IF(NULL == dial_y, false, "create of dial_x failed"); + evas_object_move(dial_y, start_x+lw*0.33, start_y); + evas_object_resize(dial_y, lw*0.3, end_y - start_y); + + Evas_Object *dial_z = ui_utils_create_image(this->view->layout, this->file_path); + RETVM_IF(NULL == dial_z, false, "create of dial_x failed"); + evas_object_move(dial_z, start_x+lw*0.66, start_y); + evas_object_resize(dial_z, lw*0.3, end_y - start_y); + + this->fork_x = ui_utils_create_image(this->view->layout, this->extra_file_path); + RETVM_IF(NULL == this->fork_x , false, "create of fork_x failed"); + evas_object_move(this->fork_x, start_x, end_y - fork_height); + evas_object_resize(this->fork_x, lw*0.3, fork_height); + + this->fork_y = ui_utils_create_image(this->view->layout, this->extra_file_path); + RETVM_IF(NULL == this->fork_y , false, "create of fork_y failed"); + evas_object_move(this->fork_y, start_x+lw*0.33, end_y - fork_height); + evas_object_resize(this->fork_y, lw*0.3, fork_height); + + this->fork_z = ui_utils_create_image(this->view->layout, this->extra_file_path); + RETVM_IF(NULL == this->fork_z , false, "create of fork_z failed"); + evas_object_move(this->fork_z, start_x+lw*0.66, end_y - fork_height); + evas_object_resize(this->fork_z, lw*0.3, fork_height); + + rotate_image(this->fork_x, 90); + rotate_image(this->fork_y, 90); + rotate_image(this->fork_z, 90); + + + Evas_Object* label = elm_label_add(this->view->layout); + elm_object_text_set(label, " X "); + elm_object_part_content_set(this->view->layout, "image_view1", label); + + label = elm_label_add(this->view->layout); + elm_object_text_set(label, " Y "); + elm_object_part_content_set(this->view->layout, "image_view2", label); + + label = elm_label_add(this->view->layout); + elm_object_text_set(label, " Z "); + elm_object_part_content_set(this->view->layout, "image_view3", label); + + } + + this->glview = gles_cube_view_init(this); + if(this->glview == NULL) + { + gles_cube_view_del(this); + return NULL; + } + + this->genlist = genlist_create(this); + RETVM_IF(NULL == this->genlist, NULL, "genlist_create is null"); + + + + + sensor_value_items_create(this); + sensor_value_items_prepare(this); + + elm_object_part_content_set(this->view->layout, "gl_view", this->glview); + elm_object_part_content_set(this->view->layout, "value_view", this->genlist); + evas_object_smart_callback_add(this->view->navi, "transition,finished", _sensor_view_transition_finished_cb, this); + + return this; +} + + +/** + * @function sensor_start + * @since_tizen 2.3 + * @description Sensor Start + * @parameter sensor_view*: Sensor View Pointer + * @return static void + */ +static void sensor_start(sensor_view *view) +{ + RETM_IF(NULL == view, "view is NULL"); + + sensor_error_e err = SENSOR_ERROR_NONE; + err = sensor_create_listener(view->sensor_info->sensor, &view->sensor_listener); + RETM_IF(err != SENSOR_ERROR_NONE, "sensor_create_listener failed(%s)", get_sensor_error(err)); + RETM_IF(NULL == view->sensor_listener, "Sensor listener is NULL!"); + + err = sensor_listener_set_event_cb(view->sensor_listener, view->view->tbt_info->sensor_response_interval, _sensor_listener_cb, view); + RETM_IF(err != SENSOR_ERROR_NONE, "sensor_listener_set_event_cb failed(%s)", get_sensor_error(err)); + + err = sensor_listener_set_max_batch_latency(view->sensor_listener,200); + if(err != SENSOR_ERROR_NONE) + { + DBG("sensor_listener_set_max_batch_latency failed(%s)", get_sensor_error(err)); + } + + err = sensor_listener_start(view->sensor_listener); + RETM_IF(err != SENSOR_ERROR_NONE, "sensor_listener_start failed(%s)", get_sensor_error(err)); + + err = sensor_listener_set_accuracy_cb(view->sensor_listener,_sensor_listener_accuracy_cb,view); + RETM_IF(err != SENSOR_ERROR_NONE, "sensor_listener_set_accuracy_cb failed(%s)", get_sensor_error(err)); + + get_current_sensor_data(view); + +} + + +/** + * @function genlist_sensor_value_items_update + * @since_tizen 2.3 + * @description Genlist Sensor Value Items Update + * @parameter sensor_view*: Sensor View Pointer, float*: Float Pointer + * @return static void + */ +static void genlist_sensor_value_items_update(sensor_view *view, float *values) +{ + sensor_value_item *item = view->value_items; + sensor_value_item *end = item + view->sensor_info->value_count; + RETM_IF(!item, "item is NULL"); + + float *value = values; + bool update_chart = false; + + for(; item != end; ++item, ++value) + { + if(item->value != *value) + { + update_chart = true; + item->value = *value; + elm_genlist_item_fields_update(item->obj_item, PART_VALUE, ELM_GENLIST_ITEM_FIELD_TEXT); + } + } + + float fX, fY, fZ; + fX = values[0]; + fY = values[1]; + fZ = values[2]; + + double mag = sqrt(fX * fX + fY * fY + fZ * fZ); + fX /= mag; + fY /= mag; + fZ /= mag; + + float left[] = {fX, fY, fZ}; + float right[] = {0, 0, 1}; + if(view->sensor_info->apptype == TBT_APP_SENSOR_ACCELEROMETER) + { + view->gl_orientation.x = left[1] * right[2] - left[2] * right[1]; + view->gl_orientation.y = left[2] * right[0] - left[0] * right[2]; + view->gl_orientation.z = left[0] * right[1] - left[1] * right[0]; + view->gl_angle = (float)acos(left[0] * right[0] + left[1] * right[1] + left[2] * right[2]); + } + + else if(view->sensor_info->apptype == TBT_APP_SENSOR_GYROSCOPE) + { + float value; + value = 0.0f; + if (view->gyro_current_state == 1 || view->gyro_current_state == 2) { + value = values[2]; + } else if (view->gyro_current_state == 3 + || view->gyro_current_state == 4) { + value = values[1]; + } else { + value = values[0]; + } + float moving_amount = 10.0f; + bool is_positive = false; + view->gyro_back_color = + + +(gl_vector4) +{.r = 0.0f, .g = 0.0f, .b = 0.0f, .a = 1.0f}; + if (view->gyro_current_state % 2 != 0) { + is_positive = true; + } + + + if (value > moving_amount) { + if (is_positive) { + view->gyro_back_color = + + +(gl_vector4) +{.r = 0.0f, .g = 0.0f, .b = 1.0f, .a = 1.0f}; //pass //blue + } else { + view->gyro_back_color = + + +(gl_vector4) +{.r = 1.0f, .g = 0.0f, .b = 0.0f, .a = 1.0f}; //fail //red + } + } else if (value < -moving_amount) { + if (is_positive) { + view->gyro_back_color = + + +(gl_vector4) +{.r = 1.0f, .g = 0.0f, .b = 0.0f, .a = 1.0f};; //fail //red + } else { + view->gyro_back_color = + + +(gl_vector4) +{.r = 0.0f, .g = 0.0f, .b = 1.0f, .a = 1.0f};//pass blue + } + } else { + view->gyro_back_color = + + +(gl_vector4) +{.r = 0.0f, .g = 0.0f, .b = 0.0f, .a = 1.0f}; //none //black + } + + } + + else if(view->sensor_info->apptype == TBT_APP_SENSOR_PROXIMITY) + { + + float distance = values[0]; + DBG("Distance: %f %f %f ", distance, SENSOR_PROXIMITY_NEAR, SENSOR_PROXIMITY_FAR); + if(values[0] >= 1.0f) + { + const char *file_path; + + file_path = get_resource_path(view->view->tbt_info->file_name); + view->proximity_off_image = ui_utils_create_image(view->view->layout, file_path); + RETM_IF(NULL == view->proximity_off_image, "create of proximity_on_image failed"); + DBG("File loaded successfull"); + + elm_object_part_content_set(view->view->layout, "image_view", view->proximity_off_image); + + } + + if(values[0] == 0.0f) + { + const char *file_path; + + file_path = get_resource_path(view->view->tbt_info->extra_file_name); + view->proximity_on_image = ui_utils_create_image(view->view->layout, file_path); + RETM_IF(NULL == view->proximity_on_image, "create of proximity_on_image failed"); + DBG("File loaded successfull"); + + elm_object_part_content_set(view->view->layout, "image_view", view->proximity_on_image); + + } + + DBG("Image Changed successfully"); + + } + else if(view->sensor_info->apptype == TBT_APP_SENSOR_LIGHT) + { + + if(values[0] <1000) + { + evas_object_color_set(view->light_image, 255, 0, 0, (values[0]*150/1000)); + } + else + { + evas_object_color_set(view->light_image, 255, 0, 0, 150 + (values[0]*105/45875)); + } + + char label[512]; + snprintf(label, sizeof(label), "Ambient Light: %.0f Lux",values[0]); + elm_object_text_set(view->light_label, label); + evas_object_show(view->light_image); + + + + } + + else if(view->sensor_info->apptype == TBT_APP_SENSOR_ULTRA_VIOLET) + { + + + evas_object_color_set(view->ultraviolet_image, 49, 4, 60, values[0]*17); + + + char label[512]; + snprintf(label, sizeof(label), "UltraViolet Unit: %.1f ",values[0]); + elm_object_text_set(view->ultraviolet_label, label); + evas_object_show(view->ultraviolet_image); + + + + } + + else if(view->sensor_info->apptype == TBT_APP_SENSOR_PRESSURE) + { + + float y = convert_pressure_value(values[0]); + rotate_image(view->fork_y, y); + + char label[512]; + snprintf(label, sizeof(label), "Pressure: %.1f hPa",values[0]); + elm_object_text_set(view->pressure_label, label); + } + + else if(view->sensor_info->apptype == TBT_APP_SENSOR_MAGNATOMETER) + { + float x = convert_magnatic_value(values[0]); + float y = convert_magnatic_value(values[1]); + float z = convert_magnatic_value(values[2]); + rotate_image(view->fork_x, x); + rotate_image(view->fork_y, y); + rotate_image(view->fork_z, z); + } +} + + +/** + * @function genlist_sensor_extra_items_update + * @since_tizen 2.3 + * @description Genlist Sensor Extra Items Update + * @parameter sensor_view*: Sensor View Pointer, float*: Float Pointer + * @return static void + */ +static void genlist_sensor_extra_items_update(sensor_view *view, float *values) +{ + sensor_extra_value_item *item = view->extra_items; + sensor_extra_value_item *end = item + view->sensor_info->extra_value_count; + + for(; item != end; ++item) + { + if(item->value_info->value_get) + { + item->value = item->value_info->value_get(view->sensor_info, values); + elm_genlist_item_fields_update(item->obj_item, PART_VALUE, ELM_GENLIST_ITEM_FIELD_TEXT); + } + } +} + + +/** + * @function is_correct_sensor_values + * @since_tizen 2.3 + * @description Is Correct Sensor Values + * @parameter sensor_event_s*: Sensor Event S Pointer, const tbt_info*: Const tbt Info Pointer + * @return static bool + */ +static bool is_correct_sensor_values(sensor_event_s *sensor_data, const tbt_info *sensor_info) +{ + int i; + for(i = 0; i < sensor_data->value_count; ++i) + { + float value = sensor_data->values[i]; + + if(isnan(value) || + (value < sensor_info->value_min) || + (value > sensor_info->value_max)) + { + return false; + } + } + + return true; +} + + +/** + * @function genlist_create + * @since_tizen 2.3 + * @description Genlist Create + * @parameter sensor_view*: Sensor View Pointer + * @return static Evas_Object* + */ +static Evas_Object *genlist_create(sensor_view *this) +{ + Evas_Object *genlist = elm_genlist_add(this->view->layout); + RETVM_IF(!genlist, NULL, "elm_genlist_add failed"); + + evas_object_data_set(genlist, "view_data", this); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_FILL, 0.5); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(genlist); + return genlist; +} + + +/** + * @function sensor_value_items_create + * @since_tizen 2.3 + * @description Sensor Value Items Create + * @parameter sensor_view*: Sensor View Pointer + * @return static void + */ +static void sensor_value_items_create(sensor_view *view) +{ + view->value_items = calloc(view->sensor_info->value_count, sizeof(sensor_value_item)); + RETM_IF(!view->value_items, "calloc failed"); + + const int *color = genlist_item_color; + const char **name = view->sensor_info->value_names; + + sensor_value_item *item = view->value_items; + sensor_value_item *end = item + view->sensor_info->value_count; + for(; item != end; ++item, ++name, ++color) + { + item->label = *name; + item->color = *color; + } +} + + +/** + * @function sensor_value_items_prepare + * @since_tizen 2.3 + * @description Sensor Value Items Prepare + * @parameter sensor_view*: Sensor View Pointer + * @return static void + */ +static void sensor_value_items_prepare(sensor_view *this) +{ + genlist_title_append(this); + genlist_sensor_value_extra_items_append(this); + genlist_sensor_value_items_append(this); +} + + +/** + * @function genlist_title_append + * @since_tizen 2.3 + * @description Genlist Title Append + * @parameter sensor_view*: Sensor View Pointer + * @return static void + */ +static void genlist_title_append(sensor_view *view) +{ + Elm_Genlist_Item_Class *title_itc = elm_genlist_item_class_new(); + #ifdef DEVICE_TYPE_MOBILE + title_itc->item_style = "group_index"; + #else + title_itc->item_style = STYLE_ITEM_TITLE; + #endif + title_itc->func.text_get = _genlist_title_get_cb; + title_itc->func.del = _genlist_title_del_cb; + + char title[GROUP_TITLE_LEN] = { '\0' }; + char format[GROUP_TITLE_LEN] = { '\0' }; + snprintf(format, sizeof(format), "Value Range: %s%s ~ %s%s", + view->sensor_info->value_format, view->sensor_info->units_str, + view->sensor_info->value_format, view->sensor_info->units_str); + + snprintf(title, sizeof(title), format, view->sensor_info->value_min, view->sensor_info->value_max); + + genlist_item_append(view->genlist, title_itc, (void *) strdup(title)); +} + + +/** + * @function genlist_sensor_value_extra_items_append + * @since_tizen 2.3 + * @description Genlist Sensor Value Extra Items Append + * @parameter sensor_view*: Sensor View Pointer + * @return static void + */ +static void genlist_sensor_value_extra_items_append(sensor_view *view) +{ + Elm_Genlist_Item_Class *extra_itc = elm_genlist_item_class_new(); + extra_itc->item_style = STYLE_ITEM_VALUE; + extra_itc->func.text_get = _genlist_extra_text_get_cb; + + sensor_extra_value_item *item = view->extra_items; + sensor_extra_value_item *end = item + view->sensor_info->extra_value_count; + + for(; item != end; ++item) + { + item->obj_item = genlist_item_append(view->genlist, extra_itc, item); + } + + elm_genlist_item_class_free(extra_itc); +} + + +/** + * @function genlist_sensor_value_items_append + * @since_tizen 2.3 + * @description Genlist Sensor Value Items Append + * @parameter sensor_view*: Sensor View Pointer + * @return static void + */ +static void genlist_sensor_value_items_append(sensor_view *view) +{ + Elm_Genlist_Item_Class *value_itc = elm_genlist_item_class_new(); + value_itc->item_style = STYLE_ITEM_VALUE; + + #ifdef DEVICE_TYPE_MOBILE + value_itc->func.text_get = _genlist_text_get_cb; + //FIXME: This should be done as line above but this for 2.3.1 + //value_itc->func.text_get = _wearable_genlist_text_get_cb; + #else + value_itc->func.text_get = _wearable_genlist_text_get_cb; + #endif + + if(view->sensor_info->value_count > 1) + { + value_itc->func.content_get = _genlist_content_get_cb; + } + + sensor_value_item *item = view->value_items; + sensor_value_item *end = item + view->sensor_info->value_count; + + for(; item != end; ++item) + { + item->obj_item = genlist_item_append(view->genlist, value_itc, item); + } + + elm_genlist_item_class_free(value_itc); +} + + +/** + * @function genlist_item_append + * @since_tizen 2.3 + * @description Genlist Item Append + * @parameter Evas_Object*: Evas Object Pointer, Elm_Genlist_Item_Class*: Elm Genlist Item Class Pointer, void*: Void Pointer + * @return static Elm_Object_Item* + */ +static Elm_Object_Item *genlist_item_append(Evas_Object *genlist, Elm_Genlist_Item_Class *itc, void *item_data) +{ + Elm_Object_Item *obj_item; + obj_item = elm_genlist_item_append(genlist, itc, item_data, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + elm_genlist_item_select_mode_set(obj_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); + return obj_item; +} + + +/** + * @function _genlist_title_get_cb + * @since_tizen 2.3 + * @description Genlist Title Get Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return static char* + */ +static char *_genlist_title_get_cb(void *data, Evas_Object *obj, const char *part) +{ + if(strcmp(part, PART_TITLE) == 0) + { + return strdup(data); + } + else + { + return NULL; + } +} + + +/** + * @function _genlist_title_del_cb + * @since_tizen 2.3 + * @description Genlist Title Del Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer + * @return static void + */ +static void _genlist_title_del_cb(void *data, Evas_Object *obj) +{ + free(data); +} + + +/** + * @function _genlist_text_get_cb + * @since_tizen 2.3 + * @description Genlist Text Get Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return static char* + */ +static char *_genlist_text_get_cb(void *data, Evas_Object *obj, const char *part) +{ + sensor_value_item *item = data; + RETVM_IF(!item, NULL, "item is NULL"); + + if(strcmp(part, PART_LABEL) == 0) + { + RETVM_IF(!item->label, NULL, "label is NULL"); + return strdup(item->label); + } + else if(strcmp(part, PART_VALUE) == 0) + { + sensor_view *view = evas_object_data_get(obj, "view_data"); + RETVM_IF(!view, NULL, "view is NULL"); + + char buffer[ITEM_TEXT_LEN] = { '\0' }; + snprintf(buffer, sizeof(buffer), view->sensor_info->value_format, item->value); + return strdup(buffer); + } + else + { + return NULL; + } +} + +#ifndef DEVICE_TYPE_MOBILE + +/** + * @function _wearable_genlist_text_get_cb + * @since_tizen 2.3 + * @description Wearable Genlist Text Get Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return static char* + */ +static char *_wearable_genlist_text_get_cb(void *data, Evas_Object *obj, const char *part) +{ + sensor_value_item *item = data; + RETVM_IF(!item, NULL, "item is NULL"); + + if(strcmp(part, PART_VALUE) == 0) + { + sensor_view *view = evas_object_data_get(obj, "view_data"); + RETVM_IF(!view, NULL, "view is NULL"); + + char buffer[ITEM_TEXT_LEN] = { '\0' }; + char format[ITEM_TEXT_LEN] = { '\0' }; + + snprintf(format, sizeof(format), "%s: %s", "\%s",view->sensor_info->value_format); + //DBG("format : %s", format); + snprintf(buffer, sizeof(buffer), format, item->label, item->value); + return strdup(buffer); + } + else + { + return NULL; + } +} +#endif + + +/** + * @function _genlist_extra_text_get_cb + * @since_tizen 2.3 + * @description Genlist Extra Text Get Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return static char* + */ +static char *_genlist_extra_text_get_cb(void *data, Evas_Object *obj, const char *part) +{ + sensor_extra_value_item *item = data; + RETVM_IF(!item, NULL, "item is NULL"); + + if(strcmp(part, PART_LABEL) == 0) + { + RETVM_IF(!item->value_info->name, NULL, "name is NULL"); + return strdup(item->value_info->name); + } + else if(strcmp(part, PART_VALUE) == 0) + { + char buffer[ITEM_TEXT_LEN] = { '\0' }; + snprintf(buffer, sizeof(buffer), item->value_info->format, item->value); + return strdup(buffer); + } + else + { + return NULL; + } +} + + +/** + * @function _genlist_content_get_cb + * @since_tizen 2.3 + * @description Genlist Content Get Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, const char*: Const char Pointer + * @return static Evas_Object* + */ +static Evas_Object *_genlist_content_get_cb(void *data, Evas_Object *obj, const char *part) +{ + sensor_value_item *item = data; + RETVM_IF(!item, NULL, "item is NULL"); + + if(strcmp(part, PART_ICON) == 0) + { + Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj)); + evas_object_color_set(rect, RGB(item->color), 255); + + //for wearable + evas_object_size_hint_min_set(rect, 50, 50); + evas_object_size_hint_max_set(rect, 50, 50); + + return rect; + } + + return NULL; +} + + +/** + * @function gles_cube_view_init + * @since_tizen 2.3 + * @description Gles Cube View Init + * @parameter sensor_view*: Sensor View Pointer + * @return static Evas_Object* + */ +static Evas_Object *gles_cube_view_init(sensor_view *this) +{ + RETVM_IF(!this, NULL, "this is NULL"); + + this->angle = CUBE_ROTATE_START_ANGLE_DEG; + this->gl_angle = CUBE_ROTATE_START_ANGLE_DEG; + this->gl_orientation.x = 0; + this->gl_orientation.y = 0; + this->gl_orientation.z = 1; + + Evas_Object *layout = elm_glview_add(this->view->navi); + RETVM_IF(!layout, NULL, "Failed to create elm_glview") + + evas_object_data_set(layout, GLVIEW_VIEW_DATA_NAME, this); + evas_object_event_callback_add(layout, EVAS_CALLBACK_FREE, _gles_cube_view_layout_free_cb, this); + + elm_glview_mode_set(layout, ELM_GLVIEW_DEPTH); + elm_glview_init_func_set(layout, _gles_cube_view_glview_init_cb); + elm_glview_del_func_set(layout, _gles_cube_view_glview_del_cb); + elm_glview_resize_func_set(layout, _gles_cube_view_glview_resize_cb); + elm_glview_render_func_set(layout, _gles_cube_view_glview_render_cb); + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(layout); + + this->animation_timer = ecore_timer_add(ANIMATION_TIMER_INTERVAL_SEC, _gles_cube_view_timer_cb, this); + + return layout; +} + + +/** + * @function _gles_cube_view_glview_init_cb + * @since_tizen 2.3 + * @description Gles Cube View Glview Init Cb + * @parameter Evas_Object*: Evas Object Pointer + * @return static void + */ +static void _gles_cube_view_glview_init_cb(Evas_Object *obj) +{ + sensor_view *view = evas_object_data_get(obj, GLVIEW_VIEW_DATA_NAME); + RETM_IF(!view, "View data is NULL"); + Evas_GL_API *gl_api = elm_glview_gl_api_get(obj); + RETM_IF(!gl_api, "GL API is NULL"); + + view->shader_ok = color_shader_init(&view->shader, gl_api); + RETM_IF(!view->shader_ok, "Shader initialisation failed"); + + gl_api->glClearColor(VIEW_BG_COLOR); + gl_api->glEnable(GL_DEPTH_TEST); +} + + +/** + * @function _gles_cube_view_glview_del_cb + * @since_tizen 2.3 + * @description Gles Cube View Glview Del Cb + * @parameter Evas_Object*: Evas Object Pointer + * @return static void + */ +static void _gles_cube_view_glview_del_cb(Evas_Object *obj) +{ + sensor_view *view = evas_object_data_get(obj, GLVIEW_VIEW_DATA_NAME); + RETM_IF(!view, "View data is NULL"); + Evas_GL_API *gl_api = elm_glview_gl_api_get(obj); + RETM_IF(!gl_api, "GL API is NULL"); + + color_shader_finalize(&view->shader, gl_api); +} + + +/** + * @function _gles_cube_view_glview_resize_cb + * @since_tizen 2.3 + * @description Gles Cube View Glview Resize Cb + * @parameter Evas_Object*: Evas Object Pointer + * @return static void + */ +static void _gles_cube_view_glview_resize_cb(Evas_Object *obj) +{ + sensor_view *view = evas_object_data_get(obj, GLVIEW_VIEW_DATA_NAME); + RETM_IF(!view, "View data is NULL"); + RETM_IF(!view->shader_ok, "Shader is not initialised"); + Evas_GL_API *gl_api = elm_glview_gl_api_get(obj); + RETM_IF(!gl_api, "GL API is NULL"); + + Evas_Coord width = 0, height = 0; + elm_glview_size_get(obj, &width, &height); + RETM_IF((width == 0) || (height == 0), "Zero size."); + + gl_api->glViewport(0, 0, width, height); + + gl_matrix4 matrix; + gl_matrix4_load_perspective(&matrix, PERSPECTIVE_FOV_DEG, + (GLfloat)width / (GLfloat)height, + PERSPECTIVE_NEAR, PERSPECTIVE_FAR); + + color_shader_activate(&view->shader, gl_api); + color_shader_load_p(&view->shader, gl_api, &matrix); + color_shader_deactivate(&view->shader, gl_api); + + view->resize_ok = GL_TRUE; +} + + +/** + * @function _gles_cube_view_glview_render_cb + * @since_tizen 2.3 + * @description Gles Cube View Glview Render Cb + * @parameter Evas_Object*: Evas Object Pointer + * @return static void + */ +static void _gles_cube_view_glview_render_cb(Evas_Object *obj) +{ + sensor_view *view; + view = evas_object_data_get(obj, GLVIEW_VIEW_DATA_NAME); + RETM_IF(!view, "View data is NULL"); + RETM_IF(!view->resize_ok, "Viewport is not ready"); + + Evas_GL_API *gl_api = elm_glview_gl_api_get(obj); + RETM_IF(!gl_api, "GL API is NULL"); + + gl_matrix4 matrix; + gl_matrix4_load_identity(&matrix); + + if(view->sensor_info->apptype == TBT_APP_SENSOR_ACCELEROMETER) + { + gl_matrix4_translate(&matrix, CUBE_XYZ_POSITION); + gl_matrix4_rotate(&matrix, view->gl_angle * 180 / 3.1415927, view->gl_orientation); + } + else if(view->sensor_info->apptype == TBT_APP_SENSOR_GYROSCOPE) + { + + gl_api->glClearColor(view->gyro_back_color.r, view->gyro_back_color.g, view->gyro_back_color.b, view->gyro_back_color.a); + gl_matrix4_translate(&matrix, CUBE_XYZ_POSITION); + + view->gl_angle = ((int)view->gl_angle+2)%(360*3); + + gl_matrix4_rotate(&matrix, view->gl_angle, view->gl_orientation); + } + + gl_api->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + color_shader_activate(&view->shader, gl_api); + color_shader_load_mv(&view->shader, gl_api, &matrix); + color_object3d_draw(&CUBE_OBJECT3D, gl_api); + color_shader_deactivate(&view->shader, gl_api); +} + + +/** + * @function gles_cube_view_del + * @since_tizen 2.3 + * @description Gles Cube View Del + * @parameter sensor_view*: Sensor View Pointer + * @return static void + */ +static void gles_cube_view_del(sensor_view *this) +{ + if(this->animation_timer) + { + ecore_timer_del(this->animation_timer); + } +} + + +/** + * @function _gles_cube_view_timer_cb + * @since_tizen 2.3 + * @description Gles Cube View Timer Cb + * @parameter void*: Void Pointer + * @return static Eina_Bool + */ +static Eina_Bool _gles_cube_view_timer_cb(void *data) +{ + RETVM_IF(!data, EINA_TRUE, "data is NULL"); + + sensor_view *this = NULL; + this = (sensor_view*)data; + RETVM_IF(NULL == this, false, "view is NULL"); + + elm_glview_changed_set(this->glview); + + return EINA_TRUE; +} + + +/** + * @function _gles_cube_view_layout_free_cb + * @since_tizen 2.3 + * @description Gles Cube View Layout Free Cb + * @parameter void*: Void Pointer, Evas*: Evas Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _gles_cube_view_layout_free_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + RETM_IF(!data, "data is NULL"); + + sensor_view *this = NULL; + this = (sensor_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + this->glview = NULL; // NULL the layout so we do not delete it twice in _gles_cube_view_del() + gles_cube_view_del(this); // Delete self when layout is deleted by parent object +} + + +/** + * @function _sensor_listener_accuracy_cb + * @since_tizen 2.3 + * @description Sensor Listener Accuracy Cb + * @parameter sensor_h: Sensor H, void*: Void Pointer + * @return static void + */ +static void _sensor_listener_accuracy_cb(sensor_h sensor, unsigned long long timestamp, sensor_data_accuracy_e accuracy, void *data) +{ + +switch(accuracy) +{ + case SENSOR_DATA_ACCURACY_UNDEFINED: + DBG("Sensor accuracy : SENSOR_DATA_ACCURACY_UNDEFINED"); + break; + case SENSOR_DATA_ACCURACY_BAD: + DBG("Sensor accuracy : SENSOR_DATA_ACCURACY_BAD"); + break; + case SENSOR_DATA_ACCURACY_NORMAL: + DBG("Sensor accuracy : SENSOR_DATA_ACCURACY_NORMAL"); + break; + case SENSOR_DATA_ACCURACY_GOOD: + DBG("Sensor accuracy : SENSOR_DATA_ACCURACY_GOOD"); + break; + case SENSOR_DATA_ACCURACY_VERYGOOD: + DBG("Sensor accuracy : SENSOR_DATA_ACCURACY_VERYGOOD"); + break; + } +} + + +/** + * @function _sensor_listener_cb + * @since_tizen 2.3 + * @description Sensor Listener Cb + * @parameter sensor_h: Sensor H, sensor_event_s*: Sensor Event S Pointer, void*: Void Pointer + * @return static void + */ +static void _sensor_listener_cb(sensor_h sensor, sensor_event_s *sensor_data, void *data) +{ + sensor_view *view = NULL; + view = (sensor_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + int value_count = sensor_data->value_count; + RETM_IF(!sensor_data, "sensor_data is NULL"); + + if(value_count != view->sensor_info->value_count) + { + } + + if(!is_correct_sensor_values(sensor_data, view->sensor_info)) + { + } + + genlist_sensor_value_items_update(view, sensor_data->values); + genlist_sensor_extra_items_update(view, sensor_data->values); +} + + +/** + * @function _sensor_view_transition_finished_cb + * @since_tizen 2.3 + * @description Sensor View Transition Finished Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _sensor_view_transition_finished_cb(void *data, Evas_Object *obj, void *event_info) +{ + sensor_view *view = NULL; + view = (sensor_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + sensor_start(view); + evas_object_smart_callback_del(view->view->navi, "transition,finished", _sensor_view_transition_finished_cb); +} + + +/** + * @function is_sensor_supported + * @since_tizen 2.3 + * @description Is Sensor Supported + * @parameter sensor_view*: Sensor View Pointer + * @return static bool + */ +static bool is_sensor_supported(sensor_view *view) +{ + bool supported; + sensor_type_e type = SENSOR_CUSTOM; + + if(view->view->tbt_info->apptype == TBT_APP_SENSOR_ACCELEROMETER) + { + type = SENSOR_ACCELEROMETER; + } + else if(view->view->tbt_info->apptype == TBT_APP_SENSOR_GYROSCOPE) + { + type = SENSOR_GYROSCOPE; + } + else if(view->view->tbt_info->apptype == TBT_APP_SENSOR_PROXIMITY) + { + type = SENSOR_PROXIMITY; + } + else if(view->view->tbt_info->apptype == TBT_APP_SENSOR_LIGHT) + { + type = SENSOR_LIGHT; + } + else if(view->view->tbt_info->apptype == TBT_APP_SENSOR_MAGNATOMETER) + { + type = SENSOR_MAGNETIC; + } + else if(view->view->tbt_info->apptype == TBT_APP_SENSOR_PRESSURE) + { + type = SENSOR_PRESSURE; + } + else if(view->view->tbt_info->apptype == TBT_APP_SENSOR_ULTRA_VIOLET) + { + type= SENSOR_ULTRAVIOLET; + } + int ret = sensor_is_supported(type, &supported); + RETVM_IF(SENSOR_ERROR_NONE!=ret, false,"sensor_is_supported failed: %s",get_sensor_error(ret)); + + return supported; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + sensor_error_e err = SENSOR_ERROR_NONE; + + RETM_IF(NULL == this, "data is NULL"); + + sensor_view *view = NULL; + view = (sensor_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + gles_cube_view_del(view); + + if(is_sensor_supported(view) == false) + { + view->view->tbt_info->result = TBT_INFO_RESULT_NOT_SUPPORTED; + elm_genlist_item_update(view->view->item); + } + + err = sensor_listener_unset_accuracy_cb(view->sensor_listener); + RETM_IF(err != SENSOR_ERROR_NONE, "sensor_listener_unset_accuracy_cb failed:%s", get_sensor_error(err)); + + err = sensor_listener_unset_event_cb(view->sensor_listener); + RETM_IF(err != SENSOR_ERROR_NONE, "sensor_listener_unset_event_cb failed:%s", get_sensor_error(err)); + + err = sensor_listener_stop(view->sensor_listener); + RETM_IF(err != SENSOR_ERROR_NONE, "sensor_listener_stop failed:%s", get_sensor_error(err)); + + err = sensor_destroy_listener(view->sensor_listener); + RETM_IF(err != SENSOR_ERROR_NONE, "sensor_destroy_listener failed:%s", get_sensor_error(err)); + + free(view->value_items); + + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + + +/** + * @function create_control + * @since_tizen 2.3 + * @description Create Control + * @parameter sensor_view*: Sensor View Pointer, char*: Char Pointer + * @return static void + */ +static void create_control(sensor_view *this, char* btn_label) +{ + DBG("Inside sensor create_control"); + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "btn_viewyz", control); + elm_object_text_set(this->next_btn, btn_label); +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter sensor_view*: Sensor View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(sensor_view *this, Evas_Object *parent) +{ + DBG("Inside sensor add_control_layout"); + RETVM_IF(NULL == this, NULL, "view is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + + + this->next_btn = ui_utils_push_button_add(this, table, "Next", gyro_sensor_next_btn_pressed_cb); + elm_table_pack(table, this->next_btn, 0, 0, 1, 1); + + return table; +} + + +/** + * @function gyro_sensor_next_btn_pressed_cb + * @since_tizen 2.3 + * @description Gyro Sensor Next Btn Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void gyro_sensor_next_btn_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("Inside gyro_sensor_next_btn_pressed_cb"); + + sensor_view *this = NULL; + this = (sensor_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + this->gyro_current_state++; + if (this->gyro_current_state > 6) { + this->gyro_current_state = 1; + } + + DBG("Gyro Sensor Current State: %d", this->gyro_current_state); + switch (this->gyro_current_state) { + case 1: + this->gl_orientation.x = 0.0f; + this->gl_orientation.y = 0.0f; + this->gl_orientation.z = 1.0f; + break; + case 2: + this->gl_orientation.x = 0.0f; + this->gl_orientation.y = 0.0f; + this->gl_orientation.z = -1.0f; + break; + case 3: + this->gl_orientation.x = 0.0f; + this->gl_orientation.y = 1.0f; + this->gl_orientation.z = 0.0f; + break; + case 4: + this->gl_orientation.x = 0.0f; + this->gl_orientation.y = -1.0f; + this->gl_orientation.z = 0.0f; + break; + case 5: + this->gl_orientation.x = 1.0f; + this->gl_orientation.y = 0.0f; + this->gl_orientation.z = 0.0f; + break; + case 6: + this->gl_orientation.x = -1.0f; + this->gl_orientation.y = 0.0f; + this->gl_orientation.z = 0.0f; + break; + default: + break; + } + + +} + + +/** + * @function get_screen_resolution + * @since_tizen 2.3 + * @description Get Screen Resolution + * @parameter sensor_view*: Sensor View Pointer + * @return static void + */ +static void get_screen_resolution(sensor_view *this) +{ + int ret; + ret = system_info_get_platform_int("tizen.org/feature/screen.width", &this->screen_width); + RETM_IF(SENSOR_ERROR_NONE != ret, "system_info_get_platform_int failed:%s", get_sensor_error(ret)); + RETM_IF(this->screen_width <= 0, "screen_width in negative or zero"); + + ret = system_info_get_platform_int("tizen.org/feature/screen.height", &this->screen_height); + RETM_IF(SENSOR_ERROR_NONE != ret, "system_info_get_platform_int failed:%s", get_sensor_error(ret)); + RETM_IF(this->screen_height <= 0, "screen_height in negative or zero"); +} + + +/** + * @function rotate_image + * @since_tizen 2.3 + * @description Rotate Image + * @parameter Evas_Object*: Evas Object Pointer + * @return static void + */ +static void rotate_image(Evas_Object* obj, float angle) +{ +DBG("Inside rotate_image %f", angle); + int x,y,w,h; + evas_object_geometry_get(obj, &x, &y, &w, &h); + Evas_Map *m = evas_map_new(4); + evas_map_util_points_populate_from_object(m, obj); + evas_map_util_rotate(m, angle, x + (w / 2), y + (h / 2)); + evas_object_map_set(obj, m); + evas_object_map_enable_set(obj, EINA_TRUE); + evas_map_free(m); + +} + + +/** + * @function convert_magnatic_value + * @since_tizen 2.3 + * @description Convert Magnatic Value + * @parameter float: Float + * @return static float + */ +static float convert_magnatic_value(float value) +{ + + float val = 0.0f; + + + val= 90+value*2; + + if(val > 180) + { + val = 180; + } + else if(val < 0) + { + val = 0; + } + return val; +} + + +/** + * @function convert_pressure_value + * @since_tizen 2.3 + * @description Convert Pressure Value + * @parameter float: Float + * @return static float + */ +static float convert_pressure_value(float value) +{ + + return (value-260)*0.18; +} + + +/** + * @function get_current_sensor_data + * @since_tizen 2.3 + * @description Get Current Sensor Data + * @parameter sensor_view*: Sensor View Pointer + * @return static void + */ +static void get_current_sensor_data(sensor_view *view) +{ + sensor_event_s event; + int ret = sensor_listener_read_data(view->sensor_listener, &event); + RETM_IF(SENSOR_ERROR_NONE != ret, "sensor_listener_read_data failed:%s", get_sensor_error(ret)); + genlist_sensor_value_items_update(view, event.values); + genlist_sensor_extra_items_update(view, event.values); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-shortcut-view.c b/tbtcoreapp/src/view/tbt-shortcut-view.c new file mode 100644 index 0000000..d8ed4aa --- /dev/null +++ b/tbtcoreapp/src/view/tbt-shortcut-view.c @@ -0,0 +1,272 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-shortcut-view.c + * @brief create shortcut of application in home screen + * + * + * @author Md Nazmus Saqib (saqib.nzms@samsung.com) and salman rahman(salman.ran) + * @date October, 2014 + * @bug Do not show icon and name of shortcut + * @credit + * + */ +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_SHORTCUT + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-shortcut-view.h" +#include "view/tbt-common-view.h" + +struct _shortcut_view +{ + common_view* view; + + GList *devices_list; + + Evas_Object *action_btn; + Evas_Object *shortcut_label; + Evas_Object *cBox_label; + Evas_Object *cBox; + Evas_Object *cBox2; + Eina_Bool state; + +}; + +static Evas_Object *add_control_layout(shortcut_view *this, Evas_Object *parent); +static void _app_destroy_cb(void* this); +static void _control_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static int _result_cb(int ret, void *data); +char* get_shortcut_error(int err); + + +/** + * @function shortcut_view_add + * @since_tizen 2.3 + * @description Shortcut View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return shortcut_view* + */ +shortcut_view *shortcut_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + + + RETVM_IF(NULL == navi, NULL, "navi is null"); + + shortcut_view *this = NULL; + this = calloc(1, sizeof(shortcut_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "shortcut_viewer"; + tbt_info->layout_file = get_edje_path("shortcut_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->shortcut_label = ui_utils_label_add(this->view->layout, ""); + elm_object_part_content_set(this->view->layout, "shortcut_text", this->shortcut_label); + + this->cBox_label = ui_utils_label_add(this->view->layout, "Allow duplicate"); + elm_object_part_content_set(this->view->layout, "shortcut_body", this->cBox_label); + + this->cBox = elm_check_add(this->view->layout); + evas_object_resize(this->cBox, 20, 20); + elm_check_state_set(this->cBox, EINA_FALSE); + elm_object_text_set(this->cBox , "Allow duplicate"); + elm_check_state_pointer_set(this->cBox, NULL); + elm_object_part_content_set(this->view->layout, "shortcut_body2", this->cBox); + this->state = elm_check_state_get(this->cBox); + + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + + return this; +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter shortcut_view*: Shortcut View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(shortcut_view *this, Evas_Object *parent) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + + elm_table_padding_set(table, TABLE_PADDING_HORIZONTAL, TABLE_PADDING_VERTICAL); + + this->action_btn = ui_utils_push_button_add(this, table, "Add shortcut", _control_button_pressed_cb); + elm_table_pack(table, this->action_btn, 1, 0, 1, 1); + + return table; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + shortcut_view *view = NULL; + view = (shortcut_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + + +/** + * @function _control_button_pressed_cb + * @since_tizen 2.3 + * @description Control Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _control_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("Inside _control_button_pressed_cb"); + + RETM_IF(NULL == data, "data is NULL"); + + shortcut_view *this = NULL; + this = (shortcut_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + int result; + char* name = "new shortcut"; + char* icon = (char*)get_shared_resource_path("tbtcoreapp.png"); + int allow_duplicate; + + if(elm_check_state_get(this->cBox) == EINA_TRUE){ + allow_duplicate = 1; + } + else + allow_duplicate = 0; + + result = shortcut_add_to_home(name, LAUNCH_BY_APP, NULL, icon, allow_duplicate, _result_cb, this); + + if(result == 0) + { + ui_utils_label_set_text(this->shortcut_label, "Creating shortcut...", "left"); + DBG("2"); + } + else + ui_utils_label_set_text(this->shortcut_label, "Shortcut api failed!", "left"); + + DBG("icon path = %s",icon); + DBG("Inside shortcut_add_to_home %s, allow_duplicate = %d, result = %d, %s", get_shortcut_error(result), allow_duplicate, result, get_error_message(result)); +} + +char* get_shortcut_error(int err){ + + char* error; + + switch(err){ + + case SHORTCUT_ERROR_NONE: + error = "SHORTCUT_ERROR_NONE"; + break; + case SHORTCUT_ERROR_INVALID_PARAMETER: + error = "SHORTCUT_ERROR_INVALID_PARAMETER"; + break; + case SHORTCUT_ERROR_OUT_OF_MEMORY: + error = "SHORTCUT_ERROR_OUT_OF_MEMORY"; + break; + case SHORTCUT_ERROR_IO_ERROR: + error = "SHORTCUT_ERROR_IO_ERROR"; + break; + case SHORTCUT_ERROR_PERMISSION_DENIED: + error = "SHORTCUT_ERROR_PERMISSION_DENIED"; + break; + case SHORTCUT_ERROR_NOT_SUPPORTED: + error = "SHORTCUT_ERROR_NOT_SUPPORTED"; + break; + case SHORTCUT_ERROR_RESOURCE_BUSY: + error = "SHORTCUT_ERROR_RESOURCE_BUSY"; + break; + case SHORTCUT_ERROR_NO_SPACE: + error = "SHORTCUT_ERROR_NO_SPACE"; + break; + case SHORTCUT_ERROR_EXIST: + error = "SHORTCUT_ERROR_EXIST"; + break; + case SHORTCUT_ERROR_FAULT: + error = "SHORTCUT_ERROR_FAULT"; + break; + case SHORTCUT_ERROR_COMM: + error = "SHORTCUT_ERROR_COMM"; + break; + default: + error = "UNKNOWN"; + break; + } + return error; +} + + +/** + * @function _result_cb + * @since_tizen 2.3 + * @description Result Cb + * @parameter int: Int, void*: Void Pointer + * @return static int + */ +static int _result_cb(int ret, void *data) +{ + DBG("Inside _result_cb"); + DBG("result is %d %s", ret,get_error_message(ret)); + + shortcut_view *this = NULL; + this = (shortcut_view*)data; + + if(ret == 0) + { + ui_utils_label_set_text(this->shortcut_label, "Shortcut Created", "left"); + DBG("1"); + } + else + ui_utils_label_set_text(this->shortcut_label, "Unable to create shortcut", "left"); + + return ret; + + } + +#endif diff --git a/tbtcoreapp/src/view/tbt-sound-view.c b/tbtcoreapp/src/view/tbt-sound-view.c new file mode 100644 index 0000000..f9d41dd --- /dev/null +++ b/tbtcoreapp/src/view/tbt-sound-view.c @@ -0,0 +1,710 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-sound-view.c + * @brief This view provide the Apps tested the sound playing capability of the device and the volume functionality. + * + * @author Golam Kayas (g.kayes@samsung.com) + * @date October, 2014 + * @bug NA + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_AUDIO + +#include +#include + + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-sound-view.h" +#include "view/tbt-common-view.h" + +struct _sound_view +{ + common_view* view; + + bool play; + player_h player; + + Evas_Object *volume_bar; + Evas_Object *audio_icon; + + Evas_Object *play_btn; + Evas_Object *stop_btn; + Evas_Object *pause_btn; +}; + + + +static void start_player(sound_view *this); +static void stop_player(sound_view *this); +static void pause_player(sound_view *this); + + +static void destroy_player(sound_view *this); +static player_h create_player(sound_view *this); + +static void update_view_controls(sound_view *this); + +static Evas_Object *add_control_layout(sound_view *this, Evas_Object *parent); +static void disable_control_button(sound_view *this, bool play, bool pause, bool stop); + +static void _app_destroy_cb(void* this); +static void _start_player_cb(void *data, Evas_Object *obj, void *event_info); +static void _stop_player_cb(void *data, Evas_Object *obj, void *event_info); +static void _pause_player_cb(void *data, Evas_Object *obj, void *event_info); +static void _slider_drag_stop_cb(void *data, Evas_Object *obj, void *event_info); +static void _slider_changed_cb(void *data, Evas_Object *obj, void *event_info); +static void _sound_manager_volume_changed_cb(sound_type_e type, unsigned int volume, void *data); +static void _player_interrupted_cb(player_interrupted_code_e code, void *user_data); +static void _on_app_pause_resume_cb(bool resume); + +static bool was_playing; +static sound_view *view; + + +/** + * @function get_sound_manager_error + * @since_tizen 2.3 + * @description Get Sound Manager Error + * @parameter int: Int + * @return static char* + */ +static char* get_sound_manager_error(int ret) +{ + char* err_msg = NULL; + switch (ret) { + case SOUND_MANAGER_ERROR_NONE: + err_msg = "SOUND_MANAGER_ERROR_NONE"; + break; + case SOUND_MANAGER_ERROR_OUT_OF_MEMORY: + err_msg = "SOUND_MANAGER_ERROR_OUT_OF_MEMORY"; + break; + case SOUND_MANAGER_ERROR_INVALID_PARAMETER: + err_msg = "SOUND_MANAGER_ERROR_INVALID_PARAMETER"; + break; + case SOUND_MANAGER_ERROR_INVALID_OPERATION: + err_msg = "SOUND_MANAGER_ERROR_INVALID_OPERATION"; + break; + case SOUND_MANAGER_ERROR_PERMISSION_DENIED: + err_msg = "SOUND_MANAGER_ERROR_PERMISSION_DENIED"; + break; + case SOUND_MANAGER_ERROR_NOT_SUPPORTED: + err_msg = "SOUND_MANAGER_ERROR_NOT_SUPPORTED"; + break; + case SOUND_MANAGER_ERROR_NO_DATA: + err_msg = "SOUND_MANAGER_ERROR_NO_DATA"; + break; + case SOUND_MANAGER_ERROR_INTERNAL: + err_msg = "SOUND_MANAGER_ERROR_INTERNAL"; + break; + case SOUND_MANAGER_ERROR_POLICY: + err_msg = "SOUND_MANAGER_ERROR_POLICY"; + break; + case SOUND_MANAGER_ERROR_NO_PLAYING_SOUND: + err_msg = "SOUND_MANAGER_ERROR_NO_PLAYING_SOUND"; + break; + default: + err_msg = "Unknown Error"; + break; + } + return err_msg; +} + + +/** + * @function get_player_error + * @since_tizen 2.3 + * @description Get Player Error + * @parameter int: Int + * @return char* + */ +char* get_player_error(int ret) +{ + char* error; + +switch(ret) +{ + case PLAYER_ERROR_NONE: + error = "PLAYER_ERROR_NONE "; + break; + case PLAYER_ERROR_OUT_OF_MEMORY: + error = "PLAYER_ERROR_OUT_OF_MEMORY"; + break; + case PLAYER_ERROR_INVALID_PARAMETER: + error = "PLAYER_ERROR_INVALID_PARAMETER"; + break; + case PLAYER_ERROR_NO_SUCH_FILE: + error = "PLAYER_ERROR_NO_SUCH_FILE "; + break; + case PLAYER_ERROR_INVALID_OPERATION: + error = "PLAYER_ERROR_INVALID_OPERATION"; + break; + case PLAYER_ERROR_FILE_NO_SPACE_ON_DEVICE: + error = "PLAYER_ERROR_FILE_NO_SPACE_ON_DEVICE "; + break; + case PLAYER_ERROR_FEATURE_NOT_SUPPORTED_ON_DEVICE: + error = "PLAYER_ERROR_FEATURE_NOT_SUPPORTED_ON_DEVICE "; + break; + case PLAYER_ERROR_SEEK_FAILED: + error = "PLAYER_ERROR_SEEK_FAILED "; + break; + case PLAYER_ERROR_INVALID_STATE: + error = "PLAYER_ERROR_INVALID_STATE"; + break; + case PLAYER_ERROR_NOT_SUPPORTED_FILE: + error = "PLAYER_ERROR_NOT_SUPPORTED_FIL"; + break; + case PLAYER_ERROR_INVALID_URI: + error = "PLAYER_ERROR_INVALID_URI "; + break; + case PLAYER_ERROR_SOUND_POLICY: + error = "PLAYER_ERROR_SOUND_POLICY "; + break; + case PLAYER_ERROR_CONNECTION_FAILED: + error = "PLAYER_ERROR_CONNECTION_FAILED"; + break; + case PLAYER_ERROR_VIDEO_CAPTURE_FAILED: + error = "PLAYER_ERROR_VIDEO_CAPTURE_FAILED "; + break; + case PLAYER_ERROR_DRM_EXPIRED: + error = "PLAYER_ERROR_DRM_EXPIRED "; + break; + case PLAYER_ERROR_DRM_NO_LICENSE: + error = "PLAYER_ERROR_DRM_NO_LICENSE"; + break; + case PLAYER_ERROR_DRM_FUTURE_USE: + error = "PLAYER_ERROR_DRM_FUTURE_USE"; + break; + case PLAYER_ERROR_DRM_NOT_PERMITTED: + error = "PLAYER_ERROR_DRM_NOT_PERMITTED"; + break; + case PLAYER_ERROR_RESOURCE_LIMIT: + error = "PLAYER_ERROR_RESOURCE_LIMIT "; + break; + case PLAYER_ERROR_PERMISSION_DENIED: + error = "PLAYER_ERROR_PERMISSION_DENIED"; + break; + default: + error = "Unknown error"; + } + return error; +} + + +/** + * @function _player_interrupted_cb + * @since_tizen 2.3 + * @description Player Interrupted Cb + * @parameter player_interrupted_code_e: Player Interrupted Code E, void*: Void Pointer + * @return static void + */ +static void _player_interrupted_cb(player_interrupted_code_e code, void *user_data) +{ + RETM_IF(NULL == user_data, "navi is null"); + DBG("Inside _player_interrupted_cb"); +} + + +/** + * @function _on_app_pause_resume_cb + * @since_tizen 2.3 + * @description On App Pause Resume Cb + * @parameter bool: Bool + * @return static void + */ +static void _on_app_pause_resume_cb(bool resume) +{ + if(resume) + { + DBG("Inside Resume %d",was_playing); + if(was_playing) + { + start_player(view); + DBG("Player started again"); + } + } + else + { + DBG("Inside Pause"); + player_state_e state; + player_get_state ( view->player, &state); + if(state == PLAYER_STATE_PLAYING) + { + was_playing = true; + pause_player(view); + DBG("Player paused %d",was_playing); + } + } +} + + +/** + * @function sound_view_add + * @since_tizen 2.3 + * @description Sound View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return sound_view* + */ +sound_view *sound_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + sound_view *this = NULL; + int ret; + this = calloc(1, sizeof(sound_view)); + RETVM_IF(!this, NULL, "calloc failed"); + view = this; + _tbt_pause_resume_cb = _on_app_pause_resume_cb; + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "sound_player"; + tbt_info->layout_file = get_edje_path("sound_player.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->audio_icon = ui_utils_create_image(this->view->layout, get_resource_path("images/audio-icon.png")); + RETVM_IF(NULL == this->audio_icon, false, "create of layout elements failed"); + elm_object_part_content_set(this->view->layout, "icon_view", this->audio_icon); + + if(this->view->tbt_info->apptype == TBT_APP_SOUND_VOLUME) + { + this->volume_bar = ui_utils_progressbar_add(this, this->view->layout, _slider_drag_stop_cb, _slider_changed_cb); + RETVM_IF(NULL == this->volume_bar, false, "create of volume bar elements failed"); + elm_object_part_content_set(this->view->layout, "progressbar", this->volume_bar); + elm_object_disabled_set(this->volume_bar, EINA_FALSE); + } + + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + + + ret = sound_manager_set_volume_changed_cb(_sound_manager_volume_changed_cb, this); + RETVM_IF(SOUND_MANAGER_ERROR_NONE!=ret, NULL, "sound_manager_set_volume_changed_cb failed :%s",get_sound_manager_error(ret)); + + update_view_controls(this); + + return this; +} + + +/** + * @function update_view_controls + * @since_tizen 2.3 + * @description Update View Controls + * @parameter sound_view*: Sound View Pointer + * @return static void + */ +static void update_view_controls(sound_view *this) +{ + RETM_IF(NULL == this, "this is NULL"); +} + + +/** + * @function start_player + * @since_tizen 2.3 + * @description Start Player + * @parameter sound_view*: Sound View Pointer + * @return static void + */ +static void start_player(sound_view *this) +{ + int ret; + RETM_IF(NULL == this, "this is NULL"); + + if(!this->player) + { + this->player = create_player(this); + } + + if(this->player) + { + player_state_e state; + ret = player_get_state(this->player, &state); + RETM_IF(PLAYER_ERROR_NONE!=ret, "player_get_state failed:%s", get_player_error(ret)); + + if(state != PLAYER_STATE_PLAYING) + { + ret = player_set_display_visible(this->player, true); + RETM_IF(PLAYER_ERROR_NONE!=ret, "player_set_display_visible failed:%s", get_player_error(ret)); + ret = player_start(this->player); + RETM_IF(PLAYER_ERROR_NONE!=ret, "player_start failed:%s", get_player_error(ret)); + + } + } +} + + +/** + * @function stop_player + * @since_tizen 2.3 + * @description Stop Player + * @parameter sound_view*: Sound View Pointer + * @return static void + */ +static void stop_player(sound_view *this) +{ + int ret; + RETM_IF(NULL == this, "this is NULL"); + + if(this->player) + { + player_state_e state; + ret = player_get_state(this->player, &state); + RETM_IF(PLAYER_ERROR_NONE!=ret, "player_get_state failed:%s", get_player_error(ret)); + if(state == PLAYER_STATE_PLAYING || state == PLAYER_STATE_PAUSED) + { + ret = player_stop(this->player); + RETM_IF(PLAYER_ERROR_NONE!=ret, "player_stop failed:%s", get_player_error(ret)); + ret = player_set_display_visible(this->player, false); + RETM_IF(PLAYER_ERROR_NONE!=ret, "player_set_display_visible failed:%s", get_player_error(ret)); + } + } +} + + +/** + * @function pause_player + * @since_tizen 2.3 + * @description Pause Player + * @parameter sound_view*: Sound View Pointer + * @return static void + */ +static void pause_player(sound_view *this) +{ + int ret; + RETM_IF(NULL == this, "this is NULL"); + + if(this->player) + { + player_state_e state; + ret = player_get_state(this->player, &state); + RETM_IF(PLAYER_ERROR_NONE!=ret, "player_get_state failed:%s", get_player_error(ret)); + if(state == PLAYER_STATE_PLAYING) + { + ret = player_pause(this->player); + RETM_IF(PLAYER_ERROR_NONE!=ret, "player_pause failed:%s", get_player_error(ret)); + } + } +} + + +/** + * @function destroy_player + * @since_tizen 2.3 + * @description Destroy Player + * @parameter sound_view*: Sound View Pointer + * @return static void + */ +static void destroy_player(sound_view *this) +{ + RETM_IF(NULL == this, "view is NULL"); + int ret; + if(this->player) + { + ret = player_unset_interrupted_cb( this->player); + DBG("player_unset_interrupted_cb failed: %s", get_player_error(ret)); + player_state_e state; + player_get_state(this->player, &state); + if(state != PLAYER_STATE_READY) + { + ret = player_stop(this->player); + RETM_IF(PLAYER_ERROR_NONE!=ret, "player_stop failed:%s", get_player_error(ret)); + } + ret = player_unprepare(this->player); + RETM_IF(PLAYER_ERROR_NONE!=ret, "player_unprepare failed:%s", get_player_error(ret)); + ret = player_destroy(this->player); + RETM_IF(PLAYER_ERROR_NONE!=ret, "player_destroy failed:%s", get_player_error(ret)); + this->player = NULL; + } +} + + +/** + * @function create_player + * @since_tizen 2.3 + * @description Create Player + * @parameter sound_view*: Sound View Pointer + * @return static player_h + */ +static player_h create_player(sound_view *this) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + + player_h player = NULL; + + int ret ; + + ret = player_create(&player); + RETVM_IF(ret != PLAYER_ERROR_NONE, NULL, "player_create fail > Error = %s", get_player_error(ret)); + RETVM_IF(player == NULL, NULL, "player_create fail"); + + ret = player_set_sound_type(player, SOUND_TYPE_MEDIA); + if(ret != PLAYER_ERROR_NONE) + { + DBG( "player_set_sound_type fail > Error = %s", get_player_error(ret)); + } + + ret = player_set_volume(player, 1.0, 1.0); + if(ret != PLAYER_ERROR_NONE) + { + DBG( "player_set_volume fail > Error = %s", get_player_error(ret)); + } + + ret = player_set_looping(player, true); + if(ret != PLAYER_ERROR_NONE) + { + DBG( "player_set_looping fail > Error = %s", get_player_error(ret)); + } + + ret = player_set_interrupted_cb(player, _player_interrupted_cb, this); + if(ret != PLAYER_ERROR_NONE) + { + DBG( "player_set_looping fail > Error = %s", get_player_error(ret)); + } + + ret = player_set_uri(player, get_resource_path(this->view->tbt_info->file_name)); + if(ret != PLAYER_ERROR_NONE) + { + DBG( "player_set_uri fail > Error = %s", get_player_error(ret)); + } + ret = player_set_display_visible(player, true); + if(ret != PLAYER_ERROR_NONE) + { + DBG( "player_set_display_visible fail > Error = %s", get_player_error(ret)); + } + ret = player_prepare(player); + if(ret != PLAYER_ERROR_NONE) + { + DBG( "player_prepare fail > Error = %s", get_player_error(ret)); + } + + return player; +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter sound_view*: Sound View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(sound_view *this, Evas_Object *parent) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + +#ifdef DEVICE_TYPE_MOBILE + elm_table_padding_set(table, TABLE_PADDING_HORIZONTAL, TABLE_PADDING_VERTICAL); +#endif + + this->play_btn = ui_utils_push_button_add(this, table, "Play", _start_player_cb); + elm_table_pack(table, this->play_btn, 0, 0, 1, 1); + + this->pause_btn = ui_utils_push_button_add(this, table, "Pause", _pause_player_cb); + elm_table_pack(table, this->pause_btn, 1, 0, 1, 1); + + this->stop_btn = ui_utils_push_button_add(this, table, "Stop", _stop_player_cb); + elm_table_pack(table, this->stop_btn, 2, 0, 1, 1); + + disable_control_button(this, false, true, true); + + return table; +} + + +/** + * @function disable_control_button + * @since_tizen 2.3 + * @description Disable Control Button + * @parameter sound_view*: Sound View Pointer + * @return static void + */ +static void disable_control_button(sound_view *this, bool play, bool pause, bool stop) +{ + RETM_IF(NULL == this, "view is NULL"); + + elm_object_disabled_set(this->play_btn, play); + elm_object_disabled_set(this->pause_btn, pause); + elm_object_disabled_set(this->stop_btn, stop); +} + + +/** + * @function _start_player_cb + * @since_tizen 2.3 + * @description Start Player Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _start_player_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + sound_view *view = NULL; + view = (sound_view*)data; + RETM_IF(NULL == view, "view is NULL"); + start_player(view); + disable_control_button(view, true, false, false); +} + + +/** + * @function _stop_player_cb + * @since_tizen 2.3 + * @description Stop Player Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _stop_player_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + sound_view *view = NULL; + view = (sound_view*)data; + RETM_IF(NULL == view, "view is NULL"); + stop_player(view); + disable_control_button(view, false, true, true); +} + + +/** + * @function _pause_player_cb + * @since_tizen 2.3 + * @description Pause Player Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _pause_player_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + sound_view *view = NULL; + view = (sound_view*)data; + RETM_IF(NULL == view, "view is NULL"); + pause_player(view); + + disable_control_button(view, false, true, false); +} + + +/** + * @function _slider_drag_stop_cb + * @since_tizen 2.3 + * @description Slider Drag Stop Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _slider_drag_stop_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + sound_view *view = NULL; + view = (sound_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + double val = elm_slider_value_get(obj); + player_set_volume(view->player, val, val); +} + + +/** + * @function _slider_changed_cb + * @since_tizen 2.3 + * @description Slider Changed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _slider_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + int ret; + RETM_IF(NULL == data, "data is NULL"); + + sound_view *view = NULL; + view = (sound_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + double val = elm_slider_value_get(obj); + ret = player_set_volume(view->player, val, val); + RETM_IF(ret != PLAYER_ERROR_NONE, "player_set_volume fail > Error = %s", get_player_error(ret)); +} + + +/** + * @function _sound_manager_volume_changed_cb + * @since_tizen 2.3 + * @description Sound Manager Volume Changed Cb + * @parameter sound_type_e: Sound Type E, void*: Void Pointer + * @return static void + */ +static void _sound_manager_volume_changed_cb(sound_type_e type, unsigned int volume, void *data) +{ + int ret; + RETM_IF(NULL == data, "data is NULL"); + + sound_view *view = NULL; + view = (sound_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + int max; + ret = sound_manager_get_max_volume (SOUND_TYPE_MEDIA, &max); + RETM_IF(ret != SOUND_MANAGER_ERROR_NONE, "sound_manager_get_max_volume fail > Error = %s", get_sound_manager_error(ret)); + RETM_IF(max <= 0, "sound_manager_get_max_volume fail"); + + float f_volume = (float)(volume / (float)max); + elm_slider_value_set(view->volume_bar, f_volume); + ret = player_set_volume(view->player, f_volume, f_volume); + RETM_IF(ret != PLAYER_ERROR_NONE, "player_set_volume fail > Error = %s", get_player_error(ret)); +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + sound_view *view = NULL; + view = (sound_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + destroy_player(view); + + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-touch-view.c b/tbtcoreapp/src/view/tbt-touch-view.c new file mode 100644 index 0000000..809f449 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-touch-view.c @@ -0,0 +1,335 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ +/** + * @file tbt-touch-view.c + * @brief covers touch point implementation + * draws line following the starting and ending point on the screen + * + * @author Muntasir Kabir (mk.chy@samsung.com) + * @date October, 2014 + * @bug no known bug + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_TOUCH + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-touch-view.h" +#include "view/tbt-common-view.h" + +struct _touch_view +{ + common_view* view; + + int width; + int height; + + Evas_Object* label; + Evas_Object* canvas; + + // List of mouse spots + Eina_List *spots; + + // Flag for checking the mouse down event + Eina_Bool down; +}; + + +static void clear_spots(touch_view *this); +static void get_screen_resolution(touch_view *this); +static bool is_inside_canvas(touch_view *this, int x, int y); +static Evas_Object *create_spot(Evas_Object *parent, Evas_Coord x, Evas_Coord y, int size); + +static void _app_destroy_cb(void* this); +static void _mouse_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); +static void _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); +static void _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); + + +/** + * @function touch_view_add + * @since_tizen 2.3 + * @description Touch View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return touch_view* + */ +touch_view *touch_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + RETVM_IF(NULL == tbt_info, NULL, "tbt_info is null"); + + touch_view *this = NULL; + this = calloc(1, sizeof(touch_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + this->down = false; + tbt_info->layout_group = "touch_viewer"; + tbt_info->layout_file = get_edje_path("touch_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + get_screen_resolution(this); + + this->label = ui_utils_label_add(this->view->layout, ""); + ui_utils_label_set_text(this->label, "Clear: ", "left"); + elm_object_part_content_set(this->view->layout, "cursor_text", this->label); + + Evas *evas; + evas = evas_object_evas_get(this->view->layout); + this->canvas = evas_object_rectangle_add(evas); + elm_object_part_content_set(this->view->layout, "touch_view", this->canvas); + evas_object_size_hint_weight_set(this->canvas, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(this->canvas, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_color_set(this->canvas, 255, 255, 255, 255); + evas_object_repeat_events_set(this->canvas, EINA_TRUE); + evas_object_show(this->canvas); + + evas_object_event_callback_add(this->canvas, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, this); + evas_object_event_callback_add(this->canvas, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, this); + evas_object_event_callback_add(this->canvas, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, this); + + return this; +} + + +/** + * @function get_screen_resolution + * @since_tizen 2.3 + * @description Get Screen Resolution + * @parameter touch_view*: Touch View Pointer + * @return static void + */ +static void get_screen_resolution(touch_view *this) +{ + RETM_IF(NULL == this, "touch_view is NULL"); + int res; + res = system_info_get_platform_int("tizen.org/feature/screen.width", &this->width); + RETM_IF(res != 0, "tizen.org/feature/screen.width"); + RETM_IF(this->width < 0, "width cannot be less than zero"); + res = system_info_get_platform_int("tizen.org/feature/screen.height", &this->height); + RETM_IF(res != 0, "tizen.org/feature/screen.height"); + RETM_IF(this->height < 0, "height cannot be less than zero"); +} + + +/** + * @function create_spot + * @since_tizen 2.3 + * @description Create Spot + * @parameter Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *create_spot(Evas_Object *parent, Evas_Coord x, Evas_Coord y, int size) +{ + RETVM_IF(NULL == parent, NULL, "parent is NULL"); + + Evas_Object *spot; + spot = evas_object_rectangle_add(evas_object_evas_get(parent)); + evas_object_resize(spot, size, size); + + // Adjust x, y positions to be center of object + evas_object_move(spot, x - (size/2), y - (size/2)); + evas_object_show(spot); + return spot; +} + + +/** + * @function clear_spots + * @since_tizen 2.3 + * @description Clear Spots + * @parameter touch_view*: Touch View Pointer + * @return static void + */ +static void clear_spots(touch_view *this) +{ + Evas_Object *spot; + + EINA_LIST_FREE(this->spots, spot) + { + evas_object_del(spot); + spot = NULL; + } + + ui_utils_label_set_text(this->label, "Clear: ", "left"); +} + + +/** + * @function is_inside_canvas + * @since_tizen 2.3 + * @description Is Inside Canvas + * @parameter touch_view*: Touch View Pointer + * @return static bool + */ +static bool is_inside_canvas(touch_view *this, int x, int y) +{ + + return true; +} + + +/** + * @function _mouse_up_cb + * @since_tizen 2.3 + * @description Mouse Up Cb + * @parameter void*: Void Pointer, Evas*: Evas Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _mouse_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + touch_view *this = NULL; + this = (touch_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + Evas_Event_Mouse_Move *ev = event_info; + Evas_Coord x = ev->cur.canvas.x; + Evas_Coord y = ev->cur.canvas.y; + + if(this->down == true && + is_inside_canvas(this, x, y)) + { + char buf[1024]; + Evas_Object *spot; + + this->down = false; + int size = (int) 10 * elm_config_scale_get(); + + snprintf(buf, sizeof(buf), "Mouse Up, %d, %d", x, y); + ui_utils_label_set_text(this->label, buf, "left"); + + // Draw spot on event position + spot = create_spot(this->canvas, x, y, size); + evas_object_color_set(spot, 255, 0, 0, 255); + this->spots= eina_list_append(this->spots, spot); + } +} + + +/** + * @function _mouse_down_cb + * @since_tizen 2.3 + * @description Mouse Down Cb + * @parameter void*: Void Pointer, Evas*: Evas Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + touch_view *this = NULL; + this = (touch_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + clear_spots(this); + + Evas_Event_Mouse_Move *ev = event_info; + Evas_Coord x = ev->cur.canvas.x; + Evas_Coord y = ev->cur.canvas.y; + + if(this->down == false && + is_inside_canvas(this, x, y)) + { + char buf[1024]; + Evas_Object *spot; + + this->down = true; + int size = (int) 10 * elm_config_scale_get(); + + snprintf(buf, sizeof(buf), "Mouse Down, %d, %d", x, y); + ui_utils_label_set_text(this->label, buf, "left"); + + // Draw spot on event position + spot = create_spot(this->canvas, x, y, size); + evas_object_color_set(spot, 0, 255, 0, 255); + this->spots= eina_list_append(this->spots, spot); + } +} + + +/** + * @function _mouse_move_cb + * @since_tizen 2.3 + * @description Mouse Move Cb + * @parameter void*: Void Pointer, Evas*: Evas Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + touch_view *this = NULL; + this = (touch_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + Evas_Event_Mouse_Move *ev = event_info; + Evas_Coord x = ev->cur.canvas.x; + Evas_Coord y = ev->cur.canvas.y; + + if(this->down == true && + is_inside_canvas(this, x, y)) + { + char buf[1024]; + Evas_Object *spot; + + int size = (int) 5 * elm_config_scale_get(); + snprintf(buf, sizeof(buf), "Mouse Move, %d, %d", x, y); + ui_utils_label_set_text(this->label, buf, "left"); + + // Draw spot on event position + spot = create_spot(this->canvas, x, y, size); + evas_object_color_set(spot, 0, 0, 255, 255); + this->spots= eina_list_append(this->spots, spot); + } +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + touch_view *view = NULL; + view = (touch_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + clear_spots(view); + evas_object_del(view->canvas); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-ui-view.c b/tbtcoreapp/src/view/tbt-ui-view.c new file mode 100644 index 0000000..b1b2678 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-ui-view.c @@ -0,0 +1,421 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-ui-view.c + * @brief This view provide the apps to taste the UI resize, shape, drawable, alpha and font features of the elm APIs + * + * @author Muntasir Kabir (mk.chy@samsung.com) + * @date October, 2014 + * @bug No known bug. + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_UI + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-ui-view.h" +#include "view/tbt-common-view.h" + +struct _ui_view +{ + common_view* view; + + int x; + int y; + + int alpha; + int width; + int height; + int rotation; + + int x_pad; + int y_pad; + int screen_width; + int screen_height; + int toolbar_height; + + Ecore_Timer *timer; + Evas_Object *ui_element; + Evas_Object* image_rect; +}; + +static void set_rotation(ui_view *this); +static void calc_coordinate(ui_view *this); +static void get_screen_resolution(ui_view *this); + + +static void _app_destroy_cb(void* this); +static Eina_Bool _ui_view_timer_cb(void *data); + + +/** + * @function ui_view_add + * @since_tizen 2.3 + * @description Ui View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return ui_view* + */ +ui_view *ui_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + RETVM_IF(NULL == tbt_info, NULL, "tbt_info is null"); + ui_view *this = NULL; + this = calloc(1, sizeof(ui_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "ui_viewer"; + tbt_info->layout_file = get_edje_path("ui_viewer.edj"); + + common_view* view = common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!view, NULL, "common_view_add failed"); + + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->x = 0; + this->y = 0; + + this->alpha = 255; + this->width = 0; + this->height = 0; + this->rotation = 0; + + this->x_pad = 50; + this->y_pad = 50; + this->toolbar_height = NAVI_TOOLBAR_HEIGHT; + + get_screen_resolution(this); + + this->screen_height = this->screen_height - 2 * this->toolbar_height; + + if(this->view->tbt_info->apptype == TBT_APP_UI_RESIZE) + { + calc_coordinate(this); + + this->ui_element = elm_image_add(this->view->layout); + elm_image_file_set(this->ui_element, get_resource_path(this->view->tbt_info->file_name), NULL); + elm_image_no_scale_set(this->ui_element, EINA_TRUE); + elm_image_resizable_set(this->ui_element, EINA_TRUE, EINA_TRUE); + elm_image_smooth_set(this->ui_element, EINA_FALSE); + elm_image_aspect_fixed_set(this->ui_element, EINA_FALSE); + elm_image_editable_set(this->ui_element, EINA_FALSE); + evas_object_move(this->ui_element, this->x, this->y); + evas_object_resize(this->ui_element, this->width, this->height); + } + else if(this->view->tbt_info->apptype == TBT_APP_UI_SHAPE) + { + int r, g, b, a; + + r = 255; + g = rand() % 100 + 50; + b = rand() % 100 + 50; + a = 255; + + calc_coordinate(this); + + Evas *evas = evas_object_evas_get(this->view->layout); + this->ui_element = evas_object_rectangle_add(evas); + + evas_object_move(this->ui_element, this->x, this->y); + evas_object_resize(this->ui_element, this->width, this->height); + evas_object_color_set(this->ui_element, r, g, b, a); + evas_object_show(this->ui_element); + } + else if(this->view->tbt_info->apptype == TBT_APP_UI_ROTATE) + { + int r, g, b, a; + + r = 255; + g = 0; + b = 0; + a = 250; + + int offset; + + #ifdef DEVICE_TYPE_MOBILE + offset = 100; + #else + offset = 50; + #endif + this->x = this->screen_width / 2 - offset; + this->y = this->screen_height / 2 - offset + this->toolbar_height; + + Evas *evas = evas_object_evas_get(this->view->layout); + this->ui_element = evas_object_rectangle_add(evas); + + evas_object_move(this->ui_element, this->x, this->y); + evas_object_resize(this->ui_element, 2*offset, 2*offset); + evas_object_color_set(this->ui_element, r, g, b, a); + evas_object_show(this->ui_element); + } + else if(this->view->tbt_info->apptype == TBT_APP_UI_FONT) + { + this->x = this->x_pad; + this->y = this->toolbar_height; + + Evas *evas = evas_object_evas_get(this->view->layout); + this->ui_element = evas_object_text_add(evas); + + evas_object_text_style_set(this->ui_element, EVAS_TEXT_STYLE_PLAIN); + evas_object_color_set(this->ui_element, 255,0,0,255); + evas_object_text_glow_color_set(this->ui_element, 0,255,0,255); + evas_object_text_glow2_color_set(this->ui_element, 0,0,255,255); + evas_object_text_outline_color_set(this->ui_element, 255,255,255,255); + evas_object_text_shadow_color_set(this->ui_element, 255,255,0,255); + evas_object_text_font_set(this->ui_element, "Courier", 30); + evas_object_text_text_set(this->ui_element, "Sample Text ! "); + evas_object_move(this->ui_element,this->x, this->y); + evas_object_resize(this->ui_element, 700, 500); + evas_object_show(this->ui_element); + } + else if(this->view->tbt_info->apptype == TBT_APP_UI_LINE) + { + int r, g, b, a; + + r = 255; + g = rand() % 100 + 50; + b = rand() % 100 + 50; + a = 255; + + calc_coordinate(this); + + Evas *evas = evas_object_evas_get(this->view->layout); + this->ui_element = evas_object_line_add(evas); + + evas_object_color_set(this->ui_element, r, g, b, a); + evas_object_line_xy_set(this->ui_element, this->x, this->y, (this->x + this->width), (this->y + this->height)); + evas_object_show(this->ui_element); + } + else if(this->view->tbt_info->apptype == TBT_APP_UI_ALPHA) + { + int r, g, b; + r = 255; + g = 0; + b = 0; + this->alpha = 100; + + int offset; + + #ifdef DEVICE_TYPE_MOBILE + offset = 100; + #else + offset = 50; + #endif + + this->x = this->screen_width / 2 - offset; + this->y = this->screen_height / 2 - offset + this->toolbar_height; + + Evas *evas = evas_object_evas_get(this->view->layout); + this->ui_element = evas_object_rectangle_add(evas); + + evas_object_move(this->ui_element, this->x, this->y); + evas_object_resize(this->ui_element, 2*offset, 2*offset); + evas_object_color_set(this->ui_element, r, g, b, this->alpha); + evas_object_show(this->ui_element); + } + + this->timer = ecore_timer_add(1, _ui_view_timer_cb, this); + + return this; +} + + +/** + * @function calc_coordinate + * @since_tizen 2.3 + * @description Calc Coordinate + * @parameter ui_view*: Ui View Pointer + * @return static void + */ +static void calc_coordinate(ui_view *this) +{ + RETM_IF(NULL == this, "data is NULL"); + + this->x = rand() % (this->screen_width / 2 - this->x_pad) + this->x_pad; + this->y = rand() % (this->screen_height / 2 - this->y_pad) + this->y_pad; + + this->width = rand() % (this->screen_width - this->x - this->x_pad); + this->height = rand() % (this->screen_height - this->y - this->y_pad); + + this->y += this->toolbar_height; +} + + +/** + * @function set_rotation + * @since_tizen 2.3 + * @description Set Rotation + * @parameter ui_view*: Ui View Pointer + * @return static void + */ +static void set_rotation(ui_view *this) +{ + int x,y,w,h; + + Evas_Object *o; + o = this->ui_element; + + if(this->rotation < 0) this->rotation=-this->rotation; + if(this->rotation>=360) this->rotation=this->rotation%360; + + evas_object_geometry_get(o, &x, &y, &w, &h); + Evas_Map *m = evas_map_new(4); + evas_map_util_points_populate_from_object(m, o); + evas_map_util_rotate(m, this->rotation, x + (w / 2), y + (h / 2)); + evas_object_map_set(o, m); + evas_object_map_enable_set(o, EINA_TRUE); + evas_map_free(m); +} + + +/** + * @function get_screen_resolution + * @since_tizen 2.3 + * @description Get Screen Resolution + * @parameter ui_view*: Ui View Pointer + * @return static void + */ +static void get_screen_resolution(ui_view *this) +{ + int result; + result = system_info_get_platform_int("tizen.org/feature/screen.width", &this->screen_width); + RETM_IF(result != 0, "tizen.org/feature/screen.width"); + RETM_IF(this->width < 0, "width cannot be less than zero"); + + result = system_info_get_platform_int("tizen.org/feature/screen.height", &this->screen_height); + RETM_IF(result != 0, "tizen.org/feature/screen.height"); + RETM_IF(this->height < 0, "height cannot be less than zero"); +} + + +/** + * @function _ui_view_timer_cb + * @since_tizen 2.3 + * @description Ui View Timer Cb + * @parameter void*: Void Pointer + * @return static Eina_Bool + */ +static Eina_Bool _ui_view_timer_cb(void *data) +{ + RETVM_IF(NULL == data, false,"data is NULL"); + + ui_view *this = NULL; + this = (ui_view*)data; + RETVM_IF(NULL == this, false,"view is NULL"); + + if(this->view->tbt_info->apptype == TBT_APP_UI_RESIZE) + { + calc_coordinate(this); + + evas_object_move(this->ui_element, this->x, this->y); + evas_object_resize(this->ui_element, this->width, this->height); + evas_object_show(this->ui_element); + } + else if(this->view->tbt_info->apptype == TBT_APP_UI_SHAPE) + { + int r, g, b, a; + + r = 255; + g = rand() % 100 + 50; + b = rand() % 100 + 50; + a = 255; + + calc_coordinate(this); + + evas_object_move(this->ui_element, this->x, this->y); + evas_object_resize(this->ui_element, this->width, this->height); + evas_object_color_set(this->ui_element, r, g, b, a); + evas_object_show(this->ui_element); + } + else if(this->view->tbt_info->apptype == TBT_APP_UI_ROTATE) + { + set_rotation(this); + this->rotation += 36; + } + else if(this->view->tbt_info->apptype == TBT_APP_UI_FONT) + { + evas_object_color_set(this->ui_element, rand()%256,rand()%256,rand()%256, 255); + evas_object_text_glow_color_set(this->ui_element, rand()%256, rand()%256, rand()%256, 255); + evas_object_text_glow2_color_set(this->ui_element, rand()%256, rand()%256, rand()%256, 255); + + // Set Outline color always white! + evas_object_text_outline_color_set(this->ui_element, 255,255,255,255); + + // Shadow color always yellow!svn + evas_object_text_shadow_color_set(this->ui_element, 255,255,0,255); + evas_object_text_font_set(this->ui_element, "Courier", rand() % 60 + 10); + evas_object_text_text_set(this->ui_element, "Sample Text ! "); + + evas_object_show(this->ui_element); + } + else if(this->view->tbt_info->apptype == TBT_APP_UI_LINE) + { + int r, g, b, a; + + r = 255; + g = rand() % 100 + 50; + b = rand() % 100 + 50; + a = 255; + + calc_coordinate(this); + + evas_object_line_xy_set(this->ui_element, this->x, this->y, (this->x + this->width), (this->y + this->height)); + evas_object_color_set(this->ui_element, r, g, b, a); + evas_object_show(this->ui_element); + } + else if(this->view->tbt_info->apptype == TBT_APP_UI_ALPHA) + { + this->alpha = (this->alpha > 255) ? 0 : this->alpha + 20; + evas_object_color_set(this->ui_element, 255, 0, 0, this->alpha); + } + + + return true; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + ui_view *view = NULL; + view = (ui_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + ecore_timer_del(view->timer); + evas_object_del(view->ui_element); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-widget-view.c b/tbtcoreapp/src/view/tbt-widget-view.c new file mode 100644 index 0000000..24a6e23 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-widget-view.c @@ -0,0 +1,261 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-widget-view.c + * @brief Checks the widget app is launching or not. + * @author Md. Rokib Khan (r.khan) + * @date JUNE, 2015 + * @bug no known bug + * @credit + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_WIDGET + +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-widget-view.h" +#include "view/tbt-common-view.h" + +struct _widget_view +{ + common_view* view; + Evas_Object *label; + Evas_Object* single_btn; + app_control_h service; +}; + +static void _app_destroy_cb(void* this); +static Evas_Object *add_control_layout(widget_view *this, Evas_Object *parent); +static void _view_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); +static void app_control_view_reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *data); +static char* get_app_control_error(app_control_error_e err_code); + + +/** + * @function widget_view_add + * @since_tizen 2.3 + * @description Widget View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return widget_view* + */ +widget_view *widget_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + + widget_view *this = NULL; + this = calloc(1, sizeof(widget_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + RETVM_IF(NULL == tbt_info, NULL, "tbt_info is null"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "pick_viewer"; + tbt_info->layout_file = get_edje_path("pick_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->label = ui_utils_label_add(this->view->layout, ""); + RETVM_IF(!this->label, NULL, "elm_list_add failed"); + ui_utils_label_set_text(this->label, "Widget View Data: ", "left"); + elm_object_part_content_set(this->view->layout, "pick_text", this->label); + + + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + + return this; +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter widget_view*: Widget View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(widget_view *this, Evas_Object *parent) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + this->single_btn = ui_utils_push_button_add(this, parent, "View Widget UI", _view_button_pressed_cb); + + return this->single_btn ; +} + + +/** + * @function _view_button_pressed_cb + * @since_tizen 2.3 + * @description View Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _view_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + char *key = "widget_id"; + char *value = WIDGET_VIEW_APPID; + widget_view *view = NULL; + view = (widget_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + DBG("_view_button_pressed_cb"); + + char *appid = VIEWER_VIEW_APP_PACKAGE_NAME; + int nStatus = app_control_create(&view->service); + RETM_IF(nStatus != APP_CONTROL_ERROR_NONE, "app_control_create error : %s", get_app_control_error(nStatus)); + DBG("app_control_create nStatus=%d",nStatus); + + nStatus = app_control_set_app_id(view->service, appid); + RETM_IF(nStatus != APP_CONTROL_ERROR_NONE, "app_control_set_app_id error : %s", get_app_control_error(nStatus)); + DBG("app_control_set_app_id nStatus=%d",nStatus); + + nStatus = app_control_add_extra_data(view-> service, key, value); + RETM_IF(nStatus != APP_CONTROL_ERROR_NONE, "app_control_add_extra_data error : %s", get_app_control_error(nStatus)); + DBG("app_control_add_extra_data nStatus=%d",nStatus); + + nStatus = app_control_send_launch_request(view->service , app_control_view_reply_cb, view); + RETM_IF(nStatus != APP_CONTROL_ERROR_NONE, "app_control_send_launch_request error : %s", get_app_control_error(nStatus)); + DBG("app_control_send_launch_request nStatus=%d",nStatus); + + ui_utils_label_set_text(view->label, "App launch requested.", "left"); +} + + +/** + * @function app_control_view_reply_cb + * @since_tizen 2.3 + * @description App Control View Reply Cb + * @parameter app_control_h: App Control H, void*: Void Pointer + * @return static void + */ +static void app_control_view_reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *data) +{ + RETM_IF(NULL == data, "data is NULL"); + + widget_view *view = NULL; + view = (widget_view*)data; + RETM_IF(NULL == view, "view is NULL"); + + DBG("app_control_view_reply_cb"); + + if(result == APP_CONTROL_RESULT_SUCCEEDED) + { + int result; + char *app_id; + + if(reply != NULL) + { + result = app_control_get_app_id(reply, &app_id); + RETM_IF(result != APP_CONTROL_ERROR_NONE, "app_control_get_app_id error : %s", get_app_control_error(result)); + RETM_IF(NULL == app_id, "app_id is NULL"); + DBG("app_id : %s", app_id); + + ui_utils_label_set_text(view->label, "App launched successfully.", "left"); + + } + } +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + widget_view *view = NULL; + view = (widget_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + + +/** + * @function get_app_control_error + * @since_tizen 2.3 + * @description Get App Control Error + * @parameter app_control_error_e: App Control Error E + * @return static char* + */ +static char* get_app_control_error(app_control_error_e err_code) +{ + char* error; + +switch (err_code) +{ + case APP_CONTROL_ERROR_NONE: + error = "APP_CONTROL_ERROR_NONE"; + break; + case APP_CONTROL_ERROR_INVALID_PARAMETER: + error = "APP_CONTROL_ERROR_INVALID_PARAMETER"; + break; + case APP_CONTROL_ERROR_OUT_OF_MEMORY: + error = "APP_CONTROL_ERROR_OUT_OF_MEMORY"; + break; + case APP_CONTROL_ERROR_APP_NOT_FOUND: + error = "APP_CONTROL_ERROR_APP_NOT_FOUND"; + break; + case APP_CONTROL_ERROR_KEY_NOT_FOUND: + error = "APP_CONTROL_ERROR_KEY_NOT_FOUND"; + break; + case APP_CONTROL_ERROR_KEY_REJECTED: + error = "APP_CONTROL_ERROR_KEY_REJECTED"; + break; + case APP_CONTROL_ERROR_INVALID_DATA_TYPE: + error = "APP_CONTROL_ERROR_INVALID_DATA_TYPE"; + break; + case APP_CONTROL_ERROR_LAUNCH_REJECTED: + error = "APP_CONTROL_ERROR_LAUNCH_REJECTED"; + break; + case APP_CONTROL_ERROR_PERMISSION_DENIED: + error = "APP_CONTROL_ERROR_PERMISSION_DENIED"; + break; + case APP_CONTROL_ERROR_LAUNCH_FAILED: + error = "APP_CONTROL_ERROR_LAUNCH_FAILED"; + break; + case APP_CONTROL_ERROR_TIMED_OUT: + error = "APP_CONTROL_ERROR_TIMED_OUT"; + break; +#ifdef TIZEN_2_4 + case APP_CONTROL_ERROR_IO_ERROR: + error = "APP_CONTROL_ERROR_IO_ERROR"; + break; +#endif + default: + error = "Unknown error"; + } + return error; +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-wifi-view.c b/tbtcoreapp/src/view/tbt-wifi-view.c new file mode 100644 index 0000000..77e4ebf --- /dev/null +++ b/tbtcoreapp/src/view/tbt-wifi-view.c @@ -0,0 +1,307 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-wifi-view.c + * @brief This view provide the Apps tested the wifi activate/deactivate functionality. + * + * @author Golam Kayas (g.kayes@samsung.com) + * @date October, 2014 + * @bug No known bug. + * @credit Tizen SDK Version 2.3.0 Sample Example + * + */ + +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_WIFI + +#include +#include + + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-wifi-view.h" +#include "view/tbt-common-view.h" + +struct _wifi_view +{ + common_view* view; + + Evas_Object *wifi_label; + Evas_Object *capture_btn; +}; + + +static Evas_Object *add_control_layout(wifi_view *this, Evas_Object *parent); +static char* get_wifi_error(wifi_error_e err_code); +static void _app_destroy_cb(void* this); +static void _wifi_activated_cb(wifi_error_e result, void *data); +static void _wifi_deactivated_cb(wifi_error_e result, void *data); +static void _wifi_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); + + + +/** + * @function wifi_view_add + * @since_tizen 2.3 + * @description Wifi View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return wifi_view* + */ +wifi_view *wifi_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + RETVM_IF(NULL == tbt_info, NULL, "tbt_info is null"); + + wifi_view *this = NULL; + this = calloc(1, sizeof(wifi_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "wifi_viewer"; + tbt_info->layout_file = get_edje_path("wifi_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->wifi_label = ui_utils_label_add(this->view->layout, ""); + ui_utils_label_set_text(this->wifi_label, "Wifi is switched On", "left"); + elm_object_part_content_set(this->view->layout, "wifi_text", this->wifi_label); + + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + elm_object_text_set(this->capture_btn, "Wifi Off"); + + int result; + bool is_activated= false; + result = wifi_initialize(); + RETVM_IF(result != WIFI_ERROR_NONE, NULL, "wifi_initialize fail > Error = %s", get_wifi_error(result)); + + result = wifi_is_activated(&is_activated); + RETVM_IF(result != WIFI_ERROR_NONE, NULL, "wifi_is_activated fail > Error = %s", get_wifi_error(result)); + if(!is_activated) + { + elm_object_text_set(this->capture_btn, "Wifi On"); + ui_utils_label_set_text(this->wifi_label, "Wifi is switched Off ", "left"); + } + + return this; +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter wifi_view*: Wifi View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(wifi_view *this, Evas_Object *parent) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + + elm_table_padding_set(table, TABLE_PADDING_HORIZONTAL, TABLE_PADDING_VERTICAL); + + this->capture_btn = ui_utils_push_button_add(this, table, "Capture", _wifi_button_pressed_cb); + elm_table_pack(table, this->capture_btn, 0, 0, 1, 1); + + return table; +} + + +/** + * @function _wifi_activated_cb + * @since_tizen 2.3 + * @description Wifi Activated Cb + * @parameter wifi_error_e: Wifi Error E, void*: Void Pointer + * @return static void + */ +static void _wifi_activated_cb(wifi_error_e result, void *data) +{ + RETM_IF(NULL == data, "data is NULL"); + + wifi_view *this = NULL; + this = (wifi_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + RETM_IF(result != WIFI_ERROR_NONE, "wifi_activate fail > Error = %s", get_wifi_error(result)); + + elm_object_text_set(this->capture_btn, "Wifi Off"); + ui_utils_label_set_text(this->wifi_label, "Wifi is switched On ", "left"); +} + + +/** + * @function _wifi_deactivated_cb + * @since_tizen 2.3 + * @description Wifi Deactivated Cb + * @parameter wifi_error_e: Wifi Error E, void*: Void Pointer + * @return static void + */ +static void _wifi_deactivated_cb(wifi_error_e result, void *data) +{ + RETM_IF(NULL == data, "data is NULL"); + + wifi_view *this = NULL; + this = (wifi_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + RETM_IF(result != WIFI_ERROR_NONE, "wifi_deactivate fail > Error = %s", get_wifi_error(result)); + + elm_object_text_set(this->capture_btn, "Wifi On"); + ui_utils_label_set_text(this->wifi_label, "Wifi is switched Off ", "left"); +} + + +/** + * @function _wifi_button_pressed_cb + * @since_tizen 2.3 + * @description Wifi Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _wifi_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + RETM_IF(NULL == data, "data is NULL"); + + wifi_view *this = NULL; + this = (wifi_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + int result; + bool activated= false; + result = wifi_is_activated(&activated); + RETM_IF(result != WIFI_ERROR_NONE, "wifi_is_activated fail > Error = %s", get_wifi_error(result)); + + if(!activated) + { + result = wifi_activate(_wifi_activated_cb, this); + RETM_IF(result != WIFI_ERROR_NONE, "wifi_activate fail > Error = %s", get_wifi_error(result)); + ui_utils_label_set_text(this->wifi_label, "Wifi Activating...", "left"); + } + else + { + result = wifi_deactivate(_wifi_deactivated_cb, this); + RETM_IF(result != WIFI_ERROR_NONE, "wifi_deactivate fail > Error = %s", get_wifi_error(result)); + ui_utils_label_set_text(this->wifi_label, "Wifi Deactivating...", "left"); + } +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + RETM_IF(NULL == this, "data is NULL"); + + int result; + wifi_view *view = NULL; + view = (wifi_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + result = wifi_deinitialize (); + RETM_IF(result != WIFI_ERROR_NONE, "wifi_deinitialize fail > Error = %s", get_wifi_error(result)); + + SAFE_DELETE(view->view); + SAFE_DELETE(view); +} + + + +/** + * @function get_wifi_error + * @since_tizen 2.3 + * @description Get Wifi Error + * @parameter wifi_error_e: Wifi Error E + * @return static char* + */ +static char* get_wifi_error(wifi_error_e err_code) +{ + char* error; + +switch (err_code) +{ + case WIFI_ERROR_NONE: + error = WIFI_ERROR_NONE; + break; + case WIFI_ERROR_INVALID_PARAMETER: + error = WIFI_ERROR_INVALID_PARAMETER; + break; + case WIFI_ERROR_OUT_OF_MEMORY: + error = WIFI_ERROR_OUT_OF_MEMORY; + break; + case WIFI_ERROR_INVALID_OPERATION: + error = WIFI_ERROR_INVALID_OPERATION; + break; + case WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED: + error = WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED; + break; + case WIFI_ERROR_OPERATION_FAILED: + error = WIFI_ERROR_OPERATION_FAILED; + break; + case WIFI_ERROR_NO_CONNECTION: + error = WIFI_ERROR_NO_CONNECTION; + break; + case WIFI_ERROR_NOW_IN_PROGRESS: + error = WIFI_ERROR_NOW_IN_PROGRESS; + break; + case WIFI_ERROR_ALREADY_EXISTS: + error = WIFI_ERROR_ALREADY_EXISTS; + break; + case WIFI_ERROR_OPERATION_ABORTED: + error = WIFI_ERROR_OPERATION_ABORTED; + break; + case WIFI_ERROR_DHCP_FAILED: + error = WIFI_ERROR_DHCP_FAILED; + break; + case WIFI_ERROR_INVALID_KEY: + error = WIFI_ERROR_INVALID_KEY; + break; + case WIFI_ERROR_NO_REPLY: + error = WIFI_ERROR_NO_REPLY; + break; + case WIFI_ERROR_SECURITY_RESTRICTED: + error = WIFI_ERROR_SECURITY_RESTRICTED; + break; + case WIFI_ERROR_PERMISSION_DENIED: + error = WIFI_ERROR_PERMISSION_DENIED; + break; + case WIFI_ERROR_NOT_SUPPORTED: + error = WIFI_ERROR_NOT_SUPPORTED; + break; + default: + error = "Unknown error"; + break; + } + + return error; +} +#endif diff --git a/tbtcoreapp/src/view/tbt-wifidirect-info-view.c b/tbtcoreapp/src/view/tbt-wifidirect-info-view.c new file mode 100644 index 0000000..bb8aa41 --- /dev/null +++ b/tbtcoreapp/src/view/tbt-wifidirect-info-view.c @@ -0,0 +1,301 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-wifidirect-view.c + * @brief connect device via Wifi Direct + * + * @author Md Nazmus Saqib(saqib.nzms) and salman rahman(salman.ran) + * @date October, 2014 + * @bug NA + * @credit + * + */ +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_WIFIDIRECT + +#include +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/ui-utils.h" +#include "view/tbt-wifidirect-view.h" +#include "view/tbt-common-view.h" + +struct _wifidirect_info_view +{ + common_view* view; + + Evas_Object *action_btn; + Evas_Object *wifidirect_info_list; + + char *mac_address; + char *ip_address; + char *subnet_mask; + char *gateway_address; + char *network_interface_name; + char* connected_device; + int operating_channel; + +}; + +static void _app_destroy_cb(void* this); +static char* get_wifi_direct_error(wifi_direct_error_e err_code); + + +/** + * @function _wifidirect_info_view_add + * @since_tizen 2.3 + * @description Wifidirect Info View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return wifidirect_info_view* + */ +wifidirect_info_view *_wifidirect_info_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + int result = 0; + bool is_persistence_group_enabled; + RETVM_IF(NULL == navi, NULL, "navi is null"); + RETVM_IF(NULL == tbt_info, NULL, "tbt_info is null"); + + wifidirect_info_view *this = NULL; + this = calloc(1, sizeof(wifidirect_info_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "wifidirect_viewer"; + tbt_info->layout_file = get_edje_path("wifidirect_info_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->mac_address = NULL; + this->ip_address = NULL; + this->subnet_mask = NULL; + this->gateway_address = NULL; + this->network_interface_name = NULL; + this->operating_channel = 0; + + + result = wifi_direct_get_mac_address(&this->mac_address); + //RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, NULL, "wifi_direct_get_mac_address error: %s", get_wifi_direct_error(result)); + DBG("MAC %s",this->mac_address); + + char* str; + if(result == WIFI_DIRECT_ERROR_NONE){ + str = format_string("Mac Address: %s",this->mac_address); + elm_object_part_text_set(this->view->layout, "info1", str); + SAFE_DELETE(str); + } + else{ + ERR("wifi_direct_get_mac_address error: %s", get_wifi_direct_error(result)); + str = format_string("Mac Address: Not Found!!"); + elm_object_part_text_set(this->view->layout, "info1", str); + SAFE_DELETE(str); + } + + result = wifi_direct_get_ip_address(&this->ip_address); + //RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, NULL, "wifi_direct_get_ip_address error: %s", get_wifi_direct_error(result)); + DBG("IP %s",this->ip_address); + if(result == WIFI_DIRECT_ERROR_NONE){ + str = format_string("IP Address: %s",this->ip_address); + elm_object_part_text_set(this->view->layout, "info2", str); + SAFE_DELETE(str); + } + else{ + ERR("wifi_direct_get_ip_address error: %s", get_wifi_direct_error(result)); + str = format_string("IP Address: Not Found!!"); + elm_object_part_text_set(this->view->layout, "info2",str); + SAFE_DELETE(str); + } + + + result = wifi_direct_get_subnet_mask(&this->subnet_mask); + //RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, NULL, "wifi_direct_get_subnet_mask error: %s", get_wifi_direct_error(result)); + DBG("Subnet %s",this->subnet_mask); + if(result == WIFI_DIRECT_ERROR_NONE) + { + str = format_string("Subnet Mask: %s",this->subnet_mask); + elm_object_part_text_set(this->view->layout, "info3", str); + SAFE_DELETE(str); + } + else + { + ERR("wifi_direct_get_subnet_mask error: %s", get_wifi_direct_error(result)); + str = format_string("Subnet Mask: Not Found!!"); + elm_object_part_text_set(this->view->layout, "info3", str); + SAFE_DELETE(str); + } + + result = wifi_direct_get_gateway_address(&this->gateway_address); +// RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, NULL, "wifi_direct_get_gateway_address error: %s", get_wifi_direct_error(result)); + DBG("Gateway %s",this->gateway_address); + if(result == WIFI_DIRECT_ERROR_NONE){ + str = format_string("Gateway Address: %s",this->gateway_address); + elm_object_part_text_set(this->view->layout, "info4", str); + SAFE_DELETE(str); + } + else{ + ERR("wifi_direct_get_gateway_address error: %s", get_wifi_direct_error(result)); + str = format_string("Gateway Address: Not Found!!"); + elm_object_part_text_set(this->view->layout, "info4", str); + SAFE_DELETE(str); + } + + result = wifi_direct_get_network_interface_name(&this->network_interface_name); +// RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, NULL, "wifi_direct_get_network_interface_name error: %s", get_wifi_direct_error(result)); + DBG("Interface %s",this->network_interface_name); + if(result == WIFI_DIRECT_ERROR_NONE) + { + str = format_string("Network Interface Name: %s",this->network_interface_name); + elm_object_part_text_set(this->view->layout, "info5", str); + SAFE_DELETE(str); + } + else + { + ERR("wifi_direct_get_network_interface_name error: %s", get_wifi_direct_error(result)); + str = format_string("Network Interface Name: Not Found!!"); + elm_object_part_text_set(this->view->layout, "info5", str); + SAFE_DELETE(str); + } + + result = wifi_direct_get_operating_channel(&this->operating_channel); +// RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, NULL, "wifi_direct_get_operating_channel error: %s", get_wifi_direct_error(result)); + DBG("channel %d",this->operating_channel); + if(result == WIFI_DIRECT_ERROR_NONE) + { + str = format_string("Operating Channel: %d",this->operating_channel); + elm_object_part_text_set(this->view->layout, "info6", str); + SAFE_DELETE(str); + } + else + { + ERR("wifi_direct_get_operating_channel error: %s", get_wifi_direct_error(result)); + str = format_string("Operating Channel: Not Found!!"); + elm_object_part_text_set(this->view->layout, "info6", str); + SAFE_DELETE(str); + } + + result = wifi_direct_is_persistent_group_enabled(&is_persistence_group_enabled); +// RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, NULL, "wifi_direct_is_persistent_group_enabled error: %s", get_wifi_direct_error(result)); + if(result == WIFI_DIRECT_ERROR_NONE) + { + str = format_string("Persistence group: Yes"); + elm_object_part_text_set(this->view->layout, "info7", str); + SAFE_DELETE(str); + } + else + { + ERR("wifi_direct_is_persistent_group_enabled error: %s", get_wifi_direct_error(result)); + str = format_string("Persistence group: No"); + elm_object_part_text_set(this->view->layout, "info7", str); + SAFE_DELETE(str); + } + + return this; +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + DBG("_app_destroy_cb called"); +} + + +/** + * @function get_wifi_direct_error + * @since_tizen 2.3 + * @description Get Wifi Direct Error + * @parameter wifi_direct_error_e: Wifi Direct Error E + * @return static char* + */ +static char* get_wifi_direct_error(wifi_direct_error_e err_code) +{ + char* error; + +switch (err_code) +{ + case WIFI_DIRECT_ERROR_NONE: + error = "WIFI_DIRECT_ERROR_NONE"; + break; + case WIFI_DIRECT_ERROR_NOT_PERMITTED: + error = "WIFI_DIRECT_ERROR_NOT_PERMITTED"; + break; + case WIFI_DIRECT_ERROR_OUT_OF_MEMORY: + error = "WIFI_DIRECT_ERROR_OUT_OF_MEMORY"; + break; + case WIFI_DIRECT_ERROR_PERMISSION_DENIED: + error = "WIFI_DIRECT_ERROR_PERMISSION_DENIED"; + break; + case WIFI_DIRECT_ERROR_RESOURCE_BUSY: + error = "WIFI_DIRECT_ERROR_RESOURCE_BUSY"; + break; + case WIFI_DIRECT_ERROR_INVALID_PARAMETER: + error = "WIFI_DIRECT_ERROR_INVALID_PARAMETER"; + break; + case WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT: + error = "WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT"; + break; + case WIFI_DIRECT_ERROR_NOT_SUPPORTED: + error = "WIFI_DIRECT_ERROR_NOT_SUPPORTED"; + break; + case WIFI_DIRECT_ERROR_NOT_INITIALIZED: + error = "WIFI_DIRECT_ERROR_NOT_INITIALIZED"; + break; + case WIFI_DIRECT_ERROR_COMMUNICATION_FAILED: + error = "WIFI_DIRECT_ERROR_COMMUNICATION_FAILED"; + break; + case WIFI_DIRECT_ERROR_WIFI_USED: + error = "WIFI_DIRECT_ERROR_WIFI_USED"; + break; + case WIFI_DIRECT_ERROR_MOBILE_AP_USED: + error = "WIFI_DIRECT_ERROR_MOBILE_AP_USED"; + break; + case WIFI_DIRECT_ERROR_CONNECTION_FAILED: + error = "WIFI_DIRECT_ERROR_CONNECTION_FAILED"; + break; + case WIFI_DIRECT_ERROR_AUTH_FAILED: + error = "WIFI_DIRECT_ERROR_AUTH_FAILED"; + break; + case WIFI_DIRECT_ERROR_OPERATION_FAILED: + error = "WIFI_DIRECT_ERROR_OPERATION_FAILED"; + break; + case WIFI_DIRECT_ERROR_TOO_MANY_CLIENT: + error = "WIFI_DIRECT_ERROR_TOO_MANY_CLIENT"; + break; + case WIFI_DIRECT_ERROR_ALREADY_INITIALIZED: + error = "WIFI_DIRECT_ERROR_ALREADY_INITIALIZED"; + break; + case WIFI_DIRECT_ERROR_CONNECTION_CANCELED: + error = "WIFI_DIRECT_ERROR_CONNECTION_CANCELED"; + break; + default: + error = "Unknown error"; + } + return error; +} + +#endif diff --git a/tbtcoreapp/src/view/tbt-wifidirect-view.c b/tbtcoreapp/src/view/tbt-wifidirect-view.c new file mode 100644 index 0000000..46b0a4b --- /dev/null +++ b/tbtcoreapp/src/view/tbt-wifidirect-view.c @@ -0,0 +1,1456 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +/** + * @file tbt-wifidirect-view.c + * @brief connect device via Wifi Direct + * + * @author Md Nazmus Saqib(saqib.nzms), salman rahman(salman.ran), Golam Kayas(g.kayes) + * @date October, 2014 + * @bug NA + * @credit + * + */ +#include "utils/app_module_config.h" +#ifdef TBT_MODULE_WIFIDIRECT + +#include +#include +#include + +#include "utils/logger.h" +#include "utils/config.h" +#include "utils/util_state_object.h" +#include "utils/ui-utils.h" +#include "view/tbt-wifidirect-view.h" +#include "view/tbt-common-view.h" + + +struct _wifidirect_view +{ + common_view* view; + + GList *devices_list; + wifi_direct_discovery_state_e discovery_state; + + Evas_Object *action_btn; + Evas_Object *wifidirect_info_label; + Evas_Object *wifidirect_label; + Evas_Object *wifidirect_list; + Evas_Object *check_box; + Evas_Object *radio_label; + Evas_Object *cancel_check; + Evas_Object *cancel_label; + + + wifi_direct_discovered_peer_info_s *selected_peer_info; + wifi_direct_device_state_e device_state; + Elm_Object_Item *selected_device_item; + util_state_object *state_object_wifi_direct; + + const char *mac_address, *remote_device_mac; + char *ip_address; + char *subnet_mask; + char *gateway_address; + char *network_interface_name; + char* connected_device; + int operating_channel; + bool is_connection_requested; + bool is_PBC_preffered; + +}; + +typedef enum{ + WIFI_DIRECT_DEACTIVATED=0, + WIFI_DIRECR_SUCCESSFULLY_ACTIVATATED, + WIFI_DIRECR_CONNECTION_SUCCESSFULLY_ACTIVATATED, + WIFI_DIRECT_ACTIVATION_FAILED, + WIFI_DIRECT_DISCOVERY_FOR_DEVICE_STARTED, + WIFI_DIRECT_DISCOVERY_FOR_DEVICE_FAILED, + WIFI_DIRECT_DISCOVERY_PEER_FOUND, + WIFI_DIRECT_DEVICE_CONNECTION_REQUESTED, + WIFI_DIRECT_DEVICE_SUCCESSFULLY_CONNECTED, + WIFI_DIRECT_DEVICE_DISCONNECTION_REQUESTED, + WIFI_DIRECT_DEVICE_SUCCESSFULLY_DISCONNECTED, + +} wifi_direct_state_machine_states; + +typedef enum{ + WIFI_DIRECT_CONNECTION_ACTIVATION, + WIFI_DIRECT_ACTIVATION_ERROR, + WIFI_DIRECT_DISCOVERY_FOR_DEVICE_START, + WIFI_DIRECT_DISCOVERY_FOR_DEVICE_FAILURE, + WIFI_DIRECT_PEER_DISCOVERY, + WIFI_DIRECT_REQUEST_FOR_CONNECTION, + WIFI_DIRECT_DEVICE_SUCCESSFULL_CONNECTION, + WIFI_DIRECT_DEVICE_REQUEST_DISCONNECTION, + WIFI_DIRECT_DISCONNECTION_OCCURANCE, + WIFI_DIRECT_DEVICE_SUCCESSFULL_DISCONNECTION, + +} wifi_direct_state_machine_feed_values; + +static void _device_item_selected_cb(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *add_control_layout(wifidirect_view *this, Evas_Object *parent); + +static void _print_wifi_error(int error_code); +static void _print_error(const char* func, int error_code); +static void _print_connection_state(int state); + +static gint wifidirect_list_find_func_cb(gconstpointer a, gconstpointer b); +static void wifidirect_list_free_func_cb(gpointer data); +static void wifidirect_glist_foreach_data(gpointer data, gpointer user_data); +static void wifidirect_glist_foreach_data_del(gpointer data, gpointer user_data); + +static void _wifi_direct_device_state_changed_cb(int error_code, wifi_direct_device_state_e device_state, void *user_data); +static void _wifi_direct_connection_state_changed_cb(int error_code, wifi_direct_connection_state_e connection_state, const char *mac_address, void *user_data); +static void _wifi_direct_discovery_state_chagned_cb(int error_code, wifi_direct_discovery_state_e discovery_state, void *user_data); +static bool _wifi_direct_connected_peer_cb (wifi_direct_connected_peer_info_s *peer, void *user_data); + +static void _wifi_direct_peer_found_cb(int error_code, wifi_direct_discovery_state_e discovery_state, const char *mac_address, void *user_data); +static void _wifi_direct_client_ip_address_assigned_cb (const char *mac_address, const char *ip_address, const char *interface_address, void *user_data); +static bool _wifi_direct_persistent_group_cb(const char *mac_address, const char *ssid, void *user_data); +static char* get_wifi_direct_error(wifi_direct_error_e err_code); + +static void _wifi_direct_util_state_object_state_changed_cb(int previous,int now,int feed,void *user_data,void *feed_data); + +static void _control_button_pressed_cb(void *data, Evas_Object *obj, void *event_info); + +static void _app_destroy_cb(void* this); + +static void _safe_print(const char *msg,const wifidirect_view *this); + +Evas_Object* wifi_direct_check_button_add(Evas_Object *parent, Evas_Smart_Cb func, void *user_data); +void wifi_direct_check_button_changed_cb(void *data, Evas_Object *obj, void *event_info); +static int result; + + +/** + * @function wifidirect_view_add + * @since_tizen 2.3 + * @description Wifidirect View Add + * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer + * @return wifidirect_view* + */ +wifidirect_view *wifidirect_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item) +{ + RETVM_IF(NULL == navi, NULL, "navi is null"); + RETVM_IF(NULL == tbt_info, NULL, "tbt_info is null"); + + wifidirect_view *this = NULL; + this = calloc(1, sizeof(wifidirect_view)); + RETVM_IF(!this, NULL, "calloc failed"); + + this->view = calloc(1, sizeof(common_view)); + RETVM_IF(!this->view, NULL, "calloc failed"); + + tbt_info->layout_group = "wifidirect_viewer"; + tbt_info->layout_file = get_edje_path("wifidirect_viewer.edj"); + + common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this); + RETVM_IF(!this, NULL, "calloc failed"); + RETVM_IF(NULL == this->view, NULL, "navi is null"); + + this->devices_list = NULL; + this->mac_address = NULL; + this->ip_address = NULL; + this->subnet_mask = NULL; + this->gateway_address = NULL; + this->network_interface_name = NULL; + this->operating_channel = 0; + this->selected_device_item = NULL; + + evas_object_data_set(this->wifidirect_list, "wifidirect_view", this); + elm_object_disabled_set(this->action_btn, EINA_TRUE); + + this->wifidirect_info_label = ui_utils_label_add(this->view->layout, "WIFIDIRECT INFO"); + elm_object_part_content_set(this->view->layout, "wifidirect_info", this->wifidirect_info_label); + + this->wifidirect_label = ui_utils_label_add(this->view->layout, "WIFIDIRECT"); + elm_object_part_content_set(this->view->layout, "wifidirect_text", this->wifidirect_label); + + this->wifidirect_list = elm_list_add(this->view->layout); + RETVM_IF(!this->wifidirect_list, NULL, "elm_list_add failed"); + evas_object_data_set(this->wifidirect_list, "wifidirect_view", this); + elm_object_part_content_set(this->view->layout, "wifidirect_list", this->wifidirect_list); + + + Evas_Object *table = elm_table_add(this->view->layout); + this->cancel_label = ui_utils_label_add(table, "Cancel Pair"); + this->cancel_check = ui_utils_check_add(this, table); + elm_table_pack(table, this->cancel_label, 1, 0, 1, 1); + elm_table_pack(table, this->cancel_check, 2, 0, 1, 1); + elm_check_state_set (this->cancel_check, EINA_FALSE); + evas_object_show(table); + elm_object_part_content_set(this->view->layout, "check_part", table); + + Evas_Object *control = add_control_layout(this, this->view->layout); + elm_object_part_content_set(this->view->layout, "controlr_part", control); + + + result = wifi_direct_initialize(); + if(result == WIFI_DIRECT_ERROR_NONE) + { + ui_utils_label_set_text(this->wifidirect_label, "wifi_direct_initialized", "left"); + } + else + { + ui_utils_label_set_text(this->wifidirect_label, "initialization failed!!!", "left"); + } + + + result = wifi_direct_set_device_state_changed_cb(_wifi_direct_device_state_changed_cb, this); + RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, NULL, "wifi_direct_set_device_state_changed_cb fail > Error = %s", get_wifi_direct_error(result)); + + result = wifi_direct_set_connection_state_changed_cb(_wifi_direct_connection_state_changed_cb, this); + RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, NULL, "wifi_direct_set_connection_state_changed_cb fail > Error = %s", get_wifi_direct_error(result)); + + result = wifi_direct_set_peer_found_cb(_wifi_direct_peer_found_cb, this); + RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, NULL, "wifi_direct_set_peer_found_cb fail > Error = %s", get_wifi_direct_error(result)); + + result = wifi_direct_set_client_ip_address_assigned_cb(_wifi_direct_client_ip_address_assigned_cb, this); + RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, NULL, "wifi_direct_set_client_ip_address_assigned_cb fail > Error = %s", get_wifi_direct_error(result)); + + result = wifi_direct_set_discovery_state_changed_cb(_wifi_direct_discovery_state_chagned_cb, this); + RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, NULL, "wifi_direct_set_discovery_state_changed_cb fail > Error = %s", get_wifi_direct_error(result)); + + //implementation of state machine class + this->state_object_wifi_direct = util_state_object_create("wifi_direct_client"); + + util_state_object_add_state(this->state_object_wifi_direct,"WIFI_DIRECT_DEACTIVATED",WIFI_DIRECT_DEACTIVATED); + util_state_object_add_state(this->state_object_wifi_direct,"WIFI_DIRECR_CONNECTION_SUCCESSFULLY_ACTIVATATED",WIFI_DIRECR_CONNECTION_SUCCESSFULLY_ACTIVATATED); + util_state_object_add_state(this->state_object_wifi_direct,"WIFI_DIRECT_ACTIVATION_FAILED",WIFI_DIRECT_ACTIVATION_FAILED); + util_state_object_add_state(this->state_object_wifi_direct,"WIFI_DIRECT_DISCOVERY_FOR_DEVICE_STARTED",WIFI_DIRECT_DISCOVERY_FOR_DEVICE_STARTED); + util_state_object_add_state(this->state_object_wifi_direct,"WIFI_DIRECT_DISCOVERY_FOR_DEVICE_FAILED",WIFI_DIRECT_DISCOVERY_FOR_DEVICE_FAILED); + util_state_object_add_state(this->state_object_wifi_direct,"WIFI_DIRECT_DISCOVERY_PEER_FOUND",WIFI_DIRECT_DISCOVERY_PEER_FOUND); + util_state_object_add_state(this->state_object_wifi_direct,"WIFI_DIRECT_DEVICE_CONNECTION_REQUESTED",WIFI_DIRECT_DEVICE_CONNECTION_REQUESTED); + util_state_object_add_state(this->state_object_wifi_direct,"WIFI_DIRECT_DEVICE_SUCCESSFULLY_CONNECTED",WIFI_DIRECT_DEVICE_SUCCESSFULLY_CONNECTED); + util_state_object_add_state(this->state_object_wifi_direct,"WIFI_DIRECT_DEVICE_DISCONNECTION_REQUESTED",WIFI_DIRECT_DEVICE_DISCONNECTION_REQUESTED); + util_state_object_add_state(this->state_object_wifi_direct,"WIFI_DIRECT_DEVICE_SUCCESSFULLY_DISCONNECTED",WIFI_DIRECT_DEVICE_SUCCESSFULLY_DISCONNECTED); + + util_state_object_add_transition(this->state_object_wifi_direct,WIFI_DIRECT_DEACTIVATED,WIFI_DIRECT_CONNECTION_ACTIVATION,WIFI_DIRECR_CONNECTION_SUCCESSFULLY_ACTIVATATED); + + util_state_object_add_transition(this->state_object_wifi_direct,WIFI_DIRECT_DEACTIVATED,WIFI_DIRECT_ACTIVATION_ERROR,WIFI_DIRECT_ACTIVATION_FAILED); + + util_state_object_add_transition(this->state_object_wifi_direct,WIFI_DIRECR_CONNECTION_SUCCESSFULLY_ACTIVATATED,WIFI_DIRECT_DISCOVERY_FOR_DEVICE_START,WIFI_DIRECT_DISCOVERY_FOR_DEVICE_STARTED); + + util_state_object_add_transition(this->state_object_wifi_direct,WIFI_DIRECR_CONNECTION_SUCCESSFULLY_ACTIVATATED,WIFI_DIRECT_DISCOVERY_FOR_DEVICE_FAILURE,WIFI_DIRECT_DISCOVERY_FOR_DEVICE_FAILED); + + util_state_object_add_transition(this->state_object_wifi_direct,WIFI_DIRECT_DISCOVERY_FOR_DEVICE_STARTED,WIFI_DIRECT_PEER_DISCOVERY,WIFI_DIRECT_DISCOVERY_PEER_FOUND); + + util_state_object_add_transition(this->state_object_wifi_direct,WIFI_DIRECT_DISCOVERY_PEER_FOUND,WIFI_DIRECT_REQUEST_FOR_CONNECTION,WIFI_DIRECT_DEVICE_CONNECTION_REQUESTED); + + util_state_object_add_transition(this->state_object_wifi_direct,WIFI_DIRECT_DISCOVERY_PEER_FOUND,WIFI_DIRECT_DEVICE_SUCCESSFULL_CONNECTION,WIFI_DIRECT_DEVICE_SUCCESSFULLY_CONNECTED); + + util_state_object_add_transition(this->state_object_wifi_direct,WIFI_DIRECT_DEVICE_CONNECTION_REQUESTED,WIFI_DIRECT_DEVICE_SUCCESSFULL_CONNECTION,WIFI_DIRECT_DEVICE_SUCCESSFULLY_CONNECTED); + + util_state_object_add_transition(this->state_object_wifi_direct,WIFI_DIRECT_DEVICE_SUCCESSFULLY_CONNECTED,WIFI_DIRECT_DEVICE_REQUEST_DISCONNECTION,WIFI_DIRECT_DEVICE_DISCONNECTION_REQUESTED); + + util_state_object_add_transition(this->state_object_wifi_direct,WIFI_DIRECT_DEVICE_SUCCESSFULLY_CONNECTED,WIFI_DIRECT_DISCONNECTION_OCCURANCE,WIFI_DIRECT_DEVICE_SUCCESSFULLY_DISCONNECTED); + + util_state_object_add_transition(this->state_object_wifi_direct,WIFI_DIRECT_DEVICE_DISCONNECTION_REQUESTED,WIFI_DIRECT_DEVICE_SUCCESSFULL_DISCONNECTION,WIFI_DIRECT_DEVICE_SUCCESSFULLY_DISCONNECTED); + + util_state_object_init(this->state_object_wifi_direct, WIFI_DIRECT_DEACTIVATED,_wifi_direct_util_state_object_state_changed_cb,this); + util_state_object_info(this->state_object_wifi_direct); + + result = wifi_direct_activate(); + + if(result != WIFI_DIRECT_ERROR_NONE) + { + util_state_object_feed(this->state_object_wifi_direct,WIFI_DIRECT_ACTIVATION_ERROR, this); + } + + return this; +} + + +/** + * @function add_control_layout + * @since_tizen 2.3 + * @description Add Control Layout + * @parameter wifidirect_view*: Wifidirect View Pointer, Evas_Object*: Evas Object Pointer + * @return static Evas_Object* + */ +static Evas_Object *add_control_layout(wifidirect_view *this, Evas_Object *parent) +{ + RETVM_IF(NULL == this, NULL, "view is NULL"); + RETVM_IF(NULL == parent, NULL, "parent is NULL"); + + Evas_Object *table = elm_table_add(parent); + + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(table); + + elm_table_padding_set(table, TABLE_PADDING_HORIZONTAL, TABLE_PADDING_VERTICAL); + + this->action_btn = ui_utils_push_button_add(this, table, "Info", _control_button_pressed_cb); + elm_table_pack(table, this->action_btn, 0, 0, 1, 1); + return table; +} + + +/** + * @function _print_wifi_error + * @since_tizen 2.3 + * @description Print Wifi Error + * @parameter int: Int + * @return static void + */ +static void _print_wifi_error(int error_code) +{ + + switch(error_code){ + + case WIFI_DIRECT_ERROR_NONE: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_NONE",error_code); + break; + case WIFI_DIRECT_ERROR_NOT_PERMITTED: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_NOT_PERMITTED",error_code); + break; + case WIFI_DIRECT_ERROR_OUT_OF_MEMORY: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_OUT_OF_MEMORY",error_code); + break; + case WIFI_DIRECT_ERROR_PERMISSION_DENIED: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_PERMISSION_DENIED",error_code); + break; + + case WIFI_DIRECT_ERROR_RESOURCE_BUSY: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_RESOURCE_BUSY",error_code); + break; + + case WIFI_DIRECT_ERROR_INVALID_PARAMETER: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_INVALID_PARAMETER",error_code); + break; + + case WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT",error_code); + break; + case WIFI_DIRECT_ERROR_NOT_SUPPORTED: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_NOT_SUPPORTED",error_code); + break; + case WIFI_DIRECT_ERROR_NOT_INITIALIZED: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_NOT_INITIALIZED",error_code); + break; + + case WIFI_DIRECT_ERROR_COMMUNICATION_FAILED: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_COMMUNICATION_FAILED",error_code); + break; + + case WIFI_DIRECT_ERROR_WIFI_USED: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_WIFI_USED",error_code); + break; + case WIFI_DIRECT_ERROR_MOBILE_AP_USED: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_MOBILE_AP_USED",error_code); + break; + case WIFI_DIRECT_ERROR_CONNECTION_FAILED: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_CONNECTION_FAILED",error_code); + break; + + case WIFI_DIRECT_ERROR_AUTH_FAILED: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_AUTH_FAILED",error_code); + break; + + case WIFI_DIRECT_ERROR_OPERATION_FAILED: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_OPERATION_FAILED",error_code); + break; + case WIFI_DIRECT_ERROR_TOO_MANY_CLIENT: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_TOO_MANY_CLIENT",error_code); + break; + case WIFI_DIRECT_ERROR_ALREADY_INITIALIZED: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_ALREADY_INITIALIZED",error_code); + break; + + case WIFI_DIRECT_ERROR_CONNECTION_CANCELED: + DBG( "Wifi Error %d = WIFI_DIRECT_ERROR_CONNECTION_CANCELED",error_code); + break; + + default: + DBG( "Wifi Error %d = **unknown**",error_code); + break; + } +} + + +/** + * @function _print_error + * @since_tizen 2.3 + * @description Print Error + * @parameter const char*: Const char Pointer + * @return static void + */ +static void _print_error(const char* func, int error_code) +{ + + DBG( "%s = %d",func,error_code); + _print_wifi_error(error_code); +} + + +/** + * @function _print_connection_state + * @since_tizen 2.3 + * @description Print Connection State + * @parameter int: Int + * @return static void + */ +static void _print_connection_state(int state) +{ + +switch(state) +{ + case WIFI_DIRECT_CONNECTION_REQ: + DBG( "wifi_direct_connection_state_e %d = WIFI_DIRECT_CONNECTION_REQ",state); + break; + case WIFI_DIRECT_CONNECTION_WPS_REQ: + DBG( "wifi_direct_connection_state_e %d = WIFI_DIRECT_CONNECTION_WPS_REQ",state); + + break; + case WIFI_DIRECT_CONNECTION_IN_PROGRESS: + DBG( "wifi_direct_connection_state_e %d = WIFI_DIRECT_CONNECTION_IN_PROGRESS",state); + + break; + case WIFI_DIRECT_CONNECTION_RSP: + DBG( "wifi_direct_connection_state_e %d = WIFI_DIRECT_CONNECTION_RSP",state); + break; + + case WIFI_DIRECT_DISASSOCIATION_IND: + DBG( "wifi_direct_connection_state_e %d = WIFI_DIRECT_DISASSOCIATION_IND",state); + break; + + case WIFI_DIRECT_DISCONNECTION_RSP: + DBG( "wifi_direct_connection_state_e %d = WIFI_DIRECT_DISCONNECTION_RSP",state); + break; + + case WIFI_DIRECT_DISCONNECTION_IND: + DBG( "wifi_direct_connection_state_e %d = WIFI_DIRECT_DISCONNECTION_IND",state); + break; + + case WIFI_DIRECT_GROUP_CREATED: + DBG( "wifi_direct_connection_state_e %d = WIFI_DIRECT_GROUP_CREATED",state); + break; + + case WIFI_DIRECT_GROUP_DESTROYED: + DBG( "wifi_direct_connection_state_e %d = WIFI_DIRECT_GROUP_DESTROYED",state); + break; + + default: + DBG( "wifi_direct_connection_state_e %d = **unknown**",state); + break; + } +} + + + +/** + * @function _safe_print + * @since_tizen 2.3 + * @description Safe Print + * @parameter const char*: Const char Pointer, const wifidirect_view*: Const wifidirect View Pointer + * @return static void + */ +static void _safe_print(const char *msg,const wifidirect_view *this) +{ + if(this!=NULL && msg!=NULL) + { + ui_utils_label_set_text(this->wifidirect_label, msg, "left"); + + } +} + + +/** + * @function _wifi_direct_device_state_changed_cb + * @since_tizen 2.3 + * @description Wifi Direct Device State Changed Cb + * @parameter int: Int, void*: Void Pointer + * @return static void + */ +static void _wifi_direct_device_state_changed_cb(int error_code, wifi_direct_device_state_e device_state, void *user_data) +{ + DBG("_wifi_direct_device_state_changed_cb"); + _print_error("_wifi_direct_device_state_changed_cb",error_code); + + int result = 0; + wifidirect_view *this = NULL; + this = (wifidirect_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + if(device_state == WIFI_DIRECT_DEVICE_STATE_ACTIVATED) + { + + _safe_print("wifi_direct_activated",this); + + char *device_name, *pin, *str; + result = wifi_direct_get_device_name (&device_name); + _print_wifi_error(result); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_get_device_name fail > Error = %s", get_wifi_direct_error(result)); + + + result = wifi_direct_get_wps_pin (&pin); + _print_wifi_error(result); + + DBG("Device Name #: %s", device_name); + DBG("WPS PIN #: %s", pin); + RETM_IF(NULL == device_name, "device_name NULL"); + RETM_IF(NULL == pin, "pin is NULL"); + str = format_string("Name:%s WPS:%s", device_name, pin); + ui_utils_label_set_text(this->wifidirect_info_label, str, "left"); + SAFE_DELETE(str); + + if(this->view->tbt_info->apptype == TBT_APP_WIFIDIRECT) + { + DBG("_wifi_direct_ client is activated!!"); + util_state_object_feed(this->state_object_wifi_direct,WIFI_DIRECT_CONNECTION_ACTIVATION, this); + } + + //SAFE_DELETE(device_name); + //SAFE_DELETE(pin); + + } + else + { + + result = wifi_direct_unset_discovery_state_changed_cb (); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_unset_discovery_state_changed_cb fail > Error = %s", get_wifi_direct_error(result)); + + DBG("_wifi_direct_device_state_changed_cb Deactivated!"); + result = wifi_direct_deinitialize(); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_deinitialize fail > Error = %s", get_wifi_direct_error(result)); + + SAFE_DELETE(this->ip_address); + SAFE_DELETE(this->subnet_mask); + SAFE_DELETE(this->gateway_address); + SAFE_DELETE(this->network_interface_name); + DBG(" deleting device list..."); + g_list_free_full(this->devices_list, wifidirect_list_free_func_cb); + this->devices_list = NULL; + DBG(" after deleting device list..."); + + if(this->view->tbt_info->apptype == TBT_APP_WIFIDIRECT || this->view->tbt_info->apptype == TBT_APP_WIFIDIRECT_CONNECTION_CANCEL) + { + util_state_object_destroy(this->state_object_wifi_direct); + } + + SAFE_DELETE(this->view); + SAFE_DELETE(this); + + } + +} + + +/** + * @function _wifi_direct_connection_state_changed_cb + * @since_tizen 2.3 + * @description Wifi Direct Connection State Changed Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _wifi_direct_connection_state_changed_cb(int error_code, wifi_direct_connection_state_e connection_state, const char *mac_address, void *user_data) +{ + DBG("_wifi_direct_connection_state_changed_cb"); + _print_error("_wifi_direct_connection_state_changed_cb",error_code); + _print_connection_state(connection_state); + + wifidirect_view *this = NULL; + this = (wifidirect_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == mac_address, "mac_address is NULL"); + + int result; + + if(this->view->tbt_info->apptype == TBT_APP_WIFIDIRECT )//|| this->view->tbt_info->apptype == TBT_APP_WIFIDIRECT_CONNECTION_CANCEL) + { + int channel; + result = wifi_direct_get_operating_channel(&channel); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_get_operating_channel error: %s", get_wifi_direct_error(result)); + DBG("wifi_direct_get_operating_channel %d", channel); + + if(error_code == WIFI_DIRECT_ERROR_OPERATION_FAILED) + { + + DBG("Operation Failed...."); + ui_utils_label_set_text(this->wifidirect_label, "Operation Failed.", "left"); + if(this->selected_device_item!=NULL && this->selected_peer_info!=NULL) + { + char* str; + str = format_string("%s(Conn Failed)", this->selected_peer_info->device_name); + elm_object_item_text_set(this->selected_device_item, str); + SAFE_DELETE(str); + } + } + + else if(connection_state == WIFI_DIRECT_CONNECTION_REQ) + { + + this->is_connection_requested = true; + + } + + else if(connection_state == WIFI_DIRECT_CONNECTION_RSP) + { + this->remote_device_mac = mac_address; + util_state_object_feed(this->state_object_wifi_direct, WIFI_DIRECT_DEVICE_SUCCESSFULL_CONNECTION,(void*)&error_code); + } + else if(connection_state == WIFI_DIRECT_DISCONNECTION_RSP) + { + util_state_object_feed(this->state_object_wifi_direct, WIFI_DIRECT_DEVICE_SUCCESSFULL_DISCONNECTION,(void*)&error_code); + } + else if(connection_state == WIFI_DIRECT_DISCONNECTION_IND) + { + util_state_object_feed(this->state_object_wifi_direct, WIFI_DIRECT_DISCONNECTION_OCCURANCE,(void*)&error_code); + } + else if(connection_state == WIFI_DIRECT_CONNECTION_IN_PROGRESS) + { + if(this->view->tbt_info->apptype == TBT_APP_WIFIDIRECT) + { + ui_utils_label_set_text(this->wifidirect_label, "In Progress...", "left"); + } +// else if(this->view->tbt_info->apptype == TBT_APP_WIFIDIRECT_CONNECTION_CANCEL) +// { +// int ret; +// ret = wifi_direct_cancel_connection(mac_address); +// RETM_IF(result != 0, "wifi_direct_cancel_connection failed with error code %d", ret); +// ui_utils_label_set_text(this->wifidirect_label, "Connection Canceled.", "left"); +// } + } + else + { + ui_utils_label_set_text(this->wifidirect_label, "Not Connected", "left"); + } + } + +} + + +/** + * @function _wifi_direct_discovery_state_chagned_cb + * @since_tizen 2.3 + * @description Wifi Direct Discovery State Chagned Cb + * @parameter int: Int, void*: Void Pointer + * @return static void + */ +static void _wifi_direct_discovery_state_chagned_cb(int error_code, wifi_direct_discovery_state_e discovery_state, void *user_data) +{ + DBG("_wifi_direct_discovery_state_chagned_cb"); + _print_error("_wifi_direct_discovery_state_chagned_cb",error_code); + + + wifidirect_view *this = NULL; + this = (wifidirect_view*)user_data; + + RETM_IF(NULL == this, "view is NULL"); + +switch(discovery_state) +{ + case WIFI_DIRECT_ONLY_LISTEN_STARTED: + DBG( "Wifi Discovery State %d = WIFI_DIRECT_ONLY_LISTEN_STARTED",discovery_state); + ui_utils_label_set_text(this->wifidirect_label, "Only listening mode started ", "left"); + break; + + case WIFI_DIRECT_DISCOVERY_STARTED: + DBG( "Wifi Discovery State %d = WIFI_DIRECT_DISCOVERY_STARTED",discovery_state); + util_state_object_feed(this->state_object_wifi_direct, WIFI_DIRECT_DISCOVERY_FOR_DEVICE_START, NULL); + break; + + case WIFI_DIRECT_DISCOVERY_FOUND: + DBG( "Wifi Discovery State %d = WIFI_DIRECT_DISCOVERY_FOUND",discovery_state); + ui_utils_label_set_text(this->wifidirect_label, "Discovery found", "left"); + break; + + case WIFI_DIRECT_DISCOVERY_FINISHED: + DBG( "Wifi Discovery State %d = WIFI_DIRECT_DISCOVERY_FINISHED",discovery_state); + ui_utils_label_set_text(this->wifidirect_label, "Discovery finsished", "left"); + break; + + default: + DBG( "Wifi Discovery State %d = **unknown**",discovery_state); + break; + } +} + + +/** + * @function _wifi_direct_connected_peer_cb + * @since_tizen 2.3 + * @description Wifi Direct Connected Peer Cb + * @parameter wifi_direct_connected_peer_info_s*: Wifi Direct Connected Peer Info S Pointer, void*: Void Pointer + * @return static bool + */ +static bool _wifi_direct_connected_peer_cb (wifi_direct_connected_peer_info_s *peer, void *user_data) +{ + DBG("_wifi_direct_peer_found_cb"); + + wifidirect_view *this = NULL; + this = (wifidirect_view*)user_data; + + RETVM_IF(NULL == this, false,"view is NULL"); + RETVM_IF(NULL == peer, false,"peer is NULL"); + + return true; +} + + +/** + * @function _wifi_direct_peer_found_cb + * @since_tizen 2.3 + * @description Wifi Direct Peer Found Cb + * @parameter int: Int, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _wifi_direct_peer_found_cb(int error_code, wifi_direct_discovery_state_e discovery_state, const char *mac_address, void *user_data) +{ + DBG("_wifi_direct_peer_found_cb"); + _print_error("_wifi_direct_peer_found_cb",error_code); + + wifidirect_view *this = NULL; + this = (wifidirect_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + RETM_IF(NULL == mac_address, "mac_address is NULL"); + + DBG("mac_address: %s", mac_address); + + util_state_object_feed(this->state_object_wifi_direct, WIFI_DIRECT_PEER_DISCOVERY, (void*)mac_address); +} + + +/** + * @function _wifi_direct_client_ip_address_assigned_cb + * @since_tizen 2.3 + * @description Wifi Direct Client Ip Address Assigned Cb + * @parameter const char*: Const char Pointer, const char*: Const char Pointer, const char*: Const char Pointer, void*: Void Pointer + * @return static void + */ +static void _wifi_direct_client_ip_address_assigned_cb (const char *mac_address, const char *ip_address, const char *interface_address, void *user_data) +{ + RETM_IF(NULL == mac_address, "mac_address is NULL"); + RETM_IF(NULL == ip_address, "ip_address is NULL"); + RETM_IF(NULL == interface_address, "interface_address is NULL"); + RETM_IF(NULL == user_data, "user_data is NULL"); + + DBG("_wifi_direct_client_ip_address_assigned_cb mac_address: %s, ip_address %s , interface_address %s", mac_address, ip_address, interface_address); + +} + + +/** + * @function _device_item_selected_cb + * @since_tizen 2.3 + * @description Device Item Selected Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _device_item_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + + DBG("_device_item_selected_cb"); + + RETM_IF(!obj, "obj is NULL"); + + wifidirect_view *this; + this = evas_object_data_get(obj, "wifidirect_view"); + RETM_IF(!this, "view is NULL"); + if(this->view->tbt_info->apptype == TBT_APP_WIFIDIRECT || this->view->tbt_info->apptype == TBT_APP_WIFIDIRECT_CONNECTION_CANCEL){ + + wifi_direct_discovered_peer_info_s *peer_info = NULL; + peer_info = (wifi_direct_discovered_peer_info_s*)data; + RETM_IF(NULL == peer_info, "peer_info is NULL"); + + if(peer_info) + { + Elm_Object_Item *item; + item = (Elm_Object_Item*)event_info; + elm_list_item_selected_set(item, EINA_TRUE); + + this->selected_peer_info = peer_info; + this->selected_device_item = item; + + + wifi_direct_state_e state; + result = wifi_direct_get_state(&state); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_get_state failed error: %s", get_wifi_direct_error(result)); + if(state==WIFI_DIRECT_STATE_DISCOVERING) + { + DBG("Canceling Discovery"); + result = wifi_direct_cancel_discovery(); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_cancel_discovery failed error: %s", get_wifi_direct_error(result)); + } + + + if(this->selected_peer_info->is_connected) + { + DBG("The device is connected"); + util_state_object_feed(this->state_object_wifi_direct, WIFI_DIRECT_DEVICE_REQUEST_DISCONNECTION, NULL); + } + else + { + result = wifi_direct_create_group(); + DBG("wifi_direct_create_group is %d", result); + result = wifi_direct_set_persistent_group_enabled(true); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_set_persistent_group_enabled fail > Error = %s", get_wifi_direct_error(result)); + + DBG("The device is DISconnected"); + util_state_object_feed(this->state_object_wifi_direct, WIFI_DIRECT_REQUEST_FOR_CONNECTION, NULL); + } + + } + } + else{ + + DBG("Item Clicked"); + } + +} + + +/** + * @function _control_button_pressed_cb + * @since_tizen 2.3 + * @description Control Button Pressed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return static void + */ +static void _control_button_pressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("_control_button_pressed_cb"); + RETM_IF(NULL == data, "data is NULL"); + + wifidirect_view *this = NULL; + this = (wifidirect_view*)data; + RETM_IF(NULL == this, "view is NULL"); + + RETM_IF(NULL == obj, "obj is NULL"); + + if(this->view->tbt_info->apptype == TBT_APP_WIFIDIRECT || this->view->tbt_info->apptype == TBT_APP_WIFIDIRECT_CONNECTION_CANCEL ) + { + _wifidirect_info_view_add(this->view->navi, this->view->tbt_info, this->view->item); + } + +} + + + +/** + * @function wifidirect_list_find_func_cb + * @since_tizen 2.3 + * @description Wifidirect List Find Func Cb + * @parameter gconstpointer: Gconstpointer + * @return static gint + */ +static gint wifidirect_list_find_func_cb(gconstpointer a, gconstpointer b) +{ + if(a && b) + { + wifi_direct_discovered_peer_info_s* peer_a; + peer_a = (wifi_direct_discovered_peer_info_s*)a; + + wifi_direct_discovered_peer_info_s* peer_b; + peer_b = (wifi_direct_discovered_peer_info_s*)b; + + return strcmp(peer_a->mac_address, peer_b->mac_address); + } + else + { + return -1; + } + +} + + +/** + * @function wifidirect_list_free_func_cb + * @since_tizen 2.3 + * @description Wifidirect List Free Func Cb + * @parameter gpointer: Gpointer + * @return static void + */ +static void wifidirect_list_free_func_cb(gpointer data) +{ + if(data) + { + free(data); + data = NULL; + } +} + + +/** + * @function wifidirect_glist_foreach_data + * @since_tizen 2.3 + * @description Wifidirect Glist Foreach Data + * @parameter gpointer: Gpointer + * @return static void + */ +static void wifidirect_glist_foreach_data(gpointer data, gpointer user_data) +{ + wifidirect_view *this = NULL; + this = (wifidirect_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + wifi_direct_discovered_peer_info_s* peer_info_iterate = (wifi_direct_discovered_peer_info_s*)data; + RETM_IF(NULL == peer_info_iterate, "peer_info_iterate is NULL"); + + DBG("Current Mac is %s", peer_info_iterate->mac_address); + RETM_IF(NULL == peer_info_iterate->mac_address, "peer_info_iterate->mac_address is NULL"); + RETM_IF(NULL == this->remote_device_mac, "this->remote_device_mac is NULL"); + if(strcmp(peer_info_iterate->mac_address, this->remote_device_mac) != 0) + { + + elm_list_item_append(this->wifidirect_list, peer_info_iterate->device_name, NULL, NULL, _device_item_selected_cb, peer_info_iterate); + + } + + +} + + +/** + * @function wifidirect_glist_foreach_data_del + * @since_tizen 2.3 + * @description Wifidirect Glist Foreach Data Del + * @parameter gpointer: Gpointer + * @return static void + */ +static void wifidirect_glist_foreach_data_del(gpointer data, gpointer user_data) +{ + wifidirect_view *this = NULL; + this = (wifidirect_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + wifi_direct_discovered_peer_info_s* peer_info_iterate = (wifi_direct_discovered_peer_info_s*)data; + RETM_IF(NULL == peer_info_iterate, "peer_info_iterate is NULL"); + + DBG("Current Mac is %s", peer_info_iterate->mac_address); + RETM_IF(NULL == peer_info_iterate->mac_address, "peer_info_iterate->mac_address is NULL"); + RETM_IF(NULL == this->remote_device_mac, "this->remote_device_mac is NULL"); + if(strcmp(peer_info_iterate->mac_address, this->remote_device_mac) == 0) + { + this->devices_list = g_list_remove (this->devices_list, peer_info_iterate); + } + + +} + + +/** + * @function _app_destroy_cb + * @since_tizen 2.3 + * @description App Destroy Cb + * @parameter void*: Void Pointer + * @return static void + */ +static void _app_destroy_cb(void* this) +{ + DBG("_app_destroy_cb"); + RETM_IF(NULL == this, "data is NULL"); + + wifidirect_view *view = NULL; + view = (wifidirect_view*)this; + RETM_IF(NULL == view, "view is NULL"); + + int result = 0; + + result = wifi_direct_disconnect_all(); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_disconnect_all fail > Error = %s", get_wifi_direct_error(result)); + + bool is_persistent_enabled; + result = wifi_direct_is_persistent_group_enabled(&is_persistent_enabled); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_is_persistent_group_enabled fail > Error = %s", get_wifi_direct_error(result)); + DBG("##SS wifi_direct_is_persistent_group_enabled %d", is_persistent_enabled); + if(is_persistent_enabled) + { + int ret = wifi_direct_foreach_persistent_groups(_wifi_direct_persistent_group_cb, this); + DBG("##SS wifi_direct_foreach_persistent_groups %d", ret); + } + + bool is_owner; + result = wifi_direct_is_group_owner(&is_owner); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_is_group_owner fail > Error = %s", get_wifi_direct_error(result)); + if(is_owner) + { + result = wifi_direct_destroy_group(); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_destroy_group fail > Error = %s", get_wifi_direct_error(result)); + } + + wifi_direct_state_e state; + result = wifi_direct_get_state(&state); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_get_state fail > Error = %s", get_wifi_direct_error(result)); + + if(state == WIFI_DIRECT_STATE_DISCOVERING) + { + result = wifi_direct_cancel_discovery(); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_cancel_discovery fail > Error = %s", get_wifi_direct_error(result)); + } + + result = wifi_direct_deactivate(); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_deactivate fail > Error = %s", get_wifi_direct_error(result)); + + if(view->view->tbt_info->apptype == TBT_APP_WIFIDIRECT)// || view->view->tbt_info->apptype == TBT_APP_WIFIDIRECT_CONNECTION_CANCEL) + { +// result = wifi_direct_unset_discovery_state_changed_cb (); +// RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_unset_discovery_state_changed_cb fail > Error = %s", get_wifi_direct_error(result)); + + result = wifi_direct_unset_peer_found_cb(); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_unset_peer_found_cb fail > Error = %s", get_wifi_direct_error(result)); + } + + //result = wifi_direct_deinitialize(); + //RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_deinitialize fail > Error = %s", get_wifi_direct_error(result)); + + +// SAFE_DELETE(view->ip_address); +// SAFE_DELETE(view->subnet_mask); +// SAFE_DELETE(view->gateway_address); +// SAFE_DELETE(view->network_interface_name); +// DBG(" deleting device list..."); +// g_list_free_full(view->devices_list, wifidirect_list_free_func_cb); +// view->devices_list = NULL; +// DBG(" after deleting device list..."); +// +// if(view->view->tbt_info->apptype == TBT_APP_WIFIDIRECT || view->view->tbt_info->apptype == TBT_APP_WIFIDIRECT_CONNECTION_CANCEL) +// { +// util_state_object_destroy(view->state_object_wifi_direct); +// } +// +// SAFE_DELETE(view->view); +// SAFE_DELETE(view); +} + + + +/** + * @function _wifi_direct_util_state_object_state_changed_cb + * @since_tizen 2.3 + * @description Wifi Direct Util State Object State Changed Cb + * @parameter int: Int, int: Int, int: Int, void*: Void Pointer, void*: Void Pointer + * @return static void + */ +static void _wifi_direct_util_state_object_state_changed_cb(int previous,int now,int feed,void *user_data,void *feed_data) +{ + DBG("Previous state is %d and current state is %d with feed data %d", previous, now, feed); + wifidirect_view *this = NULL; + this = (wifidirect_view*)user_data; + RETM_IF(NULL == this, "view is NULL"); + + if(previous == now && now != WIFI_DIRECT_DISCOVERY_PEER_FOUND) + { + DBG("No need to perform transiton operation"); + return; + } + + + char* str; + +switch (now) +{ + + case WIFI_DIRECT_ACTIVATION_FAILED: + + ui_utils_label_set_text(this->wifidirect_label, "Wifi Direct activation failed", "left"); + break; + + case WIFI_DIRECR_CONNECTION_SUCCESSFULLY_ACTIVATATED: + { + + result = wifi_direct_start_discovery(FALSE, 0); + _print_error("wifi_direct_start_discovery",result); + _safe_print("Starting discovery",this); + } + + break; + + case WIFI_DIRECT_DISCOVERY_FOR_DEVICE_STARTED: + + ui_utils_label_set_text(this->wifidirect_label, "Discovery started ", "left"); + break; + + case WIFI_DIRECT_DISCOVERY_PEER_FOUND: + { + const char* mac_address_connected = NULL; + mac_address_connected = (const char*) feed_data; + RETM_IF(NULL == mac_address_connected, "mac address is null"); + + wifi_direct_discovered_peer_info_s *peer_info = NULL; + result = wifi_direct_get_peer_info((char*)mac_address_connected, &peer_info); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_get_peer_info fail > Error = %s", get_wifi_direct_error(result)); + + + if(peer_info != NULL) + { + GList* peer = NULL; + peer = g_list_find_custom(this->devices_list, peer_info, wifidirect_list_find_func_cb); + + if(peer == NULL) + { + DBG("NEW MAC = %s",mac_address_connected); + + wifi_direct_discovered_peer_info_s *found_peer_info = peer_info; + + this->devices_list = g_list_append(this->devices_list, (gpointer)found_peer_info); + DBG("found_peer_info->device_name %s", found_peer_info->device_name); + + elm_list_item_append(this->wifidirect_list, found_peer_info->device_name, NULL, NULL, _device_item_selected_cb, found_peer_info); + } + else + { + DBG(" dup mac = %s",mac_address_connected); + } + } + + elm_list_go(this->wifidirect_list); + evas_object_show(this->wifidirect_list); + } + + break; + + case WIFI_DIRECT_DEVICE_CONNECTION_REQUESTED: + { + this->is_connection_requested = false; + + + result = wifi_direct_set_group_owner_intent(0); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_set_group_owner_intent error %s", get_wifi_direct_error(result)); + result = wifi_direct_connect(this->selected_peer_info->mac_address); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_connect error %s", get_wifi_direct_error(result)); + + if(result == WIFI_DIRECT_ERROR_NONE) + { + DBG("Inside wifi_direct_connect"); + ui_utils_label_set_text(this->wifidirect_label, "Connecting...", "left"); + str = format_string("%s(Connecting)", this->selected_peer_info->device_name); + elm_object_item_text_set(this->selected_device_item, str); + SAFE_DELETE(str); + } + else + { str = format_string("%s(Connection failed)", this->selected_peer_info->device_name); + elm_object_item_text_set(this->selected_device_item, str); + SAFE_DELETE(str); + } + } + + break; + + case WIFI_DIRECT_DEVICE_SUCCESSFULLY_CONNECTED: + { + int* error_code; + error_code = (int*)feed_data; + DBG("value of error code is %d", *error_code); + char* str; + + bool is_owner; + result = wifi_direct_is_group_owner(&is_owner); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_is_group_owner error %s", get_wifi_direct_error(result)); + DBG("##SS wifi_direct_is_group_owner %d", is_owner); + + int result = wifi_direct_foreach_connected_peers(_wifi_direct_connected_peer_cb, this); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_foreach_connected_peers fail > Error = %s", get_wifi_direct_error(result)); + + + if(*error_code == WIFI_DIRECT_ERROR_NONE) + { + + + + if(!this->is_connection_requested) + { + ui_utils_label_set_text(this->wifidirect_label, "Connected", "left"); + if(this->selected_device_item!=NULL && this->selected_peer_info!=NULL) + { str = format_string("%s(Connected)", this->selected_peer_info->device_name); + elm_object_item_text_set(this->selected_device_item, str); + SAFE_DELETE(str); + this->selected_peer_info->is_connected=true; + } + + } + else + { + + DBG("Connected !!"); + ui_utils_label_set_text(this->wifidirect_label, "Connected", "left"); + + elm_list_clear(this->wifidirect_list); + + g_list_foreach(this->devices_list, wifidirect_glist_foreach_data, this); + elm_list_go(this->wifidirect_list); + evas_object_show(this->wifidirect_list); + g_list_foreach(this->devices_list, wifidirect_glist_foreach_data_del, this); + + wifi_direct_discovered_peer_info_s *peer_info = NULL; + result = wifi_direct_get_peer_info((char*)this->remote_device_mac, &peer_info); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_get_peer_info fail > Error = %s", get_wifi_direct_error(result)); + if(peer_info != NULL) + { + GList* peer = NULL; + peer = g_list_find_custom(this->devices_list, peer_info, wifidirect_list_find_func_cb); + + if(peer == NULL) + { + DBG("### NEW MAC = %s",this->remote_device_mac); + + wifi_direct_discovered_peer_info_s *found_peer_info = NULL; + found_peer_info = malloc(sizeof(wifi_direct_discovered_peer_info_s)); + RETM_IF(!found_peer_info, "malloc failed"); + memcpy(found_peer_info, peer_info, sizeof(wifi_direct_discovered_peer_info_s)); + found_peer_info->device_name = strdup(peer_info->device_name); + found_peer_info->mac_address = strdup(peer_info->mac_address); + found_peer_info->interface_address = strdup(peer_info->interface_address); + + //Hold the last deviceinfo pointer; + this->devices_list = g_list_append(this->devices_list, (gpointer)found_peer_info); +#ifdef TIZEN_2_4 + bool peer_display_available; + wifi_direct_display_type_e peer_display_type; + int peer_display_hdcp, peer_display_port, peer_display_throughput; + + result = wifi_direct_get_peer_display_availability(found_peer_info->mac_address, &peer_display_available); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_get_peer_display_type fail > Error = %s", get_wifi_direct_error(result)); + + result = wifi_direct_get_peer_display_type(found_peer_info->mac_address, &peer_display_type); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_get_peer_display_availability fail > Error = %s", get_wifi_direct_error(result)); + + result = wifi_direct_get_peer_display_hdcp(found_peer_info->mac_address, &peer_display_hdcp); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_get_peer_display_hdcp fail > Error = %s", get_wifi_direct_error(result)); + + result = wifi_direct_get_peer_display_port(found_peer_info->mac_address, &peer_display_port); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_get_peer_display_port fail > Error = %s", get_wifi_direct_error(result)); + + result = wifi_direct_get_peer_display_throughput(found_peer_info->mac_address, &peer_display_throughput); + RETM_IF(result != WIFI_DIRECT_ERROR_NONE, "wifi_direct_get_peer_display_throughput fail > Error = %s", get_wifi_direct_error(result)); +#endif + str = format_string("%s%s", found_peer_info->device_name, "(Connected)"); + elm_list_item_append(this->wifidirect_list, str, NULL, NULL, _device_item_selected_cb, found_peer_info); + SAFE_DELETE(str); +#ifdef TIZEN_2_4 + str = format_string("%s Display type: %s", found_peer_info->device_name, peer_display_type); + elm_list_item_append(this->wifidirect_list, str, NULL, NULL, NULL, NULL); + SAFE_DELETE(str); + + str = format_string("%s Display hdcp: %d", found_peer_info->device_name, peer_display_hdcp); + elm_list_item_append(this->wifidirect_list, str, NULL, NULL, NULL, NULL); + SAFE_DELETE(str); + + str = format_string("%s Display port: %d", found_peer_info->device_name, peer_display_port); + elm_list_item_append(this->wifidirect_list, str, NULL, NULL, NULL, NULL); + SAFE_DELETE(str); + + str = format_string("%s Display throughput: %d", found_peer_info->device_name, peer_display_throughput); + elm_list_item_append(this->wifidirect_list, str, NULL, NULL, NULL, NULL); + SAFE_DELETE(str); +#endif + Elm_Object_Item *item; + item = elm_list_first_item_get(this->wifidirect_list); + + this->selected_peer_info = found_peer_info; + this->selected_device_item = item; + this->selected_peer_info->is_connected=true; + } + else + { + DBG("### dup mac = %s",this->remote_device_mac); + } + } + } + } + + if(*error_code == WIFI_DIRECT_ERROR_OPERATION_FAILED) + { + ui_utils_label_set_text(this->wifidirect_label, "Connection cancelled", "left"); + if(this->selected_device_item!=NULL && this->selected_peer_info!=NULL) + { + elm_object_item_text_set(this->selected_device_item, this->selected_peer_info->device_name); + } + } + } + + break; + + case WIFI_DIRECT_DEVICE_DISCONNECTION_REQUESTED: + { + result = wifi_direct_disconnect(this->selected_peer_info->mac_address); + + if(result == WIFI_DIRECT_ERROR_NONE) + { + DBG("Inside wifi_direct_disconnect"); + ui_utils_label_set_text(this->wifidirect_label, "Disconnecting...", "left"); + str = format_string("%s(DisConnecting)", this->selected_peer_info->device_name); + elm_object_item_text_set(this->selected_device_item, str); + SAFE_DELETE(str); + + + } + else + { str = format_string("%s(DisConnection failed)", this->selected_peer_info->device_name); + elm_object_item_text_set(this->selected_device_item, str); + SAFE_DELETE(str); + } + } + break; + + case WIFI_DIRECT_DEVICE_SUCCESSFULLY_DISCONNECTED: + { + DBG("Successfully disconnected"); + ui_utils_label_set_text(this->wifidirect_label, "DisConnected", "left"); + if(this->selected_device_item!=NULL && this->selected_peer_info!=NULL) + { + str = format_string("%s", this->selected_peer_info->device_name); + elm_object_item_text_set(this->selected_device_item, str); + SAFE_DELETE(str); + this->selected_peer_info->is_connected=false; + } + + + elm_list_clear(this->wifidirect_list); + + g_list_free_full(this->devices_list, wifidirect_list_free_func_cb); + this->devices_list = NULL; + } + break; + } +} + + + +/** + * @function wifi_direct_check_button_add + * @since_tizen 2.3 + * @description Wifi Direct Check Button Add + * @parameter Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return Evas_Object* + */ +Evas_Object* wifi_direct_check_button_add(Evas_Object *parent, Evas_Smart_Cb func, void *user_data) +{ + wifidirect_view *this = NULL; + this = (wifidirect_view*)user_data; + RETVM_IF(NULL == this,NULL ,"view is NULL"); + RETVM_IF(NULL == parent,NULL ,"parent is NULL"); + Evas_Object* check_box = elm_check_add(parent); + evas_object_smart_callback_add(check_box, "changed", func, this); + + return check_box; +} + + +/** + * @function wifi_direct_check_button_changed_cb + * @since_tizen 2.3 + * @description Wifi Direct Check Button Changed Cb + * @parameter void*: Void Pointer, Evas_Object*: Evas Object Pointer, void*: Void Pointer + * @return void + */ +void wifi_direct_check_button_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("Inside wifi_direct_check_button_changed_cb"); + + wifidirect_view *this = NULL; + this = (wifidirect_view*)data; + RETM_IF(NULL == this ,"view is NULL"); + + + this->is_PBC_preffered = elm_check_state_get(obj); +} + + +/** + * @function _wifi_direct_persistent_group_cb + * @since_tizen 2.3 + * @description Wifi Direct Persistent Group Cb + * @parameter const char*: Const char Pointer, const char*: Const char Pointer, void*: Void Pointer + * @return static bool + */ +static bool _wifi_direct_persistent_group_cb(const char *mac_address, const char *ssid, void *user_data) +{ + DBG("YAYYYYY _wifi_direct_persistent_group_cb"); + RETVM_IF(NULL == user_data , false, "user_data is NULL"); + RETVM_IF(NULL == mac_address , false, "mac_address is NULL"); + RETVM_IF(NULL == ssid , false, "ssid is NULL"); + int result; + result = wifi_direct_remove_persistent_group((char*)mac_address, ssid); + RETVM_IF(result != WIFI_DIRECT_ERROR_NONE, false ,"wifi_direct_remove_persistent_group error"); + return true; +} + + +/** + * @function get_wifi_direct_error + * @since_tizen 2.3 + * @description Get Wifi Direct Error + * @parameter wifi_direct_error_e: Wifi Direct Error E + * @return static char* + */ +static char* get_wifi_direct_error(wifi_direct_error_e err_code) +{ + char* error; + +switch (err_code) +{ + case WIFI_DIRECT_ERROR_NONE: + error = "WIFI_DIRECT_ERROR_NONE"; + break; + case WIFI_DIRECT_ERROR_NOT_PERMITTED: + error = "WIFI_DIRECT_ERROR_NOT_PERMITTED"; + break; + case WIFI_DIRECT_ERROR_OUT_OF_MEMORY: + error = "WIFI_DIRECT_ERROR_OUT_OF_MEMORY"; + break; + case WIFI_DIRECT_ERROR_PERMISSION_DENIED: + error = "WIFI_DIRECT_ERROR_PERMISSION_DENIED"; + break; + case WIFI_DIRECT_ERROR_RESOURCE_BUSY: + error = "WIFI_DIRECT_ERROR_RESOURCE_BUSY"; + break; + case WIFI_DIRECT_ERROR_INVALID_PARAMETER: + error = "WIFI_DIRECT_ERROR_INVALID_PARAMETER"; + break; + case WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT: + error = "WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT"; + break; + case WIFI_DIRECT_ERROR_NOT_SUPPORTED: + error = "WIFI_DIRECT_ERROR_NOT_SUPPORTED"; + break; + case WIFI_DIRECT_ERROR_NOT_INITIALIZED: + error = "WIFI_DIRECT_ERROR_NOT_INITIALIZED"; + break; + case WIFI_DIRECT_ERROR_COMMUNICATION_FAILED: + error = "WIFI_DIRECT_ERROR_COMMUNICATION_FAILED"; + break; + case WIFI_DIRECT_ERROR_WIFI_USED: + error = "WIFI_DIRECT_ERROR_WIFI_USED"; + break; + case WIFI_DIRECT_ERROR_MOBILE_AP_USED: + error = "WIFI_DIRECT_ERROR_MOBILE_AP_USED"; + break; + case WIFI_DIRECT_ERROR_CONNECTION_FAILED: + error = "WIFI_DIRECT_ERROR_CONNECTION_FAILED"; + break; + case WIFI_DIRECT_ERROR_AUTH_FAILED: + error = "WIFI_DIRECT_ERROR_AUTH_FAILED"; + break; + case WIFI_DIRECT_ERROR_OPERATION_FAILED: + error = "WIFI_DIRECT_ERROR_OPERATION_FAILED"; + break; + case WIFI_DIRECT_ERROR_TOO_MANY_CLIENT: + error = "WIFI_DIRECT_ERROR_TOO_MANY_CLIENT"; + break; + case WIFI_DIRECT_ERROR_ALREADY_INITIALIZED: + error = "WIFI_DIRECT_ERROR_ALREADY_INITIALIZED"; + break; + case WIFI_DIRECT_ERROR_CONNECTION_CANCELED: + error = "WIFI_DIRECT_ERROR_CONNECTION_CANCELED"; + break; + default: + error = "Unknown error"; + } + return error; +} + +#endif diff --git a/tbtcoreapp/src/window.c b/tbtcoreapp/src/window.c new file mode 100644 index 0000000..576a33e --- /dev/null +++ b/tbtcoreapp/src/window.c @@ -0,0 +1,143 @@ +/******************************************************************************* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *******************************************************************************/ + + +#include "window.h" +#include "utils/config.h" +#include "utils/logger.h" +#include "utils/ui-utils.h" + +#include + +#define APP_NAME "tbtcoreapp" + +struct _window +{ + Evas_Object *win; + Evas_Object *bg; + Evas_Object *layout; + Evas_Object *conform; +}; + + +/** + * @function win_get_win_handle + * @since_tizen 2.3 + * @description Win Get Win Handle + * @parameter const window*: Const window Pointer + * @return Evas_Object* + */ +Evas_Object* win_get_win_handle(const window* win) +{ + RETVM_IF(NULL == win, NULL, "win_get_win_handle win is null"); + return win->win; +} + + +/** + * @function win_create + * @since_tizen 2.3 + * @description Win Create + * @parameter NA + * @return window* + */ +window *win_create() +{ + window *win = calloc(1, sizeof(window)); + RETVM_IF(NULL == win, NULL, "window is null"); + + #ifdef TIZEN_2_3_1 + elm_config_preferred_engine_set(WINDOW_PREFERED_ENGINE); + #else + elm_config_accel_preference_set(WINDOW_PREFERED_ENGINE); + #endif + + win->win = elm_win_add(NULL, APP_NAME, ELM_WIN_BASIC); + elm_win_indicator_mode_set(win->win, ELM_WIN_INDICATOR_SHOW); + elm_win_conformant_set(win->win, EINA_TRUE); + evas_object_show(win->win); + + + win->conform = elm_conformant_add(win->win); + evas_object_size_hint_weight_set(win->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win->win, win->conform); + evas_object_show(win->conform); + + win->bg = elm_bg_add(win->conform); + elm_object_part_content_set(win->conform, PART_SWALLOW_BG, win->bg); + + return win; +} + + +/** + * @function win_destroy + * @since_tizen 2.3 + * @description Win Destroy + * @parameter window*: Window Pointer + * @return void + */ +void win_destroy(window *win) +{ + RETM_IF(NULL == win, "win is null"); + evas_object_del(win->win); + free(win); +} + + +/** + * @function win_lower + * @since_tizen 2.3 + * @description Win Lower + * @parameter window*: Window Pointer + * @return void + */ +void win_lower(window *win) +{ + RETM_IF(NULL == win, "win is null"); + elm_win_lower(win->win); +} + + +/** + * @function win_set_layout + * @since_tizen 2.3 + * @description Win Set Layout + * @parameter window*: Window Pointer, Evas_Object*: Evas Object Pointer + * @return void + */ +void win_set_layout(window *win, Evas_Object *layout) +{ + RETM_IF(NULL == win, "win is null"); + RETM_IF(NULL == layout, "layout is null"); + elm_object_part_content_set(win->conform, PART_SWALLOW_CONTENT, layout); + win->layout = layout; +} + + +/** + * @function win_get_host_layout + * @since_tizen 2.3 + * @description Win Get Host Layout + * @parameter const window*: Const window Pointer + * @return Evas_Object* + */ +Evas_Object *win_get_host_layout(const window *win) +{ + RETVM_IF(NULL == win, NULL, "win is null"); + return win->conform; +} diff --git a/tbtcoreapp/tizen-manifest.xml b/tbtcoreapp/tizen-manifest.xml new file mode 100644 index 0000000..5b13bda --- /dev/null +++ b/tbtcoreapp/tizen-manifest.xml @@ -0,0 +1,23 @@ + + + + + + tbtcoreapp.png + + + http://tizen.org/privilege/location + http://tizen.org/privilege/datasharing + http://tizen.org/privilege/network.get + http://tizen.org/privilege/camera + http://tizen.org/privilege/appmanager.launch + http://tizen.org/privilege/externalstorage + http://tizen.org/privilege/recorder + http://tizen.org/privilege/nfc + http://tizen.org/privilege/bluetooth + http://tizen.org/privilege/mediastorage + http://tizen.org/privilege/internet + http://tizen.org/privilege/notification + http://tizen.org/privilege/network.set + +