MZ@ !L!This program cannot be run in DOS mode. $_>>>#>>?%>!> >$>=>'>">Rich>PEdR"  E ZM`PC $  .text `.dataHB8@.pdataCPD(@@.idata'(l@@.rsrc@@.reloc ~ @B HxP<BR$=L9o<{Oyz"P "P string too longinvalid string position",|4\ H`89Invalid parameter passed to C runtime function. FFF+ _,d* _,dXvH,m` 7 ʩWLDAP32.dllnetutils.dllDSROLE.dlldfscli.dlllogoncli.dllSecur32.dllMPR.dllSHLWAPI.dllbad allocationCLSIDAppIDSMDBValForceRemoveNoRemoveDeleteComponent CategoriesFileTypeInterfaceHardwareMimeSAMSECURITYSYSTEMSoftwareTypeLib{'Mk~F}PjItH D% OqlnF^DAH[M̌FsM; $^q}J. 8LC ŅӘ}^ERw + H!SHx^m@kۦ5F1}dUZ O+_իv$E.}VE_h]M'nS<ٙ%DXfhjI|Cmj`@Y'I85UwsB s 킛jO0EF.lJ6mDXN6yŕJ BlFF?NF[VH2H%e&OKKm]OOV^aMDě^NtjLo-\QKC<7̮wYW Ki0@:>2H2H%e&?NF[VH ciB*yMPsCpO@qOS}PjItH DsM; $1}dUZ O+_իvٙ%DXf%UPEz@^DAH[M̌^q}J. @Y'OKKm]O(ADSo:=_h]M'nS<}^ERw + H! HmF٤M_/}`" bA4]CjL iteratorlT6MlPPNML8QR$R$VVIU@PNMGHHPIIIUP P0P`L}@p~{P~Ѓ  |`p` -*@,t;t<p=>{Pt`ȏ~pxp``y0|Py0}}x'@7\6L8p909M4Mtܐ2334X445D55256UPMLL$TPMLL(|TPLLLȢȷSPLLLSPLLLdP RPLLLܣȣ0L R@PLLLؖ@xQPtLLLlPP `ĔyPppP|zyy}pyp`p0Ppz@|   t KIKؕĕ,8xx888LH<|  xPP0p``@<(~{|Ђ0p|px~z z@ЉP} Xlhd|KI KP<@@<dtd0$XpHPPPP0Ѐxd̝P`PP z@@0~0Ё ~z{ P`l{xp|@~`}0 Є 0{z||x{x0 { 4KJ(hh(h(hx h |l@O0P``ܤD{p}0zxPІJI8JXPгдеP dOP`~Ty0pz}xy` `|z{z @x@}`z L< JIIhX,Px00PhDXT|N@`P@y0p,@~{00x`}Јp~0p` PЌ000yЅ`~@{p@z` |Њx|Ї P~@`} |}`\X̧< ~@,P0y`z@p{~@p~ y@@ }}`{0} P{}`yP@P@yЋPPzz|00 y|{|@ypI[BSTR=%s],[I4=%d],[I2=%d],[other value],[other value]%s\%s%s%s calls myAzNewObject enumObject=%d %s leaves myAzNewObject: return HRESULT value=0x%lx %s calls myAzCreateObject bstrObjectName=%s %s leaves myAzCreateObject: return HRESULT value=0x%lx %s calls myAzDeleteObject bstrObjectName=%s %s leaves myAzDeleteObject: return HRESULT value=0x%lx %s calls myAzOpenObject bstrObjectName=%s %s leave myAzOpenObject: return HRESULT value=0x%lx %s calls myAzCloseObject bstrObjectName=%s %s leaves myAzCloseObject: return HRESULT value=0x%lx %s calls myAzNextObject Enumeration completed. %s leaves myAzNextObject: no more results. %s leaves myAzNextObject: return HRESULT value=0x%lx %s calls myAzGetProperty: lPropId=%d Can't DS bind. Will just return non-UPN names %s leaves myAzGetProperty: return HRESULT value=0x%lx pvarProp=%s %s leaves myAzGetProperty: return HRESULT value=0x%lx pvarProp=NULL %s calls %s: lPropId=%d pvarProp=%s %s calls %s: lPropId=%d pvarProp=NULL myAzSetProperty%s leaves myAzSetProperty: return HRESULT value=0x%lx myAzAddOrDeletePropertyItem%s leaves myAzAddOrDeletePropertyItem: return HRESULT value=0x%lx %s calls myGetBstrProperty: lPropId=%d %s leaves myGetBstrProperty: return HRESULT value=0x%lx pbstrProp=NULL %s leaves myGetBstrProperty: return HRESULT value=0x%lx *pbstrProp=%s %s calls mySetBstrProperty: lPropId=%d bstrProp=%s %s leaves mySetBstrProperty: return HRESULT value=0x%lx %s calls myGetLongProperty: lPropId=%d %s leaves myGetLongProperty: return HRESULT value=0x%lx plProp=NULL %s leaves myGetLongProperty: return HRESULT value=0x%lx *plProp=%d %s calls mySetLongProperty: lPropId=%d lProp=%d %s leaves mySetLongProperty: return HRESULT value=0x%lx %s calls myGetBoolProperty: lPropId=%d %s leaves myGetBoolProperty: return HRESULT value=0x%lx plProp=NULL %s leaves myGetBoolProperty: return HRESULT value=0x%lx *plProp=%d %s calls mySetBoolProperty: lPropId=%d fProp=%d %s leaves mySetBoolProperty: return HRESULT value=0x%lx CAzPrincipalLocator constructor called.Software\Microsoft\AzMan\ObjectPickerCAzPrincipalLocator::CAzPrincipalLocator, failed to query value for ObjectPicker CLSIDCAzPrincipalLocator::CAzPrincipalLocator, registered object picker doesn't implement IAzObjectPickerCAzPrincipalLocator::CAzPrincipalLocator, registered object picker doesn't implement IAzNameResolverCAzPrincipalLocator::CAzPrincipalLocator RegOpenKeyEx failed.CAzPrincipalLocator destructor called.Enter CAzPrincipalLocator::get_NameResolver Leave CAzPrincipalLocator::get_NameResolver: return HRESULT value=0x%lx Enter CAzPrincipalLocator::get_ObjectPicker Leave CAzPrincipalLocator::get_ObjectPicker: return HRESULT value=0x%lx CAzAuthorizationStore constructor called. CAzAuthorizationStore destructor called. CAzAuthorizationStore::get_DescriptionCAzAuthorizationStore::put_DescriptionCAzAuthorizationStore::get_ApplicationDataCAzAuthorizationStore::put_ApplicationDataCAzAuthorizationStore::get_DomainTimeoutCAzAuthorizationStore::put_DomainTimeoutCAzAuthorizationStore::get_ScriptEngineTimeoutCAzAuthorizationStore::put_ScriptEngineTimeoutCAzAuthorizationStore::get_MaxScriptEnginesCAzAuthorizationStore::put_MaxScriptEnginesCAzAuthorizationStore::get_GenerateAuditsCAzAuthorizationStore::put_GenerateAuditsCAzAuthorizationStore::get_WritableCAzAuthorizationStore::GetPropertyCAzAuthorizationStore::SetPropertyCAzAuthorizationStore::AddPropertyItemCAzAuthorizationStore::DeletePropertyItemCAzAuthorizationStore::get_PolicyAdministratorsCAzAuthorizationStore::get_PolicyAdministratorsNameCAzAuthorizationStore::get_PolicyReadersCAzAuthorizationStore::get_PolicyReadersNameCAzAuthorizationStore::AddPolicyAdministratorCAzAuthorizationStore::AddPolicyAdministratorNameCAzAuthorizationStore::DeletePolicyAdministratorCAzAuthorizationStore::DeletePolicyAdministratorNameCAzAuthorizationStore::AddPolicyReaderCAzAuthorizationStore::AddPolicyReaderNameCAzAuthorizationStore::DeletePolicyReaderCAzAuthorizationStore::DeletePolicyReaderNameCAzAuthorizationStore::get_TargetMachineEnter CAzAuthorizationStore::Initialize: lFlag=0x%lx bstrPolicyURL=[%s] Leave CAzAuthorizationStore::Initialize: return HRESULT value=0x%lx Enter CAzAuthorizationStore::IsUpdateNeeded Leave CAzAuthorizationStore::IsUpdateNeeded: return HRESULT value=0x%lx pbIsUpdateNeeded == NULL Leave CAzAuthorizationStore::IsUpdateNeeded: return HRESULT value=0x%lx *pbIsUpdateNeeded=%d Enter CAzAuthorizationStore::UpdateCache Leave CAzAuthorizationStore::UpdateCache: return HRESULT value=0x%lx Enter CAzAuthorizationStore::Delete Leave CAzAuthorizationStore::Delete: return HRESULT value=0x%lx CAzAuthorizationStore::get_ApplicationsCAzAuthorizationStore::OpenApplicationCAzAuthorizationStore::CloseApplicationCAzAuthorizationStore::CreateApplicationCAzAuthorizationStore::DeleteApplicationCAzAuthorizationStore::get_ApplicationGroupsCAzAuthorizationStore::CreateApplicationGroupCAzAuthorizationStore::OpenApplicationGroupCAzAuthorizationStore::DeleteApplicationGroupEnter CAzAuthorizationStore::Submit lFlags=%d Leave CAzAuthorizationStore::Submit: return HRESULT value=0x%lx CAzAuthorizationStore::get_DelegatedPolicyUsersCAzAuthorizationStore::get_DelegatedPolicyUsersNameCAzAuthorizationStore::AddDelegatedPolicyUserCAzAuthorizationStore::AddDelegatedPolicyUserNameCAzAuthorizationStore::DeleteDelegatedPolicyUserCAzAuthorizationStore::DeleteDelegatedPolicyUserNameCAzAuthorizationStore::put_ApplyStoreSaclCAzAuthorizationStore::get_ApplyStoreSaclCAzAuthorizationStore::OpenApplication2CAzAuthorizationStore::CreateApplication2CAzApplication constructor calledCAzApplication destructor calledEnter CAzApplication::_Init hHandle=0x%lx Leave CAzApplication::_Init: return HRESULT value=0x%lx CAzApplication::get_DescriptionCAzApplication::put_DescriptionCAzApplication::get_NameCAzApplication::put_NameCAzApplication::get_ApplicationDataCAzApplication::put_ApplicationDataCAzApplication::get_AuthzInterfaceClsidCAzApplication::put_AuthzInterfaceClsidCAzApplication::get_VersionCAzApplication::put_VersionCAzApplication::get_GenerateAuditsCAzApplication::put_GenerateAuditsCAzApplication::get_BizruleEnabledCAzApplication::get_ApplyStoreSaclCAzApplication::put_ApplyStoreSaclCAzApplication::get_WritableCAzApplication::GetPropertyCAzApplication::SetPropertyCAzApplication::get_PolicyAdministratorsCAzApplication::get_PolicyAdministratorsNameCAzApplication::get_PolicyReadersCAzApplication::get_PolicyReadersNameCAzApplication::AddPolicyAdministratorCAzApplication::AddPolicyAdministratorNameCAzApplication::DeletePolicyAdministratorCAzApplication::DeletePolicyAdministratorNameCAzApplication::AddPolicyReaderCAzApplication::AddPolicyReaderNameCAzApplication::DeletePolicyReaderCAzApplication::DeletePolicyReaderNameCAzApplication::get_ScopesCAzApplication::OpenScopeCAzApplication::CreateScopeCAzApplication::DeleteScopeCAzApplication::get_OperationsCAzApplication::OpenOperationCAzApplication::CreateOperationCAzApplication::DeleteOperationCAzApplication::get_TasksCAzApplication::OpenTaskCAzApplication::CreateTaskCAzApplication::DeleteTaskCAzApplication::get_ApplicationGroupsCAzApplication::OpenApplicationGroupCAzApplication::CreateApplicationGroupCAzApplication::DeleteApplicationGroupCAzApplication::get_RolesCAzApplication::OpenRoleCAzApplication::CreateRoleCAzApplication::DeleteRoleEnter CAzApplication::InitializeClientContextFromToken ullTokenHandle=0x%8lx%8lx Enter CAzApplication::InitializeClientContextFromToken ullTokenHandle=%d CAzApplication::InitializeClientContextFromTokenLeave CAzApplication::InitializeClientContextFromToken: return HRESULT value=0x%lx Enter CAzApplication::InitializeClientContextFromName ClientName=%s DomainName=%s CAzApplication::InitializeClientContextFromNameLeave CAzApplication::InitializeClientContextFromName: return HRESULT value=0x%lx Enter CAzApplication::InitializeClientContextFromStringSid SidString=%s CAzApplication::InitializeClientContextFromStringSidLeave CAzApplication::InitializeClientContextFromStringSid: return HRESULT value=0x%lx CAzApplication::AddPropertyItemCAzApplication::DeletePropertyItemEnter CAzApplication::Submit lFlags=%d Leave CAzApplication::Submit: return HRESULT value=0x%lx get_DelegatedPolicyUsersget_DelegatedPolicyUsersNameCAzApplication::AddDelegatedPolicyUserCAzApplication::AddDelegatedPolicyUserNameCAzApplication::DeleteDelegatedPolicyUserEnter CAzApplication::ScopeExists bstrScopeName=%s Bad Param: %d , %d Leave CAzApplication::ScopeExists: return HRESULT value=0x%lx Enter CAzApplication::OpenScope2 bstrScopeName=%s Leave CAzApplication::OpenScope2: return HRESULT value=0x%lx Enter CAzApplication::CreateScope2 bstrScopeName=%s Leave CAzApplication::CreateScope2: return HRESULT value=0x%lx Enter CAzApplication::DeleteScope2 bstrScopeName=%s Leave CAzApplication::DeleteScope2: return HRESULT value=0x%lx Enter CAzApplication::get_RoleDefinitions CAzApplication::get_RoleDefinitionsLeave CAzApplication::get_RoleDefinitions: return HRESULT value=0x%lx Enter CAzApplication::CreateRoleDefinition bstrRoleDefinitionName=%s Leave CAzApplication::CreateRoleDefinition: return HRESULT value=0x%lx Enter CAzApplication::OpenRoleDefinition bstrRoleDefinitionName=%s Leave CAzApplication::OpenRoleDefinition: return HRESULT value=0x%lx Enter CAzApplication::DeleteRoleDefinition bstrRoleDefinitionName=%s Leave CAzApplication::DeleteRoleDefinition: return HRESULT value=0x%lx Enter CAzApplication::get_RoleAssignments CAzApplication::get_RoleAssignmentsLeave CAzApplication::get_RoleAssignments: return HRESULT value=0x%lx Enter CAzApplication::CreateRoleAssignment bstrRoleAssignmentName=%s Leave CAzApplication::CreateRoleAssignment: return HRESULT value=0x%lx Enter CAzApplication::OpenRoleAssignment bstrRoleAssignmentName=%s Leave CAzApplication::OpenRoleAssignment: return HRESULT value=0x%lx Enter CAzApplication::DeleteRoleAssignment bstrRoleAssignmentName=%s Leave CAzApplication::DeleteRoleAssignment: return HRESULT value=0x%lx CAzApplication::DeleteDelegatedPolicyUserNameEnter CAzApplication::InitializeClientContext2 IdentifyingString=%s CAzApplication::InitializeClientContext2Leave CAzApplication::InitializeClientContext2: return HRESULT value=0x%lx Enter CAzApplication::InitializeClientContextFromToken2 ulTokenHandleLowPart=%d ulTokenHandleHighPart=%d Leave CAzApplication::InitializeClientContextFromToken2: return HRESULT value=0x%lx Enter CAzApplications::_Init CAzApplications::_InitLeave CAzApplications::_Init: return HRESULT value=0x%lx CAzOperation constructor called. CAzOperation destructor called. Enter: CAzOperation::_Init hOwnerApp=%d hHandle=%d. Leave CAzOperation::_Init: return HRESULT value=0x%lx CAzOperation::get_DescriptionCAzOperation::put_DescriptionCAzOperation::get_NameCAzOperation::put_NameCAzOperation::get_ApplicationDataCAzOperation::put_ApplicationDataCAzOperation::get_WritableCAzOperation::get_OperationIDCAzOperation::put_OperationIDCAzOperation::GetPropertyCAzOperation::SetPropertyEnter CAzOperation::Submit lFlags=%d Leave CAzOperation::Submit: return HRESULT value=0x%lx Enter CAzOperation::RoleAssignments bstrScopeName=%s bRecursive=%d Leave CAzOperation::RoleAssignments: return HRESULT value=0x%lx Enter CAzOperations::_Init hOwnerApp=%d hParent=%d CAzOperations::_InitLeave CAzOperations::_Init: return HRESULT value=0x%lx Enter CAzOperations::_Init hOwnerApp=%d Enter CAzOperations::_AddOperation pOperation=%d CAzOperations::_AddOperationLeave CAzOperations::_AddOperation: return HRESULT value=0x%lx Enter CAzOperations::_AddOperationFromTaskObj hParent=%d Leave CAzOperations::_AddOperationFromTaskObj: return HRESULT value=0x%lx CAzTask constructor called. CAzTask destructor called. Enter CAzTask::_Init hOwnerApp=%d hHandle=%d Leave CAzTask::_Init: return HRESULT value=0x%lx CAzTask::get_DescriptionCAzTask::put_DescriptionCAzTask::get_NameCAzTask::put_NameCAzTask::get_ApplicationDataCAzTask::put_ApplicationDataCAzTask::get_BizRuleCAzTask::put_BizRuleCAzTask::get_BizRuleLanguageCAzTask::put_BizRuleLanguageCAzTask::get_BizRuleImportedPathCAzTask::put_BizRuleImportedPathCAzTask::get_IsRoleDefinitionCAzTask::put_IsRoleDefinitionCAzTask::get_OperationsCAzTask::get_TasksCAzTask::AddOperationCAzTask::DeleteOperationCAzTask::AddTaskCAzTask::DeleteTaskget_WritableCAzTask::GetPropertyCAzTask::SetPropertyCAzTask::AddPropertyItemCAzTask::DeletePropertyItemEnter CAzTask::Submit lFlags=%d Leave CAzTask::Submit: return HRESULT value=0x%lx Enter CAzTask::RoleAssignments bstrScopeName=%s Leave CAzTask::RoleAssignments: return HRESULT value=0x%lx Enter CAzTask::AddRoleDefinition bstrRoleDefinition=%s CAzTask::AddRoleDefinitionLeave CAzTask::AddRoleDefinition: return HRESULT value=0x%lx Enter CAzTask::DeleteRoleDefinition bstrRoleDefinition=%s CAzTask::DeleteRoleDefinitionLeave CAzTask::DeleteRoleDefinition: return HRESULT value=0x%lx Enter CAzTask::get_RoleDefinitions CAzTask::get_RoleDefinitionsLeave CAzTask::get_RoleDefinitions: return HRESULT value=0x%lx Enter CAzTasks::_Init CAzTasks::_InitLeave CAzTasks::_Init: return HRESULT value=0x%lx Enter CAzTasks::_AddTask CAzTasks::_AddTaskLeave CAzTasks::_AddTask: return HRESULT value=0x%lx Enter CAzTasks::_AddTaskFrom Leave CAzTasks::_AddTaskFrom: return HRESULT value=0x%lx Enter CAzScope constructor called. Enter CAzScope destructor called. Enter CAzScope::_Init Leave CAzScope::_Init: return HRESULT value=0x%lx CAzScope::get_DescriptionCAzScope::put_DescriptionCAzScope::get_NameCAzScope::put_NameCAzScope::get_ApplicationDataCAzScope::put_ApplicationDataCAzScope::get_WritableCAzScope::GetPropertyCAzScope::AddPropertyItemCAzScope::DeletePropertyItemCAzScope::get_PolicyAdministratorsCAzScope::get_PolicyAdministratorsNameCAzScope::get_PolicyReadersCAzScope::get_PolicyReadersNameCAzScope::AddPolicyAdministratorCAzScope::AddPolicyAdministratorNameCAzScope::DeletePolicyAdministratorCAzScope::DeletePolicyAdministratorNameCAzScope::AddPolicyReaderCAzScope::AddPolicyReaderNameCAzScope::DeletePolicyReaderCAzScope::DeletePolicyReaderNameCAzScope::SetPropertyCAzScope::get_ApplicationGroupsCAzScope::OpenApplicationGroupCAzScope::CreateApplicationGroupCAzScope::DeleteApplicationGroupEnter CAzScope::get_Roles CAzScope::get_RolesLeave get_Roles: return HRESULT value=0x%lx Enter CAzScope::OpenRole: bstrRoleName=%s CAzScope::OpenRoleLeave CAzScope::OpenRole: return HRESULT value=0x%lx Enter CAzScope::CreateRole: bstrRoleName=%s CAzScope::CreateRoleLeave CAzScope::CreateRole: return HRESULT value=0x%lx CAzScope::DeleteRoleCAzScope::get_TasksCAzScope::OpenTaskCAzScope::CreateTaskCAzScope::DeleteTaskEnter CAzScope::Submit: lFlags=%d Leave CAzScope::Submit: return HRESULT value=0x%lx CAzScope::get_CanBeDelegatedCAzScope::get_BizrulesWritableEnter CAzScope::get_RoleDefinitions CAzScope::get_RoleDefinitionsLeave CAzScope::get_RoleDefinitions: return HRESULT value=0x%lx Enter CAzScope::CreateRoleDefinition bstrRoleDefinitionName=%s CAzScope::CreateRoleDefinition: NULL IAzRoleDefinition parameter.Leave CAzScope::CreateRoleDefinition: return HRESULT value=0x%lx Enter CAzScope::OpenRoleDefinition bstrRoleDefinitionName=%s CAzScope::OpenRoleDefinition: NULL IAzRoleDefinition parameter.Leave CAzScope::OpenRoleDefinition: return HRESULT value=0x%lx Enter CAzScope::DeleteRoleDefinition bstrRoleDefinitionName=%s Leave CAzScope::DeleteRoleDefinition: return HRESULT value=0x%lx Enter CAzScope::get_RoleAssignments CAzScope::get_RoleAssignmentsLeave CAzScope::get_RoleAssignments: return HRESULT value=0x%lx Enter CAzScope::CreateRoleAssignment bstrRoleAssignmentName=%s Leave CAzScope::CreateRoleAssignment: return HRESULT value=0x%lx Enter CAzScope::OpenRoleAssignment bstrRoleAssignmentName=%s Leave CAzScope::OpenRoleAssignment: return HRESULT value=0x%lx Enter CAzScope::DeleteRoleAssignment bstrRoleAssignmentName=%s Leave CAzScope::DeleteRoleAssignment: return HRESULT value=0x%lx Enter CAzScopes::_Init CAzScopes::_InitLeave CAzScopes::_Init: return HRESULT value=0x%lx CAzApplicationGroup constructor called. CAzApplicationGroup destructor called. Enter CAzApplicationGroup::_Init Leave CAzApplicationGroup::_Init: return HRESULT value=0x%lx CAzApplicationGroup::get_TypeCAzApplicationGroup::put_TypeCAzApplicationGroup::get_LdapQueryCAzApplicationGroup::put_LdapQueryCAzApplicationGroup::get_AppMembersCAzApplicationGroup::get_AppNonMembersCAzApplicationGroup::get_MembersCAzApplicationGroup::get_MembersNameCAzApplicationGroup::get_NonMembersCAzApplicationGroup::get_NonMembersNameCAzApplicationGroup::get_DescriptionCAzApplicationGroup::put_DescriptionCAzApplicationGroup::get_NameCAzApplicationGroup::put_NameCAzApplicationGroup::get_BizRuleCAzApplicationGroup::put_BizRuleCAzApplicationGroup::get_BizRuleLanguageCAzApplicationGroup::put_BizRuleLanguageCAzApplicationGroup::get_BizRuleImportedPathCAzApplicationGroup::put_BizRuleImportedPathCAzApplicationGroup::AddAppMemberCAzApplicationGroup::DeleteAppMemberCAzApplicationGroup::AddAppNonMemberCAzApplicationGroup::DeleteAppNonMemberCAzApplicationGroup::AddMemberCAzApplicationGroup::DeleteMemberCAzApplicationGroup::AddMemberNameCAzApplicationGroup::DeleteMemberNameCAzApplicationGroup::AddNonMemberCAzApplicationGroup::DeleteNonMemberCAzApplicationGroup::AddNonMemberNameCAzApplicationGroup::DeleteNonMemberNameCAzApplicationGroup::get_WritableCAzApplicationGroup::GetPropertyCAzApplicationGroup::SetPropertyCAzApplicationGroup::AddPropertyItemCAzApplicationGroup::DeletePropertyItemEnter CAzApplicationGroup::Submit: lFlags=%d Leave CAzApplicationGroup::Submit: return HRESULT value=0x%lx Enter CAzApplicationGroup::RoleAssignments: bstrScopeName=%s bRecusive=%d Leave CAzApplicationGroup::RoleAssignments: return HRESULT value=0x%lx Enter CAzApplicationGroups::_Init CAzApplicationGroups::_InitLeave CAzApplicationGroups::_Init: return HRESULT value=0x%lx CAzRole constructor called CAzRole destructor called Enter CAzRole::_Init Leave CAzRole::_Init: return HRESULT value=0x%lx CAzRole::get_DescriptionCAzRole::put_DescriptionCAzRole::get_NameCAzRole::put_NameCAzRole::get_ApplicationDataCAzRole::put_ApplicationDataCAzRole::get_AppMembersCAzRole::get_MembersCAzRole::get_MembersNameCAzRole::get_OperationsCAzRole::get_TasksCAzRole::AddAppMemberCAzRole::DeleteAppMemberCAzRole::AddTaskCAzRole::DeleteTaskCAzRole::AddOperationCAzRole::DeleteOperationCAzRole::AddMemberCAzRole::DeleteMemberCAzRole::AddMemberNameCAzRole::DeleteMemberNameCAzRole::get_WritableCAzRole::GetPropertyCAzRole::SetPropertyCAzRole::AddPropertyItemCAzRole::DeletePropertyItemCAzRole::AddRoleDefinitionCAzRole::DeleteRoleDefinitionEnter CAzRole::get_RoleDefinitions CAzRole::get_RoleDefinitionsLeave CAzRole::get_RoleDefinitions: return HRESULT value=0x%lx Enter CAzRole::get_Scope Leave CAzRole::get_Scope: return HRESULT value=0x%lx Enter CAzRole::Submit lFlags=%d Leave CAzRole::Submit: return HRESULT value=0x%lx Enter CAzRoles::_Init CAzRoles::_InitLeave CAzRoles::_Init: return HRESULT value=0x%lx CAzRoleAssignments constructor called. Enter CAzRoleAssignments::_InitRolesForGivenObj: bstrScopeName=%s bRecursive=%d Leave CAzRoleAssignments::_InitRolesForGivenObj: return HRESULT value=0x%lx Enter CAzRoleAssignments::GetRoleAssigmentObj bstrScopeName=%s ScopeFlags=%d CAzRoleAssignments::GetRoleAssigmentObjLeave CAzRoleAssignments::GetRoleAssigmentObj: return HRESULT value=0x%lx CAzClientContext constructor called. CAzClientContext destructor called. Enter CAzClientContext::AccessCheck2 bstrObjectName=%s, bstrScopeName=%s lOperation=%d CAzClientContext::AccessCheck2 receives NULL plResult parameter. Leave CAzClientContext::AccessCheck2: return HRESULT value=0x%lx plResult=NULL Leave CAzClientContext::AccessCheck2: return HRESULT value=0x%lx *plResult=%d Enter CAzClientContext::AccessCheck bstrObjectName=%s, bstrScopeNames=%s varOperations=%s Leave CAzClientContext::AccessCheck: return HRESULT value=0x%lx *pvarResults=%s Leave CAzClientContext::AccessCheck: return HRESULT value=0x%lx *pvarResults=NULL Enter CAzClientContext::GetAssignedScopesPage lOptions=%d PageSize=%d Leave CAzClientContext::GetAssignedScopesPage: return HRESULT value=0x%lx *pvarScopeNames=%s Leave CAzClientContext::GetAssignedScopesPage: return HRESULT value=0x%lx pvarScopeNames=NULL Enter CAzClientContext::GetOperations bstrScopeName=%s Leave CAzClientContext::GetOperations: return HRESULT value=0x%lx Enter CAzClientContext::GetTasks bstrScopeName=%s Leave CAzClientContext::GetTasks: return HRESULT value=0x%lx Enter CAzClientContext::IsInRoleAssignment bstrScopeName=%s bstrRoleName=%s Leave CAzClientContext::IsInRoleAssignment: return HRESULT value=0x%lx pbIsInRole=NULL Leave CAzClientContext::IsInRoleAssignment: return HRESULT value=0x%lx *pbIsInRole=%d Enter CAzClientContext::GetRoles bstrScopeName=%s Leave CAzClientContext::GetRoles: return HRESULT value=0x%lx Enter CAzClientContext::GetBusinessRuleString Leave CAzClientContext::GetBusinessRuleString: return HRESULT value=0x%lx *pbstrBusinessRuleString=%s Leave CAzClientContext::GetBusinessRuleString: return HRESULT value=0x%lx pbstrBusinessRuleString=NULL CAzClientContext::get_UserDnCAzClientContext::get_UserSamCompatCAzClientContext::get_UserDisplayCAzClientContext::get_UserGuidCAzClientContext::get_UserCanonicalCAzClientContext::get_UserUpnCAzClientContext::get_UserDnsSamCompatCAzClientContext::GetPropertyCAzClientContext::get_RoleForAccessCheckCAzClientContext::put_RoleForAccessCheckEnter CAzClientContext::AddApplicationGroups Leave CAzClientContext::AddApplicationGroups: return HRESULT value=0x%lx Enter CAzClientContext::AddRoles bstrScopeName=%s Leave CAzClientContext::AddRoles: return HRESULT value=0x%lx Enter CAzClientContext::AddStringSids Leave CAzClientContext::AddStringSids: return HRESULT value=0x%lx CAzClientContext::get_LDAPQueryDNCAzClientContext::put_LDAPQueryDNEnter CAzClientContext::_Init Leave CAzClientContext::_Init: return HRESULT value=0x%lx Enter get_BizRuleParameters::_Init Leave CAzClientContext::get_BizRuleParameters: return HRESULT value=0x%lx Enter get_BizRuleInterfaces::_Init Leave CAzClientContext::get_BizRuleInterfaces: return HRESULT value=0x%lx Enter CAzClientContext::GetGroups bstrScopeName=%s Leave CAzClientContext::GetGroups: return HRESULT value=0x%lx Enter CAzClientContext::get_Sids. Leave CAzClientContext::get_Sids: return HRESULT value=0x%lx Enter CAzRoleDefinitions::_Init CAzRoleDefinitions::_InitLeave CAzRoleDefinitions::_Init: return HRESULT value=0x%lx Enter CAzRoleDefinitions::CollectTaskAsRoleDefinition CAzRoleDefinitions::CollectTaskAsRoleDefinitionLeave CAzRoleDefinitions::CollectTaskAsRoleDefinition: return HRESULT value=0x%lx Enter CAzRoleDefinitions::CollectNamedRoleDefinitions AZ_PROP_ROLE_TASKS returns bogus task object %s Leave CAzRoleDefinitions::CollectNamedRoleDefinitions: return HRESULT value=0x%lx Enter CAzRoleAssignments::_Init CAzRoleAssignments::_InitLeave CAzRoleAssignments::_Init: return HRESULT value=0x%lx %09IuObject with the same name existmap/set too longCAzBizRuleContext ~CAzBizRuleContext CAzBizRuleContext::put_BusinessRuleResult: %ld CAzBizRuleContext::put_BusinessRuleString: %ws CAzBizRuleContext::get_BusinessRuleString: %ws CAzBizRuleContext::GetParameter: %ls CAzBizRuleContext::GetParameter: %ls: Parameter not passed in. CAzBizRuleContext::SetAccessCheckContext SYSTEM\CurrentControlSet\Control\LSA\AzRolesUseStrongLockingSoftware\Microsoft\AzMan\LoggingFlagsAPPDATA\Microsoft\AzMan\AzManDebug_%d.log AzMan log file Process Name: Current User Name: Current System Time: %02u/%02u/%02u %02u:%02u:%02u S-1-3-4AzpAzStoreGetProperty: invalid prop id %ld SetProperty: Object doesn't support dirty bit 0x%lx IsNormalFlags(_Flags) = TRUE (_GenericObject->DirtyBits & _DirtyBit) = 0 IsRefreshFlags(_Flags) = TRUE AzpAzStoreManagerSetProperty: domain timeout too small %ld AzpAzStoreManagerSetProperty: script engine timeout too small %ld AzpAzStoreManagerSetProperty: max script engines too small %ld AzpAzStoreManagerSetProperty: invalid prop id %ld AzInitialize: Reserved != 0 AzInitialize: Invalid flags 0x%lx AzInitialize: Failed to Initialize Audit system: %ld AzAuthorizationStoreDelete: Reserved != 0 AzCloseHandle: Reserved != 0 AzAuthorizationStore in AzCloseHandle refAzpAddObjectToGuidMap: objects already in mapvector too long%s:%dAzApplicationGetProperty: invalid prop id %ld AzpApplicationSetProperty: cannot convert CLSID %ws %ld AzpApplicationSetProperty: invalid prop id %ld AzApplicationClose: Failed to capture application name: %ld AzApplicationClose: Cannot reference application %ws: %ld AzApplicationClose: Cannot reload children on unload failure: %ld SOFTWARE\Microsoft\AzMan\BizRuleEnabledApplicationsAvoided script engine in non-base thread. Using free script engine from non-base thread. ReuseEngine failed: 0x%lx Using free script engine. Using clone of running script engine. new CScriptEngine failed: 0x%lx ScriptEngine->Init failed: 0x%lx Using new script engine. Engine doesn't support reset: 0x%lx Script changed while engine was running Script LRU'ed out: %ld Script Freed from free script list AzpGetScriptEngine failed: 0x%lx, %ld RunScript failed: 0x%lx, %ld CoInitializeEx failed: 0x%lx, %ld Script Timed out. CScriptEngine ~CScriptEngine CScriptEngine::InitializeScriptEngine Failed to get scripting engine CLSID: 0x%lx Failed to create scripting engine: 0x%lx IActiveScript::QueryInterface()Exception: %s: 0x%lx Engine doesn't support IActiveScriptParse: 0x%lx Failed to create AzBizRuleContext instance: 0x%lx IActiveScript::GetCurrentScriptThreadID()Error calling GetCurrentScriptThreadID: 0x%lx Set ThreadId to: 0x%lx 0x%lx IActiveScript::SetScriptSite()Error calling SetScriptSite: 0x%lx IActiveScriptParse::InitNew()Error calling InitNew: 0x%lx AzBizRuleContextIActiveScript::AddNamedItem()Failed to AddNamedItem: 0x%lx IActiveScriptParse::ParseScriptText()Failed to ParseScriptText: 0x%lx Remap error to: 0x%lx CScriptEngine::RunScript RunScript took an exception: 0x%lx Script took an exception: 0x%lx Failed to SetScriptState(STARTED): 0x%lx Script from access check to caller: 0x%lx Return script error to caller: 0x%lx Cannot DeleteTimerQueurTimer: %ld CScriptEngine::InterruptScript IActiveScript::InterruptScriptThread()CScriptEngine::ResetToUninitialized IActiveScriptParse::Release()IActiveScript::SetScriptState()Failed to SetScriptState(INITIALIZED): 0x%lx CScriptEngine::ReuseEngine IActiveScript::GetScriptState()Failed to GetScriptState: 0x%lx Failed to SetScriptState(UNINITIALIZED): 0x%lx Changed ThreadId to: 0x%lx 0x%lx CScriptEngine::IsBaseThread CScriptEngine::FinalRelease IActiveScript::Close()Cannot CloseEngine: 0x%lx IActiveScript::Release()CScriptEngine::InsertHeadList CScriptEngine::RemoveListEntry CScriptEngine::InsertHeadLruList CScriptEngine::RemoveLruListEntry CScriptEngine::QueryInterface->IUnknown IActiveScriptSite Unsupported Interface: CScriptEngine::AddRef %ld CScriptEngine::Release %ld CScriptEngine::GetLCID CScriptEngine::GetItemInfo: %ws GetItemInfo took an exception: 0x%lx CScriptEngine::GetDocVersionString CScriptEngine::OnScriptTerminate CScriptEngine::OnStateChange:State: Uninitialized. State: Initialized. State: Started. State: Connected. State: Disconnected. State: Closed. CScriptEngine::OnScriptError Script Error: Code: 0x%lx %ld Src: %ws File: %ws Desc: %ws CScriptEngine::OnEnterScript CScriptEngine::OnLeaveScript CAzBizRuleParamInternal::AddParameters: Can't get name lbound 0x%lx CAzBizRuleParamInternal::AddParameters: Can't get value lbound 0x%lx CAzBizRuleParamInternal::AddParameters: Can't get name ubound 0x%lx CAzBizRuleParamInternal::AddParameters: Can't get value ubound 0x%lx CAzBizRuleParamInternal::AddParameters: Array bounds don't match %ld %ld %ld %ld CAzBizRuleParamInternal::AddParameters: Can't access ParameterNames 0x%lx CAzBizRuleParamInternal::AddParameters: Can't access ParameterValues 0x%lx CAzBizRuleParameters::AddParameters: Parameter %ld isn't a VT_BSTR CAzBizRuleParameters::AddParameters: Parameter %ws should have an interface value AzpCaptureBizRuleInterfaces: Can't get name lbound 0x%lx AzpCaptureBizRuleInterfaces: Can't get value lbound 0x%lx AzpCaptureBizRuleInterfaces: Can't get interfaces lbound 0x%lx AzpCaptureBizRuleInterfaces: Can't get name ubound 0x%lx AzpCaptureBizRuleInterfaces: Can't get value ubound 0x%lx AzpCaptureBizRuleInterfaces: Can't get interfaces ubound 0x%lx AzpCaptureBizRuleInterfaces: Array bounds don't match %ld %ld %ld %ld %ld %ld AzpCaptureBizRuleInterfaces::AddInterfaces: Can't access ParameterNames 0x%lx AzpCaptureBizRuleInterfaces::AddInterfaces: Can't access Flags 0x%lx AzpCaptureBizRuleInterfaces::AddInterfaces: Can't access Interfaces 0x%lx ,]p]xdh2<3p334 747X778 9GroupRole-AzpClientContextFree: AzpClientContextGenerateDeleteAudit failed with %ld AzpGetUserNameEx: no cached token handle AzpGetUserNameEx: Cannot get token statistics: %ld AzpGetUserNameEx: Cannot GetThreadToken %ld AzpGetUserNameEx: Cannot SetThreadToken %ld AzpGetUserNameEx: Cannot GetUserNameExW %ld AzpGetUserNameEx: Cannot SetThreadToken (revert) %ld AzpClientContextGetProperty: invalid opcode %ld AzpClientContextGetProperty: Cannot get token statistics: %ld %ws\%wsAzpClientContextGetProperty: Cannot translate name: %ld AzpClientContextSetProperty: invalid prop id %ld AzpComputeAccountDn: AuthzGetInformationFromContext failed %ld AzpComputeAccountDn: SafeAllocaAllocate failed %ld AzpComputeAccountDn: AzpAllocateHeap failed %ld <Sid=>AzpQueryUserDN: ClientContext is missing LdapQueryDN from a standalone machine. AzpQueryUserDN: ClientContext (AZP_CONTEXT_CREATED_FROM_SID) is missing LdapQueryDN. distinguishedName(objectClass=user)AzpCheckGroupMembershipLdap: %ws AzpCheckGroupMembershipLdap: %ws: User is in NT 4 domain or local account: Membership is %ld AzpCheckGroupMembershipLdap: %ws: AzpGetUserNameEx failed %ld AzpCheckGroupMembershipLdap: ClientContext is missing LdapQueryDN. AzpCheckGroupMembershipLdap: %ws: DsGetDcName failed %ld ObjectClassAzpCheckGroupMembershipLdap: %ws: ldap_search failed on %ws: %ld: %s AzpCheckGroupMembershipLdap: %ws: ldap_count_entries failed on %ws: %ld: %s AzpCheckGroupMembershipLdap: %ws: ldap_search worked on %ws: Membership is %ld (objectClass=*)AzpCheckGroupMembershipLdapForLdapUrl: %ws AzpQueryUserDN failed. AzpCheckGroupMembershipLdapForLdapUrl:invalid LDAP query syntaxAzpCheckGroupMembershipLdapForLdapUrl: ldap_init failed on %ws: %ld: %s AzpCheckGroupMembershipLdapForLdapUrl: AzpADSetDefaultLdapOptions failed on %ws: %ld AzpCheckGroupMembershipLdapForLdapUrl: ldap_connect failed on %ws: %ld AzpCheckGroupMembershipLdapForLdapUrl: AzpADSetLdapEncryptionOption failed on %ws: %ld AzpCheckGroupMembershipLdapForLdapUrl: ldap_bind failed on %ws: %ld: %s AzpCheckGroupMembershipOne: %ws AzpCheckGroupMembershipOne: %ws: Create cache entry AzpCheckGroupMembershipOne: %ws: %ld: %ld: Answer found in cache AzpCheckGroupMembershipOne: %ws: Is a basic group AzpCheckGroupMembershipOne: %ws: Cannot AzptCheckObjecSidMembership (non member) %ld AzpCheckGroupMembershipOne: %ws: Is non member via NT Sid AzpCheckGroupMembershipOne: %ws: Cannot AzpCheckGroupMembership (non member) %ld AzpCheckGroupMembershipOne: %ws: Is non member via app group AzpCheckGroupMembershipOne: %ws: Cannot AzpCheckGroupMembership (member) %ld AzpCheckGroupMembershipOne: %ws: Cannot AzpCheckGroupMembership (member) extended status: %ld AzpCheckGroupMembershipOne: %ws: Cannot AzpCheckGroupMembership (non member) extended status: %ld AzpCheckGroupMembershipOne: %ws: %ld: %ld: Answer computed AzpCheckGroupMembershipOne: %ws: Avoid ldapquery group AzpCheckGroupMembershipOne: ClientContext is missing LdapQueryDNAzpCheckGroupMembershipOne: %ws: Is an ldapquery group AzpCheckGroupMembershipOne: %ws: Is an invalid group type Task referenceAzpCaptureBizRuleInterfaces: Names is NULL but Flags or Interfaces isn't AzpCaptureBizRuleInterfaces: Flags or Interfaces is NULL but Names isn't AzpWalkOpsAndTasks: %ws: %ws: All operations have been processed %ld. AzpWalkOpsAndTasks: %ws: %ws: %ws: Operation granted AzpWalkOpsAndTasks: %ws: %ws: %ws: Operation extended failure %ld AzInitializeContextFromToken: Cannot initialize context since store is in manage mode %ld AzInitializeContextFromToken: Cannot ObCommonCreateObject %ld AzInitializeContextFromToken: Cannot OpenProcessToken %ld AzInitializeContextFromToken: Cannot DuplicateTokenEx %ld AzInitializeContextFromToken: Cannot OpenThreadToken %ld AzInitializeContextFromToken: GetTokenInformation failed with %ld AzInitializeContextFromToken: Cannot AuthzInitializeContextFromToken %ld AzpGenerateContextCreateAudit: Cannot ObCommonCreateObject %ld AzManAPIKerberosAzInitializeContextFromName: Cannot initialize context since store is in manage mode %ld AzInitializeContextFromName: Cannot AzInitializeFromToken %ld AzInitializeContextFromName: Cannot ObCommonCreateObject %ld AzInitializeContextFromName: Cannot allocate LUID %ld AzInitializeContextFromName: LookupAccoutName failed with %ld AzInitializeContextFromName: Invalid user type - expected SIdTypeUser, got %ld AzInitializeContextFromStringSid: Cannot initialize context since store is in manage mode %ld AzInitializeContextFromStringSid: ConvertSidStringToSid failed with %ld AzInitializeContextFromStringSid: LookupAccountSid failed with %ld AzInitializeContextFromStringSid: Invalid user type - expected SIdTypeUser, got %ld AzInitializeContextFromStringSid: Cannot ObCommonCreateObject %ld AzInitializeContextFromStringSid: Cannot allocate LUID %ld AzInitializeContextFromStringSid: CopySid failed with %ld AzInitializeContextFromStringSid: Cannot AuthzInitializeContextFromStringSid %ld S-1-0-0AzInitializeContext: Cannot initialize context since store is in manage mode %ld AzInitializeContext: Cannot initialize context with null audit identifying string %ld AzInitializeContext: ConvertSidStringToSid for null SID failed with %ld AzInitializeContext: Cannot ObCommonCreateObject %ld AzInitializeContext: Cannot allocate LUID %ld AzInitializeContext: CopySid for null SID failed with %ld AzInitializeContext: Cannot AuthzInitializeContext %ld AzAccessCheck: %ws: GroupEvalSerialNumber changed from %ld to %ld AzAccessCheck: Failed to load children for %ws: %ldAzAccessCheck: %ws: invalid OperationCount %ld AzAccessCheck: %ws: %ws: There are no roles for this scope Role referenceAzAccessCheck: This role %ws is not the requested role %ws AzAccessCheck: %ws: %ws: No operations for this role apply AzAccessCheck: %ws: %ws: No roles have applicable operations %ld. AzContextAccessCheck: Starting Access Check loops AzAccessCheck: %ws: %ws: All roles have been processed %ld. AzAccessCheck: %ws: %ws: All operations have been processed %ld. AzAccessCheck: %ws: %ws: Process role AzAccessCheck: %ws: %ws: AzpWalkOpsAndTasks failed %ld AzAccessCheck: %ws: %ws: CheckSidMembership of role AzAccessCheck: %ws: %ws: CheckSidMembership failed %ld AzAccessCheck: %ws: %ws: CheckSidMembership is %ld AzAccessCheck: %ws: %ws: CheckGroupMembership of role AzAccessCheck: %ws: %ws: CheckGroupMembership failed %ld AzAccessCheck: %ws: %ws: CheckGroupMembership extended status %ld AzAccessCheck: %ws: %ws: CheckGroupMembership is %ld AzAccessCheck: %ws: %ws: Role finished being processed AzAccessCheck: %ws: %ws: Role finished being processed due to ACCESS_DENIED AzAccessCheck: %ws: AzpAccessCheckGenerateAudit failed with %ld AzpCheckRolesMembersip: %ws: CheckSidMembership of role AzpCheckRolesMembersip: %ws: CheckSidMembership failed %ld AzpCheckRolesMembersip: %ws: CheckSidMembership is %ld AzpCheckRolesMembersip: %ws: CheckGroupMembership of role AzpCheckRolesMembersip: %ws: CheckGroupMembership failed %ld AzpCheckRolesMembersip: %ws: CheckGroupMembership is %ld AzpCheckRolesMembersip: %ws: CheckGroupMembership extended status %ld AzpCheckRolesMembersip: %ws: Role finished being processed Role/Group referenceAzpCheckGroupMembershipOne failed. 0x%lx %ws (%ld): Domain ref 0x%lx %ws (%ld): Domain deref AzpAllocateDc: ldap_init failed on %ws: %ld: %s AzpAllocateDc: AzpADSetDefaultLdapOptions failed on %ws: %ld AzpAllocateDc: ldap_connect failed on %ws: %ld AzpAllocateDc: AzpADSetLdapEncryptionOption failed on %ws: %ld AzpAllocateDc: ldap_bind failed on %ws: %ld: %s 0x%lx %ws (%ld): DC Allocaote 0x%lx %ws (%ld): DC ref 0x%lx %ws (%ld): DC deref AzAuthorizationStore in ObCloseHandle refAllocate objectChild handle refHandle ref0x%lx %ld (%ld): Open Handle Authorization Store Handle ref0x%lx %ld (%ld): Close Handle Authorization Store Handle derefHandle derefChild handle derefObDecrHandleRefCount: Cannot reload children on failure of unload: %ld 0x%lx: NULL handle is invalid 0x%lx %ld: Handle Object type is too large. 0x%lx %ld: Handle has no handle reference count. 0x%lx %ld: Handle has no ParentGenericObjectHead. 0x%lx %ld: Object is deleted. 0x%lx %ld: Object type doesn't match parent. 0x%lx %ld: Sequence number doesn't match parent. 0x%lx: AV accessing handle ObReferenceObjectByName (by guid): Ref by name0x%lx: NULL handle not allowed. 0x%lx %ld: Object Type not local object type Ref by Handle0x%lx %ld: Handle not in list. Deref "*/:<>?\| ObCreateObject: %ws ObCommonCreateObject: Reserved != 0 ObCommonOpenObject: Reserved != 0 ObCommonEnumObjects: Reserved != 0 ObCommonGetProperty: Reserved != 0 ObCommonGetProperty: Object has no name ObCommonGetProperty: Object has no description ObCommonGetProperty:Object has no application data ObCommonGetProperty: Object has no generate-audits data ObCommonGetProperty: Object has no apply-store-sacl data ObCommonGetProperty:Object has no apply-store-sacl data ObCommonGetProperty: No get property routine. ObSetProperty: no set property routine: %ld %ld ObSetProperty: OpCacheSerialNumber set to %ld ObCommonDeleteObject: Reserved != 0 0x%lx: 0x%lx: %ld: ObFreeDeltaArray 0x%lx: 0x%lx: ObInitObjectList ObRemoveObjectListLink: OpCacheSerialNumber set to %ld AzpeAddPropertyItemSid: AzpAllocateHeap failed %ld AzpeAddPropertyItemSid: duplicate SIDAzpeAddPropertyItemSid: set::insert failed %ld ObAddPropertyItem (by guid): ObAddPropertyItem: Cannot set creator owner sid ObAddPropertyItem: Cannot set creator group sid Reference to self ObAddPropertyItem: GroupEvalSerialNumber set to %ld ObAddPropertyItem: OpCacheSerialNumber set to %ld AzAddPropertyItem: Reserved != 0 AzAddPropertyItem: invalid prop id %ld ObRemovePropertyItem: GroupEvalSerialNumber set to %ld AzRemovePropertyItem: Reserved != 0 && Reserved != 1 AzRemovePropertyItem: invalid prop id %ld 0x%lx: 0x%lx: %ld: ObRemoveObjectListLinks ObClearObjectList PropertyID %d 0x%lx: 0x%lx: ObFreeObjectList 0x%lx: 0x%lx: Free array Reference from NewNameAzpGetTokenUserGroupsFromAuthzContext: NULL ppTokenUser or NULL ppTokenGroups not allowed %ld AzpGetTokenUserGroupsFromAuthzContext: AuthzGetInformationFromContext failed %ld AzpGetTokenUserGroupsFromAuthzContext: SafeAllocaAllocate failed %ld AzpGetSidsFromUserGroups: null pSidList or pdwListSize AzpGetSidsFromUserGroups: out of memory. AzpIsSidInList: pbAnswer must not be NULL. AzpIsSidInList: sidListFlag can only be SID_MEMBER_LIST(1) or SID_NON_MEMBER_LIST(2) . AzpIsSidInList: hObject is not Role or Group. AzpIsSidInList: Role does not have non-member SID list. AzpAuthzCheckSid: hAuthzHandle must not be NULL. AzpAuthzCheckSid: pbIsGood must not be NULL. AzpAuthzCheckSid: pSid must not be NULL. AzpSidsImplyObjectMembership: both pbAnswer and pbIsNonMember must not be NULL. AzpIsUserAuthzMember: pbAnswer must not be NULL. AzpGetClientContextSids: failed. 8I ` `a =0v4<`Nr$<;h`; Nnt 7,Ll@@@@`(0@ 0AzpGroupInit: memory allocation failed %ld AzpGroupGetProperty: invalid opcode %ld AzpGroupGetProperty: cannot set group type to ldap query if group has membership. AzpGroupGetProperty: cannot set group type to basic if group has bizrule string. AzpGroupGetProperty: cannot set group type to basic if group has ldap query string. AzpGroupGetProperty: This version of the store doesn't support creating bizrule group. AzpGroupGetProperty: cannot set group type to bizrule if group has ldap query string. AzpGroupGetProperty: invalid grouptype %ld VBScriptAzpGroupSetProperty: can't set Bizrule before group type AzpGroupSetProperty: Must set language before bizrule AzpGroupSetProperty: can't set Bizrule type before group type JScriptAzpGroupSetProperty: invalid language %ws AzpGroupSetProperty: can't set Bizrule Path before group type AzpGroupSetProperty: can't set ldap query before group type ldap://invalid LDAP query syntaxAzpGroupSetProperty: GroupEvalSerialNumber set to %ld AzpGroupSetProperty: invalid propid %ld AzpGroupAddPropertyItem: invalid group type %ld AzpRoleInit: memory allocation failed %ld AzpRoleGetProperty: invalid prop id %ld TrueFalseBasicLdapQueryBizruleMSXMLDomainTimeoutScriptTimeoutMaxScriptsAuditsApplicationDataMajorVersionMinorVersionAzApplicationAzApplicationGroupApplicationCLSIDApplicationVersionAzOperationAzTaskAzScopeAzRoleOperationLinkOperationIDTaskLinkBizRuleImportedPathRoleDefinitionBizRuleLanguageBizRuleAppMemberLinkAppNonMemberLinkGroupTypeMemberNonMemberAzAdminManagerxml file %ws exists. xml file %ws doesn't exist. IXMLDOMDocument2::load failed. HRESULT = %d. Intepreted as 'file not found'.IXMLDOMDocument2::load failed. HRESULT = %dCoCreating IXMLDOMDocument2 failed. HRESULT = %dXmlCheckSecurityPrivilege: invalid full path '%ws' XmlCheckSecurityPrivilege: path is too long '%ws' ::$dataAzpChangeSinglePrivilege failed to reset to original. Error code: %d(myXmlSetNodeAttribute)pNode = 0x%lx (myXmlSubmitObjectAttribute)pNode = 0x%lx %dNameGuidDescription <?xml version="1.0" encoding="utf-8" ?> <AzAdminManager MajorVersion="%d" MinorVersion="%d" Guid="%s"> </AzAdminManager>pDoc->loadXML%s error occured: 0x%lx(%ws) %s error occured: 0x%lx fileSelectionLanguagedefault SelectionLanguage=%ws XPath//%s[.="%s"]XPath query(link delete)=%ws Not found %s under tag %ws hr = 0x%lx, pObjectNode(from myXmlGetNamedGuidNode) = 0x%lx A new element node, 0x%lx, is added for %s pObjectNode, 0x%lx, is released //*/%s[@%s="%s"]XPath query(refresh)=%ws (@1.2.840.113556.1.4.8051.2.840.113556.1.4.14131.2.840.113556.1.4.529msDS-AzApplicationNamecnmsDS-AzScopeNamenamedescriptionmsDS-AzApplicationDatamsDS-AzGenerateAuditsmsDS-AzDomainTimeoutmsDS-AzScriptEngineCacheMaxmsDS-AzScriptTimeoutmsDS-AzMajorVersionmsDS-AzMinorVersionallowedAttributesEffectiveallowedChildClassesEffectiveobjectVersionuSNChangedobjectGUIDmsDS-AzClassIdmsDS-AzApplicationVersionmsDS-AzOperationIDmsDS-AzBizRulemsDS-AzBizRuleLanguagemsDS-AzLastImportedBizRulePathmsDS-OperationsForAzTaskmsDS-TasksForAzTaskmsDS-AzTaskIsRoleDefinitionmsDS-MembersForAzRolemsDS-OperationsForAzRolemsDS-TasksForAzRolegroupTypemsDS-AzLDAPQuerymembermsDS-NonMembersmsDS-AzAdminManagermsDS-AzApplicationmsDS-AzOperationmsDS-AzTaskmsDS-AzScopegroupmsDS-AzRolecontainerAzOpObjectContainer-AzTaskObjectContainer-AzGroupObjectContainer-AzRoleObjectContainer-(objectClass=msDS-AzAdminManager)(objectClass=msDS-AzApplication)(objectClass=msDS-AzOperation)(objectClass=msDS-AzTask)(objectClass=msDS-AzScope)(objectClass=group)(objectClass=msDS-AzRole)MSLDAPAzpADSetObjectOptions: AzpeSetObjectOptions failed: %ld AzpADPersistOpenEx: AzpLdapCrackUrl failed on %ws: %ld AzpADPersistOpenEx: ldap_init failed on %ws: %ld: %s AzpADPersistOpenEx: AzpADSetDefaultLdapOptions failed on %ws: %ld AzpADPersistOpenEx: ldap_connect failed on %ws: %ld AzpADPersistOpenEx: AzpADSetLdapEncryptionOption failed on %ws: %ld AzpADPersistOpenEx: ldap_bind failed on %ws: %ld AzpADPersistOpenEx: AzpCheckDomainVersion failed on %ws: %ldCN=AzpADPersistOpenEx: ldap_get_option failed : %ld AzpADPersistOpenEx: AzpReadADStore failed: %ld BizRule group not supported, please update the schema AzpADPersistUpdateChildrenCache: AzpADBuildDN failed: %ld AzpADPersistUpdateChildrenCache: failed to init paged search handle: %ld AzpADPersistUpdateChildrenCache: failed to read paged results: %ld AzpADReadHasChildrenObject: Reading of Child container objectfailed: %ld AzpADPersistSubmit: AzpADStoreHasUpdate failed: %ld AzpADPersistSubmit: AzpADBuildDN failed:%ld AzpADPersistSubmit: AzpADBuildNameSearchFilter failed:%ld Submitting a new object with name that has been submitted by other instances of azstore objectAzpADPersistSubmit: AzpADBuildDN failed: %ld AzpADPersistSubmit: Failed to delete object %ws: %ld AzpADPersistSubmit: Update failed for object %ws: %ld AzpADPersistRefresh: AzpADBuildDN failed: %ld AzpADPersistRefresh: Search on object failed:%ld AzpADPersistRefresh: AzpReadADStoreObject failedfor %s: %ld AzpADPersistWritable: %ws attribute isn't writable AzpADPersistWritable: Error calling AzpADPersistChildCreate: %ld AdCheckSecurityPrivilege: AzpADReadNTSecurityDescriptor failed: %ld AzpADPersistOpenEx: AzpCheckVersions failed with error: %ld AzpReadADStoreObject failed: %ld AzpReadADStore: AzpADReadAzStoreChildren failed: %ld AzpADReadAzStoreChildren: Failed to read Application Groups: %ld AzpADReadAzStoreChildren: Failed to create paged result handle: %ld AzpADReadAzStoreChildren: AzpADReadPagedResult failed: %ld AzpADReadPagedResult: Reading of child objectfailed: %ld AzpADReadPagedResult: Updating children failed: %ld AzpADReadPagedResult: Failed to read paged LDAP result: %ld ,AzpReadADObjectContainer: Reading of child objectfailed: %ld AzpReadADStoreForCommonData: AzpInitializeObjectName failed: %ld AzpReadADStoreForCommonData: AzpeCreateObject failed: %ld AzpReadADStoreForCommonData: AzpADCreateGuidCN failed for %ws: %ld AzpReadADStoreForCommonData: Read description failed: %ld AzpUpdateObjectGuid: Failed to allocate memoryAzpReadADStoreObject: Object creation and common data read failed: %ld AzpReadAttributeAndSetProperty failed: %ld AzpReadADStoreObject: Failed to apply policy ACLs: %ld AzpReadADStoreObject: AzpADPersistWritable failed: %ld AzpADSetObjectOptions failed: %ld <Unknown>AzpReadAttributeAndSetProperty:AzpADReadLinkedAttribute failed for attribute %ws of %ws: %ld TRUE%s;range=%d-%d%s;range=%d-*AzpReadLinkedAttribute:AzpADParseLinkedAttributeValue failed for %ws: %ld AzpReadAttributeAndSetProperty: AzpeAddPropertyItem failed: %ld AzpADReadAttributeAndSetProperty:AzpeAddPropertyItemGuid failed on: %ld CN=AZGROUPOBJECTCONTAINER-CN=FOREIGNSECURITYPRINCIPALS,AzpADParseLinkedAttributeValue: ldap_set_option LDAP_OPT_REFERRALS failed: %ld AzpADParseLinkedAttributeValue: Failed to run search for group type for %ws: %ld <GUID=<SID=AzpApplyPolicyAcls: AzpADReadNTSecurityDescriptor failed :%ld AzpADApplyPolicyAcls: AzpeSetSecurityDescriptorIntoCache failed:: %ld AzpUpdateADObject: AzpADUpdateObjectAcls failed for %ws: %ld AzpUpdateADObject: Read writable failed: %ld AzpUpdateADObject: AzpGetAttrsForCreateObject failed for %ws: %ld AzpUpdateADObject: AzpGetADCommonAttrs failed: %ld AzpUpdateADObject: Get property failed for %s: %ld AzpUpdateADObject: Failed to add/modify %ws : %ld %ld AzpUpdateADObject: UuidCreate failed for %s: %ld AzpUpdateADObject: Failed to search object %s: %ld AzpUpdateADObject: AzpSetGuidAndOptions failed for %s: %ld objectClassAzpCreateADObject: Failed to add object %ws: %ld %ld AzpUpdateADCommonAttrs: AzpeGetProperty failed for object name: %ld AzpADUpdateCommonAttrs: Failed to rename %ws: %ld AzpADUpdateCommonAttrs: Get property failed : %ld AzpGetSpecificProperty: AzpADHandleSubmitLinkedAttribute failed for %s: %ld AzpADGetSpecificProperty: Get Property failed: %ld FALSEAzpHandleSubmitLinkedAttribute: AzpeGetDeltaArray failed for %ws: %ld AzpADHandleSubmitLinkedAttribute: AzpeGetDeltaArray failed for %ws: %ld AzpHandleSubmitLinkedAttribute: ConvertSidToStringSid failed: %ld AzpHandleSubmitLinkedAttribute: UuidToString failed: %ld AzpADUpdateObjectAcls: AzpADReadNTSecurityDescriptor failed :%ld AzpADUpdateObjectAcls: AzpeGetSecurityDescriptorFromCache failed: %ld AzpADUpdateObjectAcls: AzpADStampSD failed with SACL/DACL: %ld AzpADUpdateObjectAcls: AzpApplyPolicyAcls failed with DACL: %ld AzpADBuildDN: AzpADBuildDNForBuiltinObject failed:%ld AzpADBuildDN: AzpADObjectContainerRDN failed:%ld AzpADBuildDN: AzpADBuildChildObjectDN failed for %s: %ld AzpADBuildDN: AzpADGetCNForDN failed: %ld AzpADBuildDN: AzpADObjectContainerRDN failed for %ws: %ld AzpADBuildDN: AzpGetCNForDN failed: %ld AzpGetCNForDN: Failed to quote RDN for object %ws: %ld mayContainsystemMayContainschemaNamingContextdefaultNamingContextsupportedCapabilities1.2.840.113556.1.4.1851msDS-Behavior-VersionNTSecurityDescriptor1.2.840.113556.1.4.801AzpADReadNTSecurityDescriptor: AzpADBuildDN failed: %ld AzpADReadNTSecurityDescriptor: Failed to perform search on %ws: %ld AzpADStampSD: Failed to update security descriptor on %ws: %ld ldap Error:%ld Extended Error: %ws 1(&(objectClass=msds-azapplication)(msds-azapplicationname=%s))(&(objectClass=msds-azscope)(msds-azscopename=%s))&@%'p%x&%z 0IpP` PAzScopeGetProperty: invalid prop id %ld AzTaskGetProperty: scope is delegated - bizrule not allowed %ld AzTaskGetProperty: invalid prop id %ld AzpTaskSetProperty: Must set language before bizrule AzpTaskSetProperty: invalid language %ws AzpTaskSetProperty: invalid prop id %ld AzpOperationGetProperty: invalid prop id %ld OperationHash: objects already in hashAzpOperationSetProperty: Operation Id too small %ld AzpOperationSetProperty: Operation ID %ld is already used. AzpOperationSetProperty: invalid prop id %ld Ref by operation idlist too longAzpCheckOperationCache: Operation cache avoided since interfaces passed in AzpCheckOperationCache: OpCacheSerialNumber changed from %ld to %ld AzpCheckOperationCache: Parameter count changed from previous call %ld %ld AzpCheckOperationCache: Parameter changed from previous call AzpCheckOperationCache: '%ws/%ws' found in operation cache AzpUpdateOperationCache: No operations to cache AzpUpdateOperationCache: Added '%ws/%ws' %ld to operation cache Scope CacheOperation CacheAzpPersistReconcileOne (by guid): AzpPersistReconcileOne: ObAddPropertyItem failed %ld AzpPersistReconcileOne: %ws %ld 0x%lx 0x%lx AzpPersistReconcile: Cannot refresh object: %ws %ld AzpPersistReconcile: Cannot reconcile object: %ws %ld %ld MSSQLSYSTEM\CurrentControlSet\Control\LSA\AzRoles\ProvidersAzpPersistDetermineProvider: Open Provider reg key at 'HKLM\%ws' AzpPersistDetermineProvider: Cannot open Provider reg key at 'HKLM\%ws' %ld ProviderDllAzpPersistDetermineProvider: Cannot open Provider reg value at 'HKLM\%ws\%ws' %ld AzpPersistDetermineProvider: Cannot load libary '%ws' %ld AzPersistProviderInitializeAzpPersistDetermineProvider: libary '%ws' does not export '%s': %ld AzpPersistReconcile: Cannot reconcile object: %ws %ld AzpeCreateObject: Cannot find Object Head: %ld: %ld AzpeSetProperty: Property ID for non-scalar: %ld AzpeSetObjectOptions: bad options mask 0x%lx AzpeGetProperty: Property ID for non-scalar: %ld AzpeGetDeltaArray: invalid prop id %ld AzpeAddPropertyItemSid: called from submit: %ld %ld %ld AzpeAddPropertyItemSid: invalid prop id %ld AzpeAddPropertyItemSid: SID not valid AzpeAddPropertyItemGuid: invalid prop id %ld AzpeGetObjectByGuid receives NULL parameter pFoundObjectHandle. AzpGetChildGenericHead cannot find the child list head for type=%d. %AZ_CLIENT_DN%AzpParseLDAPUrl: NULL Pointer AzpParseLDAPUrl: URL is %ws Error allocating memory AzpParseLDAPUrl: url doesn't begin with ldap:// AzpParseLDAPUrl: Host name missing Error unescaping host name: %ws Error unescaping DN:<%ws> AzpParseLDAPUrl: missing DN *AzpParseLDAPUrl: missing Attribute baseonesubAzpUnEscapeString: InternetCanonicalizeUrl NULL Param AzpUnEscapeString: Out of memory AzpUnEscapeString: UrlUnescape failed with %x AzpUnEscapeString: First call to UrlUnescape failed with %x AzpGetCurrentUserSid failed: Status = %x AzpCaptureString: NULL not ok AzpCaptureString: zero length not ok AzpCaptureString: string too long %ld %ld %ws AzpCaptureString: SID not valid 0x%lx: 0x%lx: Free old array 0x%lx: 0x%lx: Allocate array AzpSafeArrayPointerFromVariant: parameter is not an array 0x%lx. AzpSafeArrayPointerFromVariant: Array %lx isn't single dimension array AzpSafeArrayPointerFromVariant: Array isn't array of VARIANT 0x%lx %lx AzpADSetDefaultLdapOptions: ldap_set_option LDAP_OPT_REFERRALS failed: %ld AzpADSetDefaultLdapOptions: ldap_set_option LDAP_OPT_AREC_EXCLUSIVE failed: %ld AzpADSetDefaultLdapOptions: ldap_set_option LDAP_OPT_DNSDOMAIN_NAME failed: %ld AzpADPersistOpenEx: ldap_get_option for LDAP_OPT_SSL failed AzpADSetLdapEncryptionOption: ldap_set_option LDAP_OPT_ENCRYPT failed: %ld (null)%s<Invalid Sid>0x%lx %ld (%ld) %ws: %s [AZROLES] %02u/%02u %02u:%02u:%02u HANDLEOBJLISTINVPARMPERSISTOBJREFDISPATCHACCESSDOMREFXMLADSQLSCRIPTCRITICALFUNCALLUNKNOWN[%s] Failed to create log entry: StringCchVPrintfA failureError Message: WideCharToMultiByte failed AzManSQLProvider::Initialize: NULL pwszConnStr. AzManSQLProvider::Initialize: Not enough memory for db instance. AzManSQLProvider::Initialize(): Database::Open() returned 0x%08X. AzManSQLProvider::Initialize(): Not enough memory for db connection. AzManSQLProvider::Initialize(): SqlConnection::DriverConnect() returned 0x%08X. AzManSQLProvider::Initialize SqlConnection::DriverConnect returns 0x%08X. AzManSQLProvider::Initialize(): FAILED to initialize AES crypto provider Error 0x%08X. AzManSQLProvider::NeedsReconnect(): SqlConnection::NeedsReconnect returned %d. masterFAILED to initialize SHA256 hash algorithm Error 0x%08X. CryptHashData FAILED Error 0x%08X. CryptGetHashParam FAILED Error 0x%08X. AzMultiValuePropertyBuffer::NextPage is out of memory. No object can be found for guid=[%ws] in the visible tree. No object can be found for the given guid. =%d%wsAzMultiSidBuffer::NextPage is out of memory. |UuidCreate failed. AzpeGetProperty failed. AzObjectRecord::Initialize failed. AzObjectRecord::PopulateObject receives NULL objectHandle. Fails to set property (id is %d) to value %wsFails to set property (id is %d) to value %dAzObjectRecord::PopulateObject failed. ContainerRecord::Initialize failed. RoleRecord::Initialize fails to allocate memory for SID. TaskRecord::Initialize fails to allocate memory for Bizrule language TaskRecord::Initialize fails to allocate memory for Bizrule Path GroupRecord::Initialize fails to allocate memory for Bizrule language GroupRecord::Initialize fails to allocate memory for Bizrule Path GroupRecord::Initialize fails to allocate memory for SID. |p4 pP<0دXD(hx|DH hxtȠhxԟpԚ(hxx0 hxhddxddxxx8ddP\hxddxxxddxxxddPxP(`hx<LX|<}dprddLLxxxddp|xxxq|r1!defighSELECT count(*) FROM sysobjects WHERE name = 'AzMan_AzAuthorizationStore' and type = 'U' QueryChildrenUpdateTimeStamps fails for action=%d and objectType=%d. ObjectTimeStamp::GetUpdateInformation failed. QueryObjectUpdateTimeStamp has NULL parameter pRowTimeStamp.AzManSproc::Fetch failed with error: %d. QueryObjectUpdateTimeStamp failed. QueryChildrenUpdateTimeStamps has NULL parameter pTSMap.QueryChildrenUpdateTimeStamps failed to allocate memory. Invalid Stored Procedure Object: no ObjectRecord. QueryChildrenUpdateTimeStamps failed. StoreTimeStamp::GetUpdateInformation failed. SqlStoreHasUpdate has NULL pPersistContext or pbNeedUpdate parameter. AzpeSetObjectOptions failed. Enter PopulateObjectSingleValueProperties. PopulateObjectSingleValueProperties: objectHandle = NULL is invalid. PopulateObjectSingleValueProperties: pSproc = NULL is invalid. AzManSproc is invalid: No AzObjectRecord object. Leave PopulateObjectSingleValueProperties. return value: 0. Leave PopulateObjectSingleValueProperties. return value: %d. Enter PopulateObjectOptionalValueProperties. PopulateObjectOptionalValueProperties: objectHandle = NULL is invalid. PopulateObjectOptionalValueProperties: pSproc = NULL is invalid. Leave PopulateObjectOptionalValueProperties. return value: 0. Leave PopulateObjectOptionalValueProperties. return value: %d. PACL parameter for SqlLoadPolicyUser is NULL. Policy user type is not supported %d. Object of type %d does not support the action %d. AzManSproc::Execute failed. AzManSproc::Execute failed with error: %d. There are too many policy users for an ACL to hold. AddAccessAllowedAceEx fails. Error reading users of type %d SqlGetObjectSecurityDescriptor has NULL PSECURITY_DESCRIPTOR. InitializeSecurityDescriptor failed. SetSecurityDescriptorDacl failed. SqlGetObjectSecurityDescriptor failed. SqlGetObjectSecurityDescriptor failed %d. AzpeSetSecurityDescriptorIntoCache failed %d. SqlLoadAcls failed. GetAclInformation failed. CollectSids: duplicate SID. CollectSids: set::insert failed. AzManSproc::Execute failed AzManSproc::Execute failed with sqlStatus: %d. SqlUpdatePolicyUser failed. SqlUpdatePolicyUsersByAcl failed to allocate memory. SqlUpdatePolicyUsersByAcl failed. AzpeGetSecurityDescriptorFromCache failed. GetSecurityDescriptorDacl failed. SqlUpdatePolicyUsers failed. SqlLoadPolicyStore receives NULL pSqlPersistContext. Error to create a database %ws that already exists. Error setting MajorVersion. Error setting MinorVersion. Error setting default options. Error to open database %ws that does not exist. SqlLoadPolicyStore failed. SqlLoadPolicyStore succeeded. SqlProviderInitialize receives NULL parameters: %d. SqlProviderInitialize receives lower version number in AzrolesInfo: %d. Both OldSqlContext and sqlUrl being NULL is invalid. SQL URL does is not valid: it does not contain a database name information. Out of memory when allocating connection string. Out of memory when allocating PAZP_SQL_CONTEXT. Out of memory when allocating AzmanSQLLayer. AzmanSQLLayer::Initialize failed. SqlLoadPolicyStore SQL provider is invoked without mssql prefix "mssql". ://SQL provider URL is missing %ws. SqlPersistIsUpdateNeeded called with pbIsUpdateNeeded = NULL or pSqlPersistContext = NULL. SqlPersistIsUpdateNeeded failed. SqlPersistUpdateCache has updates. SqlPersistUpdateCache has no updates. SqlPersistUpdateCache failed. SqlPersistUpdateChildrenCache called. SqlPersistUpdateChildrenCache failed. SqlRemoveSqlRoles receives NULL SqlConnection. AzDatabaseSproc::Create fails with SqlStatus=%d. AzDatabaseSproc::Execute (AzMan_SPD_SQLRole_ForObject) fails with SqlStatus=%d. SqlPersistDelete failed. BeginTransaction returns: %d. CommitTransaction returns: %d. RollbackTransaction returns: %d. SqlPersistSubmit receives NULL PersistContext. SqlRemoveSqlRoles failed. SqlSubmitShallowProperties failed. SqlSubmitOptionalProperties failed. SqlSubmitMultiValueProperties failed. SqlUpdateStoreStateInfo failed. SqlPersistSubmit failed. SqlCreateObject receives NULL sqlPersistContext. GetStoreProcedure fails. SqlCreateObject receives NULL sqlPersistContext or NULL ppSproc. Object of type = %d does not support action %d. AzManSproc::Execute partially succeeded. Check Sproc %ws SqlExecuteNonQueryForObject failed with error: %d. SqlExecuteQueryForObject receives NULL sqlPersistContext or NULL ppSproc. PopulateObjectSingleValueProperties failed with error: %d. PopulateObjectOptionalValueProperties failed with error: %d. AzpeClearPropertyItemList failed: propID=%d, ObjectType=%d, ObjectName=%s. AzpeClearPropertyItemList fails for property (id is %d). Fails to set property (id is %d). SqlLoadMultiValues failed.AzpeAddPropertyItemSid: set::insert failed. SqlCreateChildListShallow failed.SqlCreateChildListShallow failed with error: %d. SqlCreateChildFromRecord receives NULL ppObject or NULL pSproc parameter. AzManSproc does not have AzObjectRecord. Fetch fails. AzpeGetObjectByGuid fails. AzpeCreateObject fails. SqlCreateChildFromRecord failed.SqlLoadChild failed.SqlLoadChildren (Loading type: %d.) Failed to allocate memory for object list. SqlLoadChildren (Type being loaded: %d.) SqlLoadSpecificChildObjectShallow failed with error: %d. Child object of type %d starts recursive loading. SqlLoadMultiValues failed with error: %d. SqlLoadObjectOptionalData failed with error: %d. SqlLoadChildren failed with error: %d. SqlLoadChildren failed.SqlLoadChild failed. ObjectTimeStamp allocation failed. AzpeGetObjectByGuid failed. SqlRefreshObjectsByTimeStamp failed. $XxLAzMan_SPS_Get_ObjectSecurityOptionAzMan_SPS_Get_AzApplicationAzMan_SPS_Get_AzScopeAzMan_SPS_Get_AzTaskAzMan_SPS_Get_AzOperationAzMan_SPS_Get_AzRoleAssignmentAzMan_SPS_Get_AzApplicationGroupAzMan_SPD_AzApplicationGroupAzMan_SPD_AzApplicationAzMan_SPD_AzScopeAzMan_SPD_AzTaskAzMan_SPD_AzRoleAssignmentAzMan_SPD_User_From_RoleAzMan_SPI_AzApplicationAzMan_SPI_AzTaskAzMan_SPI_AzScopeAzMan_SPI_AzRoleAssignmentAzMan_SPI_AzApplicationGroupAzMan_SPI_Add_User_To_RoleAzMan_SPS_Enum_AzApplicationGroupAzMan_SPS_Enum_AzScopeAzMan_SPS_Enum_AzTaskAzMan_SPS_Enum_AzRoleAssignmentAzMan_SPS_Get_Role_For_ObjectAzMan_SPS_Get_DBOwnersAzMan_SPS_Enum_AzApplicationGroupUpdateTimeStampAzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStampAzMan_SPS_Enum_AzTaskUpdateTimeStampAzMan_SPI_Create_SqlRole_For_ObjectAzManSproc::GetStoreProcedure receives NULL pSproc parameter. AzManSproc::Initialize receives NULL objectHandle. AzObjectRecord::NextPage fails. AzManSproc::AdvanceDataBuffer called without AzObjectRecord member. AdvanceDataBuffer fails. AzManSproc::BindParameters for action=%d and childType=%d. Stored Procedure %ws does not support parameter of ID=0x%x. Stored Procedure %ws does not support result parameter of ID=0x%x. Negative SQL return code 0x%x is interpreted made positive. AzMan_SPS_Get_AzAuthorizationStoreByNameAzMan_SPS_Get_StoreIDByNameAzMan_SPS_Enum_AzApplicationsAzMan_SPI_AzAuthorizationStoreAzMan_SPU_AzAuthorizationStoreAzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStampAzMan_SPS_Enum_AzApplicationUpdateTimeStampAzMan_SPD_AzAuthorizationStoreAzMan_SPS_Enum_AzOperationAzMan_SPI_AzOperationAzMan_SPU_AzApplicationAzMan_SPD_AzOperationAzMan_SPS_Enum_AzScopeUpdateTimeStampAzMan_SPS_Enum_AzOperationUpdateTimeStampAzMan_SPU_AzScopeAzMan_SPU_AzRoleAssignmentAzMan_SPI_AzRoleAssignment_Multi_AppMembersAzMan_SPI_AzRoleAssignment_Multi_SidMembersAzMan_SPI_AzRoleAssignment_Multi_OperationsAzMan_SPI_AzRoleAssignment_Multi_TasksAzMan_SPS_Enum_AzRoleAssignment_AppMembersAzMan_SPS_Enum_AzRoleAssignment_SIDMembersAzMan_SPS_Enum_AzRoleAssignment_OperationsAzMan_SPS_Enum_AzRoleAssignment_TasksAzMan_SPS_Get_AzApplicationGroup_LDAPQueryAzMan_SPU_AzApplicationGroupAzMan_SPI_AzApplicationGroup_Multi_AppMembersAzMan_SPI_AzApplicationGroup_Multi_AppNonMembersAzMan_SPI_AzApplicationGroup_Multi_SidMembersAzMan_SPI_AzApplicationGroup_Multi_SidNonMembersAzMan_SPIU_AzApplicationGroup_LDAPQueryAzMan_SPS_Get_AzApplicationGroup_BizruleInfoAzMan_SPIU_AzApplicationGroup_BizruleAzMan_SPS_Enum_AzApplicationGroup_AppMembersAzMan_SPS_Enum_AzApplicationGroup_AppNonMembersAzMan_SPS_Enum_AzApplicationGroup_SIDMembersAzMan_SPS_Enum_AzApplicationGroup_SIDNonMembersAzMan_SPU_AzTaskAzMan_SPS_Enum_AzTask_OperationsAzMan_SPS_Enum_AzTask_TasksAzMan_SPI_AzTask_Multi_OperationsAzMan_SPI_AzTask_Multi_TasksAzMan_SPS_Get_AzTask_BizruleInfoAzMan_SPIU_AzTask_BizruleAzMan_SPU_AzOperationAzMan_SPD_SQLRole_ForObjectAzMan_SP_Grant_PermissionAzDatabaseSproc::PrepareParameters failed. AzDatabaseSproc::Create failed. h7:886%8x6l5%85X4%84t3%83L0%8(2,%8. )%8*d%8Lh783)6{O>`3)6{O>`s.O "zz "@` X"ćԇ"x x"@"ą " @P" `"Ȃ0",|Hp " " "| "HP " " "4T|(" "~~("~8~`~ "d}}}("||| ",|<|d|("زȴ "ز "Գ$0"t| "زH "ز "ز " " H "б "$Dl " "Hh " "l "< "خ "` "ԭ " "ج  " "( "4\ "ت0"@X "ة "( " (X" ԦD8"<d "\  "Ĥ  "ܣ , "D l "\  "ġ  "ܠ , "D l "l "ܞ " ,T "\| "̜ "D ",| "(\ "(0 " " " "X "$ " " " "T\ "$ " " "x "DL " "ܗ "<L@"P"$4 " "H"x8@" @" ԓ@"В@"Вt@"В@@"p 8"Вؒ@" "h "4 "p "̑ " @" X@" ,@" @"x@"p,8" " @"px8" " " "px "< " " " T@" (@" @" Ќ@" @"8"Xxh" (@" d@" ",| ",|p " H",|, ",| "PX "ت0" ,| ",|̶ ",|8` "Ph8",|ػ "P "| "تH0"p "  "| "4D0"(h("x "0"<L0" "  "4<`" X "ؿ "x " " " ",|Hp "ت0"P ",|<d ",| ""\dp" "p@0",| "P ",| ",|T| "  "0@ "  "LT "|0",| ",|4\ " "xh"H"08 "0"0@" Xp",|`H" "4 " ",| 4",|t0"$ "$ RSDSvAQ>FWx-`tazroles.pdb@WH 3H DB(*%eH%e%ZH%H=?H PH=ay ͇ 8H{H H=؇HH _#HfH JHfHJHfHIHeHIHeHIHeHIHeHIHfHIHfHIHIfHJHSfHJHeHJHeHJHeHJHeHJHeHJHeHJHodHJHeHjIHeHdIHeH^IHcHXIHcHRIHcHLIHcHFIHcH@IHcH:IH1eHZJH;eHTJHdH.IHdH(IH eH"IH[bHIHebHIHobHIHdHrGHdHlGHMaHfGHWaH`GHaaHZGHkaHTGHuaHNGHaHHGHaHBGH(H }PH 1H(TH(3H #~DB(ȔH%B~%C~%@~H%$~H }}H]y%}hH ѿH(H(3H ~DB(T%}H FH}H5H }H}H5H}-]y  }HH H(^H H%H\$Hl$Ht$WH 3HHH)iHiHiHi Hi(i0Hi8ML3Hu=uH+HtYHHHf9,GuHpHHi}H@H艍HC8HuH!\@kLHH3"Hl$8Ht$@HH\$0H _H\$WH ڿH;tu Hu=u؁DߋH\$0H _HHXHhHpHx AVH E3HHAL91u Avyu @HtfD92jHHHfD94BuxHHC|H@HcHE(Hu tLHH!H|0E06HHt H(LpLpLp Dp(H(^HGIHu LE(H;Hu];tYHMHEH]HGL9wtHGHHX$H_HuHLw Dw( EAHHm]HGL9wtWHGHHXӃH_Hu< HtBHH/]HGL9wtHGHHX蕃H_HuLw HDw(|H\$0Hl$8H|$HHt$@H A^HHXHpHxLp AWH ALA;tuDIVJA;t=uIu=tE؁Ht$8H|$@Lt$HADߋH\$0H A_H\$Ht$H|$AVH@HqHH>tHLHHةur=tk2AHz0tLB(H4HB LJHHRfDt$0HD$(EfDt$ H؅t,t=tHH\$PHt$XH|$`H@A^HlDJDBYH^ةu=t3HHXHhHp HPWATAUAVAWH@E3IHAAAMfE98LqM9>tCHMHHAA;IIHfD9|]uHƉL$xHI@HxH:HHu fD8IHD$xfD|$8HD$0D$xfD$(DL3Ht$ sH0AuSHMHD$ u=Eù;w19Mw,}w#M E ȁ@#@HMGH3L$I[Is I]H\$Ht$WH 3IHtMH^qK莁HHt/HXHG HHG HtHHHOG(HO HqHNJ@CIHHt:HHAHtHBHGHQHtHHHHW O(yH^Ht$8H\$0H _H\$WH HtHgyHH\$0H _H\$Ht$WH HyHRHHtHGHHXyH_HuHgg@tHxH\$0Ht$8HH _H\$Hl$WH HVHHH`H-0RHXtH`HHXxH`HuHhpH8H0tH8HHXUxH8HuH@H\$0Hl$8HH _H\$Hl$Ht$WATAVH E3HEfEuBt>HVAN A;t=uHNuu=tEHl$HHt$PAD܋H\$@H A^A\_H\$ HL$UVWATAUAVAWHP3HLA HIVE3D H!$=P9HMu L8MmMtI]HH$HHfHf$PpHHLRXHHLRPHHLR`HHRhHHHRHHHR@H$HR8Ld$HL|$@Lt$8DH$HKfl$0Ht$(f|$ $D$H u=3H$HPA_A^A]A\_^]H\$Hl$Ht$WATAUAVAWH0E3HLA(HIAUE3EEH=DxA]D9pMu L`MvMtM~MMIIfDPHf f wAsxIIPpIIHRXIIHRPIIHR@HMLADHt$(H|$ Hu=33H\$`Hl$hHt$pH0A_A^A]A\_HHPHHSUVWATAUAVAWH83LHp DHH_OA9t$MuMl$MmMtM}LMfIf$IPHf;tf;tf$uH-kLHU{HHt H0HpHpHHH/IIP@3,HH$LH$H$DHL$(HHHD$ H$HHDH$ff;cHt H~ H$Ńt ;uH+HH$HHNH"jPz3Ht HHHHHHHFHHHHN3HH9st u HHH3LHHHH$LFHI`H$HNH$HvHuL$t uB473fBt7L3H3H HtHH[qHuILIIP $dH$!@H Ht1HH[qHu@3H8A_A^A]A\_^][H\$Hl$Ht$WH HHQHRLCHuW;tNHKLúu>;t:Hu.;t*Hu;tHHPu ;t 3HcH\$0Hl$8Ht$@H _H\$WH H8Ht,H8HHHXpH8pH8HuH@HH`t,H`HHHXHpH`HH7bH@HWrHHuXHCD4^LWDLHHH\$ y --HH:؅tHCDLǹAHxjHl$HHt$PH|$XH\$@H0A^@SH HYALHKAQpHu=t3H [ËH [H\$Hl$Ht$WAVAWH HALE3LDCHAAHHtHHHHϋHupHHAHAEDžuHuCDHIL!H\$@Hl$HHt$PH A_A^_H\$Hl$Ht$WAVAWH 3IHLLHI;DžtxtgtH< HRH,OuH;t ; wHH&HrRMHIοwuR9H< u03,< t#< t~< ~< t,Gu LHH;MLHI!H\$@Hl$HHt$PH A_A^_HHXHhHpHx AVH0IHL+u3tOHHH_H@H=o3HHuX@DL33ɉ|$(HD$ uHIfF0H΋gHl$HHt$PH|$XH\$@H0A^H\$Hl$Ht$WH HHH{^n3HHt]HkHkHkHk Hk(H EHH8H@HHz@H0H`HhpHXHHu{yHHWHPuRHKD@H>Hou=u9ptHKHB/HHH\$0Hl$8Ht$@H _3x!~! tu ø øH\$WH HyHf?HHtHGHHXeH_HuHgH\$0gH _H\$E3HBWH=EDGExLIvDCEHt*L+L+IHtAft fHHuHuHAzHtfDH\$ALD$LL$ SUVWH(3HBHH=WGx5HZLL$hHHӋxHH;wuf,^f,^zHtf.H(_^][3H\$H|$3HBLH=WDDGILEx)IDMtf99t HHuHtML+DLExQIK CDI+t5HI+MLH+Mt ftfIHHuHu HAzf9H\$H|$AH\$3HBAI;DAWEGEx>DHt*L+L+IHtAft fHHuHuHAzHtfH\$AHl$Ht$WH H;ulH=&&Ht!H=&H=ct@W@HHH?uH=YHYHHt @R@HYHH;rH@suqH=NcHt%HO HtHPHg 3W@HHH?uH=EYHFYHHt 3R@H0YHH;rH b32VHl$0Ht$8H _39bH\$Hl$Ht$WAVAWH MLHMu @I H=}b3HHHH9_t9EuA9EuA9EuA 9E tHHHw H9u2H cXH9uHOH4LWH >XHHt HMII>uuMMH/Hl$HHt$PH\$@H A_A^_H\$WH HaHt80SS8H AHp&HHH;uHWHW3H;s@H;Ht+WxQW8HAH!&x9HJWHH;rąx%H &W,xHv]Ht H ZVH\$0H _H\$WH H`Ht*"S8H E3H%xm3SxdHHH;uH]HtЅxHHVH V31H;Ht%W8HE3HS%x3WxH sVHH;rH\$0H _HL@HPHHSVWATAUAVAWH0H@MLL3Mu @I8AD$H|$ H^HHt"x3DB(HH,l@~8HKHHHt$ !3L$Ll$xLd$pD$Ht$ HtcLf@HN4DxF8DIEuHMIHDt-FHZKH@8~8t@~8HNH{^AH0A_A^A]A\_^[HHGNHov@SH YÃu H [HRH [H\$WH Hكyu4HtAAHJHH@8y(t @y(H]u H ZHRH\$0H _MLHI&!HL@HPHHSVWATAVAWH8H@ML3Mu @I8t$pH$k\HHD$(Ht9H貈HvGHHEHCHyCHCH YHPHH$3L$Ld$xt$pH$Ht@HK 2xCHIuHMIHtLHAH8A_A^A\_^[LD$HT$SVWATAUAVAWH@HD$(MLL3Mu @I8AD$H|$ D[HHD$0HtKxHAHHN}Hb>HFHwHHO=H7HGLo H cVHPHH|$ 3L$L$D$H|$ HtHHO(?/DxGPDIEDIEuHMIHDtLHAPAH@A_A^A]A\_^[HL@HPHHSVWATAVAWH8H@ML3Mu @I8t$pH$PWHHD$(Ht#H肀H*=HH HUHPHH$3L$Ld$xt$pH$Ht=HK%.xC8IuHMIHtLHAPHH8A_A^A\_^[LD$HT$SVWATAUAVAWH@HD$(MLL3Mu @I8$H|$ hVHHD$0Ht5xH;HHKgHP5HCLk H )THPHH\$ 3L$L$$H\$ HtBHK(-xCPIIuHMIHtLHAPH@A_A^A]A\_^[̸AH\$WH HYu/H dSHPHtLSHAH BSHRH\$0H _MLH;≮AH\$WH HYu,H RHPHt LSHAPH RHRH\$0H _@SH 3Mu@CI9u"9Zuzuz Fu IHPMLHz;H؋H [HIHH`HIHH`HIHH H\$WH HYu,H QHPHt LSHAPXH QHRH\$0H _MLH9R@SH 3Mu@CI9u"9Zuzuz Fu IHPMLH9H؋H [HIHH`HIHH`HIHH H\$WH HYu,H PHPHt LSHAPHH PHRH\$0H _MLH'8F@SH 3Mu@CI9u"9Zuzuz Fu IHPMLH7H؋H [HL$WH0HD$ H\$HHH=HH;HAH9HAAH OHPH~tHRHH\$HH0_HL$WH0HD$ H\$HHH8HAH wOHPHO~tHRRHH\$HH0_o~HL$WH0HD$ H\$HHH7HAH OHPHtHQHH\$HH0_HL$WH0HD$ H\$HHH6HAH NHPHOtHvQHH\$HH0_HL$WH0HD$ H\$HHH6HAH 'NHPH|{tHQHH\$HH0_HL$WH0HD$ H\$HHH@5HAH MHPHO{tHPHH\$HH0_zH鿌HOH}H{~HH雂HsHH鷌HSHӃHoH釀HcHoHÐHߏHOHH鳓H~H|HkH[HHHC~H/}H|H鿌H3}H|HH}HH~HHwHHCH_HH{HH Hs{H鏂H釀H|HH{HG{HOH{H7HH/|HOHyHHHOHkH|HǏH鳁HÇHH;{HHH髏HHyH韍H?HWHwH/yHOxH#H釈H/H鏇H}HWxHxH{}HS|HH闇HoH鋀HzH~H/~HG{H#zH?H闍HH铅H鿄H yHHH{HÌHxH wH_HHGHvHvHH\$WH@HH 3Ht H9 uH AS H HtDH$LDL$pHD$8H$DHD$0H$HHD$(HD$xHD$ ARXH\$PH@_H Q `@SH Iمt GHu@;H 5 3HuH  AH  H H  HtHP3H [Hu@3H\$WH@HH  3Ht H9 uH A#H HtDH$LDL$pHD$8H$DHD$0H$HHD$(HD$xHD$ ARXH\$PH@_H a 0@SH Iمt GHu@;H E 3HuH  AoH ( H H  HtHP3H [H\$WH@HH 0 3Ht H90 uH AH  HtDH$LDL$pHD$8H$DHD$0H$HHD$(HD$xHD$ ARXH\$PH@_H @SH Iمt GHu@;H q3HuH KA[H TH H JHtHP3H [H\$WH@HH \3Ht H9\uH +AH 4HtDH$LDL$pHD$8H$DHD$0H$HHD$(HD$xHD$ ARXH\$PH@_H @SH Iمt GHu@;H 3HuH wAGH H H vHtHP3H [H\$WH@HH 3Ht H9uH WAH `HtDH$LDL$pHD$8H$DHD$0H$HHD$(HD$xHD$ ARXH\$PH@_H\$DL$ LD$UVWATAUAVAWH 3HًH9QtH9Q(u$GDL$xLD$p3L{MLc(Mt]AuWM(MuHHfA9Tmu{0x5LcIHI;nuLcFHIM\3҅t;HIyIL$DD$xHT$pIPPH\$`H A_A^A]A\_^]HcHAL H$H H(H HtHPH(HL@HPHHVWAVH0H@HX IL3HuWfH|$XBHHD$X3H\$`Lt$PHt$XHu.H@HH^INIVHVIvINH\$hH0A^_^HtYH\$WH HHIHtHPHO(HgHt HYL 6DHHAHg(H\$0H _H!aI HLISIKVWATAUAVAWHHICHLHIS HP3H$H$H0AN0I!v(DFHHNH@HHBHMAHD$8Ht,D8HpHUHD$ L AEǺHL3H$L$H$H$HuHH$HE3E9f0LAgAg HL$AHP(H$LHd$(Hd$ E3L$H$HAR`x?L$H$M9/t IKM/IWAGH$AG H$HHH$AIE;f0/Iv(HH$H3HHA_A^A]A\_^HUVWAVAWH8HHD$`HXH,H3HHHytHy(t3L=a<IL|$hID$p@H{1Hd$@HK9<ulA9<uaA9 <uVA 9<uKf9Cu@f9Cu:DHUH 4+;HT$@HMHD$@HD$ DDCSޢHd$HHL$@HLD$HHP0JHL$HHL$0Ht HPHL$HHd$8HLD$8H2HL$0H|$8Hu HuvHtlHd$PHd$XHLD$PH_HLD$XHNHHL$PHD$XH;AHtHHRHL$PHtHPHL$0H|$8E2Eu;L3HL$0HtHLD$0HHHL$0MtIIPHL$0Hd$0HKH Z:HtHLMHL$8HtHPHL$0HtHPHL$@HPHL$HHt HP3HSHtH{(u H'IHH3SCH$HĠA_A^_^]@SH Iمt GHu@;H U3HuH /AH 8H H .HtHP3H [H\$Hl$Ht$WAVAWH 3MIHLHHMu @I9A98u/A9xu)AxuAx FuHZHHHPIH9zt]H H@Ņu9u=F9Au5F9Au-F 9A u%HCHt0LKMHIЅtuxHH9{u@H[IxWH\$@Hl$HHt$PH A_A^_H(L3ILA@Mt;I Ht#9u9Huxu x FtAMHIAS@DAH(H(H 7HtPP3H(H(Hy(t A(H(H\$Ht$ UWATAVAWH$H@HH3H0E3HEAHHL$hH 9u% 9Gu 9Gu 9G HD$hAL l H 3EHD$ wD9;tSHCHL$hLMEHEHEtD9#uP(P8yHL$h:D9#uP0P@HEEF@HHL\&HMDsDcЅt$A;+"A;LHMHtt$A;"A;L%HMH8t$A;"A;HHD$xHUAE3HHD$ H}L}L}ID|$`L|$xutH\$xL|$XL|$PL|$HL|$@L|$8HD$`L|$0HE3E33L|$(HD$ YHcHt H@IHuD9|$`uHUHMtH}L$HMHt$A; "A;LHMHt$A;"A;L}$HMHȝt$A;"A;HD$pHUAE3HL|$pHD$ [AHt H*H\$puoL|$XL|$PL|$HL|$@L|$8HD$`L|$0E3E33HL|$(HD$ HcHt HҕIHuD9|$`uHUHMH}Ht HHt HHL$hAHtHRH0H3<L$@I[@IsHIA_A^A\_]ù@h̹W]̹R̹@G̹W<̹1̹@&̹W̹̹@̹W̹̹@̹W̹̹@̹W̹@SUVWAVH`HH3H$P3IMM)M I(HT$0AI)Gu =u zD$0HL$0H!Ѓ.t \uHHęHfuHHHDHL$0Ę؅y{H!HHD$ !fD$(HD$0H+HHAH=v@[LD$ H+Ht tyti"tdPuTHL$0HI؅xHL$0HIDً@H$PH3Y:H`A^_^][ù@̹W̹HHpHxLp UHHpHH3H`E3LL$8LD$0Lt$0Lt$8#HL$8HT$@Lt$@HHT$(E3E3Lt$ PHL9t$@HL$01LD$0HL$PDȺt$ "PfDVH|$PHt$PfD9t$Pt2Hf/f-wH HsHHfD90uHD$PH+HsHH=fDtPLD$PE3HT$0HL$8YHL$@<HL$8HtHPHL$0!H`H38L$pIsI{ Ms(I]ù@9̹W.̹#;@SH yHt H ГCH [HHXHhHpHx AVH =(MILu Mu @I&H 'L'3I;H1Ht+H9^t%HA9uBA9AuBA9Au B A9A tHH~ H9u2H ' H9uHNH0LVH 'HHt HMHI>u uH\$0Hl$8Ht$@H|$HH A^E3DH 0AQeE3DH 0AQuH\$Hl$Ht$WH HqH>tkHytHHuVE3E3(HnHtHMUH]H/HHuHfHgHO@HtHPHO&H\$0Hl$8Ht$@H _H\$WH H? HH:tHU/HH\$0H _̸A ̃A ̋A H\$Ht$WH0HHu@AHY@3H9;u%L DGH )3H\$ xH HH HRH\$@Ht$HH0_HHLHH`̸@H\$UVWAVAWH$0H HH3H E3EHHHL$PEG(3IHD$0L|$8L|$@D|$H;HL$PD|$xxbD$xHtLCHL$0HH[HHuHHT$0HP(؅x'H#HUHDu9~HL$0H H33H$ H A_A^_^];uzHUAA'DfEt2fDEfE;us fDMHrċfDEHt3H;t L"HHfHHfD9f9Hf:%[H HHf8%uH>Hff%tH҈HHuHH+HH[LcL HM$t$ "PLnIM DLA9]~"IEHUJ XtAIE;}|AIIuLME;}IEN4IM MH]IIfC9FuIHMH9>t*H‡HH;uAHMkHHf9g@̹W̹E3E3AQw̻@ HMH]HEHHM/HMH3(H$HĠA_A^A]A\_^]HHXHhHpHx AWH "HHuq"HHfH}H@fHgHfHQHfL=g3IHH^tHHcHr3Hc˸HALfH\$0Hl$8Ht$@H|$HH A_@SH H9HtH HHZH;uH [@SVWATAUAVAW!9H+HD$xH/H3H$!MLD$@LLHL$PHT$HLD$`LL$p3f\$0H$yHT$0H$Lu YI $ wH&Hs I$H$IFD$0=@H$HHHf9AuH$Hcȅt<3HHHr$H Hv!H$H$WH$H$"3HH$Ld$PLl$HHD$`HD$@HL$f9$tEA0IAf\ufD98ufHHL fHIfA9uH$Hu @DLHHfA9HuMHE IuDL$(HT$ DIE3HT$@IM}H$H$H;JH$8LL$0E33H$&D$0D$8D$(HD$8AH$HHHf9xu|$8@t @Ǚ+LcDt$0H$I΅t;3HHHs WHvHH$'H$H$H$Ht$@"3ۋ|$8Dt$0H$Ld$PLl$HHt$`Hu#H$HNH$tHM`6؅tH}`HLEHH؅SLIHi-JtXt WHM`T؅H}`HLEH@H؅LMIHHM`؅H}`HLEHH؅LMIH^HM`؅^H}`HLEHH؅=LMIH|HM`؅H}`HLEHbH؅LMIHƠHM`؅H}`HLEHH؅LMIH踂HM`؅H}`HLEHH؅ucLMIHn=HM`؅uAH}`HLEHH؅u$LMIHӱ؅u HEHeI$H ]\$ MLuӹ$HMHtHPL\$@I[0Is8I{@IA_A^A]A\]HHXHhL`AUAVAWHPMELLt3H$HHH"ML#HL$HXH$Hd$@H؅H ]H$u WAI8u H$tH$YH$v؅H$H$LL$@E3AՋ؅t)=s`tt NËE>H$D$EHD$0HD$@IIHl$(HD$ ؅uHd$@HL$@Ht3ϧH \LM΋ӹ\$ #L\$PI[ Ik(Mc0IA_A^A]HHXHhHpHx AVH@MAHHt0HT$xHHHLL!HL$0VH$؅H 8[H\$pHuWTHuu?HT$xE3HA֋؅t)=s$tt NË 3H ZL7Lϋӹ\$ !Hl$XHt$`H|$hH\$PH@A^HHXHhHpHx AVHPMAHHt3H$HHHLL HL$HUH$Hd$@؅H YH$Hu WH2u H$LL$@E3HA֋؅t)=satt NËF?H$D$DHD$0HD$@Hd$(HHHD$ ؅uHd$@HL$@Ht3H 2YL Lϋӹ\$ 0 Hl$hHt$pH|$xH\$`HPA^HHXHhHpHx ATAVAWHPH`ALHL3H=OML$IGH4Iu !H$؅ H .VXL$LL$@3IAH :XuHKt3rtt߁NH$D$DHD$0HD$@Hd$(IHHD$ K؅uFHd$@LL΋ӹ\$ L\$PI[ Ik(Is0I{8IA_A^A\ûWH|$@t(H DWHL$@3H 3WuH Lƹs̸E3L;a;Z~FAP;BAP;b-Pc~f~tij4AWAø,;tE~./t/01to;wYNX~tt ttp>#;Btg'~'~;A,~AHHXHpHx HHUATAUAVAWHhH}oLAMLH; DϹb3HMHEHEHE߉}DVRHMLRLmMu @I0RAH {ATMu WIu~HMw؅uoHU`؅u^HUiDEE3LcHEIHD$ 覦؅=s%; NËLmHMHtOHMHtrOHt HDQHMRQ3H9ut HMPEt H |S@=MAEAMHUHM)EMLMOL HHT$(Ӊ\$ jHMN-M3ۅR6t4t W fEHE9t fE3f]*L}]LEA AԉE=PHHv]oEt)LE33Nt;OH DA9wEIHM׉EHtIGALEHHMAH܅tIOAHUH KtoHMOHHHMOLEHUoHf}H]rO؅HMDeoZM3EH]E;7EHMOL=UpL}]LEA AԉENHH%]oDA9v]IOAH OHHHMNLEHUoHf}H]N؅DeoEE;7r3۸ HuHfE4fEHEM HMNHHEf}LmHEIEHEIEHEIELMOLfӋω\$ L$I[8Is@I{HIA_A^A]A\]HHXHpWHPAHHMtPAAIHPHH )@HRH3LHLHL$(\$ SHL$xtKLLH%\$ +H\$`Ht$hHP_H\$HL$VWAVH`MAHHtL$D$HH $HL$@LH HOMu WHu H$u @xH$؅aHT$4$؅FL$4tYtW\$0#A E3H$HL$@3L؉D$03f|$H$H$AE3H$HL$@K؉D$0H|$HNAE3H$HL$@K؉D$0HL$HCKH|$HH؉D$0u^H|$8LE3$Ih؅t)=s7tt NË3\$0H$HL$@KH RM\$ LLӹH$H`A^_^H\$HL$VWAUAVAWH`MAHL7tL$D$HH Hd$83M@D$D$HL$@LJH LH$u WHu H$u @u H$tH$؅eHT$0AL؅NpDE3H$HL$@I؉D$4$L$0MH$$HT$8HL$HuOgEuTFt0F;t&F= tF؁N؅LL$8D$&tHL$HHHL$H)؅u_LL$HE3AH$t*AՋ؅t*=s8t;t NË$3\$4L$HL$@uHHL$8HtmFH J\$ MLӹH$H`A_A^A]_^HHXHhHpWHHHHIAHGL DfD$PH$HHD$XH$H(HHD$PHD$@HD$p)D$p$HD$8$D$0H\$(Hd$ L$I[IkIs I_HHXHhHpWHHHHIAH#GE3DfD$PH$HHD$XH$H(HHD$PHD$@HD$p)D$p$HD$8$D$0HH\$(HD$ L$I[IkIs I_HHXHhHpHx AVH@IDL$pLAHLH:H|$xHd$0Hu WH'H HIufDD$pHD$0E3HHD$ ؅t)=s?tt NË$HL$0F3һHHDӋHL$0HtCH H"tYHuL\OL΋Ӊ\$ :HHL$xtLLHHL$(\$ HL$x?CHl$XHt$`H|$hH\$PH@A^HHXHhHpAVH@MAHHt:HT$xHHDL$pH@LLD$ L HL$0BH GHgubHL$x1DHL$x؅uELL$xT$pE3Ic؅t)=s$tt NË 3H kFLL΋ӹ\$ Hl$XHt$`H\$PH@A^HHXHhHpWAVAWH@H`ID$ELHL3HM{ H$Hu W!/H @EAI6uWD$HD$0E3HHD$ "؅t)=s-tt NË HD$03ۋHL$0Ht@t H 1cEL΋HuLO\$ ^ L#L$(\$ A Hl$hHt$pH\$`H@A_A^_HHXHhHpWH0@0IDL$`HAHLHD$ $ H DHuET$`LL$hE3H؅t)=s$tt NË 3H RDLL͋ӹ\$ P Hl$HHt$PH\$@H0_HHXHhHpWAVAWH@H`ID$ELHL3HM/ H$Hu W!/H v@CAIuWD$HD$0E3HHD$ ֕؅t)=s-tt NË HD$03ۋHL$0Ht>t H CL΋HuLO\$  LL$(\$ Hl$hHt$pH\$`H@A_A^_HHXHhHpWH0@0IDL$`HAHLHD$ H =eBHuET$`LL$hE3H̟؅t)=s$tt NË 3H BLL͋ӹ\$  Hl$HHt$PH\$@H0_@UATAUAVAWHHl$0HHHHBH3HE@E3fA9 EHUHMAAL}AutA(AIHUHM )E M0m؅LuM2HUI>؅E9~E~IL;vWLEIt=r%tAA;t؁NLuAEtaAH;#wUH BIHH;rCzt:AGHH;w HHH+Ht$0Ht StckIu9AGA;rE3HHtHeapIE3Hu E3EAE9~ADNHD$@HD$ L 83DBHL$p>x^HL$@HLG@HyHHL$@HLGHHyHCjLЃ HL$PHt-5HL$@HtHRH9HHH3@L$I[(Is0I{8IA_A^]@SH HHdHKHHtHPHK@HtHPHKy(t A(7H [H\$WH HHH-wHu@#H{HtHKHH]LH@LDˋӹH\$0H _H\$WH HHH1Hu@#H{@tHK@HLH@L!DˋӹrH\$0H _H\$WH a3HDB(H 23HGHHOXDB(HGPHJHOP-HH\$0HH _H\$WH HHHt*H a:H3CH Dv:H_PHHHHHO y(t A(5H\$0H _H8LHT$(H E33D$ H8H8LHT$(H uE33D$ ?H8H8LHT$(H iE33D$ H8H8LHT$(H eE33D$ H8H8LHT$(H aE33D$ dH8H8LT$(H ^E33D$ dH8H8LHT$(H YE33D$ ekH8H8LT$(H VE33D$ eH8H8LHT$(H QE33D$ fH8H8LT$(H NE33D$ f,H8H8LHT$(H IE33D$ H8H8LT$(H FE33D$ H8H8LHT$(H AE33D$ H8HHhAAHLHLH@H %)HHD$(T$ 3E3HhHHhAAILL@H@H )HHD$(T$ 3E3BHhLHxHAAIMCIKL IKT$0IC)D$PL$`IcH E33HHxLHxHAAIMCIKE3IKT$0IC)D$PL$`HH |E33ICHxH\$WHHHL$@Hz3LHD$`D$@L$PH\$0HD$(H J)D$`L$pE33D$ uHL$@83H$HĀ_H\$WHHHL$@H2LHD$`D$@L$PH\$0HD$(H )D$`L$pE33D$ HL$@2H$HĀ_H\$WHHHL$@Hb2LHD$`D$@L$PH\$0HD$(H )D$`L$pE33D$ ]HL$@ 2H$HĀ_H\$WHHHL$@H1LHD$`D$@L$PH\$0HD$(H >)D$`L$pE33D$ HL$@1H$HĀ_HHhAAHLHPH@H )HHD$(E33D$ HhHHhAAHLHPH@H )HHD$(E33D$ HhHHhAAHLHPH@H )HHD$(E33D$ *HhHHhAAHLHPH@H )HHD$(E33D$ HhHHhAAHLHPH@H )HHD$(E33D$ HhHHhAAHLHPH@H ])HHD$(E33D$ nHhHHhAAHLHPH@H 9)HHD$(E33D$ HhHHhAAHLHPH@H )HHD$(E33D$ HhH8LHT$(H E33D$ iH8HHXHhHp WH IIHt.HHIHDL5HL$0V,HtpH1؅ubH p0LE3HuH M}0t*s$tt NË 3LDˋӹOHl$@Ht$HH\$8H _H\$Ht$WH03HHٍNHt$HJHu!WLND˺Wf7H9sxulH y/HKxHT$Hv؅u D$HffH J|/t*s$tt NË LzDˉL$ GHt$PH\$@H0_H\$Hl$Ht$WH 3HHHuW}fH9YxumH .HnxH *.E3E33H͋\suH@tH .H Cffo.Hl$8Ht$@H\$0H _HHXHhHp WH 3IHhMt fA( t WH .HvxH g-E3E33Hr؅u&HHLL$@SE3P@H΋tH -H o-D$@fft*s$tt NË Hl$8Ht$HH\$0H _@SH Hك tW\H -HKx vH -t*s$tt NË 3ۋH [H\$Hl$Ht$WH 3IHHHt2Mt-H `,HMxLHtH Bt,WHl$8Ht$@H\$0H _H\$WH HHHHuhH؅uZH +HvH +t*s$tt NË 3LwDˋӹH\$0H _H\$WH HHHH ,T+LMu\H؅uN3IUv؅t"=s7tbt] NËH3v؅uHH *LDˋӹH\$0H _û@WH`HD$@H\$pHHHL$H'H\$0HD$HHD$(HHD$ AE33H HL$H'H\$pH`_LHxAAHMKICL HE3ICHIS)D$PL$`ICd$ H 3THxH\$Ht$WH0HAHt0HL$@9LrHLHL$@ %HCHw^H :r)DHHHH M)t*s+tt NË 3WL LPӹ\$ Ht$PH\$HH0_LHxAAHMKICL E3ICHIS)D$PL$`ICd$ H 3HxLHhAAHICICHISL H vE3)D$@L$P3ICqHh@WH`HD$@H\$pHHHL$Hs%H\$0HD$HHD$(HHD$ AE33H -lHL$HC%H\$pH`_LHxAAHMKICL E3ICHIS)D$PL$`ICH 3D$ HxLHxAAHMKICL E3ICHIS)D$PL$`ICH 3D$ eHxLHhAAHICICHISL H E3)D$@L$P3ICHhH\$Ht$WH IDHHH &N&LMuWLH؅u>E3I踳؅t)=s$tt NË 3H %L+DˋӹHt$8H\$0H _H\$WHHHL$@H#LHD$`D$@L$PH\$0HD$(H )D$`L$pE33D$  HL$@"H$HĀ_H\$WHHHL$@H"LHD$`D$@L$PH\$0HD$(H )D$`L$pE33D$ }HL$@@"H$HĀ_HHhAAHLHPH@H u)HHD$(E33D$ HhHHhAAHLHPH@H Q)HHD$(E33D$ jHhHHhAAHLHPH@H 5)HHD$(E33D$ HhHHhAAHLHPH@H )HHD$(E33D$ HhH8LT$(H E33D$ pH8H8LHT$(H E33D$ H8LHxAAHMKICL E3ICHIS)D$PL$`ICd$ H 3HxLHxAAHMKICL hE3ICHIS)D$PL$`ICd$ H 3HxH\$WH HHjHt*H Ÿ!H3mH !H_PH^H/HHLHO y(t A(H\$0H _H\$Hl$Ht$WH HLHHHHMP؅HF3H9,t)u HHЅt#хt)tt tځN>7H H HH  3ۃt HMXLDˋӹHl$8Ht$@H\$0H _H8HDHT$(H LHD$ H8H8HDHT$(H vLHD$ gH8H8HDHT$(H ZLHD$ H8H8HDHT$(H >LHD$ H8H8HDHT$(H "LHD$ +H8H8HDHT$(H LHD$ wH8H8HDHT$(H LHD$ H8H8HDHT$(H LHD$ H8H8HDHT$(H LHD$ !;H8H8HDHT$(H LHD$ !H8H8HDHT$(H LHD$ H8H8HDT$(H LHD$ H8H\$WH03Hډ|$HHuW?f:HQxDHD$HH WLHD$(D$ #2x L$HffH\$@H0_H\$WH HH ٳHKxJu9HKxf跋=s tt NËH wH\$0H _H8HDHT$(H LHD$ KH8H8HDT$(H LHD$  H8H8HDHT$(H nLHD$ H8HhAAHLL$0LD$@HLD$(DH <)D$@L$PLʉD$ EHhHhAAILD$0LD$@HLD$(DH )D$@L$PLʉD$ HhH\$WHHHL$@HHDD$@L$PHD$`H\$0H )D$`L$pHD$(LD$ xHL$@;H$HĀ_H\$WHHHL$@HHDD$@L$PHD$`H\$0H X)D$`L$pHD$(LD$ HL$@H$HĀ_H\$WHHHL$@HbHDD$@L$PHD$`H\$0H )D$`L$pHD$(LD$ XHL$@H$HĀ_H\$WHHHL$@HHDD$@L$PHD$`H\$0H )D$`L$pHD$(LD$ HL$@H$HĀ_HhHAAHDHT$0HT$@)D$@L$PHT$(H 3LHD$ HhHhHAAHDHT$0HT$@)D$@L$PHT$(H LHD$ HhHhHAAHDHT$0HT$@)D$@L$PHT$(H LHD$ HhHhHAAHDHT$0HT$@)D$@L$PHT$(H LHD$ HhHhHAAHDHT$0HT$@)D$@L$PHT$(H {LHD$ HhHhHAAHDHT$0HT$@)D$@L$PHT$(H ?LHD$ 4HhHhHAAHDHT$0HT$@)D$@L$PHT$(H LHD$ HhHhHAAHDHT$0HT$@)D$@L$PHT$(H LHD$ AHT$ H 7LHDˋӹ9Ht$xH\$pH`_HUWAVHH`HEHXHpIHHt'HM8_LH-HM89E3Lu0Hu@ML7fDuE)EMMHNHLM0LEH؅xHM0HLHDLӹSHM0HtHPL\$`I[ Is(IA^_]HUWAVHH`HEHXHpIHHt'HM8cLHHM8=E3Lu0Hu@ML7fDuE)EMMHNHLM0LEHx؅xHM0HLHDLӹWHM0HtHPL\$`I[ Is(IA^_]H\$WH`HHt)HL$p}HL5HL$pVL$03HOfD$ HLD$@L$PD$ H)D$@LDȋйH\$xH`_HhHAAHDHT$0HT$@)D$@L$PHT$(H {LHD$ @HhHHXHhHpWHP IIHHt(HHrHSL*HL$@KHd$@H1؅Hu WH'H YHnju HLD$@H9؅t.=s tt NËH|$@=DHH|$0H|$@Hd$(H AH|$ 舔؅u3Ht 3HCH LDˋӹʾHl$hHt$pH\$`HP_HHXHhHpHx AVHPIAED‹LH赽H$Hd$ HuWfH'EMINHLL$ LH LD$0)D$0L$@H A؅xHL$ HcLHHL$ HtHPLDˋӹ۽Hl$hHt$pH|$xH\$`HPA^H\$Hl$VWAVH`HHHIмE3D$Lt$PHT$PHO萷؅uMHD$PL dH kHD$@H$E3HD$8Ht$03Dt$(Hl$ ؅t=ADLBDˋӹL\$`I[ Ik(IA^_^H\$WH HHh Ht@H eHӉtH31AH 2dH_HHHHH֌HOy(t A(H\$0H _HHXHhHpHx AVH MMHLHHCHOH蚌؅xWLHHt,H H蚳H o39_xt HOPLDˋӹ胻Hl$8Ht$@H|$HH\$0H A^H8LDHT$(HH kD$ H8H8LDHT$(HH KD$ BH8H8LDHT$(HH +D$ zH8H8LDHT$(HH D$ «H8H8LDHT$(HH D$ H8H8LDHT$(HH D$ BH8H8LDHT$(HH D$ ~H8H8LDHT$(HH D$ H8H8LDT$(HH lD$ H8HHhAAHDLHLH@)HHD$(T$ HH .qHhHHhAAILL@DH@)HHD$(T$ HH 象HhH\$Ht$WH I؋DHH荷H HuWmHOuPHh؅uBHE3e~؅t)=s$tt NË 3H eL`Dˋӹ虷Ht$8H\$0H _HVWAVH@H@HXHhIAHLIt,HH辏DLH8rHL$0Hd$xHuWhH'HL$0K؅uTfD$ LMFxIHt$0H/W؅u(HLD$xHB\H؅uHD$xHd$xHDLӹ蓶HL$xHtHPH\$`Hl$hH@A^_^H\$UVWAVAWHPMHLHHIxE3H_XD$L$Ht)H HխH G`#D`H$HOE3E3j؅uVDG`HWXH$HD$@H$L p^HD$8Ht$0H gD$(Lt$ y؅t=ADLWDˋӹ`H$HPA_A^_^]HWH`H@HXHpHHLHtV@Hd$xHL$HTHH.HD$xHD$0HD$HHD$(H|$ ADF`HVXH L;H|$xt6LHNM AHT$x'؅yHL$xHtHPH.u3DLӹSHL$HL\$`I[Is I_HHHUVWHhHHEHX HHLH5HM?Hu WKHHHEHPHEHXHEH`HEHhHEHpHEHxHUwHHMoHHE7HHE?3t%HH؅;uoH]gHUwrHHEHHEHHEHHEHHEHHEHHUwH HMoH(HE7H0HE?3tH\$pH`_LHxAAHDMKICL a1ICHIS)D$PL$`HICH D$ mHxLHxAAHDMKICL Y0ICHIS)D$PL$`HICH D$ DjHxLHhAAHDICL 1ICHIS)D$@L$PHH uICkHhH\$Ht$WH I؋DHHW衍H ^.HuWmHc[uPH|b؅uBHE3yT؅t)=s$tt NË 3H y]LԻDˋӹ譍Ht$8H\$0H _H8LDHT$(HH D$ Y2H8H8LDHT$(HH D$ XH8H\$Ht$WH`3HHٍNHft$@-H \Hu@ZH7HYu:DHHD$@H|$0HD$(HCxH >A HD$ aH \OL@DˋӹQHt$xH\$pH`_HUWAVHH`HEHXHpIHH^t'HM8wdLH%/HM8QE3HuHR @L7fDuLu0E)EMMHNHLM0LEH؅x-HM0H؅xHM0HLHODLӹ?HM0HtHPL\$`I[ Is(IA^_]HUWAVHH`HEHXHpIHH\t'HM0OcLHHM0)E3HuH @L7fDuLu8E)EMMHNHLM8LEH؅x=Du0HM8HHU0؅u"D9u0tHM8HLHMDLӹHM8HtHPL\$`I[ Is(IA^_]HUWAVHH`HEHXHp HH[t'HM bLH҈HM E3fDuLu0EEEEHFLM0LEHHN؅xdDu HM0HHU ؅uIHM0Ht Lu0HPD9u t+EEEEHFLEHHNDLӹ͈HM0HtHPL\$`I[(Is8IA^_]H\$Ht$WH`3HHٍNHft$@蹇H XFHu@ZH7H}Uu:DHHD$@H|$0HD$(HCxH ¹AHD$ ]H WLDˋӹ݇Ht$xH\$pH`_HUWAVHH`HEHXHpIHHYt'HM8`LH軆HM8ݻE3Lu0Hu@ML7fDuE)EMMHNHLM0LEH؅xHM0HLHJDLsӹHM0HtHPL\$`I[ Is(IA^_]HUWAVHH`HEHXHpIHHXt'HM8_LH=迅HM8E3Lu0Hu@ML7fDuE)EMMHNHLM0LEH؅xHM0HLHIDLӹHM0HtHPL\$`I[ Is(IA^_]H\$WH`WHHt)HL$p!^HLلHL$pL$03HOfD$ HLD$@L$PD$ H)D$@LDȋй@H\$xH`_H\$UVWAVAWHPHHHIMCE3H_XD$L$Ht)H TH|H uTG`D`H$HO~؅uVDG`HWXH$HD$@H$L HD$8Hl$0H pD$(Lt$ Jd؅t=ADL`Dˋӹ1H$HPA_A^_^]H\$WH HH:Ht@H SHQtH3aH bSH_HHTHnHHTHOy(t A(ʷH\$0H _HHXHhHpHx AVH HHHMyHOHS؅xWLHHt,H RHzH Rѻ39_xt HOPLDˋӹ蹂Hl$8Ht$@H|$HH\$0H A^H8LDHT$(HH D$ tH8H8LDT$(HH pD$ vH8H8LDHT$(HH SD$ qH8H8LDHT$(HH ;D$ rH8H\$WHHHL$@HҷLDD$@L$PHHD$`H\$0)D$`L$pHD$(H D$ dHL$@H$HĀ_H\$WHHHL$@H>LDD$@L$PHHD$`H\$0)D$`L$pHD$(H }D$ 0dHL$@H$HĀ_H\$WHHHL$@HLDD$@L$PHHD$`H\$0)D$`L$pHD$(H D$ cHL$@_H$HĀ_H\$WHHHL$@HLDD$@L$PHHD$`H\$0)D$`L$pHD$(H D$ cHL$@˵H$HĀ_H\$WHHHL$@HLDD$@L$PHHD$`H\$0)D$`L$pHD$(H 9D$ tbHL$@7H$HĀ_H\$WHHHL$@HLDD$@L$PHHD$`H\$0)D$`L$pHD$(H ʹD$ aHL$@H$HĀ_H8LDHT$(HH D$ mH8H8LDHT$(HH D$ oH8H8LDHT$(HH kD$ :mH8H8LDHT$(HH KD$ nH8H8LIxDHT$(HH .D$ lH8H8LIxDHT$(HH D$  nH8H8LIxDHT$(HH D$ ElH8H8LIxDHT$(HH D$ mH8H8LIxDHT$(HH D$ kH8H8LIxDHT$(HH D$ mH8HHhAAHLDHPH)@HH@H HD$(D$ iHhHHhAAHLDHPH)@HH@H HD$(D$ jHhHHhAAHLDHPH)@HH@H RHD$(D$ hHhHWHH@HXHpIHHHHΰ)D$PKL$`H|$0HD$PHD$(D$ LDHH 2iHL$pL$I[IsI_HHhAAHLDHPH)@HH@H HD$(D$ gHhHHhAAHLDHPH)@HH@H fHD$(D$ \hHhHHhAAHLDHPH)@HH@H 2HD$(D$ @gHhHHhAAHLDHPH)@HH@H HD$(D$ gHhHHhAAHLDHPH)@HH@H ʱHD$(D$ fHhHHhAAHLDHPH)@HH@H HD$(D$ fHhHHhAAHLDHPH)@HH@H bHD$(D$ eHhHHhAAHLDHPH)@HH@H .HD$(D$ 4fHhH8LDHT$(HH D$ kH8HHhAAHDLHLH@)HHD$(T$ HH -ZHhHHhAAILL@DH@)HHD$(T$ HH m_HhLHxAHAIMCMCL 1MCDT$0)D$PL$`HICIcH pkaHxLHxHAAIMCMCE3MCDT$0)D$PL$`HICH H 2ICaHxH\$Ht$WH I؋DHH#utH DHuWmH7BuPHPI؅uBHE3M;؅t)=s$tt NË 3H MDLDˋӹtHt$8H\$0H _HVWAVH@H@HXHhIAHL1Ft,HHLDLHZsHL$0{Hd$xHuWdHL$07i؅uTfD$ LMFxIHt$0H؅u(HLD$xH.H؅uHD$xHd$xHDL;ӹsHL$xHtHPH\$`Hl$hH@A^_^H\$UVWAVAWHPHHH3IMgrE3H_XD$L$Ht)H BثHjH BG`ȫD`H$HOl؅uVDG`HWXH$HD$@H$L NHD$8Hl$0H D$(Lt$ nR؅t=ADLDˋӹUrH$HPA_A^_^]H\$WH HHԮ^qHt@H AH'?tH3H AH_HHHL$8L$L$E3HH$33WPuKHtfD9u D9$u1Ht$HD$8HHHtHٕE3tAzH ,D$0t W5H8H#HL$pLƉ\$ Q u 3$9HHH +pH H +c$HT$xHL$pLLÉD$ H +*HH +h$$;eEH8HHH3H$HtHL$pLƉ\$ MH$H3$9E8HE0H u,NHUHM0)E0M@G3ɋ؅tGH}LEHE3ɋ؅t+=s݃ty;t NËH}3۾H_HH_3ɋ؅S9Ou WD_HH;v )tdH;LwYH kHHH;rGt>CHH;w HH;H+L$Mt AEStckLu8C;r3LHtHeapL3MuM3Dˉ]T9_vdI\LHRfA94u+MDMt(HHfA9@uHtAMDDMTfA9u;OrEt LmhWH]h]TfA> uaAANHU`HM0)E0M@E3ɋ؅H}`HHƅ3ɋ؅Dw3EuRWLE`3IB3ɋ؅t=t;t NËg]I޸HH;v xH}XtkH;aw`H HHH;rNtECHH;w HH9H+L$L}XMtAStckLL}Xu7C;rLHtLHeapL}XMuH}AEtRHMLB ft4fA;uBD  fuBD AHIA;rWDtH f8 uBHHUHM0H})E0M@C؅xHEfHDHf8 uBHHUHM0H})E0M@zC؅xHEfHHf8 uBHHUHM0H})E0M@+C؅xHEfHLfA<$ uFA$AL$HUHM0H})E0M@B؅xHEfHWLfA? uDAAOHUHM0H})E0M@B؅xHEfHAHAHHE HH;H H<HH;ylHGH;w HH7H+H$HE H<StckHHE )3f9HLMDf9L}XL$LLMDf9Le LD$xLHHDf9HHDf9HT$pHL$hHHHDHD$`HEpHD$XHEhLd$PL|$HDt$@HD$8ETD$0HHD$(HHD$ 芅3ɋ؅=sztp;tl NË`HE H H;r  3HE HtHeapHHE 3HL}XLe H}LuHupLH}3HEp3LHK SH]D`HEHu L믉]PEtKIHM0.HMfE0LE0HUPE8&؅UEPHA;rHu3H HHM H(Lf H HH0HJHBLHuHMx9A0t HR}Ht HlH}`Ht HZHt Ht}Mt IFHeapMtIM91u.MtIO91uMtIL$91uHHH~H~H~H QZtTHHtHHHU0HMx)E0M@V!LDHHT$ HHMx~|LDˋӹGH8H3U HpHxHH@A_A^A]A\]HHX D@PUVWATAUAVAWHhHADMHHэDϹFLe3DHL$8DL$@I}HL$X}DFPHM30&H  HQ3҅u fA9tIwHHEHHEׅ~=DEgHHD$8HD$(LMoHUHt$ }oLl$8D$@3yAWt8Et;t NË#HM|3LD$PL$T |$PQ|3LHtʼnU_T$8~xIōrHD$HHH|3HHtHL$X_|LD$XHU_Ift$XH\$`K|3ҋ؅L$8HD$HE_HƉL$8HD$H;|Iθ LfEHEHMI$HEIL$ID$9T$@t2I{3҅t fAHT$XI{3ҋ؅uMt*IMHtHHf9AuHuyIyMt I_{HL$Xl{HMH }#tPMtKA$AL$HUHL$H)EMLPDHHT$ DHL$HytLDˋӋxDH$XHA_A^A]A\_^]HHXHhVWAVH/IHHt+HHH|LSCH$qxE3HL$03EFPA"H |Hu WHupHtfD93HEHHNxHT$0HD$0HE3LHl$ HD$8z؅t)=s%tt NË AHL$0H |LŠDˋӹCL$I[ Ik(IA^_^HHXHhVWAVHIHHt+HH7HLAH$ wE3HL$03EFPA}!H 0X{Hu WHtfD93HEHufHHNxHT$0HD$0HALHl$ HD$8؅t)=s%tt NË AHL$0H xzLۉDˋӹAL$I[ Ik(IA^_^H\$Ht$UWATAVAWHl$H_IMHLtFHMIHMHHL LHk@HMuHMuE3HM3ED$PADeH yIvHAI u HtfD9&HEIINxHUHEIMHEHELHD$ ؅t)=s>tt NË#D9euffD'AWHMH xDˋHuLO?LL$ ?L$I[0Is8IA_A^A\_]HHXDH D@UVWATAUAVAWHhHLe3LILEHEuHMuDFPHM3PH +xMnPIE_AIT 3Ʌu ]MtfA9IEIDMwUoHMHEIHL$0HMLEHL$(IAHEHt$ E3؅t7=\AA;M NËHMtD} LEQDuD}tHHDt$@AEt[AHMH tHHHMrtLEHT$@HfDuH]_t؅u:D$@A;rE3H׸ AfEHEHUI$HEIT$ID$IH X v38E_tA9E0t IMqHMHtqHt HsHMsHM?H$(HA_A^A]A\_^]ûH\$Ht$WH0IHHt)HL$X}HfL5<HL$XVqE3HHEAH|$ LhDȋЋ<Ht$HH\$@H0_H\$WH0HHHe;HuW=H  @uH uHHuZH!3H  utRHtMHHL$HLDHHT$ ;HL$HOp/rHHu떅tL=Dˋӹ;H\$@H0_H8LDHT$(HH cD$ 2+H8H8LDHT$(HH CD$ *H8H8LDHT$(HH +D$ *H8H\$WHPHHL$0HqLDHH H\$(D$ [*HL$0pH\$`HP_H8LDHT$(HH DžD$ *H8H8LDHT$(HH D$ )H8H8LDHT$(HH D$ )H8HHhAAHDLHLH@)HHD$(T$ HH VHhH8LDHT$(HH ?D$ (H8H8LDHT$(HH /D$ 6*H8H\$Hl$Ht$WH@HHH#7H RzqHuLHNH ؅x=EMH3LL$ DB)D$ L$0_/~xt HNPQlH  qLDˋӹ8Hl$XHt$`H\$PH@_H\$Hl$VWAVH@ ILHt,HL$`I7HL6HL$`lH IqpHuPHOH؅xAAANHLL$ AH)D$ L$0R.xt HOPDkH oL8Dˋӹ7Hl$pH\$hH@A^_^H\$Hl$Ht$WH@HHH+5H boHuLHNH(؅x=EMH3LL$ DB)D$ L$0o-~xt HNPajH oLDˋӹ6Hl$XHt$`H\$PH@_H8LDHT$(HH D$ %H8H8LDHT$(HH D$ &H8@VWAVH0HD$ H\$XHl$`MHHH|4HOP؅JLHHt,H mH,H mH-HD$PHt HHHu H؅H HHD$PHtCHHHC@)HCH@HCHHCH@Hc3HHqH ؅xHH3ۃt HOX hDL+ӹ3H\$XHl$`H0A^_^H\$Hl$Ht$ WH HHH#2Hd$8Hu WHu@yHL$82H|$8؅xQHH\LH؅yHHPh3#H@HtHG@H|$83ۅyHtHHPhLDˋӹ2Hl$@Ht$HH\$0H _H\$Hl$Ht$ WH HHH1Hd$8Hu WHu@wHL$82H|$8؅xOHHlLH؅yHHPh#H@HtHG@H|$83ۅyHtHHPhLDˋӹ1Hl$@Ht$HH\$0H _HHXHhHp WH0IAHHt(HH HL0HL$@eHMAHDHt$ CtLDȋй11Hl$PHt$XH\$HH0_H\$Hl$Ht$WH HHH itHۀ0Hu@SHgHu-HN@:؅xHNxH~pt HNHdH MiVtL}DˋӹF0H\$0Hl$8Ht$@3H _H\$WH HgHHtHHH\$0H _H1HQH\$WH H3HG0@=DًH\$0H _@SH y0HtHcc0H [@SH039Y0t Huc @\$ @=Dى\$ H0[LUWATAVAWIkHHEI[IsAIHLE3fDeLeL}wHtOEEEEHEICHEICL|$0HT$(D$ L ZDH yTH;tKEEEEHEHD$@HEHD$8L|$0H\$(D$ L DHI x'De_H]HHU_HxD9e_t @H]AHt HHR@L$I[0Is@IA_A^A\_]H\$UVWAVAWHH`HHH~IM,E3H_XD}8L}Ht)H 1YfHE%H G`IfD`D}0rHMHU0H؅HMD9}0tCL}HLEH؅xHOHUE3E3(HMHPL}um HPL}DG`HWXHEHD$@HE8L +HD$8Ht$0H F}D$(Lt$ ؅E=ADHMHtHPL+}Dˋӹl,H$H`A_A^_^]H\$WH HHH|s+H{XHt)H dH#H C`dc`3L|E3ɍJ+H\$03H _HUVWAVAWH`H@HXHLH|*E3AAH gdH HD9@L$HL$HaH$HD$0HD$HHD$(Ht$ EOEF`IVXH N|t%HL$HxaH$HHRyL$H$HL$HHx3LINM AH$@&A@ŃADHL$H`HHPuH赤@H IcDL{׹K*H$H`A_A^_^]H\$Hl$Ht$ WATAUAVAWH0LLH{MM7)H <bINHd$hHT$h`؅IN3i3Hd$ MtHT$hLL$ E3HTIUtHT$hLL$ E3HTI7uHT$ IHL$ 蒣u+LD$hH0{NDu(H;qH|$ht INY_H ZaL-{Dˋӹ(Hl$pHt$xH\$`H0A_A^A]A\_H\$Ht$ UWATAVAWHH`HHH*{IM'E3H_XDe0Le8LeHt)H #KaH7 H G`;aADg`;HM8LEHHHM8HPHUHOE3E3Le8#؅uNDG`HWXHE8HD$@HE0L  HD$8Ht$0H zD$(Lt$ ؅t=ADLzDˋӹ'L\$`I[@IsHIA_A^A\_]HHXHhHpWH@H!3HH!XH!X!XH!XHLA3ҹ[Hc~=K@H[HHt)Hd$8Hd$0AL3ҹt$(HD$ a[Hl$XHt$`HH\$PHH@_@SH@3HH(J)D$ L$0t HL$ HHH@[H\$Ht$WH HAHHxH)u9HVH HO H6HtHPHOM\H-~)HtHCH@HCHcHHCH@HKHcHcH\$0Ht$8H _H\$WH HYu/H HPHtLSHA H HRH\$0H _MLHk *̸AH\$WH HYu/H <HPHtLSHA8H HRH\$0H _MLH颺H\$WH HYu/H HPHtLSHAH HRH\$0H _MLH.H\$WH HYu/H THPHtLSHAH 2HRH\$0H _MLH麹H\$WH HYu/H HPHtLSHAhH HRH\$0H _MLHFH\$WH HYu/H lHPHtLSHAH JHRH\$0H _MLHsҸ̸A H\$WH HY u,H HPHt LSHAPPH HRH\$0H _MLHONMLH6MLHMLH'MLHoMLHַMLH龷MLHG馷H\$WH HYu/H HPHtLSHAH HRH\$0H _MLH2H\$WH HYu,H XHPHt LSHAPhH 9HRH\$0H _MLH¶MLH骶HL$WH0HD$ H\$HHH HHHAHHAAH HPHb7tHHH\$HH0_HL$WH0HD$ H\$HHHHHHAAH 4HPH!tHHH\$HH0_HL$WH0HD$ H\$HHH HHvHAAH HPHbtHHH\$HH0_HL$WH0HD$ H\$HHHHHHAHSHAAH IHPHltH%HH\$HH0_HL$WH0HD$ H\$HHHHHJHAAH HPH)tHHH\$HH0_HL$WH0HD$ H\$HHHdHH*HAAH hHPH1tHDHH\$HH0_HL$WH0HD$ H\$HHH HA H HPHKkHK(y(t A(>R@tHHH\$HH0_HL$SH0HD$ HHHK(y(t A(QH0[HL$WH0HD$ H\$HHHHA H GHPHKHK(y(t A(Q@tH HH\$HH0_HL$WH0HD$ H\$HHHHA H HPHK3HK(y(t A(Q@tHHH\$HH0_HL$WH0HD$ H\$HHHxHA H OHPHKHK(y(t A(P@tHHH\$HH0_HL$WH0HD$ H\$HHH\HA H HPHK;HK(y(t A(P@tHHH\$HH0_HL$WH0HD$ H\$HHH@HA H WHPHKHK(y(t A(O@tHHH\$HH0_HL$WH0HD$ H\$HHH$HA H HPHKCHK(y(t A(O@tHHH\$HH0_HL$WH0HD$ H\$HHHHA H _HPHKHK(y(t A(N@tH$HH\$HH0_HL$WH0HD$ H\$HHHHHHAHHAAH HPHztHHH\$HH0_HL$WH0HD$ H\$HHHPHAH gHPHtHCHH\$HH0_HL$WH0HD$ H\$HHH(HAH HPHhtHHH\$HH0_HL$H8HD$ 0HD$@3HtHHHHtHHHHtHf@(H8H\$Ht$WH z)HHHu9HWHHK H?HtHPHKBNH")HtH\$0Ht$8H _HL$SVWAVAWH0HD$ L3Hu @ H9ADt$hH|$pHHD$xHx3DB(HH @~HHHFPHNX3DB(HHNPHHHHMHFHHFH /HPHHt$p3L|$`Dt$hHt$pHt2HN DxFHDIEtLHA HI7AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pHHD$xHx3DB(HHU@~@HHFHHNP3DB(7~xHHJjHNHMHHHH5HFH HPHHt$p3L|$`Dt$hHt$pHt2HNԽDxF@DIEtLHA8HI7AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pHHD$xHx3DB(HH @~@H\HFHHNP3DB(~xHHX0"HNHHHHHMHFH HPHHt$p3L|$`Dt$hHt$pHt2HN茼DxF@DIEtLHAHI7AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$p:HHD$xHx3DB(HH @~HHHFPHNX3DB(HH-4HNPHHHHHFHOHFH LHPHHt$p3L|$`Dt$hHt$pHt2HN 6DxFHDIEtLHAHI7AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pHHD$xHx3DB(HHq@~@HHFHHNP3DB(S~xHH4:HNHiHH#HHqHFH HPHHt$p3L|$`Dt$hHt$pHt2HNDxF@DIEtLHAhHI7AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pHHD$xHx3DB(HH)@~@HxHFHHNP3DB( ~xHHM>HNH!HHHHyHFH HPHHt$p3L|$`Dt$hHt$pHt2HN訸DxF@DIEtLHAHI7AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H1ADt$hHt$pXVHHD$xHtbp 3DB(HH(@wPHHHG@)HGH@HGHHGH@HwHHH HPHH|$p3L|$`Dt$hH|$pHt/HO(肷DxGPDIEtLHAPPHI?AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H1ADt$hHt$ph6HHD$xHtbp 3DB(HH(@wPH\HHG@)HGH@HGHHGH@HwHHH xHPHH|$p3L|$`Dt$hH|$pHt/HO(bDxGPDIEtLHAPPHI?AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H1ADt$hHt$phHHD$xHtbp 3DB(HH(@wPHHHG@)HGH@HGHHGH@HwHHH XHPHH|$p3L|$`Dt$hH|$pHt/HO(BDxGPDIEtLHAPPHI?AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H1ADt$hHt$phHHD$xHtbp 3DB(HH(@wPH|HHG@)HGH@HGHHGH@HwHZHH 8HPHH|$p3L|$`Dt$hH|$pHt/HO("DxGPDIEtLHAPPHI?AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H1ADt$hHt$phHHD$xHtbp 3DB(HH(e@wPH HHG@)HGH@HGHHGH@HwHHH HPHH|$p3L|$`Dt$hH|$pHt/HO(DxGPDIEtLHAPPHI?AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H1ADt$hHt$phHHD$xHtvp 3DB(HH(E@wPHH`HG@)HGH@HGHHGH@HwHKL wdHHH HPHH|$p3L|$`Dt$hH|$pHt/HO(αDxGPDIEtLHAPPHI?AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H1ADt$hHt$phHHD$xHtbp 3DB(HH(@wPHhH,HG@)HGH@HGHHGH@HwHHH HPHH|$p3L|$`Dt$hH|$pHt/HO(记DxGPDIEtLHAPPHI?AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H1ADt$hHt$phbHHD$xHtbp 3DB(HH(@wPHH HG@)HGH@HGHHGH@HwHFHH HPHH|$p3L|$`Dt$hH|$pHt/HO(莯DxGPDIEtLHAPPHI?AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @)H9ADt$hH|$pBHHD$xHx3DB(HH @~HHHFPHNX3DB(H,JHNPHHHHHHHH-HFHHFH ?HPHHt$p3L|$`Dt$hHt$pHt2HN )DxFHDIEtLHAHI7AH0A_A^_^[LVWATAVAWH`ICI[HJH3HD$XHLHT$(HHH:LIILX IK.HL$@<LHD$0HuHHPL!7E3H;HHD$ Hu iH7HT$ ILH90tHt HHRIHtHPI7H:Lt$0Dd$ H|$(HHRH'I:AHtH Ht HPH'WHL$XH3H$H`A_A^A\_^HWATAUAVAWHH@HXHҗH3H$IALLHL$@HT$PHHH:st MfE3Ld$(uPLIILVS H$H$o:LHD$(HuIHPM!&&E3utMu 3H\$ !I.:HHD$ Hu 賹I>HT$ I*LH98tHt HHRIHtHPI?H&9cIH\$pHt HHPHuH|$ !H9HHD$ Hu *HuE3HR9HO9LL|$`HtMu H\$hHt HHPMu3I9I9HD$0MtHu 褸H\$8Ht HHPLD$0HT$xHL$@D$@HL$8HtHPHL$0 8Ht HHPI7H7Ht HHP|$HuHTALd$(Dl$ Lt$PIHRI&I7AHtH Ht HPI&WH$H3H$HİA_A^A]A\_HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pHBHHD$xHt4x3DB(HH@~8H~@HHH HPHHt$p3L|$`Dt$hHt$pHt/HN蜨DxF8DIEtLHAPhHI7AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pHNHHD$xHt4x3DB(HH@~8H~@HHH HPHHt$p3L|$`Dt$hHt$pHt/HN訧DxF8DIEtLHAPhHI7AH0A_A^_^[@SH HHIHtHPH H [H%55@UVWH@HD$ H\$hHHHYH{&E3AHHO5uHHH?)tH;]tE3AHSHV5uxHd$`HHu3*5H'5HD$(H>tHu ɴHd$0LL$(LHT$pHaHHL$0HtHPHL$(C4HC H\$hH@_^]H\$Hl$Ht$ WAVAWH0HyMHH_HA-HSIE3AHy4AEtHH[{)tHEtqHEH;8u$AHT$PLHL|$ FHHm)tH_8Hx)uHH@x)t HG H;u HH@x)t{)HDIHKE3A3uEyHFH\$XHl$`HHt$hH0A_A^_LI[IkIs MCWATAVH@E3MIHHL9auMKLIAHIE3AH;u*HPI33LL$pALt$ HHH;u&HIIHI3LME3MIHPI2HD$pD8`)tHXAHD8c)uHCHH@D8`)t#HH H;u HHID8a)tD8`)HHDIHKE3An2u*HCLt$ HHD8`)t LE3LL$pHL$pIE3HIA%2LL$pH}IE8a)tE3E333Ld$ LL$p4IAD8`)uHHD8`)tIA H;Xu HH@D8`)tHH;tHSIE3A1u&LL$pIALt$ HHD8`)-LHT$0MHHHH\$`Hl$hHHt$xH@A^A\_LVWAVHHD$0I[HH3H$IALHH$HH9KrKICE3MKDL$@EAHtMHL$8:UHT$8HL$`TH yHL$`gHSHD$ LLdLHCHCE3H;uLPHCLHC$@tLHCH;8uLLWHCH;xuLPIMBID8H(ILXI H;IKD8I(H;PuMHHHHHBHD8H)uHPLBIHAHCH;PuHHIH;uHHHHII@(IHHDI(IHHLI@HI@D8H)uHHHAI@HCH;HuL@HAH;HuL@LIHD8I(u@(A(IHHDI(IHPH;uOHHHAHHAD8H)uHPLBIHAHCH;PuHHIH;PuHHHHQII@(IHHDI(IHHLAIHAID8H)uHHHAI@HCH;HuL@HAH;uLL@ILALBID8I(;HKHQB(MIH$H3H$HİA^_^HHHAVH@H@HXHpHx IIL0HHD$PHD$(HtiL0HpHxHpHt$0H|$pHHu3-H-HH?tHu HHOHNHtHPfC(HH\$XHt$`H|$hH@A^HH_}HuHeHgKHCJHHDyHHP8H\$@Hl$PH A^_^HL$WH0HD$ H\$HHHvHA H #}HPHK(y(t A(hHKHtHP@tHHH\$HH0_H\$Ht$H|$ AVH LHHu @H"HL$8|H\$8xNH9{t!Ht HHPHKHtHPH{HGHRMHCH@HHKHHtHtHHP8H\$0Ht$@H|$HH A^MLHuBHL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pX~HHD$xHt8HxHxx 3DB(HH(艋@~PHtHH n{HPHHt$p3L|$`Dt$hHt$pHt/HN(XTDxFPDIEtLHAP8HI7AH0A_A^_^[H\$Hl$VWAVH HH@HH"HL$HxxH\$HH}LuH9{t!Ht HHPHKHtHPH{LsIFLWNHLHHSHEHsHCAyHHP8H\$@Hl$PH A^_^HL$WH0HD$ H\$HHHXsHA H yHPHK(y(t A(<HKHtHP@tH|HH\$HH0_H\$Ht$H|$ AVH LHHu @H"HL$8|H\$8xNH9{t!Ht HHPHKHtHPH{HGHOMHCH@HHKHHtHtHHP8H\$0Ht$@H|$HH A^MLHcr?HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pXzHHD$xHt8HxHxx 3DB(HH(]@~PH rHH BxHPHHt$p3L|$`Dt$hHt$pHt/HN(,QDxFPDIEtLHAP8HI7AH0A_A^_^[H\$Hl$VWAVH HH@HH"HL$HxxH\$HH}LuH9{t!Ht HHPHKHtHPH{LsIFL+KHLHHSHEHpHC=yHHP8H\$@Hl$PH A^_^HL$WH0HD$ H\$HHHpHA H vHPHK(y(t A(HKHtHP@tHyHH\$HH0_H\$Ht$H|$ AVH LHHu @H"HL$8|H\$8xNH9{t!Ht HHPHKHtHPH{HGHgLMHCH@HHKHHtHtHHP8H\$0Ht$@H|$HH A^H\$WH H+rHHHy8r HI xHc0HC8HC @tH[xHH\$0H _@SH HqHHHy8r HI !xHc0HC8HC H [H%YHL$WH0HD$ H\$HHH<H\qHHOHA HaAHSIE3HnHHH\$HH0_HxH!9H3HD$`HHL$ lHm$HL$ ɅHL$WH0HD$ H\$HHHhHpHHOHA HaAIE3HHmHHH\$HH0_H\$Hl$Ht$WH Hy IHHHYrHHH;r8Hy rH HHOH;v H rHH+MHLHuIvwH9w sLGHH'HuH!wH rHHHt0HW HrH HLLH HwrH3HH\$0Hl$8Ht$@H _@SH 3HA HHAAIIB8uHH [HL$WH0HD$ H\$HHHHoHHOHA HaAHSIE3hHoHHH\$HH0_Hy8rHA HA @SHHD$ H6H3HD$pHHHL$0FHfnHD$0HD$hHd$`D$PHSIE3HL$HH"HL$0 H\$Hl$Ht$WH IHHH9QspuLOL+L;IBHtTHW H_HrH HHrHHL)H (L+LH+^HGH+H HGrHH\$0Hl$8Ht$@HH _H}mHH%#H\$WH H[mHHtHsHH\$0H _HHHHL$ HmH4!HL$ HD$ ˁ@SH HHlHHH [HL@HPHHSVWAVHxH@IHHHII;vH+LA IHHHHH;s L+M;wJHKHtH3HHHs9H$H$HL$8H(lHD$8HD HL$8qLH$H$H\$ Lt$(Ht!H rLGLGHSLIH r HOrHGL0H_ HwHIC0HxA^_^[HHXHhHpHx AVH MIHHL9BsrH~H+L;IBH;u"H/IHL3HHv rE3H9{ sLCHH4HuH{ LsrHCHCD0HtFH~ rHFHFHS HsHrHHL(LH{ H{rH6D4>Hl$8Ht$@H|$HHH\$0H A^@SH Hy Hr HIpHcHC CH [HL$WH0HD$ H\$HHHHiHHOHA HaAHSIE3\HH\$HH0_HxH1H3HD$`HHL$ hH]HL$ i~HL$WH0HD$ H\$HHHHPiHHOHA HaAIE3HHQiHHH\$HH0_H%H\$E3HBLH=WIDGLEx(E3IMtD8 tHHuHtML+DE3ExOIK AI+t1HI+MLH+Mt t IHHuHu HAzH\$ALD$LL$ SVWH 3HBHH=WGx5HZLL$XHH3xHH;wu@<3@<3zHtH _^[H\$WH a3HDB(H"{H}G8[Hg`HgHHg@HgPHgXH\$0HH _HL$SH0HD$ HHI`Ht HPHc`H'HKy(t A(H0[H\$WH DHH譚HCPHtH{Ht H{Xt83H\$0H _H\$Ht$WH03HHHu@|LHAH\$ H\$(H9_PtGH9_HtAH9_Xt;HL$ AAHtHGH(L$ @@H@D$ HL$ H\$@Ht$HH0_H\$WH HHHu@[H"HyPtKLAHMtBHyXt;M@@H"tHCHHH@HtHHu 3H\$0H _H\$Ht$WH IHHHMIHLǹH{PtvHCHHtmH{XtfHHHtLAHjȅyBHCHHHtLAHmjȅyHLǹ胘HCXW @H\$0Ht$8H _H\$Hl$Ht$WH HHHkIIHD$PH^@H\$0HnPHl$8HFXH~HHt$@H _H\$WH d$8LL$8E33ҋ_uE=zu:T$83HHt&LL$8L3ҋ*u H3H3H\$0H _@UHH0He(HE(HOAE3HHD$ <%iu_!E!EHM(HE LMHXHD$(HEE3HD$ E u}uE iEȉ iHM(H0]HHXHpHxUHHH*H3HHH D3;LHfH3{u=DDžuugLHDȺxPLHHx6E3H|$0HAQEAD$(D$ 1HbFHYFHH;LL$PDCHT$TH@|$pfD$TD$VH|$ L HL$pHSx-HD$pLIB8<uH ELL$PHT$pH|$ zHD3H|$8HD$pH|$0LD3ҹt$(HD$ ~=HL$p\Ht(LIB8|uH dELL$PHPH|$ H IELL$PHAAH|$ LMHL$pH`x-HD$pLIB8<uH DLL$PHT$pH|$ LD$PHt$PZH|$8HD$pH|$0LD3ҹt$(HD$ ~-HD$pLIB8<uH yDLL$PHT$pH|$ H ]DLL$PHUAH|$ HL$XLnHL$pHix-HD$pLIB8<uH DLL$PHT$pH|$ L$bDD$`D$dDT$XD\$^DL$ZD$@L$8DD$0DT$(L HL$pHD\$ x-HD$pH@8<uH CLL$PHT$pLH|$ HH3kL$I[IsI{ I]@SVAVH3DBH cd,rH b0HqbH AD5eAHE3E33H /dHeH %`HIHeH %`yuHtH@`H+BhH=0rHu H% Z HBhHYHuHHJhHAHHHBH YH]bH _HHDHYHAH _HHDH|YHd$@Hd$0d$H3DB(HL$PqH$LD$@A3zWHL$@A;wD5d\WQWLL$0EHT$H3xYL$HL$0x=H$u>H$HXHeLHcKy ?D5cHL$0Ht H$Htt3H cxD5vcӾ@JHSXӋ9H2X%HX=bt'D3H `o`H `H XHKH XH/AHWHH{WHd$83ۉ$HD$8HD$ AE3HH/u`!$H$HD$(H$HD$ L$E3HHL$8u9$u9$u D9$ADHL$8HtAWHVH>HVH ؅u3ۅuHĀA^^[H(H VHtrH%VH VHtXH%VH VHt>H%vVH VHt$H%VH -VHt H%V=cat!H ]H %^%@a=`tH X`r%`H UH UH UH >HtH =H(@SH HHHtuHHHt[HHHtAHHHt'HHHt HHHtHHHtٿHH [HHXHpHx UATAUAVAWHhHH H3HE'E33=]EAHLeLeLeLeLeLeLeLeLeHELeHELLLLLLLFLMAT$(ED$HuHMJw`HULMLExwtHM#&AAfAEiHEfA3fA#HD$ f9DAEAHEf3HD$ fA#f;DLAEMAHEfE3HD$ fAfA:EHEAEMfEA3fAHD$ fA<t`HEEMAD3HD$ t@HEEMAD3HD$ t HEEMAE3HD$ uPHEHHEHHEHHEHHEHHEHHEHAątiHMHt HMHtHMHtHMHtܼHMHtͼHMHtHMHtHULEE33AuHMNjHtHM'H3VbL$I[8Is@I{HIA_A^A]A\]H\$Ht$WH H@HHHLºLaLNLƺHME3HNAQL:HaxLH(Ɔ HPH@H;x&H8ƆxHH@Hy !-HƆH@HHHu  dž,3ۅtHHHt$8H\$0H _H\$Hl$VWAVH E3HL9tMH WFHH&H W/HHP HLHxHzxD8 t]HHH(&H HH9Y^H9HTHHXbH9uHHD D8xtHPDxHHtHLD8tHpDHHHCHhHD8u1u HVHH6HXHD8v1tHCH@HCLsHHCH@HHt0LCHT$@HMM6HKXHLsLsXLHHHt LH\$HHl$PH A^_^ù)H\$WH A3IdtutYtMtAt5t#tHKnW`,Hx#|%yHHuX$ yHHDًH\$0H _H\$UVWAVAWH AMHكd t HH AD<\u H"D$u H,HJJHT$`IsЅL$`~H AD<u H"D$u HMHƃHT$`IYsЅ%D$`H AD<Tu H"D$u H$HBBHT$`IrЅD$`u&u"yHDWs|LH AD<u Hh"D$u HvH蔂HT$`I'rЅL$`u"u~ A=wDHBH /ADtHHDǹ(Hˋ@Hˋtg IAHtHMHM|pH QOL\$pI[ Is(I{0Mc8IA_A^]H\$Hl$Ht$WH HHH OE3E33H7ubHupWKH NfHHFHHHP8H N9HHtHoH |NH\$0Hl$8Ht$@H _HHXHpHx AUAVAWH HLH 2N3MH!pMME3E33HK؅Hd$HL-MTHMtLL$HDCg3HAҋ؅u AgHDAI}WHL$HHAIDHd$HHtLL$HDCh3HЋ؅u AhDHAI*}Wu"HL$HHt(A8Hd$HWHL$HHtHtHH LyHt$PH|$XH\$@H A_A^A]H\$WH d$8HH L9 t d$HE3E33HD$@؅uhHDD$HT$@HLL$8P@؅u;9D$8t0LL$@D@g3H ؅uLL$HD@h3H 2HH KH\$0H _H\$WH HH K`E3E33HuH=HtHH KH\$0H _H8LL$ EDXH8kH\$WH HH .KƴtH{W@E3E33HF؅u*E3Hk?؅u 3HHtHH JUH\$0H _H\$Ht$WH HH JtHBdzWLD$8HX؅\$8u H ;JʹE3DHAPo؅HH Hu$\$8t4u+t H Im$tuH?u u uHH}HϋoHtHbH oIHt$@H\$0H _H(HtaH(@VWATAVAWH0HD$ H\$hLH3H|$`H IHLMtwI_HsL"HNAIcdyHvLH6@8~1tL;tIVAI6dLt$pyH\$pHD$pHH;t Hx(H|$`H|$`H jHHH\$hH0A_A^A\_^@SH`HD$ Hr H3HD$PHٲH HHt{HHtoHHtcHH;EuHH;=tCD$8H\$HLD$8HT$(fsf~uHwH G#HL$PH3PH`[HL$SH0HD$ HٲH QGHtTHHt HHtHbH\$@uHCHH@HHOH FH0[H%wH\$Hl$VWAUAVAWH0HiMHH]LAH)HSAIH.bAEtHH[{1tHEtnH;uu$AHT$`LIL|$ GHHf~1tH^8Hx1uHH@x1t HF H;u HH@x1t{1HDHKAIayEHGH\$hHl$pHH0A_A^A]_^H\$Hl$Ht$ WAVAWH0HqLLH^H{1HuRHWAIayHH?H1t"HKAI`yH[HH{1t3HH;tYHǀ{1tHd$ E3E333S4HCx1uHHx1tHK H;Yu HHIy1tHH;uHT$PLLIH\$XHl$`Ht$hHH0A_A^_H\$Hl$ VWAVH HcHHᆳ޺H3>HD$@H iȧAiD$@ +yHU@HcH#H9MHw HHH+HHE(HHTH;t+9C} HH;uHH;t;C|HH;uH;uH}HE3HLt$@H;tHIH;uLt$@HEH;8uH;u H H;AᆳHH?HcNI3ZHD$HH iЧAiD$H +yHM@HcH#H9UHw"HHH+HIHI Ht HLE(I;4tH;ut!HNHHHNHHJHEHMH;[Lt$@H\$PHl$XIH A^_^H\$LL$ LD$VAVAWH0HYLHL;u^L;uYH[L{1u!IVHM6H,EA~1ItHFH@HFHfHHFH@HFHIM;t}Ax1ItHd$ E3E333 Q@I@x1uHHH y1tI@L;@uLHD$`H@x1tHD$`HT$PLHLD$`L;D$huMIH\$XH0A_A^^H\$Ht$WH z1HHHu HSHHH#D{1HtH\$0Ht$8H _LVWAVHHD$0I[HH3H$IALHH$H H9KrKICE3MKDL$@EAHHL$8HT$8HL$`.HHL$`QHSHD$ LL\LHCHCE3H;uLPHCLHC$@tLHCH;8uLLWHCH;xuLPIMBID8H0ILXI H;IKD8I0H;PuMHHHHHBHD8H1uHPLBIHAHCH;PuHHIH;uHHHHII@0IHHDI0IHHLI@HI@D8H1uHHHAI@HCH;HuL@HAH;HuL@LIHD8I0u@0A0IHHDI0IHPH;uOHHHAHHAD8H1uHPLBIHAHCH;PuHHIH;PuHHHHQII@0IHHDI0IHHLAIHAID8H1uHHHAI@HCH;HuL@HAH;uLL@ILALBID8I0;HKHQB0MIH$H3GH$HİA^_^HL@UVWHhHHEHX HpH3HE7HH3A8p1tFHEHu@uDFH:HME3HUHMHHMNMIHL A8q1uILH@8p1tMHM;AuMLMwMIA8q1tLMwI@8r1tLH@8p1tL MAM;IRA8p1uIPHCL9PuL@L9uLLBLKM9u"A8p1tHIIHH @8q1tILKM9QA8p1tHIIHHHI@8q1tIAmLJIIL; uIIQA8p1uIPLHIAHLHHCL9PuLHIBL9uLLHIBIAAI0AB0AA0AJ0AE8Z0HCL;@E8X0H L;HJ@8q0uUDY0@r0HJHHBH@8p1uHPHBHAHCH;PuHHHBH;uHHHHHJHJ@8q1HD8X0HAD8X0}@8q0uVDY0@r0H HAHHA@8p1uHPHBHAHCH;PuHHHBH;PuHHHHQHJH @8q1uHAD8X0HD8X0@q0LHRHAD8X0uZHDX0@q0L IAHIA@8p1uHHHAIAHCH;HuLHHAH;HuLHLIILIHJB0A0DZ0HADX0HJHHBH@8p1uHPHBHAHCH;PuHHHBH;uHHHHHD8X0uXHADX0@q0LIIHAI@8p1uHHHAIAHCH;HuLHHAH;uLLHI LIH B0A0DZ0HDX0H HAHHA@8p1uHPHBHAHCH;PuHHHBH;PuHHHHQHJEX0I:<HKHtHHKHMwHHHM7H3BH$HĠ_^]HHHWH0H@HXHpIIH8);LHD$@Ht.H0HxHXHT$`H HHHBIB HBIB(fAB0IH\$HHt$PH0_H\$WH HAHHHHGH@HgH;OtHB;HH;_uHGHW0HD$0HG(H;tLH;tIIHHL;uHG0HW(LL$0HO A tH\$8HG@HGHH _HL$H8HD$ 8:HD$@3HtHHHHtHHHHtHf@0H8HT$SVWAVAWHHD$HMHHIH\$0HQHu3 HyH+HMHuE3 LAL+IIII+I;sYHDŽ$H$D$pAHHL$hHT$hH$pHH$HHu3 HNH+HIH; HHL+L;s3HHu3 HFH+HIH;sHu3 HFH+HJ<0HHtC3HHHs4Hd$8HT$8HL$PaH2HD$PHHL$PjGHJ8HHD$@LH$HNNHHXH:HHv ! HNH9?uHPH\$0Ht$8H _H%IHHXHhHp AVH H`IMLA!IAHHu3HAH@u  HT$@I(DyRBHODȋN?HL$@MLHDy#BH>DȋMA&3H|$@t HT$@HHl$8Ht$HH\$0H A^H\$Ht$WH Hd$8H333xDv$=t"AHӫODȋZMVHT$8H.DyXAHUDȋ"M3HT$8HtHtHt$@H\$0H _@SH HHlLHH [ HDH L@HPHHUSVWATAUAVAWHHl$PHH3HEPMLH3HuH5_LDvDw|tMIIPLgMt HGXL8{Ml$ IEH;u8IEH;u+IIL$؅yHDAKIHGXHD$ L qE3I؅y H֪HGXHHLG`HO؉E3Ht$@yDH>3 L$H9NpËH\$PHt$XH0_H\$HL$WH0HH#e>HKhHt HPHchHK`Ht-HP DLH%>H\$@Hc`HKXHH3P(D$ "DLvH_=H\$@yDH =HKXHP8D$ "DLyH=H\$@yDHmw=HKXHP DLlH͜O=H\$@HcXHHPH\$HH0_H\$WH HHH==HH(HH{H9xt)HXHH\$0H _@SH HH<HC0H(H H9YuH9uHHAH[HH [ù)H\$WH HAHٹHHHP<HCHH@H H9Yu$H9uHHAH[HHH\$0H _ù)H\$Hl$Ht$WH HHٽHI;HH;FuHGH;Au H HH;Du+HGH;?uH;HHHP3/Hu;H׋6H];H&@H\$0Hl$8Ht$@H _@SH YDCHA;CH [H\$WH HYH*D:u(Ht#H-H~H:HQ H\$0H _H(H:@H(LL$ HL$SVWATAUAVAWHELL3|$ D@|$$LH%:HL$`.qHL$8#qAtH$HuW\$ H8AtH9$tH$H8IH ʚsu IvhPIF HQH9x0u H9xA$HHHtHLL$8L$I-D$ ߅É\$Pt(f|$8 tW\$ sHt$@Ht$0IN H9y0fD$`L|$hHT$XHI p؉D$ 'ADl$$߉\$,IF HH ;YH @HD$XHf9:ttAAHL$`puQIN Q8ӉT$(LD$8HT$(HI0o؉D$ f|$8 tW\$ Ht$@Ht$0cHu +\$ p߉\$ AtHL$HHAtHL$E33HP ؉D$ )؉D$ DH73L$Dl$$IN Ht0H9y0t*Et HI n\$ DHK7HL$`nHL$8nHĀA_A^A]A\_^[H(H)S7@H(H(H)+73H(H\$WH ڿH 6tAt4t'tt u;H2+H"HhHGH&H63H\$0H _H\$Ht$H|$UHHHHH1c6HHPXC|tCx39sxCxHHHUHHuHuHuPyCxBEHDfHEDDEHD$0HEHD$(HEEHD$ DCx5HMHt {lHuHMHt hlHuHMHtUlL$3I[IsI{ I]H(Hc53H(H(H?53H(@SH HHHHC@)HCH@HCHHCH@3HCHHH [HL$SH0HD$ HHHtHK pnLCMMHT$@HKE)HKHcHcH0[H\$HL$WH H3H nǃHD$0@H\$8H _HWHPH@HXHhHp IHHHY HXHm()D$0OL$@LD$0HH(HImH\$hHl$pHt$xHP_HAUAVAWHHD$ HXHpHx)pMLLH'(U HH$3Ht^A()D$`AOL$pHcHH^HjHD$`H;t"HT$`H*jȅyG fK~HHUMu HH$$IjHH$Hu HuLHiHiLLt$8HtMu aHt$@MuHIiIiHD$(MtHu %Ht$0IMLD$(HT$H50t$8HL$(hIhHhfsf~ubHHHD$8HX A()D$`AOL$pHHD$`H;t)HT$`Hhȅy fK|$L$I[ Is(I{0A(sIA_A^A]HHHUWATAVAWHhHHEHXHpML@E3LeALeLeLeD9HY H]HyjLE3I %5LE3I$tWH:jHuHuL9eHLEAAHM;gyHDE0LEAH gy HLEAHMfy H?LEAHfy Hp됋EMDEDME;1;)HUHMfy HQHUHfy H2D}D+}E3DHMfA9<fA<ILft{HEfA< tLfA< tDA)EALM'LEHUITHMg}xOAIE;rJAH @LEMDH.EH.WHKhE3/E3AL$(D$ Hg.WHhL9et HMgeL9et HXeL$I[8Is@IA_A^A\_]HVWATAVAWH@H@HXHhMEHHAHy HxH{gHdMtHuH\$p!HeHHD$pHu HMLD$pHT$0H0H8dH;ut3H^ Ht*HSIdDEtCAWHfAL\$@I[8Ik@IA_A^A\_^HSVWATAUAVAWH0H@LLAHY HXH~fIcu AWMu 3H|$p IdHHD$pHu LD$pH$IMH0H%cI;utfHv Mu 3H|$p!IcHHD$pHu 9HT$pIMbLHbAuHt HAHE3 Dt$pH$HeAH0A_A^A]A\_^[HHHWATAUAVAWH0H@HX HAHY HXH/eHGLL;t+Mp HOHT$h4Mt IIHuE3H|$`Dt$hH\$pHGLhMA})u/IT$HOM$$IMaIMA|$)tHOHIHgHOH HOHIHndAH\$xH0A_A^A]A\_H\$Ht$WH0HH dHFHH;tdHC Ht`{)tHd$ E3E333) 4HCx)uHHx)tHC H;Xu HH@x)tHH;^uHN cH\$@Ht$HH0_HVWATAVAWHPH@HXHhMMLHHy HxHCcHL$8`HEHH;Hs HHL$8`MtLL$8E3HSI)y%MLL$8E3HSIHVD$8f;uf92tf;urE3AHL$8[`;uZ{)tHd$ E3E3334HCx)uHHx)tHC H;Xu HH@x)tHH;]A6AHL$8_H#b3L\$PI[8Ik@IA_A^A\_^HWH`H@HXHhHp HH@Hy HxHaHFHH;HC Ht4xt.@)D$@H L$PtLD$@HSH{)tHd$ E3E3334HCx)uHHx)tHC H;Xu HH@x)tHH;^h3HaL\$`I[Ik Is(I_H\$Hl$Ht$WH HY HHH˲`3HuWMH`H\$0Hl$8Ht$@H _HL$SH0HD$ HHI@HtuHt HHKy(t A([H0[H\$Hl$Ht$WH@HHIH@-]tGf ft6HM@Ht2O)D$ L$0tLD$ HWHl$XHt$`H\$PH@_HhHI@@Ht7AAHLD$ )D$ L$0J)D$@HT$@L$PkHhH\$Hl$Ht$WH HHIHA\t HtHM@HtLE3HWHl$8Ht$@H\$0H _H\$Ht$WH HHH[uWHN@Ht HHt$8H\$0H _H(HI@HtH(H(@HuWHI@Htt8H(HL$SH0HD$ HHHtRHK ^LCMMHT$@HKHKHcHcH0[HWATAUAVAWHHD$(HXHp)pMELL@Hy H|$ HF]Hj(HH$HtdA($)D$`AL$L$pHHH^H^ZDnHD$`H;t%HT$`HiZȅy fK3H]Mu 3H$$I[ZHH$Hu HuE3HZHZLLt$@HtMu Ht$HMu3IYIYHD$0MtHu gHt$8IOLD$0HT$Pw 0t$@HL$0XIXHXfsf~ucHHHD$@HH A($)D$`AL$L$pDiHYHD$`H;t$HT$`HYȅy fK3 $H|$ H4[L$I[8Is@A(sIA_A^A]A\_HVWAVH@H@HXHhLH@HHy HxHZHEHH;HK HtIDAAAHSIP@xZ{)tHd$ E3E3334HCx)uHHx)tHC H;Xu HH@x)tHH;]xDHān 3HZH\$`Hl$pH@A^_^HVWATAVAWH@H@HXHhMMHL@Hy HxHYHVt}MtxMtsHuH\$p!H3WHHD$pHu INLD$pHT$0 H0HLVI;vt&HV HtBA$HIVWHXL\$@I[8Ik@IA_A^A\_^HSVWATAUAVAWH0H@LLA@HY HXHXIUu AWMu 3H|$p I.VHHD$pHu LD$pH$IMH0HEUI;utfHv Mu 3H|$p!IUHHD$pHu YHT$pIMLHTAuHt HAHE3 Dt$pH$HWAH0A_A^A]A\_^[HL$SWATAVAWH0HD$ HA@HY H\$pHTWHGLL;t+Mp HOHT$hY Mt IIHuE3H|$`Dt$hH\$pHGLxMA)u/IT$HO M$$IOSIMA|$)tHOHIHgHOH HOHIHVAH0A_A^A\_[HHXHhHpHx AVH@HHIEH@SuW.HO@Ht%NLL$ EH)D$ L$0Hl$XHt$`H|$hH\$PH@A^H\$Hl$Ht$WH HHIIHRt#HtHtHN@HtLLHWH\$0Hl$8Ht$@H _HHXHpHx HHUAVAWHhHE3HMIIHL}L}L}L}L}L}D}ERHMRLE3HLE3HLE3HHMxLERyHD~HMLEQy HL}LEˋIQ3y HۆHMLEqQy HHMLENjTQy H!rLEϋI5Qy HBSDEMˋEUDMD;ED;;A;HMHU*Q؅yH}DHMHUP؅yHDHUI@}P؅y H@}}D+}3HMf9AAE3H@HEHHMP؅HMDHHEHHME3P؅ujHEDEHULHEgALM')E'M7HH@A"HM.PHM$P3xAHD;?33DuHMO@8ut HMOEt6IO+DL$8DMT$0D$(L$ HWHMOHMOL$I[(Is0I{8IA_A^]H\$Ht$WH HHH@OuWHN@Ht HHt$8H\$0H _H(HI@@HtH(H\$Hl$Ht$ WAVAWH0HyMHH_HA$HSIHPAEtHH[{)tHEtqHEH;8u$AHT$PLHL|$ 7FHHa)tH_8Hx)uHH@x)t HG H;u HH@x)t{)HDIHKFPyEHFH\$XHl$`HHt$hH0A_A^_H\$Hl$Ht$ WAVAWH0HqLLH^HSIOyHHH[{)tIH_IHKOyH[HH{)t3HH;tYHŀ{)tHd$ E3E3334HCx)uHHx)tHK H;Yu HHIy)tHH;uHT$PLLI H\$XHt$hHHl$`H0A_A^_H\$Ht$WAVAWH HyMLH_HIHKNyH[HH{)tH;~tHWINxH|$@ HFHD$@H\$HHt$PHD$@HIIH A_A^_LVWAVHHD$0I[HBH3H$IALHH$HH9KrKICE3MKDL$@EAHhHL$8jpHT$8HL$`oH;HL$`HSHD$ LLdLHCHCE3H;uLPHCLHC$@tLHCH;8uLLWHCH;xuLPIMBID8H(ILXI H;IKD8I(H;PuMHHHHHBHD8H)uHPLBIHAHCH;PuHHIH;uHHHHII@(IHHDI(IHHLI@HI@D8H)uHHHAI@HCH;HuL@HAH;HuL@LIHD8I(u@(A(IHHDI(IHPH;uOHHHAHHAD8H)uHPLBIHAHCH;PuHHIH;PuHHHHQII@(IHHDI(IHHLAIHAID8H)uHHHAI@HCH;HuL@HAH;uLL@ILALBID8I(;HKHQB(MIH$H3MH$HİA^_^HHHAVH0H@HXHpHx IIL0HHD$@HD$(HtTL0HpHxH|$`HHu3HHHHCH?tHu HGHC fC(HH\$HHt$PH|$XH0A^H\$WH HHHHIHtHHH\$0H _H\$WH HtHHH\$0H _@SH LAHT$0HMMwHKJHcHcH [H\$Ht$WH z)HHHu*HWHHKH?GH)HtH\$0Ht$8H _LD$USVWAVHl$HHEHVH3HE'HHE3E8p)tFHELuDuEFHHMkE3HUHMwrHHMIIHL E8q)uILHD8p)tMHM;AuMLMwMIE8q)tLMwHD8r)tLHD8p)tL MAL;HSE8p)uIPHGH9XuL@H9uLLBLOI9u"E8p)tHIIHH D8q)tILOI9YE8p)tHIIHHHID8q)tIAkLJHIL; uIIQE8p)uIPLHIAHLHHGH9XuLHHCH9uLLHHCIAAI(C(AA(K(AD8S(HGL;@E8P(H L;HJD8q(uUDQ(Dr(HJHHBHD8p)uHPHBHAHGH;PuHHHBH;uHHHHHJHJD8q)HD8P(HAD8P(}D8q(uVDQ(Dr(H HAHHAD8p)uHPHBHAHGH;PuHHHBH;PuHHHHQHJH D8q)uHAD8P(HD8P(Dq(LHRHAD8P(uZHDP(Dq(L IAHIAD8p)uHHHAIAHGH;HuLHHAH;HuLHLIILIHJB(A(DR(HADP(HJHHBHD8p)uHPHBHAHGH;PuHHHBH;uHHHHHD8P(uXHADP(Dq(LIIHAID8p)uHHHAIAHGH;HuLHHAH;uLLHI LIH B(A(DR(HDP(H HAHHAD8p)uHPHBHAHGH;PuHHHBH;PuHHHHQHJEP(HK7BHHOHtHHOHMwHHHM'H3yHĠA^_^[]H\$LL$ LD$VAVAWH0HYLHL;uhL;ucH[L{)u+IVHcHKM6AHA~)ItHFH@HFHfHHFH@HFHIM;t}Ax)ItHd$ E3E333a@I@x)uHHH y)tI@L;@uLHD$`H@x)tHD$`HT$PLHLD$`L;D$huMIH\$XH0A_A^^H H%CH\$WH HtHHH\$0H _H\$UVWATAUAVAWHl$HLyE3HLeoLegIGLAM9uM9u3HMo <AD9g HG0LE3AD9 AăHG(L9OHMH MA H@AJ$HI DŽ$H$$HwLwLEGHH$$HvwHD$xIL$pHD$hHGD$`LD$XL$PHD$HI(L$@EHD$8ILMoD$0HD$(L$ A;3AIMLHLvLEHG(L9OHH LEGHMH@$HDŽ$H$$QHkvH$$HevH$I$H$I$LT$xL$pHD$hHGL$`LD$XL$PHD$HI(L$@HD$8ILMoT$0I HD$(A L$ DAr:E3tqLMoHEgMHD$PH3HD$HHD$@HD$8HD$0L$(3Ld$ 4:t.HUgE33):tHMg#:Leg;w E;WHMgHt9HMoHt9H$ HA_A^A]A\_^]HHXHh VWAWH3HHH!XH!XHBHH9uH9u3H$ C9AL=A;uzH!\$XHHHD$PHD$HH(ECEKDD$@HD$8HH D$0ESHD$(DL$ L$EA8AAA;HHHHEHIHEH!\$xHD$pHD$hHD$`HL$XDL$PHD$HH(DL$@HD$8HH D$0HD$(DL$ L$EA7tDL$H$LHD$PL|$HL|$@L|$8L|$0L$(H!\$ 337u 8H$E337uݻWH$Ht7H$Ht7L$I[ Ik8IA__^HHXHh VWAWHp3HHH!XH!XHBHH9uH9u3H$ 6AL=gA;ulHHL$HHD$HH(D$@HD$8HH ECESD$0HD$(DD$ EA_6A HHL$HHAEBIHEHHD$hHD$`HL$XDD$PHD$HH(DD$@AHD$8HH D$0HD$(DD$ E5tDL$H$LHD$PL|$HL|$@L|$8L|$0L$(H!\$ 33r5u p6H$E33Y5uݻWH$HtC5H$Ht85L\$pI[ Ik8IA__^H\$WH@HH>;3y H;H|$8E3H@H|$0EA3H|$(ƃH|$ 蕟HHHHHH H(HHHH@HHXHt HHHHu1H6H`L LHH|$ :3H\$PH@_H\$Hl$Ht$WH HA3HH9,t2HBLAu>tHnDH0Ht5H8Ht7nHHti3HHt64HHHt 4HHHt 4HHH tSHH rHH HtX4;rHHt<4HtgHH HH HHH Ht3;rHHt3H tSHH HH Ht3;rHHtn3HHHH HH9YuoH9HuiHHX93H9uH訬HHtHH@8tH7@H\$0Hl$8Ht$@H _ù)@USVWATAUAVAWHl$HHБH3HE3MLDHMDC43MH]] I]HuH|lK8C2A8HELEAQHD$ 0u!1HnlDl2LMWHD/u B1=t HZl3H]I3/u1H`lLE3AΉ]RtOa0=tHYlDK?U3H_1HHuX$LEHAu 0A<$3HU3.u!p0H!lDDu AޅuIu3Ht H0HMHt60HMH3HĘA_A^A]A\_^[]@USVWATAVAWHl$HHH3HE3ALHMDG43LMlj]DH}@}}}Dw-tutjt_tWtKt'tHakOD_WxI IaHMHHDQ %! AADI7Q IHELEHD$ Z-u!.HjD.LMLEϋIsLuϋ؅HMIHMHMHH#YuIHHHf93IHtHK9HeapuHMH3H]`He A_A^_^]H\$WH@HÇH3HD$0d$ =HHuXHtS-D$$L$$fD$(;u6L$(f;Hu+LD$ H kH &u' |$ t3HL$0H3H\$`H@_@USVWATAUAVAWHl$HLE3HHMEG03AEL}wAL}L}oD}gDL M9}u`L98CL@A8t]Hd| VE3HMoHt L}oHtHeMt IQ'HĸA_A^A]A\_^[]ËuHd| 떃uiLMgLEwP H0Luw؅t=4iAE3A]\In*E3HtfD8DEgIIW^H8IHI3 A8uHE3I^H8E3D}gHt HdL}DMH8ALEgDEHEHD$(L$ Ia؅_HMoHt L}oH0L9>uHH؅'HHuHycHEHEoHEHD$PD|$HHEHD$@L|$8L}HNHEL|$0L acE3D|$(HD$ t/H̓QU=KHUoHNu,bH̓vQtK}HUoHN&LEHNH HHRHHtE3AIdHն)Hu @USVWATAUAVAWHl$HLE3HHHMED$03AL}ELeELeLewDegLeHGLH4bMLG3A9PDH98L@A8 $t.OOMMH bE3ɹ3DL I9LMgLE H؅tp=4u>A$HGDoDoLHaME3ɹ*ALmDHGHaDLMLmE]Lm\I&3HtfL}DEgIIZEtHI"3ɋ؅u A8 $unOODHMwHt P3HMwMtI`E3Mt I"Et HMKu_AދHA_A^A]A\_^[]I9HH98uM3HMDB83I9t/HUIg3ɅtHUHtE3HYH8F!3AH90L}Mu A\$VHHfA9 _uH3H!H0HtzMHHC[3[u$L}HE3IYEH832H98u"H&`| OE|DL}H98u bDMgMtIR_3HEDMH8ALEgDEHEHD$(L$ Ia\؅HMw3Ht RH]wL0I9uHI؅3ILOLuHEH]H_HEMHINHEwE3HD$P\$HHEHD$@H\$8HEH\$0D$(HD$ ؃ tc)HOMNLHD$(H^_M\$ C̓Qȱ=KHUwIN(ubձȋHOMNLHD$(H0_M\$ 3K̓vQtRKz3ۅH>__GMNHGL$ LM>3ɈOO/HGH]DLMLuH\$UVWATAUAVAWHl$HE3HLHMED$03ELegLeIEH^LAM.L9 uH=؅t H^(IMH LEHH؅tH^LuUI HHuA%ȋH^MD˹HD$ C̓K=3H؅t H_73HtHC_Hc؅tHz_DMƹ AE33H؅tCH_CuHEotaV3HLHuX|HEA̅t3DNMǻIHHfD9$PuHPA;sHL;rM$LMMtfE9!uL \DEHUHEgHD$PDd$HHEoHD$@Ld$8Ld$0HD$(L|$ ؅t8dIMH[LHD$(MM\$ UHUgHu\<ȋIMH[LHD$(MM\$ K̓Q9EeMAEIELT$ H[MDAHMHMgHt LegHt H#Mt I5H$HĠA_A^A]A\_^]H\$ HT$UVWATAUAVAWHHPHEhL}pIML3ɈMPM@MLAH]EIHHH;t3HH9pt HHH;uHud 3yHHuXHHp@HH_HH9Xt)HxH;LMH.]39WuSIA9Xu=HG@t0AH&]LGE3MD$ D@ALH+]MzLMPLE@HI3t H4]8E@t+GGAHp]LM(De`AAdv6 5HUHHEpLHHD$0HE@EHD$(IDd$ 3ɋ؅t HO]yDMpEu8M@tOOAH]pEPAdv6 5HUHHELHD$0HEPEHD$(IDd$ c3ɋ؅t#Ht]LD˹MADMEt,H]OOLMٹE rEPtDMpEt H]ˆGOAH^ AEtuAH)^tA9u-I9 t A9(uH5^| LH[^MZH _HGH׀)ItH 3GAxAuFH UpLXLMpII-H luFEp!_G,LH]Mg3A!GuA?u HMhGH$HPA_A^A]A\_^]DL$ LD$HL$SUVWHhH$H$H$E3HHALDD$Ht!EC 3HD$L$E3ۋC8H$Ћ ;EEuHEHGHEED9[8vvH$AE9Z vTHC0MZ(AH ȋ@$I Ë$;@t A;R rE3E3Eu HGAD;C8rH$L$A@8Ћ ;EuHEHGHEAÉ$E9X8L$I@0LAH0L\$P;3A EH$D@pEtAHXxH @HL;tA;r%^H@H$HHXxuZL$K@A@H3AApIYxDB0HHT$PH [ L\$PD$L$L3ҋ$dEL$HCLL$@HEDH$HD$8LT$0MIHHt$(Hl$ I3ɅD$8$tFH$Eu?H$OH+XxH*HHHH?HHGG EuC($L$$A;@853Hh_^][ø6 A HWAVAWHpH@HXHhHp IHLE3AHfD9:MfE98H|誷H$Ht HUHIHt\Hxh)D$0NL$@E)D$PML$`LD$0HT$PHyWIAHtLHAL\$pI[ Ik0Is8IA_A^_LI[IsI{Mc AVHIIHHMCAAHD$@LD$`AHD$@LD$hAHD$@H|$pHu8H9|$`u%H9|$huD$@H!H!H!HXlHt$`HWLt$hMILD$TAHyHiGD,LD$XAHy H{GLD$DAIy HGLD$HAH:y HGLD$LAHy HGsLD$PAIy HHRDD$TDL$XE;u=D;D$Du6D$H;D$Lu,;D$Pu&HHLD3ID$PD$8D$LD$0D$HD$(D$DD$ HGH}WWD$@ xD$@L$I[IsI{ Mc(IA^H\$DL$ HT$UVWH`E3IEL$LHAED9DF 9F@ HKHF8ՋHĸA_A^A]A\_^[]H\$ UVWATAUAVAWHl$HH!fH3HELHL3MHUHMHMMHHfA9 tuDv(MtHHfA9 uDAHHuxE`HH(DI fpHHfp 3Mt!KDIHKf{f{HK ҼsHs HM΋IL|$ /HD$DMLHD$0MEHD$\HD$(HELL$`MI3HD$ E3uHNDWDD$DD;tWHNWHD$DLL$@E3HD$0HD$HIHD$(3L|$ D~؃ztD$H D$@L$H3ɉD$@HH@T$@3LHH!HD$DLL$@IHD$0HD$H3HD$(HHD$ u D,HT$XHMD$XtHHMu,M HE3HD$0HD$pI3L|$(HD$ umHKDYE9,t;Huu.IH؅tHKDuHD$xAH8IMt IHL$hHtHt 3HPH H3pH8A_A^A]A\_^[]H\$LL$ UVWATAUAVAWHHpHA3EH}؉}H}@HIALLH}HEH}DDHuBW+t2HLDùHUIuHLD̿@HUHELM@HD$0HEHE3HD$(E33Ll$ pu4؃zbEH E@MH3ɉE@0LHu 5U@3LHtHUHELM@HD$0HEHMHD$(3Ld$ u/HXLDDED;tWHLE3MIIHt$ 3HEMHD$0DNIΉt$(Ht$ O؅tHLD,HuOHuHyHLdžLEHHӹD3ɅuGHLHHfA9LEuPE@HHHuXU@MHW7DE@HE3E3HfF,@M HHD$0HEAMLl$(HD$ uHVLDϋHE9,t2IH؅t!HGDHEu HEXAH0IHt 3H)MHMHtMt IMt IH$HpA_A^A]A\_^]HL@SUVATAUAVAWHPE3LHLh LhLhHALAtA]2HKDù H KD9,tHuHKLHLEH$uRH+LDAH$LHD$0AT$EHDl$(Ll$ M؅t!H3LAL$DzH$\H$Hy0H)LDL$LIԹDuHLHHfE9,^uC3HEDHHuXMIH4HE3DAME3fF,@L HHD$0HD$@ILl$(HD$ @uHKD\ID9,t/HH ؅tH%ED,AuH$AH0IHt 3HfJH$HtHPA_A^A]A\^][@SH 3H9u H9u$A;Bt2tHH uH [@UATAUAVAWHHl$PHHHHXH3HpHًME33HM0AIE2Le LUңH証;t A\$<H DHEu HuAE33I$B؅ D@PH3bLu0IFHHHM8Ht HݘHM8HHHAHHH jHM0HAH IADmHU0AH9Xt~HHH9t0H HH9YH9HHHX H9uHU0HDXLE@HBIL$ AHU0HXHHM@DE3P؅ EHHMxE3D+؅{ HM8LHUxHA`?؅t= > )HD88ulH HD88uH ב1t7LHHDMA L!exD!D!u LE@HHNE3jW L!eXHIHtcH;nwZH HHH;rGďt(HCHHH;wIHHH+HD$PHEXHEXHt StckHEXu1HKH;rHEXHNHeapHEXL9eX9HMXL3YHMXLH3uPLu`HEhtGHA L HM8A(h؅u ;}PsHMX=  HHtL! LHHM0؅B L0L(H HM0؅ HM0 oX HE8HuHH Et%HHuH(@D9u.HExLE@3HL vHFLEȹYL!H@HHt~H;_wuH ~HHH;rb赍t=H @HHHAH;w HHêH+HD$PHHHtStckHuJH@HHJH;r ۆHHtHeapHL9u 333!EE3](E}YDeL M7I>I;H EH 3H4[HHN(H>fN,LM0A9tNEuHILt/LM0LMHREM蹽EF,3HELHHD$@HL$8HEHD$0HEE3HD$(HL$ HM0 ؅8Eu&LLE@HEM AEF,](AH?É](I;uAID;LE}Le DuD;u>HExLE@L$ HL |HDLEȹ¼35LE3EL} tkH;w`H HHH;rMtDCHH;w HH2H+Ld$PLe MtA$StckILe u4C;r`LHtIHeapLe Mu -LD}ID}AHD9H<@HHHD8,ueHMHGLHL$@HD$8HEHD$0HEHM0HD$(HHE3HD$ ؅D8}u AG,Du;sHC6UL54{AE AADmAuHE0HEtHE0Ht2ۋ]; 3EH<@EPHHH79Epl,*LLE@HCM v}ptpHHELGHD$@Dl$8\$0HM0E3D$(OD$ ؅88Eu+HAEG,LLE@M (nEu.HM0LLHH0t D!(1-u}LLE@HCM 螹HM0LMLE HLLE@M ع]HFC\$ Y} G-EG((LLE@H@CM DM HM0HEL@HHD$0HEHD$(d$ ؅Et G(HfCEHCEуO(LLE@M D$ 蒸(HE03E29HH`H0HHH`0]t6HMxHPH@@@P'uHE0;sqAHHELGHD$@EHM0D$8EAD$0G(D$(Dl$ 8؅8EuCEG,LLE@M HBoDmE]E;I9G(uDmEtHBHExLE@MHH?LEȋEPD$ UAAsiH-@LLE@M D$ նAHx@HAHExLE@H>?HLEMΉD$ 蔶3DmLEP;Ept6t2AA>tE9&tA>uE&AIHuLe uoHE8,tYHE0HuEHM0S؅tLE@HADȹHHt$#؅u HM0 hDmH}Xt;39}PvHEXH Ht5;}PrHEXHtHH9Heapu}HtI39v!HHHH Y5;rHHtHH9HeapuE}HHt-39v#H HH 5;s HMtIL$9Heapu|HHt4HM@HMxHM0Ht4u*HHtH!H!HH`H EtHM0HHpH3uHHHHA_A^A]A\]HHXLH D@HPUVWATAUAVAWHH3LH PMDDE@EEԉEaHuh3HA9}XWoiAE33I13ҋHcH MICH kЈEAINL}`L3҉EMAtVDD{IAHsH HIT@ADE@}E;rHuhL}`@3MI89t$LMLEHI&3ҋ؅F8UuU90DMPHELHD$0HEAHD$(T$ HUHAIY3ҋ؅8UU3a3HHuXDmMHHHH HtHf9AuHu'H3HHHt3H3ɍW}H3HHHHu_DHEXf98KHMI23HUMtLAf;qt?MLMHUIE3Le.3ҋ؅"HMHt H9713MLeI<$UI;LcmIHHEAt`D}DAIHAH HHIEEDED}E;rHuhLe3EDm88u8H )388u HsH v3҅,L A9t$LMLEII诸3ҋ؅8UuOA90DMPHEMHD$0HEIHD$(T$ HUHA3ҋ؅8UtHH9uU33HHHUHDmHHAH HDmHU3HEXD;(tH?UI;t ^DmHEXD(Dm Dm,DMMtI8/H EEtI$H$HĀA_A^A]A\_^]HLH L@HHUSVWATAUAVAWHhHL3)pHUDMHuMHHf9 BuEELew(u}oHEDAE98ىM[EoIy(MMW8O%?Hw*A9IHULr88u4H bz88u HdmH Cz2LHUHE3HM8EA@ LMHU8AI&'H y{I^H yESH=q0r9H qH8H0r(3xt$H@H\$@Ht StckHu8qHHtaHeapHtULuL}LEPL3HE fC,K(HD$0HE$HD$(LIID$ uHC( LuL}MtI(MtI(HtH(HtHK9HeapupHM8ܙMt HM(ΙH x5}tI$ HMXH3蛁HHHHe`A_A^A]A\]ÿWO@UATAUAVAWH Hl$@HHH HV<H3HHHMP3HMpDHM0MHMhMXMHM HMHM@DHMHU(3H wDMMLE`HExCEOE33H%؅_HFHuhHMu LHMpE3AI/؅HLM0HUpAk$Lm0؅tD=>A88u1H wA88u IjH vGu^M9}HM@肚ך؅u8Le@LEHLI$I貚؅I$I̺PPDHMPe&MtIX&Ht.EtHEH@&Hv0IuHO9Heapu9nH}`t HMpMH "v}tHMhHHMHtHPHH3HHH HA_A^A]A\]HMNÙ؅ L}LEHKII蛙؅t IIEfEuHMH0H!}H3H MuHMPHH /uEEfDeEtKdH}8HHtiH;mw`H =mHHH;rMtstDHCHHH;w HHH荐H+H|$@H}8HtStckHH}8u4HKH;rlHHtHHeapH}8Hu II;tODeXH +H"H}8AH @AHHfD,L(HI;uLm0L}DeLE(HU`HMPHEHLHD$0HE HD$(Dd$ ؅Z9E 9EteLu@MtRXH#訣IvXHt*H t,HH sAF`Af`LdWMtH0LƋBIwXHt*H sH貛H sAG`Ag`LE33ҋ賣3؅pDME3ELA~(DUEI3HHLHHLEHHHU(HHHHHHHHHHHt0II9؅LE;u(rDMDUIHHLHHLEHHHU(HHHHHHHH HH(HtB3tH ..H$uH @HɃL(H\fD,@8(A@$vDIHT$@H HHL$PL$PD$@uhA;rH$3H$9$HD$0H$HD$(LIAt$ 脹$ @΋ƈ$ut$3A$I\"L?-йHItHI;L$A<$H$H`A_A^A]A\_^]@UATAUAVAWHHl$`HHHH2H3HEp3LHM3HEhAHM`HM0E8HMHHMXHM@DHHM(DHM MPM MUH PnELEHEL$E33I{3ҋ؅$IFLuXLHHf;HM`E3AH貊؅SILM0HU`A3ҋ؅t=&>HE088uh88u8H fE3D88u HYH eA(HLIM@ALDLeH e:IH eE3DAu*IA@=AtAu IAuIAHEM9MX; 3&HH3HDB tHUPE3HEH諁3ɋ؅HEHLgI $Ht#f9tE3AHIu؅HMLMLLH܅t H蠅I蘅HE3IAt%HMLMAHt؅urHM%DEHMHY3ɋ؅uQCEDeHEPHADeD;eXtIIAu)I貼HtHHOބHIHtHD}LeHMMt HM规H |cEt IH$HpA_A^A]A\_^]ûHHXHhHpWAVAWH@HHHE3LIH(HHSHL$0HBt\H3H;ul$8Epp3HH3HDBpIrHOHYysH3CCLKH LùD$ VH HCH9Yu,H9u'HHAHHHsH9pt)HXHR)HT$0H_pLH}D(GD$0GH_HHHwH9pt)HxH>INH\$`Hl$hHt$pHH@A_A^_H\$WH0HYALILHD$ lu!HO0HtHOH,HsH\$@H0_HHXHpHxLp AWH0HH HAMJXHHuRdXȋ:XLHXD˹HD$ ҐK̓vQtWQKGHH ؅t H@73HWtWH`H萆؅tHwLDȹ KAE33HW؅tDpWLHvD˹HD$ K̓vQt 'W|KuF re3LHtSDFHHX Hj{I~HALMƹAFI^3AD$ M73Ht HqVHt$HH|$PLt$XH\$@H0A_H\$DL$ UVWATAUAVAWHHPE3HHJHMHLuALuHLuLuHEhL0D8s8tA$t`HMuHEH+C@x Hi'H;~@HK0Ht %Ls0Ds8A?AKQDm`A?uH{0*K>AEC(@A?uHMHt ;VHeHtH3HuHHMNHSHEHD$(E3E33ɉ|$ UHMHEHMHE3AHzHS0Ht0HMH~tQHSHME3AjzuQH{tGC(DEXLMHHMHH#S4t~HuHA;uAA?HK@C8AHMHt(UHMS~HtHHKHH$HPA_A^A]A\_^]=Q'tA;uHK0HEHHC0HMHHC0LC0HvAMHD$ 譌HMhHC0HuH3H\H\$WH0HLILH@D$ ^uHOHtWSHnH\$@H0_H\$Hl$Ht$WH E3HAPD\ uIHH HɇuH HHϋ HtH H\$0Hl$8Ht$@H _H(HI{ȃu3 3H(HHXHhHpWH0H`HIH aIIHL wLwHH~džHHHttu ƆƆH\$@Hl$HHt$PH0_H\$UVWH 3Hً@88HH7H|$HOL$@u)t$HH'ttu݅u tH# 39ou LJD$@HL$H9GHDHL$HH1H;tHHWuU HuI9uHX@0ƃ9PHtAHXPA 4H\$PH _^]@UAVAWH0Hl$ H]0Hu8H}@HH3HEz3LL3ۅtaH;QQwVH pQHHH;rCWt:GHH;w HHtH+H\$ Ht StckHu&G;rPHHtcHeapHHtTH!sAHKH EFI:tIOLMDHHHtHHHHK9Heapu_PHHMH3paH]0Hu8H}@HeA_A^]HHXHhHpHx AVH 33H H &)D4EH9tHdHHI3HHt|M3H^gHt HH^3H[HH Hǃ\HGHCH;H98t)HH_GH{Ht HOHHl$8Ht$@H|$HHH\$0H A^H\$Hl$Ht$WH HHHtHH HCH9YH9HHAHCHu0HCHHXHtAHXPA H)rHLHuH7H;uHHuH#5H&HHtHHI$H?HL]j-OfB;IDFI OM=jII kIH\$PHt$`Hl$XH A_A^A]A\_H\$LL$ HT$UVWATAUAVAWHHpDehE3AHLALmELmDm@LmLmHt6Au-H9wQ9v tAAu8MtA$t I؅LMXH]HLm`MtdMHg}IՋxHmJ}LMAIHm؅t=u3 H}BH}HHUXHMHLMA(Lu؅uCMAtHt HI;uHI;tZI=HLMtHUXIAЅu%HL;}tZLM[H Mt>L;tHUIƳ؅uHUXLMLE؅>H 똻+HEXLAAH ؅ a}HMHHUHDUXHHuX$ǀǀx|4E@u HIHL0Ƈ8Mu AXWrHIAЋ؅_DHA;Hd$8Hd$0HL(LE3IL|$(HD$ NHd$8E3DKIL!D$0L|$(D$ s4HHHd$8Hd$0L|$(AE3D$ H3Lm`MtFAEHUHE\uH#}tAtHUXH,uXL= AuA Hρ؅u,AhEu $(HEpH833HtH}@tHMtIHMjH$HpA_A^A]A\_^]HHpHxL`AUAVAWH`EMHE3L|$HL!xȲH [IL!|$PD!|$XD!|$\L$M!}$tH yW DA3HQLHF9uAt Hu8uH;AAH FH$HL$PTeuzHD$@HD$0!t$(Hd$ LL$PEIHuMLt$@IMuAu6HXHt*AHXPA L|$HMtILt$@MtIHL$PiH GjL\$`Is I{(Mc0IA_A^A]HHpHxL`AUAVAWH@EMHE3Lt$(L!pȲH sGL!t$0D!t$8D!t$tHsWSLD$X3H؅u>DL$XA3H؅u&HME3HI5H|$ HtH5H BCԬH\$PHt$`H0A_A^_@SH I!AILE;AtNt?H Shu H5I6f?3ɄgH h@u HI뼋H hu HNI3A9fhA^D;AvRA|EAA2H)HHA~A;xEAA2uPAu HH(HH랋H L@MtIADЅuE3AH [EHxDqAWuHtH fhu HjK3A9,uHsH h uH]opcA4uH}OpA23A90 HHXHpHx PUATAUAVAWHH@HeeeDHMAEDD}u(u$tH<u DAH=5 +e-ȋtAL MtMEAHAҋHED@oWADhuHEoEu H#D$u HAsHnH,In^؅P+A DhtEu HA#D$u HOA HlsnEu;Ar4D94uH{PnA_2HqH0QADhEu H#D$u HAmHmEuArAAHMIDZ؅2(MEAA@Dhu 5Eu H#D$u HAH#mEuArAAHMDIY؅~(ME?D (ZADhLEu HG#D$u HUAHrylEuArDAHME3I"Y؅HM؅HNLMHUAHuXHH}HHH BHυCDu \HHUDAH kWLǐMtHNHUHAЋ؅HNHULHuXHpLMAA|$ tmE3E9|$8vcIL$0MJ ! HLEHHW UHO0G^LEHUH; DEHO0H]EE;|$8rM$$MuDu8D}HNHHu HH`LA3ArED $3ۿHM[u,HH HD6jL\$@I[0Is@I{HIA_A^A]A\]HHXHhHpHx AVH L5v3HA# ysHZsHZs6u%t uH0!0sw LJ,tSsIp ##Ht1;t HAu3HtLIDHE#uH\$0Ht$@H|$HHl$8H A^H\$Hl$VWAVH HDH 8IAS3@LD$PHϋ؅u7DL$PAH؅uLE3H1HtHJH W8Hl$HH\$@H A^_^H\$Hl$Ht$ WH@HYH3HD$8@H@ HH;C uHH;; th% Hd$ HL$(D$(>u9HT$ HL$(x%LL$ DNjHHL$ $1Ha HHH7 HH6H;uHHuH@uHHL$8H35@H\$XHl$`Ht$hH@_HHXHhHpHx ATAVAWH@3HH!X!X!XH 6EIHXE3N9$tHKf{WDE33H88uH|)H$H KE3FHL$(S\LL$ HT$(E3HGH\$ 8HCHu L8L 39hvu HA;rۃˋ.LILB3M+ȍJAC9u IrۃHl$8Ht$@H\$0H _H\$Hl$VWAUAVAWH@L$MHMtI&Ett2ۋL$ t HHD$( D$(L$LHT$ ITtA$IL@u&tMt I4$I=VA83t3}tF3D3IUHHuxV8t!HHMHHHWNMtHCI@D$HITȋHH#tH\$pHl$xH@A_A^A]_^HH\$Hl$Ht$WH0L @HLH9D$ b{x5HcHHH Ht@ut HUHy҃{uH HtH#c H\$@Hl$HHt$PH0_H\$Ht$H|$AVH H3ADBPALAD$PIAF(HD$XA~ Av$IFHD$`IFHD$hMF0IFMHxH\$0Ht$8H|$@H A^ aH\$E3L EZ$A;Yu A;uAAA9@ tAAA9@$uEQ LIIuH\$IH\$Ht$WH HHJ0EHHAJSLHlH3HHt#9X uLD$@H=u T$@HO0HO09YvHH;4t ;Yr\SHHvHDH\$0Ht$8H __HH)PHHH3H$HD$ MLHT$@H0H$D$ P%'H$H38HĘH\$Hl$VWATAUAVH@HHILD$xEHAS=t6u(t =u3L\$@I[0Ik@IA^A]A\_^DD$xLv0HIP؅uˋLHH׋H8H0L$0DHHD$8P؅t T$xI~$tAtHFHtuH$AHHuZWHd$ LF@E3Am؅"T$xICQT$0HL$85Q@VWATAVAWH@HD$ H\$xMDH33ۋMITLcI3HH$HupDHHe]MIHIu$Au H0AulH8HHtWL$HT$(fsf~uH\H$ 3H$t$pH$Ht HH\$xH@A_A^A\_^HHXD@UVWATAUAVAWHP3E3EEHHHpLxAut)u^Eu-H 9wb/9v fEL$HEArHt9tGWHt tAHA[IA(WHA[MtHD$HLE@E3I֋HD$ ؅,E(L|$H (H$Eu_HEHtVuML;H#ItHoWK[H~#Iut HzE3HuHHtnLL$@EHtZHMHtDu;HD$@HHHD$0LADd$(Hd$ :؅uSH$AHArHt$@H$H;u%H ;Z6 Ht$@L M MtLHHAы؅H$ELHHD$(HD$ ؅X9u,HHHDYAHGLAu M8M ;L$DLD$HI΋Љ$q ؅HT$HLI3؅!D$(H$HL$HEMHHD$ ؅9$uH$ILEu E( $HHHDtX3Mt!$tMNjHqHtH7H$HPA_A^A]A\_^]HHXHh VWAVH@H```HH 'MAtBH#WWHL$0HH 'UHl$xH\$hH@A^_^ÍzvRus|Ӄ2uLL$pLD$`H؅t8HDƹAW뎋aXxDL$pA3Hc؅9u|$puH.؅u_Hl$`HEHtuHL$0IEHL$0E3AIC؅uHD$0E3DHHHD$ HHlLI[IkIs WAVAWH@ HHE3AMH9V\)9DMCIHI=/HEHtu IAL$`HE0HHHuBWHd$ LE@E3ADD$`HHu,HHHD[UAt|turH u H0uPH8HtDILD$`HT$0HHD$`H\$0H;_tHKHtHT$`LHE( $3H\$hHl$pHt$xH@A_A^_H\$LL$ DD$UVWHH@3HH $AHEHErH6XTWLM LEH؅tH;Dƹ"T`DM A3Hd؅EHEH@HtuHU8HMBHU8HME3A@؅ua8(tYHMLE HU=M uH(H ȋpHH ȋ;E0v3HULEDH؅upug w\HGHu H8H LM8BDE3;؅tLM8E3HHtHHMCH "KH\$hH@_^]HHXHhHpHx AVH 3HD9q8v*LI0AI H@;AD;E8rڋE8HH;wy ;rrA;rk39HHtYE8HOHOE8L4tLL$PE3HHAt-tDD$pd$ H 3E3HuD$`HH;HL$P3H\$XH0_^]H(A;wit^,tMt?bt1t!tuiHHHHHwHnHHeH@\tMt@t2t!ttWDH+H("HHHH0I3 H(H\$Hl$Ht$WH BHH(H(rs3HHtaHxH HHtHH [H\$WH A3I-thtIt$tH;KWlHHs-&HH;H0HHu.'H@sHH9D؋H\$0H _HHXHhHpWHPAHL@3IH=T$@tLD$@$tt0LL3uH|$0DHHˉt$(Hl$ TH\$`Hl$hHt$pHP_HHXHhHpWHPAHL@3IH襚T$@tLD$@$tt0LL3uH|$0DHHˉt$(Hl$ 褦H\$`Hl$hHt$pHP_HHXHhHpWH@IL@3IHT$0tLD$0$tt*LL3uLHH|$(l$ cH\$PHl$XHt$`H@_H\$Ht$WH0AHLD$X3H脙T$XtLD$X$tt+LL3uDHHˉ|$(Ht$ HL$P|$8HD$@H|$0HD$(HL$PE3E33H|$ |$@NtHL$PLD$PH辇H`H3L$pI[I{ I]́ |) ~ ~ ~ ?/w ËH\$WH Hd$0Hd$8LʋHT$8IIukHL$8HT$0HP8uWHtL$0tHL$8HHPHu8L$0V=s&tt= t؁NHL$8HtHRH\$@H _H\$Ht$WH 3HHHu@]HNHuW*HD$8Hu@HN3HHD؅u CH~3fHt HMHt$@H\$0H _H\$Ht$ WHPH^H3HD$H3HH9Y$u 9Y u39HILD$ 3LtHW HL$4L˅9K؋HL$HH3H\$pHt$xHP_LUVWHH`HEI[HHHe8HE8ICL =3DBH =*Q؅xjHM8H3()ENMHM8HLE0HU؅yG= uA H5DHl DHxHE83HM8HHM8HtHPH$H`_^]H\$Ht$UWATAVAWH$HHH3HHL$hE33HHL$p3L|$`L}HEL}HEEAjOEgAW\HiNHu HH+HA=vHLǹWdDIvfD}>HEHMH+IHtft fHI+uHuHfD9KH= fD|H}ILL$`EHȺ(NGuHL$`؅HT$`LMLEйHT$pHυEDE3E3=Nu Ht$xD|$PL|$HD|$@Dd$8HD$pD$0LMLEHL$hD|$(L|$ E0L}E@HEL}L}Ma="Dy XMAHL$`Ht!EtHLEE33EHL$`GHteH %`L3HI0QMHL$hHt8MHH3/L$I[8Is@IA_A^A\_]vLI[IkIs WATAUAVAWHpHH3HD$hDMCE33HAA>HEot AH|;F;s tt NuHWLƹ.AFEtMt @EIIHfD9$NuQ3HGHHuGu͍GDMIfF9$FuMHHXIHfD9$NuHE3Ld$0HOHEAHDOHDd$(D|$ EI;uE؃{uXHEEt HFHVFHL$hH3GL\$pI[8Ik@IsHIA_A^A]A\_H\$ UVWATAUAVAWHHHH3HEE33EDHXLmLmHELmHEEELmED8i@FLMS'DHrCuEHM ؅t1=I NË#HULMLEADDAHOHEAHD$8Ll$0E3ɋLl$(Ll$ B="uDHgHOuMHOE3HEHD$8Ll$0AQEALl$(Ll$ 4B؅t"ss%HO@HHL ̰EH#HEHT$0HUIELl$(HD$ H؅AHMHt EtHLEE33HMbCHMHtCHMH3H$HĀA_A^A]A\_^]û@USVATAUAVAWHl$HHŢH3HEE33LHEHEHHDEHHUL}L}L}L}L}L}L}D}D}AP8sxEwE}EECLMEHȺ(@HM؅t|=P NË*HBHP8EAH'HEEP8EBEWEWHULMLE<؅dH]DuHHP8rQAAAHEHD$83HD$0HD$( IME3DHD$ ?؅H]AHAHH#H MAL#HMHEHD$PHEL#‹UHD$H3HL$@HD$8HD$0HD$(HD$ HHP(=uDu3ۅt&;2lEt-HMLMLEHU>u y@ Et HMLMLEHUq>t΁HEIME3HD$0HEDHD$(Hd$ A4>؅9EtUEI؅u3HMHt9}t-HLEE33StH̶DC HM?HHMHMHtE@HMH37HA_A^A]A\^[]ûs@USVWATAVAWHH@E3HHMMLLeXLePAM AHHU@HPP؅uE@ہWu,HHUXH؅uIAHHuSHMPHUXHt HHPHMPHtHPHt H@HMGAH@A_A^A\_^[]HMXLEPHHP8HMPuYHtTHHUP@؅uHEHHfD9$XuH3H>IHRLEHHxA@:H\$Ht$UWATAVAWHHpHeHeHeLMHLHM3F HMP@HHU0HPP؅uE0ہWHHUH؅I[@HHu HUI؅HMLEHHP8u"HMEMHUH)EMPHKMuGHLEH/H؅u.HMEMLEHH)EMh؅u3HMHtHPHMHtHPHMHtHPHt H>HM?L\$pI[8Is@IA_A^A\_]HHXHpHxLp UHH0HeIDLEHIH}؅t =HM8tf;t WHHω]uPUgHHu EKHHDۉ]2eH|HC@MDʉM H?ELMLHeDE0AHPP؅t)=s$tt NË 3Ht H;Ht$HH|$PLt$XH\$@H0]H\$ UVWAVAWH`HH3HD$PL$L$Hd$ AHHMƹAHLL$ DƋHP؅t1=tt NttVt7t WHD$ L*8u L.R8uML8DHD$ L8t3L֫*HD$ L\HL$(DrLD$(LD$ L$IIHL$ Ht HHL$PH3H$H`A_A^_^]H\$Hl$Ht$WH HYHII3P0~t ~u AuH&HP0u ~tH DËHPXȅt)=s$tt N 3H\$0Hl$8Ht$@H _H\$UVWATAUAVAWHl$HH5H3HEHuLew3AELHMDHE]HEHEHEHtHIELEH؅LEHIH}׋؅HUH:؅ULEHEHD$(HT$ LMAIP؅=Stt NË5+LEHLeH}ׅxmHthHUH^:xWLM(EfEMtHUILMLeD!l$(LȮID$ Ut|t|DwHM9xXHM(EfEHt HUHUHM9؅utLeLEHGM $Iw؅uS]]LeLM\u+LEI ؅uEtHt HEHeHAHMHt6Ht H6H}t HM+9HMH3H$HĐA_A^A]A\_^]HHXHpL` PUAVAWHHPE3AEL}L}L}L}8LHu HHMPAHMHLEHI ؅tHMHUHP@؅\D9}HMLEAHP8؅4HMHUH؅LMuHUI3LMuI9LMԉEԃ}@XU(HMPHEƃu2P`؅t5=s0t"t= t NËPp̻3ۅHM3Ht 5H]HMHPHMH]u6AH]D;}E3A54=s#tt E3NËE3I6HMHt6HMHt p4L}HMHtHPHMHtHPL\$PI[ Is0Mc8IA_A^]ÁstthE3-t2D;tfE;9#D;u fE;9uL HSU(HMPEPP؅="tt  LI[EK ECIKUVWHHL3AH!MH!M!MHMHMHIKISHUPE3IH!uDDU8HUAHUEttHk_E0LVHHDI|HEHUHtdHOHt[GLHMPD$(LA҉D$ }t tu HO(HUDU8HHuHEL֞I|HtiHOHt`HEPDODHT$0HD$(GA҉D$ }t tu HO(HUDU8HHuHELc}@tI| H"2?H4HEHHMPLEHL A ؅HMHULAP@؅3҉U9UHMLEHP8؅HMHUHPPuJ}uDHEDM8DGHUHM HD$0EHD$(E@D$ }t t uu]HMHPUHe‰U;UlHMv23HMHMHPHeHHH3HEHt H12HMHtHPHMHtHPLMMt(}0u}Ht[AIɋHPH$HĀ_^]H\$VH H HT$03HHt$0P8؅uHT$0H +ہWH9t$0t HL$0n1DދH\$8H ^LI[IkIs WH@IIcHISIAh؅u HL$PO؅uGHD$PHWDHD$0!\$(E3HD$ ؅uuE3H؅u3HL$PHtHPHOAHPHl$`Ht$hH\$XH@_@UVWATAUAVAWHPHl$ HHH3H E3LAL}EHHHL:HHfD9HUI؅u+LEHULMH #n؅u HEIH}HHMHtHPHt HHPH}t HM<Ht$hH|$pH\$`H@A_A^]HHXHhHp WAVAWH0Lt$p33I!MHXHxMtOtJLHHu{MtotjH\$`LL$ HHMuAHD$ I3Ht HHPHt HHPH\$PHl$XHt$hH0A_A^_H|$ HD$`H\$`H\$T$UVWATAUAVAWHHpHuhE3E3L!ePL!eL!eL!eL!eIILE؋LLuD9epu LEPLM`UpHMHL$ LHLu؅EpH MLDAF(EuMIHUXIH]hE3؅u HMX؅E3AI؅HHP@HHH;uHAH;HcHPHHHEHOP@HU@H'E3؅uLHU@HO,HL yHfD9JuKHfD9BuHXH3Hu HHu[XE3L9}@t HM@Ht HQ Ht HHPHMXHtHPH$HPA_A^A]A\_^]HE@L oxLO HD$(HHHHD$ @DHLƹLEHI=H}E3؅EHLEX3HP8؅,DmPHEXHUEHD$0EID$(D|$ ؅E3A3MuAAWÃu EuAA3HuBWH\$Ht$WH@3HHHuZW[yuN!YH!\$0HI!\$(E3ɺ@EAD$  Hu  HG uOHt$XH\$PH@_̃9sH}H H3A8uAtutt t u3øH\$Hl$Ht$WH HHHAAHP0E3AHDEu tA ;wAu8GHtAA ;tu |$PtA@HHPX؅tH?D NHl$8Ht$@H\$0H _H\$LD$UVWATAUAVAWHl$HAME3IELADEgEDE]IHfD9AuE3HP`3HHuL}_XE33HDB`NHO`LIG0EgHO@-L7L5 H_L+ 3E3HHt2ILHH@HD@HHL@rLDL}_E3HtHOHt LgD9egtH^ D9et HM臵t!H}HtHHtHoL'H_AIPH$HĠA_A^A]A\_^]HB0HEgDuoL9G3HMDB8HO@3H9dHUSHuϋUEHbHGHu;{ȋQHZDLƹ HD$ 13H<؅tH_LDȹ HO3ޘtʘHsHO؅t HHOAE33tHL}_HOIT3؅tLEHDȹ iHOHWX%RHOHEHD$0t$(HuHt$ HuL hFHE3TE3 u EuXu EuAHMHt jE3|EtdIHfD9FuHvQHPAH E3u4HNAft%f,tHHfuH)v L9G8u]IHfD9^uH3H,HG8Hu LHH>E3XMH L}_H]HLHOLELE0L3t#ƖHo D|HEIfB94`uHIK $HHJLEIH>uE3tuHHEDd$0EL$E3HD$(LeHD$ 'U؅tHD AHMHtuGH DgHEuuAt1EIHv ؅HD Lu_A t7ClEED8gXu*H D2L}_"EDeHРLMAgAIPP؅uD@hHLMAIPP؅uDHEIHD$ L}_؅t HEwDegH8AWL}_E3HHHD$xHD$0HD$pHD$(DL$ EL32HHLH3XH\$Ht$WH 3IMt/Ht*u EuHyX8u HIH(N AWHt$8H\$0H _H\$Ht$WH@A IHHLD$PXu29D$Pt,Hd$0LHK@Hd$(!D$ DHOuH\$XHt$`H@_H\$Ht$UWATAUAWHHHe0H3HEH!]HLP0H!\$(!\$ LEHE3IHD3\BtDHv Hh]AH!\$P!\$H!\$@ ktH!\$8L gtHFEHD$0HʐBHUHHN!\$(HD$ HHu/LE0A׋؅t HMtUPLEIVH}WtDHjHNHE@LHD$0Dd$(Ld$ LeAIt eHU@HNHEHM@Ht юHe@Mt IHtHH3tDH9DeLEE3IHH|$(|$ =H}؅tHdD }Xt;HNLFE3H tHLn|HIP8u3AHpLH @EMƉD$8EPD$0HDHD$(HDHVHHD$ $؅tHLDȹ ;E39]u1t-EtLIA?SEtLEXHֹPHt HH$HpA_A^A]A\_^]HT$USVWATAVAWHH`HH3H!]X3HEH}@P0HMHDHɗP8=HUHH!\$(!\$ LE@E3HP;؅tHSD H}@HMXHFHNVHL$P!|$HH!|$@H!|$8HNHD$0JB!|$(H}@L :HE3HD$ :t#H D\HUXHNHHtlHHMHRHd$@Dd$8HUK LMHH HVLHL$0HD$(HD|$ ؅tHDLǹ 3HxHMHAPHt HHMXHtlH`A_A^A\_^[]HHXHhHpWATAUAVAWH0L3HH!h HIMHP0L$!.A!,$IML*uIqHHHtL CAH͋H$zE3H=qLSTAs)tu?u IB/u?t^HGH[AFI H@HMHMHD$@HD$0HEDKHD$(DCD$ tHL$@HtD99v HA8HAD98tJYHL$pHD$@HD$0AHEHD$(EA D$ L|$@ @HL$@HJD99HA8!8uuHHLE3HL$@IHL$@HMHD$@DKHD$0HEDC HD$(3D$ }HMHL$@HD99HAD98HHHHfD9"L}Dm\$H|$`E3HL$@Ht cLt$@u HMHu HL$p9H\$xMIHEt8bLMLt$ /bt*9bHdMǹ Dȉ|$ D9t$dEt;HM]؅t HdLT$P(EfEMtHUI}LT$PHt$X0D9t$h HT$xMMHΉ|$ AMt HM$HMHtbHH3asHĸA_A^A]A\_^[]HLL E3HEHLIHEH;LHHEHELuHD$0HEDt$(HD$ Sat`HcHUH aHuXW8Ht$X0LD$PHLHӉ|$ ؅t HcLT$PUL?CH `CIDHCDHL$8IDH zCHL$0HD$(MHID$  ؅HIaH\$Hl$Ht$ WH0HH3HHD$PHuXH H`HF"؅HH bSHH3HHQHHHHH HuYULN HLǃ HH3_t'E_HbLƹ Dȉ|$ 3HL$P^"Hl$HHt$XH\$@H0_HHXHhHp HPWH HHH]!3؅udHH bHHHHf9,^uH3HHHQHHHHH HuYHL$8!LHH݉(Hl$@Ht$HH\$0H _HHXDH L@HPUVWATAUAVAWHH3LHHEDHEȋHziELP0EPHeiIP8MpЉE3wneH,iIP@HUH؅THEHHHf94XuH3HcHHuXL]HHLEHHL/HH HhLMAAIP؅tDH`HE3Hf9xuH3H?LHuXLsPHHdLEHIH\$0E3MHIH\$(D$ }\t&\HZ`LDȹ 4MpU3LehL}`DHcH=CHE؃?}Pu ?W?u HEXOL$(HMHLM)EMMI׉D$ 3ҋ؅ujMpt A$I9t@A$Iу?I uEPLhIHGHAMpBA$HEAHAsU0DH{_ %3Ht H=3H9ut HMMt IHMHtH$HĀA_A^A]A\_^]@USVWAVAWHl$HH'H3HEAAE3IMHL}fHfDUwLMP؅tH2_D IOt|tVt6t WHE DAuDJ6AADD'HEH=?XH _D98HD2HE DL>HMKH}H}fD9?uD9}upAH L99u[؅uWfD9?tNHHfD9<_uH3HAHHJHAH HAHHuYLHAHMHt[HMH3MkHĨA_A^_^[]A(AIMLE)EM*؅tLVHj]Dȹ ёHHXLH L@HPUVWATAUAVAWHHPHeHeeeHeHeA8E2AxIHAu\t t`t A_V HcLMLEP ؅t HL]0}EEGHcLMLE؋HP ؅t Hj]LUDȹ ڐHMDELeE3AE3EEWtIDHDtEEHM+uEt HUMHDtEEHM+uHEXEUԍrD3EM$E$IL$EHU\HMHL4I>u?A$AGAUEI؅kIHEPH@HAA $IуIHMAH|؅1HMMHeUDSA;sLeI HT\;}D+HEL$E$IL$DEHU؅HMHN4I>u?A$AGAUEI؅IHEPH@HAA $IуIHME3H؅uSHMrHeDSA;}s!MЋUBH[D 覎HUHHEXNH<D3ۉH}t HMHMHtH$HPA_A^A]A\_^]H\$Hl$Ht$WAVAWH 3HHEHH9tH9uHHf9QuAɍADHH;vj3HHH HH HuYEHULhUELEI}HLH IHLH IHl$HHt$PH\$@H A_A^_HDH L@HPHHUSVWHhHH_HHHP8L_H΋AR0E3DE%LMLMELMLMAADMALMtGWHȉEˉUD9MgttEuH 7HMH 6HML9MouLMIHLt$(D$ ؅DHW Jst4LMIH؅tULLHWDȹ ;HHfD9,_uH3HIHuXLHHAL\$@I[0Ik8Is@IA_A^A]A\_HHXLH L@HHUVWATAUAVAWHHPH,ZLLP0HUI΋3HEHEDHEDE3؅tHwVD 6H}xHu H}0HIHHHYPHLMXLEPH3HUH\$(D$ E3؅t+MH(VDM 贆H}LmLmHLIfG9D}uH}HHfD9OuHUXHfD9BuHEIL3K6H{I$HdLIHEtI $MI8Ht HFH333HHuXdM$IHHM@HXPHLHHyXHR0HUIK؅3Hu'K63HHM$IHSHuHHf9FuI $ILHtK63I$iI$HtVLIHI $LI/Ht H=HH]Ht H(HIHu?*H|TDù ˄HuLEXI $IHt HӹHt HŹMt IH$HPA_A^A]A\_^]H\$Hl$VWAVH HVLHP03Hl$Xl$PHVLL$XDE3HP؅ HD$XHHf9,Xu]3ɋЉD$PHHHtUHT$XLD$PLȋ؅tLD$XHSDȹ 蟃\$P3HHIHu{LL>HH=ILHgILiEHUEHUHHHHf9,XuH3H8IHtLHHHUHL$XHUHHl$HH\$@H A^_^H\$UVWH@HH3HD$83HHHl$ Hu2HL$(؅HT$ HL$(؅utHD$ HHT$ HHf9,XuH3H\HHuX6L=HHLD$ HHHLDHHuH9l$ t HL$ zHL$8H3ZH\$pH@_^]H\$Hl$Ht$ WATAUAVAWH0HETE3IMLHLd$(EAP0MLd$ LDHD$pHHfE9dmuM}IE3HHuGWML$LM+IED$E;D$r DD$ AL$ …H\$ $HH\$ t(D+D;r DD$ AL$ …H\$ H3HIHuLH/SHHE3HD$(HfD9 XuL$AD$DD;=L;HHM$IH7D$pttII+MHHL^LD$(IHtIMH3H\$`Hl$hHt$xH0A_A^A]A\_H(,u3HHt#HH@f8\tHtHHH(HH H%HHXHhHpHx AVH 3MHHt.Mt)t#H9tHIht H;s߳Hl$8Ht$@H|$HH\$0H A^LI[UVWATAUAVAWHH`E3HNLHEHNHLm@LmPEHEALmHHHE@L E3ICEk3MkEtEHU@HEHpLzNHH~EHHQHHHfD9,xuH 3H?LH$L8HHL3HIL?HILHIHEPL &HD$0HEE3IHDl$(HD$ DtDHUPHDLHLQMHHDHHt&HDL0HϋHA_DE8/uAL#MIHODHHt&HVDLO0HˋyHADAWHt HDHM@HtjDHMPHt[DMt IH$H`A_A^A]A\_^]LI[IkIs WAVAWHPHL33I![ICHzLICLHHHICL IC!\$(I![E33rCtCHT$pH1CLHL^LHH CHHu HCL`LHϋ*HABA8u]3Lt$@MIHBHHtHDHe؅uHBIr3WHt HhBHL$pHtBL\$PI[(Ik0Is8IA_A^_LI[IkIsWH`3HKAICH9-L :ICIC E3ICȉl$(HIkIk D$@D$DAt AYH$HAHt0LDHHHAHHtHܲw;D@MHt HcAH$HtAL\$`I[IkIs I_@USVWATAVAWHl$HH H3HELeo3LH!}3E3H!uH!u9uH JHJIHMHMH}HMHMH]HMOEDEE9uwtAHuJH!t$(DL$ LEE3I؅tHJD yH}H}H:JHHML E3HL$P!t$HH!t$@H!t$8HMHHL$0!t$(HMHL$ INE0D}p@t#?H}JLDȹ xaHUIN?HtIINLHf?HHt1H3yI$HuXHHDHRc3 Ht HJHt H?HMHt?HMH3QHA_A^A\_^[]@USVWAVHl$HH H3HE/3HIHHEHE'AHEHEIHEHELHEHEEEH]E'0HEDE+H]H]LMݩHNEHwHHEHELMLEIEHEH\$ 6>tEH]<>HNLE3>HMHIHL$(DMƹ |$ vHM/H3OHA^_^[]H\$Hl$Ht$WH HڋыH33HHuxtHH<HIHuH\$0Hl$8Ht$@H _H\$Hl$Ht$WH H3W3>HHt#3ɋH&HHHHHH9xu0HHt=HHHtH Ht&H#t3H HQH!<H@HuH\$0Hl$8Ht$@H _H\$Hl$Ht$WH H33HH903HH 8HAHtRH8t63HH 8HAH HtYHH 8HAHH<uHH 8HIHt)HH HtH3H$HHH94mH HtH#Hl$8Ht$@H\$0H _LI[IsI{ UATAUAVAWIkHE3LzH'HEE(HrH&HHR8HEHEoMICEkMkMkHEDL|$0L P+E3HDl$(ALmoLm'HD$ ; unHMoHt ;LmoHW8H&L +HEHEoE3HD$PDl$HLl$@Ll$8HEL|$0HDl$(LmHD$ V; uXNt :>HUoH:Ht'LGIHHWAH9GPAEt HGP HMoHt:L$I[0Is@I{HIA_A^A]A\]HHXHhHpHx AVH IL%HL33:HHtH*HH:L7%HI:HtH9H\$0Hl$8Ht$@HH|$HH A^HHXHpWAVAWH@H`H`HDDHIHd$(d$ LD$0HE3Hv؅HT$8HWH|$8؅PH؅HH Y$LwHHHSIy؅IH )$SHHI3!IHQHIHHH HuYXLC:HT$0HNHd$ LNLb8t n8FIEtLD$xHֹHt HL$8H|$0t HL$0%Ht$hH\$`H@A_A^_H\$Hl$Ht$ WAVAWH E3IHMu A@WHPCM8P0AA;tt A@1HCHCHCLL$PHL|$PPuYHD$PHHHfD9HCHu*D9t!A0H8c2(MEDwEu $ e( XH ADDAu H5"D$u HCHaabEu DuED$@AHMAHOEDLmMHCHuD9t A.HHM|NHiHMlNHUHM'Rt+HUHMRtH57MŹaLHMIQ3ɃMPH3HAu(EAEDB)u@HHEubDu]HH9tPI}tIMt>HHsED$HAEAu3Eh@MPD8Eu+D $D (H guDH˷EAu H"$u HAH`Eu DuDAHMAHL~LmEMt9D}D!ePIIt3ALEwtEPEPI;r 3EuRDuMMtHHCHuD9t A-IHuH4N_LHMIOE3AEHHA7(EA)u~IEuRDusI?tGHt=I t/HHFAA7EH!&Du!EuEt$ (AHMOH$(t$PH`A_A^A]A\_^]AIu +DHZ83HHXHhHpWHPAHL@3IHT$@AtLD$@$tA;t,L@L3uH|$0Hˉt$(Hl$ H\$`Hl$hHt$pHP_HHXHhHpWHPAHL@3IHaT$@AtLD$@$tA;t,L@L3uH|$0Hˉt$(Hl$ ^H\$`Hl$hHt$pHP_HHXHhHpWH@IL@3IHT$0tLD$0$tt*L@L3uLHH|$(l$ H\$PHl$XHt$`H@_H\$Ht$WH0AHLD$X3HHH9wuaH9xu[HHpHOtHHGH9yu9H98u4HHAHxH96uHl$pHt$xH\$hH0A_A^A]A\_I)I)@UATAUAVAWHpHl$0HxHHH>H3H0L3LHUDL=VIHHf9YuDIHEL{3DB:utHEfE9Dt Is븋H HHDHAI({LHu M+IAw8HH;v t_H;C wTH b HHH;rBt9FHH;w HH-H+H|$0Ht StckHu-F;r HH7HeapHH<HAHOnHHLHGHIHGHHGHHG HHG(HHG0HHG8HHG@HHGHHHGPHHGXHHG`Gh\fGl,HE3LǹfD|_n@HEAE3HHHD$ r؅tHAODL@VHMHELMHD$(HE HE3E HD$ os؅t2L HLǹD$ .@HM uLHu!tLE HANDȋ?yHHtHu-ItL LE H؉D$ ?:E3HUH WЋ؅u$HE8sMIAMHtHO9HeapudHMHt5qMt IsH0H3VHxHHH@A_A^A]A\]H\$Hl$VWAVH0Hd$P=mH@uH jx@2LIGyHLHL$PHHL$(HDGDHHD$ ARuHT$PHt H*=uH Ow@u!$ $HA3Dt 0@uH wIkxH\$XHl$`H0A^_^HHXHhHp WH 3AH!pVu؅H *wHH xHHLD$8VPH b vD$8uu3HD$8ut#AHuHwHl$@Ht$HH\$0H _H\$Hl$Ht$WH $HHt3Av9u H #vHHw8t!=H ^ uHHAHPX=uH % uu_fǃ8tuEHCHHP HPH˃"LXMtA@HXA AHuDHvH\$0Hl$8Ht$@H _H\$Hl$Ht$WH0HH ^ A@3tHHuH 5 tHt @tE39$u @uHHDAHӉt$ P(t$up gAw1@uu $uu$t HHHt HO@H?Hu!$HHtH\$@Ht$PHl$HH0_H\$WH HH{Ht HK@HHu狇$Hω$$t 3H\$8H _H\$Hl$WH HH 9sHHt H3H׃(DE HHP0H M rDݍUHυAut!LHMMDD8HHpsHl$8H\$0H _H\$Ht$WH HH ARrtHo8W\LD$@3H苴؅uGDL$@A3H軶؅u/H@t7D3؅u3HtH&H 3qHt$8H\$0H _HHXHhHpHx AVHP$MIHt r WH YqHL$@H@$HHtG9t HHuHt.H$LL$@HD$0DHΉ\$(Lt$ DWHKD/7H 4pH\$`Hl$hHt$pH|$xHPA^H\$Hl$Ht$ WH0IA؋Ht^LL$HLD$ uHHD6W0H =pLDËHQH pH\$@Hl$PHt$XH0_H\$WH AHt tH_6WH oÃA3҉AutxxAut44r||u$$Aut H ^n3H\$0H _H\$WH t u[tVHHH7u (u  ut HHH;uHHuH\$0H _H\$Ht$WH HH A&nu u SH/ (tH=H JH\$0Ht$8H _H%mH\$Hl$Ht$ WH0IA؋HtbLL$HLD$ 1uHBHD3W4H amLDH΋H 6mH\$@Hl$PHt$XH0_HHXHpHxAVH0IMLHL@tHDù03HL$(AHAHA@H3H\$@Ht$HH|$PH0A^̋̋$HH\$WH 3H\$0\$8HtzHHT$8HHPH8\$8tQHHT$0HHPP\$0u28t*ÉutH\$@H _HAHHAH̋2tu8HAHH\$Hl$ VWAVH@MAHt t"Au[t tIH kkLL$hLD$`HtBHBDŹ)1DHD$ 1WmIjuH#0W9ILt$0jHT$`DˉD$8HD$0DHD$<HD$ H 4jH\$pHl$xH@A^_^H\$Hl$VWAVH@MA؋HtkLL$hLD$0tHDù0H+Ht$@Ht StckHu*C;rvHHHeapHHtxAHTtFHoDDGDl$0HDl$(HD$ ;UtHMxE3LAUu':W1EE3El$LEHMx3ADeTudV؃zu>U3AWH}PHHuX'LEHMxHTu#VH}PtHHt MWL'D9eE̸D;uD)HHMLAt8LL$xDD$8LD$pHL$0HIHD$(H$IHD$ ZHHHHLI[IsWH0I!Ic IHIIKHE3A DE333E3EtAt Au HHLt|t^tLt"HtLHtqLhMtMHtL@HtKLBHt=L4HtLHt#L@HtL` MtM@LL$XHT$ E3IfHL$ RHL$XHH\$@Ht$HH0_DE3EtdAtAurA+tftXudL[t4t'tt uFL=L@4L+L"L`tuLL@IH\$WH Hd$@HH XXLL$0LD$@HLD$@Mt HhH !XH\$83H _HHXLH L@HHUVWH0E3IDT$ HHu.H|$Pt HGHHHtH|$hHuH$_W{LHuHSDƹWULu"xH 9ЉD$ WHT$`LAHC|$ t H Wt7H?u1t-HD$PH@HHtLD$`Lϋ؋H\$XH0_^]̋$H(HH;u HH;Bt('H(@SH HH HtmRHKH#HtZRHKHcHtFRHK(HcHt2RHc(H [H\$Hl$Ht$ WATAUAVAWH`3IIH$LDH8M/M1M#HDGHI;Uu7DG8HL$ 3%H9>HT$ HLt$0DHHfA9HcHAԃtuk{ALD$X;~.,t&IHcIHAԃuA>߃t_2AH\$PHl$`Ht$hH A_A^A]A\_H\$Hl$Ht$WH D;AA AGyHH9AP3HBHHuFHHt5DC HIH HtzBL HLù7 HLLùH3 C3H DB C C;tL +DGII I?EHH,C3H\$0Hl$8Ht$@H _@SH HDҋCAJ;tL A+D@IK IDKHKH$H [H\$Ht$WH H39qEQ3hAHHt9wuf0DGHHHt$8HH\$0H _@SH ٺ3AHtH [̅t%=uy ɅuOH\$Ht$WH I IH @f9u HIHuHf;f A fAuDH= WA@fAt HAHHYHt_HAH;tAHDHT$0Axf|$0 uH3(DL$0HD yЃWH\$8Ht$@H _HHXHPWH 3L@HSX3tH]LD$@HD$@tgH-H9\$8t5LD$8;Ht8HID H\$0H _H\$WH 3LD$8HS \$8ctHH C9\$8u=LD$8HD$89tHN DS H\$0H _HT$USVWATAUAVAWHl$HE3f9 LL*t WHILmwLEwHHAAED}gu'D`HMwLMgAHPh؅uDEgLeox4 LEDQ}?HHu9H?HMwAIHtHPHĈA_A^A]A\_^[]DmoD}gLmLmLmEHMwEAHLMgAPh؅HM?HMwLl$@HLl$8HUHT$0HULHHT$(UgAfD|$ P0؅x5LEHUoH>Eo؅xHM>AD;sD}g[HM>I4$@SH HH @4H @H [LI[IsWH@HiH3HD$8HIK3Is>؅u6HT$ HL$(x>؅u HT$ IIfB94BuE3HH9t$ t HL$ P>HL$8H3H\$XHt$`H@_H\$Hl$Ht$WATAUAVAWH HHH HE3HHfD9$AuA/tLHfE9,Hu fE$Hu3HE;LHuHW;AeLHHtAI>HH(HHAHHi>uI*fD9'tfD9+tHfD9#ufD9+ufD#HfD9+tHL5fD9#t?f9tHL2>HtfD Hu2L&FtH^IH HHuGAHuHHtAH:=HtHHfD =FHfD9$hutHEfD9,Bu fD$BuW:AI9Hl$XHt$`H\$PH A_A^A]A\_@SH $H‹tCHuHX0HT$@H;uLD$@Hx1HL$@;H [H\$WH@Hd$`HHtxHHuE3(x tHHT$`6LLED$`LDH|$0LD$(HLÉD$ HL$`Ht8H\$PH@_H\$Ht$UWAUAVAWH$`HHH3H3IL9=ϳw 8L9-ųAuH >LA@94fIHL$H<8L$RT$PDD$ND$TDL$JD$8L$0T$(DD$ HL$`LD,fH5A֋LD$`+HexHL$`IH<u ;utqtatPtL L L L L L @tot^tMt<t+tt L FL e=L @4L +L "L UL 0L L 6L[HL$`,eH5MHD+LD$`A=dxHL$`IH<uH5AH 7LAM+dHy=zuAƂ H IH<ut0G< u'Os  %H I;td$@Hd$ LL$@D5HH3PL$I[0Is@IA_A^A]_]HT$LD$LL$ SWHHH-H3H$0 teH S:L$hL$pHL$ 8x HH;wuƄ$$6t HT$ H )9H$0H3HH_[LD$LL$ SVWAVHX H 9H=1L$AL$HA7x!HI;wuƇt&HtƇtH=HHd$0DD3ҹ\$(HD$ 2d$@u H fLH'b ;G…xTHd$8Hd$0L(+ً3H#\$(HD˹HD$ 3~HHÀ<uL0}uAjDkDbHH @Hd$ LL$@2H 88HXA^_^[H\$WH H$tHHH\$0H _@SH HHHHHtHH [VH\$Ht$H|$AVH HLHH&A&H0HHt%H`H` @LpHp(HH3HtiHRHtFH`HhHHhHtHAH`HhpHXHH3H\$0Ht$8H|$@H A^H\$WH ZHHOGHHH@HH3Hu@LyHHzjH\$0H _H\$WH H$tHHH\$0H _H\$Hl$Ht$WH HH3HHIHtH)HiHoHwHtEHMH$HFH9ntHFHHXH^HuHHn n(rHoH_HHK Ht SHk HKHt AHkHKHt /HkHK(Ht Hk(HkHt0HGH+HK8HtHHoHG0HtH(Ho0HO HO(Ho HO8Ho(Ht 38,Ho8H\$0Hl$8Ht$@H _H\$Hl$Ht$WATAUAVAWH0E3I؋HMuAXWHI@}IIHfE94@upAL-MAHII@HdHG HuHAHz%LHHhHO /1HHfD0IIHfD94CupIHII@HHG(HtLËHgIչ@HtHW(HDIHGHuXHyHW HEdt*W HCDD@\>Iչ0ZHHt$HGLqHHTLqLq Dq(HAIHOHuYH^LG Igd؅tu HtuuDH@IՋHHt L0LpLpIHWHuZkHOHGHBHJHW(t H HO_؅u:HO8DE33D$ @m)u+HDWHl$hHt$pH\$`H0A_A^A]A\_H\$WH0HI3Ht[HIDKLD$@H\$ -{DD;w 9|$@ËHP@HoDǹ@H\$HH0_H\$Hl$Ht$WATAUAVAWH L%E3LHAEAHHHfD9,BuHHIHuYWU^؅uDx HMH0^؅HMD@hIj^؅xEuHMI]؅]HMI]؅GE_HSHHttLhLhLhLh Lh(L8L@DHH]H0HXL`LhDpHDDLHIHu {HtHE0HHHQHPAA;HHOA*HODuA;t HLHH2 HHH(31HPHD$8HtHHu+H3HHHD$8HtHHHEH3HN|HHD$8Ht)LHHa HHH3xH1HHD$8HtXLHH HHHǃ:ǃȯǃx 3Ht6L$D$(Ht$ DEIHAR8tHH3HH\$`Hl$hHt$pH@A_A^_H\$Hl$Ht$WATAUAVAWH E3IcEHA3wHE|$HrED9OPt HHO`P0GLHG`<OH0D9gPt*HźHO`PHHHHR0GL<GHA@uHO4=tYLp>uHD$pHt@GD6W+D9wPuHO`<GDG4Ev>"t9HIHt L L`D`IHG Hu DwPL5ްHIֹ0L#Ht*HL`@HHH L` HHX(IHHtEw DNEOPDt#tt ttuG(@ Dg(G(D9g(t3HcO(HHIH@H8HGH fD IֹHGHfD Dt$xƇD9gPt!H˸HO`LOAAPum"tyPtAHHO`LOAAPuALGHHfE9$HuHG HLHHH^HO`LOAAPt&LEA tLPAH\$PHl$XHt$`H A_A^A]A\_̸ ;w?t5t,t#tt uLHA4HADHA HHAHAHÁt7t*ttt3HAxHA|HAXHATHttt3AA AAAHHXHhHpHx ATAVAWH 3IHDsMu AYW-IAD;QAA7AAAt8AYHAL$(追HHHXDpHGLHc0葽HHlHXDpHG4HAHbHY(HY HHt'uALyhH 0I6HHHXDpHGDHAHAIDHA(HHY HH8HHHG HYDqHAHQ8tHAHHf9huAH]0苼HHtjHG>8tHAHHf9huAi(H0KHHt*HGHYDqHAHY(HcHHHHA HHLyHA9u 9YLuADAH0HHHXDpLxHX HX(HA jAAAAtLAt 2uH.0\HH7HXDpHGxHAHH0#HHHXDpHG|Hʪ0HHHX@HGXHAHN_H0輺HHHX@HGTHAHY(HU8胺HH^HXDpHHAHA0HmL HA(HLa 0H05Ht+H HHXDpHX(H@ HHHHHH9ADHl$HHt$PH|$XH\$@H A_A^A\H\$Hl$Ht$WATAUAVAWH@3EHHHuZWH@L-03MPE>uAt4PuAt(HH.AHPEALHSP؅u1IHcHrODHT$0<HG4D$0mGHcATBu H5VuH5zHHPELLƋӹ@HD$ ptH}@L\$@I[0Ik8Is@IA_A^A]A\_H\$Ht$WH HFHAH3P0uu?H%HPH9uu 9tHDËHPXHt$8H\$0H _H\$WH IHHHH\$0H3HHfHHHHHH _H\$WH H$tHHH\$0H _@SH HHHHͯHHtt:H覯HH [ ̋-t`tS-tFt9t,ttH:H1H(HHHAPHH̋-tLtBt8t.t$tttE32A(A"A AAA AAAAHHXHhHpWAVAWH@D$H$ADpHhHuE3u 4u?Hu1uWLֹ@dH\$`Hl$hHt$pH@A_A^_ED8"HKHO`LL$0AAL|$0DPuHL$0HtVPu D?HHO`LL$0AAPDuHL$0HtHl)tF tHt t9t;u#ftttt fDθH\$WH HH3HtH;HHtn@8tKLMt?MHHHHIHHtC 5UJHHuLǃǃUHHt5Hb脳ϿHHDϋH\$0H _H\$Hl$Ht$WAVAWH E3IHAMu AiWAM1A--;t_t %H8ʲHHL LpHHHH0@LLx L9HH(D8tHHHfD94XuH'0UHHLp@HHH Lp(HHcHHH `Hڡ8LHt8HHcL HHHH0Lp@LHP HHH(MLD8tHHHfD94XuHW0腱HH+H10_HH@LpHHH nH0&HteHNPHܠ0 HtIHH0Ht*H@LpHHH ULp Lp(HIHL97u2AEH\$@Ht$PHl$HH A_A^_H\$Hl$Ht$WATAUAVAWH0ELHL-E3I~Pu?t'HHHPDALISPuAHIcHr4HIcHATPH LuD չ@HD$ xH\$`Ht$pHl$hH0A_A^A]A\_H\$WH H$tHHH\$0H _@SH HHHHt Ht Z ˧HK§HcHH [HWAVAWH0H@HXHhHpIALE3AMu AYWM9AdAhAiD8tHHHfD9L9>u 2E؋H\$PHl$XHt$`H0A_A^_̋ƒdtEt8t+ttH+H"H HHH̋ƒdt,t"ttA A A A AAA@USVWATAVAWHH`H/gH3HEHE`D}hED|$(HHHD$ HOH[QH~蠬E3HGHtLúHXAAFD8u8HH'NfKHHupfD A"HHO`LAiAPLeEdEeEfEgEhALuHEHO`LMAPuit'IHIPDALISPuHHcHs0IHcIATPELLZչ@HD$ aH\$`Ht$pHl$hH0A_A^A]A\_H\$WH H$tHHH\$0H _@SH HHHHt Ht F跢HH [HHXHhHpHx AVH E3IHAMu AYWAM1- t}t cD8tHHHfD94xu2HZ0舩HtpHLp@HHH Lp(HHcHHH CH0BHt*HLp@HHH Lp HLp(IHL96u 2EHl$8Ht$@H|$HH\$0H A^̋- tHH̋- tA AAAHHXHhHpHx AVH0l$hAHىhHD$`HD$ 3E3D8u3HɠHANdHHux5fD0/"t*H֠HK`LA!PuDH\$@Hl$HHt$PH|$XH0A^H\$Hl$Ht$WATAUAVAWH0ALL L- 3MIAHCIPELISPuIHcHrAIHcIA\PELH !LLD@HD$ H\$`Hl$hHt$pH0A_A^A]A\_H\$WH H$tHOHH\$0H _H\$WH H(HHHHtHHtH'HgHH(HcHH\$0H _H\$Hl$Ht$WH 3IHMu}WAI))-W-tBt s<H0迥HHHHH 0H`8莥HHHHhHHHH0H @HH(HHP H 0;HHHHH lHߔ0 HtnHMH0HtLH+H8ɤHt*H(HHH Hh(Hh @HhHHHH9+u 2EH\$0Hl$8Ht$@H _̋tL-Wtu 2EH\$PHl$XHt$`H0A_A^_̋-t]tPtUtP- t@ t2ttHHXHH(HH`HHH̋- tAt8t/t$tttE3%AAAA AAAAH\$Ht$WH0D$hAHD$(HD$`HD$ <t^"փt<t.t tt)tt u-HXH(HH؅u3"t.UJ@HHuH5@XHt$HH\$@H0_̋P9Tu09u"9u9u3@SH HH(HPHXHPHHPHHP3H [H\$WH HH?3H^H HHHLJ,HHHHHHH\$0HLJ/HHHaH0H8H@ HHH _H\$WH H$tHHH\$0H _H\$WH H\HHH@tHtBHHHt#0Ht蜏HHHt苏H0HtHHtH'HgH`HHHu 2EH\$PHl$XHt$`H0A_A^_̸0;wCt8-,t&tt tH@jH0H^H UHHL1t=vā v'tuHHHH`HAxH̋--tTtJt?t5-tDt$tttE31A'A!AAA A A AAAHHXHhHpWAVAWH@$AHhH$HD$ >؃" L5`I苑E3Ht L8LxDxIH0HuXD8bHHO`LL$0A1L|$0P؅HL$0H(HىHO`L8A-ML|$0M>P؅EIH9HHfD9P؅M9>HFHO`LHMA0M>P؅M9> tEt tsAAALD8tHHtHHfD9u 2EH\$PHl$XHt$`H0A_A^_̸;tv;tevO;t;v%tHHHHHHHHÁrV vI t3 t"tu.H`H HHHH`HAx\̋-tstht]tStI-qt^t9t.t$tttE3CA9A3A1A'A!AA A A A AAALI[IkIsI{ ATAVAWH@H$D$AE{ICHt"tt:t-tHH؅mH`H ĸ؅LHչ+HHu H THչfD HHu HJ.fD L9u0UJHHuHb@详Hl$hHt$pH|$xH\$`H@A_A^A\̋9u09u"H9Lu9u3@SH HH`HPHHPH HPHHP3H [H\$Hl$Ht$WATAUAVAWH0ELL L-E3IAu?u'IHzxIPDALISPuHHcHrAIHcIA\PELH LLD@HD$ H\$`Hl$hHt$pH0A_A^A]A\_HHXHhHp HPWATAUAVAWH0AEL^(ttxWL5hU L5fU3tdMI$AHnwIPEHL$hLASPu I;r*I$AIPE L׹@HD$ H\$`Hl$pHt$xH0A_A^A]A\_HAHQHwH;uHHfH@W]LDˋӹHt$8H\$0H _Hu HʼnHHu HHDHP؅uHHH\$Hl$Ht$WH HHdAI踐HuCHx@W蝐LBDˋӹCHl$8Ht$@H\$0H _Hu HHHu H3HDDHP ؅uHH)H\$Hl$Ht$WATAUAVAWHPHbLHAAHP03DHT$@DH9$uZW@H轏DAEt[t?t.t@H2舏A0A#A AHD$@EEHD$0HT$(HIωt$ CHt$@@tHYEEċϻ2HHPHD>I؃du3t LM Et-At$A"؅tHED藎HVL$jHHLIIHLIHH$L|$ AEADtXHtM.Ht HHtLE̋Ӌ袎L\$PI[0Ik8Is@IA_A^A]A\_<Lʼn؋Ћj띻Ht虍눻WHoH\$Ht$H|$UATAUAVAWHHp3LHʋ؋H2`IELHEP0D3Hu_WL@֍HMغHǿuuL+@H3Hu GEu)HEE3EHD$0IIH|$(|؅ZAuA(u AHEAEHD$0IIH|$(6E3؅DHHEEHD$0IIH|$( ؅HEEL$EHD$0IIH|$(؅E3EE3HMAQLfGuELй@pvHLEHHMDeHAzA;uDUHANHHLEHHMHu"ԿHyL& ADޅtLӹ@HH3@L\$pI[0Is8I{@IA_A^A]A\]HHXHhVWAVH@H` LH AHHB؅t HчhH]HP0HT$xL 6<DH<DEHLEHd$0H;HD$(H;HD$ HB]؅tHD@>EtDLHHL$xHtLӹ@Hl$hH\$`H@A^_^LWATAUAVAWHpICI[Is H H3HD$`LLAEA IS#3ɅuL@<DD;t$PLD$0AIػ3ɅIuH^HA#HLCHT$0D3ɄtHH[8K!tHEtcH;>uAHT$8HD$0LHD$ INl8O!tHW4H8H!uHH@8H!tHG H;u HH@8H!t8J!HDHLD$0qt EHT$@H@@肈AHL$`H3aL\$pI[@IsHIA_A^A]A\_H\$Ht$H|$UATAUAVAWHHH[MAULP0LZIDALEIHHE3PHEHEHEEHEfE/XLuЋDEPLeLuAt/tt{2Hۃۃ! ۃ HMHEEHD$0HEDHD$(EIՉD$ -;t"HDEǹ@2!H]SH]HHPHˋ`AtLй@觇!VtDH@ȆMt IHt HHtL׹@ML$I[0Is8I{@IA_A^A]A\]H\$Hl$Ht$WH`H1YA؋HP0L YH΋AH$DHHd$@d$HHd$PH$A4HD$0HD$@HHD$(|$ f\$X9H$t2HDDK@賅OHHPHϋ?؅tLй@A!؅tHDƹ@bHt HHtLӹ@L\$`I[IkIs I_@SVWATAUAVAWHHD$pHAH3H$EDL$PIHD$hT$4HL$@H$HL$`3E22ۈ\$0@2@|$1DNDF HT$xH3҅u LEADD;d$x:LD$8AHL$hͶ3҅ L|$8HD$`HXH{L HWLD$83҄tHLH?8W!tL;t MFHT$83҄u Lt$HHD$H H\$XHD$XH9t AH LIO73҄tArHD$8H5t95t0A5t\$0uDt$1Aވ\$0Et AE\$0t @|$1@t t$4E\$0@|$1Dd$4L|$@EtEAI3҅tAAI3҅e@tAAIb3҅CDLl$@D;|$x,LD$8AHL$h3҅Ld$8HD$`HXH{L HWLD$893҄tHLH?8W!tL;tMFHT$8u Lt$XHD$X H\$HHD$HH9t AHRJIL$3҄tAnHD$8H5t05t'A5uAFuA AAfD$ ML$DD$PT$4IGtEtL ֹ@$H$H3ZHĐA_A^A]A\_^[HUATAUAVAWHhHHE/HXHpHxALHE3LuLuALuLuQ^HE@!HEH@HEHHEH@Lu)^HE@!HEH@HEHHEH@LuIH|SP0DL=2H1ELELMDIHDH]@HEHD$PH\$HHy1HD$@Hd$8H1HD$0Hd$(H]1HD$ L i1MNjIHRP(D=udHMHtLtBEu=E3Mt8Ll$0Ll$(Ll$ MDHUIHRD=uE3E$E3EtLR~Aֹ@-E3HMHt*LMLEHU'uDL>~HtLMLEHU'HtLEMtHUILEHMHtHULEHMMt$HEHD$ AIDu4HMHt+DAAD HEHD$ LI|DE3HMHeQHt HEtL}Aֹ@H}HH;uKHwHD8n!u%HSHMyCHHPHD8k!tH}HLmHEHHEH@mH;tlHD8k!tLl$ E3E333\4HCD8h!uHHD8h!tHC H;Xu HH@D8h!tHLHUHM`=H;uH}H'PLmLmHEHxHD8o!u%HSHMBHHOHD8k!tHEH@LmHEHHEH@HMOAL$I[0Is8I{@IA_A^A]A\]H\$Ht$WH HAHHpH~!u HWHBH?HbO!HtHCH@HCHcHHCH@HK4OHcHcH\$0Ht$8H _H\$Hl$VWAWH0d$PAHA@HuYWH{A4|LD$P؅tLOL{A|C|$PHO tD$hOD$ d$ D$hHNLL$hAgPP؅t LX{(HwNHOLL$ AhPP؅tLN{HwHtYH:NHP0u K Eكwu 8Gt tu@HMDËHPXWHMHOAPtILzA{_LGHKzAϻzI|$Pt&HWDH؅u-HLGHzAϻsztLzA{HzAMzHl$`H\$XH0A__^H\$UVWAVAWHH`HbH3HEHLLHEH3P0Aƃ!HLHP8EqEEEEEEуDHsLHP8H]ssHEDKDHD$(HIDt$ Ƈ8HuDu*HHtADHUЉ<A4HE[Ht HHAFHKHP0HMAHL$(IDHDt$ HMЋHt HߋHMH3QH$H`A_A^_^]H\$Ht$WH HjKHP8L[KHˋAP0tOt#uT΃tat^t u1PKttt>t8!t u $ tt t3H\$0Ht$8H _HHXHHUVWATAUAVAWH03HEHX HJLE333P0DtuH=(s H=(3tyItODHL$pH$HD$(EIDl$ H$Du%HtLPHA3H$H;rHt HHAH\$xH0A_A^A]A\_^]HHXHHUVWATAUAVAWH03HEHX HILE333P0Dt tu#H='H='H='3tyItODHL$pH$HD$(EIDl$ H$Du%HtLPHA3H$H;rHt HHAH\$xH0A_A^A]A\_^]H(Ht=Ht89sHvAu0HD'H uHH3AWHvAHtuWH(H\$Hl$Ht$WATAUAVAWH 3EMLHu H]vHHf9fD48NHHt(HgLsLsLsLs Ls(HLs0Ls8IHuHv@sHK0HtH;t Ls0t$pH{0LHˋHy؅tLuй@HtHAt %Gt GGENjH؅t LuHD$xH8IHtHHt HHNHtW@ sHl$XHt$`H\$PH A_A^A]A\_H\$Hl$Ht$WH@HHHAH MAARtH?u@{rYHS H [uAtLDuHEu@{ZrHD$pHKDHD$(Lʼn|$ Hl$XHt$`H\$PH@_H(HtHt H(H u@qWH(HUATAUAVAWHhHHEHXHpHx MDHE3E! At$@H AAHGD!eWfEHEH^HEI HE@p1HEH@HEHHEH@L!e! HE'@p1HE'H@HE'HHE'H@L!e/E,EHHMp؅tLotй@qHEH9G DEHWH ؅utHEH9G WEgukE3HugD9&uHE >u!HEHD$ EDHWH:؅u(AHIcHrE'AuHEHG H ]@@EHsuHs.ptLtӹ@pHML$I[8Is@I{HIA_A^A]A\]H\$Ht$WH HHH ?AiHs@oHtE3DHHWLs@6pH ?Ht$8H\$0H _Ht,SH HH Ht HH#HTH [@SHHD$ HOH3H$MAMuH:s@nWDDHL$07$IHL$0;tDHs@nHL$0؅tDH4s@^nHHD$0HL$0 H$H3aGH[@SH HHXHt&HKAE3AQk7H<L$sDˋӹ@nH [H\$WH HHxHtBHWE3AHHڼHOfDJDBH趼LrDˋӹ@ nH\$0H _HHXHhHp WATAUAVAWH@E3HHD!pH?D!t$0EEHP0HuHr@_WlEuH؅DpHT$pH؅H?HP8DEu't"HDCLI<K؅dH1؅Hd$8DpH?HP0HL$8DK"HL$(HHDD|$ ؅tL*qй@lHL$8HtHAtnLqEHH؅t LqEHH؅t LqEHH؅t Lq|$puAHT؅D$0EtHp؅t LOj/E3Et5H<ALH؅tILpй@k0A.u As uEHH؋D$p!L$0uEt|HpEtkHLpMtDIVDAI輹INfDJDBI蘹LoD΋ֹ@ju99\$puF9\$0u@Ett7AH؅t&Lpй@jLpӹ@jL\$@I[8Ik@IsHIA_A^A]A\_3MuAAWÃuJEtA HHXHhHp WH@H`IMu AXWA HuYWHp@=iHD$`E3HD$0Hd$(T$ HQEA'H|$`؅tHp@hiHHPHϋ?#؅tLZdй@i;5؅tHXdD@hHHt xDtHt HHHl$XHt$hH\$PH@_HHXHhHpHx AVH@AALHHt$xHHpH`D$pEDljD$ ؅tDϿ@HfoDgyHHPH,"@؅(uHHP(HXoLg ؅'HEHHHtHP(!HHHtHP0؅t4L|ЋgH|gtL|ӋguuHHPHE!؅uJt$K؅UDHgbfPHWHP(HQnLf3LbЋEgD븿@HmWjft3HKnDËUfMtITotIHHHt7Hl$XHt$`H|$hH\$PH@A^@SH0Hd$(DHQHA A,HD$ ؅tL`lй@fH0[H\$Hl$Ht$WH AHHAu @u@t}uDHH9HtHG8AHPH\$0Hl$8Ht$@H _HHXHhHpHx AVH AHL!u~H7HP0DHI΋Ru[uStNDHIu:utuH7HuuE3DHI H\$0Hl$8Ht$@H|$HH A^LI[IkIsI{ AVH@H$AEHHHHD$xI{EICD$pDʼnD$ ؅tHskDEƹ@ckHHPH6؅tLQ_й@}d=,؅HK_D@cHk@WctQHtHHt HH'H_Dù@OcHtHNltHHHHt1Hl$XHt$`H|$hH\$PH@A^HHXHhHpWAVAWH@H` H5LHEHP0AHՋHD$xIHD$0Hd$(DDt$ BH\$xuyHct HXLAHtHjD@Yb1u)t$Ht HHELI3Ht HHH\$`Hl$hHt$pH@A_A^_HHXHHUVWATAUAVAWH@3HEH!x H4L33P0DtuH5yo H5iE3DH$H$HD$0Hd$(EIDl$ H$u|Hdt$uNDLAI:u.HtHH3H$AHD;gHiH"WD@`Ht HHH$H@A_A^A]A\_^]HHXD@HHUVWATAUAVAWHPH3HH!XHO3ALE33P0Dt tu#L51L5L5*!$fEHD$@EHD$0Hd$(IHΉ|$ ؅ AAE3tRуt6t*ttt#tt u`{tmA`t2t'ttt!tt u.70뺃 tt tt3 /,H1I؅Ht$@gHHEt,HP$DLH1IP` HH1PDǺLISh؅uQH\tHtHH3Ht$@$Ilj$;s~$H$-LgDϹ@^RLtgHW@W^/ILfDHHL$(@Dd$ ^Ht$@Ht HHtLtgӹ@p^H$HPA_A^A]A\_^]Ht|H\$Ht$WH HBHHH;tHL0HKAPHH9_uHGHHHGH@HgH;OtH/HH;_uH\$0Ht$8H _@SVWATAUAVAWHHD$HH5H3H$MEDLH$0H|$@3Ht$0HD$0HD$ MEAI;؅uMAHL$0HHD$0HHD$8HwLL$8LFHF HHGHH+HsSHD$pHd$hD$XAH+3HL$PHT$PH$ZHH$=HHGHVHBH3 \$8H|$@Ht$0DޅtH׋Leӹ@Q\H$H34HA_A^A]A\_^[H\$Hl$Ht$WATAUAVAWH0H$3IEDHDHtHuHe@[H>LMuHe@A^WZ7H賽du 3E؅t LeIH-IPLALH؅t=t LeXH9>IH=S-IPMIHAPLAHLHt$(Dl$ W3؅tLFeй@ZXAuAt H@8=9u9tH,HP0uAH,HEAPX؅ttLdӹ@aZHl$hHt$pH\$`H0A_A^A]A\_HDH D@HPHHSUVWHxH@H33Hl$H3H,,P0DHd@/Yt-tu7H H\$Hn)H H\$HH H\$HHH!t$XHcHD$`H"2HHD$PHtGHGHg3@HDDHGdnXD$@Hd$PHL$PHL$0Hd$($L$ ADH$H$Hl$Pu#H|$ LD$T$@H$HtHEHtDHb@WH!DHc@WHGHH;Hl$HHCHD$@D$HH$\D$HT$@H$_,Eu*}t$D$HT$@H$0IHL$@H)tGEu>}t8$$uu"DDHT$@H$?HH9_H\$HHH׋HGHHHGH@HgH;OtH)HH;_uH\$HHO(HgH(3HD$XHHD$XHH\$HH;D$`}RgDHb"DHbDHb DHa@U"HaUH$ƀ8HtNH׋&HGHHHGH@HgH;OtH9(HH;_uHO'(HgH(tLbֹ@VHx_^][@USVWHl$HHEHxH3HEDMEDELHUHM3HEH@H3H!uH;|CEHC(HELMLEAIH'3HUHJLUI9J E3HMHMHM׉EHEHD$0HEHD$(ED$ DIDEHUIu~HEHD$ HEHELDEUHMuTHEM<HMHtHW3HMDEHUHMu,DEHUHMHMHMHt HHMHtAH&PUL_׹@PT- DEHUIEHMH&Eu5H$-HE3HtHUH)HH HHt,HHE3HHE~H~H~HF H``H|HF8@1HF8H@HF8HHF8H@H~@THFP@1HFPH@HFPHHFPH@H~X,HFh@1HFhH@HFhHHFhH@H~pF(0HH@HDEHUHPEE EEE!EHMHM MHHPHt$HD$ DMDEHUHMXEEHMHHMHHrHH3E33HMHA$PHe{1tHd$ E3E33304HCx1uHHx1tHC H;Xu HH@x1tHHEH;Xt7DUL]L ^L^L3^׹@wQHMHtAH#PHt HHtL^׹@3QHMH3)H_^[]HL$H8HD$ <"HD$@HtHHHHtHH8HHHWH0H@HXHpIIHڹ!HHD$@HtHHtH8HQHtHHHH\$HHt$PH0_E3HLALALALA LA(H0L8L@DHHXL`LhDpHcvLHDDHLLH\$WH H$tH!HH\$0H _HL$SH0HD$ HHuHHHt HHuHHH0[N̋'D;P3ɅC0tà XtLAAAAD+tD;AtJD+t6D+t'AtD;ov l bX Njt^A>A/AA\AgATAtD;AtCAt4AJA^AKAVA/ AA+AtqAtfAtZD+AuBQ")p+{At&D+tAt At AA AAHHXHhHpHx ATAVAWH0H$AELLHuH`@{WKHH#HP0DA׋Dп2E=A AAAtnAt9A@H/]%HHHqH-%HHfH/qH$HH6H_qH$HHHpyHr$HHteHFpPHIw$HHtt/t tDAAAAA A t>t/t tvDB mA bAWALAAt>t/t t(DBAA AAE3A ~0~AAA At:t.t"tt uDByAqAiAaAYAQ.tFt:t.t"tt u4DA!.A &AAAAAA̋ntdtXtLt@t4t(ttBHyHH9H HHHHIHaà tXtLt@t4t(ttHlHH4HHH\HH$HTÃktatTtHtt. H~AA;7EA.A #A t/t tDB A AA t!A+tDBAAt A+tEAA{E3vAn"t< t/t"tt uSDAMAEA=A5A-t"tt uDBAAAA̋ VtLt@t4t(ttH1HHHqHHQHÃt4t(ttHHHHHHÃGt= t0t$tt uEH<HHHtHHÃt3t'ttt3H<HHHHH\$WH HKaHH tHy HH\$0H _̋RtHtHH\$0H _%^H8LHt53HBII;s' Hd$ E3E333 3H8MIH8@SH H3[YHZYZ HH [H%YHL$HH ]^HHHD$HE3HT$PHL$H^HD$@H|$@tBHD$8HD$XHD$0HD$`HD$(HHD$ LL$@LD$HHT$P3K^#HzHHHiHH^HH(H$H) HkH HHkH HHHkH HٷHHkH HLhHkH HLhH [HĈHxH W]HHD$HE3HT$PHL$H0]HD$@H|$@tBHD$8HD$XHD$0HD$`HD$(HHD$ LL$@LD$HHT$P3\#H HH`HHHHGH HkH HH ZHx@SH HHHD$8HuZ] HHD$8HHD$@LD$@HT$8HHHT$8HyHT$@H}HH [H(kHH(%ZHHXHp HPHHWAVAWH0MEHH3ۉX؉\$$A;}HAHH|$PD$ H\$`Ht$hH0A_A^_%PZ%foD$ foL$0foT$@fo\$PHL$pHT$xL$L$HhHHL$HT$LD$LL$ HhfD$ fL$0fT$@f\$PHH ͘LfoD$ foL$0foT$@fo\$PHL$pHT$xL$L$HhHuHgcHMQH3?HI-HHHL$HT$LD$LL$ HhfD$ fL$0fT$@f\$PHH OfoD$ foL$0foT$@fo\$PHL$pHT$xL$L$HhH,HL$HT$LD$LL$ HhfD$ fL$0fT$@f\$PHH foD$ foL$0foT$@fo\$PHL$pHT$xL$L$HhHuHcHgQH]?Hs-HiHG H8d$(LHT$ HL H H8%H%|H%M%M%MffHL$L\$M3LT$L+MBeL%M;sfAMEM;uL$L\$HH(jHT$UH HHHH ]H(3H(_HT$UH HH[H ]H0H0H鮓HT$UH HHTH ]H(H(wHT$UH HH7H ]H0H0HHT$UH HHH ]H(GH(HT$UH HHH ]H0H0HzHT$UH HH܍H ]H@ H@HH@vH@H3H@H@HHT$UH HHH ]H88HT$UH0HH)H0]HA]HhOHHߠH0ӠH8Ǡ@UH HH3Ɂ8H ]HT$UH HHH ]H@ԹHT$UH HHH ]H魹HHoH QH8QH黼HT$UH0HHH0]H锼HT$UH0HHH0]H;H/H`Hp=HT$UH0HHlH0]H0`H`HƧH`H@:H`HH*HXb[HHrHHHx֞H(`rH`NrHHBrHp0rHPrH@vH@HܦH@HP@UH HHHMPH ]@UH HHcHMPH ]HHHHxqH@%H@ЊH@QH@p\H@nH@dH@H@H ʥH@H 鴥H@H@HT$UH HHM@ 33yHxHx$HT$UH HHH ]HxHx鯉HT$UH HHH ]Hx~HxPHT$UH HHH ]HxEHx[HT$UH HHH ]Hx HxhmHT$UH HHH ]HxHx駚HT$UH HHH ]HxHxH HxHT$UH HHH ]HxQHxH 驣HxHT$UH HHH ]HxHxH `Hx8HT$UH HHH ]HxHxH HxHT$UH HHrH ]HxvHxH ΢HxHT$UH HHIH ]Hx-HxH 酢Hx]HT$UH HH4H ]HxHxH HxHHT$UH HHWH ]HxHxGHT$UH HHZH ]HxHxGHT$UH HH]H ]H@H%>H0H%>HT$UH HHHM HtC3HHHs4HHHMP>HHEPHHMPrHE(HeH ]HT$SUH(HHH{ r HKHC HcC337H@HHT$UH HHH ]HT$UH HH?H ]HT$UH HHH ]HT$UH HHH ]H(RfHT$UH HHM@33kHT$UH HHM@33EHheHT$UH0HHM@33HT$UH0H33HT$UH H33HT$UH H33HT$UH HHM@/33HT$SUH8HH]0HKHtHcHcHc33]H@H`H`@UH HHH0H ]HHfHNH8NH(NHT$UH HDžH3H ]Hh{H(iHWHp+NHT$UH HEpHAH ]HpHT$UH HEhHH ]HH8eHpH @UH HHHH ]HHdHUMH@IMH0=MHT$UH HDžHH ]H&HpLHT$UH HEpHH ]HpHT$UH HEhHlH ]@UH HHU@HM($H ]HT$UH HHM@<33@UH HHPHH ]HT$UH HEpAHC5H]H ]HT$UH HHM@33HT$UH HHM@33@UH HH ]HpBH(bHxnKHXbHHHHT$UH HE`HOH ]HT$UH HHH ]HT$UH HHM@33@UH HHHM8H ]@UH HHHM8H ]@UH HHHM8H ]@UH HH`HM8H ]@UH HHAHM8H ]@UH HH"HM8yH ]@UH HHHM8ZH ]@UH HHHMh5H ]@UH HHHMhH ]@UH HHHMhH ]@UH HH{HMhH ]@UH HH\HMhH ]@UH HH7HMhH ]@UH HHHMhoH ]H@K[H@H0[H@HH[H@H`[H@Hx[HT$UH0HH^H0]HT$UH@HE@Ly@JHdH@]H@ZH@H0[H@HHZHPgZHPH0ZHPHHZHPH`ZHPHxZHPHZH@ZH@H0jZH@HHZZH@H`JZHT$UH0HL`@9HrH0]HT$UH0HE4L@HwH0]HT$UH0HE4L@HwH0]H}H`}H@XH@H0ZYH@cH0HPb\HT$UH0HE8L?@H}H0]@UH HHHMPfH ]@UH HHHMHAH ]@UH HHHMH"H ]HHXHHH0lXHHHH\XHT$UH HHM@@33HT$UH HHM@33H@@UH HH3Ɂ8H ]@UH HHHHUPEP=csmuHMPE0E0E0H ]@UH HHHHUpEp=csmuHMpfE8E8E8H ]@UH HH0HHU`E`=csmuHM`EHEHEHH ]@UH HH HH=csmuHE$E$E$H ]@UH HHHHU(E(=csmuHM(aE4E4E4H ]@UH HHHHU@E@=csmuHM@ ELELELH ]@UH HH(HHUXEX=csmuHMXEhEhEhH ]@UH HH8HHUxEx=csmuHMxe DžH ]@UH Hꃽhw H ]@UH H} uLMxDEpHUhHM`H ]@UH HHM8HM(HE(HHM0HE08csmt E E -H ]HT$UH HHePHH ]@UH HvH ]@UH H} uLMpDE$HUXHMP"H ]@UH HH3Ɂ8H ]HH H鎗H H(HH H Ht JH%%%H(H 8HH &HLHH &H,dT42p  4 2p t dT42  td42t d 4 r d T 4 rp" "4 p `POZx%d4 P@Nd42 pT42 p d T 42p 4 p ` P dT 4 Rp bp` P 0 d T 42p2 !d!4! p P@Np t d T 4R204Bp ` P 0  t42pdT2 p&Rp`0OP|@Z8Z  2PO$bp`0O`ZZ|@Z8#QV^Z  2PO`"r p ` 0O8[[}@.[8*<|.[  2PO8$bp`0OO[[[L~@g[8k}g[  2PO"r p ` 0O[[@[8(z[  2PO$bp`0O[[@[8X[  2PO"r p ` 0O[ \h@\8d\  2PO4 RpOp;\5J4 RpOHM\t4 RpO c\$4 RpOu\Pw4 RpOЗ\4 RpO\,Sh  4 rp 4 2p`PB##4 Rp`O\@\8$`r\  2PO42 p! p `OX\\@\HX\  RPOX6 %4\T p`PO0 ]]%]1]h32 !dQ!4P!H p P@N0 Lp`P0@NP/ StRdQNP@N`d 4R p, 4bZ p`P@N b2N@NC]N2P&p`0O]],@i]8@]8;ci]  2POd T 4RpO][3 %4 p`PO]]dE` t dT424 4 p`0O!]^І@]H@ ^Hh !!"u###$$]  RPO%4 p@N (4VPp`P@Np t d T 423_p`0POh"A^M^$*{*>,b,1/ 4  p`P@N@ -4p`O@_^k^t@w^H3444444h55w^  RPO@2 $t9$d8$47$0P@Np- Etd4C P@NP- Etd4C P@NPT4 r p `d T4' 't#d4r POȩ^DDHJ T4 t d T 4 r tdT 4  tdT4' 't'd'4'Pd 4  p 4 p `2N6Y#ZkZ 4 p `2N[[] dT4pd T 4 r dT 4 rpd T 4Rp9 5+t$d43 P@Np< +t['dZ#4YTPO^^^^HiiiiiDkNkb  4 pd T42pd 4R pd T42p4pO^h}}}d 4 R p4pO@J  4 Rp4pO.d4pOx֓ 4pOPX~4pO(&\4pOΘt d 4 rd T 4 rpd4pPOب^`.d4pPO\*  4 pd4 pd4pPO̧*d4pPO`_>֩d4pPO8dd4pPOnެd4pPO jڭdT 4 pT4 p `T 4 rp`O"_4 p`Pd4pO5޺!!4 p `POp4_JT 4 rp`OH4"4 p`P" "d4pPO F_R_lR]l4 p `Pd4pOX5dT4p4pOЦt4pO0VdT4p4pOOd4pPOX~d4pPO0 *d4pPOXdd4pPOl:d4pPOh6d4 pOd_T 4 rp`Oh+d4 pO@ld4 pOd4 pO8g4 pOȤ j  4 pO >  " "d4pPOx   ? J T 42 p `4p`P p0POPv__*p4 RpO(__3%t !d4 P@N?.tB'dA 4@: P@N$ $4+$ p`PT4 p ` d4 p P% %4%%p`P  4 pd T 4 rpT4 r p `T 4 Rp`O__9\:j:::d T42pd T 4 Rp  4 2p2No??? R02N???& &d"4 pPOأ_@Z@/A4 p`P4 p`PO```CCCD!D:DDD dT4 Rp d4 p Pr04 RpO.`0NmNN4 RpO`@`NNN4 RpO8R`ONOcO4 RpOd`OOO4 RpOv`P:POP4 RpO`xPPP4 RpO``PQ$Q.Q R0Op`dQzQQ4 RpOHQQQQ4 RpO  RGR\RfR4 RpORRRR4 RpOСS?STS^S4 RpOSSSS4 RpOT7TLTVT4 RpOXTTTT4 RpO0`UEUZU4 RpO`UUU4 RpOUV(V bO@`8TVuVV`a  2POR p`0Oa(a0@4a8WXWjWWWWX4a  2POR p`0OhUaaa@ma8dXXXY=YBYGYma  2POhR p`0O@aa@a8YYYbZZZZa  2PO@R p`0Oaa@@a8Z4[F[[[[[a  2POR p`0Ob b@b8H\\\\!]&]+]b  2POR p`0Oȟ9bEb@Qb8]]]F^i^n^s^Qb  2POȟR p`0Orb~bbX@b8^_*_E_w____b  2POR p`0Oxbbb@b8_8`J`e`````b  2POxR p`0OPcc cء@,c8aXajaaaaaa,c  2POPR p`0O(McYcic@uc88bxbbbbbbbuc  2PO(R p`0OcccX@c8Xcccccdddc  2POR p`0O؞ccc@d8xdddd+eCeHeMed  2PO؞R p`0O(d4dDdؤ@Pd8eeefKfcfhfmfPd  2POR p`0Oqd}dd@d8f gg9gkggggd  2POR p`0O`ddP@d8g,h>hhhhhd  2PO`*4 p`O8[d0@d8TiijKjUjd ee  2PO81 4 pO'e3e?eKeWeceoe@{e8jkkl&lSlllll m&m>mHmrm{eee  2POR p`0Oee@e8m,n>n]nunznne  2POR p`0Oeeĩ@e8n o2oQoionosoe  2PO4 rp`POf!f-fp|ppppp d T 4 Rp dT 4 rp-4p`Op?ftu(u!!t d 4 r OHQfmfH@yf8www5xIxOxyff  2POH dT4pR p`0O ff@f8-27f  2PO 4 RpOfht d42R p`0OМff @g8PŲݲg  2POМ4 RpO?TR p`0O#g/g@;g8|ε ;g  2PO4 RpOXDkR p`0O0\ghgĮ@tg85:?tg  2PO04 RpOpR p`0Ogg@g8Ի&Iafkg  2PO4 RpOýؽR p`0Ogg|@g8@Rug  2PO4 RpOhR p`0O@hhX@h8,l~h  2PO@4 RpO0R p`0O@hLh4@Xh8XXh  2PO4 RpOȚ G\4 RpOyh Eu@N`4 RpOx 4 RpOP|! 0O(rh;q p`0O@h8@iH]hhh i&i  2PO  BP0O4 RpOؙ4 RpO,Q2 p ` 0 R0Oh^iH^  RP/ td4~|P@N  `02N1 #t#d#4#P@NT 4 2 p `4 2 p`P B2N  td4P t d 42d42 p4 R p`OLp4ti8Lti  2PO0OЫSp4i88i  2POЫ R0OThp4i8p4i8R_oi  2PO T4 R p `T 4 2 p `4 R`-4p`O/!4 p `POXi(d 4 RpO0@j8 Wjj  2PO0  4 2p bO@*j8Lm*j7j  2PO p`0OPjй@\jH@|jHJq6s\jij|jj  RPO bO@j8   jj  2PO bO@j8   jj  2PO4 p`  4 p- td4P@Nh  p`0P@N@T 4 R p `  p`0  0P bOH@j8jj  2POHd 4 rpO |@jX j~jk  bP0O  d T 4 2pd T429 U+S&p`0PN"""v#### $ $n$$$$$$)&k&k&  4 p `2N((('Y)Y)N*e*e*3+[+[+ 02N,0,0, 4 R p2N,,,,,, 4 R p2N]-t-t----.&.&....... d 4 Rp2Nr/// 4 R p2N,04040f0v0v00000 1 1  p ` 02N4v6v6666td4P R0O8k999 42 p2N,:B:B:dT4 pOȮNkh:::) )h%t!d4 O`kkkkklp4k8:;:;n;;;; <\<w<<<=kkk  2PO* *d&4 pPOxk<====??? T4r p`OkD@@1AR p`0OPllp4l8\AAADBUBwBBl*l1l  2POP  4R pO(Elp4Ql8BB,CCQl^lel  2PO( T4 p`OyllDDDEEdT4pOحlF`F G R0O@GGG R0OJ(JGJ( (h$d 4 pOllllll|p4 m8JJJ+K^KbKKKL5LALKLLL mm"m  2POT4 rp`O`M`M N T4r p`O80NNOR p`0O6mBmp4Nm848 "^<&nO EXuao.I $)NetApiBufferFreeDsRoleGetPrimaryDomainInformationDsRoleFreeMemoryNetDfsGetClientInfoDsGetDcNameWGetUserNameExWTranslateNameWLsaConnectUntrustedLsaLookupAuthenticationPackageLsaLogonUserLsaFreeReturnBufferLsaDeregisterLogonProcessWNetGetConnectionWwnsprintfWPathIsUNCWPathIsRootWPathRemoveFileSpecWPathAddBackslashWPathRemoveBackslashWPathCreateFromUrlWUrlUnescapeWZR,,8XH<X0lILKJJ$(OPLPO D05\$!5I[m+8Tq".<ER_ju  !"#$%&'()*+azroles.DLLAzAddPropertyItemAzApplicationCloseAzApplicationCreateAzApplicationDeleteAzApplicationEnumAzApplicationOpenAzAuthorizationStoreDeleteAzCloseHandleAzContextAccessCheckAzContextGetAssignedScopesPageAzContextGetRolesAzFreeMemoryAzGetPropertyAzGroupCreateAzGroupDeleteAzGroupEnumAzGroupOpenAzInitializeAzInitializeContextFromNameAzInitializeContextFromTokenAzOperationCreateAzOperationDeleteAzOperationEnumAzOperationOpenAzRemovePropertyItemAzRoleCreateAzRoleDeleteAzRoleEnumAzRoleOpenAzScopeCreateAzScopeDeleteAzScopeEnumAzScopeOpenAzSetPropertyAzSubmitAzTaskCreateAzTaskDeleteAzTaskEnumAzTaskOpenAzUpdateCacheDllCanUnloadNowDllGetClassObjectDllRegisterServerDllUnregisterServerX0!X   !X0!X0!X0!  X0!X0!  ] fH2-+h3h2h4h2x4h24h22h2X2xxH2xx82xxH3h283h2x3h23h2X3h23h22h23h23h22h23h23h2(3h23h23h22h2x2h24h22h22h24h23h2(4h284h23h2H4h2X4h2d\ eX fT gP hAxȯ: !HH8H@8@00(0(0(Xh(`0PH@ 0@H(0@X.-,/@0X1(H p!(Hd`efghP|TؑHPxH'X 4&|.&@%'p%x&%8&$$%@%p%HXwGgp   k #$ @$h$@$ $$$X####!!"" #X#-!.!0",X"/"1"! H!!h!hhdfe g0 hX  @8-.01 BBPvH'$Hl69T:;Cx;;;<x7 8<>> ??L0?0T<<l<LM MxO OP-.0)()+*+    H <X/,1 !1 !defghi           .0- 1defghi !.0-1 !defghif2H{I4f2H{I4L)EgddL)Eg|&|L&(& }L&%@}L&%p}L&&}L&%}L&%8~8"x~8"~8"~8"~8"0 "hh% $ $ $ H%`#""!!!p!Ph!P!! Ё    p  Ђ    &P& # !! `% 0#  P  L&!! $P"8"    }L&%X@"}L&%" $ $$#0@!>A8AC`CDtDwJJMLȉTLMMO$OQRW,WYXL`XZ\Zq]x]2^8^^^~``aȊa c܊ccdVe܊\eCfLfAiHi}k0kk{kOl,zXll,zlIm,zPmm,zmnnJnPn~nnnnnno oNoTooooooop$pQpXppppp#q,qqqqqsrȋ|rrȋssȋstȋ tktttttuugupuuuvvcvlvvvvvwԋxxyyzyzzI{{P{{z{|,z|b},zh}} }9~@~2@8bPhĀ̀(0Vz\߂ȋkȋtȃgpĄ&,{,zz"(^dֈ܈NTƉ̉>Dy||,z28pȋxȋȋ ȋ(}ُ5<IP|MT$,QX̕ԕ5<t|ݗEL@$IPϛl؛&,zpȋxȋ]dX`T\PЍXç̧ب T6< Ď },rxD@L,zʳ8zгGPǴдGPǵе \dzøT̸ڼԏ,za8zh߾(_h߿(_h(_hpȋxȋ ah u| dl8@-z4GPWD`eDl7X@PXTԐ\w%,z,8z7@w7@wzxȋ ȋȋ4ȋ<IP]dlt]d)0D$QpXpgpAHz PXel`Lh\d,z8zOX$ȋ,ȋLȋTȋtȋ|ȋGPDL4<px)0*0=DQX GPbhz,zp8zx/8oxȋȋ ȋ@ȋHȋ18$2X818EL4<      n t s `| izptؔ q'Dx'*l*7,@,--r/x/122L23|33344O4X44ԕ445;5D5{555566S6\697@7D8L8)909g9p999n;t;k<\t<i=\p=>p>?z?A?,z`????{?@@\AȖdAB BXC,z`CD EaFhFGGJHPHHH3Iz@D@VAt\ABBCxCDLDFF+Gt4GGzGGGHHHHGIzPIIzII(IJ(JxJJMM(N(0N4O\{D^Pd8zDlL   z % ,   g p  { z)0 OX 8z[{d|z"z(  r!zx!Y"L"`#(h#$8$%x{%@(LH(A)\H)D*D{L*C+tL+:-@-:.@./383334z47(7707::Y;z`;;{;<p<=,z=HHIzIcI(lIJ,JJ,JDKLKKLK&L,LNT NYN{`NO,zOO,OEP,LPPP\QLdQSp(S8S@STTUUVVFW LWWWX(X[X[w]|]__ccddffh $hi$ibjzhjm@mpdpcs|lsssttvwx x|8|B|T{Ă {0ˌPԌґhٕؑH=zDߠ4zܤ$RzX <TED{L6h< )0 fl~ݿ4nt~TtyZ`!(x{ 0 lH`(8z |+z4zzdl8z0HX ;D.4zz`|,z6l<tx ,z /\,,$L$t,z,$48!(RX̼yz P $h$$}%@%''F){L)H+P+p/x/001\12z3V4\4445{5e6zl6o7x78 859,z<99,z9L:zT::;r;;K<<=>>,>?@D?(BT0B CC{CCoLxLL MlN OrOxOPPQ(QyQ{QS S?WHWXXZ ZeZ{lZZZ [(L[f\l\L]`T] ^D^5^p<^z^,z^^,z^_ __{_``azaa{bdbzlbb{bccdd.e,z4efg7g{@gggi`iTj{\jkklntn'o 0oq q?q,zHqyq{qvr|rr,zrs,z stztzwD{wwtxO{`X{|0|},z }4}(<}D5{<p`xHzP,zO,zX\Y`(}z,z#,z,{h܊ ,z x{טD{,zh{p̚,x!l(D{#,z,n{t8z {ȠD{ס,zA,zHz܊<,zD},zz|p٨D{,z+,z4,zۭLد{$,z#,z,,z ܊<g{pHD{PD{ u,z|,zڽzh4y{jD{p\{{E,z{,zz,z ;,zDH\[dtrQtLzMzT (%<, S\18s|z<hD|z (`RX(z RlXHP{4,z<P^d 6 z<  8z d l { ܊  l bh D{ `( Z$`d,z `"$<$%{%0&,z8&(X(){ )Y),z,M,,zL00,zt33,zX44,zl55,z86q6,zh77,z7:`:@;zH;x<p< ==2=8=Q>z> ?z?H?{P?@z @p@zx@A(AAAB$BBBB(BEEEEzLEG(G!H(HrHHH$HH,zHMITII{IKKKLLLL(L$M\MN@N]N(dNN{NfO8zO7P8zPPDQR<tRRHTbUP|UUXVV`V'WhAWWp>XXxXFYYYPZZZZ|Z [8}.[I[}g[[~[[T[[\5\\\\\PC]c]i]]]]]^H ^;^Hw^^؈____`aԛ4aOamaa4aaaab3bDQblbbbbbt,cGc4uccccd"dtPdkd4ddddd!e{eeeehefQfmfyffffhgg`;gVg<tggggghаh:hXhshhidiXittiiiiiiiij$jظ*jJjT\j|jP|jjPjjjj0jj(j2k`kkkkl?lhQlsl ll m0mNmpmHmmmmmmmnnNnTntnznnDnno2o8oSoYoyo@ooooooooopp9p9pXp^p}pppppppppq$q$qCqqqqqdrs sEsEs~ss'tP-tLtRtqtqtttttu u@uFuuuuuBvBvvvvvGwGwwwwwx!xMxSxxxxxxxy y@y|yy(*ڿʿd~@Nbr~hP4lP8tbP:* B^"6Xp@4L޾ȾfJB0ºк(6HZnzλ4JXd~ļԼ.BVjʽܽ`p Mko+ HM  :"vj ضxbL@ Եȵxnd\R:.ش|tj^RH:0(2HftзL2ιhP. ʸrX>"   2FXj|H`(`г8`ȡ4TP` *ڿʿd~@Nbr~hP4lP8tbP:* B^"6Xp@4L޾ȾfJB0ºк(6HZnzλ4JXd~ļԼ.BVjʽܽ`p Mko+ HM  :"vj ضxbL@ Եȵxnd\R:.ش|tj^RH:0(2HftзL2ιhP. ʸrX>"   2FXj|srandswscanfj_vsnwprintfwcsrchr_wcsicmpwcsncpy_smallocMfreememcpy_swcscpy_swcscat_s_purecalld_vsnprintf ??0exception@@QEAA@AEBV0@@Z2?what@exception@@UEBAPEBDXZ??1exception@@UEAA@XZ ??0exception@@QEAA@AEBQEBD@Zmemmove_s ??0exception@@QEAA@XZstrrchrldivwcschrwcspbrkyiswspace wcsncmp _wtol_wcsnicmpqsort#bsearch_wcsuprwcsstrtowlower{iswxdigitwcstol_wtoi64memmovememsetX__C_specific_handler ??0exception@@QEAA@AEBQEBDH@Z_callnewhL_CxxThrowException\__CxxFrameHandler3V_XcptFilter_amsg_exit~_initterm0?terminate@@YAXXZmsvcrt.dll??1type_info@@UEAA@XZ_errnorealloc_lockB_unlock|__dllonexit_onexitzRtlAcquireResourceSharedRtlReleaseResourceyRtlAcquireResourceExclusiveRtlCopySidHRtlLengthSidRtlInitializeResourceRtlInitializeCriticalSection0RtlDeleteResource'RtlDeleteCriticalSectionpRtlNtStatusToDosErrorRtlConvertSharedToExclusiveNtAllocateLocallyUniqueId[RtlEnterCriticalSectionERtlLeaveCriticalSectionRtlIdentifierAuthoritySidhRtlEqualSidRtlInitStringRtlConvertExclusiveToSharedRtlInitializeGenericTableAvl RtlInsertElementGenericTableAvl)RtlDeleteElementGenericTableAvlYRtlLookupElementGenericTableAvlRtlInitUnicodeStringJRtlDosPathNameToNtPathName_UNtCreateFileRtlFreeHeapNtClose`RtlEnumerateGenericTableAvltRtlNumberGenericTableElementsAvldRtlValidSidcRtlValidSecurityDescriptorRtlCaptureContext]RtlLookupFunctionEntryiRtlVirtualUnwindntdll.dll1CharNextW<CharUpperWPUnregisterClassAUSER32.dllCreateFileWVGetLastErrorCloseHandleMultiByteToWideCharFindResourceW^SizeofResourceLoadResourceLockResourceFreeLibraryGetProcAddressLoadLibraryExWmGetModuleHandleWlstrcmpiWLeaveCriticalSectionCRaiseException)EnterCriticalSectionFindResourceExWiGetModuleFileNameWPInitializeCriticalSectionDeleteCriticalSectionDisableThreadLibraryCallsWideCharToMultiByteLocalAllocLocalFree0GetEnvironmentVariableWCreateDirectoryWGetCurrentProcessIdWriteFileWGetLocalTimeGetVersionExWCreateTimerQueueDeleteTimerQueueExCreateTimerQueueTimerDeleteTimerQueueTimerGetCurrentThreadGetCurrentProcessGetComputerNameWGetSystemTimeAsFileTime<GetFileAttributesWGetVolumeInformationW9GetFileAttributesExWCompareFileTime DeleteFileWPGetFullPathNameWLoadLibraryWSetLastErrorCompareStringWFormatMessageW_SleepUnhandledExceptionFilterPSetUnhandledExceptionFilternTerminateProcessOutputDebugStringA0QueryPerformanceCounterGetCurrentThreadIdGetTickCountKERNEL32.dllCoTaskMemFreeCoTaskMemRealloc~CoTaskMemAllocCoCreateInstanceStringFromGUID2CLSIDFromStringTCoInitializeExCoUninitializeCLSIDFromProgIDStringFromCLSIDole32.dllOLEAUT32.dllLsaOpenPolicyLsaNtStatusToWinErrorLsaQueryInformationPolicyLsaFreeMemoryLsaCloseCreateWellKnownSidTRegCloseKeyRegQueryInfoKeyWsRegEnumKeyExWRegOpenKeyExWRegSetValueExW]RegCreateKeyExWlRegDeleteValueWLookupAccountNameWLookupAccountSidW{ConvertSidToStringSidWConvertStringSidToSidWRegQueryValueExWJGetLengthSidoGetTokenInformationOpenThreadTokenSetThreadTokenEqualDomainSidOpenProcessTokenDuplicateTokenExCopySidInitializeAclAddAccessAllowedAceInitializeSecurityDescriptorSetSecurityDescriptorDaclSetSecurityDescriptorOwnerVGetNamedSecurityInfoWaGetSecurityDescriptorSacl\GetSecurityDescriptorDaclSetNamedSecurityInfoW^GetSecurityDescriptorLength7GetAclInformation6GetAceIsValidSidAddAccessAllowedAceExAddAccessAllowedObjectAceAddAuditAccessAceExSetSecurityDescriptorSaclAdjustTokenPrivilegesMakeSelfRelativeSDCryptReleaseContextCryptAcquireContextWCryptCreateHashCryptHashDataCryptGetHashParamCryptDestroyHashADVAPI32.dll'AuthziFreeAuditEventType,AuthziInitializeAuditEventType%AuthziAllocateAuditParams/AuthziInitializeAuditParamsWithRM+AuthziInitializeAuditEvent2AuthziLogAuditEventAuthzFreeAuditEvent(AuthziFreeAuditParamsAuthzInitializeResourceManager AuthzFreeResourceManagerAuthzFreeContext AuthzGetInformationFromContextAuthzAddSidsToContextAuthzInitializeContextFromTokenAuthzInitializeContextFromSidAuthzAccessCheckAUTHZ.dllUuidFromStringWUuidToStringW RpcStringFreeWUuidCreateUuidToStringA RpcStringFreeARPCRT4.dllDsQuoteRdnValueWDSPARSE.dllDsCrackNamesW$DsFreeNameResultWDsBindWoDsUnBindWNTDSAPI.dllODBC32.dllVirtualQueryVirtualAllocGetSystemInfoVirtualProtect@SetThreadStackGuaranteeRtlAllocateHeapRtlImageNtHeaderDelayLoadFailureHookResolveDelayLoadedAPI3PerfSetCounterRefValuePerfCreateInstance4PerfSetCounterSetInfo7PerfStartProvider9PerfStopProvidermemcmpmemcpywcscmp84`x$fghe(u@Xp         z   / = @|REGISTRYFILETYPELIBMUI|4VS_VERSION_INFO@%@%?StringFileInfo040904B0LCompanyNameMicrosoft CorporationFFileDescriptionazroles Moduler)FileVersion6.3.9600.16384 (winblue_rtm.130821-1623)0InternalNameazroles.LegalCopyright Microsoft Corporation. All rights reserved.8OriginalFilenameazrolesj%ProductNameMicrosoft Windows Operating SystemBProductVersion6.3.9600.16384DVarFileInfo$Translation HKCR { AzRoles.AzAuthorizationStore.1 = s 'AzAuthorizationStore Class' { CLSID = s '{b2bcff59-a757-4b0b-a1bc-ea69981da69e}' } AzRoles.AzAuthorizationStore = s 'AzAuthorizationStore Class' { CurVer = s 'AzRoles.AzAuthorizationStore.1' } NoRemove CLSID { ForceRemove {b2bcff59-a757-4b0b-a1bc-ea69981da69e} = s 'AzAuthorizationStore Class' { ProgID = s 'AzRoles.AzAuthorizationStore.1' VersionIndependentProgID = s 'AzRoles.AzAuthorizationStore' ForceRemove 'Programmable' InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' } } } AzRoles.AzPrincipalLocator.1 = s 'AzPrincipalLocator Class' { CLSID = s '{483afb5d-70df-4e16-abdc-a1de4d015a3e}' } AzRoles.AzPrincipalLocator = s 'AzPrincipalLocator Class' { CurVer = s 'AzRoles.AzPrincipalLocator.1' } NoRemove CLSID { ForceRemove {483afb5d-70df-4e16-abdc-a1de4d015a3e} = s 'AzPrincipalLocator Class' { ProgID = s 'AzRoles.AzPrincipalLocator.1' VersionIndependentProgID = s 'AzRoles.AzPrincipalLocator' ForceRemove 'Programmable' InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' } } } NoRemove Interface { ForceRemove {edbd9ca9-9b82-4f6a-9e8b-98301e450f14} = s 'IAzAuthorizationStore interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {b11e5584-d577-4273-b6c5-0973e0f8e80d} = s 'IAzAuthorizationStore2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {abc08425-0c86-4fa0-9be3-7189956c926e} = s 'IAzAuthorizationStore3 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {987bc7c7-b813-4d27-bede-6ba5ae867e95} = s 'IAzApplication interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {086a68af-a249-437c-b18d-d4d86d6a9660} = s 'IAzApplication2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {181c845e-7196-4a7d-ac2e-020c0bb7a303} = s 'IAzApplication3 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {929b11a9-95c5-4a84-a29a-20ad42c2f16c} = s 'IAzApplications interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {5e56b24f-ea01-4d61-be44-c49b5e4eaf74} = s 'IAzOperation interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {1f5ea01f-44a2-4184-9c48-a75b4dcc8ccc} = s 'IAzOperation2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {90ef9c07-9706-49d9-af80-0438a5f3ec35} = s 'IAzOperations interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {cb94e592-2e0e-4a6c-a336-b89a6dc1e388} = s 'IAzTask interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {03a9a5ee-48c8-4832-9025-aad503c46526} = s 'IAzTask2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {b338ccab-4c85-4388-8c0a-c58592bad398} = s 'IAzTasks interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {00e52487-e08d-4514-b62e-877d5645f5ab} = s 'IAzScope interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {ee9fe8c9-c9f3-40e2-aa12-d1d8599727fd} = s 'IAzScope2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {78e14853-9f5e-406d-9b91-6bdba6973510} = s 'IAzScopes interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {f1b744cd-58a6-4e06-9fbf-36f6d779e21e} = s 'IAzApplicationGroup interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {3f0613fc-b71a-464e-a11d-5b881a56cefa} = s 'IAzApplicationGroup2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {4ce66ad5-9f3c-469d-a911-b99887a7e685} = s 'IAzApplicationGroups interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {859e0d8d-62d7-41d8-a034-c0cd5d43fdfa} = s 'IAzRole interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {95e0f119-13b4-4dae-b65f-2f7d60d822e4} = s 'IAzRoles interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {eff1f00b-488a-466d-afd9-a401c5f9eef5} = s 'IAzClientContext interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {2b0c92b8-208a-488a-8f81-e4edb22111cd} = s 'IAzClientContext2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {11894fde-1deb-4b4b-8907-6d1cda1f5d4f} = s 'IAzClientContext3 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {e192f17d-d59f-455e-a152-940316cd77b2} = s 'IAzBizRuleContext interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {fc17685f-e25d-4dcd-bae1-276ec9533cb5} = s 'IAzBizRuleParameters interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {e94128c7-e9da-44cc-b0bd-53036f3aab3d} = s 'IAzBizRuleInterfaces interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {d97fcea1-2599-44f1-9fc3-58e9fbe09466} = s 'IAzRoleDefinition interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {881f25a5-d755-4550-957a-d503a3b34001} = s 'IAzRoleDefinitions interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {55647d31-0d5a-4fa3-b4ac-2b5f9ad5ab76} = s 'IAzRoleAssignment interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {9c80b900-fceb-4d73-a0f4-c83b0bbf2481} = s 'IAzRoleAssignments interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {e5c3507d-ad6a-4992-9c7f-74ab480b44cc} = s 'IAzPrincipalLocator interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {504d0f15-73e2-43df-a870-a64f40714f53} = s 'IAzNameResolver interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {63130a48-699a-42d8-bf01-c62ac3fb79f9} = s 'IAzObjectPicker interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } } } HKCR { AzRoles.AzBizRuleContext.1 = s 'AzBizRuleContext Class' { CLSID = s '{5c2dc96f-8d51-434b-b33c-379bccae77c3}' } AzRoles.AzBizRuleContext = s 'AzBizRuleContext Class' { CurVer = s 'AzRoles.AzBizRuleContext.1' } NoRemove CLSID { ForceRemove {5c2dc96f-8d51-434b-b33c-379bccae77c3} = s 'AzBizRuleContext Class' { ProgID = s 'AzRoles.AzBizRuleContext.1' VersionIndependentProgID = s 'AzRoles.AzBizRuleContext' ForceRemove 'Programmable' InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' } } } } CREATE TABLE [dbo].[AzMan_AzApplicationGroup] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ObjectGuid] [uniqueidentifier] NULL, [StoreID] [int] , [AppID] [int] , [ScopeID] [int] , [ParentType] [tinyint] NOT NULL , [Name] [nvarchar] (64) , [Description] [nvarchar] (1024) , [ApplicationData] [ntext] , [GroupType] [tinyint] NULL, [LdapQueryID] [int] NULL, [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_AzAuthorizationStore] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ObjectGuid] [uniqueidentifier] NULL, [Description] [nvarchar] (1024) , [Name] [nvarchar] (512) , [ApplicationData] [ntext] , [DomainTimeout] [int] NULL , [ScriptEngineTimeout] [int] NULL , [MaxScriptEngines] [int] NULL , [TargetMachine] [nvarchar] (50) , [ApplyStoreSacl] [bit] NULL , [GenerateAudits] [bit] NULL , [MajorVersion] [int] NULL, [MinorVersion] [int] NULL, [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_AzApplication] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ObjectGuid] [uniqueidentifier] NULL, [StoreID] [int] NOT NULL , [Name] [nvarchar] (512) , [Description] [nvarchar] (1024) , [ApplicationData] [ntext] , [ApplyStoreSacl] [bit] NULL , [GenerateAudits] [bit] NULL , [AuthzInterfaceClsId] [int] NULL , [ApplicationVersion] [nvarchar] (50), [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_BizRule_To_Task] ( [BizRuleID] [int] NOT NULL , [TaskID] [int] NOT NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_BizRule_To_Group] ( [BizRuleID] [int] NOT NULL , [GroupID] [int] NOT NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_BizRule] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ParentId] [int] NOT NULL , [ParentType] [tinyint] not NULL, [BizRuleImportedPath] [nvarchar] (512) , [BizRule] [ntext] , [BizRuleLanguage] [nvarchar] (64), [RowUpdateTimeStamp] [timestamp] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_LDAPQuery] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [GroupID] [int] NOT NULL , [LdapQuery] [ntext] , [RowUpdateTimeStamp] [timestamp] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Group_SIDMember] ( [GroupID] [int] NOT NULL , [MemberSID] [varbinary] (85) NOT NULL , [Member] [bit] Not NULL , [RowUpdateTimeStamp] [timestamp] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Group_AppMember] ( [GroupID] [int] NOT NULL , [ChildID] [int] NOT NULL , [Member] [bit] Not NULL , [RowUpdateTimeStamp] [timestamp] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_AzOperation] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ObjectGuid] [uniqueidentifier] NULL, [AppID] [int] NOT NULL , [Name] [nvarchar] (64) , [Description] [nvarchar] (1024) , [ApplicationData] [ntext] , [OperationID] [int] NULL, [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_AzTask] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ObjectGuid] [uniqueidentifier] NULL, [AppID] [int], [ScopeID] [int], [ParentType] [tinyint] NOT NULL , [Name] [nvarchar] (64) , [Description] [nvarchar] (1024) , [ApplicationData] [ntext] , [IsRoleDefinition] [bit] NULL , [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_AzScope] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [AppID] [int] NOT NULL , [Name] [ntext], [NameLen] [int] NOT NULL, [NameHash] [Binary] (32) NULL, [Description] [nvarchar] (1024) , [ApplicationData] [ntext] , [ObjectGuid] [uniqueidentifier] NULL, [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL, [HasSpecificUsers] [bit] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_AzRoleAssignment] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [AppID] [int], [ScopeID] [int], [ParentType] [tinyint] NOT NULL , [Name] [nvarchar] (64) , [Description] [nvarchar] (1024) , [ApplicationData] [ntext] , [ObjectGuid] [uniqueidentifier] NULL , [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Role_SIDMember] ( [RoleID] [int] NOT NULL , [MemberSID] [varbinary] (85) NOT NULL, [RowUpdateTimeStamp] [timestamp] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Role_AppMember] ( [RoleID] [int] NOT NULL , [ChildID] [int] NOT NULL , [RowUpdateTimeStamp] [timestamp] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Role_To_Task_Link] ( [TaskID] [int] NOT NULL , [RoleID] [int] NOT NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Role_To_Operation_Link] ( [OperationID] [int] NOT NULL , [RoleID] [int] NOT NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Task_To_Task_Link] ( [TaskID] [int] NOT NULL , [ChildID] [int] NOT NULL ) ON [PRIMARY] GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Azman_SQLRole]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[Azman_SQLRole] GO CREATE TABLE [dbo].[Azman_SQLRole] ( [uid] [int] not null, [ObjectID] [int] NULL , [ObjectType] [tinyint] NULL , [SQLRoleName] [nvarchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [RoleType] [tinyint] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Task_To_Operation_Link] ( [OperationID] [int] NOT NULL , [TaskID] [int] NOT NULL ) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzApplication_StoreID] ON [dbo].[AzMan_AzApplication]([StoreID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzApplicationGroup_AppID] ON [dbo].[AzMan_AzApplicationGroup]([AppID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzApplicationGroup_ScopeID] ON [dbo].[AzMan_AzApplicationGroup]([ScopeID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzApplicationGroup_Name] ON [dbo].[AzMan_AzApplicationGroup]([Name]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzOperation_Name] ON [dbo].[AzMan_AzOperation]([Name]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzOperation_AppID] ON [dbo].[AzMan_AzOperation]([AppID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzRoleAssignment_AppID] ON [dbo].[AzMan_AzRoleAssignment]([AppID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzRoleAssignment_ScopeID] ON [dbo].[AzMan_AzRoleAssignment]([ScopeID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzRoleAssignment_Name] ON [dbo].[AzMan_AzRoleAssignment]([Name]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzScope_AppID] ON [dbo].[AzMan_AzScope]([AppID]) ON [PRIMARY] GO CREATE INDEX [IX_Azman_Scope_Name] ON [dbo].[AzMan_AzScope] ([AppID], [NameHash]) ON [PRIMARY] Go CREATE INDEX [IX_AzMan_AzTask_AppID] ON [dbo].[AzMan_AzTask]([AppID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzTask_ScopeID] ON [dbo].[AzMan_AzTask]([ScopeID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzTask_Name] ON [dbo].[AzMan_AzTask]([Name]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_BizRule_Parent] ON [dbo].[AzMan_BizRule]([ParentId], [ParentType]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_Group_AppMember_GroupID] ON [dbo].[AzMan_Group_AppMember]([GroupID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_LDAPQuery_GroupID] ON [dbo].[AzMan_LDAPQuery]([GroupID]) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzApplication] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzApplication] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzAuthorizationStore] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzAuthorizationStore] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzScope] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzScope] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzApplicationGroup] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzApplicationGroup] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] , CONSTRAINT [FK_AzMan_AzAppGroup_AzMan_AzApplication] FOREIGN KEY ( [AppID] ) REFERENCES [dbo].[AzMan_AzApplication] ( [ID] ) , CONSTRAINT [FK_AzMan_AzAppGroup_AzMan_AzAuthorizationStore] FOREIGN KEY ( [StoreID] ) REFERENCES [dbo].[AzMan_AzAuthorizationStore] ( [ID] ) , CONSTRAINT [FK_AzMan_AzAppGroup_AzMan_AzScope] FOREIGN KEY ( [ScopeID] ) REFERENCES [dbo].[AzMan_AzScope] ( [ID] ) GO ALTER TABLE [dbo].[AzMan_AzApplicationGroup] WITH NOCHECK ADD CONSTRAINT [CK_AzMan_AzApplicationGroup] CHECK (sign(coalesce([StoreID],0)) + sign(coalesce([AppID],0)) + sign(coalesce([ScopeID],0)) = 1) GO ALTER TABLE [dbo].[AzMan_AzRoleAssignment] WITH NOCHECK ADD CONSTRAINT [CK_AzMan_AzRoleAssignment] CHECK (sign(coalesce([AppID],0)) + sign(coalesce([ScopeID],0)) = 1) GO ALTER TABLE [dbo].[AzMan_AzTask] WITH NOCHECK ADD CONSTRAINT [CK_AzMan_AzTask] CHECK (sign(coalesce([AppID],0)) + sign(coalesce([ScopeID],0)) = 1) GO alter table [dbo].[AzMan_AzApplicationGroup] nocheck constraint [FK_AzMan_AzAppGroup_AzMan_AzApplication] GO alter table [dbo].[AzMan_AzApplicationGroup] nocheck constraint [FK_AzMan_AzAppGroup_AzMan_AzAuthorizationStore] GO alter table [dbo].[AzMan_AzApplicationGroup] nocheck constraint [FK_AzMan_AzAppGroup_AzMan_AzScope] GO ALTER TABLE [dbo].[AzMan_AzOperation] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzOperation] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzRoleAssignment] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzRoleAssignment] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] , CONSTRAINT [FK_AzMan_Role_To_App] FOREIGN KEY ( [AppID] ) REFERENCES [dbo].[AzMan_AzApplication] ( [ID] ) , CONSTRAINT [FK_AzMan_Role_To_Scope] FOREIGN KEY ( [ScopeID] ) REFERENCES [dbo].[AzMan_AzScope] ( [ID] ) GO alter table [dbo].[AzMan_AzRoleAssignment] nocheck constraint [FK_AzMan_Role_To_App] GO alter table [dbo].[AzMan_AzRoleAssignment] nocheck constraint FK_AzMan_Role_To_Scope GO ALTER TABLE [dbo].[AzMan_AzTask] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzTask] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] , CONSTRAINT [FK_AzMan_AzTask_To_App] FOREIGN KEY ( [AppID] ) REFERENCES [dbo].[AzMan_AzApplication] ( [ID] ) , CONSTRAINT [FK_AzMan_AzTask_To_Scope] FOREIGN KEY ( [ScopeID] ) REFERENCES [dbo].[AzMan_AzScope] ( [ID] ) GO alter table [dbo].[AzMan_AzTask] nocheck constraint [FK_AzMan_AzTask_To_App] GO alter table [dbo].[AzMan_AzTask] nocheck constraint [FK_AzMan_AzTask_To_Scope] GO ALTER TABLE [dbo].[AzMan_BizRule] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_BizRule] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_LDAPQuery] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_LDAPQuery] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzOperation] WITH NOCHECK ADD CONSTRAINT [IX_AzMan_AzOperation_OpID] UNIQUE NONCLUSTERED ( [OperationID], [AppID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Group_AppMember] WITH NOCHECK ADD CONSTRAINT [IX_AzMan_Group_AppMember_member] UNIQUE NONCLUSTERED ( [GroupID], [ChildID], [Member] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Group_SIDMember] WITH NOCHECK ADD CONSTRAINT [IX_AzMan_Group_SIDMember_member] UNIQUE NONCLUSTERED ( [GroupID], [MemberSID], [Member] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Role_AppMember] WITH NOCHECK ADD CONSTRAINT [IX_AzMan_Role_AppMember_member] UNIQUE NONCLUSTERED ( [RoleID], [ChildID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Role_SIDMember] WITH NOCHECK ADD CONSTRAINT [IX_AzMan_Role_SIDMember_member] UNIQUE NONCLUSTERED ( [RoleID], [MemberSID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzApplication] ADD CONSTRAINT [FK_AzMan_AzApplication_AzMan_AzAuthorizationStore] FOREIGN KEY ( [StoreID] ) REFERENCES [dbo].[AzMan_AzAuthorizationStore] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE GO ALTER TABLE [dbo].[AzMan_AzOperation] ADD CONSTRAINT [FK_AzMan_AzOperation_AzMan_AzApplication] FOREIGN KEY ( [AppID] ) REFERENCES [dbo].[AzMan_AzApplication] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE GO ALTER TABLE [dbo].[AzMan_AzScope] ADD CONSTRAINT [FK_AzMan_AzScope_AzMan_AzApplication] FOREIGN KEY ( [AppID] ) REFERENCES [dbo].[AzMan_AzApplication] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE GO ALTER TABLE [dbo].[AzMan_BizRule_To_Group] ADD CONSTRAINT [FK_AzMan_BizRule_To_Group_AzMan_AzApplicationGroup] FOREIGN KEY ( [GroupID] ) REFERENCES [dbo].[AzMan_AzApplicationGroup] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [FK_AzMan_BizRule_To_Group_AzManBizrule] FOREIGN KEY ( [BizRuleID] ) REFERENCES [dbo].[AzMan_BizRule] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_BizRule_To_Group] PRIMARY KEY CLUSTERED ( [BizRuleID], [GroupID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_BizRule_To_Task] ADD CONSTRAINT [FK_AzMan_BizRule_To_Task_AzMan_AzTask] FOREIGN KEY ( [TaskID] ) REFERENCES [dbo].[AzMan_AzTask] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [FK_AzMan_BizRule_To_Task_AzManBizrule] FOREIGN KEY ( [BizRuleID] ) REFERENCES [dbo].[AzMan_BizRule] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_BizRule_To_Task] PRIMARY KEY CLUSTERED ( [BizRuleID], [TaskID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Group_AppMember] ADD CONSTRAINT [FK_AzMan_Group_AppMember_AzMan_AzApplicationGroup] FOREIGN KEY ( [GroupID] ) REFERENCES [dbo].[AzMan_AzApplicationGroup] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_Group_AppMember] PRIMARY KEY CLUSTERED ( [GroupID], [ChildID], [Member] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Group_SIDMember] ADD CONSTRAINT [FK_AzMan_Group_SIDMember_AzMan_AzApplicationGroup] FOREIGN KEY ( [GroupID] ) REFERENCES [dbo].[AzMan_AzApplicationGroup] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_Group_SIDMember] PRIMARY KEY CLUSTERED ( [GroupID], [MemberSID], [Member] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_LDAPQuery] ADD CONSTRAINT [FK_AzMan_LDAPQuery_AzMan_AzApplicationGroup] FOREIGN KEY ( [GroupID] ) REFERENCES [dbo].[AzMan_AzApplicationGroup] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE GO ALTER TABLE [dbo].[AzMan_Role_AppMember] ADD CONSTRAINT [FK_AzMan_Role_AppMember_AzMan_AzRoleAssignment] FOREIGN KEY ( [RoleID] ) REFERENCES [dbo].[AzMan_AzRoleAssignment] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_Role_AppMember] PRIMARY KEY CLUSTERED ( [RoleID], [ChildID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Role_SIDMember] ADD CONSTRAINT [FK_AzMan_Role_SIDMember_AzMan_AzRoleAssignment] FOREIGN KEY ( [RoleID] ) REFERENCES [dbo].[AzMan_AzRoleAssignment] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_Role_SIDMember] PRIMARY KEY CLUSTERED ( [RoleID], [MemberSID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Role_To_Operation_Link] ADD CONSTRAINT [FK_AzMan_Role_To_Operation_Link_AzMan_AzOperation] FOREIGN KEY ( [OperationID] ) REFERENCES [dbo].[AzMan_AzOperation] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [FK_AzMan_Role_To_Operation_Link_AzMan_AzRoleAssignment] FOREIGN KEY ( [RoleID] ) REFERENCES [dbo].[AzMan_AzRoleAssignment] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_Role_To_Operation_Link] PRIMARY KEY CLUSTERED ( [RoleID], [OperationID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Role_To_Task_Link] ADD CONSTRAINT [FK_AzMan_Role_To_Task_Link_AzMan_AzRoleAssignment] FOREIGN KEY ( [RoleID] ) REFERENCES [dbo].[AzMan_AzRoleAssignment] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [FK_AzMan_Role_To_Task_Link_AzMan_AzTask] FOREIGN KEY ( [TaskID] ) REFERENCES [dbo].[AzMan_AzTask] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT [PK_AzMan_Role_To_Task_Link] PRIMARY KEY CLUSTERED ( [RoleID], [TaskID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Task_To_Operation_Link] ADD CONSTRAINT [FK_AzMan_Task_To_Operation_Link_AzMan_AzOperation] FOREIGN KEY ( [OperationID] ) REFERENCES [dbo].[AzMan_AzOperation] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [FK_AzMan_Task_To_Operation_Link_AzMan_AzTask] FOREIGN KEY ( [TaskID] ) REFERENCES [dbo].[AzMan_AzTask] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_Task_To_Operation_Link] PRIMARY KEY CLUSTERED ( [OperationID], [TaskID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Task_To_Task_Link] ADD CONSTRAINT [FK_AzMan_Task_To_Task_Link_AzMan_AzTask] FOREIGN KEY ( [TaskID] ) REFERENCES [dbo].[AzMan_AzTask] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT [PK_AzMan_Task_To_Task_Link] PRIMARY KEY CLUSTERED ( [TaskID], [ChildID] ) ON [PRIMARY] GO --Trigger for updating Timestamps CREATE TRIGGER TR_updateStoreTimeStampOnAppDelete ON dbo.[AzMan_AzApplication] FOR delete AS UPDATE [AzMan_AzAuthorizationStore] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT StoreID FROM deleted) go CREATE TRIGGER TR_updateStoreTimeStampOnAppModified ON dbo.[AzMan_AzApplication] FOR INSERT,UPDATE AS UPDATE [AzMan_AzAuthorizationStore] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT StoreID FROM inserted) go CREATE TRIGGER TR_updateAppTimeStampOnScopeDelete ON dbo.[AzMan_AzScope] FOR delete AS UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT AppID FROM deleted) go CREATE TRIGGER TR_updateAppTimeStampOnScoprModified ON dbo.[AzMan_AzScope] FOR INSERT,UPDATE AS UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT AppID FROM inserted) go CREATE TRIGGER TR_UpdateAppTimeStampOnOpChange ON dbo.[AzMan_AzOperation] FOR INSERT,UPDATE AS UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT AppID FROM inserted) go CREATE TRIGGER TR_UpdateAppTimeStampOnOpDelete ON dbo.[AzMan_AzOperation] FOR delete AS UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT AppID FROM deleted) go Create Procedure UpdateGroupsParentTimeStamp ( @ParentId [int] , @ParentType [tinyint] ) as if @ParentType = 0 Begin UPDATE [AzMan_AzAuthorizationStore] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end else if @ParentType = 1 -- App Begin UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end else if @ParentType = 4 -- Scope Begin UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end GO Create Procedure UpdateTasksParentTimeStamp ( @ParentId [int] , @ParentType [tinyint] ) as if @ParentType = 1 -- App Begin UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end else if @ParentType = 4 -- Scope Begin UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end GO Create Procedure UpdateRolesParentTimeStamp ( @ParentId [int] , @ParentType [tinyint] ) as if @ParentType = 1 -- App Begin UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end else if @ParentType = 4 -- Scope Begin UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end GO CREATE TRIGGER TR_UpdateParentTimeStampOnGroupDelete ON dbo.[AzMan_AzApplicationGroup] FOR delete AS DECLARE @ParentID INT DECLARE @ParentType TinyInt Declare @StoreID INT Declare @AppID INT Declare @ScopeID INT -- We need to find the parent first SELECT @StoreID=StoreID, @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM deleted if @@RowCount = 1 Begin if @ParentType = 0 Begin set @ParentID = @StoreID End else if @ParentType = 1 Begin set @ParentID = @AppID End else if @ParentType = 4 Begin set @ParentID = @ScopeID End exec UpdateGroupsParentTimeStamp @ParentID, @ParentType End go CREATE TRIGGER TR_UpdateParentTimeStampOnGroupInsOrUpd ON dbo.[AzMan_AzApplicationGroup] FOR INSERT,UPDATE AS DECLARE @ParentID INT DECLARE @ParentType TinyInt Declare @StoreID INT Declare @AppID INT Declare @ScopeID INT SELECT @StoreID=StoreID, @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM inserted if @@RowCount = 1 Begin if @ParentType = 0 Begin set @ParentID = @StoreID End else if @ParentType = 1 Begin set @ParentID = @AppID End else if @ParentType = 4 Begin set @ParentID = @ScopeID End exec UpdateGroupsParentTimeStamp @ParentID, @ParentType End go CREATE TRIGGER TR_UpdateParentTimeStampOnTaskDelete ON dbo.[AzMan_AzTask] FOR delete AS DECLARE @ParentID INT DECLARE @ParentType TinyInt Declare @AppID INT Declare @ScopeID INT -- We need to find the parent first SELECT @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM deleted if @@RowCount = 1 Begin if @ParentType = 1 Begin set @ParentID = @AppID End else if @ParentType = 4 Begin set @ParentID = @ScopeID End exec UpdateTasksParentTimeStamp @ParentID, @ParentType end go CREATE TRIGGER TR_UpdateParentTimeStampOnTaskInsOrUpd ON dbo.[AzMan_AzTask] FOR INSERT,UPDATE AS DECLARE @ParentID INT DECLARE @ParentType TinyInt Declare @AppID INT Declare @ScopeID INT SELECT @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM inserted if @@RowCount = 1 Begin if @ParentType = 1 Begin set @ParentID = @AppID End else if @ParentType = 4 Begin set @ParentID = @ScopeID End exec UpdateTasksParentTimeStamp @ParentID, @ParentType end go CREATE TRIGGER TR_UpdateParentTimeStampOnRoleDelete ON dbo.[AzMan_AzRoleAssignment] FOR delete AS DECLARE @ParentID INT DECLARE @ParentType TinyInt Declare @AppID INT Declare @ScopeID INT -- We need to find the parent first SELECT @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM deleted if @@RowCount = 1 Begin if @ParentType = 1 Begin set @ParentID = @AppID End else if @ParentType = 4 Begin set @ParentID = @ScopeID End exec UpdateRolesParentTimeStamp @ParentID, @ParentType end go CREATE TRIGGER TR_UpdateParentTimeStampOnRoleInsOrUpd ON dbo.[AzMan_AzRoleAssignment] FOR INSERT,UPDATE AS DECLARE @ParentID INT DECLARE @ParentType TinyInt Declare @AppID INT Declare @ScopeID INT SELECT @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM inserted if @@RowCount = 1 Begin if @ParentType = 1 Begin set @ParentID = @AppID End else if @ParentType = 4 Begin set @ParentID = @ScopeID End exec UpdateRolesParentTimeStamp @ParentID, @ParentType end go CREATE TRIGGER TR_UpdateGroupsTimeStampOnSidMemberDel ON dbo.[AzMan_Group_SIDMember] FOR delete AS UPDATE [AzMan_AzApplicationGroup] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT GroupID FROM deleted) go CREATE TRIGGER TR_UpdateGroupsTimeStampOnSidMemberInsOrUpd ON dbo.[AzMan_Group_SIDMember] FOR INSERT,UPDATE AS UPDATE [AzMan_AzApplicationGroup] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT GroupID FROM inserted) go CREATE TRIGGER TR_UpdateGroupsTimeStampOnAppdMemberDel ON dbo.[AzMan_Group_AppMember] FOR delete AS UPDATE [AzMan_AzApplicationGroup] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT GroupID FROM deleted) go CREATE TRIGGER TR_UpdateGroupsTimeStampOnAppMemberInsOrUpd ON dbo.[AzMan_Group_AppMember] FOR INSERT,UPDATE AS UPDATE [AzMan_AzApplicationGroup] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT GroupID FROM inserted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnSidMemberDel ON dbo.[AzMan_Role_SIDMember] FOR delete AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM deleted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnSidMemberInsOrUpd ON dbo.[AzMan_Role_SIDMember] FOR INSERT,UPDATE AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM inserted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnAppMemberDel ON dbo.[AzMan_Role_AppMember] FOR delete AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM deleted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnAppMemberInsOrUpd ON dbo.[AzMan_Role_AppMember] FOR INSERT,UPDATE AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM inserted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnOperationDelete ON dbo.AzMan_Role_To_Operation_Link FOR DELETE AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM deleted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnOperationInsert ON dbo.AzMan_Role_To_Operation_Link FOR INSERT AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM inserted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnTaskDelete ON dbo.AzMan_Role_To_Task_Link FOR DELETE AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM deleted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnTaskInsert ON dbo.AzMan_Role_To_Task_Link FOR INSERT AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM inserted) go CREATE TRIGGER TR_UpdateTaskTimeStampOnOperationDelete ON dbo.AzMan_Task_To_Operation_Link FOR DELETE AS UPDATE [AzMan_AzTask] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT TaskID FROM deleted) go CREATE TRIGGER TR_UpdateTaskTimeStampOnOperationInsert ON dbo.AzMan_Task_To_Operation_Link FOR INSERT AS UPDATE [AzMan_AzTask] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT TaskID FROM inserted) go CREATE TRIGGER TR_UpdateTaskTimeStampOnTaskDelete ON dbo.AzMan_Task_To_Task_Link FOR DELETE AS UPDATE [AzMan_AzTask] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT TaskID FROM deleted) go CREATE TRIGGER TR_UpdateTaskTimeStampOnTaskInsert ON dbo.AzMan_Task_To_Task_Link FOR INSERT AS UPDATE [AzMan_AzTask] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT TaskID FROM inserted) go CREATE TRIGGER TR_DeleteGroupForStore ON dbo.[AzMan_AzAuthorizationStore] FOR delete AS delete [AzMan_AzApplicationGroup] where StoreID in (select ID from deleted) go CREATE TRIGGER TR_DeleteGroupForApp ON dbo.[AzMan_AzApplication] FOR delete AS delete [AzMan_AzApplicationGroup] where AppID in (SELECT ID FROM deleted) go CREATE TRIGGER TR_DeleteGroupForScope ON dbo.[AzMan_AzScope] FOR delete AS delete [AzMan_AzApplicationGroup] where ScopeID in (SELECT ID FROM deleted) go CREATE TRIGGER TR_DeleteTaskForApp ON dbo.[AzMan_AzApplication] FOR delete AS delete [AzMan_AzTask] where AppID in (SELECT ID FROM deleted) go CREATE TRIGGER TR_DeleteTaskForScope ON dbo.[AzMan_AzScope] FOR delete AS delete [AzMan_AzTask] where ScopeID in (SELECT ID FROM deleted) go CREATE TRIGGER TR_DeleteRoleForApp ON dbo.[AzMan_AzApplication] FOR delete AS delete [AzMan_AzRoleAssignment] where AppID in (SELECT ID FROM deleted) go CREATE TRIGGER TR_DeleteRoleForScope ON dbo.[AzMan_AzScope] FOR delete AS delete [AzMan_AzRoleAssignment] where ScopeID in (SELECT ID FROM deleted) go CREATE TRIGGER TR_DeleteBizRuleForTask ON dbo.[AzMan_BizRule_To_Task] FOR delete AS delete [AzMan_BizRule] where [ID] in (SELECT BizRuleID FROM deleted) go CREATE TRIGGER TR_DeleteBizRuleForGroup ON dbo.[AzMan_BizRule_To_Group] FOR delete AS delete [AzMan_BizRule] where [ID] in (SELECT BizRuleID FROM deleted) go IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_GenerateObjectAudit' and type = 'P') DROP PROCEDURE [AzMan_SP_GenerateObjectAudit] GO Create Procedure [AzMan_SP_GenerateObjectAudit] ( @success int, @event int, @actObjectType tinyint, @actObjectName nvarchar(512), @actObjectGuid uniqueidentifier, @targetType tinyint, @targetName nvarchar(512), @targetGuid uniqueidentifier, @otherInfo nvarchar(1024) ) AS DECLARE @UserName nvarchar(256) DECLARE @UserSid varbinary(85) SELECT @UserName = User_Name() SELECT @UserSid = SUSER_SID() -- events: -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE Exec master.dbo.AzGenerateAudit @success, @event, @actObjectType, @actObjectName, @actObjectGuid, 0, @UserName, @UserSid, @targetType, @targetName, @targetGuid, @otherInfo GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_GenerateMemberAudit' and type = 'P') DROP PROCEDURE [AzMan_SP_GenerateMemberAudit] GO Create Procedure [AzMan_SP_GenerateMemberAudit] ( @success int, @event int, @actObjectType tinyint, @actObjectName nvarchar(512), @actObjectGuid uniqueidentifier, @memberName nvarchar(256), @memberSid varbinary(85), @memberFlag int, @otherInfo nvarchar(1024) ) AS DECLARE @UserName nvarchar(256) DECLARE @UserSid varbinary(85) SELECT @UserName = User_Name() SELECT @UserSid = SUSER_SID() -- events: -- 4 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN -- 5 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE -- memberFlags: -- 0 for non-members -- 1 for members -- 2 for admins -- 3 for readers -- 4 for delegated users Exec master.dbo.AzGenerateAudit @success, @event, @actObjectType, @actObjectName, @actObjectGuid, 0, @UserName, @UserSid, @memberName, @memberSid, @memberFlag, @otherInfo GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_GenerateGenericAudit' and type = 'P') DROP PROCEDURE [AzMan_SP_GenerateGenericAudit] GO Create Procedure [AzMan_SP_GenerateGenericAudit] ( @success int, @actObjectType tinyint, @actObjectName nvarchar(512), @actObjectGuid uniqueidentifier, @otherInfo nvarchar(1024) ) AS DECLARE @UserName nvarchar(256) DECLARE @UserSid varbinary(85) SELECT @UserName = User_Name() SELECT @UserSid = SUSER_SID() -- events: -- 6 for SE_AUDITID_AZ_SQL_OTHER Exec master.dbo.AzGenerateAudit @success, 6, @actObjectType, @actObjectName, @actObjectGuid, 0, @UserName, @UserSid, @otherInfo GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPU_SqlRoleUpdated' and type = 'P') DROP PROCEDURE AzMan_SPU_SqlRoleUpdated GO CREATE PROCEDURE dbo.AzMan_SPU_SqlRoleUpdated ( @Return int output, @ObjectID int, @ObjectType tinyint ) AS DECLARE @OldChildTS timestamp -- We can't just manually update the row timestamp because it is a timestamp column. -- So we set-and-reset the ChildUpdateTimeStamp for the update of the timestamp column IF @ObjectType = 0 BEGIN SELECT @OldChildTS = [ChildUpdateTimeStamp] FROM [AzMan_AzAuthorizationStore] WHERE ID = @ObjectID UPDATE [AzMan_AzAuthorizationStore] SET [ChildUpdateTimeStamp]=@OldChildTS + 1 WHERE ID = @ObjectID UPDATE [AzMan_AzAuthorizationStore] SET [ChildUpdateTimeStamp]=@OldChildTS WHERE ID = @ObjectID END ELSE IF @ObjectType = 1 BEGIN SELECT @OldChildTS = [ChildUpdateTimeStamp] FROM [AzMan_AzApplication] WHERE ID = @ObjectID UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@OldChildTS + 1 WHERE ID = @ObjectID UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@OldChildTS WHERE ID = @ObjectID END ELSE IF @ObjectType = 4 BEGIN SELECT @OldChildTS = [ChildUpdateTimeStamp] FROM [AzMan_AzScope] WHERE ID = @ObjectID UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@OldChildTS + 1 WHERE ID = @ObjectID UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@OldChildTS WHERE ID = @ObjectID END SET @Return = @@ERROR RETURN @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_GetRoleMemberCount' and type = 'P') DROP PROCEDURE AzMan_SP_GetRoleMemberCount GO CREATE PROCEDURE dbo.AzMan_SP_GetRoleMemberCount ( @SqlRoleName nvarchar(64), @count int output ) AS select @count = count(*) from sysusers u, sysusers g, sysmembers m where g.uid = m.groupuid and g.name = @SqlRoleName and g.issqlrole = 1 and u.uid = m.memberuid RETURN GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_GetSQLRole' and type = 'P') DROP PROCEDURE AzMan_SP_GetSQLRole GO Create Procedure [AzMan_SP_GetSQLRole] ( @Return [int] output, @ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@SQLRoleName [nvarchar] (64) output ) As Set @Return = 0 Select @SQLRoleName = SQLRoleName from Azman_SQLRole where ObjectID = @ID and ObjectType = @ObjectType and RoleType = @RoleType Go IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPI_SQLRole' and type = 'P') DROP PROCEDURE AzMan_SPI_SQLRole GO Create PROCEDURE dbo.AzMan_SPI_SQLRole ( @Return [int] output ,@ID int ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@SQLRoleName [nvarchar] (64) output ) AS Set @SQLRoleName = '' DECLARE @myid uniqueidentifier DECLARE @RoleID smallint DECLARE @Ret [int] declare @dbName nvarchar (255) Set @Return = 0 SET @myid = NEWID() Set @SQLRoleName = CONVERT(varchar(64), @myid) Set @RoleID = 1 If Is_Member('db_owner') = 1 or Is_Member('db_securityadmin') = 1 Begin EXEC @Ret = sp_addrole @SQLRoleName End else begin Set @dbName = db_name() Exec master.dbo.xp_AzManAddRole @Ret output, @ID, @ObjectType, @dbName, @SQLRoleName End if @Ret = 0 Begin select @RoleID = uid from sysusers where (name = @SQLRoleName) and (issqlrole = 1) Insert Into [dbo].[Azman_SQLRole] ( [uid], [ObjectID], [ObjectType], [SQLRoleName], [RoleType] ) Values ( @RoleID, @ID, @ObjectType, @SQLRoleName, @RoleType ) End Else Begin Set @Return = -1 End Return @Return go IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPI_SQLRole_From_XP' and type = 'P') DROP PROCEDURE AzMan_SPI_SQLRole_From_XP GO Create PROCEDURE dbo.AzMan_SPI_SQLRole_From_XP ( @Return [int] output ,@SQLRoleName [nvarchar] (64) ) AS DECLARE @RoleID smallint DECLARE @Ret [int] Set @Return = -1 Set @RoleID = -1 EXEC @Ret = sp_addrole @SQLRoleName if @Ret = 0 Begin select @RoleID = uid from sysusers where (name = @SQLRoleName) and (issqlrole = 1) if @RoleID <> -1 Begin set @Return = 0 End End Else Begin Set @Return = -1 End Return @Return go IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPI_Add_User_To_SQLRole_From_XP' and type = 'P') DROP PROCEDURE AzMan_SPI_Add_User_To_SQLRole_From_XP GO CREATE PROCEDURE AzMan_SPI_Add_User_To_SQLRole_From_XP ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@UserName [nvarchar] (255) ) AS DECLARE @Ret [int] Declare @NameInDB [nvarchar] (255) Declare @SQLRoleName [nvarchar] (64) DECLARE @RoleMemberCount [int] Set @Return = -1 Set @SQLRoleName = NULL Exec dbo.[AzMan_SP_GetSQLRole] @Ret output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output if len(@SQLRoleName) > 0 Begin set @NameInDB = null SET @Ret = 0 -- if no such loging yet, then grant the user login IF NOT EXISTS (SELECT * FROM master..syslogins WHERE UPPER(loginname) = UPPER(@UserName) AND hasaccess=1) BEGIN EXEC @Ret = sp_grantlogin @UserName END -- if the user does not have access to the db IF @Ret= 0 AND NOT EXISTS (SELECT * FROM sysusers WHERE UPPER(Name) = UPPER(@UserName) AND hasdbaccess = 1) BEGIN EXEC @Ret = sp_grantdbaccess @UserName, @NameInDB output END -- workaround for now sp_grantdbaccess returns 1 when the user already has access if @Ret= 0 or len(@NameInDB) > 0 BEGIN Exec @Ret = sp_addrolemember @SQLRoleName, @UserName -- if the user is successfully added to a scope's role IF @Ret = 0 AND @ObjectType = 4 -- scope BEGIN EXEC AzMan_SP_GetRoleMemberCount @SQLRoleName, @RoleMemberCount output IF @RoleMemberCount > 0 UPDATE dbo.AzMan_AzScope SET dbo.AzMan_AzScope.HasSpecificUsers = 1 WHERE dbo.AzMan_AzScope.ID = @ID END END End Set @Return = @Ret GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPI_Add_User_To_SQLRole' and type = 'P') DROP PROCEDURE AzMan_SPI_Add_User_To_SQLRole GO CREATE PROCEDURE AzMan_SPI_Add_User_To_SQLRole ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@SQLRoleName [nvarchar] (64) ,@UserSid varbinary(85) ,@UserName [nvarchar] (255) ,@SaclIsOn [bit] ) AS DECLARE @Ret [int] Declare @NameInDB [nvarchar] (255) DECLARE @ObjectName nvarchar(512) DECLARE @ObjectGuid uniqueidentifier DECLARE @MemberType int declare @dbName nvarchar (255) DECLARE @RoleMemberCount [int] Set @Return = -1 -- get info for auditing IF @SaclIsOn = 1 BEGIN IF @ObjectType = 0 -- store SELECT @ObjectName = store.Name, @ObjectGuid=store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID=@ID IF @ObjectType = 1 -- app SELECT @ObjectName = app.Name, @ObjectGuid=app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID=@ID IF @ObjectType = 4 -- scope SELECT @ObjectName = scope.Name, @ObjectGuid=scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID=@ID IF @RoleType = 1 -- admin SET @MemberType = 2 IF @RoleType = 2 -- reader SET @MemberType = 3 IF @RoleType = 3 -- delegated users SET @MemberType = 4 END set @NameInDB = null If Is_Member('db_owner') = 1 Begin exec AzMan_SPI_Add_User_To_SQLRole_From_XP @Return output, @ID, @ObjectType, @RoleType, @UserName End else Begin Set @dbName = db_name() Exec master.dbo.xp_AzManAddUserToRole @Return output, @ID, @ObjectType, @RoleType, @dbName, @UserName End -- trigger the parent object's update timestamp IF @Return = 0 BEGIN Exec AzMan_SPU_SqlRoleUpdated @Ret output, @ID, @ObjectType IF @ObjectType = 4 -- scope BEGIN EXEC AzMan_SP_GetRoleMemberCount @SQLRoleName, @RoleMemberCount output IF @RoleMemberCount > 0 UPDATE dbo.AzMan_AzScope SET dbo.AzMan_AzScope.HasSpecificUsers = 1 WHERE dbo.AzMan_AzScope.ID = @ID END END -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateMemberAudit] @Return, 4, -- 0 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN @ObjectType, @ObjectName, @ObjectGuid, @UserName, @UserSid, @MemberType, -- member type N'' -- no other info END Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPI_Create_SqlRole_For_Object' and type = 'P') DROP PROCEDURE AzMan_SPI_Create_SqlRole_For_Object GO CREATE PROCEDURE AzMan_SPI_Create_SqlRole_For_Object ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ) AS DECLARE @Ret [int] DECLARE @SQLRoleName [nvarchar] (255) DECLARE @SaclIsOn [bit] DECLARE @AccessAtObjType tinyint Set @SaclIsOn = 0 Set @Return = 0 Exec dbo.[AzMan_SP_GetSQLRole] @Ret output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output if @SQLRoleName Is NULL begin Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @ID, @ObjectType, 1, @SaclIsOn output if @Return <> 1 begin Set @Return = -5 goto Done end -- we have proper access, then insert the role Exec AzMan_SPI_SQLRole @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output end Done: Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPI_Add_User_To_Role' and type = 'P') DROP PROCEDURE AzMan_SPI_Add_User_To_Role GO CREATE PROCEDURE AzMan_SPI_Add_User_To_Role ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@UserSid varbinary(85) ,@UserName [nvarchar] (255) ) AS DECLARE @Ret [int] DECLARE @SQLRoleName [nvarchar] (255) Declare @NameInDB [nvarchar] (255) DECLARE @SaclIsOn [bit] DECLARE @AccessAtObjType tinyint Set @SaclIsOn = 0 Set @Return = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @ID, @ObjectType, 1, @SaclIsOn output IF @Return <> 1 BEGIN Set @Return = -5 goto Done END Set @Return = -1 Exec dbo.[AzMan_SP_GetSQLRole] @Ret output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output if @SQLRoleName Is NULL Begin Exec AzMan_SPI_SQLRole @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output End if @SQLRoleName is NOT NULL Begin Exec AzMan_SPI_Add_User_To_SQLRole @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName, @UserSid, @UserName, @SaclIsOn End Else Begin Set @Return = -1 End Done: Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPD_User_From_SQLRole_From_XP' and type = 'P') DROP PROCEDURE AzMan_SPD_User_From_SQLRole_From_XP GO CREATE PROCEDURE AzMan_SPD_User_From_SQLRole_From_XP ( @Return [int] output ,@SQLRoleName [nvarchar] (64) ,@UserName [nvarchar] (255) ) AS DECLARE @Ret [int] SET NOCOUNT ON Set @Return = -1 Exec @Ret = sp_droprolemember @SQLRoleName, @UserName if @Ret <> 0 Begin Set @Return = -1 End Else Begin Set @Return = 0 End SET NOCOUNT OFF Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPD_User_From_SQLRole' and type = 'P') DROP PROCEDURE AzMan_SPD_User_From_SQLRole GO CREATE PROCEDURE AzMan_SPD_User_From_SQLRole ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@SQLRoleName [nvarchar] (64) ,@UserSid varbinary(85) ,@UserName [nvarchar] (255) ,@SaclIsOn [bit] ) AS DECLARE @Ret [int] DECLARE @ObjectName nvarchar(512) DECLARE @ObjectGuid uniqueidentifier DECLARE @MemberType int Declare @DbName [nvarchar] (255) DECLARE @RoleMemberCount int DECLARE @OtherRoleMemberCount int DECLARE @OtherRoleName [nvarchar] (64) Set @Return = -1 If is_Member('db_owner') = 1 or is_Member('db_securityadmin') = 1 or is_member('db_accessyadmin') = 1 Begin Exec @Ret = sp_droprolemember @SQLRoleName, @UserName End else begin Set @DbName = db_name() Exec master.dbo.xp_AzManRemoveUserFromRole @Ret output, @ID, @ObjectType, @DbName, @SQLRoleName, @UserName End if @Ret <> 0 Begin Set @Return = -1 End Else Begin -- trigger the parent object's update timestamp Set @Return = 0 Exec AzMan_SPU_SqlRoleUpdated @Return output, @ID, @ObjectType -- if the delete is successful to a scope role IF @Return = 0 AND @ObjectType = 4 BEGIN -- we need to get the other role's name for the scope SET @OtherRoleName = NULL IF @RoleType = 1 -- admin Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, 2, @OtherRoleName output ELSE IF @RoleType = 2 -- reader Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, 1, @OtherRoleName output SET @RoleMemberCount = 0 SET @OtherRoleMemberCount = 0 IF @SQLRoleName IS NOT NULL EXEC AzMan_SP_GetRoleMemberCount @SQLRoleName, @RoleMemberCount output IF @OtherRoleName IS NOT NULL EXEC AzMan_SP_GetRoleMemberCount @OtherRoleName, @OtherRoleMemberCount output IF @RoleMemberCount = 0 AND @OtherRoleMemberCount = 0 UPDATE dbo.AzMan_AzScope SET dbo.AzMan_AzScope.HasSpecificUsers = 0 WHERE dbo.AzMan_AzScope.ID = @ID END End -- get info for auditing IF @SaclIsOn = 1 BEGIN IF @ObjectType = 0 -- store SELECT @ObjectName = store.Name, @ObjectGuid=store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID=@ID IF @ObjectType = 1 -- app SELECT @ObjectName = app.Name, @ObjectGuid=app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID=@ID IF @ObjectType = 4 -- scope SELECT @ObjectName = scope.Name, @ObjectGuid=scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID=@ID IF @RoleType = 1 -- admin SET @MemberType = 2 IF @RoleType = 2 -- reader SET @MemberType = 3 IF @RoleType = 3 -- delegated users SET @MemberType = 4 -- generate an audit EXEC [AzMan_SP_GenerateMemberAudit] @Return, 5, -- 0 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE @ObjectType, @ObjectName, @ObjectGuid, @UserName, @UserSid, @MemberType, -- member type N'' -- no other info END Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPD_User_From_Role' and type = 'P') DROP PROCEDURE AzMan_SPD_User_From_Role GO CREATE PROCEDURE AzMan_SPD_User_From_Role ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@UserSid varbinary(85) ,@UserName [nvarchar] (255) ) AS DECLARE @Ret [int] DECLARE @SQLRoleName [nvarchar] (64) DECLARE @SaclIsOn [bit] DECLARE @AccessAtObjType tinyint Set @SaclIsOn = 0 Set @Return = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @ID, @ObjectType, 1, @SaclIsOn output IF @Return <> 1 BEGIN Set @Return = -5 goto Done END Set @Return = -1 Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output if @SQLRoleName Is not NULL Begin Exec AzMan_SPD_User_From_SQLRole @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName, @UserSid, @UserName, @SaclIsOn End Done: Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Get_DBOwners' and type = 'P') DROP PROCEDURE AzMan_SPS_Get_DBOwners GO CREATE PROCEDURE AzMan_SPS_Get_DBOwners ( @Return [int] output, @ID [int] ) AS SET NOCOUNT ON -- @ID is not used. But our internal implementation requires non-empty -- parameter set where @Return is not considered one of them. EXEC @Return = sp_helprolemember 'db_owner' SET NOCOUNT OFF Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Get_Role_For_Object' and type = 'P') DROP PROCEDURE AzMan_SPS_Get_Role_For_Object GO CREATE PROCEDURE AzMan_SPS_Get_Role_For_Object ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ) AS DECLARE @SQLRoleName [nvarchar] (64) SET NOCOUNT ON Set @SQLRoleName = NULL Set @Return = 0 Select @SQLRoleName = SQLRoleName From [dbo].[Azman_SQLRole] where [ObjectID] = @ID and [ObjectType] = @ObjectType and [RoleType] = @RoleType if @SQLRoleName is not NULL Begin EXEC @Return = sp_helprolemember @SQLRoleName End SET NOCOUNT OFF Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_Get_Object_Path_For_Container' and type = 'P') DROP PROCEDURE AzMan_SP_Get_Object_Path_For_Container GO Create Procedure [AzMan_SP_Get_Object_Path_For_Container] ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@StoreID [int] output ,@AppID [int] output ,@ScopeID [int] output ) AS DECLARE @RowCount INT, @Error INT Declare @ParentID [int] Declare @ParentType [int] Set @StoreID = -1 Set @AppID = -1 Set @ScopeID = -1 Set @Return = 0 if @ObjectType = 0 --Store Begin Set @StoreID = @ID End if @ObjectType = 1 -- App Begin Select @StoreID=StoreID From AzMan_AzApplication where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount <> 1 Begin if @Error = 0 Begin Set @Return = -1168 -- Record not found End Else Begin Set @Return = @Error End End else Begin Set @AppID = @ID End End If @ObjectType = 4 -- Scope Begin Select @AppID = AppID From [AzMan_AzScope] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount = 1 Begin Select @StoreID = StoreID From AzMan_AzApplication where ID = @AppID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount <> 1 Begin if @Error = 0 Begin Set @Return = -1168 -- Record not found End Else Begin Set @Return = @Error End End else Begin Set @ScopeID = @ID End End else Begin if @Error = 0 Begin Set @Return = -1168 -- Record not found End Else Begin Set @Return = @Error End End End Return @Return Go IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_Get_Object_Path' and type = 'P') DROP PROCEDURE AzMan_SP_Get_Object_Path GO Create Procedure [AzMan_SP_Get_Object_Path] ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@StoreID [int] output ,@AppID [int] output ,@ScopeID [int] output ) AS Declare @ParentID [int] Declare @ParentType [int] DECLARE @RowCount INT, @Error INT Set @StoreID = -1 Set @AppID = -1 Set @ScopeID = -1 Set @Return = 0 if @ObjectType = 0 --Store Begin Exec AzMan_SP_Get_Object_Path_For_Container @Return output, @ID, @ObjectType , @StoreID output, @AppID output, @ScopeID output goto Return_Get_ObjPath End if @ObjectType = 1 -- App Begin Exec AzMan_SP_Get_Object_Path_For_Container @Return output, @ID, @ObjectType , @StoreID output, @AppID output, @ScopeID output goto Return_Get_ObjPath End If @ObjectType = 2 -- Operation Begin Select @AppID= AppID From [AzMan_AzOperation] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount <> 1 Begin if @Error = 0 Begin Set @Return = -1168 -- Record not found End Else Begin Set @Return = @Error End End Else Begin Select @StoreID =StoreID From AzMan_AzApplication where ID = @AppID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount <> 1 Begin if @Error = 0 Begin Set @Return = -1168 -- Record not found End Else Begin Set @Return = @Error End End End goto Return_Get_ObjPath End If @ObjectType = 4 -- Scope Begin Exec AzMan_SP_Get_Object_Path_For_Container @Return output, @ID, @ObjectType , @StoreID output, @AppID output, @ScopeID output goto Return_Get_ObjPath End If @ObjectType = 3 -- Task Begin Select @ParentID = case ParentType when 1 then AppID when 4 then ScopeID end, @ParentType = ParentType from [AzMan_AzTask] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT End If @ObjectType = 5 -- Group Begin Select @ParentID = case ParentType when 0 then StoreID when 1 then AppID when 4 then ScopeID end, @ParentType = ParentType from [AzMan_AzApplicationGroup] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT End If @ObjectType = 6 -- Role Begin Select @ParentID = case ParentType when 1 then AppID when 4 then ScopeID end, @ParentType = ParentType from AzMan_AzRoleAssignment where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT End if @RowCount <> 1 Begin if @Error = 0 Begin Set @Return = -1168 -- Record not found End Else Begin Set @Return = @Error End End else Begin exec AzMan_SP_Get_Object_Path_For_Container @Return output, @ParentID, @ParentType, @StoreID output, @AppID output, @ScopeID output End Return_Get_ObjPath: Return @Return Go -- Access Check Store Procedure IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_AccessCheck_For_Container' and type = 'P') DROP PROCEDURE AzMan_SP_AccessCheck_For_Container GO Create Procedure [AzMan_SP_AccessCheck_For_Container] ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ) As -- Check MemberShip starting with current node and going up Declare @SQLRoleName [nvarchar](64) Declare @SQLRoleType [TinyInt] Set @Return = -5 -- Check Admin Set @SQLRoleType = 1 Set @SQLRoleName = '' Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, @SQLRoleType, @SQLRoleName = @SQLRoleName output -- Is a member of admin if @SQLRoleName <> '' Begin If Is_Member(@SQLRoleName) = 1 Begin Set @Return = 1 -- Admin Access Goto Exit_AzMan_SP_AccessCheck_For_Container End End -- Is a member of Reader? Set @SQLRoleType = 2 Set @SQLRoleName = '' Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, @SQLRoleType, @SQLRoleName = @SQLRoleName output if @SQLRoleName <> '' Begin If Is_Member(@SQLRoleName) = 1 Begin Set @Return = 2 -- Reader Access Goto Exit_AzMan_SP_AccessCheck_For_Container End End -- Is a member of Delegated Users? Set @SQLRoleType = 3 Set @SQLRoleName = '' Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, @SQLRoleType, @SQLRoleName = @SQLRoleName output if @SQLRoleName <> '' Begin If Is_Member(@SQLRoleName) = 1 Begin Set @Return = 3 -- Delegated user Access Goto Exit_AzMan_SP_AccessCheck_For_Container End End Exit_AzMan_SP_AccessCheck_For_Container: Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_AccessCheck' and type = 'P') DROP PROCEDURE AzMan_SP_AccessCheck GO Create Procedure [AzMan_SP_AccessCheck] ( @Return [int] output ,@AccessAtObjType [tinyint] output ,@ID [int] ,@ObjectType [tinyint] ,@CheckSacl [bit] = 0 ,@SaclIsOn [bit] output ) As -- Check MemberShip starting with current node and going up Declare @SQLRoleName [nvarchar](64) Declare @SQLRoleType [TinyInt] Declare @StoreID [int] Declare @AppID [int] Declare @ScopeID [int] Declare @StoreAccess [int] -- If this bit is set we know access check result, but we need to do SACL Declare @CheckSaclOnly [int] Declare @TempRet [int] Set @Return = -5 Set @StoreAccess = -5 Set @AccessAtObjType = 0 -- default to SACL off Set @SaclIsOn = 0 Set @CheckSaclOnly = 0 -- If the user is a DB_Owner, he has full control if Is_Member('db_owner') = 1 Begin set @Return = 1 --print 'User is member of db_Owner' IF @CheckSacl = 0 Goto Exit_AzMan_SP_AccessCheck ELSE Set @CheckSaclOnly = 1 End else if Is_Member('db_datawriter') = 1 -- If the user is a data writer he has full control Begin set @Return = 1 --print 'User is member of db_datawriter' IF @CheckSacl = 0 Goto Exit_AzMan_SP_AccessCheck ELSE Set @CheckSaclOnly = 1 End else if Is_Member('db_datareader') = 1 -- If the user is a data reader he has read control Begin set @Return = 2 --print 'User is member of db_datareader' IF @CheckSacl = 0 Goto Exit_AzMan_SP_AccessCheck ELSE Set @CheckSaclOnly = 1 End IF @CheckSaclOnly = 1 Set @TempRet = @Return -- Go all the way up to the store -- Check Access from top to bottom Exec AzMan_SP_Get_Object_Path @Return output, @ID, @ObjectType , @StoreID output, @AppID output, @ScopeID output -- Error ? Record not found if @Return < 0 Begin goto Exit_AzMan_SP_AccessCheck End -- we honor application's SACL setting over the store's IF @CheckSacl = 1 AND @StoreID <> -1 AND @AppID <> -1 BEGIN SELECT @SaclIsOn = IsNull(ApplyStoreSacl, 0) FROM AzMan_AzApplication App WHERE App.ID = @AppID AND App.StoreID = @StoreID END ELSE IF @CheckSacl = 1 AND @StoreID <> -1 BEGIN SELECT @SaclIsOn = IsNull(ApplyStoreSacl, 0) FROM AzMan_AzAuthorizationStore Store WHERE Store.ID = @StoreID END -- if we are only to check SACL settings (in other words, we already know the answer of access) IF @CheckSaclOnly = 1 Goto Exit_AzMan_SP_AccessCheck if @StoreID <> -1 Begin set @AccessAtObjType = 0 Exec AzMan_SP_AccessCheck_For_Container @Return output, @StoreID, 0 Set @StoreAccess = @Return if @Return <= 2 Begin Goto Exit_AzMan_SP_AccessCheck End End else Begin Goto Exit_AzMan_SP_AccessCheck End if @AppID <> -1 Begin set @AccessAtObjType = 1 Exec AzMan_SP_AccessCheck_For_Container @Return output, @AppID, 1 if @Return <= 2 Begin Goto Exit_AzMan_SP_AccessCheck End End else Begin Goto Exit_AzMan_SP_AccessCheck End if @ScopeID <> -1 Begin set @AccessAtObjType = 4 Exec AzMan_SP_AccessCheck_For_Container @Return output, @ScopeID, 4 if @Return <= 2 Begin Goto Exit_AzMan_SP_AccessCheck End End Begin Goto Exit_AzMan_SP_AccessCheck End Exit_AzMan_SP_AccessCheck: IF @CheckSaclOnly = 1 Set @Return = @TempRet Return @Return GO Create PROCEDURE dbo.AzMan_SPS_Get_StoreIDByName ( @Return [int] output, @ID int OUTPUT, @Name nvarchar(512) ) AS Set @ID = -1 -- this means it doesn't exist Set @Return = 0 SELECT @ID = ID FROM AzMan_AzAuthorizationStore WHERE Name = @Name RETURN @@RowCount go Create Procedure [AzMan_SP_Check_Dup_Task_For_Given_Parent] ( @Return [int] output, @ParentID [int], @ParentType [tinyint] , @ID [int], @Name [nvarchar](64) ) AS Set @Return = 0 -- Make sure that the name doesn't exist at the same level if @ParentType = 1 Begin if Exists( Select [Name] from [dbo].[AzMan_AzTask] where ParentType = @ParentType and AppID = @ParentID and ID <> IsNULL(@ID,0) and LOWER([Name]) = LOWER(@Name) ) Begin Set @Return = -183 -- Same Name exist End End else if @ParentType = 4 Begin if Exists( Select [Name] from [dbo].[AzMan_AzTask] where ParentType = @ParentType and ScopeID = @ParentID and ID <> IsNULL(@ID,0) and LOWER([Name]) = LOWER(@Name) ) Begin Set @Return = -183 -- Same Name exist End End else Begin Set @Return = -87 -- invalid parameter End Return @Return go Create Procedure [AzMan_SP_Check_Dup_Task] ( @Return [int] output, @ParentID [int], @ParentType [tinyint] , @ID [int], @Name [nvarchar](64) ) AS Declare @ParentAppID [int] Set @Return = 0 Set @ParentAppID = 0 -- First Check the current Parent exec AzMan_SP_Check_Dup_Task_For_Given_Parent @Return output, @ParentID, @ParentType, @ID, @Name if @Return <> 0 Begin Return(@Return) End -- Behave differently depending on the object type of the parent object -- A task that is a child of an application -- cannot have the same name as any tasks that are children of any of the child scopes. if @ParentType = 1 -- Application Begin Set @ParentAppID = @ParentID if Exists( Select [Name] from [dbo].[AzMan_AzTask] where ( ParentType = 4 ) -- All Child scope and LOWER([Name]) = LOWER(@Name) and (@ParentID IN ( Select AppID from AzMan_AzScope where AppID = @ParentID and ID <> IsNULL(@ID,0)) ) ) Begin Set @Return = -183 -- Same Name exist End End else if @ParentType = 4 -- Scope Begin -- A task that is a child of a scope, -- cannot have the same name as tasks that are children of the application. -- Find the Parent App Select @ParentAppID = [AppID] from AzMan_AzScope where [ID] = @ParentID if ( @ParentAppID = 0 ) Begin Set @Return = -1 -- General Error End else Begin exec AzMan_SP_Check_Dup_Task_For_Given_Parent @Return output, @ParentAppID, 1, @ID, @Name End End -- Tasks and operations share a namespace so ensure there -- isn't an operation by this name. if @Return = 0 Begin if Exists( Select [Name] from [dbo].[AzMan_AzOperation] where LOWER([Name]) = LOWER(@Name) and (@ParentAppID = AppID) ) Begin Set @Return = -183 -- Same Name exist End End Return @Return go Create Procedure [AzMan_SP_Check_Dup_RoleAssignment] ( @Return [int] output, @ParentID [int], @ParentType [tinyint], @ID [int], @Name [nvarchar](64) ) AS Set @Return = 0 if @ParentType = 1 Begin if Exists( Select [Name] from [dbo].[AzMan_AzRoleAssignment] where ParentType = @ParentType and AppID = @ParentID and ID <> IsNULL(@ID,0) and LOWER([Name]) = LOWER(@Name) ) Begin Set @Return = -183 -- Same Name exist End End else if @ParentType = 4 Begin if Exists( Select [Name] from [dbo].[AzMan_AzRoleAssignment] where ParentType = @ParentType and ScopeID = @ParentID and ID <> IsNULL(@ID,0) and LOWER([Name]) = LOWER(@Name) ) Begin Set @Return = -183 -- Same Name exist End End Else Begin Set @Return = -1 End Return @Return go Create Procedure [AzMan_SP_Check_Dup_Application] ( @Return [int] output, @StoreID [int], @ID [int], @Name [nvarchar](512) ) AS Set @Return = 0 -- Make sure that the name doesn't exist at the same level if Exists( Select [Name] from [dbo].[AzMan_AzApplication] where StoreID = @StoreID and ID <> IsNULL(@ID,0) and LOWER([Name]) = LOWER(@Name) ) Begin Set @Return = -183 -- Same Name exist End Return @Return go Create Procedure [AzMan_SP_Check_Dup_Scope] ( @Return [int] output, @AppID [int], @ID [int], @NameHash [binary] (32) ) AS Set @Return = 0 -- Make sure that the name doesn't exist at the same level begin if Exists( Select ID from [dbo].[AzMan_AzScope] where ID <> IsNULL(@ID,0) and AppID = @AppID and [NameHash] = @NameHash ) Begin Set @Return = -183 -- Same Name exist End end Return @Return go Create Procedure [AzMan_SP_Check_Dup_Operation] ( @Return [int] output, @AppID [int], @ID [int], @Name [nvarchar](64) ) AS Set @Return = 0 -- Make sure that the name doesn't exist at the same level if Exists( Select [Name] from [dbo].[AzMan_AzOperation] where AppID = @AppID and ID <> IsNULL(@ID,0) and LOWER([Name]) = LOWER(@Name) ) Begin Set @Return = -183 -- Same Name exist End Return @Return go Create Procedure [AzMan_SP_Check_Dup_Group_For_Given_Parent] ( @Return [int] output, @ParentID [int], @ParentType [tinyint] , @ID [int], @Name [nvarchar](64) ) AS Set @Return = 0 if @ParentType = 0 Begin if Exists( Select [Name] from [dbo].[AzMan_AzApplicationGroup] where ( ParentType = @ParentType ) and (StoreID = @ParentID) and LOWER([Name]) = LOWER(@Name) and ID <> IsNULL(@ID,0) ) Begin Set @Return = -183 -- Same Name exist End End else if @ParentType = 1 Begin if Exists( Select [Name] from [dbo].[AzMan_AzApplicationGroup] where ( ParentType = @ParentType ) and (AppID = @ParentID) and LOWER([Name]) = LOWER(@Name) and ID <> IsNULL(@ID,0) ) Begin Set @Return = -183 -- Same Name exist End End else if @ParentType = 4 Begin if Exists( Select [Name] from [dbo].[AzMan_AzApplicationGroup] where ( ParentType = @ParentType ) and (ScopeID = @ParentID) and LOWER([Name]) = LOWER(@Name) and ID <> IsNULL(@ID,0) ) Begin Set @Return = -183 -- Same Name exist End End Else Begin Set @Return = -1 Return (@Return) End Return(@Return) GO Create Procedure [AzMan_SP_Check_Dup_Group] ( @Return [int] output, @ParentID [int], @ParentType [tinyint] , @ID [int], @Name [nvarchar](64) ) AS Declare @ParentStore [int] Declare @ParentAppID [int] Set @Return = 0 Set @ParentStore = 0 Set @ParentAppID = 0 -- First Check the current Parent exec AzMan_SP_Check_Dup_Group_For_Given_Parent @Return output, @ParentID, @ParentType, @ID, @Name if @Return <> 0 Begin Return(@Return) End -- Behave differently depending on the object type of the parent object -- -- A group that is a child of the authorization store, -- cannot have the same name as any groups that are children of any of the child applications, and -- cannot have the same name as any groups that are children of any of the grandchild child scopes. if @ParentType = 0 -- Auth Store Begin if Exists( Select ID from [dbo].[AzMan_AzApplicationGroup] where ( ( ID <> IsNULL(@ID,0) ) and ( [Name] = @Name ) and ( ( ( ParentType = 1 ) and -- Application ( AppID in ( select ID from AzMan_AzApplication where StoreID = @ParentID ) ) ) or ( ( ParentType = 4 ) and -- Scope ( ScopeID in ( select ID from AzMan_AzScope where AppID in (select ID from AzMan_AzApplication where StoreID = @ParentID) ) ) ) ) ) ) Begin Set @Return = -183 -- Same Name exist End End else if @ParentType = 1 -- Application Begin -- A group that is a child of an application -- cannot have the same name as groups that are children of the authorization store, -- and cannot have the same name as any groups that are children of any of the child scopes. -- Find the parent of Application Select @ParentStore = [StoreID] from AzMan_AzApplication where [ID] = @ParentID if ( @ParentStore = 0 ) Begin Set @Return = -1 -- General Error End Else Begin -- and Check for conflict exec AzMan_SP_Check_Dup_Group_For_Given_Parent @Return output, @ParentStore, 0, @ID, @Name End if ( @Return = 0 ) Begin -- Find All the Child scopes of parent and check for conflicts if Exists( Select [Name] from [dbo].[AzMan_AzApplicationGroup] where ( ParentType = 4 ) -- All Child scope and LOWER([Name]) = LOWER(@Name) and (@ParentID IN ( Select AppID from AzMan_AzScope where AppID = @ParentID and ID <> IsNULL(@ID,0)) ) ) Begin Set @Return = -183 -- Same Name exist End End End else if @ParentType = 4 -- Scope Begin -- A group that is a child of a scope, -- cannot have the same name as groups that are children of the application or authorization store -- Find the Parent App Select @ParentAppID = [AppID] from AzMan_AzScope where [ID] = @ParentID if ( @ParentAppID = 0 ) Begin Set @Return = -1 -- General Error End else Begin exec AzMan_SP_Check_Dup_Group_For_Given_Parent @Return output, @ParentAppID, 1, @ID, @Name if @Return = 0 Begin -- Find the Parent Store Select @ParentStore = [StoreID] from AzMan_AzApplication where [ID] = @ParentAppID if ( @ParentStore = 0 ) Begin Set @Return = -1 -- General Error End else Begin exec AzMan_SP_Check_Dup_Group_For_Given_Parent @Return output, @ParentStore, 0, @ID, @Name End End End End Return(@Return) GO Create Procedure [AzMan_SPI_AzAuthorizationStore] -- Inserts a new record in [AzMan_AzAuthorizationStore] table ( @Return [int] output , @ID [int] OUTPUT , @ObjectGuid [uniqueidentifier] = Null , @DomainTimeout [int] = Null , @ScriptEngineTimeout [int] = Null , @MaxScriptEngines [int] = Null , @ApplyStoreSacl [bit] = Null , @GenerateAudits [bit] = 0 , @MajorVersion [int] = 1 , @MinorVersion [int] = 0 , @TargetMachine [nvarchar](50) = Null , @Description [nvarchar](1024) = Null , @Name [nvarchar] (512) = NULL , @ApplicationData [ntext] = Null ) as DECLARE @RowCount INT, @Error INT Set @Return = 0 Set @ID = 0 Set NoCount On Begin Insert Into [dbo].[AzMan_AzAuthorizationStore] ( [ObjectGuid] , [Name] , [Description] , [ApplicationData] , [DomainTimeout] , [ScriptEngineTimeout] , [MaxScriptEngines] , [TargetMachine] , [ApplyStoreSacl] , [GenerateAudits] , [MajorVersion] , [MinorVersion] ) Values ( @ObjectGuid , @Name , @Description , @ApplicationData , @DomainTimeout , @ScriptEngineTimeout , @MaxScriptEngines , @TargetMachine , @ApplyStoreSacl , @GenerateAudits , @MajorVersion , @MinorVersion ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End else Begin Set @Return = @Error End -- generate a generic audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 0, -- 0 for store @Name, @ObjectGuid, N'Trying to create an AzAuthorizationStore' -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE 0, -- 0 for store @Name, @ObjectGuid, 0, -- 0 for store @Name, @ObjectGuid, N'' -- no other info End Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzApplication] -- Inserts a new record in [AzMan_AzApplication] table ( @Return [int] output , @ID [int] = Null Output , @ObjectGuid [uniqueidentifier] = Null , @StoreId [int] , @ApplyStoreSacl [bit] = Null , @GenerateAudits [bit] = Null , @AuthzInterfaceClsId [int] = Null , @CheckDup [bit] = 1 , @ApplicationVersion [nvarchar](50) = Null , @Name [nvarchar](512) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As Set NoCount On Begin DECLARE @RowCount INT, @Error INT DECLARE @storeName [nvarchar](512) DECLARE @storeGuid [uniqueidentifier] Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @StoreId, 0, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End -- Check for duplicate name IF @CheckDup = 1 BEGIN Exec AzMan_SP_Check_Dup_Application @Return output, @StoreId, @ID, @Name END ELSE Set @Return = 0 if @Return = 0 Begin Insert Into [dbo].[AzMan_AzApplication] ( [ObjectGuid] , [StoreID] , [Name] , [Description] , [ApplicationData] , [ApplyStoreSacl] , [GenerateAudits] , [AuthzInterfaceClsId] , [ApplicationVersion] ) Values ( @ObjectGuid , @StoreId , @Name , @Description , @ApplicationData , @ApplyStoreSacl , @GenerateAudits , @AuthzInterfaceClsId , @ApplicationVersion ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End Else Begin Set @Return = @Error End -- generate an audit if SACL is on IF @SaclIsOn = 1 BEGIN -- get the store info SELECT @storeName = Store.Name, @storeGuid = Store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] Store WHERE Store.ID = @StoreId -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE 0, -- 0 for store @storeName, @storeGuid, 1, -- 1 for Application @Name, @ObjectGuid, N'' -- no other info END End End Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzApplication] -- Update an existing record in [AzMan_AzApplication] table ( @Return [int] output , @ID [int] , @StoreId [int] , @ConsiderNull_Description bit = 0 , @ConsiderNull_ApplicationData bit = 0 , @ApplyStoreSacl [bit] = Null , @ConsiderNull_ApplyStoreSacl bit = 0 , @GenerateAudits [bit] = Null , @ConsiderNull_GenerateAudits bit = 0 , @AuthzInterfaceClsId [int] = Null , @ConsiderNull_AuthzInterfaceClsId bit = 0 , @ConsiderNull_ApplicationVersion bit = 0 , @ApplicationVersion [nvarchar](50) = Null , @Name [nvarchar](512) , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As DECLARE @ObjectGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 0, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 If @ConsiderNull_Description Is Null Set @ConsiderNull_Description = 0 If @ConsiderNull_ApplicationData Is Null Set @ConsiderNull_ApplicationData = 0 If @ConsiderNull_ApplyStoreSacl Is Null Set @ConsiderNull_ApplyStoreSacl = 0 If @ConsiderNull_GenerateAudits Is Null Set @ConsiderNull_GenerateAudits = 0 If @ConsiderNull_AuthzInterfaceClsId Is Null Set @ConsiderNull_AuthzInterfaceClsId = 0 If @ConsiderNull_ApplicationVersion Is Null Set @ConsiderNull_ApplicationVersion = 0 IF @Name Is Not NULL Begin -- Check for duplicate name Exec AzMan_SP_Check_Dup_Application @Return output, @StoreId, @ID, @Name End If @Return = 0 Begin Update [dbo].[AzMan_AzApplication] Set [Name] = IsNull(@Name, [Name]) ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End ,[ApplyStoreSacl] = Case @ConsiderNull_ApplyStoreSacl When 0 Then IsNull(@ApplyStoreSacl, [ApplyStoreSacl]) When 1 Then @ApplyStoreSacl End ,[GenerateAudits] = Case @ConsiderNull_GenerateAudits When 0 Then IsNull(@GenerateAudits, [GenerateAudits]) When 1 Then @GenerateAudits End ,[AuthzInterfaceClsId] = Case @ConsiderNull_AuthzInterfaceClsId When 0 Then IsNull(@AuthzInterfaceClsId, [AuthzInterfaceClsId]) When 1 Then @AuthzInterfaceClsId End ,[ApplicationVersion] = Case @ConsiderNull_ApplicationVersion When 0 Then IsNull(@ApplicationVersion, [ApplicationVersion]) When 1 Then @ApplicationVersion End Where ([ID] = @ID) End -- generate an audit if SACL is on IF @SaclIsOn = 1 BEGIN -- get info for auditing SELECT @ObjectGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ID -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 1, -- 0 for application @Name, @ObjectGuid, N'The shallow properties of the application may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzScope] -- Inserts a new record in [AzMan_AzScope] table ( @Return [int] output , @ID [int] = Null output , @AppId [int] = Null , @NameLen [int] = 0 , @NameHash [Binary] (32) = NULL , @ObjectGuid [uniqueidentifier] = Null , @CheckDup [bit] = 1 , @Description [nvarchar](1024) = Null , @Name [ntext] , @ApplicationData [ntext] = Null ) As DECLARE @appName nvarchar(512) DECLARE @appGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set NoCount On Begin DECLARE @RowCount INT, @Error INT Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@AppId, 1, 1, @SaclIsOn output -- Require Admin Access at App if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End IF @CheckDup = 1 BEGIN Exec AzMan_SP_Check_Dup_Scope @Return output, @AppId, -1, @NameHash End ELSE Set @Return = 0 if @Return = 0 Begin Insert Into [dbo].[AzMan_AzScope] ( [AppID] , [Name] , [NameLen] , [NameHash] , [Description] , [ApplicationData] , [ObjectGuid] ) Values ( @AppId , @Name , @NameLen , @NameHash , @Description , @ApplicationData , @ObjectGuid ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End Else Begin Set @Return = @Error End End IF @SaclIsOn = 1 BEGIN -- get the store info for auditing SELECT @appName = app.Name, @appGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @AppId -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE 1, -- 1 for Application @appName, @appGuid, 4, -- 4 for scope @Name, @ObjectGuid, N'' -- no other info END End Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzOperation] -- Inserts a new record in [AzMan_AzOperation] table ( @Return [int] output , @ID [int] = Null Output , @OperationID [int] = Null , @AppId [int] = Null , @ObjectGuid [uniqueidentifier] = Null , @CheckDup [bit] = 1 , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As DECLARE @appName nvarchar(512) DECLARE @appGuid uniqueidentifier DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set NoCount On Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] Set @Return = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @AppId, 1, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End -- if check dup IF @CheckDup = 1 BEGIN Exec AzMan_SP_Check_Dup_Operation @Return output, @AppId, @ID, @Name End ELSE Set @Return = 0 if @Return = 0 Begin Insert Into [dbo].[AzMan_AzOperation] ( [ObjectGuid] , [AppID] , [Name] , [Description] , [ApplicationData] , [OperationID] ) Values ( @ObjectGuid , @AppId , @Name , @Description , @ApplicationData , @OperationID ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End Else Begin Set @Return = @Error End End IF @SaclIsOn = 1 BEGIN -- get the store info for auditing SELECT @appName = app.Name, @appGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @AppId -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE 1, -- 1 for Application @appName, @appGuid, 2, -- 2 for operation @Name, @ObjectGuid, N'' -- no other info END End Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzApplicationGroup] -- Inserts a new record in [AzMan_AzApplicationGroup] table ( @Return [int] output , @ID [int] = Null Output , @ParentId [int] , @ParentType [int] , @GroupType [tinyint] = Null , @ObjectGuid [uniqueidentifier] = Null , @CheckDup [bit] = 1 , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null ) As DECLARE @RowCount INT, @Error INT Declare @StoreID int, @AppID int , @ScopeID int -- parent name and guid is only needed for auditing DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 set @StoreID = 0 set @AppID = 0 set @ScopeID = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @ParentId, @ParentType, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End IF @CheckDup = 1 BEGIN Exec AzMan_SP_Check_Dup_Group @Return output, @ParentId, @ParentType, @ID, @Name END ELSE Set @Return = 0 if @Return = 0 Begin if @ParentType = 0 Begin set @StoreID = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = store.Name, @parentGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID = @ParentId END End else if @ParentType = 1 Begin set @AppID = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = app.Name, @parentGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ParentId END End else if @ParentType = 4 Begin set @ScopeID = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = scope.Name, @parentGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ParentId END End Insert Into [dbo].[AzMan_AzApplicationGroup] ( [ObjectGuid] , [StoreID] , [AppID] , [ScopeID] , [ParentType] , [Name] , [Description] , [GroupType] ) Values ( @ObjectGuid , @StoreID , @AppID , @ScopeID , @ParentType , @Name , @Description , @GroupType ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End Else Begin Set @Return = @Error End End IF @SaclIsOn = 1 BEGIN -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE @ParentType, -- parent type @parentName, @parentGuid, 5, -- 5 for group @Name, @ObjectGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzTask] -- Inserts a new record in [AzMan_AzTask] table ( @Return [int] output , @ID [int] = Null Output , @IsRoleDefinition [bit] = 0 , @ParentId [int] , @ParentType [tinyint] , @ObjectGuid [uniqueidentifier] = Null , @CheckDup [bit] = 1 , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As DECLARE @RowCount INT, @Error INT Declare @AppID [int], @ScopeID [int] DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentId, @ParentType, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @AppID = null Set @ScopeID = null if @ParentType = 1 Begin Set @AppID = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = app.Name, @parentGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ParentId END End Else if @ParentType = 4 Begin Set @ScopeID = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = scope.Name, @parentGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ParentId END End Else Begin Set @Return = -1 goto Done End -- Make sure that the name doesn't exist at the same level IF @CheckDup = 1 BEGIN Exec AzMan_SP_Check_Dup_Task @Return output, @ParentId, @ParentType, @ID, @Name End ELSE Set @Return = 0 if @Return = 0 Begin Insert Into [dbo].[AzMan_AzTask] ( [ObjectGuid] , [AppID] , [ScopeID] , [ParentType] , [Name] , [Description] , [ApplicationData] , [IsRoleDefinition] ) Values ( @ObjectGuid , @AppID , @ScopeID , @ParentType , @Name , @Description , @ApplicationData , @IsRoleDefinition ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End Else Begin Set @Return = @Error End End IF @SaclIsOn = 1 -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE @ParentType, -- parent type @parentName, @parentGuid, 3, -- 3 for task @Name, @ObjectGuid, N'' -- no other info Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzTask_Single_Operation] ( @Return [int] output , @TaskID [int] -- ID Of task , @OperationID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @taskName nvarchar(512) DECLARE @taskGuid uniqueidentifier DECLARE @opName nvarchar(512) DECLARE @opGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Task_To_Operation_Link] (TaskID, OperationID) VALUES (@TaskID, @OperationID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 --Generic Error End End IF @SaclIsOn = 1 BEGIN -- get the info for auditing SELECT @taskName = Task.Name, @taskGuid = Task.ObjectGuid FROM [dbo].[AzMan_AzTask] Task WHERE Task.ID = @TaskID SELECT @opName = Op.Name, @opGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op WHERE Op.ID = @OperationID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 2, -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN 3, -- 3 for task @taskName, @taskGuid, 2, -- 2 for Operation @opName, @opGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzTask_Single_Operation] ( @Return [int] output , @TaskID [int] -- ID Of task , @OperationID [int] , @SaclIsOn [bit] ) As Set @Return = 0 DECLARE @RowCount INT, @Error INT DECLARE @taskName nvarchar(512) DECLARE @taskGuid uniqueidentifier DECLARE @opName nvarchar(512) DECLARE @opGuid uniqueidentifier Set NoCount On delete [AzMan_Task_To_Operation_Link] where TaskID = @TaskID and OperationID = @OperationID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End IF @SaclIsOn = 1 BEGIN -- get the info for auditing SELECT @taskName = Task.Name, @taskGuid = Task.ObjectGuid FROM [dbo].[AzMan_AzTask] Task WHERE Task.ID = @TaskID SELECT @opName = Op.Name, @opGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op WHERE Op.ID = @OperationID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 3, -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE 3, -- 3 for task @taskName, @taskGuid, 2, -- 2 for Operation @opName, @opGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzTask_Multi_Operations] ( @Return [int] output , @TaskID [int] -- ID Of Task , @SepChar [char] (1) = "|" , @OperationIDs [nvarchar] (4000) ) As Set @Return = 0 DECLARE @equal char DECLARE @addOrDelete nvarchar(10) DECLARE @isAdd int Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 SET @equal = '=' Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@TaskID, 3, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End -- First parse the string -- Insert each one of them DECLARE @OperationID varchar(100), @Pos int Declare @iOperationID int SET @OperationIDs = LTRIM(RTRIM(@OperationIDs))+ @SepChar SET @Pos = CHARINDEX(@equal, @OperationIDs, 1) IF REPLACE(@OperationIDs, @SepChar, '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @OperationID = LTRIM(RTRIM(LEFT(@OperationIDs, @Pos - 1))) Set @iOperationID = CAST(@OperationID as int) -- remove the left part (the id) SET @OperationIDs = RIGHT(@OperationIDs, LEN(@OperationIDs) - @Pos) -- now move to the pipe separator SET @Pos = CHARINDEX(@SepChar, @OperationIDs, 1) SET @addOrDelete = LTRIM(RTRIM(LEFT(@OperationIDs, @Pos - 1))) Set @isAdd = CAST(@addOrDelete as int) IF @iOperationID <> 0 BEGIN -- if NNNN=0, then it means to delete IF @isAdd <> 0 BEGIN Exec AzMan_SPI_AzTask_Single_Operation @Return output, @TaskID, @iOperationID, @SaclIsOn if @Return <> 0 Begin Break End End ELSE BEGIN Exec AzMan_SPD_AzTask_Single_Operation @Return output, @TaskID, @iOperationID, @SaclIsOn if @Return <> 0 Begin Break End End END SET @OperationIDs = RIGHT(@OperationIDs, LEN(@OperationIDs) - @Pos) SET @Pos = CHARINDEX(@equal, @OperationIDs, 1) END END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment_Single_Operation] ( @Return [int] output , @RoleID [int] -- ID Of Role , @OperationID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @opName nvarchar(512) DECLARE @opGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Role_To_Operation_Link] (RoleID, OperationID) VALUES (@RoleID, @OperationID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 --Generic Error End End IF @SaclIsOn = 1 BEGIN -- get the info for auditing SELECT @roleName = Role.Name, @roleGuid = Role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] Role WHERE Role.ID = @RoleID SELECT @opName = Op.Name, @opGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op WHERE Op.ID = @OperationID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 2, -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN 6, -- 6 for role @roleName, @roleGuid, 2, -- 2 for Operation @opName, @opGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzRoleAssignment_Single_Operation] ( @Return [int] output , @RoleID [int] -- ID Of Role assignment , @OperationID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @opName nvarchar(512) DECLARE @opGuid uniqueidentifier Set @Return = 0 Set NoCount On delete [AzMan_Role_To_Operation_Link] where RoleID = @RoleID and OperationID = @OperationID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End IF @SaclIsOn = 1 BEGIN -- get the info for auditing SELECT @roleName = Role.Name, @roleGuid = Role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] Role WHERE Role.ID = @RoleID SELECT @opName = Op.Name, @opGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op WHERE Op.ID = @OperationID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 3, -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE 6, -- 6 for role @roleName, @roleGuid, 2, -- 1 for Operation @opName, @opGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment_Multi_Operations] ( @Return [int] output , @RoleID [int] -- ID Of Role , @SepChar [nchar] (1) = "|" , @OperationIDs [nvarchar] (4000) ) As Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On -- First parse the string -- Insert each one of them Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End DECLARE @OperationID nvarchar(100), @Pos int Declare @iOperationID int DECLARE @equal char DECLARE @addOrDelete nvarchar(10) DECLARE @isAdd int SET @equal = '=' SET @OperationIDs = LTRIM(RTRIM(@OperationIDs))+ @SepChar SET @Pos = CHARINDEX(@equal, @OperationIDs, 1) IF REPLACE(@OperationIDs, @SepChar, '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @OperationID = LTRIM(RTRIM(LEFT(@OperationIDs, @Pos - 1))) Set @iOperationID = CAST(@OperationID as int) -- remove the left part (the id) SET @OperationIDs = RIGHT(@OperationIDs, LEN(@OperationIDs) - @Pos) -- now move to the pipe separator SET @Pos = CHARINDEX(@SepChar, @OperationIDs, 1) SET @addOrDelete = LTRIM(RTRIM(LEFT(@OperationIDs, @Pos - 1))) Set @isAdd = CAST(@addOrDelete as int) IF @iOperationID <> 0 BEGIN -- if NNNN=0, then it means to delete IF @isAdd <> 0 BEGIN Exec AzMan_SPI_AzRoleAssignment_Single_Operation @Return output, @RoleID, @iOperationID, @SaclIsOn if @Return <> 0 Begin Break End End ELSE BEGIN Exec AzMan_SPD_AzRoleAssignment_Single_Operation @Return output, @RoleID, @iOperationID, @SaclIsOn if @Return <> 0 Begin Break End END END SET @OperationIDs = RIGHT(@OperationIDs, LEN(@OperationIDs) - @Pos) SET @Pos = CHARINDEX(@equal, @OperationIDs, 1) END END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzTask_Single_Task] ( @Return [int] output , @TaskID [int] , @ChildID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @taskName nvarchar(512) DECLARE @taskGuid uniqueidentifier DECLARE @refTaskName nvarchar(512) DECLARE @refTaskGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Task_To_Task_Link] (TaskID, ChildID) VALUES (@TaskID, @ChildID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 --Generic Error End End -- get the info for auditing IF @SaclIsOn = 1 BEGIN SELECT @taskName = Task.Name, @taskGuid = Task.ObjectGuid FROM [dbo].[AzMan_AzTask] Task WHERE Task.ID = @TaskID SELECT @refTaskName = refTask.Name, @refTaskGuid = refTask.ObjectGuid FROM [dbo].[AzMan_AzTask] refTask WHERE refTask.ID = @ChildID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 2, -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN 3, -- 3 for task @taskName, @taskGuid, 3, -- 3 for task @refTaskName, @refTaskGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzTask_Single_Task] ( @Return [int] output, @TaskID [int] , @ChildID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @taskName nvarchar(512) DECLARE @taskGuid uniqueidentifier DECLARE @refTaskName nvarchar(512) DECLARE @refTaskGuid uniqueidentifier Set @Return = 0 Set NoCount On Delete From [AzMan_Task_To_Task_Link] where TaskID = @TaskID and ChildID = @ChildID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End -- get the info for auditing IF @SaclIsOn = 1 BEGIN SELECT @taskName = Task.Name, @taskGuid = Task.ObjectGuid FROM [dbo].[AzMan_AzTask] Task WHERE Task.ID = @TaskID SELECT @refTaskName = refTask.Name, @refTaskGuid = refTask.ObjectGuid FROM [dbo].[AzMan_AzTask] refTask WHERE refTask.ID = @ChildID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 3, -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE 3, -- 3 for task @taskName, @taskGuid, 3, -- 3 for task @refTaskName, @refTaskGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzTask_Multi_Tasks] ( @Return [int] output , @ParentTaskId [int] -- ID Of Task , @SepChar [char] (1) = "|" , @TaskIDs [nvarchar] (4000) ) As Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentTaskId, 3, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End -- First parse the string -- Insert each one of them DECLARE @TaskID varchar(100), @Pos int Declare @iTaskID int DECLARE @equal char DECLARE @addOrDelete nvarchar(10) DECLARE @isAdd int SET @equal = '=' SET @TaskIDs = LTRIM(RTRIM(@TaskIDs))+ @SepChar SET @Pos = CHARINDEX(@equal, @TaskIDs, 1) --IF REPLACE(@TaskIDs, @SepChar, '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @TaskID = LTRIM(RTRIM(LEFT(@TaskIDs, @Pos - 1))) Set @iTaskID = CAST(@TaskID as int) -- remove the left part (the id) SET @TaskIDs = RIGHT(@TaskIDs, LEN(@TaskIDs) - @Pos) -- now move to the pipe separator SET @Pos = CHARINDEX(@SepChar, @TaskIDs, 1) SET @addOrDelete = LTRIM(RTRIM(LEFT(@TaskIDs, @Pos - 1))) Set @isAdd = CAST(@addOrDelete as int) IF @iTaskID <> 0 BEGIN if @isAdd <> 0 Begin Exec AzMan_SPI_AzTask_Single_Task @Return output, @ParentTaskId, @iTaskID, @SaclIsOn if @Return <> 0 Begin Break End End else Begin Exec AzMan_SPD_AzTask_Single_Task @Return output, @ParentTaskId, @iTaskID, @SaclIsOn if @Return <> 0 Begin Break End End END SET @TaskIDs = RIGHT(@TaskIDs, LEN(@TaskIDs) - @Pos) SET @Pos = CHARINDEX(@equal, @TaskIDs, 1) END END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment_Single_Task] ( @Return [int] output, @RoleID [int] -- ID Of Role , @TaskID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @refTaskName nvarchar(512) DECLARE @refTaskGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Role_To_Task_Link] (RoleID, TaskID) VALUES (@RoleID, @TaskID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 --Generic Error End End IF @SaclIsOn = 1 BEGIN -- get the info for auditing SELECT @roleName = role.Name, @roleGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role WHERE role.ID = @RoleID SELECT @refTaskName = refTask.Name, @refTaskGuid = refTask.ObjectGuid FROM [dbo].[AzMan_AzTask] refTask WHERE refTask.ID = @TaskID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 2, -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN 6, -- 6 for role @roleName, @roleGuid, 3, -- 3 for task @refTaskName, @refTaskGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure AzMan_SPD_AzRoleAssignment_Single_Task ( @Return [int] output, @RoleId [int] -- ID Of Role Assignment , @TaskID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @refTaskName nvarchar(512) DECLARE @refTaskGuid uniqueidentifier Set @Return = 0 Set NoCount On Delete From [AzMan_Role_To_Task_Link] where TaskID = @TaskID and RoleID = @RoleId SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- get the info for auditing SELECT @roleName = role.Name, @roleGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role WHERE role.ID = @RoleId SELECT @refTaskName = refTask.Name, @refTaskGuid = refTask.ObjectGuid FROM [dbo].[AzMan_AzTask] refTask WHERE refTask.ID = @TaskID IF @SaclIsOn = 1 BEGIN -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 3, -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE 6, -- 6 for role @roleName, @roleGuid, 3, -- 3 for task @refTaskName, @refTaskGuid, N'' -- no other info END Set NoCount Off Return(@Return) go Create Procedure [AzMan_SPI_AzRoleAssignment_Multi_Tasks] ( @Return [int] output , @RoleId [int] , @SepChar [char] (1) = "|" , @TaskIDs [nvarchar] (4000) ) As Set NoCount On Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleId, 6, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End -- First parse the string -- Insert each one of them DECLARE @TaskID varchar(100), @Pos int Declare @iTaskID int DECLARE @equal char DECLARE @addOrDelete nvarchar(10) DECLARE @isAdd int SET @equal = '=' SET @TaskIDs = LTRIM(RTRIM(@TaskIDs))+ @SepChar SET @Pos = CHARINDEX(@equal, @TaskIDs, 1) IF REPLACE(@TaskIDs, @SepChar, '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @TaskID = LTRIM(RTRIM(LEFT(@TaskIDs, @Pos - 1))) Set @iTaskID = CAST(@TaskID as int) -- remove the left part (the id) SET @TaskIDs = RIGHT(@TaskIDs, LEN(@TaskIDs) - @Pos) -- now move to the pipe separator SET @Pos = CHARINDEX(@SepChar, @TaskIDs, 1) SET @addOrDelete = LTRIM(RTRIM(LEFT(@TaskIDs, @Pos - 1))) Set @isAdd = CAST(@addOrDelete as int) IF @iTaskID <> 0 BEGIN -- if NNNN=0, then it means to delete IF @isAdd <> 0 Begin Exec [AzMan_SPI_AzRoleAssignment_Single_Task] @Return output, @RoleId, @iTaskID, @SaclIsOn if @Return <> 0 Begin Break End End else Begin Exec [AzMan_SPD_AzRoleAssignment_Single_Task] @Return output, @RoleId, @iTaskID, @SaclIsOn if @Return <> 0 Begin Break End End END SET @TaskIDs = RIGHT(@TaskIDs, LEN(@TaskIDs) - @Pos) SET @Pos = CHARINDEX(@equal, @TaskIDs, 1) END END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment] ( @Return [int] output , @ID [int] = Null Output , @ParentId [int] , @ParentType [tinyint] , @ObjectGuid [uniqueidentifier] = Null , @CheckDup [bit] = 1 , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As DECLARE @RowCount INT, @Error INT Declare @AppId [int] , @ScopeID [int] DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentId, @ParentType, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End IF @CheckDup = 1 BEGIN Exec AzMan_SP_Check_Dup_RoleAssignment @Return output, @ParentId, @ParentType, @ID, @Name END ELSE Set @Return = 0 if @Return = 0 Begin Set @AppId = null Set @ScopeID= null if @ParentType = 1 Begin Set @AppId = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName=app.Name, @parentGuid=app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ParentId END End else if @ParentType = 4 Begin Set @ScopeID = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName=scope.Name, @parentGuid=scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ParentId END End else Begin Set @Return = -1 Return End Insert Into [dbo].[AzMan_AzRoleAssignment] ( [ObjectGuid] , [AppID] , [ScopeID] , [ParentType] , [Name] , [Description] , [ApplicationData] ) Values ( @ObjectGuid , @AppId , @ScopeID , @ParentType , @Name , @Description , @ApplicationData ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End Else Begin Set @Return = @Error End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE @ParentType, @parentName, @parentGuid, 6, -- 6 for role @Name, @ObjectGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzAuthorizationStore] -- Update an existing record in [AzMan_AzAuthorizationStore] table ( @Return [int] output , @ID [int] , @ConsiderNull_Description bit = 0 , @ConsiderNull_ApplicationData bit = 0 , @DomainTimeout [int] = Null , @ConsiderNull_DomainTimeout bit = 0 , @ScriptEngineTimeout [int] = Null , @ConsiderNull_ScriptEngineTimeout bit = 0 , @MaxScriptEngines [int] = Null , @ConsiderNull_MaxScriptEngines bit = 0 , @ConsiderNull_TargetMachine bit = 0 , @ApplyStoreSacl [bit] = Null , @ConsiderNull_ApplyStoreSacl bit = 0 , @GenerateAudits [bit] = Null , @ConsiderNull_GenerateAudits bit = 0 , @MajorVersion [int] = Null , @ConsiderNull_MajorVersion bit = 0 , @MinorVersion [int] = Null , @ConsiderNull_MinorVersion bit = 0 , @TargetMachine [nvarchar](50) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As DECLARE @RowCount INT, @Error INT DECLARE @ObjectName nvarchar(512) DECLARE @ObjectGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 0, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- no error If @ConsiderNull_Description Is Null Set @ConsiderNull_Description = 0 If @ConsiderNull_ApplicationData Is Null Set @ConsiderNull_ApplicationData = 0 If @ConsiderNull_DomainTimeout Is Null Set @ConsiderNull_DomainTimeout = 0 If @ConsiderNull_ScriptEngineTimeout Is Null Set @ConsiderNull_ScriptEngineTimeout = 0 If @ConsiderNull_MaxScriptEngines Is Null Set @ConsiderNull_MaxScriptEngines = 0 If @ConsiderNull_TargetMachine Is Null Set @ConsiderNull_TargetMachine = 0 If @ConsiderNull_ApplyStoreSacl Is Null Set @ConsiderNull_ApplyStoreSacl = 0 If @ConsiderNull_GenerateAudits Is Null Set @ConsiderNull_GenerateAudits = 0 If @ConsiderNull_MajorVersion Is Null Set @ConsiderNull_MajorVersion = 0 If @ConsiderNull_MinorVersion Is Null Set @ConsiderNull_MinorVersion = 0 Update [dbo].[AzMan_AzAuthorizationStore] Set [Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End ,[DomainTimeout] = Case @ConsiderNull_DomainTimeout When 0 Then IsNull(@DomainTimeout, [DomainTimeout]) When 1 Then @DomainTimeout End ,[ScriptEngineTimeout] = Case @ConsiderNull_ScriptEngineTimeout When 0 Then IsNull(@ScriptEngineTimeout, [ScriptEngineTimeout]) When 1 Then @ScriptEngineTimeout End ,[MaxScriptEngines] = Case @ConsiderNull_MaxScriptEngines When 0 Then IsNull(@MaxScriptEngines, [MaxScriptEngines]) When 1 Then @MaxScriptEngines End ,[TargetMachine] = Case @ConsiderNull_TargetMachine When 0 Then IsNull(@TargetMachine, [TargetMachine]) When 1 Then @TargetMachine End ,[ApplyStoreSacl] = Case @ConsiderNull_ApplyStoreSacl When 0 Then IsNull(@ApplyStoreSacl, [ApplyStoreSacl]) When 1 Then @ApplyStoreSacl End ,[GenerateAudits] = Case @ConsiderNull_GenerateAudits When 0 Then IsNull(@GenerateAudits, [GenerateAudits]) When 1 Then @GenerateAudits End ,[MajorVersion] = Case @ConsiderNull_MajorVersion When 0 Then IsNull(@MajorVersion, [MajorVersion]) When 1 Then @MajorVersion End ,[MinorVersion] = Case @ConsiderNull_MinorVersion When 0 Then IsNull(@MinorVersion, [MinorVersion]) When 1 Then @MinorVersion End Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ObjectName=store.Name, @ObjectGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID = @ID -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 0, -- 0 for store @ObjectName, @ObjectGuid, N'The shallow properties of the store may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzScope] -- Update an existing record in [AzMan_AzScope] table ( @Return [int] output , @ID [int] , @AppId [int] , @ConsiderNull_Description bit = 0 , @ConsiderNull_ApplicationData bit = 0 , @NameHash [Binary] (32) = Null , @Description [nvarchar](1024) = Null , @Name [ntext] = Null , @ApplicationData [ntext] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @ObjectGuid uniqueidentifier DECLARE @iScopeNameLen int Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 4, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End -- Only store or app admin can modify property of the scope object if ( (@AccessAtObjType <> 0) and (@AccessAtObjType <> 1) ) begin Set @Return = -5 goto Done end Set @Return = 0 If @ConsiderNull_Description Is Null Set @ConsiderNull_Description = 0 If @ConsiderNull_ApplicationData Is Null Set @ConsiderNull_ApplicationData = 0 if @Name Is NOT NULL Begin Exec AzMan_SP_Check_Dup_Scope @Return output, @AppId, @ID, @NameHash End if @Return = 0 Begin set @iScopeNameLen = DATALENGTH(@Name) Update [dbo].[AzMan_AzScope] Set [Name] = IsNull(@Name, [Name]) ,[NameHash] = IsNull(@NameHash, [NameHash]) ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End End IF @SaclIsOn = 1 BEGIN -- get info for auditing SELECT @ObjectGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ID -- TODO Should we truncate the name for scopes? -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 4, -- 0 for scope @Name, @ObjectGuid, N'The shallow properties of the scope may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzOperation] -- Update an existing record in [AzMan_AzOperation] table ( @Return [int] output , @ID [int] , @AppId [int] , @ConsiderNull_Description bit = 0 , @ConsiderNull_ApplicationData bit = 0 , @OperationID [int] = Null , @ConsiderNull_OperationID bit = 0 , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @ObjectGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 2, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End If @ConsiderNull_Description Is Null Set @ConsiderNull_Description = 0 If @ConsiderNull_ApplicationData Is Null Set @ConsiderNull_ApplicationData = 0 If @ConsiderNull_OperationID Is Null Set @ConsiderNull_OperationID = 0 If @Name Is Not NULL Begin Exec AzMan_SP_Check_Dup_Operation @Return output, @AppId, @ID, @Name End if @Return = 0 Begin Update [dbo].[AzMan_AzOperation] Set [Name] = IsNull(@Name, [Name]) ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End ,[OperationID] = Case @ConsiderNull_OperationID When 0 Then IsNull(@OperationID, [OperationID]) When 1 Then @OperationID End Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ObjectGuid = op.ObjectGuid FROM [dbo].[AzMan_AzOperation] op WHERE op.ID = @ID -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 2, -- 2 for operation @Name, @ObjectGuid, N'The shallow properties of the operation may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzApplicationGroup] -- Update an existing record in [AzMan_AzApplicationGroup] table ( @Return [int] output , @ID [int] , @ParentType [tinyint] , @ParentID [int] , @GroupType [tinyint] = Null , @ConsiderNull_GroupType bit = 0 , @ConsiderNull_GroupDescription bit = 0 , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null ) As DECLARE @RowCount INT, @Error INT DECLARE @ObjectGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 5, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End If @ConsiderNull_GroupType Is Null Set @ConsiderNull_GroupType = 0 if @Name IS NOT NULL Begin Exec AzMan_SP_Check_Dup_Group @Return output, @ParentID, @ParentType, @ID, @Name End if @Return = 0 Begin Update [dbo].[AzMan_AzApplicationGroup] Set [Name] = IsNull(@Name, [Name]) ,[GroupType] = Case @ConsiderNull_GroupType When 0 Then IsNull(@GroupType, [GroupType]) When 1 Then @GroupType End ,[Description] = Case @ConsiderNull_GroupDescription When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ObjectGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @ID -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 5, -- 5 for application group @Name, @ObjectGuid, N'The shallow properties of the application group may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzTask] -- Update an existing record in table ( @Return [int] output , @ID [int] , @ParentID [int] , @ParentType [tinyint] , @ConsiderNull_Description bit = 0 , @IsRoleDefinition [bit] = Null , @ConsiderNull_IsRoleDefinition bit = NULL , @ConsiderNull_ApplicationData bit = NULL , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As DECLARE @ObjectGuid uniqueidentifier Set NoCount On DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 3, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 If @ConsiderNull_Description Is Null Set @ConsiderNull_Description = 0 if @ConsiderNull_IsRoleDefinition is NULL Set @ConsiderNull_IsRoleDefinition = 0 If @ConsiderNull_ApplicationData Is Null Set @ConsiderNull_ApplicationData = 0 if @Name Is Not NULL Begin Exec AzMan_SP_Check_Dup_Task @Return output, @ParentID, @ParentType, @ID, @Name End if @Return = 0 Begin Update [dbo].[AzMan_AzTask] Set [Name] = IsNull(@Name, [Name]) ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End ,[IsRoleDefinition] = Case @ConsiderNull_IsRoleDefinition When 0 Then IsNull(@IsRoleDefinition, [IsRoleDefinition]) When 1 Then @IsRoleDefinition End ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ObjectGuid = task.ObjectGuid FROM [dbo].[AzMan_AzTask] task WHERE task.ID = @ID -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 3, -- 3 for task @Name, @ObjectGuid, N'The shallow properties of the task may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzRoleAssignment] -- Update an existing record in the table ( @Return [int] output , @ID [int] , @ParentID [int] , @ParentType [tinyint] , @ConsiderNull_Description bit = 0 , @ConsiderNull_ApplicationData bit = NULL , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @ObjectGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 6, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 If @ConsiderNull_Description Is Null Set @ConsiderNull_Description = 0 If @ConsiderNull_ApplicationData Is Null Set @ConsiderNull_ApplicationData = 0 IF @Name Is Not NULL Begin Exec AzMan_SP_Check_Dup_RoleAssignment @Return output, @ParentID, @ParentType, @ID, @Name End if @Return = 0 Begin Update [dbo].[AzMan_AzRoleAssignment] Set [Name] = IsNull(@Name, [Name]) ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ObjectGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role WHERE role.ID = @ID -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 6, -- 6 for role @Name, @ObjectGuid, N'The shallow properties of the role assignment may have been modified' END Done: Set NoCount Off Return(@Return) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPIU_AzApplicationGroup_LDAPQuery' and type = 'P') DROP PROCEDURE AzMan_SPIU_AzApplicationGroup_LDAPQuery GO Create Procedure [AzMan_SPIU_AzApplicationGroup_LDAPQuery] -- Inserts or updates a record in [AzMan_LDAPQuery] table ( @Return [int] output , @GroupId [int] = Null -- ID Of Application Group , @ConsiderNull_LdapQuery bit = 0 , @LdapQuery [ntext] = Null -- LDAP Query ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @Name nvarchar(512) DECLARE @ID [int] DECLARE @ObjectGuid uniqueidentifier Declare @ExistingLdapQueryID [int] Declare @AccessAtObjType [tinyint] Set @ExistingLdapQueryID = Null DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupId, 5, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 Select @ExistingLdapQueryID = [LdapQueryID] From [dbo].[AzMan_AzApplicationGroup] Where [ID] = @GroupId SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error=0 Begin if @RowCount = 0 Begin -- Parent Group was not found Set @Return = 1 Return(1) End End else Begin Return @Error End If @ExistingLdapQueryID Is Null Begin Begin Insert Into [dbo].[AzMan_LDAPQuery] ( [GroupID] , [LdapQuery] ) Values ( @GroupId , @LdapQuery ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) -- Update the AzApplication Groups with the new ID if @ID <> 0 Begin Update [dbo].[AzMan_AzApplicationGroup] Set [LdapQueryID] = @ID where [ID] = @GroupId End End Else Begin Set @Return = @Error End End End Else Begin If @ConsiderNull_LdapQuery Is Null Set @ConsiderNull_LdapQuery = 0 Update [dbo].[AzMan_LDAPQuery] Set [GroupID] = @GroupId ,[LdapQuery] = Case @ConsiderNull_LdapQuery When 0 Then IsNull(@LdapQuery, [LdapQuery]) When 1 Then @LdapQuery End Where [ID] = @ExistingLdapQueryID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount <> 1 Set @ID = @ExistingLdapQueryID else Begin Set @Return = @Error End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @Name=appGroup.Name, @ObjectGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @GroupId -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 5, -- 5 for group @Name, @ObjectGuid, N'The LDAP query of the application may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPIU_Bizrule] ( @Return [int] output, @ParentId [int] , @ParentType [tinyint] , @BizRuleImportedPath [nvarchar](512) = Null -- for [AzMan_BizRule].[BizRuleImportedPath] column , @ConsiderNull_BizRuleImportedPath bit = 0 , @BizRule [ntext] = Null -- for [AzMan_BizRule].[BizRule] column , @ConsiderNull_BizRule bit = 0 , @BizRuleLanguage [nvarchar](64) = Null -- for [AzMan_BizRule].[BizRuleLanguage] column , @ConsiderNull_BizRuleLanguage bit = 0 ) As DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On Declare @ExistingBizruleID [int] Declare @AccessAtObjType [tinyint] Set @ExistingBizruleID = Null Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentId, @ParentType, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 if @ParentType = 3 -- task Begin Select @ExistingBizruleID = [BizRuleID] From [dbo].[AzMan_BizRule_To_Task] Where [TaskID] = @ParentId End else if @ParentType = 5 -- group Begin Select @ExistingBizruleID = [BizRuleID] From [dbo].[AzMan_BizRule_To_Group] Where [GroupID] = @ParentId End SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @ExistingBizruleID Is Null or @ExistingBizruleID = 0 Begin Begin Insert Into [dbo].[AzMan_BizRule] ( [ParentId] , [ParentType] , [BizRuleImportedPath] , [BizRule] , [BizRuleLanguage] ) Values ( @ParentId ,@ParentType ,@BizRuleImportedPath ,@BizRule ,@BizRuleLanguage ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ExistingBizruleID = Cast(SCOPE_IDENTITY() As [int]) -- Update the AzApplication Groups or Task with the new ID if @ExistingBizruleID <> 0 if @ParentType = 3 -- task Begin insert [dbo].[AzMan_BizRule_To_Task] ( [TaskID] , [BizRuleID] ) Values ( @ParentId , @ExistingBizruleID ) End else if @ParentType = 5 -- group Begin insert [dbo].[AzMan_BizRule_To_Group] ( [GroupID] , [BizRuleID] ) Values ( @ParentId , @ExistingBizruleID ) End End Else Begin Set @Return = @Error End End End Else Begin If @ConsiderNull_BizRuleImportedPath Is Null set @ConsiderNull_BizRuleImportedPath = 0 If @ConsiderNull_BizRule Is Null set @ConsiderNull_BizRule = 0 If @ConsiderNull_BizRuleLanguage Is Null set @ConsiderNull_BizRuleLanguage = 0 Update [dbo].[AzMan_BizRule] Set [ParentId] = @ParentId , [ParentType] = @ParentType , [BizRuleImportedPath] = Case @ConsiderNull_BizRuleImportedPath When 0 Then IsNull(@BizRuleImportedPath, [BizRuleImportedPath]) When 1 Then @BizRuleImportedPath End , [BizRule] = Case @ConsiderNull_BizRule When 0 Then IsNull(@BizRule, [BizRule]) When 1 Then @BizRule End , [BizRuleLanguage] = Case @ConsiderNull_BizRuleLanguage When 0 Then IsNull(@BizRuleLanguage, [BizRuleLanguage]) When 1 Then @BizRuleLanguage End Where [ID] = @ExistingBizruleID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount = 0 Begin if @Error = 0 Begin Set @Return = -1168 -- Error updating the Record End Else Begin Set @Return = @Error End End End -- generate an audit IF @SaclIsOn = 1 BEGIN -- get info for auditing IF @ParentType = 3 -- task BEGIN SELECT @parentName=task.Name, @parentGuid = task.ObjectGuid FROM [dbo].[AzMan_AzTask] task WHERE task.ID = @ParentId END ELSE IF @ParentType = 5 -- app group BEGIN SELECT @parentName=appGroup.Name, @parentGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @ParentId END EXEC [AzMan_SP_GenerateGenericAudit] @Return, @ParentType, @parentName, @parentGuid, N'The bizrule of the object may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure dbo.[AzMan_SPIU_AzApplicationGroup_Bizrule] ( @Return [int] output , @GroupId [int] , @ConsiderNull_BizRuleImportedPath bit = 0 , @ConsiderNull_BizRule bit = 0 , @ConsiderNull_BizRuleLanguage bit = 0 , @BizRuleLanguage [nvarchar](64) = Null -- for [AzMan_BizRule].[BizRuleLanguage] column , @BizRuleImportedPath [nvarchar](512) = Null -- for [AzMan_BizRule].[BizRuleImportedPath] column , @BizRule [ntext] = Null -- for [AzMan_BizRule].[BizRule] column ) As Set @Return = 0 exec AzMan_SPIU_Bizrule @Return output, @GroupId, 5 , @BizRuleImportedPath , @ConsiderNull_BizRuleImportedPath , @BizRule , @ConsiderNull_BizRule , @BizRuleLanguage , @ConsiderNull_BizRuleLanguage Return @Return Go Create Procedure dbo.[AzMan_SPIU_AzTask_Bizrule] ( @Return [int] output , @TaskId [int] , @ConsiderNull_BizRuleImportedPath bit = 0 , @ConsiderNull_BizRule bit = 0 , @ConsiderNull_BizRuleLanguage bit = 0 , @BizRuleLanguage [nvarchar](64) = Null -- for [AzMan_BizRule].[BizRuleLanguage] column , @BizRuleImportedPath [nvarchar](512) = Null -- for [AzMan_BizRule].[BizRuleImportedPath] column , @BizRule [ntext] = Null -- for [AzMan_BizRule].[BizRule] column ) As Set @Return = 0 exec AzMan_SPIU_Bizrule @Return output, @TaskId, 3 , @BizRuleImportedPath , @ConsiderNull_BizRuleImportedPath , @BizRule , @ConsiderNull_BizRule , @BizRuleLanguage , @ConsiderNull_BizRuleLanguage Return @Return Go Create Procedure [AzMan_SPI_AzApplicationGroup_Single_SidMember] ( @Return [int] output, @GroupId [int] -- ID Of Application Group , @IsMember [bit] = 0 , @SidMember varbinary(85) , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Group_SIDMember] (MemberSID, Member, GroupID) VALUES (@SidMember, @IsMember, @GroupId) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 --Generic Error End End -- get the info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = appGroup.Name, @parentGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @GroupId -- generate an audit IF @IsMember = 1 EXEC [AzMan_SP_GenerateMemberAudit] @Return, 4, -- 4 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN 5, -- 5 for group @parentName, @parentGuid, N'', @SidMember, 1, -- 1 for member N'' -- no other info ELSE EXEC [AzMan_SP_GenerateMemberAudit] @Return, 4, -- 4 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN 5, -- 5 for group @parentName, @parentGuid, N'', @SidMember, 0, -- 0 for non-member N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzApplicationGroup_Single_SidMember] ( @Return [int] output, @GroupId [int] -- ID Of Application Group , @IsMember [bit] = 1 , @SidMember varbinary(85) , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier Set @Return = 0 Set NoCount On Delete From [AzMan_Group_SIDMember] where MemberSID = @SidMember and Member = @IsMember and GroupID = @GroupId SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --REcord not found End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = appGroup.Name, @parentGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @GroupId -- generate an audit IF @IsMember = 1 EXEC [AzMan_SP_GenerateMemberAudit] @Return, 5, -- 5 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE 5, -- 5 for group @parentName, @parentGuid, N'', @SidMember, 1, -- 1 for member N'' -- no other info ELSE EXEC [AzMan_SP_GenerateMemberAudit] @Return, 5, -- 5 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE 5, -- 5 for group @parentName, @parentGuid, N'', @SidMember, 0, -- 0 for non-member N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_SidMembers_Internal] ( @Return [int] output , @GroupId [int] -- ID Of Application Group , @IsMember [bit] = 1 , @SidMembers varbinary (4000) ) As DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set NoCount On -- SidMembers are aggregated binary data in the following format: -- The first 4 bytes is a delete/add flag (0/1); the following 4 bytes is the size of the SID, -- followed by the actual SID. The over-usage of these pieces of data is for ease of parsing -- Using string to represent such encoding, the following example which encodes 3 SIDs -- of length 24, 36, and 48 in turn, and the second one is a delete -- 00010024NNNNNNNNN00000036NNNNNNNNNN00010048NNNNNNNNNNNNNN -- Insert each one of them Declare @AccessAtObjType [tinyint] Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupId, 5, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End DECLARE @DataLength int DECLARE @SidLength int DECLARE @SidMember varbinary(85) DECLARE @Pos int DECLARE @isAdd int SET @DataLength = DATALENGTH(@SidMembers) Set @Return = 0 Set @Pos = 1 WHILE @DataLength - @Pos > 8 BEGIN SET @isAdd = CAST(SUBSTRING(@SidMembers, @Pos, 1) AS int) SET @Pos = @Pos + 1 SET @SidLength = CAST(SUBSTRING(@SidMembers, @Pos, 1) AS int) SET @Pos = @Pos + 1 -- make sure that we the SidLength is not lying to us! IF @SidLength >= 12 AND @SidLength < 85 AND @DataLength - @Pos >= @SidLength - 1 BEGIN SET @SidMember = CAST(SUBSTRING(@SidMembers, @Pos, @SidLength) AS varbinary) SET @Pos = @Pos + @SidLength -- if NNNN=0, then it means to delete IF @isAdd <> 0 BEGIN Exec AzMan_SPI_AzApplicationGroup_Single_SidMember @Return output, @GroupId, @IsMember, @SidMember, @SaclIsOn IF @Return <> 0 Break End ELSE BEGIN Exec AzMan_SPD_AzApplicationGroup_Single_SidMember @Return output, @GroupId, @IsMember ,@SidMember, @SaclIsOn IF @Return <> 0 Break End END ELSE SET @Pos = @DataLength END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_SidMembers] ( @Return [int] output , @GroupId [int] -- ID Of Application Group , @SidMembers varbinary (4000) ) As Exec AzMan_SPI_AzApplicationGroup_Multi_SidMembers_Internal @Return output, @GroupId, 1 , @SidMembers Return(@Return) go Create Procedure AzMan_SPI_AzApplicationGroup_Multi_SidNonMembers ( @Return [int] output , @GroupId [int] -- ID Of Application Group , @SidMembers varbinary (4000) ) As Exec AzMan_SPI_AzApplicationGroup_Multi_SidMembers_Internal @Return output, @GroupId, 0 , @SidMembers Return(@Return) go Create Procedure [AzMan_SPI_AzApplicationGroup_Single_AppMember] ( @Return [int] output, @GroupId [int] -- ID Of Application Group , @ChildID [int] , @IsMember [bit] = 1 , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @groupName nvarchar(512) DECLARE @groupGuid uniqueidentifier DECLARE @refGroupName nvarchar(512) DECLARE @refGroupGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Group_AppMember] (ChildID, Member, GroupID) VALUES (@ChildID, @IsMember, @GroupId) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 --Generic Error End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @groupName = appGroup.Name, @groupGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @GroupId SELECT @refGroupName = refGroup.Name, @refGroupGuid = refGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] refGroup WHERE refGroup.ID = @ChildID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 2, -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN 5, -- 5 for application group @groupName, @groupGuid, 5, -- 5 for application group @refGroupName, @refGroupGuid, N'' -- no other info END Set NoCount Off Return @Return GO Create Procedure [AzMan_SPD_AzApplicationGroup_Single_AppMember] ( @Return [int] output, @GroupId [int] -- ID Of Application Group , @ChildID [int] , @IsMember [bit] = 1 , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @groupName nvarchar(512) DECLARE @groupGuid uniqueidentifier DECLARE @refGroupName nvarchar(512) DECLARE @refGroupGuid uniqueidentifier Set @Return = 0 Set NoCount On Delete From [AzMan_Group_AppMember] where ChildID = @ChildID and Member = @IsMember and GroupID = @GroupId SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @groupName = appGroup.Name, @groupGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @GroupId SELECT @refGroupName = refGroup.Name, @refGroupGuid = refGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] refGroup WHERE refGroup.ID = @ChildID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 3, -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE 5, -- 5 for application group @groupName, @groupGuid, 5, -- 5 for application group @refGroupName, @refGroupGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_AppMembers_Internal] ( @Return [int] output, @GroupId [int] -- ID Of Application Group , @SepChar [char] (1) = "|" , @IsMember [bit] = 1 , @AppMemberIDs [nvarchar] (4000) ) As DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set NoCount On -- First parse the SidMembers string -- Insert each one of them Declare @AccessAtObjType [tinyint] Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupId, 5, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End DECLARE @AppMember varchar(100), @Pos int DECLARE @iAppMemberID int DECLARE @equal char DECLARE @addOrDelete nvarchar(10) DECLARE @isAdd int SET @equal = '=' Set @Return = 0 SET @AppMemberIDs = LTRIM(RTRIM(@AppMemberIDs))+ @SepChar SET @Pos = CHARINDEX(@equal, @AppMemberIDs, 1) IF REPLACE(@AppMemberIDs, @SepChar, '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @AppMember = LTRIM(RTRIM(LEFT(@AppMemberIDs, @Pos - 1))) Set @iAppMemberID = CAST(@AppMember as int) -- remove the left part (the id) SET @AppMemberIDs = RIGHT(@AppMemberIDs, LEN(@AppMemberIDs) - @Pos) -- now move to the pipe separator SET @Pos = CHARINDEX(@SepChar, @AppMemberIDs, 1) SET @addOrDelete = LTRIM(RTRIM(LEFT(@AppMemberIDs, @Pos - 1))) Set @isAdd = CAST(@addOrDelete as int) IF @iAppMemberID > 0 BEGIN -- if NNNN=0, then it means to delete IF @isAdd <> 0 BEGIN Exec AzMan_SPI_AzApplicationGroup_Single_AppMember @Return output, @GroupId, @iAppMemberID , @IsMember, @SaclIsOn if @Return <> 0 Begin Break End End else BEGIN Exec AzMan_SPD_AzApplicationGroup_Single_AppMember @Return output, @GroupId, @iAppMemberID , @IsMember, @SaclIsOn if @Return <> 0 Begin Break End End END SET @AppMemberIDs = RIGHT(@AppMemberIDs, LEN(@AppMemberIDs) - @Pos) SET @Pos = CHARINDEX(@equal, @AppMemberIDs, 1) END END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_AppMembers] ( @Return [int] output , @GroupId [int] -- ID Of Application Group , @SepChar [char] (1) = "|" , @AppMemberIDs [nvarchar] (4000) ) As Exec AzMan_SPI_AzApplicationGroup_Multi_AppMembers_Internal @Return output, @GroupId, @SepChar, 1 , @AppMemberIDs Return(@Return) go Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_AppNonMembers] ( @Return [int] output , @GroupId [int] -- ID Of Application Group , @SepChar [char] (1) = "|" , @AppMemberIDs [nvarchar] (4000) ) As Exec AzMan_SPI_AzApplicationGroup_Multi_AppMembers_Internal @Return output, @GroupId, @SepChar, 0 , @AppMemberIDs Return(@Return) go Create Procedure [AzMan_SPI_AzRoleAssignment_Single_SidMember] ( @Return [int] output, @RoleId [int] -- ID Of Role , @SidMember varbinary (85) , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Role_SIDMember] (MemberSID, RoleID) VALUES (@SidMember,@RoleId) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 0 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 -- General Error End End -- get the info for auditing IF @SaclIsOn = 1 BEGIN SELECT @roleName = Role.Name, @roleGuid = Role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] Role WHERE Role.ID = @RoleId -- generate an audit EXEC [AzMan_SP_GenerateMemberAudit] @Return, 4, -- 4 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN 6, -- 6 for role @roleName, @roleGuid, N'', @SidMember, 1, -- 1 for member N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzRoleAssignment_Single_SidMember] ( @Return [int] output, @RoleId [int] -- ID Of RoleAssignment , @SidMember varbinary(85) , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @userName nvarchar(512) Set NoCount On Set @Return = 0 Delete From [AzMan_Role_SIDMember] where MemberSID = @SidMember and RoleID = @RoleId SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- get the info for auditing IF @SaclIsOn = 1 BEGIN SELECT @roleName = Role.Name, @roleGuid = Role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] Role WHERE Role.ID = @RoleId -- We can't lookup names from SID, but XP can do that SET @userName = '' -- generate an audit EXEC [AzMan_SP_GenerateMemberAudit] @Return, 5, -- 5 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE 6, -- 6 for role @roleName, @roleGuid, N'', @SidMember, 1, -- 1 for member N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment_Multi_SidMembers] ( @Return [int] output , @RoleId [int] -- ID Of Role Assignment , @SidMembers varbinary (4000) ) As DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set NoCount On -- First parse the SidMembers string -- Insert each one of them Declare @AccessAtObjType [tinyint] Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleId, 6, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End DECLARE @DataLength int DECLARE @SidLength int DECLARE @Sid varbinary(85) DECLARE @Pos int DECLARE @isAdd int SET @DataLength = DATALENGTH(@SidMembers) Set @Return = 0 Set @Pos = 1 WHILE @DataLength - @Pos > 8 BEGIN SET @isAdd = CAST(SUBSTRING(@SidMembers, @Pos, 1) AS int) SET @Pos = @Pos + 1 SET @SidLength = CAST(SUBSTRING(@SidMembers, @Pos, 1) AS int) SET @Pos = @Pos + 1 -- make sure that we the SidLength is not lying to us! IF @SidLength >= 12 AND @SidLength < 85 AND @DataLength - @Pos >= @SidLength - 1 BEGIN SET @Sid = CAST(SUBSTRING(@SidMembers, @Pos, @SidLength) as varbinary) SET @Pos = @Pos + @SidLength -- if NNNN=0, then it means to delete IF @isAdd <> 0 BEGIN Exec AzMan_SPI_AzRoleAssignment_Single_SidMember @Return output, @RoleId, @Sid, @SaclIsOn IF @Return <> 0 Break End ELSE BEGIN Exec AzMan_SPD_AzRoleAssignment_Single_SidMember @Return output, @RoleId, @Sid, @SaclIsOn IF @Return <> 0 Break End END ELSE BEGIN SET @Pos = @DataLength END END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment_Single_AppMember] ( @Return [int] output, @RoleId [int] -- ID Of Role Assignment , @ChildID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @refGroupName nvarchar(512) DECLARE @refGroupGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Role_AppMember] (ChildID, RoleID) VALUES (@ChildID, @RoleId) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @roleName = role.Name, @roleGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role WHERE role.ID = @RoleId SELECT @refGroupName = refGroup.Name, @refGroupGuid = refGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] refGroup WHERE refGroup.ID = @ChildID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 2, -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN 6, -- 6 for role @roleName, @roleGuid, 5, -- 5 for application group @refGroupName, @refGroupGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzRoleAssignment_Single_AppMember] ( @Return [int] output, @RoleId [int] -- ID Of Role Assignment , @ChildID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @refGroupName nvarchar(512) DECLARE @refGroupGuid uniqueidentifier Set @Return = 0 Set NoCount On Delete From [AzMan_Role_AppMember] where ChildID = @ChildID and RoleID = @RoleId SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @roleName = role.Name, @roleGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role WHERE role.ID = @RoleId SELECT @refGroupName = refGroup.Name, @refGroupGuid = refGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] refGroup WHERE refGroup.ID = @ChildID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 3, -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE 6, -- 6 for role @roleName, @roleGuid, 5, -- 5 for application group @refGroupName, @refGroupGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment_Multi_AppMembers] ( @Return [int] output , @RoleId [int] -- ID Of Role Assignment , @SepChar [char] (1) = "|" , @AppMemberIDs [nvarchar] (4000) ) As Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleId, 6, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 DECLARE @equal char DECLARE @addOrDelete nvarchar(10) DECLARE @isAdd int SET @equal = '=' Set NoCount On -- First parse the SidMembers string -- Insert each one of them DECLARE @AppMember varchar(100), @Pos int DECLARE @iAppMemberID int SET @AppMemberIDs = LTRIM(RTRIM(@AppMemberIDs))+ @SepChar SET @Pos = CHARINDEX(@equal, @AppMemberIDs, 1) IF REPLACE(@AppMemberIDs, @SepChar, '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @AppMember = LTRIM(RTRIM(LEFT(@AppMemberIDs, @Pos - 1))) Set @iAppMemberID = CAST(@AppMember as int) -- remove the left part (the id) SET @AppMemberIDs = RIGHT(@AppMemberIDs, LEN(@AppMemberIDs) - @Pos) -- now move to the pipe separator SET @Pos = CHARINDEX(@SepChar, @AppMemberIDs, 1) SET @addOrDelete = LTRIM(RTRIM(LEFT(@AppMemberIDs, @Pos - 1))) Set @isAdd = CAST(@addOrDelete as int) IF @iAppMemberID > 0 BEGIN IF @isAdd <> 0 BEGIN Exec AzMan_SPI_AzRoleAssignment_Single_AppMember @Return output, @RoleId, @iAppMemberID, @SaclIsOn if @Return <> 0 Begin Break End End ELSE BEGIN Exec AzMan_SPD_AzRoleAssignment_Single_AppMember @Return output, @RoleId, @iAppMemberID, @SaclIsOn if @Return <> 0 Begin Break End End END SET @AppMemberIDs = RIGHT(@AppMemberIDs, LEN(@AppMemberIDs) - @Pos) SET @Pos = CHARINDEX(@equal, @AppMemberIDs, 1) END END Done: Set NoCount Off Return(@Return) GO Create Procedure [spDrop_AzMan_Table] as drop table [AzMan_Role_To_Operation_Link] drop table [AzMan_Role_To_Task_Link] drop table [AzMan_Task_To_Task_Link] drop table [AzMan_Task_To_Operation_Link] drop table [AzMan_AzTask] drop table [AzMan_AzOperation] drop table [AzMan_LDAPQuery] drop table [AzMan_BizRule] drop table [AzMan_Group_SIDMember] drop table [AzMan_Group_AppMember] drop table [AzMan_AzApplicationGroup] drop table [AzMan_Role_SIDMember] drop table [AzMan_Role_AppMember] drop table [AzMan_AzRoleAssignment] drop table [AzMan_AzScope_Name] drop table [AzMan_AzScope] drop table [AzMan_AzApplication] drop table [AzMan_AzAuthorizationStore] Return(0) GO ----------------------------Select queries---------------------------------------------- Create Procedure [AzMan_SPS_Get_AzAuthorizationStoreByName] -- Retrieve specific records from the [AzMan_AzAuthorizationStore] table depending on the input parameters you supply. ( @Return [int] output, @Name [nvarchar] (512) ) as Begin DECLARE @RowCount INT, @Error INT DEclare @ID INT select @ID=ID from [AzMan_AzAuthorizationStore] where Name = @Name SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 0, 0, @SaclIsOn output if @Return >= 1 Begin Select [ID] ,[DomainTimeout] ,[ScriptEngineTimeout] ,[MaxScriptEngines] ,[ApplyStoreSacl] ,[GenerateAudits] ,[MajorVersion] ,[MinorVersion] ,[ObjectGuid] ,[TargetMachine] ,[Description] ,[ApplicationData] --,[ChildUpdateTimeStamp] From [AzMan_AzAuthorizationStore] where Name = @Name SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzApplications] ( @Return [int] output, @StoreID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@StoreID, 0, 0, @SaclIsOn output if @Return <= 0 goto Done Else if @Return = 1 or @Return = 2 Begin Select [ID], [ObjectGuid] , IsNull([ApplyStoreSacl], 0), IsNull([GenerateAudits], 0), IsNull([AuthzInterfaceClsId], 0), IsNull([ApplicationVersion], N''), [Name], IsNull([Description], N''), [ApplicationData] --[ChildUpdateTimeStamp] From [AzMan_AzApplication] where StoreID = @StoreID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End Else if @Return = 3 -- Delegated user Begin -- Get all the child app where the current user has access Select [ID], [ObjectGuid] , [ApplyStoreSacl], [GenerateAudits], [AuthzInterfaceClsId], [ApplicationVersion], [Name], [Description], [ApplicationData] --[ChildUpdateTimeStamp] From [AzMan_AzApplication] where StoreID = @StoreID and ID in ( select ObjectID from [dbo].[Azman_SQLRole] where [dbo].[Azman_SQLRole].[ObjectType] = 1 and is_member([dbo].[Azman_SQLRole].[SQLRoleName]) = 1 ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Get_AzApplication] ( @Return [int] output, @ID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 1, 0, @SaclIsOn output if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [StoreID], [ApplyStoreSacl], [GenerateAudits], [AuthzInterfaceClsId], [ObjectGuid], [ApplicationVersion], [Name], [Description], [ApplicationData] From [AzMan_AzApplication] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzScope] ( @Return [int] output, @AppID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the App level Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@AppID, 1, 0, @SaclIsOn output if @Return <= 0 goto Done Else if @Return = 1 or @Return = 2 Begin Select [ID], [NameLen], IsNull([HasSpecificUsers], 0) AS HasSpecificUsers, [NameHash], [ObjectGuid] , [Description], [Name], [ApplicationData] From [AzMan_AzScope] where AppID = @AppID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End end Else if @Return = 3 -- Delegated user Begin Select [ID], [NameLen], IsNull([HasSpecificUsers], 0) AS HasSpecificUsers, [NameHash], [ObjectGuid] , [Description], [Name], [ApplicationData] From [AzMan_AzScope] where AppID = @AppID and ID in ( select ObjectID from [dbo].[Azman_SQLRole] where [dbo].[Azman_SQLRole].[ObjectType] = 4 and is_member([dbo].[Azman_SQLRole].[SQLRoleName]) = 1 ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzApplicationGroup] ( @Return int output, @ParentID int ,@ParentType tinyint ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the parent Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentID, @ParentType, 0, @SaclIsOn output if @Return <= 0 goto Done -- The user either has admin, reader or delegated uset at the parent -- So he can see the groups Else if @Return = 1 or @Return = 2 or @Return = 3 Begin if @ParentType = 0 Begin Select [ID], [GroupType] , [ObjectGuid] , [Name] , ISNULL ( [Description] , N'' ) From [AzMan_AzApplicationGroup] where (StoreID = @ParentID ) and ParentType = @ParentType End else if @ParentType = 1 Begin Select [ID], [GroupType], [ObjectGuid], [Name], ISNULL ( [Description] , N'' ) From [AzMan_AzApplicationGroup] where (AppID = @ParentID ) and ParentType = @ParentType End else if @ParentType = 4 Begin Select [ID], [GroupType], [ObjectGuid], [Name], ISNULL ( [Description] , N'' ) From [AzMan_AzApplicationGroup] where (ScopeID = @ParentID ) and ParentType = @ParentType End SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzTask] ( @Return int output, @ParentID int ,@ParentType tinyint ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the parent Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentID, @ParentType, 0, @SaclIsOn output if @Return <= 0 goto Done -- The user either has admin, reader or delegated uset at the parent -- So he can see the Task Else if @Return = 1 or @Return = 2 or @Return = 3 Begin if @ParentType = 1 Begin Select [ID], [IsRoleDefinition], [ObjectGuid] , [Name] , [Description], [ApplicationData] From [AzMan_AzTask] where AppID = @ParentID End else if @ParentType = 4 Begin Select [ID], [IsRoleDefinition], [ObjectGuid] , [Name] , [Description], [ApplicationData] From [AzMan_AzTask] where ScopeID = @ParentID End else Begin Set @Return = -1 goto Done End SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzTask_Operations] ( @Return int output, @TaskID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the Task Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@TaskID, 3, 0, @SaclIsOn output if @Return <= 0 goto Done -- The user either has admin, reader or delegated user at the parent -- So he can see the task Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From [AzMan_Task_To_Operation_Link] INNER JOIN AzMan_AzOperation ON [AzMan_Task_To_Operation_Link].[OperationID] = AzMan_AzOperation.ID where TaskID = @TaskID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzTask_Tasks] ( @Return int output, @TaskID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the Task Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@TaskID, 3, 0, @SaclIsOn output if @Return <= 0 goto Done -- The user either has admin, reader or delegated user at the parent -- So he can see the task Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From [AzMan_Task_To_Task_Link] INNER JOIN AzMan_AzTask ON [AzMan_Task_To_Task_Link].[ChildID] = AzMan_AzTask.ID where [AzMan_Task_To_Task_Link].[TaskID] = @TaskID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzRoleAssignment_Tasks] ( @Return int output, @RoleID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the Role Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated uset at the parent -- So he can see the Role Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From [AzMan_Role_To_Task_Link] INNER JOIN AzMan_AzTask ON [TaskID] = AzMan_AzTask.ID where [RoleID] = @RoleID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return (@Return) GO Create Procedure [AzMan_SPS_Enum_AzRoleAssignment_Operations] ( @Return int output, @RoleID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the Role Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see the role Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From [AzMan_Role_To_Operation_Link] INNER JOIN AzMan_AzOperation ON [AzMan_Role_To_Operation_Link].OperationID = AzMan_AzOperation.ID where [RoleID] = @RoleID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzRoleAssignment] ( @Return int output, @ParentID int ,@ParentType tinyint ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the parent Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentID, @ParentType, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End Else if @Return = 1 or @Return = 2 or @Return = 3 Begin if @ParentType = 1 Begin Select [ID], [ObjectGuid] , [Name], [Description], [ApplicationData] From [AzMan_AzRoleAssignment] where AppID = @ParentID and ParentType = @ParentType End else if @ParentType = 4 Begin Select [ID], [ObjectGuid] , [Name], [Description], [ApplicationData] From [AzMan_AzRoleAssignment] where ScopeID = @ParentID and ParentType = @ParentType End else Begin Set @Return = -1 goto Done End SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure AzMan_SPS_Get_AzApplicationGroup ( @Return int output, @ID int ) as DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End Else if @Return = 1 or @Return = 2 or @Return = 3 BEGIN Begin Select [GroupType], [ObjectGuid] , [Name], IsNull([Description], N'') From [AzMan_AzApplicationGroup] where [ID] = @ID End SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Set @Return = @Error else Set @Return = 0 END Done: Return(@Return) GO Create Procedure [AzMan_SPS_Get_AzApplicationGroup_BizruleInfo] ( @Return int output, @ID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [BizRuleLanguage], [BizRuleImportedPath] , [BizRule] From [AzMan_BizRule] where ParentId = @ID and ParentType = 5 and ID in ( Select [BizRuleID] From [AzMan_BizRule_To_Group] where [GroupID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Get_AzTask_BizruleInfo] ( @Return int output, @ID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 3, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Set @Return = 0 Select [BizRuleLanguage], [BizRuleImportedPath] , [BizRule] From [AzMan_BizRule] where ParentId = @ID and ParentType = 3 and ID in ( Select [BizRuleID] From [AzMan_BizRule_To_Task] where [TaskID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Get_AzApplicationGroup_LDAPQuery] ( @Return int output, @GroupID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Set @Return = 0 Select [LdapQuery] From [AzMan_LDAPQuery] where GroupID = @GroupID and ID in ( Select [LdapQueryID] From [AzMan_AzApplicationGroup] where ID = @GroupID ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzApplicationGroup_SIDMembers] ( @Return int output, @GroupID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the Group -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [MemberSID] From [AzMan_Group_SIDMember] where GroupID = @GroupID and [Member] = 1 SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzApplicationGroup_SIDNonMembers] ( @Return int output, @GroupID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the Group -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [MemberSID] From [AzMan_Group_SIDMember] where GroupID = @GroupID and [Member] = 0 SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzApplicationGroup_AppMembers] ( @Return int output, @GroupID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the Group -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From AzMan_AzApplicationGroup where ID in ( Select ChildID from AzMan_Group_AppMember where GroupID = @GroupID and [Member] = 1 ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzApplicationGroup_AppNonMembers] ( @Return int output, @GroupID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the Group -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From AzMan_AzApplicationGroup where ID in ( Select ChildID from AzMan_Group_AppMember where GroupID = @GroupID and [Member] = 0 ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzRoleAssignment_SIDMembers] ( @Return int output, @RoleID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the Role -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [MemberSID] From [AzMan_Role_SIDMember] where RoleID = @RoleID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzRoleAssignment_AppMembers] ( @Return int output, @RoleID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the Role -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From AzMan_AzApplicationGroup where ID IN ( select ChildID from [AzMan_Role_AppMember] where RoleID = @RoleID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) go Create Procedure [AzMan_SPS_Get_AzScope] ( @Return int output, @ScopeID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ScopeID, 4, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the App -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [AppID], [NameLen], IsNull([HasSpecificUsers], 0) AS HasSpecificUsers, [NameHash], [ObjectGuid] , [Description], [Name], [ApplicationData] From [AzMan_AzScope] where ID = @ScopeID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzOperation] ( @Return int output, @AppID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the Application Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@AppID, 1, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the App -- So he can see the operations Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ID], [OperationID], [ObjectGuid] , [Name], [Description], [ApplicationData] From [AzMan_AzOperation] where AppID = @AppID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Get_AzOperation] ( @Return int output, @ID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 2, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see the operation Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [OperationID], [ObjectGuid] , [Name] , [Description], [ApplicationData] From [AzMan_AzOperation] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return (@Return) GO Create Procedure [AzMan_SPS_Get_AzTask] ( @Return int output, @ID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 3, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see the object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [IsRoleDefinition], [ObjectGuid] , [Name], [Description], [ApplicationData] From [AzMan_AzTask] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Get_AzRoleAssignment] ( @Return int output, @ID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 6, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see the object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] , [Name] , [Description], [ApplicationData] From [AzMan_AzRoleAssignment] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return (@Return) GO -- Delete Queries Create Procedure [AzMan_SPD_AzOperation] -- Delete a specific record from table [AzMan_AzOperation] ( @Return int output, @ID [int] ,@AppId [int] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @childName nvarchar(512) DECLARE @childGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 2, 1, @SaclIsOn output if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = App.Name, @parentGuid = App.ObjectGuid FROM [dbo].[AzMan_AzApplication] App WHERE App.ID = @AppId SELECT @childName = Op.Name, @childGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op WHERE Op.ID = @ID END Delete From [dbo].[AzMan_AzOperation] Where ((@ID Is Null) Or ([ID] = @ID)) And ((@AppId Is Null) Or ([AppID] = @AppId)) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE 1, -- 1 for application @parentName, @parentGuid, 2, -- 2 for Operation @childName, @childGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzScope] -- Delete a specific record from table [AzMan_AzScope] ( @Return int output, @ID [int] ,@AppId [int] = Null ) As DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @childName nvarchar(512) DECLARE @childGuid uniqueidentifier Set NoCount On DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 4, 1, @SaclIsOn output if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = App.Name, @parentGuid = App.ObjectGuid FROM [dbo].[AzMan_AzApplication] App WHERE App.ID = @AppId SELECT @childName = scope.Name, @childGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ID END Delete From [dbo].[AzMan_AzScope] Where ((@ID Is Null) Or ([ID] = @ID)) And ((@AppId Is Null) Or ([AppID] = @AppId)) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE 1, -- 1 for application @parentName, @parentGuid, 4, -- 4 for scope @childName, @childGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzApplication] -- Delete a specific record from table [AzMan_AzApplication] ( @Return int output, @ID [int] -- for [AzMan_AzApplication].[ID] column ,@StoreId [int] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @childName nvarchar(512) DECLARE @childGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 1, 1, @SaclIsOn output if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = store.Name, @parentGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID = @StoreId SELECT @childName = app.Name, @childGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ID END Delete From [dbo].[AzMan_AzApplication] Where ((@ID Is Null) Or ([ID] = @ID)) And ((@StoreId Is Null) Or ([StoreID] = @StoreId)) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE 0, -- 0 for store @parentName, @parentGuid, 1, -- 1 for application @childName, @childGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzAuthorizationStore] -- Delete a specific record from table [AzMan_AzAuthorizationStore] ( @Return int output, @ID [int] ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 0, 1, @SaclIsOn output -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = store.Name, @parentGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID = @ID END if @Return <> 1 Begin if (@Return >= 2) Set @Return = -5 End ELSE Begin Set @Return = 0 Delete From [dbo].[AzMan_AzAuthorizationStore] Where ((@ID Is Null) Or ([ID] = @ID)) End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE 0, -- 0 for store @parentName, @parentGuid, 0, -- 0 for store @parentName, @parentGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzApplicationGroup] -- Delete a specific record from table [AzMan_AzApplicationGroup] ( @Return int output, @ID [int] ,@ParentId [int] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @childName nvarchar(512) DECLARE @childGuid uniqueidentifier DECLARE @ParentType tinyint Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 5, 1, @SaclIsOn output if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ParentType = appGroup.ParentType, @childName = appGroup.Name, @childGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @ID IF @ParentType = 0 -- store SELECT @parentName = store.Name, @parentGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID = @ParentId ELSE IF @ParentType = 1 -- app SELECT @parentName = app.Name, @parentGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ParentId ELSE IF @ParentType = 4 -- scope SELECT @parentName = scope.Name, @parentGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ParentId END Delete From [dbo].[AzMan_AzApplicationGroup] Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE @ParentType, @parentName, @parentGuid, 5, -- 5 for group @childName, @childGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzTask] -- Delete a specific record from table [AzMan_AzTask] ( @Return int output, @ID [int] ,@ParentId [int] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @childName nvarchar(512) DECLARE @childGuid uniqueidentifier DECLARE @ParentType tinyint Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 3, 1, @SaclIsOn output if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ParentType = task.ParentType, @childName = task.Name, @childGuid = task.ObjectGuid FROM [dbo].[AzMan_AzTask] task WHERE task.ID = @ID IF @ParentType = 1 -- app SELECT @parentName = app.Name, @parentGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ParentId ELSE IF @ParentType = 4 -- scope SELECT @parentName = scope.Name, @parentGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ParentId END Delete From [dbo].[AzMan_AzTask] Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE @ParentType, @parentName, @parentGuid, 3, -- 3 for task @childName, @childGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzRoleAssignment] -- Delete a specific record from table ( @Return int output, @ID [int] ,@ParentId [int] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @childName nvarchar(512) DECLARE @childGuid uniqueidentifier DECLARE @ParentType tinyint Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 6, 1, @SaclIsOn output if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ParentType = role.ParentType, @childName = role.Name, @childGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role WHERE role.ID = @ID IF @ParentType = 1 -- app SELECT @parentName = app.Name, @parentGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ParentId ELSE IF @ParentType = 4 -- scope SELECT @parentName = scope.Name, @parentGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ParentId END Delete From [dbo].[AzMan_AzRoleAssignment] Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE @ParentType, @parentName, @parentGuid, 6, -- 6 for role @childName, @childGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStamp GO -- query the timestamps of a store CREATE PROCEDURE AzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStamp ( @ReturnCode int output, @storeID int ) AS SELECT @ReturnCode = 0 SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0), IsNull([ChildUpdateTimeStamp], 0) FROM [AzMan_AzAuthorizationStore] WHERE [ID] = @storeID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzApplicationUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzApplicationUpdateTimeStamp GO -- query the timestamps of applications CREATE PROCEDURE AzMan_SPS_Enum_AzApplicationUpdateTimeStamp ( @ReturnCode int output, @storeID int ) AS SELECT @ReturnCode = 0 SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0), IsNull([ChildUpdateTimeStamp], 0) FROM [AzMan_AzApplication] WHERE [StoreID] = @storeID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzScopeUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzScopeUpdateTimeStamp GO -- query the timestamps of scopes CREATE PROCEDURE AzMan_SPS_Enum_AzScopeUpdateTimeStamp ( @ReturnCode int output, @appID int ) AS SELECT @ReturnCode = 0 SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0), IsNull([ChildUpdateTimeStamp], 0) FROM [AzMan_AzScope] WHERE [AppID] = @appID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzApplicationGroupUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzApplicationGroupUpdateTimeStamp GO -- query the timestamps of application groups CREATE PROCEDURE AzMan_SPS_Enum_AzApplicationGroupUpdateTimeStamp ( @ReturnCode int output, @parentID int, @parentType tinyint ) AS SELECT @ReturnCode = 0 IF (@parentType = 0) SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzApplicationGroup] WHERE [StoreID] = @parentID IF (@parentType = 1) SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzApplicationGroup] WHERE [AppID] = @parentID IF (@parentType = 4) SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzApplicationGroup] WHERE [ScopeID] = @parentID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzOperationUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzOperationUpdateTimeStamp GO -- query the timestamps of operations CREATE PROCEDURE AzMan_SPS_Enum_AzOperationUpdateTimeStamp ( @ReturnCode int output, @appID int ) AS SELECT @ReturnCode = 0 SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzOperation] WHERE [AppID] = @appID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStamp GO -- query the timestamps of roles CREATE PROCEDURE AzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStamp ( @ReturnCode int output, @parentID int, @parentType tinyint ) AS SELECT @ReturnCode = 0 IF (@parentType = 1) SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzRoleAssignment] WHERE [AppID] = @parentID ELSE SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzRoleAssignment] WHERE [ScopeID] = @parentID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzTaskUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzTaskUpdateTimeStamp GO -- query the timestamps of tasks CREATE PROCEDURE AzMan_SPS_Enum_AzTaskUpdateTimeStamp ( @ReturnCode int output, @parentID int, @parentType tinyint ) AS SELECT @ReturnCode = 0 IF (@parentType = 1) SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzTask] WHERE [AppID] = @parentID ELSE SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzTask] WHERE [ScopeID] = @parentID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPD_SQLRole' and type = 'P') DROP PROCEDURE AzMan_SPD_SQLRole GO CREATE PROCEDURE AzMan_SPD_SQLRole ( @Return [int] output, @SQLRoleName [nvarchar] (64) ) AS DECLARE @Ret [int] DECLARE @member [nvarchar] (64) DECLARE roleMember_cursor CURSOR FOR ( select u.name from sysusers u, sysusers g, sysmembers m where g.name = @SQLRoleName and g.uid = m.groupuid and g.issqlrole = 1 and u.uid = m.memberuid ) OPEN roleMember_cursor FETCH NEXT FROM roleMember_cursor INTO @member WHILE @@FETCH_STATUS = 0 BEGIN EXEC @Ret = sp_droprolemember @SQLRoleName, @member FETCH NEXT FROM roleMember_cursor INTO @member END Close roleMember_cursor DEALLOCATE roleMember_cursor Set @Return = -1 Exec @Ret = sp_droprole @SQLRoleName if @Ret <> 0 Begin Set @Return = -1 End Else Begin Set @Return = 0 End Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPD_All_SQLRole_ForObject' and type = 'P') DROP PROCEDURE AzMan_SPD_All_SQLRole_ForObject GO CREATE PROCEDURE AzMan_SPD_All_SQLRole_ForObject ( @Return [int] output, @ID [int], @ObjectType [tinyint] ) AS DECLARE @uid [int] DECLARE @SQLRoleName [nvarchar] (64) Set @Return = 0 SELECT @uid = 0 Select @uid=[uid], @SQLRoleName = [SQLRoleName] From [dbo].[Azman_SQLRole] where [ObjectID] = @ID and [ObjectType] = @ObjectType and [RoleType] = 1 IF @uid <> 0 Begin Exec AzMan_SPD_SQLRole @Return output, @SQLRoleName End SELECT @uid = 0 Select @uid=[uid], @SQLRoleName = [SQLRoleName] From [dbo].[Azman_SQLRole] where [ObjectID] = @ID and [ObjectType] = @ObjectType and [RoleType] = 2 IF @uid <> 0 Begin Exec AzMan_SPD_SQLRole @Return output, @SQLRoleName End set @uid = 0 Select @uid=[uid], @SQLRoleName = [SQLRoleName] From [dbo].[Azman_SQLRole] where [ObjectID] = @ID and [ObjectType] = @ObjectType and [RoleType] = 3 IF @uid <> 0 Begin Exec AzMan_SPD_SQLRole @Return output, @SQLRoleName End if @Return = 0 Begin DELETE Azman_SQLRole WHERE [ObjectID] = @ID AND [ObjectType] = @ObjectType Set @Return = 0 End Done: Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPD_SQLRole_ForObject' and type = 'P') DROP PROCEDURE AzMan_SPD_SQLRole_ForObject GO CREATE PROCEDURE AzMan_SPD_SQLRole_ForObject ( @Return [int] output, @ID [int], @ObjectType [tinyint], @DeleteFlag [int] -- bitwise pattern. 0x0001 for deleting only self, 0x0002 for deleting only children ) AS SET NOCOUNT ON DECLARE @SQLRoleName [nvarchar] (64) Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Declare @DbName [nvarchar] (255) Set @SaclIsOn = 0 Set @Return = -1 -- such role deletion audit will be generated by the object deletion. -- so we don't care about SACL (second last parameter) here Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, @ObjectType, 0, @SaclIsOn output if @Return <> 1 Begin -- if the object is deleted we will ignore as we still want to delete all the roles for the object if @Return = -1168 Begin Set @Return = 0 End Else Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End End -- our deletion flag will switch to delete all because we only need -- to make sure that the acting container object's roles are not deleted -- so that the user still has access -- if we are instructed to delete sub-container's roles if (@DeleteFlag & 2) <> 0 begin -- for applications or stores, we also need to delete the sub-container's roles DECLARE @locReturn int -- we have to press on for this action. No rollback IF @ObjectType = 0 BEGIN DECLARE @AppID int DECLARE app_cursor CURSOR FOR ( select App.ID FROM AzMan_AzApplication App WHERE App.StoreID = @ID ) OPEN app_cursor FETCH NEXT FROM app_cursor INTO @AppID WHILE @@FETCH_STATUS = 0 BEGIN -- now call recursively to delete the app's roles EXEC AzMan_SPD_SQLRole_ForObject @locReturn output, @AppID, 1, 3 FETCH NEXT FROM app_cursor INTO @AppID END Close app_cursor DEALLOCATE app_cursor END ELSE IF @ObjectType = 1 BEGIN DECLARE @ScopeID int DECLARE scope_cursor CURSOR FOR ( select Scope.ID FROM AzMan_AzScope Scope WHERE Scope.AppID = @ID ) OPEN scope_cursor FETCH NEXT FROM scope_cursor INTO @ScopeID WHILE @@FETCH_STATUS = 0 BEGIN -- now call recursively to delete the app's roles EXEC AzMan_SPD_SQLRole_ForObject @locReturn output, @ScopeID, 4, 3 FETCH NEXT FROM scope_cursor INTO @ScopeID END Close scope_cursor DEALLOCATE scope_cursor END end -- if we are instructed to delete the self roles if (@DeleteFlag & 1) <> 0 begin If Is_Member('db_owner') = 1 or Is_Member('db_securityadmin') = 1 Begin exec AzMan_SPD_All_SQLRole_ForObject @Return output , @ID, @ObjectType End else begin Set @DbName = db_name() Exec master.dbo.xp_AzManDeleteRole @Return output, @ID, @ObjectType, @DbName End end Done: SET NOCOUNT OFF Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Get_ObjectSecurityOption' and type = 'P') DROP PROCEDURE AzMan_SPS_Get_ObjectSecurityOption GO CREATE PROCEDURE AzMan_SPS_Get_ObjectSecurityOption ( @Return [int] output, @AccessAtObjType [tinyint] output, @ID [int], @ObjectType [tinyint], @UserType [int] output ) AS DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 SET @Return = -5 SET @UserType = 0 -- illegal users IF @ObjectType = 0 OR @ObjectType = 1 OR @ObjectType = 4 BEGIN -- no need to know that SACL (Second last parameter) Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, @ObjectType, 0, @SaclIsOn output IF @Return >= 1 AND @Return <= 3 BEGIN SET @UserType = @Return SET @Return = 0 END END RETURN @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_Grant_Permission' and type = 'P') DROP PROCEDURE AzMan_SP_Grant_Permission GO CREATE PROCEDURE AzMan_SP_Grant_Permission AS grant execute on AzMan_SP_GetSQLRole to public grant execute on AzMan_SPI_SQLRole to public --AzMan_SPI_Add_User_To_SQLRole grant execute on AzMan_SPI_Add_User_To_Role to public --AzMan_SPD_User_From_SQLRole grant execute on AzMan_SPD_User_From_Role to public --AzMan_SP_Get_Object_Path_For_Container --AzMan_SP_Get_Object_Path --AzMan_SP_AccessCheck_For_Container --AzMan_SP_AccessCheck grant execute on AzMan_SPS_Get_StoreIDByName to public --AzMan_SP_Check_Dup_Task --AzMan_SP_Check_Dup_RoleAssignment --AzMan_SP_Check_Dup_Application --AzMan_SP_Check_Dup_Scope --AzMan_SP_Check_Dup_Operation --AzMan_SP_Check_Dup_Group_For_Given_Parent --AzMan_SP_Check_Dup_Group grant execute on AzMan_SPI_AzAuthorizationStore to public grant execute on AzMan_SPI_AzApplication to public grant execute on AzMan_SPU_AzApplication to public grant execute on AzMan_SPI_AzScope to public grant execute on AzMan_SPI_AzOperation to public grant execute on AzMan_SPI_AzApplicationGroup to public grant execute on AzMan_SPI_AzTask to public --AzMan_SPI_AzTask_Single_Operation --AzMan_SPD_AzTask_Single_Operation grant execute on AzMan_SPI_AzTask_Multi_Operations to public --AzMan_SPI_AzRoleAssignment_Single_Operation --AzMan_SPD_AzRoleAssignment_Single_Operation grant execute on AzMan_SPI_AzRoleAssignment_Multi_Operations to public --AzMan_SPI_AzTask_Single_Task --AzMan_SPD_AzTask_Single_Task grant execute on AzMan_SPI_AzTask_Multi_Tasks to public --AzMan_SPI_AzRoleAssignment_Single_Task --AzMan_SPD_AzRoleAssignment_Single_Task grant execute on AzMan_SPI_AzRoleAssignment_Multi_Tasks to public grant execute on AzMan_SPI_AzRoleAssignment to public grant execute on AzMan_SPU_AzAuthorizationStore to public grant execute on AzMan_SPU_AzScope to public grant execute on AzMan_SPU_AzOperation to public grant execute on AzMan_SPU_AzApplicationGroup to public grant execute on AzMan_SPU_AzTask to public grant execute on AzMan_SPU_AzRoleAssignment to public grant execute on AzMan_SPIU_AzApplicationGroup_LDAPQuery to public grant execute on AzMan_SPIU_Bizrule to public grant execute on AzMan_SPIU_AzApplicationGroup_Bizrule to public grant execute on AzMan_SPIU_AzTask_Bizrule to public --AzMan_SPI_AzApplicationGroup_Single_SidMember --AzMan_SPD_AzApplicationGroup_Single_SidMember grant execute on AzMan_SPI_AzApplicationGroup_Multi_SidMembers to public grant execute on AzMan_SPI_AzApplicationGroup_Multi_SidNonMembers to public --AzMan_SPI_AzApplicationGroup_Single_AppMember --AzMan_SPD_AzApplicationGroup_Single_AppMember grant execute on AzMan_SPI_AzApplicationGroup_Multi_AppMembers to public grant execute on AzMan_SPI_AzApplicationGroup_Multi_AppNonMembers to public --AzMan_SPI_AzRoleAssignment_Single_SidMember --AzMan_SPD_AzRoleAssignment_Single_SidMember grant execute on AzMan_SPI_AzRoleAssignment_Multi_SidMembers to public -- AzMan_SPI_AzRoleAssignment_Single_AppMember -- AzMan_SPD_AzRoleAssignment_Single_AppMember grant execute on AzMan_SPI_AzRoleAssignment_Multi_AppMembers to public -- spDrop_AzMan_Table grant execute on AzMan_SPS_Get_AzAuthorizationStoreByName to public grant execute on AzMan_SPS_Enum_AzApplications to public grant execute on AzMan_SPS_Get_AzApplication to public --AzMan_SPS_Get_AzApplication_AppData --AzMan_SPS_Get_AzScope_AppData --AzMan_SPS_Get_AzAuthorizationStore_AppData grant execute on AzMan_SPS_Enum_AzScope to public grant execute on AzMan_SPS_Enum_AzApplicationGroup to public grant execute on AzMan_SPS_Enum_AzTask to public grant execute on AzMan_SPS_Enum_AzTask_Operations to public grant execute on AzMan_SPS_Enum_AzTask_Tasks to public grant execute on AzMan_SPS_Enum_AzRoleAssignment_Tasks to public grant execute on AzMan_SPS_Enum_AzRoleAssignment_Operations to public grant execute on AzMan_SPS_Enum_AzRoleAssignment to public grant execute on AzMan_SPS_Get_AzApplicationGroup to public grant execute on AzMan_SPS_Get_AzApplicationGroup_BizruleInfo to public grant execute on AzMan_SPS_Get_AzTask_BizruleInfo to public grant execute on AzMan_SPS_Get_AzApplicationGroup_LDAPQuery to public grant execute on AzMan_SPS_Enum_AzApplicationGroup_SIDMembers to public grant execute on AzMan_SPS_Enum_AzApplicationGroup_SIDNonMembers to public grant execute on AzMan_SPS_Enum_AzApplicationGroup_AppMembers to public grant execute on AzMan_SPS_Enum_AzApplicationGroup_AppNonMembers to public grant execute on AzMan_SPS_Enum_AzRoleAssignment_SIDMembers to public grant execute on AzMan_SPS_Enum_AzRoleAssignment_AppMembers to public grant execute on AzMan_SPS_Get_AzScope to public grant execute on AzMan_SPS_Enum_AzOperation to public grant execute on AzMan_SPS_Get_AzOperation to public grant execute on AzMan_SPS_Get_AzTask to public grant execute on AzMan_SPS_Get_AzRoleAssignment to public grant execute on AzMan_SPD_AzOperation to public grant execute on AzMan_SPD_AzScope to public grant execute on AzMan_SPD_AzApplication to public grant execute on AzMan_SPD_AzAuthorizationStore to public grant execute on AzMan_SPD_AzApplicationGroup to public grant execute on AzMan_SPD_AzTask to public grant execute on AzMan_SPD_AzRoleAssignment to public grant execute on AzMan_SPD_SQLRole_ForObject to public grant execute on AzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStamp to public grant execute on AzMan_SPS_Enum_AzApplicationUpdateTimeStamp to public grant execute on AzMan_SPS_Enum_AzScopeUpdateTimeStamp to public grant execute on AzMan_SPS_Enum_AzApplicationGroupUpdateTimeStamp to public grant execute on AzMan_SPS_Enum_AzOperationUpdateTimeStamp to public grant execute on AzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStamp to public grant execute on AzMan_SPS_Enum_AzTaskUpdateTimeStamp to public grant execute on AzMan_SP_GenerateObjectAudit to public grant execute on AzMan_SP_GenerateMemberAudit to public grant execute on AzMan_SP_GenerateGenericAudit to public grant execute on AzMan_SPS_Get_ObjectSecurityOption to public grant execute on AzMan_SPS_Get_DBOwners to public grant execute on AzMan_SPS_Get_Role_For_Object to public grant execute on AzMan_SP_GetRoleMemberCount to public grant execute on AzMan_SPI_SQLRole_From_XP to dbo grant execute on AzMan_SPD_All_SQLRole_ForObject to dbo grant execute on AzMan_SPD_User_From_SQLRole_From_XP to dbo grant execute on AzMan_SPI_Add_User_To_SQLRole_From_XP to dbo grant execute on AzMan_SPU_SqlRoleUpdated to public grant execute on AzMan_SPI_Create_SqlRole_For_Object to public GO IF not EXISTS (SELECT name FROM sysobjects WHERE name = 'AzGenerateAudit' and type = 'X') exec sp_addextendedproc 'AzGenerateAudit', 'AzSqlExt.dll' GO IF not EXISTS (SELECT name FROM sysobjects WHERE name = 'xp_AzManAddUserToRole' and type = 'X') exec sp_addextendedproc 'xp_AzManAddUserToRole', 'AzSqlExt.dll' GO IF not EXISTS (SELECT name FROM sysobjects WHERE name = 'xp_AzManRemoveUserFromRole' and type = 'X') exec sp_addextendedproc 'xp_AzManRemoveUserFromRole', 'AzSqlExt.dll' GO IF not EXISTS (SELECT name FROM sysobjects WHERE name = 'xp_AzManDeleteRole' and type = 'X') exec sp_addextendedproc 'xp_AzManDeleteRole', 'AzSqlExt.dll' GO IF not EXISTS (SELECT name FROM sysobjects WHERE name = 'xp_AzManAddRole' and type = 'X') exec sp_addextendedproc 'xp_AzManAddRole', 'AzSqlExt.dll' GO grant execute on AzGenerateAudit to public grant execute on xp_AzManAddUserToRole to public grant execute on xp_AzManRemoveUserFromRole to public grant execute on xp_AzManDeleteRole to public grant execute on xp_AzManAddRole to public MSFT C)W d,X Lx@l4` ( T  H t<| ,Pl2$K0TOQ4BQ3H@4B ]`@@P4B]=x@\ 4Bk@TxP4Btl&@h4B u@P4Bu @84B|@P4Bh}@< 4B h @L P4B 8@| 4B P@ 4P4B 0 h@H P4B  @ h4B@:4BL@0D4B@ 4B@@`x<4BL@F4BD@$-4B(@ <P4B@@|\(!4BtX@|P4Bp@0 "4Bؚ@84B$@T!4Bp@hpX'4Bܜ@@4B̞@T(h4B@Hh4Bh@(hX4B80@H4B H@H4B!0`@ H&B"ģ h!!#ģ '!$ !%B%Lx!%B&L"0%B'L8"@ !(LbX"0HHxx8hP `(@X0@:>20FF킛jO0EŕJ Bld0{'Mk~SHx^m@kۦ5,`$E.}VEjL<x   0/stdole2.tlbWWW/D.x (D2.|0P"@*.$+h0/ !- 1`1( \'$8&##",+-<-0(L)8!`(d "(0d# &<#l T'l!l,h&L0 /)$*"p+( .th/P/10&-`*81 H%x")21,'H* &+X!H+t)'*$8"0(H 1<$( AZROLESLibWW8E5IAzAuthorizationStoreWWW DescriptionWppbstrDescription2ApplicationDataWpbstrApplicationData 7)DomainTimeoutWWWplPropWWЪScriptEngineTimeoutWMaxScriptEngines-GenerateAuditsWW.pbPropWW(Writable]vpfPropWW mGetPropertyW^lPropIdW varReservedW5pvarProp4 'SetPropertyWIvarPropWAddPropertyItemWDeletePropertyItemWW:PolicyAdministrators RpvarAdminsWW "PolicyReadersWWW pvarReadersWzAddPolicyAdministratorWW VbstrAdminWWW RDeletePolicyAdministratorWWWAddPolicyReaderW bstrReaderWW`JDeletePolicyReaderWW NInitializeWWlFlagsWW ;bstrPolicyURLWWW (UpdateCacheWxDeleteWWd8IAzApplicationsWdzItemIndexWWW pvarObtPtrWWd0vCountWWWplCountWdxA_NewEnum ppEnumPtrWWW nApplicationsppAppCollectionW8uIAzApplicationWWTName spbstrNameWWWAuthzInterfaceClsidWp pbstrPropWWWVersionWQApplyStoreSaclWW, 8IAzScopesWWW2ScopesWWppScopeCollectionWWW8IAzScopep8IAzApplicationGroupskWApplicationGroupsWWWppGroupCollectionWWWX8KIAzApplicationGroupWX\TypeX LdapQueryWWWX 2AAppMembersWWXT AppNonMembersWWWXtMembersWX NonMembersWWXT SpAddAppMember3bstrPropXmDeleteAppMemberWXAddAppNonMemberWXKDeleteAppNonMemberWWX rAddMemberWWWX HDeleteMemberXl 4AddNonMemberXc"DeleteNonMemberWX\SubmitWWX AddMemberNameWWWXFDeleteMemberNameXAddNonMemberNameXHKDeleteNonMemberNameWX$ MembersNameWXV@NonMembersNameWWaOpenApplicationGroup bstrGroupNameWWWVppGroupWF4CreateApplicationGroupWWDeleteApplicationGroupWW8mIAzRolesRolesWWWppRoleCollection 8^.IAzRoleW w;AddTaskW  BDeleteTaskWW  ڑAddOperation ?DeleteOperationW  ~VOperationsWW LTasksWWWSOpenRole bstrRoleName[ppRoleWW XCreateRoleWW KDeleteRoleWW48IAzTasksuMppTaskCollection8pIAzTaskWpMBizRuleW BizRuleLanguageW BizRuleImportedPathW1IsRoleDefinitionObstrOpWW(bstrTaskOpenTask _bstrTaskNameppTaskWW CreateTaskWW ϦCanBeDelegatedWWP QBizrulesWritablepPolicyAdministratorsNamed qPolicyReadersNameWWW$jAddPolicyAdministratorNameWWcDeletePolicyAdministratorNameWWWAddPolicyReaderNameW<>DeletePolicyReaderNameWW DaOpenScopeWWW +bstrScopeNameWWWppScopeW ѓCreateScopeW| ZDeleteScopeWL4 8IAzOperationsWWW BppOperationCollectionWWW 8 IAzOperation tOperationIDW OpenOperationWWW |bstrOperationNameWWW` a9ppOperationW (CreateOperationW48IAzClientContextD AccessCheckWbstrObjectNameWW  YvarScopeNamesWWWt n#varOperationsWWWVvarParameterNamesWWW IvarParameterValuesWWvarInterfaceNamesWWW -varInterfaceFlagsWWW rvarInterfacesWWW pvarResultsW GetBusinessRuleStringWWWXgpbstrBusinessRuleStringWUserDnWW UserSamCompatWWWH AddDelegatedPolicyUserNameWW sDeleteDelegatedPolicyUserNameWWW%OpenApplicationW4 KbstrApplicationNameW( ڃppApplicationWWWCreateApplicationWWWL DeleteApplicationWWW TargetMachineWWW| gpbstrTargetMachineWW opbApplyStoreSacl CloseApplication| OrlFlagWWWx 8IAzAuthorizationStore2WW8lIAzApplication2W@08}mIAzClientContext2WWW@ZGetAssignedScopesPageWWWSPageSizeD BpvarCursorWW ]pvarScopeNamesWW@;AddRolesvarRoles@AddApplicationGroupsdvarApplicationGroups@ fAddStringSidsWWWP varStringSidsWWW@X 3LDAPQueryDNWpbstrLDAPQueryDND!InitializeClientContextFromToken2WWWlulTokenHandleLowPartl~ulTokenHandleHighPartWWWInitializeClientContext2IdentifyingStringWWWxJEOpenApplication2xCreateApplication2WW8IAzAuthorizationStore3WW2IsUpdateNeededWW$PpbIsUpdateNeeded`BizruleGroupSupportedWWW ?pbSupportedWUpgradeStoresFunctionalLevel8lFunctionalLevel!IsFunctionalLevelUpgradeSupportedWWWGetSchemaVersionOplMajorVersionWWplMinorVersionWW$8mIAzApplication3W ScopeExistsWdpbExistWl4 8IAzScope2WWW 8hIAzRoleDefinitionsWWl$ RoleDefinitionsW@ppRoleDefinitionsWWW4 8IAzRoleDefinitionWWW8)IAzRoleAssignmentsWW4pVRoleAssignmentsW |bRecursiveWW~ppRoleAssignmentsWWW4AddRoleDefinitionWWWhIbstrRoleDefinitionWW4D uDeleteRoleDefinitionl8CreateRoleDefinition4bstrRoleDefinitionNameWWlKuOpenRoleDefinitionWW 8IAzRoleAssignmentWWW0ScopeWWWl CreateRoleAssignmentObstrRoleAssignmentNameWW ۮppRoleAssignmentl ]OpenRoleAssignmentWWl ]DeleteRoleAssignment OpenScope2WW&ppScope2T CreateScope2$ JDeleteScope2BizRulesEnabledWP 7pbEnabledWWW`  8 IAzOperation2WWW h8IAzTask2( 8IAzApplicationGroup2 8~mIAzClientContext3WWW \ pAccessCheck2  ]lOperationWWh#AplResult IsInRoleAssignmentWW< ިpbIsInRoleWW < <7GetOperationsWWW (O]GetTasks 88YIAzBizRuleParameters  RAddParameter  bstrParameterNameWWWl:varParameterValueWWW  AddParametersWWW nGetParameterValueWWWpvarParameterValueWW @ϱRemoveWW|]varParameterName RemoveAllWWW QBizRuleParametersWWWppBizRuleParamWWT 8IAzBizRuleInterfacesT  fAddInterface6bstrInterfaceNameWWWh4lInterfaceFlagWW varInterfaceT ´AddInterfacesWWWT &GetInterfaceValueWWW XBizRuleInterfacesWWWppBizRuleInterfacesW $ (`GetGroupsWWW [ulOptionsWWW rpGroupArrayW XSids=pStringSidArrayW 80gIAzBizRuleContextWWW TٍBusinessRuleResultWW +BusinessRuleStringWW  GetParameter @8IAzPrincipalLocatorW 84IAzNameResolverW  V3NameFromSidWHٹbstrSidW_pSidType  %9NamesFromSidsWWWvSidsWWWl XpvSidTypesWWpvNamesW  TNameResolver%ppNameResolverWW `8rIAzObjectPickerWH 8,wireHWND 8_RemotableHandle cfContext|8Z__MIDL_IWinTypes_0009WWWJhInprocW,ZhRemoteW luWWW  5GetPrincipalsWWW 4#hParentWndWW8 lbstrTitleWWWD!ZpvSidsWW t SObjectPickerzppObjectPickerWWt8|AzAuthorizationStore8^AzBizRuleContext<` 8ucAzPrincipalLocatorWW8tagAZ_PROP_CONSTANTS 0`AZ_PROP_NAME0\AZ_PROP_DESCRIPTIONW0-EAZ_PROP_WRITABLE0 AZ_PROP_APPLICATION_DATA0AZ_PROP_CHILD_CREATE0fYAZ_MAX_APPLICATION_NAME_LENGTHWW 0=AZ_MAX_OPERATION_NAME_LENGTH09mAZ_MAX_TASK_NAME_LENGTHW0WAZ_MAX_SCOPE_NAME_LENGTH 0AZ_MAX_GROUP_NAME_LENGTH 0_AZ_MAX_ROLE_NAME_LENGTHW@0$AZ_MAX_NAME_LENGTHWW02AZ_MAX_DESCRIPTION_LENGTHWWW0~bAZ_MAX_APPLICATION_DATA_LENGTHWW0AZ_SUBMIT_FLAG_ABORT0\|AZ_SUBMIT_FLAG_FLUSH0"hAZ_MAX_POLICY_URL_LENGTH!0IAZ_AZSTORE_FLAG_CREATEWW#!0DAZ_AZSTORE_FLAG_MANAGE_STORE_ONLYWWWp0AZ_AZSTORE_FLAG_BATCH_UPDATE8 !0ߏAZ_AZSTORE_FLAG_AUDIT_IS_CRITICALWWW "0pgAZ_AZSTORE_FORCE_APPLICATION_CLOSEWW80AZ_AZSTORE_NT6_FUNCTION_LEVELWWW *0AZ_AZSTORE_FLAG_MANAGE_ONLY_PASSIVE_SUBMITWW%0AZ_PROP_AZSTORE_DOMAIN_TIMEOUTWW!0AZ_AZSTORE_DEFAULT_DOMAIN_TIMEOUTWWW %0DAZ_PROP_AZSTORE_SCRIPT_ENGINE_TIMEOUTWWW0EAZ_AZSTORE_MIN_DOMAIN_TIMEOUTWWW$$0AZ_PROP_APPLICATION_AUTHZ_INTERFACE_CLSIDWWW0U}AZ_PROP_APPLICATION_VERSIONW,!0eAZ_MAX_APPLICATION_VERSION_LENGTHWWW,0AZ_PROP_APPLICATION_NAME&#0EAZ_PROP_APPLICATION_BIZRULE_ENABLEDW8 0 AZ_PROP_APPLY_STORE_SACL@(0AZ_PROP_GENERATE_AUDITSW\-0.AZ_PROP_POLICY_ADMINSWWWl.0AZ_PROP_POLICY_READERSWW %0}AZ_PROP_DELEGATED_POLICY_USERSWW-0]5AZ_PROP_POLICY_ADMINS_NAMEWW$ 04?4@@4A4B4C4D4E4F4XG4YH4I4J4K4L4M4N4O4P4Q4 R4!S4T4"U4#V4W4X4Y4Z4[4\4]4^4_4`4a4@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@x"""""#<#d#####$<$h$$$$$ %H%x%%% &8&h&&&&,'\''''(@(`((((( )L)t))))*@*`*****$+H+p++++,D,l,,,,-<-\----.<.l....0/h////(0L0|0000 181`11112D2(<Pdx,@Th|0DXl  4H\p$8L`t(<Pdx,@Th|0DXl)1 B}ԏ'F 9?On: FILEREGISTRYTYPELIBMUIMUIen-US| (08@HPX`xxȦЦئ覘 (08@HPX`hpxȯЯد T (08@HPX`hpxȠРؠ (08@HPX`hpxȡСء (08@HPX`hpxȢТآ (08@HPX`hpxȣУأ (08@HPX`hpxȤФؤ (08@HPX`hpxȥ (08@HPX`pȦЦئ (0@XpȧЧا (08@HPX`hpxȨШب (08@HPX`hpxȩЩة (08@HPX`hpxȪЪت (08@HPX`hpxȫЫث (08@HPX`hpxȬЬج (08@HPX`hpȭЭح0lpР 0@ (0Фؤ@HPX`hpxȥХإ (08@HPX`ȦЦ (08@px (08@HPX`hpxȨШب (08@HPX`hpxȩЩة (08@HPX`ȪЪت8@HPX`hpxȫ (08@HPX`p (08@HPX`hpxȭЭح (08@HPX`hpxȮЮخ (08@HPX`hpȯЯد@X(X`hpxȠ (08@HPhȡСء8@HPX`hpxآ (0HxȣУ (08@HPX`hpФؤ (08@HPX`hpxȥХإ (08@HPX`hpxȦЦئ 8PȧЧا (08@HPX`hpxȨШب (08@HPX`hpxȩЩة (08@HPX`hpxЪ (08@HPX`hpxȫЫث (08@HPX`hpxȬЬج (08@HPX`hpxȭЭح (08@HPX`xȮЮخ (08@HPX`hpxȯЯدP0`hpxȠРؠ (08@HPX`hpxȡСء (08@HPX`hpxȢТآ(@XȣУأ (08@HPX`hpxȤФؤ (08@HPX`hpxȥХإ (08@HPX`hpxȦЦئ (08@HPX`hpxȧЧا (08@HPX`hpxȨШب (08@HPX`hpxȩЩة (08@HPX`hpxȪЪ(ȬЬج (0\8Hpx0@HPX`hp 08@HPX`hpЭح@8(0HPȢآ PX`hpxȬЬج (08@HPX`hpxȭЭح (08@HPX`hpxȮЮخ (08@HPX`hpxȯЯد` (08@HPX`hpxȠРؠ (08@HPX`hpxȡСء (08@HPX`hpxȢТآp (08@HPX`hpx| (08@HPX`hpxȤФؤ (08@HPX`hpxȥХإ hpxؠ`hpȡСء PX`hpxȢТآPXУأ (@HPX`hpФؤ08px08px08px08px08px08px08px(8hЯ (8HPX`hxȠРؠ0H`xС PhȢ(`x@pФ0Hhxȥ(@hpxȦЦئ(0HPhp0@`xب 08HP`hxȩЩ 8PhȪH`x(@XЬ8Phȭ (8@HPX`hpxȮЮخЯ @(08@HPX`hpx(0PXhxȧЧ 0@Hhp08X`Щة (8HP`pxȪت(8@P`hxȫث(0PXxȬЬ @HhpЭ08HX`Юخ (8HP`pxȯد08@`hؠ(0PXhxȡС @HXhp08HX`У HpФ(08@HPXhpxȥХإ (08@P`p