; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08 

	TITLE	c:\Develop\DScaler423a\DScaler\Audio.cpp
	.686P
	.XMM
	include listing.inc
	.model	flat

INCLUDELIB OLDNAMES

PUBLIC	??_R4CCanLock@@6B@				; CCanLock::`RTTI Complete Object Locator'
PUBLIC	??_R3CCanLock@@8				; CCanLock::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2CCanLock@@8				; CCanLock::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@CCanLock@@8			; CCanLock::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	??_R0?AVCCanLock@@@8				; CCanLock `RTTI Type Descriptor'
PUBLIC	??_R4ICanLock@@6B@				; ICanLock::`RTTI Complete Object Locator'
PUBLIC	??_R3ICanLock@@8				; ICanLock::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2ICanLock@@8				; ICanLock::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@ICanLock@@8			; ICanLock::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	??_R0?AVICanLock@@@8				; ICanLock `RTTI Type Descriptor'
PUBLIC	?UserMute_OnChange@@YAHJ@Z			; UserMute_OnChange
PUBLIC	??_C@_04IOCNJLNK@Mute?$AA@			; `string'
PUBLIC	??_C@_05KKCMAPLJ@Audio?$AA@			; `string'
PUBLIC	??_C@_0P@PAJJLJKI@System?5in?5Mute?$AA@		; `string'
PUBLIC	?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ ; SmartPtr<CEventCollector>::GetRawPointer
PUBLIC	??C?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ ; SmartPtr<CEventCollector>::operator->
PUBLIC	??0CProtectCode@@QAE@PAVICanLock@@@Z		; CProtectCode::CProtectCode
PUBLIC	??1CProtectCode@@QAE@XZ				; CProtectCode::~CProtectCode
PUBLIC	??0ICanLock@@QAE@XZ				; ICanLock::ICanLock
PUBLIC	??0CCanLock@@QAE@XZ				; CCanLock::CCanLock
PUBLIC	?Lock@CCanLock@@UAEXXZ				; CCanLock::Lock
PUBLIC	?Unlock@CCanLock@@UAEXXZ			; CCanLock::Unlock
PUBLIC	??1CCanLock@@QAE@XZ				; CCanLock::~CCanLock
PUBLIC	?dwTimerProcThreadId@@3KA			; dwTimerProcThreadId
PUBLIC	?AudioMuteStatus@@3EA				; AudioMuteStatus
PUBLIC	?bUserMute@@3HA					; bUserMute
PUBLIC	??_C@_1DO@HNJLCDIF@?$AA?5?$AAM?$AAu?$AAt?$AAe?$AA?5?$AAC?$AAa?$AAl?$AAl?$AAe?$AAd?$AA?5?$AAS?$AAt?$AAa?$AAt?$AAu?$AAs?$AA?5?$AAo?$AAn?$AA?5?$AAE?$AAx?$AAi?$AAt?$AA?5?$AA?$CF?$AAd?$AA?$AA@ ; `string'
PUBLIC	??_C@_1EC@JFOMLJFP@?$AA?5?$AAU?$AAn?$AAM?$AAu?$AAt?$AAe?$AA?5?$AAC?$AAa?$AAl?$AAl?$AAe?$AAd?$AA?5?$AAS?$AAt?$AAa?$AAt?$AAu?$AAs?$AA?5?$AAo?$AAn?$AA?5?$AAE?$AAx?$AAi?$AAt?$AA?5?$AA?$CF?$AAd@ ; `string'
PUBLIC	?AudioSettings@@3PAUSETTING@@A			; AudioSettings
PUBLIC	??_7ICanLock@@6B@				; ICanLock::`vftable'
PUBLIC	??_7CCanLock@@6B@				; CCanLock::`vftable'
EXTRN	__imp__Sleep@4:PROC
EXTRN	__imp__GetCurrentThreadId@0:PROC
EXTRN	_atexit:PROC
EXTRN	__imp__InitializeCriticalSection@4:PROC
EXTRN	__imp__DeleteCriticalSection@4:PROC
EXTRN	__imp__EnterCriticalSection@4:PROC
EXTRN	__imp__LeaveCriticalSection@4:PROC
?dwTimerProcThreadId@@3KA DD 01H DUP (?)		; dwTimerProcThreadId
?AudioMuteStatus@@3EA DB 01H DUP (?)			; AudioMuteStatus
	ALIGN	4

?bUserMute@@3HA DD 01H DUP (?)				; bUserMute
;	COMDAT ??_7CCanLock@@6B@
CONST	SEGMENT
??_7CCanLock@@6B@ DD FLAT:??_R4CCanLock@@6B@		; CCanLock::`vftable'
	DD	FLAT:?Lock@CCanLock@@UAEXXZ
	DD	FLAT:?Unlock@CCanLock@@UAEXXZ
CONST	ENDS
;	COMDAT ??_R4CCanLock@@6B@
rdata$r	SEGMENT
??_R4CCanLock@@6B@ DD 00H				; CCanLock::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	FLAT:??_R0?AVCCanLock@@@8
	DD	FLAT:??_R3CCanLock@@8
rdata$r	ENDS
;	COMDAT ??_R3CCanLock@@8
rdata$r	SEGMENT
??_R3CCanLock@@8 DD 00H					; CCanLock::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	02H
	DD	FLAT:??_R2CCanLock@@8
rdata$r	ENDS
;	COMDAT ??_R2CCanLock@@8
rdata$r	SEGMENT
??_R2CCanLock@@8 DD FLAT:??_R1A@?0A@EA@CCanLock@@8	; CCanLock::`RTTI Base Class Array'
	DD	FLAT:??_R1A@?0A@EA@ICanLock@@8
rdata$r	ENDS
;	COMDAT ??_R1A@?0A@EA@CCanLock@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@CCanLock@@8 DD FLAT:??_R0?AVCCanLock@@@8	; CCanLock::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	01H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3CCanLock@@8
rdata$r	ENDS
;	COMDAT ??_R0?AVCCanLock@@@8
_DATA	SEGMENT
??_R0?AVCCanLock@@@8 DD FLAT:??_7type_info@@6B@		; CCanLock `RTTI Type Descriptor'
	DD	00H
	DB	'.?AVCCanLock@@', 00H
