kt door annotation LastChangedBy ReplicateLastModified ReplicateEtag LocalChangeSeqNum MasterChangeSeqNum androidx room PrimaryKey autoGenerate equals other hashCode $serializer Companion Entity Serializable ReplicateEntity tableId remoteInsertStrategy RemoteInsertStrategy INSERT_INTO_RECEIVE_VIEW Triggers value Trigger on On RECEIVEVIEW events Event INSERT conditionSql 0SELECT %NEW_LAST_MODIFIED_GREATER_THAN_EXISTING% sqlStatements %UPSERT% order Order INSTEAD_OF name report_remote_insert ATTENDANCE_OVER_TIME_BY_CLASS "ATTENDANCE_OVER_TIME_BY_CLASS_DESC BLANK_REPORT BLANK_REPORT_DESC CLASS CONTENT_COMPLETION CONTENT_COMPLETION_DESC CONTENT_ENTRY CONTENT_USAGE_BY_CLASS CONTENT_USAGE_BY_CLASS_DESC CONTENT_USAGE_OVER_TIME CONTENT_USAGE_OVER_TIME_DESC CUSTOM_RANGE DAY ENROLMENT_LEAVING_REASON ENROLMENT_OUTCOME EVERYTHING FIXED_TEMPLATES collections List GENDER LAST_MONTH_DATE LAST_THREE_MONTHS_DATE LAST_TWO_WEEKS_DATE LAST_WEEK_DATE MONTH NEW_CUSTOM_RANGE_DATE TABLE_ID *TEMPLATE_ATTENDANCE_OVER_TIME_BY_CLASS_UID TEMPLATE_BLANK_REPORT_UID TEMPLATE_CONTENT_COMPLETION_UID #TEMPLATE_CONTENT_USAGE_BY_CLASS_UID $TEMPLATE_CONTENT_USAGE_OVER_TIME_UID !TEMPLATE_UNIQUE_CONTENT_USERS_UID UNIQUE_CONTENT_USERS_OVER_TIME #UNIQUE_CONTENT_USERS_OVER_TIME_DESC WEEK serializer KSerializer GeneratedSerializer descriptor descriptors SerialDescriptor childSerializers Array deserialize decoder encoding Decoder serialize Unit encoder Encoder               &  '  ( ) * . 3 5 6 7 9 : ; < = > ? @ A B I  J K "N P R %T %W %^ H t *u   G    /    2  2")BJ8H  8RbHXT  8RcHXT  8RdHXT  8ReHXT  8RfHXT  8RgHXT  8RhHXT  8RiHXT  8RjHXT  8RkHXT  8RlHXT  8RmHXT  8RnHXT  8RoHXT  8RpHXT  8RqHXT  8RrHXT  8RsH 8RvHXT  8RwHXT  8RxHXT  8RyHXT  8RzHXT  8R{HXT  8R|HXT  8R}HXT  8R~HXT ƚ 8RHXT  8RHXT ʚ 8RHXT Ț 8RHXT š 8RHXT Ě 8RHXT  8RHXT  8RHXT  8 0 0 0 0+ 0 0, 8"-BJ8H  8J2(8H  8J2(2Q(8H  8R8WHX  8 , 0 0. 00 0, 01 03 04 05 6+(,- B/(01  2 084  8" H:GHB( ( ( ((((((((((((((((( (!("(#($(%( 6+(,- B/(01  2 084 BJD2E(8H 8J F8H 8R HX 8R HX 8R HX 8R HX 8R HX 8R HX 8R HX 8R  HX 8R HX 8R HX 8R#8@HX 8 R$8@HX 8  R"8@HX 8 R!8@HX 8 R  HX 8R HX 8R HX 8R HX 8R 8@HX 8 CR HX 8R HX 8R HX 8R HX 8R  HX 8" 0 0 0 0 0 0 0  ! " L M 0#8O \$XQT JP BL% S 0&8UV  J 0'8XY(Z [ J(\ ] 0(8_`(a 8    !"#$ com.ustadmobile.lib.db.entities )-& t com ustadmobile lib db entities xapi StatementEntityJson kotlin Any seen1 Int stmtJsonIdHi Long stmtJsonIdLo stmtEtag fullStatement String serializationConstructorMarker kotlinx serialization internal SerializationConstructorMarker Deprecated message 8This synthesized declaration should not be used directly replaceWith ReplaceWith expression imports level DeprecationLevel HIDDEN js JsExport Ignore StatementEntityJson.kt door annotation ReplicateEtag component1 component2 component3 component4 copy equals Boolean other hashCode toString $serializer Companion androidx room Entity primaryKeys Serializable ReplicateEntity tableId remoteInsertStrategy RemoteInsertStrategy INSERT_INTO_RECEIVE_VIEW Triggers value Trigger on On RECEIVEVIEW events Event INSERT conditionSql 'SELECT %NEW_ETAG_NOT_EQUAL_TO_EXISTING% sqlStatements %UPSERT% order Order INSTEAD_OF name !statemententityjson_remote_insert TABLE_ID serializer KSerializer GeneratedSerializer descriptor descriptors SerialDescriptor childSerializers Array deserialize decoder encoding Decoder serialize Unit encoder Encoder                        ! " # % & ' . 4 5 6  8 9 < > @ !B !E !L 3  R 2 S  U )V X  [ ,\ ^ ,`"K%BJQ8H  $RPHXT  $ 0 0 0 0& $"'BJW8H  $JY2Z(8H  $J]2_(2?(8H  $RT8WHX  $ , 0 0( 0* 0& 0+ 0- 0. 0/ 6( B(   08  $" 3:23Bd ( ( (((( 6( B(   08 B  ( (((J (8H $J )8H $J *8H $J +8H $J*,2 (2 (2(2(8H $J-2/(8H $J 08H $J 18H $R HX $R8@HX $ R  HX $R  HX $* 0 0 0 0 0 0 0 0 0 7 J( J(   :  ; 08= \ X?T JP BL! A 0"8CD  J 0#8FG(H I J(J K 0$8MN(O $ $com.ustadmobile.lib.db.entities.xapi %'@  shallowCopy com ustadmobile lib db entities LeavingReason block kotlin Function1 Unit ExtensionFunctionType LeavingReasonShallowCopy.kt extF               02(8@  0 0 0  #com.ustadmobile.lib.db.entities.ext2  shallowCopy com ustadmobile lib db entities Person block kotlin Function1 Unit ExtensionFunctionType PersonShallowCopy.kt extF               02(8@  0 0 0  #com.ustadmobile.lib.db.entities.ext  com ustadmobile core db dao SystemPermissionDaoCommon kotlin Any 3SELECT_SYSTEM_PERMISSIONS_EXISTS_FOR_ACCOUNTUID_SQL String SystemPermissionDaoCommon.kt  SELECT EXISTS(SELECT 1 FROM SystemPermission WHERE :accountPersonUid != 0 AND SystemPermission.spToPersonUid = :accountPersonUid AND (SystemPermission.spPermissionsFlag & :permission ) > 0 AND NOT SystemPermission.spIsDeleted) 0SYSTEM_PERMISSIONS_EXISTS_FOR_ACCOUNTUID_SQL_PT1  EXISTS(SELECT 1 FROM SystemPermission WHERE :accountPersonUid != 0 AND SystemPermission.spToPersonUid = :accountPersonUid AND (SystemPermission.spPermissionsFlag & 0SYSTEM_PERMISSIONS_EXISTS_FOR_ACCOUNTUID_SQL_PT2 K ) > 0 AND NOT SystemPermission.spIsDeleted) 8          "SBRHXT ( R HXT ( RHXT (  0 0 com.ustadmobile.core.db.dao   com ustadmobile core db dao CommentsDao_Repo CommentsDao _db door room RoomDatabase _repo DoorDatabaseRepository _dao _httpClient io ktor client HttpClient _clientId kotlin Long _endpoint String CommentsDao_Repo.kt !findCourseCommentsByAssignmentUid androidx paging PagingSource Int lib composites CommentsAndName assignmentUid includeDeleted Boolean (findCourseCommentsByAssignmentUidPersons collections List entities Person .findPrivateCommentsForSubmitterByAssignmentUid submitterUid 5findPrivateCommentsForSubmitterByAssignmentUidPersons PersonAndPicture )findPrivateCommentsForUserByAssignmentUid accountPersonUid 0findPrivateCommentsForUserByAssignmentUidPersons insertAsync comments Comments updateDeletedByCommentUid Unit uid deleted changeTime                                 # % & ' ( , 2 4"B$( ( ((((J2!(2"( 8H J$2!(8 H@ J)2*(2!(2"( 8H J+2*(2!(8 H J-2.(2!(2"( 8H J/2.(2!(8 H@ J021(8H@ J325(26( 27(8H@ RH R H RH RH RH R H P 0 0 0 0 0 0 0 0 0 0 0  0 0  0 0 0!  com.ustadmobile.core.db.dao * { com ustadmobile core db dao PersonDao_JdbcImpl PersonDao _db door room RoomDatabase PersonDao_JdbcImpl.kt _insertAdapterPersonAuth_abort EntityInsertionAdapter lib entities PersonAuth %_insertAdapterPersonGroupMember_abort PersonGroupMember _insertAdapterPersonGroup_abort PersonGroup _insertAdapterPerson_abort Person _insertAdapterPerson_upsert countUsername kotlin Int username String findByUid uid Long findByUidAsFlow kotlinx coroutines flow Flow findByUidAsync findByUidLive findByUidWithDisplayDetailsFlow PersonAndDisplayDetail personUid accountPersonUid findByUidWithDisplayDetailsLive activeUserPersonUid findByUidWithPicture composites PersonAndPicture findByUidWithPictureAsFlow findByUsername findByUsernameAndPasswordHash2 passwordHash findByUsernameAsync findPersonsWithPermissionAsList collections List PersonAndListDisplayDetails timestamp excludeClazz excludeSelected sortOrder searchText 'findPersonsWithPermissionAsPagingSource androidx paging PagingSource findSystemAccount nodeId findUidAndPasswordHashAsync PersonUidAndPasswordHash getAllPerson getNamesByUid PersonNames getNamesByUidAsync insert entity insertAsync insertList Unit entityList insertListAsync insertOrReplace person insertPersonAuth personAuth insertPersonGroup personGroup insertPersonGroupMember personGroupMember selectExistingUsernames usernames update updateAsync updateUsername currentTime                               ! " # $  (  . / 6 7 8 ?  @ !A  E H N"B(J2( 8 H@ J2( 8 H J 2( 8H J%2( 8 H@ J&2( 8H J'2)( 2*( 8H J+2)( 2,( 8H J-2*( 8H@ J02( 8H J12(8 H J22( 23( 8 H@ J42( 8 H@ J-529( 2:( 2;(2*( 2<( 2=(8H J->29( 2:( 2;(2*( 2<( 2=(8H JB2C( 8 H@ JD2( 8H@ J F8H JG2( 8H JI2( 8H@ JJ2K(8 H JL2K(8 H@ JM2O(8H JP2O(8H@ JQ2R(8H@ JS2T(8H JU2V(8 H@ JW2X(8 H@ JY2Z(8H@ J[2K(8H J\2K(8 H@ J]2)( 2( 2^( 8 H@ RH R H RH RH RH RH  0 0 0 0 0 0 0 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0  0  0" 0# 0 0$ 0 0% 0  0 com.ustadmobile.core.db.dao ? | com ustadmobile core db dao ClazzAssignmentDaoCommon kotlin Any ASSIGNMENT_CLAZZ_UID_CTE_SQL String ClazzAssignmentDaoCommon.kt  AssignmentClazzUid(clazzUid) AS (SELECT ClazzAssignment.caClazzUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid) 5HAS_LEARNINGRECORD_AND_MEMBER_VIEW_PERMISSION_CTE_SQL  HasLearningRecordSelectPermission (hasPermission) AS (SELECT ( ( /* If the accountPersonUid is the owner of the course, all permissions are granted */ (COALESCE( (SELECT _Clazz_Permission.clazzOwnerPersonUid FROM Clazz _Clazz_Permission WHERE _Clazz_Permission.clazzUid = :clazzUid), 0) = :accountPersonUid) /* If there is a CoursePermission entity that is for the course as per the clazzUid parameter that is granted to the person directly or to the enrolmentRole that the person has in the course, then permission is granted. */ OR EXISTS(SELECT CoursePermission.cpUid FROM CoursePermission LEFT JOIN ClazzEnrolment ClazzEnrolment_ForAccountPerson ON CoursePermission.cpToEnrolmentRole != 0 AND ClazzEnrolment_ForAccountPerson.clazzEnrolmentUid = (SELECT COALESCE( (SELECT _ClazzEnrolment_AccountPersonInner.clazzEnrolmentUid FROM ClazzEnrolment _ClazzEnrolment_AccountPersonInner WHERE _ClazzEnrolment_AccountPersonInner.clazzEnrolmentClazzUid = CoursePermission.cpClazzUid AND _ClazzEnrolment_AccountPersonInner.clazzEnrolmentPersonUid = :accountPersonUid AND _ClazzEnrolment_AccountPersonInner.clazzEnrolmentActive ORDER BY _ClazzEnrolment_AccountPersonInner.clazzEnrolmentDateLeft DESC LIMIT 1), 0)) WHERE CoursePermission.cpClazzUid = :clazzUid AND (CoursePermission.cpToPersonUid = :accountPersonUid OR CoursePermission.cpToEnrolmentRole = ClazzEnrolment_ForAccountPerson.clazzEnrolmentRole) AND (CoursePermission.cpPermissionsFlag & 128 ) > 0) OR EXISTS(SELECT SystemPermission.spUid FROM SystemPermission WHERE SystemPermission.spToPersonUid = :accountPersonUid AND (SystemPermission.spPermissionsFlag & 128 ) > 0) ) )) #SELECT_ASSIGNMENT_IS_PEERMARKED_SQL  ((SELECT ClazzAssignment.caMarkingType FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid) = 2) *SELECT_GROUPSET_UID_FOR_ASSIGNMENT_UID_SQL  SELECT ClazzAssignment.caGroupUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid GSELECT_PERSONUID_IF_ENROLLED_ELSE_0_FOR_PERSONUID_AND_ASSIGNMENTUID_SQL  SELECT COALESCE( (SELECT ClazzEnrolment.clazzEnrolmentPersonUid FROM ClazzEnrolment WHERE ClazzEnrolment.clazzEnrolmentPersonUid = :accountPersonUid AND ClazzEnrolment.clazzEnrolmentRole = 1000 AND ClazzEnrolment.clazzEnrolmentClazzUid = (SELECT ClazzAssignment.caClazzUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid) LIMIT 1), 0) >SELECT_SUBMITTER_UID_FOR_ACCOUNT_PERSON_UID_AND_ASSIGNMENT_CTE  AccountSubmitterUid(accountSubmitterUid) AS ( SELECT CASE -- When assignment is individual then the submitter uid is the personuid if they are enrolled in the course otherwise zero WHEN (SELECT caGroupUid FROM ClazzAssignment WHERE caUid = :assignmentUid) = 0 THEN ( SELECT COALESCE( (SELECT ClazzEnrolment.clazzEnrolmentPersonUid FROM ClazzEnrolment WHERE ClazzEnrolment.clazzEnrolmentPersonUid = :accountPersonUid AND ClazzEnrolment.clazzEnrolmentRole = 1000 AND ClazzEnrolment.clazzEnrolmentClazzUid = (SELECT ClazzAssignment.caClazzUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid) LIMIT 1), 0) ) -- When assignment is by groups but the active user is not an enrolled student then the submitter uid is zero WHEN (SELECT caGroupUid FROM ClazzAssignment WHERE caUid = :assignmentUid) != 0 AND ( SELECT COALESCE( (SELECT ClazzEnrolment.clazzEnrolmentPersonUid FROM ClazzEnrolment WHERE ClazzEnrolment.clazzEnrolmentPersonUid = :accountPersonUid AND ClazzEnrolment.clazzEnrolmentRole = 1000 AND ClazzEnrolment.clazzEnrolmentClazzUid = (SELECT ClazzAssignment.caClazzUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid) LIMIT 1), 0) ) = 0 THEN 0 -- When assignment is by groups and the person is an enrolled student the submitter uid is the -- group that they are assigned to. If they are not assigned to a group but are enrolled -- then we submitter uid = SUBMITTER_ENROLLED_BUT_NOT_IN_GROUP ELSE COALESCE( (SELECT CourseGroupMember.cgmGroupNumber FROM CourseGroupMember WHERE ( SELECT COALESCE( (SELECT ClazzEnrolment.clazzEnrolmentPersonUid FROM ClazzEnrolment WHERE ClazzEnrolment.clazzEnrolmentPersonUid = :accountPersonUid AND ClazzEnrolment.clazzEnrolmentRole = 1000 AND ClazzEnrolment.clazzEnrolmentClazzUid = (SELECT ClazzAssignment.caClazzUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid) LIMIT 1), 0) ) > 0 AND CourseGroupMember.cgmSetUid = (SELECT caGroupUid FROM ClazzAssignment WHERE caUid = :assignmentUid) AND CourseGroupMember.cgmPersonUid = :accountPersonUid LIMIT 1), -1) END ) 8SELECT_SUBMITTER_UID_FOR_PERSONUID_AND_ASSIGNMENTUID_SQL  SELECT CASE -- When assignment is individual then the submitter uid is the personuid if they are enrolled in the course otherwise zero WHEN (SELECT caGroupUid FROM ClazzAssignment WHERE caUid = :assignmentUid) = 0 THEN ( SELECT COALESCE( (SELECT ClazzEnrolment.clazzEnrolmentPersonUid FROM ClazzEnrolment WHERE ClazzEnrolment.clazzEnrolmentPersonUid = :accountPersonUid AND ClazzEnrolment.clazzEnrolmentRole = 1000 AND ClazzEnrolment.clazzEnrolmentClazzUid = (SELECT ClazzAssignment.caClazzUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid) LIMIT 1), 0) ) -- When assignment is by groups but the active user is not an enrolled student then the submitter uid is zero WHEN (SELECT caGroupUid FROM ClazzAssignment WHERE caUid = :assignmentUid) != 0 AND ( SELECT COALESCE( (SELECT ClazzEnrolment.clazzEnrolmentPersonUid FROM ClazzEnrolment WHERE ClazzEnrolment.clazzEnrolmentPersonUid = :accountPersonUid AND ClazzEnrolment.clazzEnrolmentRole = 1000 AND ClazzEnrolment.clazzEnrolmentClazzUid = (SELECT ClazzAssignment.caClazzUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid) LIMIT 1), 0) ) = 0 THEN 0 -- When assignment is by groups and the person is an enrolled student the submitter uid is the -- group that they are assigned to. If they are not assigned to a group but are enrolled -- then we submitter uid = SUBMITTER_ENROLLED_BUT_NOT_IN_GROUP ELSE COALESCE( (SELECT CourseGroupMember.cgmGroupNumber FROM CourseGroupMember WHERE ( SELECT COALESCE( (SELECT ClazzEnrolment.clazzEnrolmentPersonUid FROM ClazzEnrolment WHERE ClazzEnrolment.clazzEnrolmentPersonUid = :accountPersonUid AND ClazzEnrolment.clazzEnrolmentRole = 1000 AND ClazzEnrolment.clazzEnrolmentClazzUid = (SELECT ClazzAssignment.caClazzUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid) LIMIT 1), 0) ) > 0 AND CourseGroupMember.cgmSetUid = (SELECT caGroupUid FROM ClazzAssignment WHERE caUid = :assignmentUid) AND CourseGroupMember.cgmPersonUid = :accountPersonUid LIMIT 1), -1) END SORT_NAME_ASC Int SORT_NAME_DESC SUBMITTER_LIST_CTE2_SQL  SubmitterList(submitterId, name) AS -- List of submitter uids and names if individual assignment eg caGroupUid = 0 (SELECT DISTINCT ClazzEnrolment.clazzEnrolmentPersonUid AS submitterId, Person.firstNames || ' ' || Person.lastName AS name FROM ClazzEnrolment JOIN Person ON Person.personUid = ClazzEnrolment.clazzEnrolmentPersonUid WHERE ( SELECT ClazzAssignment.caGroupUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid ) = 0 AND ClazzEnrolment.clazzEnrolmentClazzUid = :clazzUid AND ClazzEnrolment.clazzEnrolmentRole = 1000 -- either the active user has learnign record select permission on class or is an assigned reviewer for submitter AND ( (SELECT hasPermission FROM HasLearningRecordSelectPermission) OR -- check if the active person eg accountpersonuid is assigned to mark this peer ( ((SELECT ClazzAssignment.caMarkingType FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid) = 2) AND EXISTS(SELECT PeerReviewerAllocation.praUid FROM PeerReviewerAllocation WHERE PeerReviewerAllocation.praAssignmentUid = :assignmentUid AND PeerReviewerAllocation.praToMarkerSubmitterUid = ClazzEnrolment.clazzEnrolmentPersonUid AND PeerReviewerAllocation.praMarkerSubmitterUid = :accountPersonUid)) ) UNION -- List of submitter uids and names if the assignment is submitted by groups e.g. caGroupUid != 0 SELECT DISTINCT CourseGroupMember.cgmGroupNumber AS submitterId, :group || ' ' || CourseGroupMember.cgmGroupNumber AS name FROM CourseGroupMember WHERE ( SELECT ClazzAssignment.caGroupUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid ) != 0 AND CourseGroupMember.cgmSetUid = ( SELECT ClazzAssignment.caGroupUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid ) -- either the active user has learning record select permission on class or is an assigned reviewer for submitter AND ( (SELECT hasPermission FROM HasLearningRecordSelectPermission) OR --check if the active user is in a group that was allocated to do a peer review of the given submitter uid ( ((SELECT ClazzAssignment.caMarkingType FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid) = 2) AND EXISTS(SELECT PeerReviewerAllocation.praUid FROM PeerReviewerAllocation WHERE PeerReviewerAllocation.praAssignmentUid = :assignmentUid AND PeerReviewerAllocation.praToMarkerSubmitterUid = CourseGroupMember.cgmGroupNumber AND PeerReviewerAllocation.praMarkerSubmitterUid = (SELECT CourseGroupMemberInner.cgmGroupNumber FROM CourseGroupMember CourseGroupMemberInner WHERE CourseGroupMemberInner.cgmSetUid = ( SELECT ClazzAssignment.caGroupUid FROM ClazzAssignment WHERE ClazzAssignment.caUid = :assignmentUid ) AND CourseGroupMemberInner.cgmPersonUid = :accountPersonUid LIMIT 1) )) ) ) %SUBMITTER_LIST_WITHOUT_ASSIGNMENT_CTE WITH SubmitterList (submitterId, name) AS (SELECT DISTINCT ClazzEnrolment.clazzEnrolmentPersonUid AS submitterId, Person.firstNames || ' ' || Person.lastName AS name FROM ClazzEnrolment JOIN Person ON Person.personUid = ClazzEnrolment.clazzEnrolmentPersonUid WHERE :groupUid = 0 AND clazzEnrolmentClazzUid = :clazzUid AND clazzEnrolmentActive AND clazzEnrolmentRole = 1000 GROUP BY submitterId, name UNION SELECT DISTINCT CourseGroupMember.cgmGroupNumber AS submitterId, :group || ' ' || CourseGroupMember.cgmGroupNumber AS name FROM CourseGroupMember JOIN CourseGroupSet ON CourseGroupSet.cgsUid = :groupUid WHERE CourseGroupMember.cgmSetUid = CourseGroupSet.cgsUid AND CourseGroupMember.cgmGroupNumber != 0 GROUP BY submitterId, name ) @           "BRHXT ( R HXT ( RHXT ( RHXT ( RHXT ( RHXT ( RHXT ( RHXT  RHXT  RHXT ( RHXT (  0 0 0 com.ustadmobile.core.db.dao 3'   com.ustadmobile.core.db.dao