_DATA	ENDS
;	COMDAT ??_7ICanLock@@6B@
CONST	SEGMENT
??_7ICanLock@@6B@ DD FLAT:??_R4ICanLock@@6B@		; ICanLock::`vftable'
	DD	FLAT:__purecall
	DD	FLAT:__purecall
CONST	ENDS
;	COMDAT ??_R4ICanLock@@6B@
rdata$r	SEGMENT
??_R4ICanLock@@6B@ DD 00H				; ICanLock::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	FLAT:??_R0?AVICanLock@@@8
	DD	FLAT:??_R3ICanLock@@8
rdata$r	ENDS
;	COMDAT ??_R3ICanLock@@8
rdata$r	SEGMENT
??_R3ICanLock@@8 DD 00H					; ICanLock::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	01H
	DD	FLAT:??_R2ICanLock@@8
rdata$r	ENDS
;	COMDAT ??_R2ICanLock@@8
rdata$r	SEGMENT
??_R2ICanLock@@8 DD FLAT:??_R1A@?0A@EA@ICanLock@@8	; ICanLock::`RTTI Base Class Array'
rdata$r	ENDS
;	COMDAT ??_R1A@?0A@EA@ICanLock@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@ICanLock@@8 DD FLAT:??_R0?AVICanLock@@@8	; ICanLock::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	00H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3ICanLock@@8
rdata$r	ENDS
;	COMDAT ??_R0?AVICanLock@@@8
_DATA	SEGMENT
??_R0?AVICanLock@@@8 DD FLAT:??_7type_info@@6B@		; ICanLock `RTTI Type Descriptor'
	DD	00H
	DB	'.?AVICanLock@@', 00H
_DATA	ENDS
;	COMDAT ??_C@_04IOCNJLNK@Mute?$AA@
CONST	SEGMENT
??_C@_04IOCNJLNK@Mute?$AA@ DB 'Mute', 00H		; `string'
CONST	ENDS
;	COMDAT ??_C@_05KKCMAPLJ@Audio?$AA@
CONST	SEGMENT
??_C@_05KKCMAPLJ@Audio?$AA@ DB 'Audio', 00H		; `string'
CONST	ENDS
;	COMDAT ??_C@_0P@PAJJLJKI@System?5in?5Mute?$AA@
CONST	SEGMENT
??_C@_0P@PAJJLJKI@System?5in?5Mute?$AA@ DB 'System in Mute', 00H ; `string'
CONST	ENDS
;	COMDAT ??_C@_1EC@JFOMLJFP@?$AA?5?$AAU?$AAn?$AAM?$AAu?$AAt?$AAe?$AA?5?$AAC?$AAa?$AAl?$AAl?$AAe?$AAd?$AA?5?$AAS?$AAt?$AAa?$AAt?$AAu?$AAs?$AA?5?$AAo?$AAn?$AA?5?$AAE?$AAx?$AAi?$AAt?$AA?5?$AA?$CF?$AAd@
CONST	SEGMENT
??_C@_1EC@JFOMLJFP@?$AA?5?$AAU?$AAn?$AAM?$AAu?$AAt?$AAe?$AA?5?$AAC?$AAa?$AAl?$AAl?$AAe?$AAd?$AA?5?$AAS?$AAt?$AAa?$AAt?$AAu?$AAs?$AA?5?$AAo?$AAn?$AA?5?$AAE?$AAx?$AAi?$AAt?$AA?5?$AA?$CF?$AAd@ DB ' '
	DB	00H, 'U', 00H, 'n', 00H, 'M', 00H, 'u', 00H, 't', 00H, 'e', 00H
	DB	' ', 00H, 'C', 00H, 'a', 00H, 'l', 00H, 'l', 00H, 'e', 00H, 'd'
	DB	00H, ' ', 00H, 'S', 00H, 't', 00H, 'a', 00H, 't', 00H, 'u', 00H
	DB	's', 00H, ' ', 00H, 'o', 00H, 'n', 00H, ' ', 00H, 'E', 00H, 'x'
	DB	00H, 'i', 00H, 't', 00H, ' ', 00H, '%', 00H, 'd', 00H, 00H, 00H ; `string'
CONST	ENDS
;	COMDAT ??_C@_1DO@HNJLCDIF@?$AA?5?$AAM?$AAu?$AAt?$AAe?$AA?5?$AAC?$AAa?$AAl?$AAl?$AAe?$AAd?$AA?5?$AAS?$AAt?$AAa?$AAt?$AAu?$AAs?$AA?5?$AAo?$AAn?$AA?5?$AAE?$AAx?$AAi?$AAt?$AA?5?$AA?$CF?$AAd?$AA?$AA@
CONST	SEGMENT
??_C@_1DO@HNJLCDIF@?$AA?5?$AAM?$AAu?$AAt?$AAe?$AA?5?$AAC?$AAa?$AAl?$AAl?$AAe?$AAd?$AA?5?$AAS?$AAt?$AAa?$AAt?$AAu?$AAs?$AA?5?$AAo?$AAn?$AA?5?$AAE?$AAx?$AAi?$AAt?$AA?5?$AA?$CF?$AAd?$AA?$AA@ DB ' '
	DB	00H, 'M', 00H, 'u', 00H, 't', 00H, 'e', 00H, ' ', 00H, 'C', 00H
	DB	'a', 00H, 'l', 00H, 'l', 00H, 'e', 00H, 'd', 00H, ' ', 00H, 'S'
	DB	00H, 't', 00H, 'a', 00H, 't', 00H, 'u', 00H, 's', 00H, ' ', 00H
	DB	'o', 00H, 'n', 00H, ' ', 00H, 'E', 00H, 'x', 00H, 'i', 00H, 't'
	DB	00H, ' ', 00H, '%', 00H, 'd', 00H, 00H, 00H	; `string'
?AudioSettings@@3PAUSETTING@@A DD FLAT:??_C@_0P@PAJJLJKI@System?5in?5Mute?$AA@ ; AudioSettings
	DD	01H
	DD	00H
	DD	FLAT:?bUserMute@@3HA
	DD	00H
	DD	00H
	DD	01H
	DD	01H
	DD	01H
	DD	00H
	DD	FLAT:??_C@_05KKCMAPLJ@Audio?$AA@
	DD	FLAT:??_C@_04IOCNJLNK@Mute?$AA@
	DD	FLAT:?UserMute_OnChange@@YAHJ@Z
PUBLIC	?Audio_SetMenu@@YAXPAUHMENU__@@@Z		; Audio_SetMenu
; Function compile flags: /Odtp
; File c:\develop\dscaler423a\dscaler\audio.cpp
;	COMDAT ?Audio_SetMenu@@YAXPAUHMENU__@@@Z
_TEXT	SEGMENT
_hMenu$ = 8						; size = 4
?Audio_SetMenu@@YAXPAUHMENU__@@@Z PROC			; Audio_SetMenu, COMDAT

; 206  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp

; 207  :     CheckMenuItemBool(hMenu, IDM_MUTE, bUserMute);

  00003	a1 00 00 00 00	 mov	 eax, DWORD PTR ?bUserMute@@3HA ; bUserMute
  00008	f7 d8		 neg	 eax
  0000a	1b c0		 sbb	 eax, eax
  0000c	83 e0 08	 and	 eax, 8
  0000f	50		 push	 eax
  00010	68 92 01 00 00	 push	 402			; 00000192H
  00015	8b 4d 08	 mov	 ecx, DWORD PTR _hMenu$[ebp]
  00018	51		 push	 ecx
  00019	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__CheckMenuItem@12

; 208  : }

  0001f	5d		 pop	 ebp
  00020	c3		 ret	 0
?Audio_SetMenu@@YAXPAUHMENU__@@@Z ENDP			; Audio_SetMenu
_TEXT	ENDS
PUBLIC	?Audio_GetSetting@@YAPAUSETTING@@W4AUDIO_SETTING@@@Z ; Audio_GetSetting
; Function compile flags: /Odtp
;	COMDAT ?Audio_GetSetting@@YAPAUSETTING@@W4AUDIO_SETTING@@@Z
_TEXT	SEGMENT
_Setting$ = 8						; size = 4
?Audio_GetSetting@@YAPAUSETTING@@W4AUDIO_SETTING@@@Z PROC ; Audio_GetSetting, COMDAT

; 194  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp

; 195  :     if(Setting > -1 && Setting < AUDIO_SETTING_LASTONE)

  00003	83 7d 08 ff	 cmp	 DWORD PTR _Setting$[ebp], -1
  00007	7e 15		 jle	 SHORT $LN2@Audio_GetS
  00009	83 7d 08 01	 cmp	 DWORD PTR _Setting$[ebp], 1
  0000d	7d 0f		 jge	 SHORT $LN2@Audio_GetS

; 196  :     {
; 197  :         return &(AudioSettings[Setting]);

  0000f	8b 45 08	 mov	 eax, DWORD PTR _Setting$[ebp]
  00012	6b c0 34	 imul	 eax, 52			; 00000034H
  00015	05 00 00 00 00	 add	 eax, OFFSET ?AudioSettings@@3PAUSETTING@@A ; AudioSettings
  0001a	eb 04		 jmp	 SHORT $LN3@Audio_GetS

; 198  :     }
; 199  :     else

  0001c	eb 02		 jmp	 SHORT $LN3@Audio_GetS
$LN2@Audio_GetS:

; 200  :     {
; 201  :         return NULL;

  0001e	33 c0		 xor	 eax, eax
$LN3@Audio_GetS:

; 202  :     }
; 203  : }

  00020	5d		 pop	 ebp
  00021	c3		 ret	 0
?Audio_GetSetting@@YAPAUSETTING@@W4AUDIO_SETTING@@@Z ENDP ; Audio_GetSetting
_TEXT	ENDS
PUBLIC	?Audio_GetUserMute@@YAHXZ			; Audio_GetUserMute
; Function compile flags: /Odtp
;	COMDAT ?Audio_GetUserMute@@YAHXZ
_TEXT	SEGMENT
?Audio_GetUserMute@@YAHXZ PROC				; Audio_GetUserMute, COMDAT

; 168  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp

; 169  :     return bUserMute;

  00003	a1 00 00 00 00	 mov	 eax, DWORD PTR ?bUserMute@@3HA ; bUserMute

; 170  : }

  00008	5d		 pop	 ebp
  00009	c3		 ret	 0
?Audio_GetUserMute@@YAHXZ ENDP				; Audio_GetUserMute
_TEXT	ENDS
PUBLIC	?Audio_Unmute@@YAXK@Z				; Audio_Unmute
PUBLIC	?AudioUnmuteDelayTimerProc@@YGXPAUHWND__@@IIK@Z	; AudioUnmuteDelayTimerProc
; Function compile flags: /Odtp
;	COMDAT ?AudioUnmuteDelayTimerProc@@YGXPAUHWND__@@IIK@Z
_TEXT	SEGMENT
_hwnd$ = 8						; size = 4
___formal$ = 12						; size = 4
_idTimer$ = 16						; size = 4
___formal$ = 20						; size = 4
?AudioUnmuteDelayTimerProc@@YGXPAUHWND__@@IIK@Z PROC	; AudioUnmuteDelayTimerProc, COMDAT

; 144  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp

; 145  :     KillTimer(hwnd, idTimer);

  00003	8b 45 10	 mov	 eax, DWORD PTR _idTimer$[ebp]
  00006	50		 push	 eax
  00007	8b 4d 08	 mov	 ecx, DWORD PTR _hwnd$[ebp]
  0000a	51		 push	 ecx
  0000b	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__KillTimer@8

; 146  :     Audio_Unmute(0UL);

  00011	6a 00		 push	 0
  00013	e8 00 00 00 00	 call	 ?Audio_Unmute@@YAXK@Z	; Audio_Unmute
  00018	83 c4 04	 add	 esp, 4

; 147  : }

  0001b	5d		 pop	 ebp
  0001c	c2 10 00	 ret	 16			; 00000010H
?AudioUnmuteDelayTimerProc@@YGXPAUHWND__@@IIK@Z ENDP	; AudioUnmuteDelayTimerProc
_TEXT	ENDS
PUBLIC	?Audio_IsMute@@YAHXZ				; Audio_IsMute
; Function compile flags: /Odtp
;	COMDAT ?Audio_IsMute@@YAHXZ
_TEXT	SEGMENT
?Audio_IsMute@@YAHXZ PROC				; Audio_IsMute, COMDAT

; 138  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp

; 139  :     return (AudioMuteStatus > 0);

  00003	0f b6 05 00 00
	00 00		 movzx	 eax, BYTE PTR ?AudioMuteStatus@@3EA ; AudioMuteStatus
  0000a	33 c9		 xor	 ecx, ecx
  0000c	85 c0		 test	 eax, eax
  0000e	0f 9f c1	 setg	 cl
  00011	8b c1		 mov	 eax, ecx

; 140  : }

  00013	5d		 pop	 ebp
  00014	c3		 ret	 0
?Audio_IsMute@@YAHXZ ENDP				; Audio_IsMute
; Function compile flags: /Odtp
; File c:\develop\dscaler423a\dscaler\protectcode.h
_TEXT	ENDS
;	COMDAT ??1CProtectCode@@QAE@XZ
_TEXT	SEGMENT
_this$ = -4						; size = 4
??1CProtectCode@@QAE@XZ PROC				; CProtectCode::~CProtectCode, COMDAT
; _this$ = ecx

; 75   :     {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx

; 76   :         m_Master->Unlock();

  00007	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  0000a	8b 08		 mov	 ecx, DWORD PTR [eax]
  0000c	8b 55 fc	 mov	 edx, DWORD PTR _this$[ebp]
  0000f	8b 02		 mov	 eax, DWORD PTR [edx]
  00011	8b 11		 mov	 edx, DWORD PTR [ecx]
  00013	8b c8		 mov	 ecx, eax
  00015	8b 42 04	 mov	 eax, DWORD PTR [edx+4]
  00018	ff d0		 call	 eax

; 77   :     }

  0001a	8b e5		 mov	 esp, ebp
  0001c	5d		 pop	 ebp
  0001d	c3		 ret	 0
??1CProtectCode@@QAE@XZ ENDP				; CProtectCode::~CProtectCode
; Function compile flags: /Odtp
_TEXT	ENDS
;	COMDAT ??0CProtectCode@@QAE@PAVICanLock@@@Z
_TEXT	SEGMENT
_this$ = -4						; size = 4
_MasterObject$ = 8					; size = 4
??0CProtectCode@@QAE@PAVICanLock@@@Z PROC		; CProtectCode::CProtectCode, COMDAT
; _this$ = ecx

; 69   :     CProtectCode(ICanLock* MasterObject)

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx

; 70   :     {
; 71   :         m_Master = MasterObject;

  00007	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  0000a	8b 4d 08	 mov	 ecx, DWORD PTR _MasterObject$[ebp]
  0000d	89 08		 mov	 DWORD PTR [eax], ecx

; 72   :         m_Master->Lock();

  0000f	8b 55 fc	 mov	 edx, DWORD PTR _this$[ebp]
  00012	8b 02		 mov	 eax, DWORD PTR [edx]
  00014	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  00017	8b 09		 mov	 ecx, DWORD PTR [ecx]
  00019	8b 10		 mov	 edx, DWORD PTR [eax]
  0001b	8b 02		 mov	 eax, DWORD PTR [edx]
  0001d	ff d0		 call	 eax

; 73   :     }

  0001f	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  00022	8b e5		 mov	 esp, ebp
  00024	5d		 pop	 ebp
  00025	c2 04 00	 ret	 4
??0CProtectCode@@QAE@PAVICanLock@@@Z ENDP		; CProtectCode::CProtectCode
; Function compile flags: /Odtp
_TEXT	ENDS
;	COMDAT ??0ICanLock@@QAE@XZ
_TEXT	SEGMENT
_this$ = -4						; size = 4
??0ICanLock@@QAE@XZ PROC				; ICanLock::ICanLock, COMDAT
; _this$ = ecx
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx
  00007	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  0000a	c7 00 00 00 00
	00		 mov	 DWORD PTR [eax], OFFSET ??_7ICanLock@@6B@
  00010	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  00013	8b e5		 mov	 esp, ebp
  00015	5d		 pop	 ebp
  00016	c3		 ret	 0
??0ICanLock@@QAE@XZ ENDP				; ICanLock::ICanLock
; Function compile flags: /Odtp
_TEXT	ENDS
;	COMDAT ?Unlock@CCanLock@@UAEXXZ
_TEXT	SEGMENT
_this$ = -4						; size = 4
?Unlock@CCanLock@@UAEXXZ PROC				; CCanLock::Unlock, COMDAT
; _this$ = ecx

; 57   :     {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx

; 58   :         LeaveCriticalSection(&m_Crit);

  00007	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  0000a	83 c0 04	 add	 eax, 4
  0000d	50		 push	 eax
  0000e	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__LeaveCriticalSection@4

; 59   :     }

  00014	8b e5		 mov	 esp, ebp
  00016	5d		 pop	 ebp
  00017	c3		 ret	 0
?Unlock@CCanLock@@UAEXXZ ENDP				; CCanLock::Unlock
; Function compile flags: /Odtp
_TEXT	ENDS
;	COMDAT ?Lock@CCanLock@@UAEXXZ
_TEXT	SEGMENT
_this$ = -4						; size = 4
?Lock@CCanLock@@UAEXXZ PROC				; CCanLock::Lock, COMDAT
; _this$ = ecx

; 52   :     {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx

; 53   :         EnterCriticalSection(&m_Crit);

  00007	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  0000a	83 c0 04	 add	 eax, 4
  0000d	50		 push	 eax
  0000e	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__EnterCriticalSection@4

; 54   :     }

  00014	8b e5		 mov	 esp, ebp
  00016	5d		 pop	 ebp
  00017	c3		 ret	 0
?Lock@CCanLock@@UAEXXZ ENDP				; CCanLock::Lock
; Function compile flags: /Odtp
_TEXT	ENDS
;	COMDAT ??1CCanLock@@QAE@XZ
_TEXT	SEGMENT
_this$ = -4						; size = 4
??1CCanLock@@QAE@XZ PROC				; CCanLock::~CCanLock, COMDAT
; _this$ = ecx

; 47   :     {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx
  00007	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  0000a	c7 00 00 00 00
	00		 mov	 DWORD PTR [eax], OFFSET ??_7CCanLock@@6B@

; 48   :         DeleteCriticalSection(&m_Crit);

  00010	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  00013	83 c1 04	 add	 ecx, 4
  00016	51		 push	 ecx
  00017	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__DeleteCriticalSection@4

; 49   :     }

  0001d	8b e5		 mov	 esp, ebp
  0001f	5d		 pop	 ebp
  00020	c3		 ret	 0
??1CCanLock@@QAE@XZ ENDP				; CCanLock::~CCanLock
; Function compile flags: /Odtp
_TEXT	ENDS
;	COMDAT ??0CCanLock@@QAE@XZ
_TEXT	SEGMENT
_this$ = -4						; size = 4
??0CCanLock@@QAE@XZ PROC				; CCanLock::CCanLock, COMDAT
; _this$ = ecx

; 41   :     CCanLock()

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx
  00007	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  0000a	e8 00 00 00 00	 call	 ??0ICanLock@@QAE@XZ
  0000f	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  00012	c7 00 00 00 00
	00		 mov	 DWORD PTR [eax], OFFSET ??_7CCanLock@@6B@

; 42   :     {
; 43   :         InitializeCriticalSection(&m_Crit);

  00018	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  0001b	83 c1 04	 add	 ecx, 4
  0001e	51		 push	 ecx
  0001f	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__InitializeCriticalSection@4

; 44   :     }

  00025	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  00028	8b e5		 mov	 esp, ebp
  0002a	5d		 pop	 ebp
  0002b	c3		 ret	 0
??0CCanLock@@QAE@XZ ENDP				; CCanLock::CCanLock
;	COMDAT xdata$x
; File c:\develop\dscaler423a\dscaler\smartptr.h
xdata$x	SEGMENT
__unwindtable$?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ DD 0ffffffffH
	DD	FLAT:__unwindfunclet$?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ$0
__ehfuncinfo$?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ DD 019930522H
	DD	01H
	DD	FLAT:__unwindtable$?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ
	DD	2 DUP(00H)
	DD	2 DUP(00H)
	DD	00H
	DD	00H
; Function compile flags: /Odtp
xdata$x	ENDS
;	COMDAT ?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ
_TEXT	SEGMENT
tv72 = -32						; size = 4
_this$ = -28						; size = 4
$T317887 = -24						; size = 4
$T317886 = -20						; size = 4
$T317885 = -16						; size = 4
__$EHRec$ = -12						; size = 12
?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ PROC ; SmartPtr<CEventCollector>::GetRawPointer, COMDAT
; _this$ = ecx

; 205  :     {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	6a ff		 push	 -1
  00005	68 00 00 00 00	 push	 __ehhandler$?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ
  0000a	64 a1 00 00 00
	00		 mov	 eax, DWORD PTR fs:0
  00010	50		 push	 eax
  00011	83 ec 14	 sub	 esp, 20			; 00000014H
  00014	a1 00 00 00 00	 mov	 eax, DWORD PTR ___security_cookie
  00019	33 c5		 xor	 eax, ebp
  0001b	50		 push	 eax
  0001c	8d 45 f4	 lea	 eax, DWORD PTR __$EHRec$[ebp]
  0001f	64 a3 00 00 00
	00		 mov	 DWORD PTR fs:0, eax
  00025	89 4d e4	 mov	 DWORD PTR _this$[ebp], ecx

; 206  :         if (rawPtr == 0) throw new NullPointerException;

  00028	8b 45 e4	 mov	 eax, DWORD PTR _this$[ebp]
  0002b	83 38 00	 cmp	 DWORD PTR [eax], 0
  0002e	75 4f		 jne	 SHORT $LN1@GetRawPoin@254
  00030	6a 0c		 push	 12			; 0000000cH
  00032	e8 00 00 00 00	 call	 ??2@YAPAXI@Z		; operator new
  00037	83 c4 04	 add	 esp, 4
  0003a	89 45 e8	 mov	 DWORD PTR $T317887[ebp], eax
  0003d	c7 45 fc 00 00
	00 00		 mov	 DWORD PTR __$EHRec$[ebp+8], 0
  00044	83 7d e8 00	 cmp	 DWORD PTR $T317887[ebp], 0
  00048	74 0d		 je	 SHORT $LN4@GetRawPoin@254
  0004a	8b 4d e8	 mov	 ecx, DWORD PTR $T317887[ebp]
  0004d	e8 00 00 00 00	 call	 ??0NullPointerException@@QAE@XZ ; NullPointerException::NullPointerException
  00052	89 45 e0	 mov	 DWORD PTR tv72[ebp], eax
  00055	eb 07		 jmp	 SHORT $LN5@GetRawPoin@254
$LN4@GetRawPoin@254:
  00057	c7 45 e0 00 00
	00 00		 mov	 DWORD PTR tv72[ebp], 0
$LN5@GetRawPoin@254:
  0005e	8b 4d e0	 mov	 ecx, DWORD PTR tv72[ebp]
  00061	89 4d ec	 mov	 DWORD PTR $T317886[ebp], ecx
  00064	c7 45 fc ff ff
	ff ff		 mov	 DWORD PTR __$EHRec$[ebp+8], -1
  0006b	8b 55 ec	 mov	 edx, DWORD PTR $T317886[ebp]
  0006e	89 55 f0	 mov	 DWORD PTR $T317885[ebp], edx
  00071	68 00 00 00 00	 push	 OFFSET __TI3PAUNullPointerException@@
  00076	8d 45 f0	 lea	 eax, DWORD PTR $T317885[ebp]
  00079	50		 push	 eax
  0007a	e8 00 00 00 00	 call	 __CxxThrowException@8
$LN1@GetRawPoin@254:

; 207  :         return const_cast<X*>(rawPtr);

  0007f	8b 4d e4	 mov	 ecx, DWORD PTR _this$[ebp]
  00082	8b 01		 mov	 eax, DWORD PTR [ecx]
$LN3@GetRawPoin@254:

; 208  :     }

  00084	8b 4d f4	 mov	 ecx, DWORD PTR __$EHRec$[ebp]
  00087	64 89 0d 00 00
	00 00		 mov	 DWORD PTR fs:0, ecx
  0008e	59		 pop	 ecx
  0008f	8b e5		 mov	 esp, ebp
  00091	5d		 pop	 ebp
  00092	c3		 ret	 0
_TEXT	ENDS
;	COMDAT text$x
text$x	SEGMENT
__unwindfunclet$?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ$0:
  00000	8b 45 e8	 mov	 eax, DWORD PTR $T317887[ebp]
  00003	50		 push	 eax
  00004	e8 00 00 00 00	 call	 ??3@YAXPAX@Z		; operator delete
  00009	59		 pop	 ecx
  0000a	c3		 ret	 0
__ehhandler$?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ:
  0000b	8b 54 24 08	 mov	 edx, DWORD PTR [esp+8]
  0000f	8d 42 0c	 lea	 eax, DWORD PTR [edx+12]
  00012	8b 4a e8	 mov	 ecx, DWORD PTR [edx-24]
  00015	33 c8		 xor	 ecx, eax
  00017	e8 00 00 00 00	 call	 @__security_check_cookie@4
  0001c	b8 00 00 00 00	 mov	 eax, OFFSET __ehfuncinfo$?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ
  00021	e9 00 00 00 00	 jmp	 ___CxxFrameHandler3
text$x	ENDS
?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ ENDP ; SmartPtr<CEventCollector>::GetRawPointer
; Function compile flags: /Odtp
;	COMDAT ??C?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ
_TEXT	SEGMENT
_this$ = -4						; size = 4
??C?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ PROC ; SmartPtr<CEventCollector>::operator->, COMDAT
; _this$ = ecx

; 168  :     {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx

; 169  :         return GetRawPointer();

  00007	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  0000a	e8 00 00 00 00	 call	 ?GetRawPointer@?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ ; SmartPtr<CEventCollector>::GetRawPointer

; 170  :     }

  0000f	8b e5		 mov	 esp, ebp
  00011	5d		 pop	 ebp
  00012	c3		 ret	 0
??C?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ ENDP ; SmartPtr<CEventCollector>::operator->
;	COMDAT xdata$x
; File c:\develop\dscaler423a\dscaler\audio.cpp
xdata$x	SEGMENT
__unwindtable$?Audio_Unmute@@YAXK@Z DD 0ffffffffH
	DD	FLAT:__unwindfunclet$?Audio_Unmute@@YAXK@Z$0
__ehfuncinfo$?Audio_Unmute@@YAXK@Z DD 019930522H
	DD	01H
	DD	FLAT:__unwindtable$?Audio_Unmute@@YAXK@Z
	DD	2 DUP(00H)
	DD	2 DUP(00H)
	DD	00H
	DD	00H
; Function compile flags: /Odtp
xdata$x	ENDS
;	COMDAT ?Audio_Unmute@@YAXK@Z
_TEXT	SEGMENT
tv91 = -20						; size = 4
_inScope$ = -16						; size = 4
__$EHRec$ = -12						; size = 12
_PreUnmuteDelay$ = 8					; size = 4
?Audio_Unmute@@YAXK@Z PROC				; Audio_Unmute, COMDAT

; 93   : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	6a ff		 push	 -1
  00005	68 00 00 00 00	 push	 __ehhandler$?Audio_Unmute@@YAXK@Z
  0000a	64 a1 00 00 00
	00		 mov	 eax, DWORD PTR fs:0
  00010	50		 push	 eax
  00011	83 ec 08	 sub	 esp, 8
  00014	a1 00 00 00 00	 mov	 eax, DWORD PTR ___security_cookie
  00019	33 c5		 xor	 eax, ebp
  0001b	50		 push	 eax
  0001c	8d 45 f4	 lea	 eax, DWORD PTR __$EHRec$[ebp]
  0001f	64 a3 00 00 00
	00		 mov	 DWORD PTR fs:0, eax

; 94   :     CProtectCode inScope(&AudioMuteLocker);

  00025	68 00 00 00 00	 push	 OFFSET ?AudioMuteLocker@@3VCCanLock@@A ; AudioMuteLocker
  0002a	8d 4d f0	 lea	 ecx, DWORD PTR _inScope$[ebp]
  0002d	e8 00 00 00 00	 call	 ??0CProtectCode@@QAE@PAVICanLock@@@Z ; CProtectCode::CProtectCode
  00032	c7 45 fc 00 00
	00 00		 mov	 DWORD PTR __$EHRec$[ebp+8], 0

; 95   : 
; 96   :     if(AudioMuteStatus > 0)

  00039	0f b6 05 00 00
	00 00		 movzx	 eax, BYTE PTR ?AudioMuteStatus@@3EA ; AudioMuteStatus
  00040	85 c0		 test	 eax, eax
  00042	0f 8e 99 00 00
	00		 jle	 $LN8@Audio_Unmu

; 97   :     {
; 98   :         if(PreUnmuteDelay > 0)

  00048	83 7d 08 00	 cmp	 DWORD PTR _PreUnmuteDelay$[ebp], 0
  0004c	76 2c		 jbe	 SHORT $LN7@Audio_Unmu

; 99   :         {
; 100  :             // This timer, together with the multi-state audio
; 101  :             // mute structure, automatically finds the longest
; 102  :             // delay time for us if there are multiple unmutes
; 103  :             // around the same time.
; 104  :             if(GetCurrentThreadId() != dwTimerProcThreadId ||
; 105  :                 !SetTimer(NULL, NULL, PreUnmuteDelay, AudioUnmuteDelayTimerProc))

  0004e	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__GetCurrentThreadId@0
  00054	3b 05 00 00 00
	00		 cmp	 eax, DWORD PTR ?dwTimerProcThreadId@@3KA ; dwTimerProcThreadId
  0005a	75 17		 jne	 SHORT $LN5@Audio_Unmu
  0005c	68 00 00 00 00	 push	 OFFSET ?AudioUnmuteDelayTimerProc@@YGXPAUHWND__@@IIK@Z ; AudioUnmuteDelayTimerProc
  00061	8b 4d 08	 mov	 ecx, DWORD PTR _PreUnmuteDelay$[ebp]
  00064	51		 push	 ecx
  00065	6a 00		 push	 0
  00067	6a 00		 push	 0
  00069	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__SetTimer@16
  0006f	85 c0		 test	 eax, eax
  00071	75 07		 jne	 SHORT $LN7@Audio_Unmu
$LN5@Audio_Unmu:

; 106  :             {
; 107  :                 // Timer creation failed so do the unmute now.
; 108  :                 PreUnmuteDelay = 0;

  00073	c7 45 08 00 00
	00 00		 mov	 DWORD PTR _PreUnmuteDelay$[ebp], 0
$LN7@Audio_Unmu:

; 109  :             }
; 110  :         }
; 111  :         if(PreUnmuteDelay == 0)

  0007a	83 7d 08 00	 cmp	 DWORD PTR _PreUnmuteDelay$[ebp], 0
  0007e	75 61		 jne	 SHORT $LN8@Audio_Unmu

; 112  :         {
; 113  :             if(--AudioMuteStatus == 0)

  00080	8a 15 00 00 00
	00		 mov	 dl, BYTE PTR ?AudioMuteStatus@@3EA ; AudioMuteStatus
  00086	80 ea 01	 sub	 dl, 1
  00089	88 15 00 00 00
	00		 mov	 BYTE PTR ?AudioMuteStatus@@3EA, dl ; AudioMuteStatus
  0008f	0f b6 05 00 00
	00 00		 movzx	 eax, BYTE PTR ?AudioMuteStatus@@3EA ; AudioMuteStatus
  00096	85 c0		 test	 eax, eax
  00098	75 47		 jne	 SHORT $LN8@Audio_Unmu

; 114  :             {
; 115  :                 // Always unmute the hardware contrary to how it's
; 116  :                 // done for mute, because the hardware needs to be
; 117  :                 // unmuted from its initial mute state.
; 118  :                 if(Providers_GetCurrentSource())

  0009a	e8 00 00 00 00	 call	 ?Providers_GetCurrentSource@@YAPAVCSource@@XZ ; Providers_GetCurrentSource
  0009f	85 c0		 test	 eax, eax
  000a1	74 15		 je	 SHORT $LN2@Audio_Unmu

; 119  :                 {
; 120  :                     Providers_GetCurrentSource()->UnMute();

  000a3	e8 00 00 00 00	 call	 ?Providers_GetCurrentSource@@YAPAVCSource@@XZ ; Providers_GetCurrentSource
  000a8	89 45 ec	 mov	 DWORD PTR tv91[ebp], eax
  000ab	8b 4d ec	 mov	 ecx, DWORD PTR tv91[ebp]
  000ae	8b 11		 mov	 edx, DWORD PTR [ecx]
  000b0	8b 4d ec	 mov	 ecx, DWORD PTR tv91[ebp]
  000b3	8b 42 20	 mov	 eax, DWORD PTR [edx+32]
  000b6	ff d0		 call	 eax
$LN2@Audio_Unmu:

; 121  :                 }
; 122  : 
; 123  :                 if(Mixer_IsEnabled())

  000b8	e8 00 00 00 00	 call	 ?Mixer_IsEnabled@@YAHXZ	; Mixer_IsEnabled
  000bd	85 c0		 test	 eax, eax
  000bf	74 05		 je	 SHORT $LN1@Audio_Unmu

; 124  :                 {
; 125  :                     Mixer_UnMute();

  000c1	e8 00 00 00 00	 call	 ?Mixer_UnMute@@YAXXZ	; Mixer_UnMute
$LN1@Audio_Unmu:

; 126  :                 }
; 127  : 
; 128  :                 EventCollector->RaiseEvent(NULL, EVENT_MUTE, 1, 0);

  000c6	6a 00		 push	 0
  000c8	6a 00		 push	 0
  000ca	6a 01		 push	 1
  000cc	6a 0d		 push	 13			; 0000000dH
  000ce	6a 00		 push	 0
  000d0	b9 00 00 00 00	 mov	 ecx, OFFSET ?EventCollector@@3V?$SmartPtr@VCEventCollector@@@@A ; EventCollector
  000d5	e8 00 00 00 00	 call	 ??C?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ ; SmartPtr<CEventCollector>::operator->
  000da	8b c8		 mov	 ecx, eax
  000dc	e8 00 00 00 00	 call	 ?RaiseEvent@CEventCollector@@QAEXPAVCEventObject@@W4eEventType@@JJPAW43@@Z ; CEventCollector::RaiseEvent
$LN8@Audio_Unmu:

; 129  :             }
; 130  :         }
; 131  :     }
; 132  : 
; 133  :     LOG(2, _T(" UnMute Called Status on Exit %d"), AudioMuteStatus);

  000e1	0f b6 0d 00 00
	00 00		 movzx	 ecx, BYTE PTR ?AudioMuteStatus@@3EA ; AudioMuteStatus
  000e8	51		 push	 ecx
  000e9	68 00 00 00 00	 push	 OFFSET ??_C@_1EC@JFOMLJFP@?$AA?5?$AAU?$AAn?$AAM?$AAu?$AAt?$AAe?$AA?5?$AAC?$AAa?$AAl?$AAl?$AAe?$AAd?$AA?5?$AAS?$AAt?$AAa?$AAt?$AAu?$AAs?$AA?5?$AAo?$AAn?$AA?5?$AAE?$AAx?$AAi?$AAt?$AA?5?$AA?$CF?$AAd@
  000ee	6a 02		 push	 2
  000f0	e8 00 00 00 00	 call	 ?LOG@@YAXHPB_WZZ	; LOG
  000f5	83 c4 0c	 add	 esp, 12			; 0000000cH

; 134  : }

  000f8	c7 45 fc ff ff
	ff ff		 mov	 DWORD PTR __$EHRec$[ebp+8], -1
  000ff	8d 4d f0	 lea	 ecx, DWORD PTR _inScope$[ebp]
  00102	e8 00 00 00 00	 call	 ??1CProtectCode@@QAE@XZ	; CProtectCode::~CProtectCode
  00107	8b 4d f4	 mov	 ecx, DWORD PTR __$EHRec$[ebp]
  0010a	64 89 0d 00 00
	00 00		 mov	 DWORD PTR fs:0, ecx
  00111	59		 pop	 ecx
  00112	8b e5		 mov	 esp, ebp
  00114	5d		 pop	 ebp
  00115	c3		 ret	 0
_TEXT	ENDS
;	COMDAT text$x
text$x	SEGMENT
__unwindfunclet$?Audio_Unmute@@YAXK@Z$0:
  00000	8d 4d f0	 lea	 ecx, DWORD PTR _inScope$[ebp]
  00003	e9 00 00 00 00	 jmp	 ??1CProtectCode@@QAE@XZ	; CProtectCode::~CProtectCode
__ehhandler$?Audio_Unmute@@YAXK@Z:
  00008	8b 54 24 08	 mov	 edx, DWORD PTR [esp+8]
  0000c	8d 42 0c	 lea	 eax, DWORD PTR [edx+12]
  0000f	8b 4a f4	 mov	 ecx, DWORD PTR [edx-12]
  00012	33 c8		 xor	 ecx, eax
  00014	e8 00 00 00 00	 call	 @__security_check_cookie@4
  00019	b8 00 00 00 00	 mov	 eax, OFFSET __ehfuncinfo$?Audio_Unmute@@YAXK@Z
  0001e	e9 00 00 00 00	 jmp	 ___CxxFrameHandler3
text$x	ENDS
?Audio_Unmute@@YAXK@Z ENDP				; Audio_Unmute
PUBLIC	?Audio_Mute@@YAXK@Z				; Audio_Mute
;	COMDAT xdata$x
xdata$x	SEGMENT
__unwindtable$?Audio_Mute@@YAXK@Z DD 0ffffffffH
	DD	FLAT:__unwindfunclet$?Audio_Mute@@YAXK@Z$0
__ehfuncinfo$?Audio_Mute@@YAXK@Z DD 019930522H
	DD	01H
	DD	FLAT:__unwindtable$?Audio_Mute@@YAXK@Z
	DD	2 DUP(00H)
	DD	2 DUP(00H)
	DD	00H
	DD	00H
; Function compile flags: /Odtp
xdata$x	ENDS
;	COMDAT ?Audio_Mute@@YAXK@Z
_TEXT	SEGMENT
tv83 = -20						; size = 4
_inScope$ = -16						; size = 4
__$EHRec$ = -12						; size = 12
_PostMuteDelay$ = 8					; size = 4
?Audio_Mute@@YAXK@Z PROC				; Audio_Mute, COMDAT

; 61   : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	6a ff		 push	 -1
  00005	68 00 00 00 00	 push	 __ehhandler$?Audio_Mute@@YAXK@Z
  0000a	64 a1 00 00 00
	00		 mov	 eax, DWORD PTR fs:0
  00010	50		 push	 eax
  00011	83 ec 08	 sub	 esp, 8
  00014	a1 00 00 00 00	 mov	 eax, DWORD PTR ___security_cookie
  00019	33 c5		 xor	 eax, ebp
  0001b	50		 push	 eax
  0001c	8d 45 f4	 lea	 eax, DWORD PTR __$EHRec$[ebp]
  0001f	64 a3 00 00 00
	00		 mov	 DWORD PTR fs:0, eax

; 62   :     CProtectCode inScope(&AudioMuteLocker);

  00025	68 00 00 00 00	 push	 OFFSET ?AudioMuteLocker@@3VCCanLock@@A ; AudioMuteLocker
  0002a	8d 4d f0	 lea	 ecx, DWORD PTR _inScope$[ebp]
  0002d	e8 00 00 00 00	 call	 ??0CProtectCode@@QAE@PAVICanLock@@@Z ; CProtectCode::CProtectCode
  00032	c7 45 fc 00 00
	00 00		 mov	 DWORD PTR __$EHRec$[ebp+8], 0

; 63   : 
; 64   :     // Multi-state muting and the handling PostMuteDelay
; 65   :     // and PreMuteDelay within these two simple
; 66   :     // asynchronous safe functions alleviates the need
; 67   :     // for complex and messy checks elsewhere in the program.
; 68   :     if(++AudioMuteStatus == 1)

  00039	a0 00 00 00 00	 mov	 al, BYTE PTR ?AudioMuteStatus@@3EA ; AudioMuteStatus
  0003e	04 01		 add	 al, 1
  00040	a2 00 00 00 00	 mov	 BYTE PTR ?AudioMuteStatus@@3EA, al ; AudioMuteStatus
  00045	0f b6 0d 00 00
	00 00		 movzx	 ecx, BYTE PTR ?AudioMuteStatus@@3EA ; AudioMuteStatus
  0004c	83 f9 01	 cmp	 ecx, 1
  0004f	75 60		 jne	 SHORT $LN4@Audio_Mute

; 69   :     {
; 70   :         if(Mixer_IsEnabled())

  00051	e8 00 00 00 00	 call	 ?Mixer_IsEnabled@@YAHXZ	; Mixer_IsEnabled
  00056	85 c0		 test	 eax, eax
  00058	74 05		 je	 SHORT $LN3@Audio_Mute

; 71   :         {
; 72   :             Mixer_Mute();

  0005a	e8 00 00 00 00	 call	 ?Mixer_Mute@@YAXXZ	; Mixer_Mute
$LN3@Audio_Mute:

; 73   :         }
; 74   : 
; 75   :         if(!Mixer_IsNoHardwareMute() && Providers_GetCurrentSource())

  0005f	e8 00 00 00 00	 call	 ?Mixer_IsNoHardwareMute@@YAHXZ ; Mixer_IsNoHardwareMute
  00064	85 c0		 test	 eax, eax
  00066	75 1e		 jne	 SHORT $LN2@Audio_Mute
  00068	e8 00 00 00 00	 call	 ?Providers_GetCurrentSource@@YAPAVCSource@@XZ ; Providers_GetCurrentSource
  0006d	85 c0		 test	 eax, eax
  0006f	74 15		 je	 SHORT $LN2@Audio_Mute

; 76   :         {
; 77   :             Providers_GetCurrentSource()->Mute();

  00071	e8 00 00 00 00	 call	 ?Providers_GetCurrentSource@@YAPAVCSource@@XZ ; Providers_GetCurrentSource
  00076	89 45 ec	 mov	 DWORD PTR tv83[ebp], eax
  00079	8b 55 ec	 mov	 edx, DWORD PTR tv83[ebp]
  0007c	8b 02		 mov	 eax, DWORD PTR [edx]
  0007e	8b 4d ec	 mov	 ecx, DWORD PTR tv83[ebp]
  00081	8b 50 1c	 mov	 edx, DWORD PTR [eax+28]
  00084	ff d2		 call	 edx
$LN2@Audio_Mute:

; 78   :         }
; 79   : 
; 80   :         EventCollector->RaiseEvent(NULL, EVENT_MUTE, 0, 1);

  00086	6a 00		 push	 0
  00088	6a 01		 push	 1
  0008a	6a 00		 push	 0
  0008c	6a 0d		 push	 13			; 0000000dH
  0008e	6a 00		 push	 0
  00090	b9 00 00 00 00	 mov	 ecx, OFFSET ?EventCollector@@3V?$SmartPtr@VCEventCollector@@@@A ; EventCollector
  00095	e8 00 00 00 00	 call	 ??C?$SmartPtr@VCEventCollector@@@@QBEPAVCEventCollector@@XZ ; SmartPtr<CEventCollector>::operator->
  0009a	8b c8		 mov	 ecx, eax
  0009c	e8 00 00 00 00	 call	 ?RaiseEvent@CEventCollector@@QAEXPAVCEventObject@@W4eEventType@@JJPAW43@@Z ; CEventCollector::RaiseEvent

; 81   : 
; 82   :         if(PostMuteDelay > 0)

  000a1	83 7d 08 00	 cmp	 DWORD PTR _PostMuteDelay$[ebp], 0
  000a5	76 0a		 jbe	 SHORT $LN4@Audio_Mute

; 83   :         {
; 84   :             Sleep(PostMuteDelay);

  000a7	8b 45 08	 mov	 eax, DWORD PTR _PostMuteDelay$[ebp]
  000aa	50		 push	 eax
  000ab	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__Sleep@4
$LN4@Audio_Mute:

; 85   :         }
; 86   :     }
; 87   : 
; 88   :     LOG(2, _T(" Mute Called Status on Exit %d"), AudioMuteStatus);

  000b1	0f b6 0d 00 00
	00 00		 movzx	 ecx, BYTE PTR ?AudioMuteStatus@@3EA ; AudioMuteStatus
  000b8	51		 push	 ecx
  000b9	68 00 00 00 00	 push	 OFFSET ??_C@_1DO@HNJLCDIF@?$AA?5?$AAM?$AAu?$AAt?$AAe?$AA?5?$AAC?$AAa?$AAl?$AAl?$AAe?$AAd?$AA?5?$AAS?$AAt?$AAa?$AAt?$AAu?$AAs?$AA?5?$AAo?$AAn?$AA?5?$AAE?$AAx?$AAi?$AAt?$AA?5?$AA?$CF?$AAd?$AA?$AA@
  000be	6a 02		 push	 2
  000c0	e8 00 00 00 00	 call	 ?LOG@@YAXHPB_WZZ	; LOG
  000c5	83 c4 0c	 add	 esp, 12			; 0000000cH

; 89   : }

  000c8	c7 45 fc ff ff
	ff ff		 mov	 DWORD PTR __$EHRec$[ebp+8], -1
  000cf	8d 4d f0	 lea	 ecx, DWORD PTR _inScope$[ebp]
  000d2	e8 00 00 00 00	 call	 ??1CProtectCode@@QAE@XZ	; CProtectCode::~CProtectCode
  000d7	8b 4d f4	 mov	 ecx, DWORD PTR __$EHRec$[ebp]
  000da	64 89 0d 00 00
	00 00		 mov	 DWORD PTR fs:0, ecx
  000e1	59		 pop	 ecx
  000e2	8b e5		 mov	 esp, ebp
  000e4	5d		 pop	 ebp
  000e5	c3		 ret	 0
_TEXT	ENDS
;	COMDAT text$x
text$x	SEGMENT
__unwindfunclet$?Audio_Mute@@YAXK@Z$0:
  00000	8d 4d f0	 lea	 ecx, DWORD PTR _inScope$[ebp]
  00003	e9 00 00 00 00	 jmp	 ??1CProtectCode@@QAE@XZ	; CProtectCode::~CProtectCode
__ehhandler$?Audio_Mute@@YAXK@Z:
  00008	8b 54 24 08	 mov	 edx, DWORD PTR [esp+8]
  0000c	8d 42 0c	 lea	 eax, DWORD PTR [edx+12]
  0000f	8b 4a f4	 mov	 ecx, DWORD PTR [edx-12]
  00012	33 c8		 xor	 ecx, eax
  00014	e8 00 00 00 00	 call	 @__security_check_cookie@4
  00019	b8 00 00 00 00	 mov	 eax, OFFSET __ehfuncinfo$?Audio_Mute@@YAXK@Z
  0001e	e9 00 00 00 00	 jmp	 ___CxxFrameHandler3
text$x	ENDS
?Audio_Mute@@YAXK@Z ENDP				; Audio_Mute
PUBLIC	?Initialize_Mute@@YAXXZ				; Initialize_Mute
; Function compile flags: /Odtp
;	COMDAT ?Initialize_Mute@@YAXXZ
_TEXT	SEGMENT
?Initialize_Mute@@YAXXZ PROC				; Initialize_Mute, COMDAT

; 46   : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp

; 47   :     // Set the timer proc to only be called on this thread
; 48   :     dwTimerProcThreadId = GetCurrentThreadId();

  00003	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__GetCurrentThreadId@0
  00009	a3 00 00 00 00	 mov	 DWORD PTR ?dwTimerProcThreadId@@3KA, eax ; dwTimerProcThreadId

; 49   : 
; 50   :     Audio_Mute();

  0000e	6a 00		 push	 0
  00010	e8 00 00 00 00	 call	 ?Audio_Mute@@YAXK@Z	; Audio_Mute
  00015	83 c4 04	 add	 esp, 4

; 51   : 
; 52   :     // Again for user mute if it's initially set
; 53   :     if(bUserMute == TRUE)

  00018	83 3d 00 00 00
	00 01		 cmp	 DWORD PTR ?bUserMute@@3HA, 1 ; bUserMute
  0001f	75 0a		 jne	 SHORT $LN2@Initialize@12

; 54   :     {
; 55   :         Audio_Mute();

  00021	6a 00		 push	 0
  00023	e8 00 00 00 00	 call	 ?Audio_Mute@@YAXK@Z	; Audio_Mute
  00028	83 c4 04	 add	 esp, 4
$LN2@Initialize@12:

; 56   :     }
; 57   : }

  0002b	5d		 pop	 ebp
  0002c	c3		 ret	 0
?Initialize_Mute@@YAXXZ ENDP				; Initialize_Mute
PUBLIC	?Audio_SetUserMute@@YAXH@Z			; Audio_SetUserMute
; Function compile flags: /Odtp
;	COMDAT ?Audio_SetUserMute@@YAXH@Z
_TEXT	SEGMENT
_bMute$ = 8						; size = 4
?Audio_SetUserMute@@YAXH@Z PROC				; Audio_SetUserMute, COMDAT

; 151  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp

; 152  :     if(bUserMute != bMute)

  00003	a1 00 00 00 00	 mov	 eax, DWORD PTR ?bUserMute@@3HA ; bUserMute
  00008	3b 45 08	 cmp	 eax, DWORD PTR _bMute$[ebp]
  0000b	74 25		 je	 SHORT $LN4@Audio_SetU

; 153  :     {
; 154  :         bUserMute = bMute;

  0000d	8b 4d 08	 mov	 ecx, DWORD PTR _bMute$[ebp]
  00010	89 0d 00 00 00
	00		 mov	 DWORD PTR ?bUserMute@@3HA, ecx ; bUserMute

; 155  :         if(bMute == TRUE)

  00016	83 7d 08 01	 cmp	 DWORD PTR _bMute$[ebp], 1
  0001a	75 0c		 jne	 SHORT $LN2@Audio_SetU

; 156  :         {
; 157  :             Audio_Mute();

  0001c	6a 00		 push	 0
  0001e	e8 00 00 00 00	 call	 ?Audio_Mute@@YAXK@Z	; Audio_Mute
  00023	83 c4 04	 add	 esp, 4

; 158  :         }
; 159  :         else

  00026	eb 0a		 jmp	 SHORT $LN4@Audio_SetU
$LN2@Audio_SetU:

; 160  :         {
; 161  :             Audio_Unmute();

  00028	6a 00		 push	 0
  0002a	e8 00 00 00 00	 call	 ?Audio_Unmute@@YAXK@Z	; Audio_Unmute
  0002f	83 c4 04	 add	 esp, 4
$LN4@Audio_SetU:

; 162  :         }
; 163  :     }
; 164  : }

  00032	5d		 pop	 ebp
  00033	c3		 ret	 0
?Audio_SetUserMute@@YAXH@Z ENDP				; Audio_SetUserMute
; Function compile flags: /Odtp
;	COMDAT ?UserMute_OnChange@@YAHJ@Z
_TEXT	SEGMENT
_NewValue$ = 8						; size = 4
?UserMute_OnChange@@YAHJ@Z PROC				; UserMute_OnChange, COMDAT

; 174  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp

; 175  :     Audio_SetUserMute(NewValue);

  00003	8b 45 08	 mov	 eax, DWORD PTR _NewValue$[ebp]
  00006	50		 push	 eax
  00007	e8 00 00 00 00	 call	 ?Audio_SetUserMute@@YAXH@Z ; Audio_SetUserMute
  0000c	83 c4 04	 add	 esp, 4

; 176  :     return FALSE;

  0000f	33 c0		 xor	 eax, eax

; 177  : }

  00011	5d		 pop	 ebp
  00012	c3		 ret	 0
?UserMute_OnChange@@YAHJ@Z ENDP				; UserMute_OnChange
; Function compile flags: /Odtp
;	COMDAT ??__EAudioMuteLocker@@YAXXZ
text$yc	SEGMENT
??__EAudioMuteLocker@@YAXXZ PROC			; `dynamic initializer for 'AudioMuteLocker'', COMDAT

; 33   : CCanLock AudioMuteLocker;

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	b9 00 00 00 00	 mov	 ecx, OFFSET ?AudioMuteLocker@@3VCCanLock@@A ; AudioMuteLocker
  00008	e8 00 00 00 00	 call	 ??0CCanLock@@QAE@XZ	; CCanLock::CCanLock
  0000d	68 00 00 00 00	 push	 OFFSET ??__FAudioMuteLocker@@YAXXZ ; `dynamic atexit destructor for 'AudioMuteLocker''
  00012	e8 00 00 00 00	 call	 _atexit
  00017	83 c4 04	 add	 esp, 4
  0001a	5d		 pop	 ebp
  0001b	c3		 ret	 0
??__EAudioMuteLocker@@YAXXZ ENDP			; `dynamic initializer for 'AudioMuteLocker''
; Function compile flags: /Odtp
;	COMDAT ??__FAudioMuteLocker@@YAXXZ
text$yd	SEGMENT
??__FAudioMuteLocker@@YAXXZ PROC			; `dynamic atexit destructor for 'AudioMuteLocker'', COMDAT
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	b9 00 00 00 00	 mov	 ecx, OFFSET ?AudioMuteLocker@@3VCCanLock@@A ; AudioMuteLocker
  00008	e8 00 00 00 00	 call	 ??1CCanLock@@QAE@XZ	; CCanLock::~CCanLock
  0000d	5d		 pop	 ebp
  0000e	c3		 ret	 0
??__FAudioMuteLocker@@YAXXZ ENDP			; `dynamic atexit destructor for 'AudioMuteLocker''
PUBLIC	?AudioMuteLocker@@3VCCanLock@@A			; AudioMuteLocker
?AudioMuteLocker@@3VCCanLock@@A DB 01cH DUP (?)		; AudioMuteLocker
CRT$XCU	SEGMENT
_AudioMuteLocker$initializer$ DD FLAT:??__EAudioMuteLocker@@YAXXZ
CRT$XCU	ENDS
END
