/* APPLE LOCAL file 4795703 */
/* Compile with no ICE. */
// { dg-options "-fpreprocessed" }
/* { dg-do compile } */

# 1 "test.mm"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "test.mm"
# 10 "test.mm"
# 1 "/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h" 1 3
# 12 "/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h" 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 1 3





# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 3
# 1 "/usr/include/sys/types.h" 1 3 4
# 67 "/usr/include/sys/types.h" 3 4
# 1 "/usr/include/sys/appleapiopts.h" 1 3 4
# 68 "/usr/include/sys/types.h" 2 3 4


# 1 "/usr/include/sys/cdefs.h" 1 3 4
# 71 "/usr/include/sys/types.h" 2 3 4


# 1 "/usr/include/machine/types.h" 1 3 4
# 30 "/usr/include/machine/types.h" 3 4
# 1 "/usr/include/ppc/types.h" 1 3 4
# 65 "/usr/include/ppc/types.h" 3 4
# 1 "/usr/include/ppc/_types.h" 1 3 4
# 32 "/usr/include/ppc/_types.h" 3 4
typedef signed char __int8_t;



typedef unsigned char __uint8_t;
typedef short __int16_t;
typedef unsigned short __uint16_t;
typedef int __int32_t;
typedef unsigned int __uint32_t;
typedef long long __int64_t;
typedef unsigned long long __uint64_t;

typedef long __darwin_intptr_t;
typedef unsigned int __darwin_natural_t;
# 65 "/usr/include/ppc/_types.h" 3 4
typedef int __darwin_ct_rune_t;





typedef union {
 char __mbstate8[128];
 long long _mbstateL;
} __mbstate_t;

typedef __mbstate_t __darwin_mbstate_t;


typedef int __darwin_ptrdiff_t;





typedef long unsigned int __darwin_size_t;





typedef __builtin_va_list __darwin_va_list;





typedef int __darwin_wchar_t;




typedef __darwin_wchar_t __darwin_rune_t;


typedef int __darwin_wint_t;




typedef unsigned long __darwin_clock_t;
typedef __uint32_t __darwin_socklen_t;
typedef long __darwin_ssize_t;
typedef long __darwin_time_t;
# 66 "/usr/include/ppc/types.h" 2 3 4







typedef signed char int8_t;

typedef unsigned char u_int8_t;


typedef short int16_t;

typedef unsigned short u_int16_t;


typedef int int32_t;

typedef unsigned int u_int32_t;


typedef long long int64_t;

typedef unsigned long long u_int64_t;




typedef int32_t register_t;




typedef __darwin_intptr_t intptr_t;



typedef unsigned long uintptr_t;
# 114 "/usr/include/ppc/types.h" 3 4
typedef u_int64_t user_addr_t;
typedef u_int64_t user_size_t;
typedef int64_t user_ssize_t;
typedef int64_t user_long_t;
typedef u_int64_t user_ulong_t;
typedef int64_t user_time_t;





typedef u_int64_t syscall_arg_t;
# 31 "/usr/include/machine/types.h" 2 3 4
# 74 "/usr/include/sys/types.h" 2 3 4
# 1 "/usr/include/sys/_types.h" 1 3 4
# 28 "/usr/include/sys/_types.h" 3 4
# 1 "/usr/include/machine/_types.h" 1 3 4
# 29 "/usr/include/sys/_types.h" 2 3 4
# 53 "/usr/include/sys/_types.h" 3 4
struct __darwin_pthread_handler_rec
{
 void (*__routine)(void *);
 void *__arg;
 struct __darwin_pthread_handler_rec *__next;
};
struct _opaque_pthread_attr_t { long __sig; char __opaque[36]; };
struct _opaque_pthread_cond_t { long __sig; char __opaque[24]; };
struct _opaque_pthread_condattr_t { long __sig; char __opaque[4]; };
struct _opaque_pthread_mutex_t { long __sig; char __opaque[40]; };
struct _opaque_pthread_mutexattr_t { long __sig; char __opaque[8]; };
struct _opaque_pthread_once_t { long __sig; char __opaque[4]; };
struct _opaque_pthread_rwlock_t { long __sig; char __opaque[124]; };
struct _opaque_pthread_rwlockattr_t { long __sig; char __opaque[12]; };
struct _opaque_pthread_t { long __sig; struct __darwin_pthread_handler_rec *__cleanup_stack; char __opaque[596]; };
# 89 "/usr/include/sys/_types.h" 3 4
typedef __int64_t __darwin_blkcnt_t;
typedef __int32_t __darwin_blksize_t;
typedef __int32_t __darwin_dev_t;
typedef unsigned int __darwin_fsblkcnt_t;
typedef unsigned int __darwin_fsfilcnt_t;
typedef __uint32_t __darwin_gid_t;
typedef __uint32_t __darwin_id_t;
typedef __uint32_t __darwin_ino_t;
typedef __int64_t __darwin_ino64_t;
typedef __darwin_natural_t __darwin_mach_port_name_t;
typedef __darwin_mach_port_name_t __darwin_mach_port_t;
typedef __uint16_t __darwin_mode_t;
typedef __int64_t __darwin_off_t;
typedef __int32_t __darwin_pid_t;
typedef struct _opaque_pthread_attr_t
   __darwin_pthread_attr_t;
typedef struct _opaque_pthread_cond_t
   __darwin_pthread_cond_t;
typedef struct _opaque_pthread_condattr_t
   __darwin_pthread_condattr_t;
typedef unsigned long __darwin_pthread_key_t;
typedef struct _opaque_pthread_mutex_t
   __darwin_pthread_mutex_t;
typedef struct _opaque_pthread_mutexattr_t
   __darwin_pthread_mutexattr_t;
typedef struct _opaque_pthread_once_t
   __darwin_pthread_once_t;
typedef struct _opaque_pthread_rwlock_t
   __darwin_pthread_rwlock_t;
typedef struct _opaque_pthread_rwlockattr_t
   __darwin_pthread_rwlockattr_t;
typedef struct _opaque_pthread_t
   *__darwin_pthread_t;
typedef __uint32_t __darwin_sigset_t;
typedef __int32_t __darwin_suseconds_t;
typedef __uint32_t __darwin_uid_t;
typedef __uint32_t __darwin_useconds_t;
typedef unsigned char __darwin_uuid_t[16];
# 75 "/usr/include/sys/types.h" 2 3 4

# 1 "/usr/include/machine/endian.h" 1 3 4
# 30 "/usr/include/machine/endian.h" 3 4
# 1 "/usr/include/ppc/endian.h" 1 3 4
# 111 "/usr/include/ppc/endian.h" 3 4
# 1 "/usr/include/sys/_endian.h" 1 3 4
# 112 "/usr/include/ppc/endian.h" 2 3 4
# 31 "/usr/include/machine/endian.h" 2 3 4
# 77 "/usr/include/sys/types.h" 2 3 4


typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;

typedef unsigned long u_long;


typedef unsigned short ushort;
typedef unsigned int uint;


typedef u_int64_t u_quad_t;
typedef int64_t quad_t;
typedef quad_t * qaddr_t;

typedef char * caddr_t;
typedef int32_t daddr_t;


typedef __darwin_dev_t dev_t;



typedef u_int32_t fixpt_t;


typedef __darwin_blkcnt_t blkcnt_t;




typedef __darwin_blksize_t blksize_t;




typedef __darwin_gid_t gid_t;





typedef __uint32_t in_addr_t;




typedef __uint16_t in_port_t;



typedef __darwin_ino_t ino_t;





typedef __darwin_ino64_t ino64_t;






typedef __int32_t key_t;



typedef __darwin_mode_t mode_t;




typedef __uint16_t nlink_t;





typedef __darwin_id_t id_t;



typedef __darwin_pid_t pid_t;




typedef __darwin_off_t off_t;



typedef int32_t segsz_t;
typedef int32_t swblk_t;


typedef __darwin_uid_t uid_t;
# 192 "/usr/include/sys/types.h" 3 4
static inline __int32_t major(__uint32_t _x)
{
 return (__int32_t)(((__uint32_t)_x >> 24) & 0xff);
}

static inline __int32_t minor(__uint32_t _x)
{
 return (__int32_t)((_x) & 0xffffff);
}

static inline dev_t makedev(__uint32_t _major, __uint32_t _minor)
{
 return (dev_t)(((_major) << 24) | (_minor));
}
# 218 "/usr/include/sys/types.h" 3 4
typedef __darwin_clock_t clock_t;






typedef __darwin_size_t size_t;




typedef __darwin_ssize_t ssize_t;




typedef __darwin_time_t time_t;




typedef __darwin_useconds_t useconds_t;




typedef __darwin_suseconds_t suseconds_t;
# 255 "/usr/include/sys/types.h" 3 4
# 1 "/usr/include/sys/_structs.h" 1 3 4
# 193 "/usr/include/sys/_structs.h" 3 4
extern "C" {
typedef struct fd_set {
 __int32_t fds_bits[(((1024) + (((sizeof(__int32_t) * 8)) - 1)) / ((sizeof(__int32_t) * 8)))];
} fd_set;
}


static inline int
__darwin_fd_isset(int _n, struct fd_set *_p)
{
 return (_p->fds_bits[_n/(sizeof(__int32_t) * 8)] & (1<<(_n % (sizeof(__int32_t) * 8))));
}
# 256 "/usr/include/sys/types.h" 2 3 4




typedef __int32_t fd_mask;
# 313 "/usr/include/sys/types.h" 3 4
typedef __darwin_pthread_attr_t pthread_attr_t;



typedef __darwin_pthread_cond_t pthread_cond_t;



typedef __darwin_pthread_condattr_t pthread_condattr_t;



typedef __darwin_pthread_mutex_t pthread_mutex_t;



typedef __darwin_pthread_mutexattr_t pthread_mutexattr_t;



typedef __darwin_pthread_once_t pthread_once_t;



typedef __darwin_pthread_rwlock_t pthread_rwlock_t;



typedef __darwin_pthread_rwlockattr_t pthread_rwlockattr_t;



typedef __darwin_pthread_t pthread_t;






typedef __darwin_pthread_key_t pthread_key_t;





typedef __darwin_fsblkcnt_t fsblkcnt_t;




typedef __darwin_fsfilcnt_t fsfilcnt_t;
# 12 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdarg.h" 1 3 4
# 43 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 105 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/assert.h" 1 3 4
# 44 "/usr/include/assert.h" 3 4
# 1 "/usr/include/stdlib.h" 1 3 4
# 61 "/usr/include/stdlib.h" 3 4
# 1 "/usr/include/_types.h" 1 3 4
# 29 "/usr/include/_types.h" 3 4
typedef int __darwin_nl_item;
typedef int __darwin_wctrans_t;



typedef unsigned long __darwin_wctype_t;
# 62 "/usr/include/stdlib.h" 2 3 4

# 1 "/usr/include/sys/wait.h" 1 3 4
# 74 "/usr/include/sys/wait.h" 3 4
typedef enum {
 P_ALL,
 P_PID,
 P_PGID
} idtype_t;
# 111 "/usr/include/sys/wait.h" 3 4
# 1 "/usr/include/sys/signal.h" 1 3 4
# 76 "/usr/include/sys/signal.h" 3 4
# 1 "/usr/include/machine/signal.h" 1 3 4
# 27 "/usr/include/machine/signal.h" 3 4
# 1 "/usr/include/ppc/signal.h" 1 3 4
# 34 "/usr/include/ppc/signal.h" 3 4
typedef int sig_atomic_t;
# 45 "/usr/include/ppc/signal.h" 3 4
# 1 "/usr/include/ppc/_structs.h" 1 3 4
# 126 "/usr/include/ppc/_structs.h" 3 4
struct __darwin_sigcontext
{
    int __sc_onstack;
    int __sc_mask;
    int __sc_ir;
    int __sc_psw;
    int __sc_sp;
    void *__sc_regs;
};
# 162 "/usr/include/ppc/_structs.h" 3 4
struct __darwin_sigcontext32
{
    int __sc_onstack;
    int __sc_mask;
    int __sc_ir;
    int __sc_psw;
    int __sc_sp;
    void *__sc_regs;
};
# 191 "/usr/include/ppc/_structs.h" 3 4
struct __darwin_sigcontext64
{
    int __sc_onstack;
    int __sc_mask;
    long long __sc_ir;
    long long __sc_psw;
    long long __sc_sp;
    void *__sc_regs;
};
# 46 "/usr/include/ppc/signal.h" 2 3 4
# 63 "/usr/include/ppc/signal.h" 3 4
typedef enum {
 REGS_SAVED_NONE,
 REGS_SAVED_CALLER,


 REGS_SAVED_ALL
} regs_saved_t;
# 28 "/usr/include/machine/signal.h" 2 3 4
# 77 "/usr/include/sys/signal.h" 2 3 4
# 149 "/usr/include/sys/signal.h" 3 4
# 1 "/usr/include/sys/_structs.h" 1 3 4
# 52 "/usr/include/sys/_structs.h" 3 4
# 1 "/usr/include/machine/_structs.h" 1 3 4
# 24 "/usr/include/machine/_structs.h" 3 4
# 1 "/usr/include/ppc/_structs.h" 1 3 4
# 39 "/usr/include/ppc/_structs.h" 3 4
# 1 "/usr/include/mach/ppc/_structs.h" 1 3 4
# 40 "/usr/include/mach/ppc/_structs.h" 3 4
struct __darwin_ppc_thread_state
{
 unsigned int __srr0;
 unsigned int __srr1;
 unsigned int __r0;
 unsigned int __r1;
 unsigned int __r2;
 unsigned int __r3;
 unsigned int __r4;
 unsigned int __r5;
 unsigned int __r6;
 unsigned int __r7;
 unsigned int __r8;
 unsigned int __r9;
 unsigned int __r10;
 unsigned int __r11;
 unsigned int __r12;
 unsigned int __r13;
 unsigned int __r14;
 unsigned int __r15;
 unsigned int __r16;
 unsigned int __r17;
 unsigned int __r18;
 unsigned int __r19;
 unsigned int __r20;
 unsigned int __r21;
 unsigned int __r22;
 unsigned int __r23;
 unsigned int __r24;
 unsigned int __r25;
 unsigned int __r26;
 unsigned int __r27;
 unsigned int __r28;
 unsigned int __r29;
 unsigned int __r30;
 unsigned int __r31;

 unsigned int __cr;
 unsigned int __xer;
 unsigned int __lr;
 unsigned int __ctr;
 unsigned int __mq;

 unsigned int __vrsave;
};
# 136 "/usr/include/mach/ppc/_structs.h" 3 4
#pragma pack(4)



struct __darwin_ppc_thread_state64
{
 unsigned long long __srr0;
 unsigned long long __srr1;
 unsigned long long __r0;
 unsigned long long __r1;
 unsigned long long __r2;
 unsigned long long __r3;
 unsigned long long __r4;
 unsigned long long __r5;
 unsigned long long __r6;
 unsigned long long __r7;
 unsigned long long __r8;
 unsigned long long __r9;
 unsigned long long __r10;
 unsigned long long __r11;
 unsigned long long __r12;
 unsigned long long __r13;
 unsigned long long __r14;
 unsigned long long __r15;
 unsigned long long __r16;
 unsigned long long __r17;
 unsigned long long __r18;
 unsigned long long __r19;
 unsigned long long __r20;
 unsigned long long __r21;
 unsigned long long __r22;
 unsigned long long __r23;
 unsigned long long __r24;
 unsigned long long __r25;
 unsigned long long __r26;
 unsigned long long __r27;
 unsigned long long __r28;
 unsigned long long __r29;
 unsigned long long __r30;
 unsigned long long __r31;

 unsigned int __cr;
 unsigned long long __xer;
 unsigned long long __lr;
 unsigned long long __ctr;

 unsigned int __vrsave;
};
# 232 "/usr/include/mach/ppc/_structs.h" 3 4
#pragma pack()







struct __darwin_ppc_float_state
{
 double __fpregs[32];

 unsigned int __fpscr_pad;
 unsigned int __fpscr;
};
# 258 "/usr/include/mach/ppc/_structs.h" 3 4
#pragma pack(4)



struct __darwin_ppc_vector_state
{




 unsigned long __save_vr[32][4];
 unsigned long __save_vscr[4];

 unsigned int __save_pad5[4];
 unsigned int __save_vrvalid;
 unsigned int __save_pad6[7];
};
# 292 "/usr/include/mach/ppc/_structs.h" 3 4
#pragma pack()
# 311 "/usr/include/mach/ppc/_structs.h" 3 4
#pragma pack(4)



struct __darwin_ppc_exception_state
{







 unsigned long __dar;
 unsigned long __dsisr;
 unsigned long __exception;
 unsigned long __pad0;
 unsigned long __pad1[4];

};
# 354 "/usr/include/mach/ppc/_structs.h" 3 4
struct __darwin_ppc_exception_state64
{
 unsigned long long __dar;





 unsigned long __dsisr;
 unsigned long __exception;
 unsigned long __pad1[4];

};
# 385 "/usr/include/mach/ppc/_structs.h" 3 4
#pragma pack()
# 40 "/usr/include/ppc/_structs.h" 2 3 4







struct __darwin_mcontext
{
 struct __darwin_ppc_exception_state __es;
 struct __darwin_ppc_thread_state __ss;
 struct __darwin_ppc_float_state __fs;
 struct __darwin_ppc_vector_state __vs;
};
# 72 "/usr/include/ppc/_structs.h" 3 4
struct __darwin_mcontext64
{
 struct __darwin_ppc_exception_state64 __es;
 struct __darwin_ppc_thread_state64 __ss;
 struct __darwin_ppc_float_state __fs;
 struct __darwin_ppc_vector_state __vs;
};
# 96 "/usr/include/ppc/_structs.h" 3 4
typedef struct __darwin_mcontext *mcontext_t;







typedef struct __darwin_mcontext64 *mcontext64_t;
# 25 "/usr/include/machine/_structs.h" 2 3 4
# 53 "/usr/include/sys/_structs.h" 2 3 4
# 70 "/usr/include/sys/_structs.h" 3 4
struct __darwin_sigaltstack
{
 void *ss_sp;
 __darwin_size_t ss_size;
 int ss_flags;
};
# 123 "/usr/include/sys/_structs.h" 3 4
struct __darwin_ucontext
{
 int uc_onstack;
 __darwin_sigset_t uc_sigmask;
 struct __darwin_sigaltstack uc_stack;
 struct __darwin_ucontext *uc_link;
 __darwin_size_t uc_mcsize;
 struct __darwin_mcontext *uc_mcontext;



};
# 146 "/usr/include/sys/_structs.h" 3 4
struct __darwin_ucontext64
{
 int uc_onstack;
 __darwin_sigset_t uc_sigmask;
 struct __darwin_sigaltstack uc_stack;
 struct __darwin_ucontext64 *uc_link;
 __darwin_size_t uc_mcsize;
 struct __darwin_mcontext64 *uc_mcontext64;
};
# 228 "/usr/include/sys/_structs.h" 3 4
typedef struct __darwin_sigaltstack stack_t;
# 237 "/usr/include/sys/_structs.h" 3 4
typedef struct __darwin_ucontext ucontext_t;







typedef struct __darwin_ucontext64 ucontext64_t;
# 150 "/usr/include/sys/signal.h" 2 3 4
# 163 "/usr/include/sys/signal.h" 3 4
typedef __darwin_sigset_t sigset_t;
# 176 "/usr/include/sys/signal.h" 3 4
union sigval {

 int sival_int;
 void *sival_ptr;
};





struct sigevent {
 int sigev_notify;
 int sigev_signo;
 union sigval sigev_value;
 void (*sigev_notify_function)(union sigval);
 pthread_attr_t *sigev_notify_attributes;
};



typedef struct __siginfo {
 int si_signo;
 int si_errno;
 int si_code;
 pid_t si_pid;
 uid_t si_uid;
 int si_status;
 void *si_addr;
 union sigval si_value;
 long si_band;
 unsigned long __pad[7];
} siginfo_t;
# 287 "/usr/include/sys/signal.h" 3 4
union __sigaction_u {
 void (*__sa_handler)(int);
 void (*__sa_sigaction)(int, struct __siginfo *,
         void *);
};


struct __sigaction {
 union __sigaction_u __sigaction_u;
 void (*sa_tramp)(void *, int, int, siginfo_t *, void *);
 sigset_t sa_mask;
 int sa_flags;
};




struct sigaction {
 union __sigaction_u __sigaction_u;
 sigset_t sa_mask;
 int sa_flags;
};
# 345 "/usr/include/sys/signal.h" 3 4
typedef void (*sig_t)(int);
# 362 "/usr/include/sys/signal.h" 3 4
struct sigvec {
 void (*sv_handler)(int);
 int sv_mask;
 int sv_flags;
};
# 381 "/usr/include/sys/signal.h" 3 4
struct sigstack {
 char *ss_sp;
 int ss_onstack;
};
# 403 "/usr/include/sys/signal.h" 3 4
extern "C" {
void (*signal(int, void (*)(int)))(int);
}
# 112 "/usr/include/sys/wait.h" 2 3 4
# 1 "/usr/include/sys/resource.h" 1 3 4
# 71 "/usr/include/sys/resource.h" 3 4
# 1 "/usr/include/sys/_structs.h" 1 3 4
# 95 "/usr/include/sys/_structs.h" 3 4
struct timeval
{
 __darwin_time_t tv_sec;
 __darwin_suseconds_t tv_usec;
};
# 72 "/usr/include/sys/resource.h" 2 3 4
# 83 "/usr/include/sys/resource.h" 3 4
typedef __uint64_t rlim_t;
# 128 "/usr/include/sys/resource.h" 3 4
struct rusage {
 struct timeval ru_utime;
 struct timeval ru_stime;
# 139 "/usr/include/sys/resource.h" 3 4
 long ru_maxrss;

 long ru_ixrss;
 long ru_idrss;
 long ru_isrss;
 long ru_minflt;
 long ru_majflt;
 long ru_nswap;
 long ru_inblock;
 long ru_oublock;
 long ru_msgsnd;
 long ru_msgrcv;
 long ru_nsignals;
 long ru_nvcsw;
 long ru_nivcsw;


};
# 201 "/usr/include/sys/resource.h" 3 4
struct rlimit {
 rlim_t rlim_cur;
 rlim_t rlim_max;
};
# 223 "/usr/include/sys/resource.h" 3 4
extern "C" {
int getpriority(int, id_t);

int getiopolicy_np(int, int);

int getrlimit(int, struct rlimit *) __asm("_" "getrlimit" "$UNIX2003");
int getrusage(int, struct rusage *);
int setpriority(int, id_t, int);

int setiopolicy_np(int, int, int);

int setrlimit(int, const struct rlimit *) __asm("_" "setrlimit" "$UNIX2003");
}
# 113 "/usr/include/sys/wait.h" 2 3 4
# 196 "/usr/include/sys/wait.h" 3 4
union wait {
 int w_status;



 struct {







  unsigned int w_Filler:16,
    w_Retcode:8,
    w_Coredump:1,
    w_Termsig:7;

 } w_T;





 struct {






  unsigned int w_Filler:16,
    w_Stopsig:8,
    w_Stopval:8;

 } w_S;
};
# 249 "/usr/include/sys/wait.h" 3 4
extern "C" {
pid_t wait(int *) __asm("_" "wait" "$UNIX2003");
pid_t waitpid(pid_t, int *, int) __asm("_" "waitpid" "$UNIX2003");

int waitid(idtype_t, id_t, siginfo_t *, int) __asm("_" "waitid" "$UNIX2003");


pid_t wait3(int *, int, struct rusage *);
pid_t wait4(pid_t, int *, int, struct rusage *);

}
# 64 "/usr/include/stdlib.h" 2 3 4

# 1 "/usr/include/alloca.h" 1 3 4
# 35 "/usr/include/alloca.h" 3 4
extern "C" {
void *alloca(size_t);
}
# 66 "/usr/include/stdlib.h" 2 3 4
# 79 "/usr/include/stdlib.h" 3 4
typedef __darwin_ct_rune_t ct_rune_t;




typedef __darwin_rune_t rune_t;
# 95 "/usr/include/stdlib.h" 3 4
typedef struct {
 int quot;
 int rem;
} div_t;

typedef struct {
 long quot;
 long rem;
} ldiv_t;


typedef struct {
 long long quot;
 long long rem;
} lldiv_t;
# 132 "/usr/include/stdlib.h" 3 4
extern int __mb_cur_max;
# 142 "/usr/include/stdlib.h" 3 4
extern "C" {
void abort(void) __attribute__((__noreturn__));
int abs(int) __attribute__((__const__));
int atexit(void (*)(void));
double atof(const char *);
int atoi(const char *);
long atol(const char *);

long long
  atoll(const char *);

void *bsearch(const void *, const void *, size_t,
     size_t, int (*)(const void *, const void *));
void *calloc(size_t, size_t);
div_t div(int, int) __attribute__((__const__));
void exit(int) __attribute__((__noreturn__));
void free(void *);
char *getenv(const char *);
long labs(long) __attribute__((__const__));
ldiv_t ldiv(long, long) __attribute__((__const__));

long long
  llabs(long long);
lldiv_t lldiv(long long, long long);

void *malloc(size_t);
int mblen(const char *, size_t);
size_t mbstowcs(wchar_t * , const char * , size_t);
int mbtowc(wchar_t * , const char * , size_t);
void qsort(void *, size_t, size_t,
     int (*)(const void *, const void *));
int rand(void);
void *realloc(void *, size_t);
void srand(unsigned);
double strtod(const char *, char **);
float strtof(const char *, char **);
long strtol(const char *, char **, int);
long double
  strtold(const char *, char **) __asm("_" "strtold" "$LDBLStub");

long long
  strtoll(const char *, char **, int);

unsigned long
  strtoul(const char *, char **, int);

unsigned long long
  strtoull(const char *, char **, int);

int system(const char *) __asm("_" "system" "$UNIX2003");
size_t wcstombs(char * , const wchar_t * , size_t);
int wctomb(char *, wchar_t);


void _Exit(int) __attribute__((__noreturn__));
long a64l(const char *);
double drand48(void);
char *ecvt(double, int, int *, int *);
double erand48(unsigned short[3]);
char *fcvt(double, int, int *, int *);
char *gcvt(double, int, char *);
int getsubopt(char **, char * const *, char **);
int grantpt(int);

char *initstate(unsigned, char *, size_t);



long jrand48(unsigned short[3]);
char *l64a(long);
void lcong48(unsigned short[7]);
long lrand48(void);
char *mktemp(char *);
int mkstemp(char *);
long mrand48(void);
long nrand48(unsigned short[3]);
int posix_openpt(int);
char *ptsname(int);
int putenv(char *) __asm("_" "putenv" "$UNIX2003");
long random(void);
int rand_r(unsigned *);

char *realpath(const char * , char * ) __asm("_" "realpath" "$DARWIN_EXTSN");



unsigned short
 *seed48(unsigned short[3]);
int setenv(const char *, const char *, int) __asm("_" "setenv" "$UNIX2003");

void setkey(const char *) __asm("_" "setkey" "$UNIX2003");



char *setstate(const char *);
void srand48(long);

void srandom(unsigned);



int unlockpt(int);

int unsetenv(const char *) __asm("_" "unsetenv" "$UNIX2003");
# 264 "/usr/include/stdlib.h" 3 4
u_int32_t
  arc4random(void);
void arc4random_addrandom(unsigned char *dat, int datlen);
void arc4random_stir(void);


char *cgetcap(char *, const char *, int);
int cgetclose(void);
int cgetent(char **, char **, const char *);
int cgetfirst(char **, char **);
int cgetmatch(const char *, const char *);
int cgetnext(char **, char **);
int cgetnum(char *, const char *, long *);
int cgetset(const char *);
int cgetstr(char *, const char *, char **);
int cgetustr(char *, const char *, char **);

int daemon(int, int);
char *devname(dev_t, mode_t);
char *devname_r(dev_t, mode_t, char *buf, int len);
char *getbsize(int *, long *);
int getloadavg(double [], int);
const char
 *getprogname(void);

int heapsort(void *, size_t, size_t,
     int (*)(const void *, const void *));
int mergesort(void *, size_t, size_t,
     int (*)(const void *, const void *));
void qsort_r(void *, size_t, size_t, void *,
     int (*)(void *, const void *, const void *));
int radixsort(const unsigned char **, int, const unsigned char *,
     unsigned);
void setprogname(const char *);
int sradixsort(const unsigned char **, int, const unsigned char *,
     unsigned);
void sranddev(void);
void srandomdev(void);
void *reallocf(void *, size_t);

long long
  strtoq(const char *, char **, int);
unsigned long long
  strtouq(const char *, char **, int);

extern char *suboptarg;
void *valloc(size_t);






}
# 45 "/usr/include/assert.h" 2 3 4
# 75 "/usr/include/assert.h" 3 4
extern "C" {
void __assert_rtn(const char *, const char *, int, const char *) __attribute__((__noreturn__));
void __eprintf(const char *, const char *, unsigned, const char *) __attribute__((__noreturn__));
}
# 14 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/ctype.h" 1 3 4
# 69 "/usr/include/ctype.h" 3 4
# 1 "/usr/include/runetype.h" 1 3 4
# 70 "/usr/include/runetype.h" 3 4
typedef __darwin_wint_t wint_t;
# 81 "/usr/include/runetype.h" 3 4
typedef struct {
 __darwin_rune_t __min;
 __darwin_rune_t __max;
 __darwin_rune_t __map;
 __uint32_t *__types;
} _RuneEntry;

typedef struct {
 int __nranges;
 _RuneEntry *__ranges;
} _RuneRange;

typedef struct {
 char __name[14];
 __uint32_t __mask;
} _RuneCharClass;

typedef struct {
 char __magic[8];
 char __encoding[32];

 __darwin_rune_t (*__sgetrune)(const char *, __darwin_size_t, char const **);
 int (*__sputrune)(__darwin_rune_t, char *, __darwin_size_t, char **);
 __darwin_rune_t __invalid_rune;

 __uint32_t __runetype[(1 <<8 )];
 __darwin_rune_t __maplower[(1 <<8 )];
 __darwin_rune_t __mapupper[(1 <<8 )];






 _RuneRange __runetype_ext;
 _RuneRange __maplower_ext;
 _RuneRange __mapupper_ext;

 void *__variable;
 int __variable_len;




 int __ncharclasses;
 _RuneCharClass *__charclasses;
} _RuneLocale;



extern "C" {
extern _RuneLocale _DefaultRuneLocale;
extern _RuneLocale *_CurrentRuneLocale;
}
# 70 "/usr/include/ctype.h" 2 3 4
# 145 "/usr/include/ctype.h" 3 4
extern "C" {
unsigned long ___runetype(__darwin_ct_rune_t);
__darwin_ct_rune_t ___tolower(__darwin_ct_rune_t);
__darwin_ct_rune_t ___toupper(__darwin_ct_rune_t);
}

static inline int
isascii(int _c)
{
 return ((_c & ~0x7F) == 0);
}
# 164 "/usr/include/ctype.h" 3 4
extern "C" {
int __maskrune(__darwin_ct_rune_t, unsigned long);
}


static inline int
__istype(__darwin_ct_rune_t _c, unsigned long _f)
{



 return (isascii(_c) ? !!(_DefaultRuneLocale.__runetype[_c] & _f)
  : !!__maskrune(_c, _f));

}

static inline __darwin_ct_rune_t
__isctype(__darwin_ct_rune_t _c, unsigned long _f)
{



 return (_c < 0 || _c >= (1 <<8 )) ? 0 :
  !!(_DefaultRuneLocale.__runetype[_c] & _f);

}
# 204 "/usr/include/ctype.h" 3 4
extern "C" {
__darwin_ct_rune_t __toupper(__darwin_ct_rune_t);
__darwin_ct_rune_t __tolower(__darwin_ct_rune_t);
}


static inline int
__wcwidth(__darwin_ct_rune_t _c)
{
 unsigned int _x;

 if (_c == 0)
  return (0);
 _x = (unsigned int)__maskrune(_c, 0xe0000000L|0x00040000L);
 if ((_x & 0xe0000000L) != 0)
  return ((_x & 0xe0000000L) >> 30);
 return ((_x & 0x00040000L) != 0 ? 1 : -1);
}






static inline int
isalnum(int _c)
{
 return (__istype(_c, 0x00000100L|0x00000400L));
}

static inline int
isalpha(int _c)
{
 return (__istype(_c, 0x00000100L));
}

static inline int
isblank(int _c)
{
 return (__istype(_c, 0x00020000L));
}

static inline int
iscntrl(int _c)
{
 return (__istype(_c, 0x00000200L));
}


static inline int
isdigit(int _c)
{
 return (__isctype(_c, 0x00000400L));
}

static inline int
isgraph(int _c)
{
 return (__istype(_c, 0x00000800L));
}

static inline int
islower(int _c)
{
 return (__istype(_c, 0x00001000L));
}

static inline int
isprint(int _c)
{
 return (__istype(_c, 0x00040000L));
}

static inline int
ispunct(int _c)
{
 return (__istype(_c, 0x00002000L));
}

static inline int
isspace(int _c)
{
 return (__istype(_c, 0x00004000L));
}

static inline int
isupper(int _c)
{
 return (__istype(_c, 0x00008000L));
}


static inline int
isxdigit(int _c)
{
 return (__isctype(_c, 0x00010000L));
}

static inline int
toascii(int _c)
{
 return (_c & 0x7F);
}

static inline int
tolower(int _c)
{
        return (__tolower(_c));
}

static inline int
toupper(int _c)
{
        return (__toupper(_c));
}


static inline int
digittoint(int _c)
{
 return (__maskrune(_c, 0x0F));
}

static inline int
ishexnumber(int _c)
{
 return (__istype(_c, 0x00010000L));
}

static inline int
isideogram(int _c)
{
 return (__istype(_c, 0x00080000L));
}

static inline int
isnumber(int _c)
{
 return (__istype(_c, 0x00000400L));
}

static inline int
isphonogram(int _c)
{
 return (__istype(_c, 0x00200000L));
}

static inline int
isrune(int _c)
{
 return (__istype(_c, 0xFFFFFFF0L));
}

static inline int
isspecial(int _c)
{
 return (__istype(_c, 0x00100000L));
}
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/errno.h" 1 3 4
# 23 "/usr/include/errno.h" 3 4
# 1 "/usr/include/sys/errno.h" 1 3 4
# 69 "/usr/include/sys/errno.h" 3 4
extern "C" {
extern int * __error(void);

}
# 24 "/usr/include/errno.h" 2 3 4
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/float.h" 1 3 4
# 17 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 1 3 4
# 11 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 3 4
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/syslimits.h" 1 3 4






# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 1 3 4
# 122 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 3 4
# 1 "/usr/include/limits.h" 1 3 4
# 64 "/usr/include/limits.h" 3 4
# 1 "/usr/include/machine/limits.h" 1 3 4





# 1 "/usr/include/ppc/limits.h" 1 3 4
# 40 "/usr/include/ppc/limits.h" 3 4
# 1 "/usr/include/ppc/_limits.h" 1 3 4
# 41 "/usr/include/ppc/limits.h" 2 3 4
# 7 "/usr/include/machine/limits.h" 2 3 4
# 65 "/usr/include/limits.h" 2 3 4
# 1 "/usr/include/sys/syslimits.h" 1 3 4
# 66 "/usr/include/limits.h" 2 3 4
# 123 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 2 3 4
# 8 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/syslimits.h" 2 3 4
# 12 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 2 3 4
# 18 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/locale.h" 1 3 4
# 40 "/usr/include/locale.h" 3 4
# 1 "/usr/include/_locale.h" 1 3 4
# 43 "/usr/include/_locale.h" 3 4
struct lconv {
 char *decimal_point;
 char *thousands_sep;
 char *grouping;
 char *int_curr_symbol;
 char *currency_symbol;
 char *mon_decimal_point;
 char *mon_thousands_sep;
 char *mon_grouping;
 char *positive_sign;
 char *negative_sign;
 char int_frac_digits;
 char frac_digits;
 char p_cs_precedes;
 char p_sep_by_space;
 char n_cs_precedes;
 char n_sep_by_space;
 char p_sign_posn;
 char n_sign_posn;
 char int_p_cs_precedes;
 char int_n_cs_precedes;
 char int_p_sep_by_space;
 char int_n_sep_by_space;
 char int_p_sign_posn;
 char int_n_sign_posn;
};





extern "C" {
struct lconv *localeconv(void);
}
# 41 "/usr/include/locale.h" 2 3 4
# 52 "/usr/include/locale.h" 3 4
extern "C" {
char *setlocale(int, const char *);
}
# 19 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/math.h" 1 3 4
# 26 "/usr/include/math.h" 3 4
# 1 "/usr/include/architecture/ppc/math.h" 1 3 4
# 52 "/usr/include/architecture/ppc/math.h" 3 4
extern "C" {
# 65 "/usr/include/architecture/ppc/math.h" 3 4
 typedef float float_t;
 typedef double double_t;
# 98 "/usr/include/architecture/ppc/math.h" 3 4
enum {
 _FP_NAN = 1,
 _FP_INFINITE = 2,
 _FP_ZERO = 3,
 _FP_NORMAL = 4,
 _FP_SUBNORMAL = 5,
 _FP_SUPERNORMAL = 6
};
# 128 "/usr/include/architecture/ppc/math.h" 3 4
extern unsigned int __math_errhandling ( void );
# 149 "/usr/include/architecture/ppc/math.h" 3 4
 extern int __fpclassifyf(float );
 extern int __fpclassifyd(double );
 extern int __fpclassify (long double);
# 179 "/usr/include/architecture/ppc/math.h" 3 4
  static __inline__ int __inline_isfinitef (float ) __attribute__ ((always_inline));
  static __inline__ int __inline_isfinited (double ) __attribute__ ((always_inline));
  static __inline__ int __inline_isfinite (long double) __attribute__ ((always_inline));
  static __inline__ int __inline_isinff (float ) __attribute__ ((always_inline));
  static __inline__ int __inline_isinfd (double ) __attribute__ ((always_inline));
  static __inline__ int __inline_isinf (long double) __attribute__ ((always_inline));
  static __inline__ int __inline_isnanf (float ) __attribute__ ((always_inline));
  static __inline__ int __inline_isnand (double ) __attribute__ ((always_inline));
  static __inline__ int __inline_isnan (long double) __attribute__ ((always_inline));
  static __inline__ int __inline_isnormalf (float ) __attribute__ ((always_inline));
  static __inline__ int __inline_isnormald (double ) __attribute__ ((always_inline));
  static __inline__ int __inline_isnormal (long double) __attribute__ ((always_inline));
  static __inline__ int __inline_signbitf (float ) __attribute__ ((always_inline));
  static __inline__ int __inline_signbitd (double ) __attribute__ ((always_inline));
  static __inline__ int __inline_signbit (long double) __attribute__ ((always_inline));

  static __inline__ int __inline_isinff( float __x ) { return __builtin_fabsf(__x) == __builtin_inff(); }
  static __inline__ int __inline_isinfd( double __x ) { return __builtin_fabs(__x) == __builtin_inf(); }
  static __inline__ int __inline_isinf( long double __x ) { return __builtin_fabsl(__x) == __builtin_infl(); }
  static __inline__ int __inline_isfinitef( float __x ) { return __x == __x && __builtin_fabsf(__x) != __builtin_inff(); }
  static __inline__ int __inline_isfinited( double __x ) { return __x == __x && __builtin_fabs(__x) != __builtin_inf(); }
  static __inline__ int __inline_isfinite( long double __x ) { return __x == __x && __builtin_fabsl(__x) != __builtin_infl(); }
  static __inline__ int __inline_isnanf( float __x ) { return __x != __x; }
  static __inline__ int __inline_isnand( double __x ) { return __x != __x; }
  static __inline__ int __inline_isnan( long double __x ) { return __x != __x; }
  static __inline__ int __inline_signbitf( float __x ) { union{ float __f; unsigned int __u; }__u = {__x}; return (int)(__u.__u >> 31); }
  static __inline__ int __inline_signbitd( double __x ) { union{ double __f; unsigned long long __u; }__u = {__x}; return (int)(__u.__u >> 63); }
  static __inline__ int __inline_signbit( long double __x ){ union{ long double __ld; long long __p[2]; }__u = {__x}; return (int) ((unsigned long long) __u.__p[0] >> 63); }
  static __inline__ int __inline_isnormalf( float __x ) { float fabsf = __builtin_fabsf(__x); if( __x != __x ) return 0; return fabsf < __builtin_inff() && fabsf >= 1.17549435e-38F; }
  static __inline__ int __inline_isnormald( double __x ) { double fabsf = __builtin_fabs(__x); if( __x != __x ) return 0; return fabsf < __builtin_inf() && fabsf >= 2.2250738585072014e-308; }
  static __inline__ int __inline_isnormal( long double __x ) { long double fabsf = __builtin_fabsl(__x); if( __x != __x ) return 0; return fabsf < __builtin_infl() && fabsf >= 2.00416836000897277799610805135016e-292L; }
# 360 "/usr/include/architecture/ppc/math.h" 3 4
extern double acos( double );
extern float acosf( float );

extern double asin( double );
extern float asinf( float );

extern double atan( double );
extern float atanf( float );

extern double atan2( double, double );
extern float atan2f( float, float );

extern double cos( double );
extern float cosf( float );

extern double sin( double );
extern float sinf( float );

extern double tan( double );
extern float tanf( float );

extern double acosh( double );
extern float acoshf( float );

extern double asinh( double );
extern float asinhf( float );

extern double atanh( double );
extern float atanhf( float );

extern double cosh( double );
extern float coshf( float );

extern double sinh( double );
extern float sinhf( float );

extern double tanh( double );
extern float tanhf( float );

extern double exp( double );
extern float expf( float );

extern double exp2( double );
extern float exp2f( float );

extern double expm1( double );
extern float expm1f( float );

extern double log( double );
extern float logf( float );

extern double log10( double );
extern float log10f( float );

extern double log2( double );
extern float log2f( float );

extern double log1p( double );
extern float log1pf( float );

extern double logb( double );
extern float logbf( float );

extern double modf( double, double * );
extern float modff( float, float * );

extern double ldexp( double, int );
extern float ldexpf( float, int );

extern double frexp( double, int * );
extern float frexpf( float, int * );

extern int ilogb( double );
extern int ilogbf( float );

extern double scalbn( double, int );
extern float scalbnf( float, int );

extern double scalbln( double, long int );
extern float scalblnf( float, long int );

extern double fabs( double );
extern float fabsf( float );

extern double cbrt( double );
extern float cbrtf( float );

extern double hypot( double, double );
extern float hypotf( float, float );

extern double pow( double, double );
extern float powf( float, float );

extern double sqrt( double );
extern float sqrtf( float );

extern double erf( double );
extern float erff( float );

extern double erfc( double );
extern float erfcf( float );

extern double lgamma( double );
extern float lgammaf( float );

extern double tgamma( double );
extern float tgammaf( float );

extern double ceil( double );
extern float ceilf( float );

extern double floor( double );
extern float floorf( float );

extern double nearbyint( double );
extern float nearbyintf( float );

extern double rint( double );
extern float rintf( float );

extern long int lrint( double );
extern long int lrintf( float );

extern long long int llrint( double );
extern long long int llrintf( float );

extern double round( double );
extern float roundf( float );

extern long int lround( double );
extern long int lroundf( float );

extern long long int llround( double );
extern long long int llroundf( float );

extern double trunc( double );
extern float truncf( float );

extern double fmod( double, double );
extern float fmodf( float, float );

extern double remainder( double, double );
extern float remainderf( float, float );

extern double remquo( double, double, int * );
extern float remquof( float, float, int * );

extern double copysign( double, double );
extern float copysignf( float, float );

extern double nan( const char * );
extern float nanf( const char * );

extern double nextafter( double, double );
extern float nextafterf( float, float );


extern double fdim( double, double );
extern float fdimf( float, float );

extern double fmax( double, double );
extern float fmaxf( float, float );

extern double fmin( double, double );
extern float fminf( float, float );

extern double fma( double, double, double );
extern float fmaf( float, float, float );


extern long double acosl( long double ) __asm("_" "acosl" "$LDBL128");
extern long double asinl( long double ) __asm("_" "asinl" "$LDBL128");
extern long double atanl( long double ) __asm("_" "atanl" "$LDBL128");
extern long double atan2l( long double, long double ) __asm("_" "atan2l" "$LDBL128");
extern long double cosl( long double ) __asm("_" "cosl" "$LDBL128");
extern long double sinl( long double ) __asm("_" "sinl" "$LDBL128");
extern long double tanl( long double ) __asm("_" "tanl" "$LDBL128");
extern long double acoshl( long double ) __asm("_" "acoshl" "$LDBL128");
extern long double asinhl( long double ) __asm("_" "asinhl" "$LDBL128");
extern long double atanhl( long double ) __asm("_" "atanhl" "$LDBL128");
extern long double coshl( long double ) __asm("_" "coshl" "$LDBL128");
extern long double sinhl( long double ) __asm("_" "sinhl" "$LDBL128");
extern long double tanhl( long double ) __asm("_" "tanhl" "$LDBL128");
extern long double expl( long double ) __asm("_" "expl" "$LDBL128");
extern long double exp2l( long double ) __asm("_" "exp2l" "$LDBL128");
extern long double expm1l( long double ) __asm("_" "expm1l" "$LDBL128");
extern long double logl( long double ) __asm("_" "logl" "$LDBL128");
extern long double log10l( long double ) __asm("_" "log10l" "$LDBL128");
extern long double log2l( long double ) __asm("_" "log2l" "$LDBL128");
extern long double log1pl( long double ) __asm("_" "log1pl" "$LDBL128");
extern long double logbl( long double ) __asm("_" "logbl" "$LDBL128");
extern long double modfl( long double, long double * ) __asm("_" "modfl" "$LDBL128");
extern long double ldexpl( long double, int ) __asm("_" "ldexpl" "$LDBL128");
extern long double frexpl( long double, int * ) __asm("_" "frexpl" "$LDBL128");
extern int ilogbl( long double ) __asm("_" "ilogbl" "$LDBL128");
extern long double scalbnl( long double, int ) __asm("_" "scalbnl" "$LDBL128");
extern long double scalblnl( long double, long int ) __asm("_" "scalblnl" "$LDBL128");
extern long double fabsl( long double ) __asm("_" "fabsl" "$LDBL128");
extern long double cbrtl( long double ) __asm("_" "cbrtl" "$LDBL128");
extern long double hypotl( long double, long double ) __asm("_" "hypotl" "$LDBL128");
extern long double powl( long double, long double ) __asm("_" "powl" "$LDBL128");
extern long double sqrtl( long double ) __asm("_" "sqrtl" "$LDBL128");
extern long double erfl( long double ) __asm("_" "erfl" "$LDBL128");
extern long double erfcl( long double ) __asm("_" "erfcl" "$LDBL128");
extern long double lgammal( long double ) __asm("_" "lgammal" "$LDBL128");
extern long double tgammal( long double ) __asm("_" "tgammal" "$LDBL128");
extern long double ceill( long double ) __asm("_" "ceill" "$LDBL128");
extern long double floorl( long double ) __asm("_" "floorl" "$LDBL128");
extern long double nearbyintl( long double ) __asm("_" "nearbyintl" "$LDBL128");
extern long double rintl( long double ) __asm("_" "rintl" "$LDBL128");
extern long int lrintl( long double ) __asm("_" "lrintl" "$LDBL128");
extern long long int llrintl( long double ) __asm("_" "llrintl" "$LDBL128");
extern long double roundl( long double ) __asm("_" "roundl" "$LDBL128");
extern long int lroundl( long double ) __asm("_" "lroundl" "$LDBL128");
extern long long int llroundl( long double ) __asm("_" "llroundl" "$LDBL128");
extern long double truncl( long double ) __asm("_" "truncl" "$LDBL128");
extern long double fmodl( long double, long double) __asm("_" "fmodl" "$LDBL128");
extern long double remainderl( long double, long double ) __asm("_" "remainderl" "$LDBL128");
extern long double remquol( long double, long double, int * ) __asm("_" "remquol" "$LDBL128");
extern long double copysignl( long double, long double ) __asm("_" "copysignl" "$LDBL128");
extern long double nanl( const char * ) __asm("_" "nanl" "$LDBL128");
extern long double nextafterl( long double, long double ) __asm("_" "nextafterl" "$LDBL128");
extern double nexttoward( double, long double ) __asm("_" "nexttoward" "$LDBL128");
extern float nexttowardf( float, long double ) __asm("_" "nexttowardf" "$LDBL128");
extern long double nexttowardl( long double, long double ) __asm("_" "nexttowardl" "$LDBL128");
extern long double fdiml( long double, long double ) __asm("_" "fdiml" "$LDBL128");
extern long double fmaxl( long double, long double ) __asm("_" "fmaxl" "$LDBL128");
extern long double fminl( long double, long double ) __asm("_" "fminl" "$LDBL128");
extern long double fmal( long double, long double, long double ) __asm("_" "fmal" "$LDBL128");
# 598 "/usr/include/architecture/ppc/math.h" 3 4
extern double __inf( void );
extern float __inff( void );
extern float __nan( void );


extern double j0 ( double );
extern double j1 ( double );
extern double jn ( int, double );

extern double y0 ( double );
extern double y1 ( double );
extern double yn ( int, double );
# 647 "/usr/include/architecture/ppc/math.h" 3 4
 extern double scalb ( double, double ) __asm("_scalb$UNIX2003" );
# 667 "/usr/include/architecture/ppc/math.h" 3 4
extern int signgam;
# 680 "/usr/include/architecture/ppc/math.h" 3 4
extern long int rinttol ( double );

extern long int roundtol ( double );

typedef struct __complex_s {
        double Real;
        double Imag;
} __complex_t;







enum fdversion {_fdlibm_ieee = -1, _fdlibm_svid, _fdlibm_xopen, _fdlibm_posix};
# 711 "/usr/include/architecture/ppc/math.h" 3 4
extern enum fdversion _fdlib_version;
# 748 "/usr/include/architecture/ppc/math.h" 3 4
extern int finite ( double );

extern double gamma ( double );
# 761 "/usr/include/architecture/ppc/math.h" 3 4
extern double significand ( double );




extern double drem ( double, double );
# 859 "/usr/include/architecture/ppc/math.h" 3 4
}
# 27 "/usr/include/math.h" 2 3 4
# 20 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/setjmp.h" 1 3 4
# 26 "/usr/include/setjmp.h" 3 4
# 1 "/usr/include/machine/setjmp.h" 1 3 4
# 30 "/usr/include/machine/setjmp.h" 3 4
# 1 "/usr/include/ppc/setjmp.h" 1 3 4
# 39 "/usr/include/ppc/setjmp.h" 3 4
# 1 "/usr/include/ppc/_structs.h" 1 3 4
# 40 "/usr/include/ppc/setjmp.h" 2 3 4

struct _jmp_buf {

 struct __darwin_sigcontext __sigcontext;
 unsigned int __vmask __attribute__((aligned(8)));
 unsigned int __vreg[32 * 4] __attribute__((aligned(16)));







};
# 96 "/usr/include/ppc/setjmp.h" 3 4
typedef int jmp_buf[(26 + 18*2 + 129 + 1)];
typedef int sigjmp_buf[(26 + 18*2 + 129 + 1) + 1];


extern "C" {
int setjmp(jmp_buf);
void longjmp(jmp_buf, int);


int _setjmp(jmp_buf);
void _longjmp(jmp_buf, int);
int sigsetjmp(sigjmp_buf, int);
void siglongjmp(sigjmp_buf, int);



void longjmperror(void);

}
# 31 "/usr/include/machine/setjmp.h" 2 3 4
# 27 "/usr/include/setjmp.h" 2 3 4
# 21 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/signal.h" 1 3 4
# 71 "/usr/include/signal.h" 3 4
extern const char *const sys_signame[32];
extern const char *const sys_siglist[32];


extern "C" {
int raise(int);
}


extern "C" {
void (*bsd_signal(int, void (*)(int)))(int);
int kill(pid_t, int) __asm("_" "kill" "$UNIX2003");
int killpg(pid_t, int) __asm("_" "killpg" "$UNIX2003");
int pthread_kill(pthread_t, int);
int pthread_sigmask(int, const sigset_t *, sigset_t *) __asm("_" "pthread_sigmask" "$UNIX2003");
int sigaction(int, const struct sigaction * ,
     struct sigaction * );
int sigaddset(sigset_t *, int);
int sigaltstack(const stack_t * , stack_t * ) __asm("_" "sigaltstack" "$UNIX2003");
int sigdelset(sigset_t *, int);
int sigemptyset(sigset_t *);
int sigfillset(sigset_t *);
int sighold(int);
int sigignore(int);
int siginterrupt(int, int);
int sigismember(const sigset_t *, int);
int sigpause(int) __asm("_" "sigpause" "$UNIX2003");
int sigpending(sigset_t *);
int sigprocmask(int, const sigset_t * , sigset_t * );
int sigrelse(int);
void (*sigset(int, void (*)(int)))(int);
int sigsuspend(const sigset_t *) __asm("_" "sigsuspend" "$UNIX2003");
int sigwait(const sigset_t * , int * ) __asm("_" "sigwait" "$UNIX2003");

void psignal(unsigned int, const char *);
int sigblock(int);
int sigsetmask(int);
int sigvec(int, struct sigvec *, struct sigvec *);

}
# 22 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stddef.h" 1 3 4
# 152 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stddef.h" 3 4
typedef int ptrdiff_t;
# 23 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/stdio.h" 1 3 4
# 87 "/usr/include/stdio.h" 3 4
typedef __darwin_off_t fpos_t;
# 98 "/usr/include/stdio.h" 3 4
struct __sbuf {
 unsigned char *_base;
 int _size;
};


struct __sFILEX;
# 132 "/usr/include/stdio.h" 3 4
typedef struct __sFILE {
 unsigned char *_p;
 int _r;
 int _w;
 short _flags;
 short _file;
 struct __sbuf _bf;
 int _lbfsize;


 void *_cookie;
 int (*_close)(void *);
 int (*_read) (void *, char *, int);
 fpos_t (*_seek) (void *, fpos_t, int);
 int (*_write)(void *, const char *, int);


 struct __sbuf _ub;
 struct __sFILEX *_extra;
 int _ur;


 unsigned char _ubuf[3];
 unsigned char _nbuf[1];


 struct __sbuf _lb;


 int _blksize;
 fpos_t _offset;
} FILE;

extern "C" {

extern FILE *__stdinp;
extern FILE *__stdoutp;
extern FILE *__stderrp;



}
# 248 "/usr/include/stdio.h" 3 4
extern "C" {
void clearerr(FILE *);
int fclose(FILE *);
int feof(FILE *);
int ferror(FILE *);
int fflush(FILE *);
int fgetc(FILE *);
int fgetpos(FILE * , fpos_t *);
char *fgets(char * , int, FILE *);
FILE *fopen(const char * , const char * );
int fprintf(FILE * , const char * , ...) __asm("_" "fprintf" "$LDBLStub");
int fputc(int, FILE *);
int fputs(const char * , FILE * ) __asm("_" "fputs" "$UNIX2003");
size_t fread(void * , size_t, size_t, FILE * );
FILE *freopen(const char * , const char * ,
     FILE * ) __asm("_" "freopen" "$UNIX2003");
int fscanf(FILE * , const char * , ...) __asm("_" "fscanf" "$LDBLStub");
int fseek(FILE *, long, int);
int fsetpos(FILE *, const fpos_t *);
long ftell(FILE *);
size_t fwrite(const void * , size_t, size_t, FILE * ) __asm("_" "fwrite" "$UNIX2003");
int getc(FILE *);
int getchar(void);
char *gets(char *);

extern const int sys_nerr;
extern const char *const sys_errlist[];

void perror(const char *);
int printf(const char * , ...) __asm("_" "printf" "$LDBLStub");
int putc(int, FILE *);
int putchar(int);
int puts(const char *);
int remove(const char *);
int rename (const char *, const char *);
void rewind(FILE *);
int scanf(const char * , ...) __asm("_" "scanf" "$LDBLStub");
void setbuf(FILE * , char * );
int setvbuf(FILE * , char * , int, size_t);
int sprintf(char * , const char * , ...) __asm("_" "sprintf" "$LDBLStub");
int sscanf(const char * , const char * , ...) __asm("_" "sscanf" "$LDBLStub");
FILE *tmpfile(void);
char *tmpnam(char *);
int ungetc(int, FILE *);
int vfprintf(FILE * , const char * , va_list) __asm("_" "vfprintf" "$LDBLStub");
int vprintf(const char * , va_list) __asm("_" "vprintf" "$LDBLStub");
int vsprintf(char * , const char * , va_list) __asm("_" "vsprintf" "$LDBLStub");

int asprintf(char **, const char *, ...) __asm("_" "asprintf" "$LDBLStub");
int vasprintf(char **, const char *, va_list) __asm("_" "vasprintf" "$LDBLStub");

}







extern "C" {
char *ctermid(char *);

char *ctermid_r(char *);

FILE *fdopen(int, const char *);

char *fgetln(FILE *, size_t *);

int fileno(FILE *);
void flockfile(FILE *);

const char
 *fmtcheck(const char *, const char *);
int fpurge(FILE *);

int fseeko(FILE *, off_t, int);
off_t ftello(FILE *);
int ftrylockfile(FILE *);
void funlockfile(FILE *);
int getc_unlocked(FILE *);
int getchar_unlocked(void);

int getw(FILE *);

int pclose(FILE *);
FILE *popen(const char *, const char *);
int putc_unlocked(int, FILE *);
int putchar_unlocked(int);

int putw(int, FILE *);
void setbuffer(FILE *, char *, int);
int setlinebuf(FILE *);

int snprintf(char * , size_t, const char * , ...) __asm("_" "snprintf" "$LDBLStub");
char *tempnam(const char *, const char *) __asm("_" "tempnam" "$UNIX2003");
int vfscanf(FILE * , const char * , va_list) __asm("_" "vfscanf" "$LDBLStub");
int vscanf(const char * , va_list) __asm("_" "vscanf" "$LDBLStub");
int vsnprintf(char * , size_t, const char * , va_list) __asm("_" "vsnprintf" "$LDBLStub");
int vsscanf(const char * , const char * , va_list) __asm("_" "vsscanf" "$LDBLStub");

FILE *zopen(const char *, const char *, int);

}





extern "C" {
FILE *funopen(const void *,
  int (*)(void *, char *, int),
  int (*)(void *, const char *, int),
  fpos_t (*)(void *, fpos_t, int),
  int (*)(void *));
}
# 371 "/usr/include/stdio.h" 3 4
extern "C" {
int __srget(FILE *);
int __svfscanf(FILE *, const char *, va_list) __asm("_" "__svfscanf" "$LDBLStub");
int __swbuf(int, FILE *);
}







static inline int __sputc(int _c, FILE *_p) {
 if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
  return (*_p->_p++ = _c);
 else
  return (__swbuf(_c, _p));
}
# 24 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3

# 1 "/usr/include/string.h" 1 3 4
# 80 "/usr/include/string.h" 3 4
extern "C" {
void *memchr(const void *, int, size_t);
int memcmp(const void *, const void *, size_t);
void *memcpy(void *, const void *, size_t);
void *memmove(void *, const void *, size_t);
void *memset(void *, int, size_t);

char *stpcpy(char *, const char *);
char *strcasestr(const char *, const char *);

char *strcat(char *, const char *);
char *strchr(const char *, int);
int strcmp(const char *, const char *);
int strcoll(const char *, const char *);
char *strcpy(char *, const char *);
size_t strcspn(const char *, const char *);
char *strerror(int) __asm("_" "strerror" "$UNIX2003");
int strerror_r(int, char *, size_t);
size_t strlen(const char *);
char *strncat(char *, const char *, size_t);
int strncmp(const char *, const char *, size_t);
char *strncpy(char *, const char *, size_t);

char *strnstr(const char *, const char *, size_t);

char *strpbrk(const char *, const char *);
char *strrchr(const char *, int);
size_t strspn(const char *, const char *);
char *strstr(const char *, const char *);
char *strtok(char *, const char *);
size_t strxfrm(char *, const char *, size_t);



void *memccpy(void *, const void *, int, size_t);
char *strtok_r(char *, const char *, char **);
char *strdup(const char *);

int bcmp(const void *, const void *, size_t);
void bcopy(const void *, void *, size_t);
void bzero(void *, size_t);
int ffs(int);
int ffsl(long);
int fls(int);
int flsl(long);
char *index(const char *, int);
void memset_pattern4(void *, const void *, size_t);
void memset_pattern8(void *, const void *, size_t);
void memset_pattern16(void *, const void *, size_t);
char *rindex(const char *, int);
int strcasecmp(const char *, const char *);
size_t strlcat(char *, const char *, size_t);
size_t strlcpy(char *, const char *, size_t);
void strmode(int, char *);
int strncasecmp(const char *, const char *, size_t);
char *strsep(char **, const char *);
char *strsignal(int sig);
void swab(const void * , void * , ssize_t);


}
# 26 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/usr/include/time.h" 1 3 4
# 69 "/usr/include/time.h" 3 4
# 1 "/usr/include/_structs.h" 1 3 4
# 24 "/usr/include/_structs.h" 3 4
# 1 "/usr/include/sys/_structs.h" 1 3 4
# 83 "/usr/include/sys/_structs.h" 3 4
struct timespec
{
 __darwin_time_t tv_sec;
 long tv_nsec;
};
# 25 "/usr/include/_structs.h" 2 3 4
# 70 "/usr/include/time.h" 2 3 4
# 90 "/usr/include/time.h" 3 4
struct tm {
 int tm_sec;
 int tm_min;
 int tm_hour;
 int tm_mday;
 int tm_mon;
 int tm_year;
 int tm_wday;
 int tm_yday;
 int tm_isdst;
 long tm_gmtoff;
 char *tm_zone;
};
# 113 "/usr/include/time.h" 3 4
extern char *tzname[];


extern int getdate_err;

extern long timezone __asm("_" "timezone" "$UNIX2003");

extern int daylight;

extern "C" {
char *asctime(const struct tm *);
clock_t clock(void) __asm("_" "clock" "$UNIX2003");
char *ctime(const time_t *);
double difftime(time_t, time_t);
struct tm *getdate(const char *);
struct tm *gmtime(const time_t *);
struct tm *localtime(const time_t *);
time_t mktime(struct tm *) __asm("_" "mktime" "$UNIX2003");
size_t strftime(char * , size_t, const char * , const struct tm * ) __asm("_" "strftime" "$UNIX2003");
char *strptime(const char * , const char * , struct tm * );
time_t time(time_t *);


void tzset(void);



char *asctime_r(const struct tm * , char * );
char *ctime_r(const time_t *, char *);
struct tm *gmtime_r(const time_t * , struct tm * );
struct tm *localtime_r(const time_t * , struct tm * );


time_t posix2time(time_t);



void tzsetwall(void);
time_t time2posix(time_t);
time_t timelocal(struct tm * const);
time_t timegm(struct tm * const);



int nanosleep(const struct timespec *, struct timespec *) __asm("_" "nanosleep" "$UNIX2003");

}
# 27 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 38 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 1 3
# 34 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdint.h" 1 3 4
# 40 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdint.h" 3 4
typedef unsigned char uint8_t;




typedef unsigned short uint16_t;




typedef unsigned int uint32_t;




typedef unsigned long long uint64_t;



typedef int8_t int_least8_t;
typedef int16_t int_least16_t;
typedef int32_t int_least32_t;
typedef int64_t int_least64_t;
typedef uint8_t uint_least8_t;
typedef uint16_t uint_least16_t;
typedef uint32_t uint_least32_t;
typedef uint64_t uint_least64_t;



typedef int8_t int_fast8_t;
typedef int16_t int_fast16_t;
typedef int32_t int_fast32_t;
typedef int64_t int_fast64_t;
typedef uint8_t uint_fast8_t;
typedef uint16_t uint_fast16_t;
typedef uint32_t uint_fast32_t;
typedef uint64_t uint_fast64_t;
# 97 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdint.h" 3 4
typedef long long int intmax_t;
# 106 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdint.h" 3 4
typedef long long unsigned int uintmax_t;
# 35 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 2 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stdbool.h" 1 3 4
# 36 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 2 3






# 1 "/usr/include/AvailabilityMacros.h" 1 3 4
# 43 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ConditionalMacros.h" 1 3
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ConditionalMacros.h" 3
# 1 "/usr/include/TargetConditionals.h" 1 3 4
# 43 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ConditionalMacros.h" 2 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 2 3
# 33 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
extern "C" {


#pragma pack(push, 2)
# 126 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef unsigned char UInt8;
typedef signed char SInt8;
typedef unsigned short UInt16;
typedef signed short SInt16;





typedef unsigned long UInt32;
typedef signed long SInt32;





struct wide {
  SInt32 hi;
  UInt32 lo;
};
typedef struct wide wide;
struct UnsignedWide {
  UInt32 hi;
  UInt32 lo;
};
typedef struct UnsignedWide UnsignedWide;
# 184 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
      typedef signed long long SInt64;
        typedef unsigned long long UInt64;
# 204 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef SInt32 Fixed;
typedef Fixed * FixedPtr;
typedef SInt32 Fract;
typedef Fract * FractPtr;
typedef UInt32 UnsignedFixed;
typedef UnsignedFixed * UnsignedFixedPtr;
typedef short ShortFixed;
typedef ShortFixed * ShortFixedPtr;
# 231 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef float Float32;
typedef double Float64;
struct Float80 {
    SInt16 exp;
    UInt16 man[4];
};
typedef struct Float80 Float80;

struct Float96 {
    SInt16 exp[2];
    UInt16 man[4];
};
typedef struct Float96 Float96;
struct Float32Point {
    Float32 x;
    Float32 y;
};
typedef struct Float32Point Float32Point;
# 259 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef char * Ptr;
typedef Ptr * Handle;
typedef long Size;
# 289 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef SInt16 OSErr;
typedef SInt32 OSStatus;
typedef void * LogicalAddress;
typedef const void * ConstLogicalAddress;
typedef void * PhysicalAddress;
typedef UInt8 * BytePtr;
typedef unsigned long ByteCount;
typedef unsigned long ByteOffset;
typedef SInt32 Duration;
typedef UnsignedWide AbsoluteTime;
typedef UInt32 OptionBits;
typedef unsigned long ItemCount;
typedef UInt32 PBVersion;
typedef SInt16 ScriptCode;
typedef SInt16 LangCode;
typedef SInt16 RegionCode;
typedef UInt32 FourCharCode;
typedef FourCharCode OSType;
typedef FourCharCode ResType;
typedef OSType * OSTypePtr;
typedef ResType * ResTypePtr;
# 320 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef unsigned char Boolean;
# 333 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef long ( * ProcPtr)();
typedef void ( * Register68kProcPtr)();




typedef ProcPtr UniversalProcPtr;


typedef ProcPtr * ProcHandle;
typedef UniversalProcPtr * UniversalProcHandle;
# 358 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef void * PRefCon;




typedef UInt32 URefCon;
typedef SInt32 SRefCon;
# 388 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
enum {
  noErr = 0
};

enum {
  kNilOptions = 0
};


enum {
  kVariableLengthArray = 1
};

enum {
  kUnknownType = 0x3F3F3F3F
};
# 457 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef UInt32 UnicodeScalarValue;
typedef UInt32 UTF32Char;
typedef UInt16 UniChar;
typedef UInt16 UTF16Char;
typedef UInt8 UTF8Char;
typedef UniChar * UniCharPtr;
typedef unsigned long UniCharCount;
typedef UniCharCount * UniCharCountPtr;
typedef unsigned char Str255[256];
typedef unsigned char Str63[64];
typedef unsigned char Str32[33];
typedef unsigned char Str31[32];
typedef unsigned char Str27[28];
typedef unsigned char Str15[16];
# 479 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef unsigned char Str32Field[34];
# 489 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef Str63 StrFileName;
typedef unsigned char * StringPtr;
typedef StringPtr * StringHandle;
typedef const unsigned char * ConstStringPtr;
typedef const unsigned char * ConstStr255Param;
typedef const unsigned char * ConstStr63Param;
typedef const unsigned char * ConstStr32Param;
typedef const unsigned char * ConstStr31Param;
typedef const unsigned char * ConstStr27Param;
typedef const unsigned char * ConstStr15Param;
typedef ConstStr63Param ConstStrFileNameParam;

inline unsigned char StrLength(ConstStr255Param string) { return (*string); }
# 516 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
struct ProcessSerialNumber {
  UInt32 highLongOfPSN;
  UInt32 lowLongOfPSN;
};
typedef struct ProcessSerialNumber ProcessSerialNumber;
typedef ProcessSerialNumber * ProcessSerialNumberPtr;
# 538 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
struct Point {
  short v;
  short h;
};
typedef struct Point Point;
typedef Point * PointPtr;
struct Rect {
  short top;
  short left;
  short bottom;
  short right;
};
typedef struct Rect Rect;
typedef Rect * RectPtr;
struct FixedPoint {
  Fixed x;
  Fixed y;
};
typedef struct FixedPoint FixedPoint;
struct FixedRect {
  Fixed left;
  Fixed top;
  Fixed right;
  Fixed bottom;
};
typedef struct FixedRect FixedRect;

typedef short CharParameter;
enum {
  normal = 0,
  bold = 1,
  italic = 2,
  underline = 4,
  outline = 8,
  shadow = 0x10,
  condense = 0x20,
  extend = 0x40
};

typedef unsigned char Style;
typedef short StyleParameter;
typedef Style StyleField;
# 594 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
typedef SInt32 TimeValue;
typedef SInt32 TimeScale;
typedef wide CompTimeValue;
typedef SInt64 TimeValue64;
typedef struct TimeBaseRecord* TimeBase;
struct TimeRecord {
  CompTimeValue value;
  TimeScale scale;
  TimeBase base;
};
typedef struct TimeRecord TimeRecord;
# 637 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
struct NumVersion {

  UInt8 majorRev;
  UInt8 minorAndBugRev;
  UInt8 stage;
  UInt8 nonRelRev;
};
typedef struct NumVersion NumVersion;
# 656 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
enum {

  developStage = 0x20,
  alphaStage = 0x40,
  betaStage = 0x60,
  finalStage = 0x80
};

union NumVersionVariant {

  NumVersion parts;
  UInt32 whole;
};
typedef union NumVersionVariant NumVersionVariant;
typedef NumVersionVariant * NumVersionVariantPtr;
typedef NumVersionVariantPtr * NumVersionVariantHandle;
struct VersRec {

  NumVersion numericVersion;
  short countryCode;
  Str255 shortVersion;
  Str255 reserved;
};
typedef struct VersRec VersRec;
typedef VersRec * VersRecPtr;
typedef VersRecPtr * VersRecHndl;





typedef UInt8 Byte;
typedef SInt8 SignedByte;
typedef wide * WidePtr;
typedef UnsignedWide * UnsignedWidePtr;
typedef Float80 extended80;
typedef Float96 extended96;
typedef SInt8 VHSelect;
# 707 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
extern void
Debugger(void) ;
# 719 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
extern void
DebugStr(ConstStr255Param debuggerMsg) ;
# 766 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
extern void
SysBreak(void) ;
# 778 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
extern void
SysBreakStr(ConstStr255Param debuggerMsg) ;
# 790 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
extern void
SysBreakFunc(ConstStr255Param debuggerMsg) ;
# 801 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h" 3
#pragma pack(pop)


}
# 47 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 2 3
# 88 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 3
extern "C" {
# 151 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 3
extern double kCFCoreFoundationVersionNumber;
# 192 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 3
typedef unsigned long CFTypeID;
typedef unsigned long CFOptionFlags;
typedef unsigned long CFHashCode;
typedef signed long CFIndex;


typedef const void * CFTypeRef;

typedef const struct __CFString * CFStringRef;
typedef struct __CFString * CFMutableStringRef;






typedef CFTypeRef CFPropertyListRef;


enum {
    kCFCompareLessThan = -1,
    kCFCompareEqualTo = 0,
    kCFCompareGreaterThan = 1
};
typedef CFIndex CFComparisonResult;


typedef CFComparisonResult (*CFComparatorFunction)(const void *val1, const void *val2, void *context);



enum {
    kCFNotFound = -1
};



typedef struct {
    CFIndex location;
    CFIndex length;
} CFRange;


static __inline__ __attribute__((always_inline)) CFRange CFRangeMake(CFIndex loc, CFIndex len) {
    CFRange range;
    range.location = loc;
    range.length = len;
    return range;
}





extern
CFRange __CFRangeMake(CFIndex loc, CFIndex len);





typedef const struct __CFNull * CFNullRef;

extern
CFTypeID CFNullGetTypeID(void);

extern
const CFNullRef kCFNull;
# 273 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 3
typedef const struct __CFAllocator * CFAllocatorRef;


extern
const CFAllocatorRef kCFAllocatorDefault;


extern
const CFAllocatorRef kCFAllocatorSystemDefault;







extern
const CFAllocatorRef kCFAllocatorMalloc;





extern
const CFAllocatorRef kCFAllocatorMallocZone ;





extern
const CFAllocatorRef kCFAllocatorNull;





extern
const CFAllocatorRef kCFAllocatorUseContext;

typedef const void * (*CFAllocatorRetainCallBack)(const void *info);
typedef void (*CFAllocatorReleaseCallBack)(const void *info);
typedef CFStringRef (*CFAllocatorCopyDescriptionCallBack)(const void *info);
typedef void * (*CFAllocatorAllocateCallBack)(CFIndex allocSize, CFOptionFlags hint, void *info);
typedef void * (*CFAllocatorReallocateCallBack)(void *ptr, CFIndex newsize, CFOptionFlags hint, void *info);
typedef void (*CFAllocatorDeallocateCallBack)(void *ptr, void *info);
typedef CFIndex (*CFAllocatorPreferredSizeCallBack)(CFIndex size, CFOptionFlags hint, void *info);
typedef struct {
    CFIndex version;
    void * info;
    CFAllocatorRetainCallBack retain;
    CFAllocatorReleaseCallBack release;
    CFAllocatorCopyDescriptionCallBack copyDescription;
    CFAllocatorAllocateCallBack allocate;
    CFAllocatorReallocateCallBack reallocate;
    CFAllocatorDeallocateCallBack deallocate;
    CFAllocatorPreferredSizeCallBack preferredSize;
} CFAllocatorContext;

extern
CFTypeID CFAllocatorGetTypeID(void);
# 358 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h" 3
extern
void CFAllocatorSetDefault(CFAllocatorRef allocator);

extern
CFAllocatorRef CFAllocatorGetDefault(void);

extern
CFAllocatorRef CFAllocatorCreate(CFAllocatorRef allocator, CFAllocatorContext *context);

extern
void *CFAllocatorAllocate(CFAllocatorRef allocator, CFIndex size, CFOptionFlags hint);

extern
void *CFAllocatorReallocate(CFAllocatorRef allocator, void *ptr, CFIndex newsize, CFOptionFlags hint);

extern
void CFAllocatorDeallocate(CFAllocatorRef allocator, void *ptr);

extern
CFIndex CFAllocatorGetPreferredSizeForSize(CFAllocatorRef allocator, CFIndex size, CFOptionFlags hint);

extern
void CFAllocatorGetContext(CFAllocatorRef allocator, CFAllocatorContext *context);




extern
CFTypeID CFGetTypeID(CFTypeRef cf);

extern
CFStringRef CFCopyTypeIDDescription(CFTypeID type_id);

extern
CFTypeRef CFRetain(CFTypeRef cf);

extern
void CFRelease(CFTypeRef cf);

extern
CFIndex CFGetRetainCount(CFTypeRef cf);

extern
CFTypeRef CFMakeCollectable(CFTypeRef cf) ;

extern
Boolean CFEqual(CFTypeRef cf1, CFTypeRef cf2);

extern
CFHashCode CFHash(CFTypeRef cf);

extern
CFStringRef CFCopyDescription(CFTypeRef cf);

extern
CFAllocatorRef CFGetAllocator(CFTypeRef cf);


}
# 39 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 1 3
# 55 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern "C" {
# 80 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
typedef const void * (*CFArrayRetainCallBack)(CFAllocatorRef allocator, const void *value);
typedef void (*CFArrayReleaseCallBack)(CFAllocatorRef allocator, const void *value);
typedef CFStringRef (*CFArrayCopyDescriptionCallBack)(const void *value);
typedef Boolean (*CFArrayEqualCallBack)(const void *value1, const void *value2);
typedef struct {
    CFIndex version;
    CFArrayRetainCallBack retain;
    CFArrayReleaseCallBack release;
    CFArrayCopyDescriptionCallBack copyDescription;
    CFArrayEqualCallBack equal;
} CFArrayCallBacks;






extern
const CFArrayCallBacks kCFTypeArrayCallBacks;
# 108 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
typedef void (*CFArrayApplierFunction)(const void *value, void *context);





typedef const struct __CFArray * CFArrayRef;





typedef struct __CFArray * CFMutableArrayRef;





extern
CFTypeID CFArrayGetTypeID(void);
# 179 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFArrayRef CFArrayCreate(CFAllocatorRef allocator, const void **values, CFIndex numValues, const CFArrayCallBacks *callBacks);
# 200 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFArrayRef CFArrayCreateCopy(CFAllocatorRef allocator, CFArrayRef theArray);
# 245 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFMutableArrayRef CFArrayCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFArrayCallBacks *callBacks);
# 275 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFMutableArrayRef CFArrayCreateMutableCopy(CFAllocatorRef allocator, CFIndex capacity, CFArrayRef theArray);
# 285 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFIndex CFArrayGetCount(CFArrayRef theArray);
# 308 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFIndex CFArrayGetCountOfValue(CFArrayRef theArray, CFRange range, const void *value);
# 331 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
Boolean CFArrayContainsValue(CFArrayRef theArray, CFRange range, const void *value);
# 345 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
const void *CFArrayGetValueAtIndex(CFArrayRef theArray, CFIndex idx);
# 366 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayGetValues(CFArrayRef theArray, CFRange range, const void **values);
# 393 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayApplyFunction(CFArrayRef theArray, CFRange range, CFArrayApplierFunction applier, void *context);
# 418 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFIndex CFArrayGetFirstIndexOfValue(CFArrayRef theArray, CFRange range, const void *value);
# 443 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFIndex CFArrayGetLastIndexOfValue(CFArrayRef theArray, CFRange range, const void *value);
# 482 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
CFIndex CFArrayBSearchValues(CFArrayRef theArray, CFRange range, const void *value, CFComparatorFunction comparator, void *context);
# 499 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayAppendValue(CFMutableArrayRef theArray, const void *value);
# 521 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayInsertValueAtIndex(CFMutableArrayRef theArray, CFIndex idx, const void *value);
# 544 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArraySetValueAtIndex(CFMutableArrayRef theArray, CFIndex idx, const void *value);
# 558 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayRemoveValueAtIndex(CFMutableArrayRef theArray, CFIndex idx);
# 568 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayRemoveAllValues(CFMutableArrayRef theArray);
# 602 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayReplaceValues(CFMutableArrayRef theArray, CFRange range, const void **newValues, CFIndex newCount);
# 620 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayExchangeValuesAtIndices(CFMutableArrayRef theArray, CFIndex idx1, CFIndex idx2);
# 650 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArraySortValues(CFMutableArrayRef theArray, CFRange range, CFComparatorFunction comparator, void *context);
# 680 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFArray.h" 3
extern
void CFArrayAppendArray(CFMutableArrayRef theArray, CFArrayRef otherArray, CFRange otherRange);


}
# 40 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBag.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBag.h" 3
extern "C" {


typedef const void * (*CFBagRetainCallBack)(CFAllocatorRef allocator, const void *value);
typedef void (*CFBagReleaseCallBack)(CFAllocatorRef allocator, const void *value);
typedef CFStringRef (*CFBagCopyDescriptionCallBack)(const void *value);
typedef Boolean (*CFBagEqualCallBack)(const void *value1, const void *value2);
typedef CFHashCode (*CFBagHashCallBack)(const void *value);
typedef struct {
    CFIndex version;
    CFBagRetainCallBack retain;
    CFBagReleaseCallBack release;
    CFBagCopyDescriptionCallBack copyDescription;
    CFBagEqualCallBack equal;
    CFBagHashCallBack hash;
} CFBagCallBacks;

extern
const CFBagCallBacks kCFTypeBagCallBacks;
extern
const CFBagCallBacks kCFCopyStringBagCallBacks;

typedef void (*CFBagApplierFunction)(const void *value, void *context);

typedef const struct __CFBag * CFBagRef;
typedef struct __CFBag * CFMutableBagRef;

extern
CFTypeID CFBagGetTypeID(void);

extern
CFBagRef CFBagCreate(CFAllocatorRef allocator, const void **values, CFIndex numValues, const CFBagCallBacks *callBacks);

extern
CFBagRef CFBagCreateCopy(CFAllocatorRef allocator, CFBagRef theBag);

extern
CFMutableBagRef CFBagCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFBagCallBacks *callBacks);

extern
CFMutableBagRef CFBagCreateMutableCopy(CFAllocatorRef allocator, CFIndex capacity, CFBagRef theBag);

extern
CFIndex CFBagGetCount(CFBagRef theBag);

extern
CFIndex CFBagGetCountOfValue(CFBagRef theBag, const void *value);

extern
Boolean CFBagContainsValue(CFBagRef theBag, const void *value);

extern
const void *CFBagGetValue(CFBagRef theBag, const void *value);

extern
Boolean CFBagGetValueIfPresent(CFBagRef theBag, const void *candidate, const void **value);

extern
void CFBagGetValues(CFBagRef theBag, const void **values);

extern
void CFBagApplyFunction(CFBagRef theBag, CFBagApplierFunction applier, void *context);

extern
void CFBagAddValue(CFMutableBagRef theBag, const void *value);

extern
void CFBagReplaceValue(CFMutableBagRef theBag, const void *value);

extern
void CFBagSetValue(CFMutableBagRef theBag, const void *value);

extern
void CFBagRemoveValue(CFMutableBagRef theBag, const void *value);

extern
void CFBagRemoveAllValues(CFMutableBagRef theBag);


}
# 41 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 1 3
# 35 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFData.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFData.h" 3
extern "C" {


typedef const struct __CFData * CFDataRef;
typedef struct __CFData * CFMutableDataRef;

extern
CFTypeID CFDataGetTypeID(void);

extern
CFDataRef CFDataCreate(CFAllocatorRef allocator, const UInt8 *bytes, CFIndex length);

extern
CFDataRef CFDataCreateWithBytesNoCopy(CFAllocatorRef allocator, const UInt8 *bytes, CFIndex length, CFAllocatorRef bytesDeallocator);


extern
CFDataRef CFDataCreateCopy(CFAllocatorRef allocator, CFDataRef theData);

extern
CFMutableDataRef CFDataCreateMutable(CFAllocatorRef allocator, CFIndex capacity);

extern
CFMutableDataRef CFDataCreateMutableCopy(CFAllocatorRef allocator, CFIndex capacity, CFDataRef theData);

extern
CFIndex CFDataGetLength(CFDataRef theData);

extern
const UInt8 *CFDataGetBytePtr(CFDataRef theData);

extern
UInt8 *CFDataGetMutableBytePtr(CFMutableDataRef theData);

extern
void CFDataGetBytes(CFDataRef theData, CFRange range, UInt8 *buffer);

extern
void CFDataSetLength(CFMutableDataRef theData, CFIndex length);

extern
void CFDataIncreaseLength(CFMutableDataRef theData, CFIndex extraLength);

extern
void CFDataAppendBytes(CFMutableDataRef theData, const UInt8 *bytes, CFIndex length);

extern
void CFDataReplaceBytes(CFMutableDataRef theData, CFRange range, const UInt8 *newBytes, CFIndex newLength);

extern
void CFDataDeleteBytes(CFMutableDataRef theData, CFRange range);


}
# 36 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 2 3


extern "C" {






typedef const struct __CFCharacterSet * CFCharacterSetRef;





typedef struct __CFCharacterSet * CFMutableCharacterSetRef;






enum {
    kCFCharacterSetControl = 1,
    kCFCharacterSetWhitespace,
    kCFCharacterSetWhitespaceAndNewline,
    kCFCharacterSetDecimalDigit,
    kCFCharacterSetLetter,
    kCFCharacterSetLowercaseLetter,
    kCFCharacterSetUppercaseLetter,
    kCFCharacterSetNonBase,
    kCFCharacterSetDecomposable,
    kCFCharacterSetAlphaNumeric,
    kCFCharacterSetPunctuation,

    kCFCharacterSetCapitalizedLetter = 13,


    kCFCharacterSetSymbol = 14,


    kCFCharacterSetNewline = 15,

    kCFCharacterSetIllegal = 12
};
typedef CFIndex CFCharacterSetPredefinedSet;





extern
CFTypeID CFCharacterSetGetTypeID(void);
# 100 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFCharacterSetRef CFCharacterSetGetPredefined(CFCharacterSetPredefinedSet theSetIdentifier);
# 119 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFCharacterSetRef CFCharacterSetCreateWithCharactersInRange(CFAllocatorRef alloc, CFRange theRange);
# 136 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFCharacterSetRef CFCharacterSetCreateWithCharactersInString(CFAllocatorRef alloc, CFStringRef theString);
# 164 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFCharacterSetRef CFCharacterSetCreateWithBitmapRepresentation(CFAllocatorRef alloc, CFDataRef theData);
# 181 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern CFCharacterSetRef CFCharacterSetCreateInvertedSet(CFAllocatorRef alloc, CFCharacterSetRef theSet);
# 191 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern Boolean CFCharacterSetIsSupersetOfSet(CFCharacterSetRef theSet, CFCharacterSetRef theOtherset);
# 202 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern Boolean CFCharacterSetHasMemberInPlane(CFCharacterSetRef theSet, CFIndex thePlane);
# 215 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFMutableCharacterSetRef CFCharacterSetCreateMutable(CFAllocatorRef alloc);
# 232 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFCharacterSetRef CFCharacterSetCreateCopy(CFAllocatorRef alloc, CFCharacterSetRef theSet) ;
# 249 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFMutableCharacterSetRef CFCharacterSetCreateMutableCopy(CFAllocatorRef alloc, CFCharacterSetRef theSet);
# 263 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
Boolean CFCharacterSetIsCharacterMember(CFCharacterSetRef theSet, UniChar theChar);
# 276 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern Boolean CFCharacterSetIsLongCharacterMember(CFCharacterSetRef theSet, UTF32Char theChar);
# 295 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
CFDataRef CFCharacterSetCreateBitmapRepresentation(CFAllocatorRef alloc, CFCharacterSetRef theSet);
# 310 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetAddCharactersInRange(CFMutableCharacterSetRef theSet, CFRange theRange);
# 325 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetRemoveCharactersInRange(CFMutableCharacterSetRef theSet, CFRange theRange);
# 338 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetAddCharactersInString(CFMutableCharacterSetRef theSet, CFStringRef theString);
# 351 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetRemoveCharactersInString(CFMutableCharacterSetRef theSet, CFStringRef theString);
# 365 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetUnion(CFMutableCharacterSetRef theSet, CFCharacterSetRef theOtherSet);
# 379 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetIntersect(CFMutableCharacterSetRef theSet, CFCharacterSetRef theOtherSet);
# 389 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCharacterSet.h" 3
extern
void CFCharacterSetInvert(CFMutableCharacterSetRef theSet);


}
# 42 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3

# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDate.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDate.h" 3
extern "C" {


typedef double CFTimeInterval;
typedef CFTimeInterval CFAbsoluteTime;



extern
CFAbsoluteTime CFAbsoluteTimeGetCurrent(void);

extern
const CFTimeInterval kCFAbsoluteTimeIntervalSince1970;
extern
const CFTimeInterval kCFAbsoluteTimeIntervalSince1904;

typedef const struct __CFDate * CFDateRef;

extern
CFTypeID CFDateGetTypeID(void);

extern
CFDateRef CFDateCreate(CFAllocatorRef allocator, CFAbsoluteTime at);

extern
CFAbsoluteTime CFDateGetAbsoluteTime(CFDateRef theDate);

extern
CFTimeInterval CFDateGetTimeIntervalSinceDate(CFDateRef theDate, CFDateRef otherDate);

extern
CFComparisonResult CFDateCompare(CFDateRef theDate, CFDateRef otherDate, void *context);

typedef const struct __CFTimeZone * CFTimeZoneRef;

typedef struct {
    SInt32 year;
    SInt8 month;
    SInt8 day;
    SInt8 hour;
    SInt8 minute;
    double second;
} CFGregorianDate;

typedef struct {
    SInt32 years;
    SInt32 months;
    SInt32 days;
    SInt32 hours;
    SInt32 minutes;
    double seconds;
} CFGregorianUnits;

enum {
    kCFGregorianUnitsYears = (1 << 0),
    kCFGregorianUnitsMonths = (1 << 1),
    kCFGregorianUnitsDays = (1 << 2),
    kCFGregorianUnitsHours = (1 << 3),
    kCFGregorianUnitsMinutes = (1 << 4),
    kCFGregorianUnitsSeconds = (1 << 5),




    kCFGregorianAllUnits = 0x00FFFFFF
};
typedef CFOptionFlags CFGregorianUnitFlags;

extern
Boolean CFGregorianDateIsValid(CFGregorianDate gdate, CFOptionFlags unitFlags);

extern
CFAbsoluteTime CFGregorianDateGetAbsoluteTime(CFGregorianDate gdate, CFTimeZoneRef tz);

extern
CFGregorianDate CFAbsoluteTimeGetGregorianDate(CFAbsoluteTime at, CFTimeZoneRef tz);

extern
CFAbsoluteTime CFAbsoluteTimeAddGregorianUnits(CFAbsoluteTime at, CFTimeZoneRef tz, CFGregorianUnits units);

extern
CFGregorianUnits CFAbsoluteTimeGetDifferenceAsGregorianUnits(CFAbsoluteTime at1, CFAbsoluteTime at2, CFTimeZoneRef tz, CFOptionFlags unitFlags);

extern
SInt32 CFAbsoluteTimeGetDayOfWeek(CFAbsoluteTime at, CFTimeZoneRef tz);

extern
SInt32 CFAbsoluteTimeGetDayOfYear(CFAbsoluteTime at, CFTimeZoneRef tz);

extern
SInt32 CFAbsoluteTimeGetWeekOfYear(CFAbsoluteTime at, CFTimeZoneRef tz);


}
# 44 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 1 3
# 70 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern "C" {
# 98 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
typedef const void * (*CFDictionaryRetainCallBack)(CFAllocatorRef allocator, const void *value);
typedef void (*CFDictionaryReleaseCallBack)(CFAllocatorRef allocator, const void *value);
typedef CFStringRef (*CFDictionaryCopyDescriptionCallBack)(const void *value);
typedef Boolean (*CFDictionaryEqualCallBack)(const void *value1, const void *value2);
typedef CFHashCode (*CFDictionaryHashCallBack)(const void *value);
typedef struct {
    CFIndex version;
    CFDictionaryRetainCallBack retain;
    CFDictionaryReleaseCallBack release;
    CFDictionaryCopyDescriptionCallBack copyDescription;
    CFDictionaryEqualCallBack equal;
    CFDictionaryHashCallBack hash;
} CFDictionaryKeyCallBacks;







extern
const CFDictionaryKeyCallBacks kCFTypeDictionaryKeyCallBacks;
# 129 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
const CFDictionaryKeyCallBacks kCFCopyStringDictionaryKeyCallBacks;
# 155 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
typedef struct {
    CFIndex version;
    CFDictionaryRetainCallBack retain;
    CFDictionaryReleaseCallBack release;
    CFDictionaryCopyDescriptionCallBack copyDescription;
    CFDictionaryEqualCallBack equal;
} CFDictionaryValueCallBacks;







extern
const CFDictionaryValueCallBacks kCFTypeDictionaryValueCallBacks;
# 181 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
typedef void (*CFDictionaryApplierFunction)(const void *key, const void *value, void *context);





typedef const struct __CFDictionary * CFDictionaryRef;





typedef struct __CFDictionary * CFMutableDictionaryRef;





extern
CFTypeID CFDictionaryGetTypeID(void);
# 284 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFDictionaryRef CFDictionaryCreate(CFAllocatorRef allocator, const void **keys, const void **values, CFIndex numValues, const CFDictionaryKeyCallBacks *keyCallBacks, const CFDictionaryValueCallBacks *valueCallBacks);
# 308 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFDictionaryRef CFDictionaryCreateCopy(CFAllocatorRef allocator, CFDictionaryRef theDict);
# 381 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFMutableDictionaryRef CFDictionaryCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFDictionaryKeyCallBacks *keyCallBacks, const CFDictionaryValueCallBacks *valueCallBacks);
# 414 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFMutableDictionaryRef CFDictionaryCreateMutableCopy(CFAllocatorRef allocator, CFIndex capacity, CFDictionaryRef theDict);
# 424 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFIndex CFDictionaryGetCount(CFDictionaryRef theDict);
# 443 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFIndex CFDictionaryGetCountOfKey(CFDictionaryRef theDict, const void *key);
# 459 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
CFIndex CFDictionaryGetCountOfValue(CFDictionaryRef theDict, const void *value);
# 477 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
Boolean CFDictionaryContainsKey(CFDictionaryRef theDict, const void *key);
# 493 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
Boolean CFDictionaryContainsValue(CFDictionaryRef theDict, const void *value);
# 515 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
const void *CFDictionaryGetValue(CFDictionaryRef theDict, const void *key);
# 540 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
Boolean CFDictionaryGetValueIfPresent(CFDictionaryRef theDict, const void *key, const void **value);
# 563 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionaryGetKeysAndValues(CFDictionaryRef theDict, const void **keys, const void **values);
# 583 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionaryApplyFunction(CFDictionaryRef theDict, CFDictionaryApplierFunction applier, void *context);
# 604 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionaryAddValue(CFMutableDictionaryRef theDict, const void *key, const void *value);
# 629 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionarySetValue(CFMutableDictionaryRef theDict, const void *key, const void *value);
# 648 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionaryReplaceValue(CFMutableDictionaryRef theDict, const void *key, const void *value);
# 662 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionaryRemoveValue(CFMutableDictionaryRef theDict, const void *key);
# 672 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h" 3
extern
void CFDictionaryRemoveAllValues(CFMutableDictionaryRef theDict);


}
# 45 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 1 3
# 33 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 1 3
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFLocale.h" 1 3
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFLocale.h" 3
extern "C" {


typedef const struct __CFLocale *CFLocaleRef;

extern
CFTypeID CFLocaleGetTypeID(void) ;

extern
CFLocaleRef CFLocaleGetSystem(void) ;


extern
CFLocaleRef CFLocaleCopyCurrent(void) ;
# 38 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFLocale.h" 3
extern
CFArrayRef CFLocaleCopyAvailableLocaleIdentifiers(void) ;



extern
CFArrayRef CFLocaleCopyISOLanguageCodes(void) ;




extern
CFArrayRef CFLocaleCopyISOCountryCodes(void) ;




extern
CFArrayRef CFLocaleCopyISOCurrencyCodes(void) ;




extern
CFArrayRef CFLocaleCopyCommonISOCurrencyCodes(void) ;



extern
CFArrayRef CFLocaleCopyPreferredLanguages(void) ;


extern
CFStringRef CFLocaleCreateCanonicalLanguageIdentifierFromString(CFAllocatorRef allocator, CFStringRef localeIdentifier) ;



extern
CFStringRef CFLocaleCreateCanonicalLocaleIdentifierFromString(CFAllocatorRef allocator, CFStringRef localeIdentifier) ;




extern
CFStringRef CFLocaleCreateCanonicalLocaleIdentifierFromScriptManagerCodes(CFAllocatorRef allocator, LangCode lcode, RegionCode rcode) ;



extern
CFDictionaryRef CFLocaleCreateComponentsFromLocaleIdentifier(CFAllocatorRef allocator, CFStringRef localeID) ;
# 96 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFLocale.h" 3
extern
CFStringRef CFLocaleCreateLocaleIdentifierFromComponents(CFAllocatorRef allocator, CFDictionaryRef dictionary) ;






extern
CFLocaleRef CFLocaleCreate(CFAllocatorRef allocator, CFStringRef localeIdentifier) ;


extern
CFLocaleRef CFLocaleCreateCopy(CFAllocatorRef allocator, CFLocaleRef locale) ;




extern
CFStringRef CFLocaleGetIdentifier(CFLocaleRef locale) ;



extern
CFTypeRef CFLocaleGetValue(CFLocaleRef locale, CFStringRef key) ;



extern
CFStringRef CFLocaleCopyDisplayNameForPropertyValue(CFLocaleRef displayLocale, CFStringRef key, CFStringRef value) ;





extern const CFStringRef kCFLocaleCurrentLocaleDidChangeNotification;



extern const CFStringRef kCFLocaleIdentifier ;
extern const CFStringRef kCFLocaleLanguageCode ;
extern const CFStringRef kCFLocaleCountryCode ;
extern const CFStringRef kCFLocaleScriptCode ;
extern const CFStringRef kCFLocaleVariantCode ;

extern const CFStringRef kCFLocaleExemplarCharacterSet ;
extern const CFStringRef kCFLocaleCalendarIdentifier ;
extern const CFStringRef kCFLocaleCalendar ;
extern const CFStringRef kCFLocaleCollationIdentifier ;
extern const CFStringRef kCFLocaleUsesMetricSystem ;
extern const CFStringRef kCFLocaleMeasurementSystem ;
extern const CFStringRef kCFLocaleDecimalSeparator ;
extern const CFStringRef kCFLocaleGroupingSeparator ;
extern const CFStringRef kCFLocaleCurrencySymbol ;
extern const CFStringRef kCFLocaleCurrencyCode ;


extern const CFStringRef kCFGregorianCalendar ;
extern const CFStringRef kCFBuddhistCalendar ;
extern const CFStringRef kCFChineseCalendar ;
extern const CFStringRef kCFHebrewCalendar ;
extern const CFStringRef kCFIslamicCalendar ;
extern const CFStringRef kCFIslamicCivilCalendar ;
extern const CFStringRef kCFJapaneseCalendar ;



}
# 14 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 2 3



extern "C" {
# 93 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
typedef UInt32 CFStringEncoding;





enum {
    kCFStringEncodingMacRoman = 0,
    kCFStringEncodingWindowsLatin1 = 0x0500,
    kCFStringEncodingISOLatin1 = 0x0201,
    kCFStringEncodingNextStepLatin = 0x0B01,
    kCFStringEncodingASCII = 0x0600,
    kCFStringEncodingUnicode = 0x0100,
    kCFStringEncodingUTF8 = 0x08000100,
    kCFStringEncodingNonLossyASCII = 0x0BFF

    ,
    kCFStringEncodingUTF16 = 0x0100,
    kCFStringEncodingUTF16BE = 0x10000100,
    kCFStringEncodingUTF16LE = 0x14000100,

    kCFStringEncodingUTF32 = 0x0c000100,
    kCFStringEncodingUTF32BE = 0x18000100,
    kCFStringEncodingUTF32LE = 0x1c000100

};
typedef CFIndex CFStringBuiltInEncodings;


extern
CFTypeID CFStringGetTypeID(void);
# 154 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
CFStringRef CFStringCreateWithPascalString(CFAllocatorRef alloc, ConstStr255Param pStr, CFStringEncoding encoding);

extern
CFStringRef CFStringCreateWithCString(CFAllocatorRef alloc, const char *cStr, CFStringEncoding encoding);



extern
CFStringRef CFStringCreateWithBytes(CFAllocatorRef alloc, const UInt8 *bytes, CFIndex numBytes, CFStringEncoding encoding, Boolean isExternalRepresentation);

extern
CFStringRef CFStringCreateWithCharacters(CFAllocatorRef alloc, const UniChar *chars, CFIndex numChars);
# 185 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
CFStringRef CFStringCreateWithPascalStringNoCopy(CFAllocatorRef alloc, ConstStr255Param pStr, CFStringEncoding encoding, CFAllocatorRef contentsDeallocator);

extern
CFStringRef CFStringCreateWithCStringNoCopy(CFAllocatorRef alloc, const char *cStr, CFStringEncoding encoding, CFAllocatorRef contentsDeallocator);




extern
CFStringRef CFStringCreateWithBytesNoCopy(CFAllocatorRef alloc, const UInt8 *bytes, CFIndex numBytes, CFStringEncoding encoding, Boolean isExternalRepresentation, CFAllocatorRef contentsDeallocator);


extern
CFStringRef CFStringCreateWithCharactersNoCopy(CFAllocatorRef alloc, const UniChar *chars, CFIndex numChars, CFAllocatorRef contentsDeallocator);



extern
CFStringRef CFStringCreateWithSubstring(CFAllocatorRef alloc, CFStringRef str, CFRange range);

extern
CFStringRef CFStringCreateCopy(CFAllocatorRef alloc, CFStringRef theString);



extern
CFStringRef CFStringCreateWithFormat(CFAllocatorRef alloc, CFDictionaryRef formatOptions, CFStringRef format, ...);

extern
CFStringRef CFStringCreateWithFormatAndArguments(CFAllocatorRef alloc, CFDictionaryRef formatOptions, CFStringRef format, va_list arguments);



extern
CFMutableStringRef CFStringCreateMutable(CFAllocatorRef alloc, CFIndex maxLength);

extern
CFMutableStringRef CFStringCreateMutableCopy(CFAllocatorRef alloc, CFIndex maxLength, CFStringRef theString);







extern
CFMutableStringRef CFStringCreateMutableWithExternalCharactersNoCopy(CFAllocatorRef alloc, UniChar *chars, CFIndex numChars, CFIndex capacity, CFAllocatorRef externalCharactersAllocator);





extern
CFIndex CFStringGetLength(CFStringRef theString);






extern
UniChar CFStringGetCharacterAtIndex(CFStringRef theString, CFIndex idx);

extern
void CFStringGetCharacters(CFStringRef theString, CFRange range, UniChar *buffer);
# 263 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
Boolean CFStringGetPascalString(CFStringRef theString, StringPtr buffer, CFIndex bufferSize, CFStringEncoding encoding);

extern
Boolean CFStringGetCString(CFStringRef theString, char *buffer, CFIndex bufferSize, CFStringEncoding encoding);






extern
ConstStringPtr CFStringGetPascalStringPtr(CFStringRef theString, CFStringEncoding encoding);

extern
const char *CFStringGetCStringPtr(CFStringRef theString, CFStringEncoding encoding);

extern
const UniChar *CFStringGetCharactersPtr(CFStringRef theString);
# 295 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
CFIndex CFStringGetBytes(CFStringRef theString, CFRange range, CFStringEncoding encoding, UInt8 lossByte, Boolean isExternalRepresentation, UInt8 *buffer, CFIndex maxBufLen, CFIndex *usedBufLen);







extern
CFStringRef CFStringCreateFromExternalRepresentation(CFAllocatorRef alloc, CFDataRef data, CFStringEncoding encoding);

extern
CFDataRef CFStringCreateExternalRepresentation(CFAllocatorRef alloc, CFStringRef theString, CFStringEncoding encoding, UInt8 lossByte);



extern
CFStringEncoding CFStringGetSmallestEncoding(CFStringRef theString);

extern
CFStringEncoding CFStringGetFastestEncoding(CFStringRef theString);



extern
CFStringEncoding CFStringGetSystemEncoding(void);

extern
CFIndex CFStringGetMaximumSizeForEncoding(CFIndex length, CFStringEncoding encoding);






extern
Boolean CFStringGetFileSystemRepresentation(CFStringRef string, char *buffer, CFIndex maxBufLen) ;



extern
CFIndex CFStringGetMaximumSizeOfFileSystemRepresentation(CFStringRef string) ;



extern
CFStringRef CFStringCreateWithFileSystemRepresentation(CFAllocatorRef alloc, const char *buffer) ;







enum {
    kCFCompareCaseInsensitive = 1,
    kCFCompareBackwards = 4,
    kCFCompareAnchored = 8,
    kCFCompareNonliteral = 16,
    kCFCompareLocalized = 32,
    kCFCompareNumerically = 64

    ,
    kCFCompareDiacriticInsensitive = 128,
    kCFCompareWidthInsensitive = 256,
    kCFCompareForcedOrdering = 512

};
typedef CFOptionFlags CFStringCompareFlags;
# 373 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
CFComparisonResult CFStringCompareWithOptionsAndLocale(CFStringRef theString1, CFStringRef theString2, CFRange rangeToCompare, CFOptionFlags compareOptions, CFLocaleRef locale) ;





extern
CFComparisonResult CFStringCompareWithOptions(CFStringRef theString1, CFStringRef theString2, CFRange rangeToCompare, CFOptionFlags compareOptions);





extern
CFComparisonResult CFStringCompare(CFStringRef theString1, CFStringRef theString2, CFOptionFlags compareOptions);
# 397 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
Boolean CFStringFindWithOptionsAndLocale(CFStringRef theString, CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags searchOptions, CFLocaleRef locale, CFRange *result) ;





extern
Boolean CFStringFindWithOptions(CFStringRef theString, CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags searchOptions, CFRange *result);
# 415 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
CFArrayRef CFStringCreateArrayWithFindResults(CFAllocatorRef alloc, CFStringRef theString, CFStringRef stringToFind, CFRange rangeToSearch, CFOptionFlags compareOptions);



extern
CFRange CFStringFind(CFStringRef theString, CFStringRef stringToFind, CFOptionFlags compareOptions);

extern
Boolean CFStringHasPrefix(CFStringRef theString, CFStringRef prefix);

extern
Boolean CFStringHasSuffix(CFStringRef theString, CFStringRef suffix);
# 443 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern CFRange CFStringGetRangeOfComposedCharactersAtIndex(CFStringRef theString, CFIndex theIndex);
# 473 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern Boolean CFStringFindCharacterFromSet(CFStringRef theString, CFCharacterSetRef theSet, CFRange rangeToSearch, CFOptionFlags searchOptions, CFRange *result);
# 485 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
void CFStringGetLineBounds(CFStringRef theString, CFRange range, CFIndex *lineBeginIndex, CFIndex *lineEndIndex, CFIndex *contentsEndIndex);



extern
void CFStringGetParagraphBounds(CFStringRef string, CFRange range, CFIndex *parBeginIndex, CFIndex *parEndIndex, CFIndex *contentsEndIndex) ;



extern
CFStringRef CFStringCreateByCombiningStrings(CFAllocatorRef alloc, CFArrayRef theArray, CFStringRef separatorString);

extern
CFArrayRef CFStringCreateArrayBySeparatingStrings(CFAllocatorRef alloc, CFStringRef theString, CFStringRef separatorString);




extern
SInt32 CFStringGetIntValue(CFStringRef str);

extern
double CFStringGetDoubleValue(CFStringRef str);
# 518 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
void CFStringAppend(CFMutableStringRef theString, CFStringRef appendedString);

extern
void CFStringAppendCharacters(CFMutableStringRef theString, const UniChar *chars, CFIndex numChars);

extern
void CFStringAppendPascalString(CFMutableStringRef theString, ConstStr255Param pStr, CFStringEncoding encoding);

extern
void CFStringAppendCString(CFMutableStringRef theString, const char *cStr, CFStringEncoding encoding);

extern
void CFStringAppendFormat(CFMutableStringRef theString, CFDictionaryRef formatOptions, CFStringRef format, ...);

extern
void CFStringAppendFormatAndArguments(CFMutableStringRef theString, CFDictionaryRef formatOptions, CFStringRef format, va_list arguments);

extern
void CFStringInsert(CFMutableStringRef str, CFIndex idx, CFStringRef insertedStr);

extern
void CFStringDelete(CFMutableStringRef theString, CFRange range);

extern
void CFStringReplace(CFMutableStringRef theString, CFRange range, CFStringRef replacement);

extern
void CFStringReplaceAll(CFMutableStringRef theString, CFStringRef replacement);
# 557 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
CFIndex CFStringFindAndReplace(CFMutableStringRef theString, CFStringRef stringToFind, CFStringRef replacementString, CFRange rangeToSearch, CFOptionFlags compareOptions);
# 569 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
void CFStringSetExternalCharactersNoCopy(CFMutableStringRef theString, UniChar *chars, CFIndex length, CFIndex capacity);
# 583 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
void CFStringPad(CFMutableStringRef theString, CFStringRef padString, CFIndex length, CFIndex indexIntoPad);

extern
void CFStringTrim(CFMutableStringRef theString, CFStringRef trimString);

extern
void CFStringTrimWhitespace(CFMutableStringRef theString);


extern
void CFStringLowercase(CFMutableStringRef theString, CFLocaleRef locale);

extern
void CFStringUppercase(CFMutableStringRef theString, CFLocaleRef locale);

extern
void CFStringCapitalize(CFMutableStringRef theString, CFLocaleRef locale);
# 618 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
enum {
 kCFStringNormalizationFormD = 0,
 kCFStringNormalizationFormKD,
 kCFStringNormalizationFormC,
 kCFStringNormalizationFormKC
};
typedef CFIndex CFStringNormalizationForm;
# 637 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern void CFStringNormalize(CFMutableStringRef theString, CFStringNormalizationForm theForm);
# 665 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
void CFStringFold(CFMutableStringRef theString, CFOptionFlags theFlags, CFLocaleRef theLocale) ;




Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse) ;



extern const CFStringRef kCFStringTransformStripCombiningMarks ;
extern const CFStringRef kCFStringTransformToLatin ;
extern const CFStringRef kCFStringTransformFullwidthHalfwidth ;
extern const CFStringRef kCFStringTransformLatinKatakana ;
extern const CFStringRef kCFStringTransformLatinHiragana ;
extern const CFStringRef kCFStringTransformHiraganaKatakana ;
extern const CFStringRef kCFStringTransformMandarinLatin ;
extern const CFStringRef kCFStringTransformLatinHangul ;
extern const CFStringRef kCFStringTransformLatinArabic ;
extern const CFStringRef kCFStringTransformLatinHebrew ;
extern const CFStringRef kCFStringTransformLatinThai ;
extern const CFStringRef kCFStringTransformLatinCyrillic ;
extern const CFStringRef kCFStringTransformLatinGreek ;
extern const CFStringRef kCFStringTransformToXMLHex ;
extern const CFStringRef kCFStringTransformToUnicodeName ;
extern const CFStringRef kCFStringTransformStripDiacritics ;






extern
Boolean CFStringIsEncodingAvailable(CFStringEncoding encoding);



extern
const CFStringEncoding *CFStringGetListOfAvailableEncodings(void);



extern
CFStringRef CFStringGetNameOfEncoding(CFStringEncoding encoding);



extern
UInt32 CFStringConvertEncodingToNSStringEncoding(CFStringEncoding encoding);

extern
CFStringEncoding CFStringConvertNSStringEncodingToEncoding(UInt32 encoding);



extern
UInt32 CFStringConvertEncodingToWindowsCodepage(CFStringEncoding encoding);

extern
CFStringEncoding CFStringConvertWindowsCodepageToEncoding(UInt32 codepage);



extern
CFStringEncoding CFStringConvertIANACharSetNameToEncoding(CFStringRef theString);

extern
CFStringRef CFStringConvertEncodingToIANACharSetName(CFStringEncoding encoding);





extern
CFStringEncoding CFStringGetMostCompatibleMacStringEncoding(CFStringEncoding encoding);
# 753 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
typedef struct {
    UniChar buffer[64];
    CFStringRef theString;
    const UniChar *directBuffer;
    CFRange rangeToBuffer;
    CFIndex bufferedRangeStart;
    CFIndex bufferedRangeEnd;
} CFStringInlineBuffer;


static __inline__ __attribute__((always_inline)) void CFStringInitInlineBuffer(CFStringRef str, CFStringInlineBuffer *buf, CFRange range) {
    buf->theString = str;
    buf->rangeToBuffer = range;
    buf->directBuffer = CFStringGetCharactersPtr(str);
    buf->bufferedRangeStart = buf->bufferedRangeEnd = 0;
}

static __inline__ __attribute__((always_inline)) UniChar CFStringGetCharacterFromInlineBuffer(CFStringInlineBuffer *buf, CFIndex idx) {
    if (buf->directBuffer) {
 if (idx < 0 || idx >= buf->rangeToBuffer.length) return 0;
        return buf->directBuffer[idx + buf->rangeToBuffer.location];
    }
    if (idx >= buf->bufferedRangeEnd || idx < buf->bufferedRangeStart) {
 if (idx < 0 || idx >= buf->rangeToBuffer.length) return 0;
 if ((buf->bufferedRangeStart = idx - 4) < 0) buf->bufferedRangeStart = 0;
 buf->bufferedRangeEnd = buf->bufferedRangeStart + 64;
 if (buf->bufferedRangeEnd > buf->rangeToBuffer.length) buf->bufferedRangeEnd = buf->rangeToBuffer.length;
 CFStringGetCharacters(buf->theString, CFRangeMake(buf->rangeToBuffer.location + buf->bufferedRangeStart, buf->bufferedRangeEnd - buf->bufferedRangeStart), buf->buffer);
    }
    return buf->buffer[idx - buf->bufferedRangeStart];
}
# 806 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h" 3
extern
void CFShow(CFTypeRef obj);

extern
void CFShowStr(CFStringRef str);


extern
CFStringRef __CFStringMakeConstantString(const char *cStr);


}
# 34 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 2 3



extern "C" {






typedef struct __CFError * CFErrorRef;





extern
CFTypeID CFErrorGetTypeID(void) ;



extern const CFStringRef kCFErrorDomainPOSIX ;
extern const CFStringRef kCFErrorDomainOSStatus ;
extern const CFStringRef kCFErrorDomainMach ;
extern const CFStringRef kCFErrorDomainCocoa ;


extern const CFStringRef kCFErrorLocalizedDescriptionKey ;
extern const CFStringRef kCFErrorLocalizedFailureReasonKey ;
extern const CFStringRef kCFErrorLocalizedRecoverySuggestionKey ;


extern const CFStringRef kCFErrorDescriptionKey ;


extern const CFStringRef kCFErrorUnderlyingErrorKey ;
# 83 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
extern
CFErrorRef CFErrorCreate(CFAllocatorRef allocator, CFStringRef domain, CFIndex code, CFDictionaryRef userInfo) ;
# 98 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
extern
CFErrorRef CFErrorCreateWithUserInfoKeysAndValues(CFAllocatorRef allocator, CFStringRef domain, CFIndex code, const void *const *userInfoKeys, const void *const *userInfoValues, CFIndex numUserInfoValues) ;







extern
CFStringRef CFErrorGetDomain(CFErrorRef err) ;







extern
CFIndex CFErrorGetCode(CFErrorRef err) ;
# 126 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
extern
CFDictionaryRef CFErrorCopyUserInfo(CFErrorRef err) ;
# 140 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
extern
CFStringRef CFErrorCopyDescription(CFErrorRef err) ;
# 152 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
extern
CFStringRef CFErrorCopyFailureReason(CFErrorRef err) ;
# 164 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFError.h" 3
extern
CFStringRef CFErrorCopyRecoverySuggestion(CFErrorRef err) ;




}
# 46 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumber.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumber.h" 3
extern "C" {


typedef const struct __CFBoolean * CFBooleanRef;

extern
const CFBooleanRef kCFBooleanTrue;
extern
const CFBooleanRef kCFBooleanFalse;

extern
CFTypeID CFBooleanGetTypeID(void);

extern
Boolean CFBooleanGetValue(CFBooleanRef boolean);

enum {

    kCFNumberSInt8Type = 1,
    kCFNumberSInt16Type = 2,
    kCFNumberSInt32Type = 3,
    kCFNumberSInt64Type = 4,
    kCFNumberFloat32Type = 5,
    kCFNumberFloat64Type = 6,

    kCFNumberCharType = 7,
    kCFNumberShortType = 8,
    kCFNumberIntType = 9,
    kCFNumberLongType = 10,
    kCFNumberLongLongType = 11,
    kCFNumberFloatType = 12,
    kCFNumberDoubleType = 13,

    kCFNumberCFIndexType = 14,

    kCFNumberNSIntegerType = 15,
    kCFNumberCGFloatType = 16,
    kCFNumberMaxType = 16



};
typedef CFIndex CFNumberType;

typedef const struct __CFNumber * CFNumberRef;

extern
const CFNumberRef kCFNumberPositiveInfinity;
extern
const CFNumberRef kCFNumberNegativeInfinity;
extern
const CFNumberRef kCFNumberNaN;

extern
CFTypeID CFNumberGetTypeID(void);
# 74 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumber.h" 3
extern
CFNumberRef CFNumberCreate(CFAllocatorRef allocator, CFNumberType theType, const void *valuePtr);





extern
CFNumberType CFNumberGetType(CFNumberRef number);




extern
CFIndex CFNumberGetByteSize(CFNumberRef number);





extern
Boolean CFNumberIsFloatType(CFNumberRef number);
# 105 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumber.h" 3
extern
Boolean CFNumberGetValue(CFNumberRef number, CFNumberType theType, void *valuePtr);
# 123 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumber.h" 3
extern
CFComparisonResult CFNumberCompare(CFNumberRef number, CFNumberRef otherNumber, void *context);


}
# 47 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 1 3
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern "C" {


enum {
    kCFURLPOSIXPathStyle = 0,
    kCFURLHFSPathStyle,
    kCFURLWindowsPathStyle
};
typedef CFIndex CFURLPathStyle;

typedef const struct __CFURL * CFURLRef;
# 39 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFTypeID CFURLGetTypeID(void);



extern
CFURLRef CFURLCreateWithBytes(CFAllocatorRef allocator, const UInt8 *URLBytes, CFIndex length, CFStringEncoding encoding, CFURLRef baseURL);





extern
CFDataRef CFURLCreateData(CFAllocatorRef allocator, CFURLRef url, CFStringEncoding encoding, Boolean escapeWhitespace);


extern
CFURLRef CFURLCreateWithString(CFAllocatorRef allocator, CFStringRef URLString, CFURLRef baseURL);
# 71 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFURLRef CFURLCreateAbsoluteURLWithBytes(CFAllocatorRef alloc, const UInt8 *relativeURLBytes, CFIndex length, CFStringEncoding encoding, CFURLRef baseURL, Boolean useCompatibilityMode) ;
# 81 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFURLRef CFURLCreateWithFileSystemPath(CFAllocatorRef allocator, CFStringRef filePath, CFURLPathStyle pathStyle, Boolean isDirectory);

extern
CFURLRef CFURLCreateFromFileSystemRepresentation(CFAllocatorRef allocator, const UInt8 *buffer, CFIndex bufLen, Boolean isDirectory);

extern
CFURLRef CFURLCreateWithFileSystemPathRelativeToBase(CFAllocatorRef allocator, CFStringRef filePath, CFURLPathStyle pathStyle, Boolean isDirectory, CFURLRef baseURL);

extern
CFURLRef CFURLCreateFromFileSystemRepresentationRelativeToBase(CFAllocatorRef allocator, const UInt8 *buffer, CFIndex bufLen, Boolean isDirectory, CFURLRef baseURL);
# 100 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
Boolean CFURLGetFileSystemRepresentation(CFURLRef url, Boolean resolveAgainstBase, UInt8 *buffer, CFIndex maxBufLen);


extern
CFURLRef CFURLCopyAbsoluteURL(CFURLRef relativeURL);


extern
CFStringRef CFURLGetString(CFURLRef anURL);


extern
CFURLRef CFURLGetBaseURL(CFURLRef anURL);
# 175 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
Boolean CFURLCanBeDecomposed(CFURLRef anURL);



extern
CFStringRef CFURLCopyScheme(CFURLRef anURL);


extern
CFStringRef CFURLCopyNetLocation(CFURLRef anURL);
# 198 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFStringRef CFURLCopyPath(CFURLRef anURL);

extern
CFStringRef CFURLCopyStrictPath(CFURLRef anURL, Boolean *isAbsolute);

extern
CFStringRef CFURLCopyFileSystemPath(CFURLRef anURL, CFURLPathStyle pathStyle);



extern
Boolean CFURLHasDirectoryPath(CFURLRef anURL);



extern
CFStringRef CFURLCopyResourceSpecifier(CFURLRef anURL);

extern
CFStringRef CFURLCopyHostName(CFURLRef anURL);

extern
SInt32 CFURLGetPortNumber(CFURLRef anURL);

extern
CFStringRef CFURLCopyUserName(CFURLRef anURL);

extern
CFStringRef CFURLCopyPassword(CFURLRef anURL);






extern
CFStringRef CFURLCopyParameterString(CFURLRef anURL, CFStringRef charactersToLeaveEscaped);

extern
CFStringRef CFURLCopyQueryString(CFURLRef anURL, CFStringRef charactersToLeaveEscaped);

extern
CFStringRef CFURLCopyFragment(CFURLRef anURL, CFStringRef charactersToLeaveEscaped);

extern
CFStringRef CFURLCopyLastPathComponent(CFURLRef url);

extern
CFStringRef CFURLCopyPathExtension(CFURLRef url);





extern
CFURLRef CFURLCreateCopyAppendingPathComponent(CFAllocatorRef allocator, CFURLRef url, CFStringRef pathComponent, Boolean isDirectory);

extern
CFURLRef CFURLCreateCopyDeletingLastPathComponent(CFAllocatorRef allocator, CFURLRef url);

extern
CFURLRef CFURLCreateCopyAppendingPathExtension(CFAllocatorRef allocator, CFURLRef url, CFStringRef extension);

extern
CFURLRef CFURLCreateCopyDeletingPathExtension(CFAllocatorRef allocator, CFURLRef url);
# 272 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFIndex CFURLGetBytes(CFURLRef url, UInt8 *buffer, CFIndex bufferLength) ;

enum {
 kCFURLComponentScheme = 1,
 kCFURLComponentNetLocation = 2,
 kCFURLComponentPath = 3,
 kCFURLComponentResourceSpecifier = 4,

 kCFURLComponentUser = 5,
 kCFURLComponentPassword = 6,
 kCFURLComponentUserInfo = 7,
 kCFURLComponentHost = 8,
 kCFURLComponentPort = 9,
 kCFURLComponentParameterString = 10,
 kCFURLComponentQuery = 11,
 kCFURLComponentFragment = 12
};
typedef CFIndex CFURLComponentType;
# 355 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFRange CFURLGetByteRangeForComponent(CFURLRef url, CFURLComponentType component, CFRange *rangeIncludingSeparators) ;
# 366 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFStringRef CFURLCreateStringByReplacingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveEscaped);



extern
CFStringRef CFURLCreateStringByReplacingPercentEscapesUsingEncoding(CFAllocatorRef allocator, CFStringRef origString, CFStringRef charsToLeaveEscaped, CFStringEncoding encoding) ;
# 388 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURL.h" 3
extern
CFStringRef CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding);




struct FSRef;

extern
CFURLRef CFURLCreateFromFSRef(CFAllocatorRef allocator, const struct FSRef *fsRef);

extern
Boolean CFURLGetFSRef(CFURLRef url, struct FSRef *fsRef);





}
# 12 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFRunLoop.h" 1 3
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFRunLoop.h" 3
# 1 "/usr/include/mach/port.h" 1 3 4
# 86 "/usr/include/mach/port.h" 3 4
# 1 "/usr/include/mach/boolean.h" 1 3 4
# 68 "/usr/include/mach/boolean.h" 3 4
# 1 "/usr/include/mach/machine/boolean.h" 1 3 4
# 28 "/usr/include/mach/machine/boolean.h" 3 4
# 1 "/usr/include/mach/ppc/boolean.h" 1 3 4
# 66 "/usr/include/mach/ppc/boolean.h" 3 4
typedef int boolean_t;
# 29 "/usr/include/mach/machine/boolean.h" 2 3 4
# 69 "/usr/include/mach/boolean.h" 2 3 4
# 87 "/usr/include/mach/port.h" 2 3 4
# 1 "/usr/include/mach/machine/vm_types.h" 1 3 4
# 28 "/usr/include/mach/machine/vm_types.h" 3 4
# 1 "/usr/include/mach/ppc/vm_types.h" 1 3 4
# 68 "/usr/include/mach/ppc/vm_types.h" 3 4
# 1 "/usr/include/ppc/vmparam.h" 1 3 4
# 69 "/usr/include/mach/ppc/vm_types.h" 2 3 4
# 88 "/usr/include/mach/ppc/vm_types.h" 3 4
typedef __darwin_natural_t natural_t;
typedef int integer_t;
# 99 "/usr/include/mach/ppc/vm_types.h" 3 4
typedef natural_t vm_offset_t;
typedef natural_t vm_size_t;
# 121 "/usr/include/mach/ppc/vm_types.h" 3 4
typedef uint64_t mach_vm_address_t;
typedef uint64_t mach_vm_offset_t;
typedef uint64_t mach_vm_size_t;



typedef uint64_t vm_map_offset_t;
typedef uint64_t vm_map_address_t;
typedef uint64_t vm_map_size_t;
# 29 "/usr/include/mach/machine/vm_types.h" 2 3 4
# 88 "/usr/include/mach/port.h" 2 3 4
# 101 "/usr/include/mach/port.h" 3 4
typedef natural_t mach_port_name_t;
typedef mach_port_name_t *mach_port_name_array_t;
# 123 "/usr/include/mach/port.h" 3 4
typedef mach_port_name_t mach_port_t;



typedef mach_port_t *mach_port_array_t;
# 185 "/usr/include/mach/port.h" 3 4
typedef natural_t mach_port_right_t;
# 195 "/usr/include/mach/port.h" 3 4
typedef natural_t mach_port_type_t;
typedef mach_port_type_t *mach_port_type_array_t;
# 228 "/usr/include/mach/port.h" 3 4
typedef natural_t mach_port_urefs_t;
typedef integer_t mach_port_delta_t;



typedef natural_t mach_port_seqno_t;
typedef natural_t mach_port_mscount_t;
typedef natural_t mach_port_msgcount_t;
typedef natural_t mach_port_rights_t;






typedef unsigned int mach_port_srights_t;

typedef struct mach_port_status {
 mach_port_rights_t mps_pset;
 mach_port_seqno_t mps_seqno;
 mach_port_mscount_t mps_mscount;
 mach_port_msgcount_t mps_qlimit;
 mach_port_msgcount_t mps_msgcount;
 mach_port_rights_t mps_sorights;
 boolean_t mps_srights;
 boolean_t mps_pdrequest;
 boolean_t mps_nsrequest;
 natural_t mps_flags;
} mach_port_status_t;
# 267 "/usr/include/mach/port.h" 3 4
typedef struct mach_port_limits {
 mach_port_msgcount_t mpl_qlimit;
} mach_port_limits_t;

typedef integer_t *mach_port_info_t;


typedef int mach_port_flavor_t;
# 289 "/usr/include/mach/port.h" 3 4
typedef struct mach_port_qos {
 unsigned int name:1;
 unsigned int prealloc:1;
 boolean_t pad1:30;
 natural_t len;
} mach_port_qos_t;
# 14 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFRunLoop.h" 2 3



extern "C" {


typedef struct __CFRunLoop * CFRunLoopRef;

typedef struct __CFRunLoopSource * CFRunLoopSourceRef;

typedef struct __CFRunLoopObserver * CFRunLoopObserverRef;

typedef struct __CFRunLoopTimer * CFRunLoopTimerRef;


enum {
    kCFRunLoopRunFinished = 1,
    kCFRunLoopRunStopped = 2,
    kCFRunLoopRunTimedOut = 3,
    kCFRunLoopRunHandledSource = 4
};


enum {
    kCFRunLoopEntry = (1 << 0),
    kCFRunLoopBeforeTimers = (1 << 1),
    kCFRunLoopBeforeSources = (1 << 2),
    kCFRunLoopBeforeWaiting = (1 << 5),
    kCFRunLoopAfterWaiting = (1 << 6),
    kCFRunLoopExit = (1 << 7),
    kCFRunLoopAllActivities = 0x0FFFFFFFU
};
typedef CFOptionFlags CFRunLoopActivity;

extern const CFStringRef kCFRunLoopDefaultMode;
extern const CFStringRef kCFRunLoopCommonModes;

extern CFTypeID CFRunLoopGetTypeID(void);

extern CFRunLoopRef CFRunLoopGetCurrent(void);
extern CFRunLoopRef CFRunLoopGetMain(void) ;

extern CFStringRef CFRunLoopCopyCurrentMode(CFRunLoopRef rl);

extern CFArrayRef CFRunLoopCopyAllModes(CFRunLoopRef rl);

extern void CFRunLoopAddCommonMode(CFRunLoopRef rl, CFStringRef mode);

extern CFAbsoluteTime CFRunLoopGetNextTimerFireDate(CFRunLoopRef rl, CFStringRef mode);

extern void CFRunLoopRun(void);
extern SInt32 CFRunLoopRunInMode(CFStringRef mode, CFTimeInterval seconds, Boolean returnAfterSourceHandled);
extern Boolean CFRunLoopIsWaiting(CFRunLoopRef rl);
extern void CFRunLoopWakeUp(CFRunLoopRef rl);
extern void CFRunLoopStop(CFRunLoopRef rl);

extern Boolean CFRunLoopContainsSource(CFRunLoopRef rl, CFRunLoopSourceRef source, CFStringRef mode);
extern void CFRunLoopAddSource(CFRunLoopRef rl, CFRunLoopSourceRef source, CFStringRef mode);
extern void CFRunLoopRemoveSource(CFRunLoopRef rl, CFRunLoopSourceRef source, CFStringRef mode);

extern Boolean CFRunLoopContainsObserver(CFRunLoopRef rl, CFRunLoopObserverRef observer, CFStringRef mode);
extern void CFRunLoopAddObserver(CFRunLoopRef rl, CFRunLoopObserverRef observer, CFStringRef mode);
extern void CFRunLoopRemoveObserver(CFRunLoopRef rl, CFRunLoopObserverRef observer, CFStringRef mode);

extern Boolean CFRunLoopContainsTimer(CFRunLoopRef rl, CFRunLoopTimerRef timer, CFStringRef mode);
extern void CFRunLoopAddTimer(CFRunLoopRef rl, CFRunLoopTimerRef timer, CFStringRef mode);
extern void CFRunLoopRemoveTimer(CFRunLoopRef rl, CFRunLoopTimerRef timer, CFStringRef mode);

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
    Boolean (*equal)(const void *info1, const void *info2);
    CFHashCode (*hash)(const void *info);
    void (*schedule)(void *info, CFRunLoopRef rl, CFStringRef mode);
    void (*cancel)(void *info, CFRunLoopRef rl, CFStringRef mode);
    void (*perform)(void *info);
} CFRunLoopSourceContext;

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
    Boolean (*equal)(const void *info1, const void *info2);
    CFHashCode (*hash)(const void *info);

    mach_port_t (*getPort)(void *info);
    void * (*perform)(void *msg, CFIndex size, CFAllocatorRef allocator, void *info);




} CFRunLoopSourceContext1;

extern CFTypeID CFRunLoopSourceGetTypeID(void);

extern CFRunLoopSourceRef CFRunLoopSourceCreate(CFAllocatorRef allocator, CFIndex order, CFRunLoopSourceContext *context);

extern CFIndex CFRunLoopSourceGetOrder(CFRunLoopSourceRef source);
extern void CFRunLoopSourceInvalidate(CFRunLoopSourceRef source);
extern Boolean CFRunLoopSourceIsValid(CFRunLoopSourceRef source);
extern void CFRunLoopSourceGetContext(CFRunLoopSourceRef source, CFRunLoopSourceContext *context);
extern void CFRunLoopSourceSignal(CFRunLoopSourceRef source);

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
} CFRunLoopObserverContext;

typedef void (*CFRunLoopObserverCallBack)(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info);

extern CFTypeID CFRunLoopObserverGetTypeID(void);

extern CFRunLoopObserverRef CFRunLoopObserverCreate(CFAllocatorRef allocator, CFOptionFlags activities, Boolean repeats, CFIndex order, CFRunLoopObserverCallBack callout, CFRunLoopObserverContext *context);

extern CFOptionFlags CFRunLoopObserverGetActivities(CFRunLoopObserverRef observer);
extern Boolean CFRunLoopObserverDoesRepeat(CFRunLoopObserverRef observer);
extern CFIndex CFRunLoopObserverGetOrder(CFRunLoopObserverRef observer);
extern void CFRunLoopObserverInvalidate(CFRunLoopObserverRef observer);
extern Boolean CFRunLoopObserverIsValid(CFRunLoopObserverRef observer);
extern void CFRunLoopObserverGetContext(CFRunLoopObserverRef observer, CFRunLoopObserverContext *context);

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
} CFRunLoopTimerContext;

typedef void (*CFRunLoopTimerCallBack)(CFRunLoopTimerRef timer, void *info);

extern CFTypeID CFRunLoopTimerGetTypeID(void);

extern CFRunLoopTimerRef CFRunLoopTimerCreate(CFAllocatorRef allocator, CFAbsoluteTime fireDate, CFTimeInterval interval, CFOptionFlags flags, CFIndex order, CFRunLoopTimerCallBack callout, CFRunLoopTimerContext *context);
extern CFAbsoluteTime CFRunLoopTimerGetNextFireDate(CFRunLoopTimerRef timer);
extern void CFRunLoopTimerSetNextFireDate(CFRunLoopTimerRef timer, CFAbsoluteTime fireDate);
extern CFTimeInterval CFRunLoopTimerGetInterval(CFRunLoopTimerRef timer);
extern Boolean CFRunLoopTimerDoesRepeat(CFRunLoopTimerRef timer);
extern CFIndex CFRunLoopTimerGetOrder(CFRunLoopTimerRef timer);
extern void CFRunLoopTimerInvalidate(CFRunLoopTimerRef timer);
extern Boolean CFRunLoopTimerIsValid(CFRunLoopTimerRef timer);
extern void CFRunLoopTimerGetContext(CFRunLoopTimerRef timer, CFRunLoopTimerContext *context);


}
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSocket.h" 1 3
# 14 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSocket.h" 3
typedef int CFSocketNativeHandle;






extern "C" {


typedef struct __CFSocket * CFSocketRef;
# 104 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSocket.h" 3
enum {
    kCFSocketSuccess = 0,
    kCFSocketError = -1,
    kCFSocketTimeout = -2
};
typedef CFIndex CFSocketError;

typedef struct {
    SInt32 protocolFamily;
    SInt32 socketType;
    SInt32 protocol;
    CFDataRef address;
} CFSocketSignature;


enum {
    kCFSocketNoCallBack = 0,
    kCFSocketReadCallBack = 1,
    kCFSocketAcceptCallBack = 2,
    kCFSocketDataCallBack = 3,
    kCFSocketConnectCallBack = 4

    ,
    kCFSocketWriteCallBack = 8

};
typedef CFOptionFlags CFSocketCallBackType;



enum {
    kCFSocketAutomaticallyReenableReadCallBack = 1,
    kCFSocketAutomaticallyReenableAcceptCallBack = 2,
    kCFSocketAutomaticallyReenableDataCallBack = 3,
    kCFSocketAutomaticallyReenableWriteCallBack = 8,
    kCFSocketCloseOnInvalidate = 128
};


typedef void (*CFSocketCallBack)(CFSocketRef s, CFSocketCallBackType type, CFDataRef address, const void *data, void *info);


typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
} CFSocketContext;

extern CFTypeID CFSocketGetTypeID(void);

extern CFSocketRef CFSocketCreate(CFAllocatorRef allocator, SInt32 protocolFamily, SInt32 socketType, SInt32 protocol, CFOptionFlags callBackTypes, CFSocketCallBack callout, const CFSocketContext *context);
extern CFSocketRef CFSocketCreateWithNative(CFAllocatorRef allocator, CFSocketNativeHandle sock, CFOptionFlags callBackTypes, CFSocketCallBack callout, const CFSocketContext *context);
extern CFSocketRef CFSocketCreateWithSocketSignature(CFAllocatorRef allocator, const CFSocketSignature *signature, CFOptionFlags callBackTypes, CFSocketCallBack callout, const CFSocketContext *context);
extern CFSocketRef CFSocketCreateConnectedToSocketSignature(CFAllocatorRef allocator, const CFSocketSignature *signature, CFOptionFlags callBackTypes, CFSocketCallBack callout, const CFSocketContext *context, CFTimeInterval timeout);


extern CFSocketError CFSocketSetAddress(CFSocketRef s, CFDataRef address);
extern CFSocketError CFSocketConnectToAddress(CFSocketRef s, CFDataRef address, CFTimeInterval timeout);
extern void CFSocketInvalidate(CFSocketRef s);

extern Boolean CFSocketIsValid(CFSocketRef s);
extern CFDataRef CFSocketCopyAddress(CFSocketRef s);
extern CFDataRef CFSocketCopyPeerAddress(CFSocketRef s);
extern void CFSocketGetContext(CFSocketRef s, CFSocketContext *context);
extern CFSocketNativeHandle CFSocketGetNative(CFSocketRef s);

extern CFRunLoopSourceRef CFSocketCreateRunLoopSource(CFAllocatorRef allocator, CFSocketRef s, CFIndex order);


extern CFOptionFlags CFSocketGetSocketFlags(CFSocketRef s);
extern void CFSocketSetSocketFlags(CFSocketRef s, CFOptionFlags flags);
extern void CFSocketDisableCallBacks(CFSocketRef s, CFOptionFlags callBackTypes);
extern void CFSocketEnableCallBacks(CFSocketRef s, CFOptionFlags callBackTypes);



extern CFSocketError CFSocketSendData(CFSocketRef s, CFDataRef address, CFDataRef data, CFTimeInterval timeout);
# 201 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSocket.h" 3
extern CFSocketError CFSocketRegisterValue(const CFSocketSignature *nameServerSignature, CFTimeInterval timeout, CFStringRef name, CFPropertyListRef value);
extern CFSocketError CFSocketCopyRegisteredValue(const CFSocketSignature *nameServerSignature, CFTimeInterval timeout, CFStringRef name, CFPropertyListRef *value, CFDataRef *nameServerAddress);

extern CFSocketError CFSocketRegisterSocketSignature(const CFSocketSignature *nameServerSignature, CFTimeInterval timeout, CFStringRef name, const CFSocketSignature *signature);
extern CFSocketError CFSocketCopyRegisteredSocketSignature(const CFSocketSignature *nameServerSignature, CFTimeInterval timeout, CFStringRef name, CFSocketSignature *signature, CFDataRef *nameServerAddress);

extern CFSocketError CFSocketUnregister(const CFSocketSignature *nameServerSignature, CFTimeInterval timeout, CFStringRef name);

extern void CFSocketSetDefaultNameRegistryPortNumber(UInt16 port);
extern UInt16 CFSocketGetDefaultNameRegistryPortNumber(void);


extern const CFStringRef kCFSocketCommandKey;
extern const CFStringRef kCFSocketNameKey;
extern const CFStringRef kCFSocketValueKey;
extern const CFStringRef kCFSocketResultKey;
extern const CFStringRef kCFSocketErrorKey;
extern const CFStringRef kCFSocketRegisterCommand;
extern const CFStringRef kCFSocketRetrieveCommand;


}
# 14 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 2 3



extern "C" {


enum {
    kCFStreamStatusNotOpen = 0,
    kCFStreamStatusOpening,
    kCFStreamStatusOpen,
    kCFStreamStatusReading,
    kCFStreamStatusWriting,
    kCFStreamStatusAtEnd,
    kCFStreamStatusClosed,
    kCFStreamStatusError
};
typedef CFIndex CFStreamStatus;

enum {
    kCFStreamEventNone = 0,
    kCFStreamEventOpenCompleted = 1,
    kCFStreamEventHasBytesAvailable = 2,
    kCFStreamEventCanAcceptBytes = 4,
    kCFStreamEventErrorOccurred = 8,
    kCFStreamEventEndEncountered = 16
};
typedef CFOptionFlags CFStreamEventType;

typedef struct {
    CFIndex version;
    void *info;
    void *(*retain)(void *info);
    void (*release)(void *info);
    CFStringRef (*copyDescription)(void *info);
} CFStreamClientContext;

typedef struct __CFReadStream * CFReadStreamRef;
typedef struct __CFWriteStream * CFWriteStreamRef;

typedef void (*CFReadStreamClientCallBack)(CFReadStreamRef stream, CFStreamEventType type, void *clientCallBackInfo);
typedef void (*CFWriteStreamClientCallBack)(CFWriteStreamRef stream, CFStreamEventType type, void *clientCallBackInfo);

extern
CFTypeID CFReadStreamGetTypeID(void);
extern
CFTypeID CFWriteStreamGetTypeID(void);




extern
const CFStringRef kCFStreamPropertyDataWritten;


extern
CFReadStreamRef CFReadStreamCreateWithBytesNoCopy(CFAllocatorRef alloc, const UInt8 *bytes, CFIndex length, CFAllocatorRef bytesDeallocator);


extern
CFWriteStreamRef CFWriteStreamCreateWithBuffer(CFAllocatorRef alloc, UInt8 *buffer, CFIndex bufferCapacity);


extern
CFWriteStreamRef CFWriteStreamCreateWithAllocatedBuffers(CFAllocatorRef alloc, CFAllocatorRef bufferAllocator);


extern
CFReadStreamRef CFReadStreamCreateWithFile(CFAllocatorRef alloc, CFURLRef fileURL);
extern
CFWriteStreamRef CFWriteStreamCreateWithFile(CFAllocatorRef alloc, CFURLRef fileURL);
extern
void CFStreamCreateBoundPair(CFAllocatorRef alloc, CFReadStreamRef *readStream, CFWriteStreamRef *writeStream, CFIndex transferBufferSize);



extern
const CFStringRef kCFStreamPropertyAppendToFile;




extern const CFStringRef kCFStreamPropertyFileCurrentOffset ;






extern
const CFStringRef kCFStreamPropertySocketNativeHandle;


extern
const CFStringRef kCFStreamPropertySocketRemoteHostName;


extern
const CFStringRef kCFStreamPropertySocketRemotePortNumber;


extern
void CFStreamCreatePairWithSocket(CFAllocatorRef alloc, CFSocketNativeHandle sock, CFReadStreamRef *readStream, CFWriteStreamRef *writeStream);
extern
void CFStreamCreatePairWithSocketToHost(CFAllocatorRef alloc, CFStringRef host, UInt32 port, CFReadStreamRef *readStream, CFWriteStreamRef *writeStream);

extern
void CFStreamCreatePairWithPeerSocketSignature(CFAllocatorRef alloc, const CFSocketSignature *signature, CFReadStreamRef *readStream, CFWriteStreamRef *writeStream);




extern
CFStreamStatus CFReadStreamGetStatus(CFReadStreamRef stream);
extern
CFStreamStatus CFWriteStreamGetStatus(CFWriteStreamRef stream);


extern
CFErrorRef CFReadStreamCopyError(CFReadStreamRef stream);
extern
CFErrorRef CFWriteStreamCopyError(CFWriteStreamRef stream);






extern
Boolean CFReadStreamOpen(CFReadStreamRef stream);
extern
Boolean CFWriteStreamOpen(CFWriteStreamRef stream);




extern
void CFReadStreamClose(CFReadStreamRef stream);
extern
void CFWriteStreamClose(CFWriteStreamRef stream);



extern
Boolean CFReadStreamHasBytesAvailable(CFReadStreamRef stream);
# 166 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 3
extern
CFIndex CFReadStreamRead(CFReadStreamRef stream, UInt8 *buffer, CFIndex bufferLength);
# 178 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 3
extern
const UInt8 *CFReadStreamGetBuffer(CFReadStreamRef stream, CFIndex maxBytesToRead, CFIndex *numBytesRead);



extern
Boolean CFWriteStreamCanAcceptBytes(CFWriteStreamRef stream);






extern
CFIndex CFWriteStreamWrite(CFWriteStreamRef stream, const UInt8 *buffer, CFIndex bufferLength);
# 202 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 3
extern
CFTypeRef CFReadStreamCopyProperty(CFReadStreamRef stream, CFStringRef propertyName);
extern
CFTypeRef CFWriteStreamCopyProperty(CFWriteStreamRef stream, CFStringRef propertyName);




extern
Boolean CFReadStreamSetProperty(CFReadStreamRef stream, CFStringRef propertyName, CFTypeRef propertyValue);
extern
Boolean CFWriteStreamSetProperty(CFWriteStreamRef stream, CFStringRef propertyName, CFTypeRef propertyValue);
# 231 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStream.h" 3
extern
Boolean CFReadStreamSetClient(CFReadStreamRef stream, CFOptionFlags streamEvents, CFReadStreamClientCallBack clientCB, CFStreamClientContext *clientContext);
extern
Boolean CFWriteStreamSetClient(CFWriteStreamRef stream, CFOptionFlags streamEvents, CFWriteStreamClientCallBack clientCB, CFStreamClientContext *clientContext);

extern
void CFReadStreamScheduleWithRunLoop(CFReadStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode);
extern
void CFWriteStreamScheduleWithRunLoop(CFWriteStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode);

extern
void CFReadStreamUnscheduleFromRunLoop(CFReadStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode);
extern
void CFWriteStreamUnscheduleFromRunLoop(CFWriteStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode);



enum {
    kCFStreamErrorDomainCustom = -1,
    kCFStreamErrorDomainPOSIX = 1,
    kCFStreamErrorDomainMacOSStatus
};
typedef CFIndex CFStreamErrorDomain;

typedef struct {
    CFStreamErrorDomain domain;
    SInt32 error;
} CFStreamError;
extern
CFStreamError CFReadStreamGetError(CFReadStreamRef stream);
extern
CFStreamError CFWriteStreamGetError(CFWriteStreamRef stream);



}
# 12 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 2 3


extern "C" {


enum {
    kCFPropertyListImmutable = 0,
    kCFPropertyListMutableContainers,
    kCFPropertyListMutableContainersAndLeaves
};
typedef CFOptionFlags CFPropertyListMutabilityOptions;
# 32 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 3
extern
CFPropertyListRef CFPropertyListCreateFromXMLData(CFAllocatorRef allocator, CFDataRef xmlData, CFOptionFlags mutabilityOption, CFStringRef *errorString);
# 45 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 3
extern
CFDataRef CFPropertyListCreateXMLData(CFAllocatorRef allocator, CFPropertyListRef propertyList);







extern
CFPropertyListRef CFPropertyListCreateDeepCopy(CFAllocatorRef allocator, CFPropertyListRef propertyList, CFOptionFlags mutabilityOption);



enum {
    kCFPropertyListOpenStepFormat = 1,
    kCFPropertyListXMLFormat_v1_0 = 100,
    kCFPropertyListBinaryFormat_v1_0 = 200
};
typedef CFIndex CFPropertyListFormat;

extern
Boolean CFPropertyListIsValid(CFPropertyListRef plist, CFPropertyListFormat format);







extern
CFIndex CFPropertyListWriteToStream(CFPropertyListRef propertyList, CFWriteStreamRef stream, CFPropertyListFormat format, CFStringRef *errorString);
# 87 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 3
extern
CFPropertyListRef CFPropertyListCreateFromStream(CFAllocatorRef allocator, CFReadStreamRef stream, CFIndex streamLength, CFOptionFlags mutabilityOption, CFPropertyListFormat *format, CFStringRef *errorString);
# 103 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPropertyList.h" 3
}
# 48 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 1 3
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern "C" {
# 27 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
typedef const void * (*CFSetRetainCallBack)(CFAllocatorRef allocator, const void *value);







typedef void (*CFSetReleaseCallBack)(CFAllocatorRef allocator, const void *value);







typedef CFStringRef (*CFSetCopyDescriptionCallBack)(const void *value);
# 52 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
typedef Boolean (*CFSetEqualCallBack)(const void *value1, const void *value2);







typedef CFHashCode (*CFSetHashCallBack)(const void *value);
# 86 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
typedef struct {
    CFIndex version;
    CFSetRetainCallBack retain;
    CFSetReleaseCallBack release;
    CFSetCopyDescriptionCallBack copyDescription;
    CFSetEqualCallBack equal;
    CFSetHashCallBack hash;
} CFSetCallBacks;






extern
const CFSetCallBacks kCFTypeSetCallBacks;







extern
const CFSetCallBacks kCFCopyStringSetCallBacks;
# 120 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
typedef void (*CFSetApplierFunction)(const void *value, void *context);





typedef const struct __CFSet * CFSetRef;





typedef struct __CFSet * CFMutableSetRef;





extern
CFTypeID CFSetGetTypeID(void);
# 187 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
CFSetRef CFSetCreate(CFAllocatorRef allocator, const void **values, CFIndex numValues, const CFSetCallBacks *callBacks);
# 208 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
CFSetRef CFSetCreateCopy(CFAllocatorRef allocator, CFSetRef theSet);
# 255 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
CFMutableSetRef CFSetCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFSetCallBacks *callBacks);
# 284 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
CFMutableSetRef CFSetCreateMutableCopy(CFAllocatorRef allocator, CFIndex capacity, CFSetRef theSet);
# 294 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
CFIndex CFSetGetCount(CFSetRef theSet);
# 312 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
CFIndex CFSetGetCountOfValue(CFSetRef theSet, const void *value);
# 328 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
Boolean CFSetContainsValue(CFSetRef theSet, const void *value);
# 343 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
const void *CFSetGetValue(CFSetRef theSet, const void *value);
# 367 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
Boolean CFSetGetValueIfPresent(CFSetRef theSet, const void *candidate, const void **value);
# 381 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetGetValues(CFSetRef theSet, const void **values);
# 401 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetApplyFunction(CFSetRef theSet, CFSetApplierFunction applier, void *context);
# 417 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetAddValue(CFMutableSetRef theSet, const void *value);
# 436 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetReplaceValue(CFMutableSetRef theSet, const void *value);
# 456 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetSetValue(CFMutableSetRef theSet, const void *value);
# 471 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetRemoveValue(CFMutableSetRef theSet, const void *value);
# 481 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFSet.h" 3
extern
void CFSetRemoveAllValues(CFMutableSetRef theSet);


}
# 49 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3

# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStringEncodingExt.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFStringEncodingExt.h" 3
extern "C" {


enum {

    kCFStringEncodingMacJapanese = 1,
    kCFStringEncodingMacChineseTrad = 2,
    kCFStringEncodingMacKorean = 3,
    kCFStringEncodingMacArabic = 4,
    kCFStringEncodingMacHebrew = 5,
    kCFStringEncodingMacGreek = 6,
    kCFStringEncodingMacCyrillic = 7,
    kCFStringEncodingMacDevanagari = 9,
    kCFStringEncodingMacGurmukhi = 10,
    kCFStringEncodingMacGujarati = 11,
    kCFStringEncodingMacOriya = 12,
    kCFStringEncodingMacBengali = 13,
    kCFStringEncodingMacTamil = 14,
    kCFStringEncodingMacTelugu = 15,
    kCFStringEncodingMacKannada = 16,
    kCFStringEncodingMacMalayalam = 17,
    kCFStringEncodingMacSinhalese = 18,
    kCFStringEncodingMacBurmese = 19,
    kCFStringEncodingMacKhmer = 20,
    kCFStringEncodingMacThai = 21,
    kCFStringEncodingMacLaotian = 22,
    kCFStringEncodingMacGeorgian = 23,
    kCFStringEncodingMacArmenian = 24,
    kCFStringEncodingMacChineseSimp = 25,
    kCFStringEncodingMacTibetan = 26,
    kCFStringEncodingMacMongolian = 27,
    kCFStringEncodingMacEthiopic = 28,
    kCFStringEncodingMacCentralEurRoman = 29,
    kCFStringEncodingMacVietnamese = 30,
    kCFStringEncodingMacExtArabic = 31,

    kCFStringEncodingMacSymbol = 33,
    kCFStringEncodingMacDingbats = 34,
    kCFStringEncodingMacTurkish = 35,
    kCFStringEncodingMacCroatian = 36,
    kCFStringEncodingMacIcelandic = 37,
    kCFStringEncodingMacRomanian = 38,
    kCFStringEncodingMacCeltic = 39,
    kCFStringEncodingMacGaelic = 40,

    kCFStringEncodingMacFarsi = 0x8C,

    kCFStringEncodingMacUkrainian = 0x98,

    kCFStringEncodingMacInuit = 0xEC,
    kCFStringEncodingMacVT100 = 0xFC,

    kCFStringEncodingMacHFS = 0xFF,






    kCFStringEncodingISOLatin2 = 0x0202,
    kCFStringEncodingISOLatin3 = 0x0203,
    kCFStringEncodingISOLatin4 = 0x0204,
    kCFStringEncodingISOLatinCyrillic = 0x0205,
    kCFStringEncodingISOLatinArabic = 0x0206,
    kCFStringEncodingISOLatinGreek = 0x0207,
    kCFStringEncodingISOLatinHebrew = 0x0208,
    kCFStringEncodingISOLatin5 = 0x0209,
    kCFStringEncodingISOLatin6 = 0x020A,
    kCFStringEncodingISOLatinThai = 0x020B,
    kCFStringEncodingISOLatin7 = 0x020D,
    kCFStringEncodingISOLatin8 = 0x020E,
    kCFStringEncodingISOLatin9 = 0x020F,

    kCFStringEncodingISOLatin10 = 0x0210,



    kCFStringEncodingDOSLatinUS = 0x0400,
    kCFStringEncodingDOSGreek = 0x0405,
    kCFStringEncodingDOSBalticRim = 0x0406,
    kCFStringEncodingDOSLatin1 = 0x0410,
    kCFStringEncodingDOSGreek1 = 0x0411,
    kCFStringEncodingDOSLatin2 = 0x0412,
    kCFStringEncodingDOSCyrillic = 0x0413,
    kCFStringEncodingDOSTurkish = 0x0414,
    kCFStringEncodingDOSPortuguese = 0x0415,
    kCFStringEncodingDOSIcelandic = 0x0416,
    kCFStringEncodingDOSHebrew = 0x0417,
    kCFStringEncodingDOSCanadianFrench = 0x0418,
    kCFStringEncodingDOSArabic = 0x0419,
    kCFStringEncodingDOSNordic = 0x041A,
    kCFStringEncodingDOSRussian = 0x041B,
    kCFStringEncodingDOSGreek2 = 0x041C,
    kCFStringEncodingDOSThai = 0x041D,
    kCFStringEncodingDOSJapanese = 0x0420,
    kCFStringEncodingDOSChineseSimplif = 0x0421,
    kCFStringEncodingDOSKorean = 0x0422,
    kCFStringEncodingDOSChineseTrad = 0x0423,

    kCFStringEncodingWindowsLatin2 = 0x0501,
    kCFStringEncodingWindowsCyrillic = 0x0502,
    kCFStringEncodingWindowsGreek = 0x0503,
    kCFStringEncodingWindowsLatin5 = 0x0504,
    kCFStringEncodingWindowsHebrew = 0x0505,
    kCFStringEncodingWindowsArabic = 0x0506,
    kCFStringEncodingWindowsBalticRim = 0x0507,
    kCFStringEncodingWindowsVietnamese = 0x0508,
    kCFStringEncodingWindowsKoreanJohab = 0x0510,




    kCFStringEncodingANSEL = 0x0601,

    kCFStringEncodingJIS_X0201_76 = 0x0620,
    kCFStringEncodingJIS_X0208_83 = 0x0621,
    kCFStringEncodingJIS_X0208_90 = 0x0622,
    kCFStringEncodingJIS_X0212_90 = 0x0623,
    kCFStringEncodingJIS_C6226_78 = 0x0624,
    kCFStringEncodingShiftJIS_X0213_00 = 0x0628,

    kCFStringEncodingShiftJIS_X0213_MenKuTen = 0x0629,

    kCFStringEncodingGB_2312_80 = 0x0630,
    kCFStringEncodingGBK_95 = 0x0631,
    kCFStringEncodingGB_18030_2000 = 0x0632,
    kCFStringEncodingKSC_5601_87 = 0x0640,
    kCFStringEncodingKSC_5601_92_Johab = 0x0641,
    kCFStringEncodingCNS_11643_92_P1 = 0x0651,
    kCFStringEncodingCNS_11643_92_P2 = 0x0652,
    kCFStringEncodingCNS_11643_92_P3 = 0x0653,


    kCFStringEncodingISO_2022_JP = 0x0820,
    kCFStringEncodingISO_2022_JP_2 = 0x0821,
    kCFStringEncodingISO_2022_JP_1 = 0x0822,
    kCFStringEncodingISO_2022_JP_3 = 0x0823,
    kCFStringEncodingISO_2022_CN = 0x0830,
    kCFStringEncodingISO_2022_CN_EXT = 0x0831,
    kCFStringEncodingISO_2022_KR = 0x0840,


    kCFStringEncodingEUC_JP = 0x0920,
    kCFStringEncodingEUC_CN = 0x0930,
    kCFStringEncodingEUC_TW = 0x0931,
    kCFStringEncodingEUC_KR = 0x0940,


    kCFStringEncodingShiftJIS = 0x0A01,
    kCFStringEncodingKOI8_R = 0x0A02,
    kCFStringEncodingBig5 = 0x0A03,
    kCFStringEncodingMacRomanLatin1 = 0x0A04,
    kCFStringEncodingHZ_GB_2312 = 0x0A05,
    kCFStringEncodingBig5_HKSCS_1999 = 0x0A06,

    kCFStringEncodingVISCII = 0x0A07,
    kCFStringEncodingKOI8_U = 0x0A08,
    kCFStringEncodingBig5_E = 0x0A09,





    kCFStringEncodingNextStepJapanese = 0x0B02,



    kCFStringEncodingEBCDIC_US = 0x0C01,
    kCFStringEncodingEBCDIC_CP037 = 0x0C02
};
typedef CFIndex CFStringEncodings;


}
# 51 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTimeZone.h" 1 3
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTimeZone.h" 3
extern "C" {


extern
CFTypeID CFTimeZoneGetTypeID(void);

extern
CFTimeZoneRef CFTimeZoneCopySystem(void);

extern
void CFTimeZoneResetSystem(void);

extern
CFTimeZoneRef CFTimeZoneCopyDefault(void);

extern
void CFTimeZoneSetDefault(CFTimeZoneRef tz);

extern
CFArrayRef CFTimeZoneCopyKnownNames(void);

extern
CFDictionaryRef CFTimeZoneCopyAbbreviationDictionary(void);

extern
void CFTimeZoneSetAbbreviationDictionary(CFDictionaryRef dict);

extern
CFTimeZoneRef CFTimeZoneCreate(CFAllocatorRef allocator, CFStringRef name, CFDataRef data);

extern
CFTimeZoneRef CFTimeZoneCreateWithTimeIntervalFromGMT(CFAllocatorRef allocator, CFTimeInterval ti);

extern
CFTimeZoneRef CFTimeZoneCreateWithName(CFAllocatorRef allocator, CFStringRef name, Boolean tryAbbrev);

extern
CFStringRef CFTimeZoneGetName(CFTimeZoneRef tz);

extern
CFDataRef CFTimeZoneGetData(CFTimeZoneRef tz);

extern
CFTimeInterval CFTimeZoneGetSecondsFromGMT(CFTimeZoneRef tz, CFAbsoluteTime at);

extern
CFStringRef CFTimeZoneCopyAbbreviation(CFTimeZoneRef tz, CFAbsoluteTime at);

extern
Boolean CFTimeZoneIsDaylightSavingTime(CFTimeZoneRef tz, CFAbsoluteTime at);

extern
CFTimeInterval CFTimeZoneGetDaylightSavingTimeOffset(CFTimeZoneRef tz, CFAbsoluteTime at) ;

extern
CFAbsoluteTime CFTimeZoneGetNextDaylightSavingTimeTransition(CFTimeZoneRef tz, CFAbsoluteTime at) ;

enum {
 kCFTimeZoneNameStyleStandard,
 kCFTimeZoneNameStyleShortStandard,
 kCFTimeZoneNameStyleDaylightSaving,
 kCFTimeZoneNameStyleShortDaylightSaving
};
typedef CFIndex CFTimeZoneNameStyle;

extern
CFStringRef CFTimeZoneCopyLocalizedName(CFTimeZoneRef tz, CFTimeZoneNameStyle style, CFLocaleRef locale) ;

extern
const CFStringRef kCFTimeZoneSystemTimeZoneDidChangeNotification ;


}
# 52 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 1 3
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern "C" {
# 29 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
typedef const void * (*CFTreeRetainCallBack)(const void *info);







typedef void (*CFTreeReleaseCallBack)(const void *info);
# 46 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
typedef CFStringRef (*CFTreeCopyDescriptionCallBack)(const void *info);
# 65 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
typedef struct {
    CFIndex version;
    void * info;
    CFTreeRetainCallBack retain;
    CFTreeReleaseCallBack release;
    CFTreeCopyDescriptionCallBack copyDescription;
} CFTreeContext;
# 81 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
typedef void (*CFTreeApplierFunction)(const void *value, void *context);





typedef struct __CFTree * CFTreeRef;





extern
CFTypeID CFTreeGetTypeID(void);
# 113 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFTreeRef CFTreeCreate(CFAllocatorRef allocator, const CFTreeContext *context);
# 123 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFTreeRef CFTreeGetParent(CFTreeRef tree);
# 133 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFTreeRef CFTreeGetNextSibling(CFTreeRef tree);
# 143 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFTreeRef CFTreeGetFirstChild(CFTreeRef tree);
# 157 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeGetContext(CFTreeRef tree, CFTreeContext *context);
# 167 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFIndex CFTreeGetChildCount(CFTreeRef tree);
# 180 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFTreeRef CFTreeGetChildAtIndex(CFTreeRef tree, CFIndex idx);
# 193 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeGetChildren(CFTreeRef tree, CFTreeRef *children);
# 214 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeApplyFunctionToChildren(CFTreeRef tree, CFTreeApplierFunction applier, void *context);
# 224 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
CFTreeRef CFTreeFindRoot(CFTreeRef tree);
# 241 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeSetContext(CFTreeRef tree, const CFTreeContext *context);
# 254 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreePrependChild(CFTreeRef tree, CFTreeRef newChild);
# 267 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeAppendChild(CFTreeRef tree, CFTreeRef newChild);
# 282 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeInsertSibling(CFTreeRef tree, CFTreeRef newSibling);







extern
void CFTreeRemove(CFTreeRef tree);







extern
void CFTreeRemoveAllChildren(CFTreeRef tree);
# 320 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFTree.h" 3
extern
void CFTreeSortChildren(CFTreeRef tree, CFComparatorFunction comparator, void *context);


}
# 53 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3

# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLNode.h" 1 3
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLNode.h" 3
extern "C" {


enum {
 kCFXMLNodeCurrentVersion = 1
};

typedef const struct __CFXMLNode * CFXMLNodeRef;
typedef CFTreeRef CFXMLTreeRef;
# 46 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLNode.h" 3
enum {
    kCFXMLNodeTypeDocument = 1,
    kCFXMLNodeTypeElement = 2,
    kCFXMLNodeTypeAttribute = 3,
    kCFXMLNodeTypeProcessingInstruction = 4,
    kCFXMLNodeTypeComment = 5,
    kCFXMLNodeTypeText = 6,
    kCFXMLNodeTypeCDATASection = 7,
    kCFXMLNodeTypeDocumentFragment = 8,
    kCFXMLNodeTypeEntity = 9,
    kCFXMLNodeTypeEntityReference = 10,
    kCFXMLNodeTypeDocumentType = 11,
    kCFXMLNodeTypeWhitespace = 12,
    kCFXMLNodeTypeNotation = 13,
    kCFXMLNodeTypeElementTypeDeclaration = 14,
    kCFXMLNodeTypeAttributeListDeclaration = 15
};
typedef CFIndex CFXMLNodeTypeCode;

typedef struct {
    CFDictionaryRef attributes;
    CFArrayRef attributeOrder;
    Boolean isEmpty;
    char _reserved[3];
} CFXMLElementInfo;

typedef struct {
    CFStringRef dataString;
} CFXMLProcessingInstructionInfo;

typedef struct {
    CFURLRef sourceURL;
    CFStringEncoding encoding;
} CFXMLDocumentInfo;

typedef struct {
    CFURLRef systemID;
    CFStringRef publicID;
} CFXMLExternalID;

typedef struct {
    CFXMLExternalID externalID;
} CFXMLDocumentTypeInfo;

typedef struct {
    CFXMLExternalID externalID;
} CFXMLNotationInfo;

typedef struct {

    CFStringRef contentDescription;
} CFXMLElementTypeDeclarationInfo;

typedef struct {

    CFStringRef attributeName;
    CFStringRef typeString;
    CFStringRef defaultString;
} CFXMLAttributeDeclarationInfo;

typedef struct {
    CFIndex numberOfAttributes;
    CFXMLAttributeDeclarationInfo *attributes;
} CFXMLAttributeListDeclarationInfo;

enum {
    kCFXMLEntityTypeParameter,
    kCFXMLEntityTypeParsedInternal,
    kCFXMLEntityTypeParsedExternal,
    kCFXMLEntityTypeUnparsed,
    kCFXMLEntityTypeCharacter
};
typedef CFIndex CFXMLEntityTypeCode;

typedef struct {
    CFXMLEntityTypeCode entityType;
    CFStringRef replacementText;
    CFXMLExternalID entityID;
    CFStringRef notationName;
} CFXMLEntityInfo;

typedef struct {
    CFXMLEntityTypeCode entityType;
} CFXMLEntityReferenceInfo;
# 151 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLNode.h" 3
extern
CFTypeID CFXMLNodeGetTypeID(void);


extern
CFXMLNodeRef CFXMLNodeCreate(CFAllocatorRef alloc, CFXMLNodeTypeCode xmlType, CFStringRef dataString, const void *additionalInfoPtr, CFIndex version);


extern
CFXMLNodeRef CFXMLNodeCreateCopy(CFAllocatorRef alloc, CFXMLNodeRef origNode);

extern
CFXMLNodeTypeCode CFXMLNodeGetTypeCode(CFXMLNodeRef node);

extern
CFStringRef CFXMLNodeGetString(CFXMLNodeRef node);

extern
const void *CFXMLNodeGetInfoPtr(CFXMLNodeRef node);

extern
CFIndex CFXMLNodeGetVersion(CFXMLNodeRef node);




extern
CFXMLTreeRef CFXMLTreeCreateWithNode(CFAllocatorRef allocator, CFXMLNodeRef node);


extern
CFXMLNodeRef CFXMLTreeGetNode(CFXMLTreeRef xmlTree);


}
# 55 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLParser.h" 1 3
# 17 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLParser.h" 3
extern "C" {


typedef struct __CFXMLParser * CFXMLParserRef;
# 52 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLParser.h" 3
enum {
    kCFXMLParserValidateDocument = (1 << 0),
    kCFXMLParserSkipMetaData = (1 << 1),
    kCFXMLParserReplacePhysicalEntities = (1 << 2),
    kCFXMLParserSkipWhitespace = (1 << 3),
    kCFXMLParserResolveExternalEntities = (1 << 4),
    kCFXMLParserAddImpliedAttributes = (1 << 5),
    kCFXMLParserAllOptions = 0x00FFFFFF,
    kCFXMLParserNoOptions = 0
};
typedef CFOptionFlags CFXMLParserOptions;


enum {
    kCFXMLStatusParseNotBegun = -2,
    kCFXMLStatusParseInProgress = -1,
    kCFXMLStatusParseSuccessful = 0,
    kCFXMLErrorUnexpectedEOF = 1,
    kCFXMLErrorUnknownEncoding,
    kCFXMLErrorEncodingConversionFailure,
    kCFXMLErrorMalformedProcessingInstruction,
    kCFXMLErrorMalformedDTD,
    kCFXMLErrorMalformedName,
    kCFXMLErrorMalformedCDSect,
    kCFXMLErrorMalformedCloseTag,
    kCFXMLErrorMalformedStartTag,
    kCFXMLErrorMalformedDocument,
    kCFXMLErrorElementlessDocument,
    kCFXMLErrorMalformedComment,
    kCFXMLErrorMalformedCharacterReference,
    kCFXMLErrorMalformedParsedCharacterData,
    kCFXMLErrorNoData
};
typedef CFIndex CFXMLParserStatusCode;
# 129 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLParser.h" 3
typedef void * (*CFXMLParserCreateXMLStructureCallBack)(CFXMLParserRef parser, CFXMLNodeRef nodeDesc, void *info);
typedef void (*CFXMLParserAddChildCallBack)(CFXMLParserRef parser, void *parent, void *child, void *info);
typedef void (*CFXMLParserEndXMLStructureCallBack)(CFXMLParserRef parser, void *xmlType, void *info);
typedef CFDataRef (*CFXMLParserResolveExternalEntityCallBack)(CFXMLParserRef parser, CFXMLExternalID *extID, void *info);
typedef Boolean (*CFXMLParserHandleErrorCallBack)(CFXMLParserRef parser, CFXMLParserStatusCode error, void *info);
typedef struct {
    CFIndex version;
    CFXMLParserCreateXMLStructureCallBack createXMLStructure;
    CFXMLParserAddChildCallBack addChild;
    CFXMLParserEndXMLStructureCallBack endXMLStructure;
    CFXMLParserResolveExternalEntityCallBack resolveExternalEntity;
    CFXMLParserHandleErrorCallBack handleError;
} CFXMLParserCallBacks;

typedef const void * (*CFXMLParserRetainCallBack)(const void *info);
typedef void (*CFXMLParserReleaseCallBack)(const void *info);
typedef CFStringRef (*CFXMLParserCopyDescriptionCallBack)(const void *info);
typedef struct {
    CFIndex version;
    void * info;
    CFXMLParserRetainCallBack retain;
    CFXMLParserReleaseCallBack release;
    CFXMLParserCopyDescriptionCallBack copyDescription;
} CFXMLParserContext;

extern
CFTypeID CFXMLParserGetTypeID(void);
# 164 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFXMLParser.h" 3
extern
CFXMLParserRef CFXMLParserCreate(CFAllocatorRef allocator, CFDataRef xmlData, CFURLRef dataSource, CFOptionFlags parseOptions, CFIndex versionOfNodes, CFXMLParserCallBacks *callBacks, CFXMLParserContext *context);



extern
CFXMLParserRef CFXMLParserCreateWithDataFromURL(CFAllocatorRef allocator, CFURLRef dataSource, CFOptionFlags parseOptions, CFIndex versionOfNodes, CFXMLParserCallBacks *callBacks, CFXMLParserContext *context);

extern
void CFXMLParserGetContext(CFXMLParserRef parser, CFXMLParserContext *context);

extern
void CFXMLParserGetCallBacks(CFXMLParserRef parser, CFXMLParserCallBacks *callBacks);

extern
CFURLRef CFXMLParserGetSourceURL(CFXMLParserRef parser);


extern
CFIndex CFXMLParserGetLocation(CFXMLParserRef parser);


extern
CFIndex CFXMLParserGetLineNumber(CFXMLParserRef parser);


extern
void *CFXMLParserGetDocument(CFXMLParserRef parser);




extern
CFXMLParserStatusCode CFXMLParserGetStatusCode(CFXMLParserRef parser);

extern
CFStringRef CFXMLParserCopyErrorDescription(CFXMLParserRef parser);




extern
void CFXMLParserAbort(CFXMLParserRef parser, CFXMLParserStatusCode errorCode, CFStringRef errorDescription);






extern
Boolean CFXMLParserParse(CFXMLParserRef parser);







extern
CFXMLTreeRef CFXMLTreeCreateFromData(CFAllocatorRef allocator, CFDataRef xmlData, CFURLRef dataSource, CFOptionFlags parseOptions, CFIndex versionOfNodes);




extern
CFXMLTreeRef CFXMLTreeCreateFromDataWithError(CFAllocatorRef allocator, CFDataRef xmlData, CFURLRef dataSource, CFOptionFlags parseOptions, CFIndex versionOfNodes, CFDictionaryRef *errorDict) ;


extern
CFXMLTreeRef CFXMLTreeCreateWithDataFromURL(CFAllocatorRef allocator, CFURLRef dataSource, CFOptionFlags parseOptions, CFIndex versionOfNodes);






extern
CFDataRef CFXMLTreeCreateXMLData(CFAllocatorRef allocator, CFXMLTreeRef xmlTree);







extern
CFStringRef CFXMLCreateStringByEscapingEntities(CFAllocatorRef allocator, CFStringRef string, CFDictionaryRef entitiesDictionary) ;

extern
CFStringRef CFXMLCreateStringByUnescapingEntities(CFAllocatorRef allocator, CFStringRef string, CFDictionaryRef entitiesDictionary) ;


extern const CFStringRef kCFXMLTreeErrorDescription ;


extern const CFStringRef kCFXMLTreeErrorLineNumber ;


extern const CFStringRef kCFXMLTreeErrorLocation ;


extern const CFStringRef kCFXMLTreeErrorStatusCode ;



}
# 56 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 1 3
# 17 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern "C" {


typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
} CFBinaryHeapCompareContext;
# 51 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
typedef struct {
    CFIndex version;
    const void *(*retain)(CFAllocatorRef allocator, const void *ptr);
    void (*release)(CFAllocatorRef allocator, const void *ptr);
    CFStringRef (*copyDescription)(const void *ptr);
    CFComparisonResult (*compare)(const void *ptr1, const void *ptr2, void *context);
} CFBinaryHeapCallBacks;







extern const CFBinaryHeapCallBacks kCFStringBinaryHeapCallBacks;
# 75 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
typedef void (*CFBinaryHeapApplierFunction)(const void *val, void *context);





typedef struct __CFBinaryHeap * CFBinaryHeapRef;





extern CFTypeID CFBinaryHeapGetTypeID(void);
# 132 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern CFBinaryHeapRef CFBinaryHeapCreate(CFAllocatorRef allocator, CFIndex capacity, const CFBinaryHeapCallBacks *callBacks, const CFBinaryHeapCompareContext *compareContext);
# 159 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern CFBinaryHeapRef CFBinaryHeapCreateCopy(CFAllocatorRef allocator, CFIndex capacity, CFBinaryHeapRef heap);
# 168 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern CFIndex CFBinaryHeapGetCount(CFBinaryHeapRef heap);
# 183 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern CFIndex CFBinaryHeapGetCountOfValue(CFBinaryHeapRef heap, const void *value);
# 198 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern Boolean CFBinaryHeapContainsValue(CFBinaryHeapRef heap, const void *value);
# 209 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern const void * CFBinaryHeapGetMinimum(CFBinaryHeapRef heap);
# 223 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern Boolean CFBinaryHeapGetMinimumIfPresent(CFBinaryHeapRef heap, const void **value);
# 235 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern void CFBinaryHeapGetValues(CFBinaryHeapRef heap, const void **values);
# 254 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern void CFBinaryHeapApplyFunction(CFBinaryHeapRef heap, CFBinaryHeapApplierFunction applier, void *context);
# 268 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern void CFBinaryHeapAddValue(CFBinaryHeapRef heap, const void *value);







extern void CFBinaryHeapRemoveMinimumValue(CFBinaryHeapRef heap);
# 285 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBinaryHeap.h" 3
extern void CFBinaryHeapRemoveAllValues(CFBinaryHeapRef heap);


}
# 57 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBitVector.h" 1 3
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBitVector.h" 3
extern "C" {


typedef UInt32 CFBit;

typedef const struct __CFBitVector * CFBitVectorRef;
typedef struct __CFBitVector * CFMutableBitVectorRef;

extern CFTypeID CFBitVectorGetTypeID(void);

extern CFBitVectorRef CFBitVectorCreate(CFAllocatorRef allocator, const UInt8 *bytes, CFIndex numBits);
extern CFBitVectorRef CFBitVectorCreateCopy(CFAllocatorRef allocator, CFBitVectorRef bv);
extern CFMutableBitVectorRef CFBitVectorCreateMutable(CFAllocatorRef allocator, CFIndex capacity);
extern CFMutableBitVectorRef CFBitVectorCreateMutableCopy(CFAllocatorRef allocator, CFIndex capacity, CFBitVectorRef bv);

extern CFIndex CFBitVectorGetCount(CFBitVectorRef bv);
extern CFIndex CFBitVectorGetCountOfBit(CFBitVectorRef bv, CFRange range, CFBit value);
extern Boolean CFBitVectorContainsBit(CFBitVectorRef bv, CFRange range, CFBit value);
extern CFBit CFBitVectorGetBitAtIndex(CFBitVectorRef bv, CFIndex idx);
extern void CFBitVectorGetBits(CFBitVectorRef bv, CFRange range, UInt8 *bytes);
extern CFIndex CFBitVectorGetFirstIndexOfBit(CFBitVectorRef bv, CFRange range, CFBit value);
extern CFIndex CFBitVectorGetLastIndexOfBit(CFBitVectorRef bv, CFRange range, CFBit value);

extern void CFBitVectorSetCount(CFMutableBitVectorRef bv, CFIndex count);
extern void CFBitVectorFlipBitAtIndex(CFMutableBitVectorRef bv, CFIndex idx);
extern void CFBitVectorFlipBits(CFMutableBitVectorRef bv, CFRange range);
extern void CFBitVectorSetBitAtIndex(CFMutableBitVectorRef bv, CFIndex idx, CFBit value);
extern void CFBitVectorSetBits(CFMutableBitVectorRef bv, CFRange range, CFBit value);
extern void CFBitVectorSetAllBits(CFMutableBitVectorRef bv, CFBit value);


}
# 58 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 1 3
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 3
extern "C" {


typedef struct __CFBundle *CFBundleRef;
typedef struct __CFBundle *CFPlugInRef;


extern
const CFStringRef kCFBundleInfoDictionaryVersionKey;

extern
const CFStringRef kCFBundleExecutableKey;

extern
const CFStringRef kCFBundleIdentifierKey;

extern
const CFStringRef kCFBundleVersionKey;



extern
const CFStringRef kCFBundleDevelopmentRegionKey;

extern
const CFStringRef kCFBundleNameKey;

extern
const CFStringRef kCFBundleLocalizationsKey ;




extern
CFBundleRef CFBundleGetMainBundle(void);

extern
CFBundleRef CFBundleGetBundleWithIdentifier(CFStringRef bundleID);







extern
CFArrayRef CFBundleGetAllBundles(void);




extern
CFTypeID CFBundleGetTypeID(void);

extern
CFBundleRef CFBundleCreate(CFAllocatorRef allocator, CFURLRef bundleURL);


extern
CFArrayRef CFBundleCreateBundlesFromDirectory(CFAllocatorRef allocator, CFURLRef directoryURL, CFStringRef bundleType);





extern
CFURLRef CFBundleCopyBundleURL(CFBundleRef bundle);

extern
CFTypeRef CFBundleGetValueForInfoDictionaryKey(CFBundleRef bundle, CFStringRef key);



extern
CFDictionaryRef CFBundleGetInfoDictionary(CFBundleRef bundle);



extern
CFDictionaryRef CFBundleGetLocalInfoDictionary(CFBundleRef bundle);


extern
void CFBundleGetPackageInfo(CFBundleRef bundle, UInt32 *packageType, UInt32 *packageCreator);

extern
CFStringRef CFBundleGetIdentifier(CFBundleRef bundle);

extern
UInt32 CFBundleGetVersionNumber(CFBundleRef bundle);

extern
CFStringRef CFBundleGetDevelopmentRegion(CFBundleRef bundle);

extern
CFURLRef CFBundleCopySupportFilesDirectoryURL(CFBundleRef bundle);

extern
CFURLRef CFBundleCopyResourcesDirectoryURL(CFBundleRef bundle);

extern
CFURLRef CFBundleCopyPrivateFrameworksURL(CFBundleRef bundle);

extern
CFURLRef CFBundleCopySharedFrameworksURL(CFBundleRef bundle);

extern
CFURLRef CFBundleCopySharedSupportURL(CFBundleRef bundle);

extern
CFURLRef CFBundleCopyBuiltInPlugInsURL(CFBundleRef bundle);






extern
CFDictionaryRef CFBundleCopyInfoDictionaryInDirectory(CFURLRef bundleURL);

extern
Boolean CFBundleGetPackageInfoInDirectory(CFURLRef url, UInt32 *packageType, UInt32 *packageCreator);



extern
CFURLRef CFBundleCopyResourceURL(CFBundleRef bundle, CFStringRef resourceName, CFStringRef resourceType, CFStringRef subDirName);

extern
CFArrayRef CFBundleCopyResourceURLsOfType(CFBundleRef bundle, CFStringRef resourceType, CFStringRef subDirName);

extern
CFStringRef CFBundleCopyLocalizedString(CFBundleRef bundle, CFStringRef key, CFStringRef value, CFStringRef tableName);
# 165 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 3
extern
CFURLRef CFBundleCopyResourceURLInDirectory(CFURLRef bundleURL, CFStringRef resourceName, CFStringRef resourceType, CFStringRef subDirName);

extern
CFArrayRef CFBundleCopyResourceURLsOfTypeInDirectory(CFURLRef bundleURL, CFStringRef resourceType, CFStringRef subDirName);






extern
CFArrayRef CFBundleCopyBundleLocalizations(CFBundleRef bundle);


extern
CFArrayRef CFBundleCopyPreferredLocalizationsFromArray(CFArrayRef locArray);






extern
CFArrayRef CFBundleCopyLocalizationsForPreferences(CFArrayRef locArray, CFArrayRef prefArray) ;
# 199 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 3
extern
CFURLRef CFBundleCopyResourceURLForLocalization(CFBundleRef bundle, CFStringRef resourceName, CFStringRef resourceType, CFStringRef subDirName, CFStringRef localizationName);

extern
CFArrayRef CFBundleCopyResourceURLsOfTypeForLocalization(CFBundleRef bundle, CFStringRef resourceType, CFStringRef subDirName, CFStringRef localizationName);
# 213 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 3
extern
CFDictionaryRef CFBundleCopyInfoDictionaryForURL(CFURLRef url) ;





extern
CFArrayRef CFBundleCopyLocalizationsForURL(CFURLRef url) ;






extern
CFArrayRef CFBundleCopyExecutableArchitecturesForURL(CFURLRef url) ;
# 239 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 3
extern
CFURLRef CFBundleCopyExecutableURL(CFBundleRef bundle);


enum {
    kCFBundleExecutableArchitectureI386 = 0x00000007,
    kCFBundleExecutableArchitecturePPC = 0x00000012,
    kCFBundleExecutableArchitectureX86_64 = 0x01000007,
    kCFBundleExecutableArchitecturePPC64 = 0x01000012
};


extern
CFArrayRef CFBundleCopyExecutableArchitectures(CFBundleRef bundle) ;





extern
Boolean CFBundlePreflightExecutable(CFBundleRef bundle, CFErrorRef *error) ;






extern
Boolean CFBundleLoadExecutableAndReturnError(CFBundleRef bundle, CFErrorRef *error) ;





extern
Boolean CFBundleLoadExecutable(CFBundleRef bundle);

extern
Boolean CFBundleIsExecutableLoaded(CFBundleRef bundle);

extern
void CFBundleUnloadExecutable(CFBundleRef bundle);

extern
void *CFBundleGetFunctionPointerForName(CFBundleRef bundle, CFStringRef functionName);

extern
void CFBundleGetFunctionPointersForNames(CFBundleRef bundle, CFArrayRef functionNames, void *ftbl[]);

extern
void *CFBundleGetDataPointerForName(CFBundleRef bundle, CFStringRef symbolName);

extern
void CFBundleGetDataPointersForNames(CFBundleRef bundle, CFArrayRef symbolNames, void *stbl[]);

extern
CFURLRef CFBundleCopyAuxiliaryExecutableURL(CFBundleRef bundle, CFStringRef executableName);
# 306 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBundle.h" 3
extern
CFPlugInRef CFBundleGetPlugIn(CFBundleRef bundle);






typedef SInt16 CFBundleRefNum;


extern
CFBundleRefNum CFBundleOpenBundleResourceMap(CFBundleRef bundle);






extern
SInt32 CFBundleOpenBundleResourceFiles(CFBundleRef bundle, CFBundleRefNum *refNum, CFBundleRefNum *localizedRefNum);



extern
void CFBundleCloseBundleResourceMap(CFBundleRef bundle, CFBundleRefNum refNum);


}
# 59 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFByteOrder.h" 1 3
# 10 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFByteOrder.h" 3
# 1 "/usr/include/libkern/OSByteOrder.h" 1 3 4
# 28 "/usr/include/libkern/OSByteOrder.h" 3 4
# 1 "/usr/include/libkern/_OSByteOrder.h" 1 3 4
# 29 "/usr/include/libkern/OSByteOrder.h" 2 3 4
# 38 "/usr/include/libkern/OSByteOrder.h" 3 4
# 1 "/usr/include/libkern/ppc/OSByteOrder.h" 1 3 4
# 41 "/usr/include/libkern/ppc/OSByteOrder.h" 3 4
static inline
uint16_t
OSReadSwapInt16(
    const volatile void * base,
    uintptr_t byteOffset
)
{
    uint16_t result;
    volatile uint16_t *addr = (volatile uint16_t *)((uintptr_t)base + byteOffset);

    __asm__ ("lhbrx %0, %2, %1"
             : "=r" (result)
             : "r" (base), "bO" (byteOffset), "m" (*addr));
    return result;
}

static inline
uint32_t
OSReadSwapInt32(
    const volatile void * base,
    uintptr_t byteOffset
)
{
    uint32_t result;
    volatile uint32_t *addr = (volatile uint32_t *)((uintptr_t)base + byteOffset);

    __asm__ ("lwbrx %0, %2, %1"
             : "=r" (result)
             : "r" (base), "bO" (byteOffset), "m" (*addr));
    return result;
}

static inline
uint64_t
OSReadSwapInt64(
    const volatile void * base,
    uintptr_t byteOffset
)
{
    volatile uint64_t *addr = (volatile uint64_t *)((uintptr_t)base + byteOffset);
    union {
        uint64_t u64;
        uint32_t u32[2];
    } u;

    __asm__ ("lwbrx %0, %3, %2\n\t"
             "lwbrx %1, %4, %2"
             : "=&r" (u.u32[1]), "=r" (u.u32[0])
             : "r" (base), "bO" (byteOffset), "b" (byteOffset + 4), "m" (*addr));
    return u.u64;
}



static inline
void
OSWriteSwapInt16(
    volatile void * base,
    uintptr_t byteOffset,
    uint16_t data
)
{
    volatile uint16_t *addr = (volatile uint16_t *)((uintptr_t)base + byteOffset);

    __asm__ ("sthbrx %1, %3, %2"
             : "=m" (*addr)
             : "r" (data), "r" (base), "bO" (byteOffset));
}

static inline
void
OSWriteSwapInt32(
    volatile void * base,
    uintptr_t byteOffset,
    uint32_t data
)
{
    volatile uint32_t *addr = (volatile uint32_t *)((uintptr_t)base + byteOffset);

    __asm__ ("stwbrx %1, %3, %2"
             : "=m" (*addr)
             : "r" (data), "r" (base), "bO" (byteOffset));
}

static inline
void
OSWriteSwapInt64(
    volatile void * base,
    uintptr_t byteOffset,
    uint64_t data
)
{
    volatile uint64_t *addr = (volatile uint64_t *)((uintptr_t)base + byteOffset);
    uint32_t hi = data >> 32;
    uint32_t lo = data & 0xffffffff;

    __asm__ ("stwbrx %1, %4, %3\n\t"
             "stwbrx %2, %5, %3"
             : "=m" (*addr)
             : "r" (lo), "r" (hi), "r" (base), "bO" (byteOffset), "b" (byteOffset + 4));
}



static inline
uint16_t
_OSSwapInt16(
    uint16_t data
)
{
    return OSReadSwapInt16(&data, 0);
}

static inline
uint32_t
_OSSwapInt32(
    uint32_t data
)
{
    return OSReadSwapInt32(&data, 0);
}

static inline
uint64_t
_OSSwapInt64(
    uint64_t data
)
{
    return OSReadSwapInt64(&data, 0);
}
# 39 "/usr/include/libkern/OSByteOrder.h" 2 3 4
# 55 "/usr/include/libkern/OSByteOrder.h" 3 4
enum {
    OSUnknownByteOrder,
    OSLittleEndian,
    OSBigEndian
};

static inline
int32_t
OSHostByteOrder(void) {



    return OSBigEndian;



}
# 84 "/usr/include/libkern/OSByteOrder.h" 3 4
static inline
uint16_t
_OSReadInt16(
    const volatile void * base,
    uintptr_t byteOffset
)
{
    return *(volatile uint16_t *)((uintptr_t)base + byteOffset);
}

static inline
uint32_t
_OSReadInt32(
    const volatile void * base,
    uintptr_t byteOffset
)
{
    return *(volatile uint32_t *)((uintptr_t)base + byteOffset);
}

static inline
uint64_t
_OSReadInt64(
    const volatile void * base,
    uintptr_t byteOffset
)
{
    return *(volatile uint64_t *)((uintptr_t)base + byteOffset);
}



static inline
void
_OSWriteInt16(
    volatile void * base,
    uintptr_t byteOffset,
    uint16_t data
)
{
    *(volatile uint16_t *)((uintptr_t)base + byteOffset) = data;
}

static inline
void
_OSWriteInt32(
    volatile void * base,
    uintptr_t byteOffset,
    uint32_t data
)
{
    *(volatile uint32_t *)((uintptr_t)base + byteOffset) = data;
}

static inline
void
_OSWriteInt64(
    volatile void * base,
    uintptr_t byteOffset,
    uint64_t data
)
{
    *(volatile uint64_t *)((uintptr_t)base + byteOffset) = data;
}
# 11 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFByteOrder.h" 2 3




extern "C" {


enum __CFByteOrder {
    CFByteOrderUnknown,
    CFByteOrderLittleEndian,
    CFByteOrderBigEndian
};
typedef CFIndex CFByteOrder;

static __inline__ __attribute__((always_inline)) CFByteOrder CFByteOrderGetCurrent(void) {

    int32_t byteOrder = OSHostByteOrder();
    switch (byteOrder) {
    case OSLittleEndian: return CFByteOrderLittleEndian;
    case OSBigEndian: return CFByteOrderBigEndian;
    }
    return CFByteOrderUnknown;
# 42 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFByteOrder.h" 3
}

static __inline__ __attribute__((always_inline)) uint16_t CFSwapInt16(uint16_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint16_t)((((__uint16_t)(arg) & 0xff00) >> 8) | (((__uint16_t)(arg) & 0x00ff) << 8))) : _OSSwapInt16(arg));





}

static __inline__ __attribute__((always_inline)) uint32_t CFSwapInt32(uint32_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint32_t)((((__uint32_t)(arg) & 0xff000000) >> 24) | (((__uint32_t)(arg) & 0x00ff0000) >> 8) | (((__uint32_t)(arg) & 0x0000ff00) << 8) | (((__uint32_t)(arg) & 0x000000ff) << 24))) : _OSSwapInt32(arg));





}

static __inline__ __attribute__((always_inline)) uint64_t CFSwapInt64(uint64_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint64_t)((((__uint64_t)(arg) & 0xff00000000000000ULL) >> 56) | (((__uint64_t)(arg) & 0x00ff000000000000ULL) >> 40) | (((__uint64_t)(arg) & 0x0000ff0000000000ULL) >> 24) | (((__uint64_t)(arg) & 0x000000ff00000000ULL) >> 8) | (((__uint64_t)(arg) & 0x00000000ff000000ULL) << 8) | (((__uint64_t)(arg) & 0x0000000000ff0000ULL) << 24) | (((__uint64_t)(arg) & 0x000000000000ff00ULL) << 40) | (((__uint64_t)(arg) & 0x00000000000000ffULL) << 56))) : _OSSwapInt64(arg));
# 77 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFByteOrder.h" 3
}

static __inline__ __attribute__((always_inline)) uint16_t CFSwapInt16BigToHost(uint16_t arg) {

    return ((uint16_t)(arg));





}

static __inline__ __attribute__((always_inline)) uint32_t CFSwapInt32BigToHost(uint32_t arg) {

    return ((uint32_t)(arg));





}

static __inline__ __attribute__((always_inline)) uint64_t CFSwapInt64BigToHost(uint64_t arg) {

    return ((uint64_t)(arg));





}

static __inline__ __attribute__((always_inline)) uint16_t CFSwapInt16HostToBig(uint16_t arg) {

    return ((uint16_t)(arg));





}

static __inline__ __attribute__((always_inline)) uint32_t CFSwapInt32HostToBig(uint32_t arg) {

    return ((uint32_t)(arg));





}

static __inline__ __attribute__((always_inline)) uint64_t CFSwapInt64HostToBig(uint64_t arg) {

    return ((uint64_t)(arg));





}

static __inline__ __attribute__((always_inline)) uint16_t CFSwapInt16LittleToHost(uint16_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint16_t)((((__uint16_t)(arg) & 0xff00) >> 8) | (((__uint16_t)(arg) & 0x00ff) << 8))) : _OSSwapInt16(arg));





}

static __inline__ __attribute__((always_inline)) uint32_t CFSwapInt32LittleToHost(uint32_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint32_t)((((__uint32_t)(arg) & 0xff000000) >> 24) | (((__uint32_t)(arg) & 0x00ff0000) >> 8) | (((__uint32_t)(arg) & 0x0000ff00) << 8) | (((__uint32_t)(arg) & 0x000000ff) << 24))) : _OSSwapInt32(arg));





}

static __inline__ __attribute__((always_inline)) uint64_t CFSwapInt64LittleToHost(uint64_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint64_t)((((__uint64_t)(arg) & 0xff00000000000000ULL) >> 56) | (((__uint64_t)(arg) & 0x00ff000000000000ULL) >> 40) | (((__uint64_t)(arg) & 0x0000ff0000000000ULL) >> 24) | (((__uint64_t)(arg) & 0x000000ff00000000ULL) >> 8) | (((__uint64_t)(arg) & 0x00000000ff000000ULL) << 8) | (((__uint64_t)(arg) & 0x0000000000ff0000ULL) << 24) | (((__uint64_t)(arg) & 0x000000000000ff00ULL) << 40) | (((__uint64_t)(arg) & 0x00000000000000ffULL) << 56))) : _OSSwapInt64(arg));





}

static __inline__ __attribute__((always_inline)) uint16_t CFSwapInt16HostToLittle(uint16_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint16_t)((((__uint16_t)(arg) & 0xff00) >> 8) | (((__uint16_t)(arg) & 0x00ff) << 8))) : _OSSwapInt16(arg));





}

static __inline__ __attribute__((always_inline)) uint32_t CFSwapInt32HostToLittle(uint32_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint32_t)((((__uint32_t)(arg) & 0xff000000) >> 24) | (((__uint32_t)(arg) & 0x00ff0000) >> 8) | (((__uint32_t)(arg) & 0x0000ff00) << 8) | (((__uint32_t)(arg) & 0x000000ff) << 24))) : _OSSwapInt32(arg));





}

static __inline__ __attribute__((always_inline)) uint64_t CFSwapInt64HostToLittle(uint64_t arg) {

    return (__builtin_constant_p(arg) ? ((__uint64_t)((((__uint64_t)(arg) & 0xff00000000000000ULL) >> 56) | (((__uint64_t)(arg) & 0x00ff000000000000ULL) >> 40) | (((__uint64_t)(arg) & 0x0000ff0000000000ULL) >> 24) | (((__uint64_t)(arg) & 0x000000ff00000000ULL) >> 8) | (((__uint64_t)(arg) & 0x00000000ff000000ULL) << 8) | (((__uint64_t)(arg) & 0x0000000000ff0000ULL) << 24) | (((__uint64_t)(arg) & 0x000000000000ff00ULL) << 40) | (((__uint64_t)(arg) & 0x00000000000000ffULL) << 56))) : _OSSwapInt64(arg));





}

typedef struct {uint32_t v;} CFSwappedFloat32;
typedef struct {uint64_t v;} CFSwappedFloat64;

static __inline__ __attribute__((always_inline)) CFSwappedFloat32 CFConvertFloat32HostToSwapped(Float32 arg) {
    union CFSwap {
 Float32 v;
 CFSwappedFloat32 sv;
    } result;
    result.v = arg;



    return result.sv;
}

static __inline__ __attribute__((always_inline)) Float32 CFConvertFloat32SwappedToHost(CFSwappedFloat32 arg) {
    union CFSwap {
 Float32 v;
 CFSwappedFloat32 sv;
    } result;
    result.sv = arg;



    return result.v;
}

static __inline__ __attribute__((always_inline)) CFSwappedFloat64 CFConvertFloat64HostToSwapped(Float64 arg) {
    union CFSwap {
 Float64 v;
 CFSwappedFloat64 sv;
    } result;
    result.v = arg;



    return result.sv;
}

static __inline__ __attribute__((always_inline)) Float64 CFConvertFloat64SwappedToHost(CFSwappedFloat64 arg) {
    union CFSwap {
 Float64 v;
 CFSwappedFloat64 sv;
    } result;
    result.sv = arg;



    return result.v;
}

static __inline__ __attribute__((always_inline)) CFSwappedFloat32 CFConvertFloatHostToSwapped(float arg) {
    union CFSwap {
 float v;
 CFSwappedFloat32 sv;
    } result;
    result.v = arg;



    return result.sv;
}

static __inline__ __attribute__((always_inline)) float CFConvertFloatSwappedToHost(CFSwappedFloat32 arg) {
    union CFSwap {
 float v;
 CFSwappedFloat32 sv;
    } result;
    result.sv = arg;



    return result.v;
}

static __inline__ __attribute__((always_inline)) CFSwappedFloat64 CFConvertDoubleHostToSwapped(double arg) {
    union CFSwap {
 double v;
 CFSwappedFloat64 sv;
    } result;
    result.v = arg;



    return result.sv;
}

static __inline__ __attribute__((always_inline)) double CFConvertDoubleSwappedToHost(CFSwappedFloat64 arg) {
    union CFSwap {
 double v;
 CFSwappedFloat64 sv;
    } result;
    result.sv = arg;



    return result.v;
}


}
# 60 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPlugIn.h" 1 3
# 17 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPlugIn.h" 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUUID.h" 1 3
# 12 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUUID.h" 3
extern "C" {


typedef const struct __CFUUID * CFUUIDRef;

typedef struct {
    UInt8 byte0;
    UInt8 byte1;
    UInt8 byte2;
    UInt8 byte3;
    UInt8 byte4;
    UInt8 byte5;
    UInt8 byte6;
    UInt8 byte7;
    UInt8 byte8;
    UInt8 byte9;
    UInt8 byte10;
    UInt8 byte11;
    UInt8 byte12;
    UInt8 byte13;
    UInt8 byte14;
    UInt8 byte15;
} CFUUIDBytes;






extern
CFTypeID CFUUIDGetTypeID(void);

extern
CFUUIDRef CFUUIDCreate(CFAllocatorRef alloc);


extern
CFUUIDRef CFUUIDCreateWithBytes(CFAllocatorRef alloc, UInt8 byte0, UInt8 byte1, UInt8 byte2, UInt8 byte3, UInt8 byte4, UInt8 byte5, UInt8 byte6, UInt8 byte7, UInt8 byte8, UInt8 byte9, UInt8 byte10, UInt8 byte11, UInt8 byte12, UInt8 byte13, UInt8 byte14, UInt8 byte15);


extern
CFUUIDRef CFUUIDCreateFromString(CFAllocatorRef alloc, CFStringRef uuidStr);


extern
CFStringRef CFUUIDCreateString(CFAllocatorRef alloc, CFUUIDRef uuid);


extern
CFUUIDRef CFUUIDGetConstantUUIDWithBytes(CFAllocatorRef alloc, UInt8 byte0, UInt8 byte1, UInt8 byte2, UInt8 byte3, UInt8 byte4, UInt8 byte5, UInt8 byte6, UInt8 byte7, UInt8 byte8, UInt8 byte9, UInt8 byte10, UInt8 byte11, UInt8 byte12, UInt8 byte13, UInt8 byte14, UInt8 byte15);


extern
CFUUIDBytes CFUUIDGetUUIDBytes(CFUUIDRef uuid);

extern
CFUUIDRef CFUUIDCreateFromUUIDBytes(CFAllocatorRef alloc, CFUUIDBytes bytes);


}
# 18 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPlugIn.h" 2 3


extern "C" {




extern
const CFStringRef kCFPlugInDynamicRegistrationKey;
extern
const CFStringRef kCFPlugInDynamicRegisterFunctionKey;
extern
const CFStringRef kCFPlugInUnloadFunctionKey;
extern
const CFStringRef kCFPlugInFactoriesKey;
extern
const CFStringRef kCFPlugInTypesKey;




typedef void (*CFPlugInDynamicRegisterFunction)(CFPlugInRef plugIn);
typedef void (*CFPlugInUnloadFunction)(CFPlugInRef plugIn);
typedef void *(*CFPlugInFactoryFunction)(CFAllocatorRef allocator, CFUUIDRef typeUUID);



extern
CFTypeID CFPlugInGetTypeID(void);

extern
CFPlugInRef CFPlugInCreate(CFAllocatorRef allocator, CFURLRef plugInURL);


extern
CFBundleRef CFPlugInGetBundle(CFPlugInRef plugIn);







extern
void CFPlugInSetLoadOnDemand(CFPlugInRef plugIn, Boolean flag);

extern
Boolean CFPlugInIsLoadOnDemand(CFPlugInRef plugIn);





extern
CFArrayRef CFPlugInFindFactoriesForPlugInType(CFUUIDRef typeUUID);


extern
CFArrayRef CFPlugInFindFactoriesForPlugInTypeInPlugIn(CFUUIDRef typeUUID, CFPlugInRef plugIn);


extern
void *CFPlugInInstanceCreate(CFAllocatorRef allocator, CFUUIDRef factoryUUID, CFUUIDRef typeUUID);






extern
Boolean CFPlugInRegisterFactoryFunction(CFUUIDRef factoryUUID, CFPlugInFactoryFunction func);

extern
Boolean CFPlugInRegisterFactoryFunctionByName(CFUUIDRef factoryUUID, CFPlugInRef plugIn, CFStringRef functionName);

extern
Boolean CFPlugInUnregisterFactory(CFUUIDRef factoryUUID);

extern
Boolean CFPlugInRegisterPlugInType(CFUUIDRef factoryUUID, CFUUIDRef typeUUID);

extern
Boolean CFPlugInUnregisterPlugInType(CFUUIDRef factoryUUID, CFUUIDRef typeUUID);





extern
void CFPlugInAddInstanceForFactory(CFUUIDRef factoryID);

extern
void CFPlugInRemoveInstanceForFactory(CFUUIDRef factoryID);




typedef struct __CFPlugInInstance *CFPlugInInstanceRef;

typedef Boolean (*CFPlugInInstanceGetInterfaceFunction)(CFPlugInInstanceRef instance, CFStringRef interfaceName, void **ftbl);
typedef void (*CFPlugInInstanceDeallocateInstanceDataFunction)(void *instanceData);

extern
Boolean CFPlugInInstanceGetInterfaceFunctionTable(CFPlugInInstanceRef instance, CFStringRef interfaceName, void **ftbl);
extern
CFStringRef CFPlugInInstanceGetFactoryName(CFPlugInInstanceRef instance);
extern
void *CFPlugInInstanceGetInstanceData(CFPlugInInstanceRef instance);
extern
CFTypeID CFPlugInInstanceGetTypeID(void);
extern
CFPlugInInstanceRef CFPlugInInstanceCreateWithInstanceDataSize(CFAllocatorRef allocator, CFIndex instanceDataSize, CFPlugInInstanceDeallocateInstanceDataFunction deallocateInstanceFunction, CFStringRef factoryName, CFPlugInInstanceGetInterfaceFunction getInterfaceFunction);


}
# 61 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPreferences.h" 1 3
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPreferences.h" 3
extern "C" {


extern
const CFStringRef kCFPreferencesAnyApplication;
extern
const CFStringRef kCFPreferencesCurrentApplication;
extern
const CFStringRef kCFPreferencesAnyHost;
extern
const CFStringRef kCFPreferencesCurrentHost;
extern
const CFStringRef kCFPreferencesAnyUser;
extern
const CFStringRef kCFPreferencesCurrentUser;
# 43 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPreferences.h" 3
extern
CFPropertyListRef CFPreferencesCopyAppValue(CFStringRef key, CFStringRef applicationID);




extern
Boolean CFPreferencesGetAppBooleanValue(CFStringRef key, CFStringRef applicationID, Boolean *keyExistsAndHasValidFormat);




extern
CFIndex CFPreferencesGetAppIntegerValue(CFStringRef key, CFStringRef applicationID, Boolean *keyExistsAndHasValidFormat);




extern
void CFPreferencesSetAppValue(CFStringRef key, CFPropertyListRef value, CFStringRef applicationID);





extern
void CFPreferencesAddSuitePreferencesToApp(CFStringRef applicationID, CFStringRef suiteID);

extern
void CFPreferencesRemoveSuitePreferencesFromApp(CFStringRef applicationID, CFStringRef suiteID);



extern
Boolean CFPreferencesAppSynchronize(CFStringRef applicationID);





extern
CFPropertyListRef CFPreferencesCopyValue(CFStringRef key, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName);





extern
CFDictionaryRef CFPreferencesCopyMultiple(CFArrayRef keysToFetch, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName);



extern
void CFPreferencesSetValue(CFStringRef key, CFPropertyListRef value, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName);



extern
void CFPreferencesSetMultiple(CFDictionaryRef keysToSet, CFArrayRef keysToRemove, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName);

extern
Boolean CFPreferencesSynchronize(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName);





extern
CFArrayRef CFPreferencesCopyApplicationList(CFStringRef userName, CFStringRef hostName);




extern
CFArrayRef CFPreferencesCopyKeyList(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName);
# 126 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFPreferences.h" 3
extern
Boolean CFPreferencesAppValueIsForced(CFStringRef key, CFStringRef applicationID);





}
# 62 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURLAccess.h" 1 3
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURLAccess.h" 3
extern "C" {
# 41 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURLAccess.h" 3
extern
Boolean CFURLCreateDataAndPropertiesFromResource(CFAllocatorRef alloc, CFURLRef url, CFDataRef *resourceData, CFDictionaryRef *properties, CFArrayRef desiredProperties, SInt32 *errorCode);
# 52 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURLAccess.h" 3
extern
Boolean CFURLWriteDataAndPropertiesToResource(CFURLRef url, CFDataRef dataToWrite, CFDictionaryRef propertiesToWrite, SInt32 *errorCode);



extern
Boolean CFURLDestroyResource(CFURLRef url, SInt32 *errorCode);



extern
CFTypeRef CFURLCreatePropertyFromResource(CFAllocatorRef alloc, CFURLRef url, CFStringRef property, SInt32 *errorCode);


enum {
    kCFURLUnknownError = -10,
    kCFURLUnknownSchemeError = -11,
    kCFURLResourceNotFoundError = -12,
    kCFURLResourceAccessViolationError = -13,
    kCFURLRemoteHostUnavailableError = -14,
    kCFURLImproperArgumentsError = -15,
    kCFURLUnknownPropertyKeyError = -16,
    kCFURLPropertyKeyUnavailableError = -17,
    kCFURLTimeoutError = -18
};
typedef CFIndex CFURLError;



extern
const CFStringRef kCFURLFileExists;
extern
const CFStringRef kCFURLFileDirectoryContents;
extern
const CFStringRef kCFURLFileLength;
extern
const CFStringRef kCFURLFileLastModificationTime;
extern
const CFStringRef kCFURLFilePOSIXMode;
extern
const CFStringRef kCFURLFileOwnerID;
extern
const CFStringRef kCFURLHTTPStatusCode;
extern
const CFStringRef kCFURLHTTPStatusLine;
# 110 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFURLAccess.h" 3
}
# 63 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3





# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFMessagePort.h" 1 3
# 13 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFMessagePort.h" 3
extern "C" {


typedef struct __CFMessagePort * CFMessagePortRef;

enum {
    kCFMessagePortSuccess = 0,
    kCFMessagePortSendTimeout = -1,
    kCFMessagePortReceiveTimeout = -2,
    kCFMessagePortIsInvalid = -3,
    kCFMessagePortTransportError = -4
};

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
} CFMessagePortContext;

typedef CFDataRef (*CFMessagePortCallBack)(CFMessagePortRef local, SInt32 msgid, CFDataRef data, void *info);

typedef void (*CFMessagePortInvalidationCallBack)(CFMessagePortRef ms, void *info);

extern CFTypeID CFMessagePortGetTypeID(void);

extern CFMessagePortRef CFMessagePortCreateLocal(CFAllocatorRef allocator, CFStringRef name, CFMessagePortCallBack callout, CFMessagePortContext *context, Boolean *shouldFreeInfo);
extern CFMessagePortRef CFMessagePortCreateRemote(CFAllocatorRef allocator, CFStringRef name);

extern Boolean CFMessagePortIsRemote(CFMessagePortRef ms);
extern CFStringRef CFMessagePortGetName(CFMessagePortRef ms);
extern Boolean CFMessagePortSetName(CFMessagePortRef ms, CFStringRef newName);
extern void CFMessagePortGetContext(CFMessagePortRef ms, CFMessagePortContext *context);
extern void CFMessagePortInvalidate(CFMessagePortRef ms);
extern Boolean CFMessagePortIsValid(CFMessagePortRef ms);
extern CFMessagePortInvalidationCallBack CFMessagePortGetInvalidationCallBack(CFMessagePortRef ms);
extern void CFMessagePortSetInvalidationCallBack(CFMessagePortRef ms, CFMessagePortInvalidationCallBack callout);


extern SInt32 CFMessagePortSendRequest(CFMessagePortRef remote, SInt32 msgid, CFDataRef data, CFTimeInterval sendTimeout, CFTimeInterval rcvTimeout, CFStringRef replyMode, CFDataRef *returnData);

extern CFRunLoopSourceRef CFMessagePortCreateRunLoopSource(CFAllocatorRef allocator, CFMessagePortRef local, CFIndex order);


}
# 69 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3





# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUserNotification.h" 1 3
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUserNotification.h" 3
extern "C" {


typedef struct __CFUserNotification * CFUserNotificationRef;
# 65 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFUserNotification.h" 3
typedef void (*CFUserNotificationCallBack)(CFUserNotificationRef userNotification, CFOptionFlags responseFlags);

extern
CFTypeID CFUserNotificationGetTypeID(void);

extern
CFUserNotificationRef CFUserNotificationCreate(CFAllocatorRef allocator, CFTimeInterval timeout, CFOptionFlags flags, SInt32 *error, CFDictionaryRef dictionary);

extern
SInt32 CFUserNotificationReceiveResponse(CFUserNotificationRef userNotification, CFTimeInterval timeout, CFOptionFlags *responseFlags);

extern
CFStringRef CFUserNotificationGetResponseValue(CFUserNotificationRef userNotification, CFStringRef key, CFIndex idx);

extern
CFDictionaryRef CFUserNotificationGetResponseDictionary(CFUserNotificationRef userNotification);

extern
SInt32 CFUserNotificationUpdate(CFUserNotificationRef userNotification, CFTimeInterval timeout, CFOptionFlags flags, CFDictionaryRef dictionary);

extern
SInt32 CFUserNotificationCancel(CFUserNotificationRef userNotification);

extern
CFRunLoopSourceRef CFUserNotificationCreateRunLoopSource(CFAllocatorRef allocator, CFUserNotificationRef userNotification, CFUserNotificationCallBack callout, CFIndex order);




extern
SInt32 CFUserNotificationDisplayNotice(CFTimeInterval timeout, CFOptionFlags flags, CFURLRef iconURL, CFURLRef soundURL, CFURLRef localizationURL, CFStringRef alertHeader, CFStringRef alertMessage, CFStringRef defaultButtonTitle);

extern
SInt32 CFUserNotificationDisplayAlert(CFTimeInterval timeout, CFOptionFlags flags, CFURLRef iconURL, CFURLRef soundURL, CFURLRef localizationURL, CFStringRef alertHeader, CFStringRef alertMessage, CFStringRef defaultButtonTitle, CFStringRef alternateButtonTitle, CFStringRef otherButtonTitle, CFOptionFlags *responseFlags);




enum {
    kCFUserNotificationStopAlertLevel = 0,
    kCFUserNotificationNoteAlertLevel = 1,
    kCFUserNotificationCautionAlertLevel = 2,
    kCFUserNotificationPlainAlertLevel = 3
};

enum {
    kCFUserNotificationDefaultResponse = 0,
    kCFUserNotificationAlternateResponse = 1,
    kCFUserNotificationOtherResponse = 2,
    kCFUserNotificationCancelResponse = 3
};

enum {
    kCFUserNotificationNoDefaultButtonFlag = (1 << 5),
    kCFUserNotificationUseRadioButtonsFlag = (1 << 6)
};

static __inline__ __attribute__((always_inline)) CFOptionFlags CFUserNotificationCheckBoxChecked(CFIndex i) {return ((CFOptionFlags)(1 << (8 + i)));}
static __inline__ __attribute__((always_inline)) CFOptionFlags CFUserNotificationSecureTextField(CFIndex i) {return ((CFOptionFlags)(1 << (16 + i)));}
static __inline__ __attribute__((always_inline)) CFOptionFlags CFUserNotificationPopUpSelection(CFIndex n) {return ((CFOptionFlags)(n << 24));}




extern
const CFStringRef kCFUserNotificationIconURLKey;

extern
const CFStringRef kCFUserNotificationSoundURLKey;

extern
const CFStringRef kCFUserNotificationLocalizationURLKey;

extern
const CFStringRef kCFUserNotificationAlertHeaderKey;

extern
const CFStringRef kCFUserNotificationAlertMessageKey;

extern
const CFStringRef kCFUserNotificationDefaultButtonTitleKey;

extern
const CFStringRef kCFUserNotificationAlternateButtonTitleKey;

extern
const CFStringRef kCFUserNotificationOtherButtonTitleKey;

extern
const CFStringRef kCFUserNotificationProgressIndicatorValueKey;

extern
const CFStringRef kCFUserNotificationPopUpTitlesKey;

extern
const CFStringRef kCFUserNotificationTextFieldTitlesKey;

extern
const CFStringRef kCFUserNotificationCheckBoxTitlesKey;

extern
const CFStringRef kCFUserNotificationTextFieldValuesKey;


extern
const CFStringRef kCFUserNotificationPopUpSelectionKey ;



}
# 75 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3

# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDateFormatter.h" 1 3
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDateFormatter.h" 3
extern "C" {


typedef struct __CFDateFormatter *CFDateFormatterRef;



extern
CFTypeID CFDateFormatterGetTypeID(void) ;

enum {
 kCFDateFormatterNoStyle = 0,
 kCFDateFormatterShortStyle = 1,
 kCFDateFormatterMediumStyle = 2,
 kCFDateFormatterLongStyle = 3,
 kCFDateFormatterFullStyle = 4
};
typedef CFIndex CFDateFormatterStyle;
# 46 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDateFormatter.h" 3
extern
CFDateFormatterRef CFDateFormatterCreate(CFAllocatorRef allocator, CFLocaleRef locale, CFDateFormatterStyle dateStyle, CFDateFormatterStyle timeStyle) ;



extern
CFLocaleRef CFDateFormatterGetLocale(CFDateFormatterRef formatter) ;

extern
CFDateFormatterStyle CFDateFormatterGetDateStyle(CFDateFormatterRef formatter) ;

extern
CFDateFormatterStyle CFDateFormatterGetTimeStyle(CFDateFormatterRef formatter) ;


extern
CFStringRef CFDateFormatterGetFormat(CFDateFormatterRef formatter) ;

extern
void CFDateFormatterSetFormat(CFDateFormatterRef formatter, CFStringRef formatString) ;







extern
CFStringRef CFDateFormatterCreateStringWithDate(CFAllocatorRef allocator, CFDateFormatterRef formatter, CFDateRef date) ;

extern
CFStringRef CFDateFormatterCreateStringWithAbsoluteTime(CFAllocatorRef allocator, CFDateFormatterRef formatter, CFAbsoluteTime at) ;




extern
CFDateRef CFDateFormatterCreateDateFromString(CFAllocatorRef allocator, CFDateFormatterRef formatter, CFStringRef string, CFRange *rangep) ;

extern
Boolean CFDateFormatterGetAbsoluteTimeFromString(CFDateFormatterRef formatter, CFStringRef string, CFRange *rangep, CFAbsoluteTime *atp) ;
# 96 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDateFormatter.h" 3
extern
void CFDateFormatterSetProperty(CFDateFormatterRef formatter, CFStringRef key, CFTypeRef value) ;

extern
CFTypeRef CFDateFormatterCopyProperty(CFDateFormatterRef formatter, CFStringRef key) ;



extern const CFStringRef kCFDateFormatterIsLenient ;
extern const CFStringRef kCFDateFormatterTimeZone ;
extern const CFStringRef kCFDateFormatterCalendarName ;
extern const CFStringRef kCFDateFormatterDefaultFormat ;
extern const CFStringRef kCFDateFormatterTwoDigitStartDate ;
extern const CFStringRef kCFDateFormatterDefaultDate ;
extern const CFStringRef kCFDateFormatterCalendar ;
extern const CFStringRef kCFDateFormatterEraSymbols ;
extern const CFStringRef kCFDateFormatterMonthSymbols ;
extern const CFStringRef kCFDateFormatterShortMonthSymbols ;
extern const CFStringRef kCFDateFormatterWeekdaySymbols ;
extern const CFStringRef kCFDateFormatterShortWeekdaySymbols ;
extern const CFStringRef kCFDateFormatterAMSymbol ;
extern const CFStringRef kCFDateFormatterPMSymbol ;
extern const CFStringRef kCFDateFormatterLongEraSymbols ;
extern const CFStringRef kCFDateFormatterVeryShortMonthSymbols ;
extern const CFStringRef kCFDateFormatterStandaloneMonthSymbols ;
extern const CFStringRef kCFDateFormatterShortStandaloneMonthSymbols ;
extern const CFStringRef kCFDateFormatterVeryShortStandaloneMonthSymbols ;
extern const CFStringRef kCFDateFormatterVeryShortWeekdaySymbols ;
extern const CFStringRef kCFDateFormatterStandaloneWeekdaySymbols ;
extern const CFStringRef kCFDateFormatterShortStandaloneWeekdaySymbols ;
extern const CFStringRef kCFDateFormatterVeryShortStandaloneWeekdaySymbols ;
extern const CFStringRef kCFDateFormatterQuarterSymbols ;
extern const CFStringRef kCFDateFormatterShortQuarterSymbols ;
extern const CFStringRef kCFDateFormatterStandaloneQuarterSymbols ;
extern const CFStringRef kCFDateFormatterShortStandaloneQuarterSymbols ;
extern const CFStringRef kCFDateFormatterGregorianStartDate ;
# 143 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDateFormatter.h" 3
}
# 77 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumberFormatter.h" 1 3
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumberFormatter.h" 3
extern "C" {


typedef struct __CFNumberFormatter *CFNumberFormatterRef;



extern
CFTypeID CFNumberFormatterGetTypeID(void) ;

enum {
 kCFNumberFormatterNoStyle = 0,
 kCFNumberFormatterDecimalStyle = 1,
 kCFNumberFormatterCurrencyStyle = 2,
 kCFNumberFormatterPercentStyle = 3,
 kCFNumberFormatterScientificStyle = 4,
 kCFNumberFormatterSpellOutStyle = 5
};
typedef CFIndex CFNumberFormatterStyle;


extern
CFNumberFormatterRef CFNumberFormatterCreate(CFAllocatorRef allocator, CFLocaleRef locale, CFNumberFormatterStyle style) ;



extern
CFLocaleRef CFNumberFormatterGetLocale(CFNumberFormatterRef formatter) ;

extern
CFNumberFormatterStyle CFNumberFormatterGetStyle(CFNumberFormatterRef formatter) ;


extern
CFStringRef CFNumberFormatterGetFormat(CFNumberFormatterRef formatter) ;

extern
void CFNumberFormatterSetFormat(CFNumberFormatterRef formatter, CFStringRef formatString) ;
# 61 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumberFormatter.h" 3
extern
CFStringRef CFNumberFormatterCreateStringWithNumber(CFAllocatorRef allocator, CFNumberFormatterRef formatter, CFNumberRef number) ;

extern
CFStringRef CFNumberFormatterCreateStringWithValue(CFAllocatorRef allocator, CFNumberFormatterRef formatter, CFNumberType numberType, const void *valuePtr) ;




enum {
    kCFNumberFormatterParseIntegersOnly = 1
};
typedef CFOptionFlags CFNumberFormatterOptionFlags;

extern
CFNumberRef CFNumberFormatterCreateNumberFromString(CFAllocatorRef allocator, CFNumberFormatterRef formatter, CFStringRef string, CFRange *rangep, CFOptionFlags options) ;

extern
Boolean CFNumberFormatterGetValueFromString(CFNumberFormatterRef formatter, CFStringRef string, CFRange *rangep, CFNumberType numberType, void *valuePtr) ;
# 91 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNumberFormatter.h" 3
extern
void CFNumberFormatterSetProperty(CFNumberFormatterRef formatter, CFStringRef key, CFTypeRef value) ;

extern
CFTypeRef CFNumberFormatterCopyProperty(CFNumberFormatterRef formatter, CFStringRef key) ;



extern const CFStringRef kCFNumberFormatterCurrencyCode ;
extern const CFStringRef kCFNumberFormatterDecimalSeparator ;
extern const CFStringRef kCFNumberFormatterCurrencyDecimalSeparator ;
extern const CFStringRef kCFNumberFormatterAlwaysShowDecimalSeparator ;
extern const CFStringRef kCFNumberFormatterGroupingSeparator ;
extern const CFStringRef kCFNumberFormatterUseGroupingSeparator ;
extern const CFStringRef kCFNumberFormatterPercentSymbol ;
extern const CFStringRef kCFNumberFormatterZeroSymbol ;
extern const CFStringRef kCFNumberFormatterNaNSymbol ;
extern const CFStringRef kCFNumberFormatterInfinitySymbol ;
extern const CFStringRef kCFNumberFormatterMinusSign ;
extern const CFStringRef kCFNumberFormatterPlusSign ;
extern const CFStringRef kCFNumberFormatterCurrencySymbol ;
extern const CFStringRef kCFNumberFormatterExponentSymbol ;
extern const CFStringRef kCFNumberFormatterMinIntegerDigits ;
extern const CFStringRef kCFNumberFormatterMaxIntegerDigits ;
extern const CFStringRef kCFNumberFormatterMinFractionDigits ;
extern const CFStringRef kCFNumberFormatterMaxFractionDigits ;
extern const CFStringRef kCFNumberFormatterGroupingSize ;
extern const CFStringRef kCFNumberFormatterSecondaryGroupingSize ;
extern const CFStringRef kCFNumberFormatterRoundingMode ;
extern const CFStringRef kCFNumberFormatterRoundingIncrement ;
extern const CFStringRef kCFNumberFormatterFormatWidth ;
extern const CFStringRef kCFNumberFormatterPaddingPosition ;
extern const CFStringRef kCFNumberFormatterPaddingCharacter ;
extern const CFStringRef kCFNumberFormatterDefaultFormat ;
extern const CFStringRef kCFNumberFormatterMultiplier ;
extern const CFStringRef kCFNumberFormatterPositivePrefix ;
extern const CFStringRef kCFNumberFormatterPositiveSuffix ;
extern const CFStringRef kCFNumberFormatterNegativePrefix ;
extern const CFStringRef kCFNumberFormatterNegativeSuffix ;
extern const CFStringRef kCFNumberFormatterPerMillSymbol ;
extern const CFStringRef kCFNumberFormatterInternationalCurrencySymbol ;
extern const CFStringRef kCFNumberFormatterCurrencyGroupingSeparator ;
extern const CFStringRef kCFNumberFormatterIsLenient ;
extern const CFStringRef kCFNumberFormatterUseSignificantDigits ;
extern const CFStringRef kCFNumberFormatterMinSignificantDigits ;
extern const CFStringRef kCFNumberFormatterMaxSignificantDigits ;

enum {
    kCFNumberFormatterRoundCeiling = 0,
    kCFNumberFormatterRoundFloor = 1,
    kCFNumberFormatterRoundDown = 2,
    kCFNumberFormatterRoundUp = 3,
    kCFNumberFormatterRoundHalfEven = 4,
    kCFNumberFormatterRoundHalfDown = 5,
    kCFNumberFormatterRoundHalfUp = 6
};
typedef CFIndex CFNumberFormatterRoundingMode;

enum {
    kCFNumberFormatterPadBeforePrefix = 0,
    kCFNumberFormatterPadAfterPrefix = 1,
    kCFNumberFormatterPadBeforeSuffix = 2,
    kCFNumberFormatterPadAfterSuffix = 3
};
typedef CFIndex CFNumberFormatterPadPosition;


extern
Boolean CFNumberFormatterGetDecimalInfoForCurrencyCode(CFStringRef currencyCode, int32_t *defaultFractionDigits, double *roundingIncrement) ;







}
# 78 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCalendar.h" 1 3
# 16 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFCalendar.h" 3
extern "C" {


typedef struct __CFCalendar * CFCalendarRef;

extern
CFTypeID CFCalendarGetTypeID(void) ;

extern
CFCalendarRef CFCalendarCopyCurrent(void) ;

extern
CFCalendarRef CFCalendarCreateWithIdentifier(CFAllocatorRef allocator, CFStringRef identifier) ;



extern
CFStringRef CFCalendarGetIdentifier(CFCalendarRef calendar) ;


extern
CFLocaleRef CFCalendarCopyLocale(CFCalendarRef calendar) ;

extern
void CFCalendarSetLocale(CFCalendarRef calendar, CFLocaleRef locale) ;

extern
CFTimeZoneRef CFCalendarCopyTimeZone(CFCalendarRef calendar) ;

extern
void CFCalendarSetTimeZone(CFCalendarRef calendar, CFTimeZoneRef tz) ;

extern
CFIndex CFCalendarGetFirstWeekday(CFCalendarRef calendar) ;

extern
void CFCalendarSetFirstWeekday(CFCalendarRef calendar, CFIndex wkdy) ;

extern
CFIndex CFCalendarGetMinimumDaysInFirstWeek(CFCalendarRef calendar) ;

extern
void CFCalendarSetMinimumDaysInFirstWeek(CFCalendarRef calendar, CFIndex mwd) ;


enum {
 kCFCalendarUnitEra = (1 << 1),
 kCFCalendarUnitYear = (1 << 2),
 kCFCalendarUnitMonth = (1 << 3),
 kCFCalendarUnitDay = (1 << 4),
 kCFCalendarUnitHour = (1 << 5),
 kCFCalendarUnitMinute = (1 << 6),
 kCFCalendarUnitSecond = (1 << 7),
 kCFCalendarUnitWeek = (1 << 8),
 kCFCalendarUnitWeekday = (1 << 9),
 kCFCalendarUnitWeekdayOrdinal = (1 << 10)
};
typedef CFOptionFlags CFCalendarUnit;

extern
CFRange CFCalendarGetMinimumRangeOfUnit(CFCalendarRef calendar, CFCalendarUnit unit) ;

extern
CFRange CFCalendarGetMaximumRangeOfUnit(CFCalendarRef calendar, CFCalendarUnit unit) ;

extern
CFRange CFCalendarGetRangeOfUnit(CFCalendarRef calendar, CFCalendarUnit smallerUnit, CFCalendarUnit biggerUnit, CFAbsoluteTime at) ;

extern
CFIndex CFCalendarGetOrdinalityOfUnit(CFCalendarRef calendar, CFCalendarUnit smallerUnit, CFCalendarUnit biggerUnit, CFAbsoluteTime at) ;

extern
Boolean CFCalendarGetTimeRangeOfUnit(CFCalendarRef, CFCalendarUnit unit, CFAbsoluteTime at, CFAbsoluteTime *startp, CFTimeInterval *tip) ;

extern
Boolean CFCalendarComposeAbsoluteTime(CFCalendarRef calendar, CFAbsoluteTime *at, const unsigned char *componentDesc, ...) ;

extern
Boolean CFCalendarDecomposeAbsoluteTime(CFCalendarRef calendar, CFAbsoluteTime at, const unsigned char *componentDesc, ...) ;


enum {
    kCFCalendarComponentsWrap = (1 << 0)
};

extern
Boolean CFCalendarAddComponents(CFCalendarRef calendar, CFAbsoluteTime *at, CFOptionFlags options, const unsigned char *componentDesc, ...) ;

extern
Boolean CFCalendarGetComponentDifference(CFCalendarRef calendar, CFAbsoluteTime startingAT, CFAbsoluteTime resultAT, CFOptionFlags options, const unsigned char *componentDesc, ...) ;



}
# 79 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNotificationCenter.h" 1 3
# 12 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNotificationCenter.h" 3
extern "C" {


typedef struct __CFNotificationCenter * CFNotificationCenterRef;

typedef void (*CFNotificationCallback)(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo);

enum {
    CFNotificationSuspensionBehaviorDrop = 1,

    CFNotificationSuspensionBehaviorCoalesce = 2,

    CFNotificationSuspensionBehaviorHold = 3,

    CFNotificationSuspensionBehaviorDeliverImmediately = 4

};
typedef CFIndex CFNotificationSuspensionBehavior;

extern CFTypeID CFNotificationCenterGetTypeID(void);

extern CFNotificationCenterRef CFNotificationCenterGetLocalCenter(void) ;

extern CFNotificationCenterRef CFNotificationCenterGetDistributedCenter(void);

extern CFNotificationCenterRef CFNotificationCenterGetDarwinNotifyCenter(void) ;
# 55 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFNotificationCenter.h" 3
extern void CFNotificationCenterAddObserver(CFNotificationCenterRef center, const void *observer, CFNotificationCallback callBack, CFStringRef name, const void *object, CFNotificationSuspensionBehavior suspensionBehavior);

extern void CFNotificationCenterRemoveObserver(CFNotificationCenterRef center, const void *observer, CFStringRef name, const void *object);
extern void CFNotificationCenterRemoveEveryObserver(CFNotificationCenterRef center, const void *observer);

extern void CFNotificationCenterPostNotification(CFNotificationCenterRef center, CFStringRef name, const void *object, CFDictionaryRef userInfo, Boolean deliverImmediately);



enum {
    kCFNotificationDeliverImmediately = (1 << 0),
    kCFNotificationPostToAllSessions = (1 << 1)
};

void CFNotificationCenterPostNotificationWithOptions(CFNotificationCenterRef center, CFStringRef name, const void *object, CFDictionaryRef userInfo, CFOptionFlags options) ;





}
# 80 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFAttributedString.h" 1 3
# 21 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFAttributedString.h" 3
extern "C" {





typedef const struct __CFAttributedString *CFAttributedStringRef;
typedef struct __CFAttributedString *CFMutableAttributedStringRef;




extern CFTypeID CFAttributedStringGetTypeID(void) ;
# 42 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFAttributedString.h" 3
extern CFAttributedStringRef CFAttributedStringCreate(CFAllocatorRef alloc, CFStringRef str, CFDictionaryRef attributes) ;




extern CFAttributedStringRef CFAttributedStringCreateWithSubstring(CFAllocatorRef alloc, CFAttributedStringRef aStr, CFRange range) ;




extern CFAttributedStringRef CFAttributedStringCreateCopy(CFAllocatorRef alloc, CFAttributedStringRef aStr) ;




extern CFStringRef CFAttributedStringGetString(CFAttributedStringRef aStr) ;




extern CFIndex CFAttributedStringGetLength(CFAttributedStringRef aStr) ;






extern CFDictionaryRef CFAttributedStringGetAttributes(CFAttributedStringRef aStr, CFIndex loc, CFRange *effectiveRange) ;




extern CFTypeRef CFAttributedStringGetAttribute(CFAttributedStringRef aStr, CFIndex loc, CFStringRef attrName, CFRange *effectiveRange) ;




extern CFDictionaryRef CFAttributedStringGetAttributesAndLongestEffectiveRange(CFAttributedStringRef aStr, CFIndex loc, CFRange inRange, CFRange *longestEffectiveRange) ;




extern CFTypeRef CFAttributedStringGetAttributeAndLongestEffectiveRange(CFAttributedStringRef aStr, CFIndex loc, CFStringRef attrName, CFRange inRange, CFRange *longestEffectiveRange) ;
# 93 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFAttributedString.h" 3
extern CFMutableAttributedStringRef CFAttributedStringCreateMutableCopy(CFAllocatorRef alloc, CFIndex maxLength, CFAttributedStringRef aStr) ;




extern CFMutableAttributedStringRef CFAttributedStringCreateMutable(CFAllocatorRef alloc, CFIndex maxLength) ;






extern void CFAttributedStringReplaceString(CFMutableAttributedStringRef aStr, CFRange range, CFStringRef replacement) ;






extern CFMutableStringRef CFAttributedStringGetMutableString(CFMutableAttributedStringRef aStr) ;




extern void CFAttributedStringSetAttributes(CFMutableAttributedStringRef aStr, CFRange range, CFDictionaryRef replacement, Boolean clearOtherAttributes) ;




extern void CFAttributedStringSetAttribute(CFMutableAttributedStringRef aStr, CFRange range, CFStringRef attrName, CFTypeRef value) ;




extern void CFAttributedStringRemoveAttribute(CFMutableAttributedStringRef aStr, CFRange range, CFStringRef attrName) ;




extern void CFAttributedStringReplaceAttributedString(CFMutableAttributedStringRef aStr, CFRange range, CFAttributedStringRef replacement) ;




extern void CFAttributedStringBeginEditing(CFMutableAttributedStringRef aStr) ;




extern void CFAttributedStringEndEditing(CFMutableAttributedStringRef aStr) ;



}
# 81 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFFileDescriptor.h" 1 3
# 15 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFFileDescriptor.h" 3
extern "C" {


typedef int CFFileDescriptorNativeDescriptor;

typedef struct __CFFileDescriptor * CFFileDescriptorRef;


enum {
    kCFFileDescriptorReadCallBack = 1 << 0,
    kCFFileDescriptorWriteCallBack = 1 << 1
};

typedef void (*CFFileDescriptorCallBack)(CFFileDescriptorRef f, CFOptionFlags callBackTypes, void *info);

typedef struct {
    CFIndex version;
    void * info;
    void * (*retain)(void *info);
    void (*release)(void *info);
    CFStringRef (*copyDescription)(void *info);
} CFFileDescriptorContext;

extern CFTypeID CFFileDescriptorGetTypeID(void);

extern CFFileDescriptorRef CFFileDescriptorCreate(CFAllocatorRef allocator, CFFileDescriptorNativeDescriptor fd, Boolean closeOnInvalidate, CFFileDescriptorCallBack callout, const CFFileDescriptorContext *context);

extern CFFileDescriptorNativeDescriptor CFFileDescriptorGetNativeDescriptor(CFFileDescriptorRef f);

extern void CFFileDescriptorGetContext(CFFileDescriptorRef f, CFFileDescriptorContext *context);

extern void CFFileDescriptorEnableCallBacks(CFFileDescriptorRef f, CFOptionFlags callBackTypes);
extern void CFFileDescriptorDisableCallBacks(CFFileDescriptorRef f, CFOptionFlags callBackTypes);

extern void CFFileDescriptorInvalidate(CFFileDescriptorRef f);
extern Boolean CFFileDescriptorIsValid(CFFileDescriptorRef f);

extern CFRunLoopSourceRef CFFileDescriptorCreateRunLoopSource(CFAllocatorRef allocator, CFFileDescriptorRef f, CFIndex order);



}
# 82 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 1 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFMachPort.h" 1 3
# 14 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CFMachPort.h" 3
extern "C" {


typedef struct __CFMachPort * CFMachPortRef;

typedef struct {
    CFIndex version;
    void * info;
    const void *(*retain)(const void *info);
    void (*release)(const void *info);
    CFStringRef (*copyDescription)(const void *info);
} CFMachPortContext;

typedef void (*CFMachPortCallBack)(CFMachPortRef port, void *msg, CFIndex size, void *info);
typedef void (*CFMachPortInvalidationCallBack)(CFMachPortRef port, void *info);

extern CFTypeID CFMachPortGetTypeID(void);

extern CFMachPortRef CFMachPortCreate(CFAllocatorRef allocator, CFMachPortCallBack callout, CFMachPortContext *context, Boolean *shouldFreeInfo);
extern CFMachPortRef CFMachPortCreateWithPort(CFAllocatorRef allocator, mach_port_t portNum, CFMachPortCallBack callout, CFMachPortContext *context, Boolean *shouldFreeInfo);

extern mach_port_t CFMachPortGetPort(CFMachPortRef port);
extern void CFMachPortGetContext(CFMachPortRef port, CFMachPortContext *context);
extern void CFMachPortInvalidate(CFMachPortRef port);
extern Boolean CFMachPortIsValid(CFMachPortRef port);
extern CFMachPortInvalidationCallBack CFMachPortGetInvalidationCallBack(CFMachPortRef port);
extern void CFMachPortSetInvalidationCallBack(CFMachPortRef port, CFMachPortInvalidationCallBack callout);

extern CFRunLoopSourceRef CFMachPortCreateRunLoopSource(CFAllocatorRef allocator, CFMachPortRef port, CFIndex order);


}
# 83 "/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h" 2 3
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3


# 1 "/usr/include/objc/objc.h" 1 3 4
# 31 "/usr/include/objc/objc.h" 3 4
# 1 "/usr/include/objc/objc-api.h" 1 3 4
# 32 "/usr/include/objc/objc.h" 2 3 4



typedef struct objc_class *Class;
typedef struct objc_object {
    Class isa;
} *id;


typedef struct objc_selector *SEL;
typedef id (*IMP)(id, SEL, ...);
typedef signed char BOOL;
# 63 "/usr/include/objc/objc.h" 3 4
extern "C" const char *sel_getName(SEL sel);
extern "C" SEL sel_registerName(const char *str);
extern "C" const char *object_getClassName(id obj);
extern "C" void *object_getIndexedIvars(id obj);
# 78 "/usr/include/objc/objc.h" 3 4
    typedef int arith_t;
    typedef unsigned uarith_t;



extern "C" BOOL sel_isMapped(SEL sel);
extern "C" SEL sel_getUid(const char *str);

typedef char *STR;
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/usr/local/include/objc/objc-auto.h" 1 3
# 35 "/usr/local/include/objc/objc-auto.h" 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/stddef.h" 1 3 4
# 36 "/usr/local/include/objc/objc-auto.h" 2 3




enum {
    OBJC_GENERATIONAL = (1 << 0)
};

extern "C" void objc_collect_if_needed(unsigned long options);
extern "C" BOOL objc_should_collect(unsigned long options);
extern "C" size_t objc_numberAllocated(void);
extern "C" BOOL objc_collecting_enabled(void);


extern "C" id objc_allocate_object(Class cls, int extra);




extern "C" void objc_set_collection_threshold(size_t threshold);


extern "C" void objc_set_collection_ratio(size_t ratio);


extern "C" id objc_assign_strongCast(id val, id *dest);
extern "C" id objc_assign_global(id val, id *dest);
extern "C" id objc_assign_ivar(id value, id dest, ptrdiff_t offset);
extern "C" void *objc_memmove_collectable(void *dst, const void *src, size_t size);

extern "C" id objc_read_weak(id *location);
extern "C" id objc_assign_weak(id value, id *location);


extern "C" BOOL objc_is_finalized(void *ptr);

enum {
    OBJC_CLEAR_RESIDENT_STACK = (1 << 0)
};


extern "C" void objc_clear_stack(unsigned long options);
# 11 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h" 1 3
# 57 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h" 3
# 1 "/usr/lib/gcc/powerpc-apple-darwin8/4.0.1/include/limits.h" 1 3 4
# 58 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h" 2 3


extern "C" double NSFoundationVersionNumber;
# 102 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h" 3
typedef int NSInteger;
typedef unsigned int NSUInteger;
# 112 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h" 3
@class NSString;

extern "C" NSString *NSStringFromSelector(SEL aSelector);
extern "C" SEL NSSelectorFromString(NSString *aSelectorName);
extern "C" Class NSClassFromString(NSString *aClassName);
extern "C" NSString *NSStringFromClass(Class aClass);
extern "C" NSString *NSStringFromProtocol(Protocol *proto) ;
extern "C" Protocol *NSProtocolFromString(NSString *namestr) ;
extern "C" const char *NSGetSizeAndAlignment(const char *typePtr, NSUInteger *sizep, NSUInteger *alignp);

extern "C" void NSLog(NSString *format, ...);
extern "C" void NSLogv(NSString *format, va_list args);

enum _NSComparisonResult {NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending};
typedef NSInteger NSComparisonResult;

enum {NSNotFound = 2147483647L};
# 13 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSAffineTransform.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSObject.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSZone.h" 1 3







@class NSString;

typedef struct _NSZone NSZone;


extern "C" NSZone *NSDefaultMallocZone(void);
extern "C" NSZone *NSCreateZone(NSUInteger startSize, NSUInteger granularity, BOOL canFree);
extern "C" void NSRecycleZone(NSZone *zone);
extern "C" void NSSetZoneName(NSZone *zone, NSString *name);
extern "C" NSString *NSZoneName(NSZone *zone);
extern "C" NSZone *NSZoneFromPointer(void *ptr);

extern "C" void *NSZoneMalloc(NSZone *zone, NSUInteger size);
extern "C" void *NSZoneCalloc(NSZone *zone, NSUInteger numElems, NSUInteger byteSize);
extern "C" void *NSZoneRealloc(NSZone *zone, void *ptr, NSUInteger size);
extern "C" void NSZoneFree(NSZone *zone, void *ptr);
# 32 "/System/Library/Frameworks/Foundation.framework/Headers/NSZone.h" 3
enum {
    NSScannedOption = (1<<0),
    NSCollectorDisabledOption = (1<<1),
};


extern "C" void * NSAllocateCollectable(NSUInteger size, NSUInteger options) ;
extern "C" void * NSReallocateCollectable(void *ptr, NSUInteger size, NSUInteger options) ;







static __inline__ __attribute__((always_inline)) id NSMakeCollectable(CFTypeRef cf) {
    return cf ? (id)CFMakeCollectable(cf) : __null;
}


extern "C" NSUInteger NSPageSize(void);
extern "C" NSUInteger NSLogPageSize(void);
extern "C" NSUInteger NSRoundUpToMultipleOfPageSize(NSUInteger bytes);
extern "C" NSUInteger NSRoundDownToMultipleOfPageSize(NSUInteger bytes);
extern "C" void *NSAllocateMemoryPages(NSUInteger bytes);
extern "C" void NSDeallocateMemoryPages(void *ptr, NSUInteger bytes);
extern "C" void NSCopyMemoryPages(const void *source, void *dest, NSUInteger bytes);
extern "C" NSUInteger NSRealMemoryAvailable(void);
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSObject.h" 2 3
# 1 "/usr/include/objc/Protocol.h" 1 3 4
# 33 "/usr/include/objc/Protocol.h" 3 4
# 1 "/usr/include/objc/Object.h" 1 3 4
# 38 "/usr/include/objc/Object.h" 3 4
# 1 "/usr/include/objc/objc-runtime.h" 1 3 4
# 1 "/usr/include/objc/runtime.h" 1 3 4
# 38 "/usr/include/objc/runtime.h" 3 4
typedef struct objc_method *Method;
typedef struct objc_ivar *Ivar;
typedef struct objc_category *Category;
typedef struct objc_property *objc_property_t;

struct objc_class {
    Class isa;


    Class super_class ;
    const char *name ;
    long version ;
    long info ;
    long instance_size ;
    struct objc_ivar_list *ivars ;
    struct objc_method_list **methodLists ;
    struct objc_cache *cache ;
    struct objc_protocol_list *protocols ;


} ;



@class Protocol;




struct objc_method_description {
 SEL name;
 char *types;
};
struct objc_method_description_list {
        int count;
        struct objc_method_description list[1];
};

struct objc_protocol_list {
    struct objc_protocol_list *next;
    long count;
    Protocol *list[1];
};




extern "C" id object_copy(id obj, size_t size);
extern "C" id object_dispose(id obj);

extern "C" Class object_getClass(id obj)
     ;
extern "C" Class object_setClass(id obj, Class cls)
     ;

extern "C" const char *object_getClassName(id obj);
extern "C" void *object_getIndexedIvars(id obj);

extern "C" id object_getIvar(id obj, Ivar ivar)
     ;
extern "C" void object_setIvar(id obj, Ivar ivar, id value)
     ;

extern "C" Ivar object_setInstanceVariable(id obj, const char *name, void *value);
extern "C" Ivar object_getInstanceVariable(id obj, const char *name, void **outValue);

extern "C" id objc_getClass(const char *name);
extern "C" id objc_getMetaClass(const char *name);
extern "C" id objc_lookUpClass(const char *name);
extern "C" id objc_getRequiredClass(const char *name);
extern "C" Class objc_getFutureClass(const char *name)
     ;
extern "C" void objc_setFutureClass(Class cls, const char *name)
     ;
extern "C" int objc_getClassList(Class *buffer, int bufferCount);

extern "C" Protocol *objc_getProtocol(const char *name)
     ;
extern "C" Protocol **objc_copyProtocolList(unsigned int *outCount)
     ;

extern "C" const char *class_getName(Class cls)
     ;
extern "C" Class class_getSuperclass(Class cls)
     ;
extern "C" BOOL class_isMetaClass(Class cls)
     ;

extern "C" int class_getVersion(Class cls);
extern "C" void class_setVersion(Class cls, int version);

extern "C" size_t class_getInstanceSize(Class cls)
     ;

extern "C" Ivar class_getInstanceVariable(Class cls, const char *name);
extern "C" Ivar class_getClassVariable(Class cls, const char *name)
     ;
extern "C" Ivar *class_copyIvarList(Class cls, unsigned int *outCount)
     ;

extern "C" Method class_getInstanceMethod(Class cls, SEL name);
extern "C" Method class_getClassMethod(Class cls, SEL name);
extern "C" IMP class_getMethodImplementation(Class cls, SEL name)
     ;
extern "C" IMP class_getMethodImplementation_stret(Class cls, SEL name)
     ;
extern "C" BOOL class_respondsToSelector(Class cls, SEL sel)
     ;
extern "C" Method *class_copyMethodList(Class cls, unsigned int *outCount)
     ;

extern "C" BOOL class_conformsToProtocol(Class cls, Protocol *protocol)
     ;
extern "C" Protocol**class_copyProtocolList(Class cls, unsigned int *outCount)
     ;

extern "C" objc_property_t class_getProperty(Class cls, const char *name)
     ;
extern "C" objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)
     ;

extern "C" const char *class_getIvarLayout(Class cls)
     ;
extern "C" const char *class_getWeakIvarLayout(Class cls)
     ;

extern "C" id class_createInstance(Class cls, size_t extraBytes);

extern "C" Class objc_allocateClassPair(Class superclass, const char *name,
                                         size_t extraBytes)
     ;
extern "C" void objc_registerClassPair(Class cls)
     ;
extern "C" Class objc_duplicateClass(Class original, const char *name,
                                      size_t extraBytes)
     ;

extern "C" BOOL class_addMethod(Class cls, SEL name, IMP imp,
                                 const char *types)
     ;
extern "C" BOOL class_addIvar(Class cls, const char *name, size_t size,
                               uint8_t alignment, const char *types)
     ;
extern "C" BOOL class_addProtocol(Class cls, Protocol *protocol)
     ;
extern "C" void class_setIvarLayout(Class cls, const char *layout)
     ;
extern "C" void class_setWeakIvarLayout(Class cls, const char *layout)
     ;


extern "C" SEL method_getName(Method m)
     ;
extern "C" IMP method_getImplementation(Method m)
     ;
extern "C" const char *method_getTypeEncoding(Method m)
     ;

extern "C" unsigned int method_getNumberOfArguments(Method m);
extern "C" unsigned int method_getSizeOfArguments(Method m);
extern "C" char *method_copyReturnType(Method m)
     ;
extern "C" char *method_copyArgumentType(Method m, unsigned int index)
     ;
extern "C" void method_getReturnType(Method m, char *dst, size_t dst_len)
     ;
extern "C" void method_getArgumentType(Method m, unsigned int index,
                                        char *dst, size_t dst_len)
     ;
extern "C" struct objc_method_description *method_getDescription(Method m)
     ;

extern "C" IMP method_setImplementation(Method m, IMP imp)
     ;
extern "C" void method_exchangeImplementations(Method m1, Method m2)
     ;

extern "C" const char *ivar_getName(Ivar v)
     ;
extern "C" const char *ivar_getTypeEncoding(Ivar v)
     ;
extern "C" ptrdiff_t ivar_getOffset(Ivar v)
     ;

extern "C" const char *property_getName(objc_property_t property)
     ;
extern "C" const char *property_getAttributes(objc_property_t property)
     ;

extern "C" struct objc_method_description_list *protocol_copyInstanceMethodDescriptionList(Protocol *proto)
     ;
extern "C" struct objc_method_description_list *protocol_copyClassMethodDescriptionList(Protocol *proto)
     ;
extern "C" objc_property_t *protocol_copyPropertyList(Protocol *proto, unsigned int *outCount)
     ;
extern "C" struct objc_method_description_list *protocol_copyOptionalInstanceMethodDescriptionList(Protocol *proto)
     ;
extern "C" struct objc_method_description_list *protocol_copyOptionalClassMethodDescriptionList(Protocol *proto)
     ;

extern "C" const char **objc_copyImageNames(unsigned int *outCount)
     ;
extern "C" const char *class_getImageName(Class cls)
     ;
extern "C" const char **objc_copyClassNamesForImage(const char *image,
                                                     unsigned int *outCount)
     ;

extern "C" const char *sel_getName(SEL sel);
extern "C" SEL sel_getUid(const char *str);
extern "C" SEL sel_registerName(const char *str);
extern "C" BOOL sel_isEqual(SEL lhs, SEL rhs)
     ;

extern "C" void objc_enumerationMutation(id)
     ;
extern "C" void objc_setEnumerationMutationHandler(void (*handler)(id))
     ;

extern "C" void objc_setForwardHandler(void *fwd, void *fwd_stret)
     ;
# 327 "/usr/include/objc/runtime.h" 3 4
struct objc_category {
    char *category_name ;
    char *class_name ;
    struct objc_method_list *instance_methods ;
    struct objc_method_list *class_methods ;
    struct objc_protocol_list *protocols ;
} ;


struct objc_ivar {
    char *ivar_name ;
    char *ivar_type ;
    int ivar_offset ;



} ;

struct objc_ivar_list {
    int ivar_count ;




    struct objc_ivar ivar_list[1] ;
} ;


struct objc_method {
    SEL method_name ;
    char *method_types ;
    IMP method_imp ;
} ;

struct objc_method_list {
    struct objc_method_list *obsolete ;

    int method_count ;




    struct objc_method method_list[1] ;
} ;


typedef struct objc_symtab *Symtab ;

struct objc_symtab {
    unsigned long sel_ref_cnt ;
    SEL *refs ;
    unsigned short cls_def_cnt ;
    unsigned short cat_def_cnt ;
    void *defs[1] ;
} ;


typedef struct objc_cache *Cache ;
# 394 "/usr/include/objc/runtime.h" 3 4
struct objc_cache {
    unsigned int mask ;
    unsigned int occupied ;
    Method buckets[1] ;
} ;


typedef struct objc_module *Module ;

struct objc_module {
    unsigned long version ;
    unsigned long size ;
    const char *name ;
    Symtab symtab ;
} ;
# 419 "/usr/include/objc/runtime.h" 3 4
extern "C" BOOL sel_isMapped(SEL sel) ;

extern "C" id object_copyFromZone(id anObject, size_t nBytes, void *z) ;
extern "C" id object_realloc(id anObject, size_t nBytes) ;
extern "C" id object_reallocFromZone(id anObject, size_t nBytes, void *z) ;


extern "C" void *objc_getClasses(void) ;
extern "C" void objc_addClass(Class myClass) ;
extern "C" void objc_setClassHandler(int (*)(const char *)) ;
extern "C" void objc_setMultithreaded (BOOL flag) ;

extern "C" id class_createInstanceFromZone(Class, size_t idxIvars, void *z) ;

extern "C" void class_addMethods(Class, struct objc_method_list *) ;
extern "C" void class_removeMethods(Class, struct objc_method_list *) ;

extern "C" Class class_poseAs(Class imposter, Class original) ;

extern "C" unsigned method_getArgumentInfo(struct objc_method *m, int arg, const char **type, int *offset) ;

extern "C" BOOL class_respondsToMethod(Class, SEL) ;
extern "C" IMP class_lookupMethod(Class, SEL) ;
extern "C" Class objc_getOrigClass(const char *name) ;

extern "C" struct objc_method_list *class_nextMethodList(Class, void **) ;







extern "C" id (*_alloc)(Class, size_t) ;
extern "C" id (*_copy)(id, size_t) ;
extern "C" id (*_realloc)(id, size_t) ;
extern "C" id (*_dealloc)(id) ;
extern "C" id (*_zoneAlloc)(Class, size_t, void *) ;
extern "C" id (*_zoneRealloc)(id, size_t, void *) ;
extern "C" id (*_zoneCopy)(id, size_t, void *) ;
extern "C" void (*_error)(id, const char *, va_list) ;
# 2 "/usr/include/objc/objc-runtime.h" 2 3 4
# 1 "/usr/include/objc/message.h" 1 3 4
# 28 "/usr/include/objc/message.h" 3 4
struct objc_super {
    id receiver;



    Class super_class;


};
# 47 "/usr/include/objc/message.h" 3 4
extern "C" id objc_msgSend(id self, SEL op, ...);
extern "C" id objc_msgSendSuper(struct objc_super *super, SEL op, ...);
# 65 "/usr/include/objc/message.h" 3 4
extern "C" id objc_msgSend_stret(id self, SEL op, ...);
extern "C" id objc_msgSendSuper_stret(struct objc_super *super, SEL op, ...);
# 108 "/usr/include/objc/message.h" 3 4
extern "C" id method_invoke(id receiver, Method m, ...)
     ;
extern "C" void method_invoke_stret(id receiver, Method m, ...)
     ;
# 126 "/usr/include/objc/message.h" 3 4
typedef void* marg_list;





typedef struct {
    double fpParams[13];
    uintptr_t linkage[6];
    uintptr_t regParams[8];
    uintptr_t stackParams[0];
} *ppc_marg_list, *ppc64_marg_list;
# 168 "/usr/include/objc/message.h" 3 4
extern "C" id objc_msgSendv(id self, SEL op, size_t arg_size, marg_list arg_frame);
extern "C" id objc_msgSendv_stret(id self, SEL op, size_t arg_size, marg_list arg_frame);
# 2 "/usr/include/objc/objc-runtime.h" 2 3 4
# 39 "/usr/include/objc/Object.h" 2 3 4
# 55 "/usr/include/objc/Object.h" 3 4
@class Protocol;

@interface Object
{
 Class isa;
}



+ initialize;
- init;



+ new;
+ free;
- free;
+ alloc;
- copy;
+ allocFromZone:(void *)zone;
- copyFromZone:(void *)zone;
- (void *)zone;



+ class;
+ superclass;
+ (const char *) name;
- class;
- superclass;
- (const char *) name;



- self;
- (unsigned int) hash;
- (BOOL) isEqual:anObject;



- (BOOL) isKindOf: aClassObject;
- (BOOL) isMemberOf: aClassObject;
- (BOOL) isKindOfClassNamed: (const char *)aClassName;
- (BOOL) isMemberOfClassNamed: (const char *)aClassName;



+ (BOOL) instancesRespondTo:(SEL)aSelector;
- (BOOL) respondsTo:(SEL)aSelector;



- (BOOL) conformsTo: (Protocol *)aProtocolObject;
+ (BOOL) conformsTo: (Protocol *)aProtocolObject;



- (struct objc_method_description *) descriptionForMethod:(SEL)aSel;
+ (struct objc_method_description *) descriptionForInstanceMethod:(SEL)aSel;



- (IMP) methodFor:(SEL)aSelector;
+ (IMP) instanceMethodFor:(SEL)aSelector;



- perform:(SEL)aSelector;
- perform:(SEL)aSelector with:anObject;
- perform:(SEL)aSelector with:object1 with:object2;



+ poseAs: aClassObject;



- subclassResponsibility:(SEL)aSelector;
- notImplemented:(SEL)aSelector;



- doesNotRecognize:(SEL)aSelector;
- error:(const char *)aString, ...;



- (void) printForDebugger:(void *)stream;



- awake;
- write:(void *)stream;
- read:(void *)stream;
+ (int) version;
+ setVersion: (int) aVersion;



- forward: (SEL)sel : (marg_list)args;
- performv: (SEL)sel : (marg_list)args;

@end



@interface Object (Archiving)

- startArchiving: (void *)stream;
- finishUnarchiving;

@end



@interface Object (DynamicLoading)


+ finishLoading:(struct mach_header *)header;
+ startUnloading;

@end
# 34 "/usr/include/objc/Protocol.h" 2 3 4

@interface Protocol : Object
{
@private
 char *protocol_name;
  struct objc_protocol_list *protocol_list;
   struct objc_method_description_list *instance_methods, *class_methods;
}



- (const char *)name;



- (BOOL) conformsTo: (Protocol *)aProtocolObject;



- (struct objc_method_description *) descriptionForInstanceMethod:(SEL)aSel;
- (struct objc_method_description *) descriptionForClassMethod:(SEL)aSel;

- (struct objc_method_description_list *) instanceMethods;
- (struct objc_method_description_list *) classMethods;
- (struct objc_protocol_list *) protocols;

@end
# 8 "/System/Library/Frameworks/Foundation.framework/Headers/NSObject.h" 2 3

@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator;



@protocol NSObject

- (BOOL)isEqual:(id)object;
- (NSUInteger)hash;

- (Class)superclass;
- (Class)class;
- (id)self;
- (NSZone *)zone;

- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;

- (BOOL)isProxy;

- (BOOL)isKindOfClass:(Class)aClass;
- (BOOL)isMemberOfClass:(Class)aClass;
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;

- (BOOL)respondsToSelector:(SEL)aSelector;

- (id)retain;
- (oneway void)release;
- (id)autorelease;
- (NSUInteger)retainCount;

- (NSString *)description;

@end

@protocol NSCopying

- (id)copyWithZone:(NSZone *)zone;

@end

@protocol NSMutableCopying

- (id)mutableCopyWithZone:(NSZone *)zone;

@end

@protocol NSCoding

- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;

@end



@interface NSObject <NSObject> {
    Class isa;
}

+ (void)load;

+ (void)initialize;
- (id)init;

+ (id)new;
+ (id)allocWithZone:(NSZone *)zone;
+ (id)alloc;
- (void)dealloc;

- (void)finalize ;

- (id)copy;
- (id)mutableCopy;

+ (id)copyWithZone:(NSZone *)zone;
+ (id)mutableCopyWithZone:(NSZone *)zone;

+ (Class)superclass;
+ (Class)class;
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
+ (BOOL)conformsToProtocol:(Protocol *)protocol;
- (IMP)methodForSelector:(SEL)aSelector;
+ (IMP)instanceMethodForSelector:(SEL)aSelector;
+ (NSInteger)version;
+ (void)setVersion:(NSInteger)aVersion;
- (void)doesNotRecognizeSelector:(SEL)aSelector;
- (void)forwardInvocation:(NSInvocation *)anInvocation;
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;

+ (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector;

+ (BOOL)isSubclassOfClass:(Class)aClass ;

+ (NSString *)description;

- (Class)classForCoder;
- (id)replacementObjectForCoder:(NSCoder *)aCoder;
- (id)awakeAfterUsingCoder:(NSCoder *)aDecoder;

+ (void)poseAsClass:(Class)aClass ;

@end

@interface Protocol (NSMethodSignatureAdditions)

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector ;

@end



extern "C" id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone);

extern "C" void NSDeallocateObject(id object);

extern "C" id NSCopyObject(id object, NSUInteger extraBytes, NSZone *zone);

extern "C" BOOL NSShouldRetainWithZone(id anObject, NSZone *requestedZone);

extern "C" void NSIncrementExtraRefCount(id object);

extern "C" BOOL NSDecrementExtraRefCountWasZero(id object);

extern "C" NSUInteger NSExtraRefCount(id object);
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSAffineTransform.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSGeometry.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSValue.h" 1 3






@class NSString, NSDictionary;

@interface NSValue : NSObject <NSCopying, NSCoding>

- (void)getValue:(void *)value;
- (const char *)objCType;

@end

@interface NSValue (NSValueCreation)

- (id)initWithBytes:(const void *)value objCType:(const char *)type;
+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type;
+ (NSValue *)value:(const void *)value withObjCType:(const char *)type;

@end

@interface NSValue (NSValueExtensionMethods)

+ (NSValue *)valueWithNonretainedObject:(id)anObject;
- (id)nonretainedObjectValue;

+ (NSValue *)valueWithPointer:(const void *)pointer;
- (void *)pointerValue;

- (BOOL)isEqualToValue:(NSValue *)value;

@end

@interface NSNumber : NSValue

- (char)charValue;
- (unsigned char)unsignedCharValue;
- (short)shortValue;
- (unsigned short)unsignedShortValue;
- (int)intValue;
- (unsigned int)unsignedIntValue;
- (long)longValue;
- (unsigned long)unsignedLongValue;
- (long long)longLongValue;
- (unsigned long long)unsignedLongLongValue;
- (float)floatValue;
- (double)doubleValue;
- (BOOL)boolValue;

- (NSInteger)integerValue;
- (NSUInteger)unsignedIntegerValue;


- (NSString *)stringValue;

- (NSComparisonResult)compare:(NSNumber *)otherNumber;

- (BOOL)isEqualToNumber:(NSNumber *)number;

- (NSString *)descriptionWithLocale:(NSDictionary *)locale;

@end

@interface NSNumber (NSNumberCreation)

- (id)initWithChar:(char)value;
- (id)initWithUnsignedChar:(unsigned char)value;
- (id)initWithShort:(short)value;
- (id)initWithUnsignedShort:(unsigned short)value;
- (id)initWithInt:(int)value;
- (id)initWithUnsignedInt:(unsigned int)value;
- (id)initWithLong:(long)value;
- (id)initWithUnsignedLong:(unsigned long)value;
- (id)initWithLongLong:(long long)value;
- (id)initWithUnsignedLongLong:(unsigned long long)value;
- (id)initWithFloat:(float)value;
- (id)initWithDouble:(double)value;
- (id)initWithBool:(BOOL)value;

- (id)initWithInteger:(NSInteger)value;
- (id)initWithUnsignedInteger:(NSUInteger)value;


+ (NSNumber *)numberWithChar:(char)value;
+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value;
+ (NSNumber *)numberWithShort:(short)value;
+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
+ (NSNumber *)numberWithLong:(long)value;
+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value;
+ (NSNumber *)numberWithLongLong:(long long)value;
+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value;
+ (NSNumber *)numberWithFloat:(float)value;
+ (NSNumber *)numberWithDouble:(double)value;
+ (NSNumber *)numberWithBool:(BOOL)value;

+ (NSNumber *)numberWithInteger:(NSInteger)value;
+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value;


@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSGeometry.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSCoder.h" 1 3






@class NSString, NSData;

@interface NSCoder : NSObject

- (void)encodeValueOfObjCType:(const char *)type at:(const void *)addr;
- (void)encodeDataObject:(NSData *)data;
- (void)decodeValueOfObjCType:(const char *)type at:(void *)data;
- (NSData *)decodeDataObject;
- (NSInteger)versionForClassName:(NSString *)className;

@end

@interface NSCoder (NSExtendedCoder)

- (void)encodeObject:(id)object;
- (void)encodePropertyList:(id)aPropertyList;
- (void)encodeRootObject:(id)rootObject;
- (void)encodeBycopyObject:(id)anObject;
- (void)encodeByrefObject:(id)anObject;
- (void)encodeConditionalObject:(id)object;
- (void)encodeValuesOfObjCTypes:(const char *)types, ...;
- (void)encodeArrayOfObjCType:(const char *)type count:(NSUInteger)count at:(const void *)array;
- (void)encodeBytes:(const void *)byteaddr length:(NSUInteger)length;

- (id)decodeObject;
- (id)decodePropertyList;
- (void)decodeValuesOfObjCTypes:(const char *)types, ...;
- (void)decodeArrayOfObjCType:(const char *)itemType count:(NSUInteger)count at:(void *)array;
- (void *)decodeBytesWithReturnedLength:(NSUInteger *)lengthp;

- (void)setObjectZone:(NSZone *)zone;
- (NSZone *)objectZone;

- (unsigned)systemVersion;


- (BOOL)allowsKeyedCoding;

- (void)encodeObject:(id)objv forKey:(NSString *)key;
- (void)encodeConditionalObject:(id)objv forKey:(NSString *)key;
- (void)encodeBool:(BOOL)boolv forKey:(NSString *)key;
- (void)encodeInt:(int)intv forKey:(NSString *)key;
- (void)encodeInt32:(int32_t)intv forKey:(NSString *)key;
- (void)encodeInt64:(int64_t)intv forKey:(NSString *)key;
- (void)encodeFloat:(float)realv forKey:(NSString *)key;
- (void)encodeDouble:(double)realv forKey:(NSString *)key;
- (void)encodeBytes:(const uint8_t *)bytesp length:(NSUInteger)lenv forKey:(NSString *)key;

- (BOOL)containsValueForKey:(NSString *)key;
- (id)decodeObjectForKey:(NSString *)key;
- (BOOL)decodeBoolForKey:(NSString *)key;
- (int)decodeIntForKey:(NSString *)key;
- (int32_t)decodeInt32ForKey:(NSString *)key;
- (int64_t)decodeInt64ForKey:(NSString *)key;
- (float)decodeFloatForKey:(NSString *)key;
- (double)decodeDoubleForKey:(NSString *)key;
- (const uint8_t *)decodeBytesForKey:(NSString *)key returnedLength:(NSUInteger *)lengthp;



- (void)encodeInteger:(NSInteger)intv forKey:(NSString *)key;
- (NSInteger)decodeIntegerForKey:(NSString *)key;


@end

extern "C" NSObject *NXReadNSObjectFromCoder(NSCoder *decoder) ;



@interface NSCoder (NSTypedstreamCompatibility)

- (void)encodeNXObject:(id)object ;







- (id)decodeNXObject ;
# 96 "/System/Library/Frameworks/Foundation.framework/Headers/NSCoder.h" 3
@end
# 8 "/System/Library/Frameworks/Foundation.framework/Headers/NSGeometry.h" 2 3

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGBase.h" 1 3
# 22 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGBase.h" 3
extern "C" {
# 71 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGBase.h" 3
typedef float CGFloat;






}
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSGeometry.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGGeometry.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGGeometry.h" 3
extern "C" {



struct CGPoint {
    CGFloat x;
    CGFloat y;
};
typedef struct CGPoint CGPoint;



struct CGSize {
    CGFloat width;
    CGFloat height;
};
typedef struct CGSize CGSize;



struct CGRect {
    CGPoint origin;
    CGSize size;
};
typedef struct CGRect CGRect;



enum CGRectEdge {
    CGRectMinXEdge, CGRectMinYEdge, CGRectMaxXEdge, CGRectMaxYEdge
};
typedef enum CGRectEdge CGRectEdge;



extern const CGPoint CGPointZero;



extern const CGSize CGSizeZero;



extern const CGRect CGRectZero;





extern const CGRect CGRectNull;



extern const CGRect CGRectInfinite
    ;



static inline CGPoint CGPointMake(CGFloat x, CGFloat y);



static inline CGSize CGSizeMake(CGFloat width, CGFloat height);



static inline CGRect CGRectMake(CGFloat x, CGFloat y, CGFloat width,
    CGFloat height);



extern CGFloat CGRectGetMinX(CGRect rect);



extern CGFloat CGRectGetMidX(CGRect rect);



extern CGFloat CGRectGetMaxX(CGRect rect);



extern CGFloat CGRectGetMinY(CGRect rect);



extern CGFloat CGRectGetMidY(CGRect rect);



extern CGFloat CGRectGetMaxY(CGRect rect);



extern CGFloat CGRectGetWidth(CGRect rect);



extern CGFloat CGRectGetHeight(CGRect rect);



extern bool CGPointEqualToPoint(CGPoint point1, CGPoint point2);



extern bool CGSizeEqualToSize(CGSize size1, CGSize size2);



extern bool CGRectEqualToRect(CGRect rect1, CGRect rect2);




extern CGRect CGRectStandardize(CGRect rect);




extern bool CGRectIsEmpty(CGRect rect);



extern bool CGRectIsNull(CGRect rect);



extern bool CGRectIsInfinite(CGRect rect) ;




extern CGRect CGRectInset(CGRect rect, CGFloat dx, CGFloat dy);




extern CGRect CGRectIntegral(CGRect rect);



extern CGRect CGRectUnion(CGRect r1, CGRect r2);




extern CGRect CGRectIntersection(CGRect r1, CGRect r2);



extern CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy);







extern void CGRectDivide(CGRect rect, CGRect *slice, CGRect *remainder,
    CGFloat amount, CGRectEdge edge);



extern bool CGRectContainsPoint(CGRect rect, CGPoint point);





extern bool CGRectContainsRect(CGRect rect1, CGRect rect2);





extern bool CGRectIntersectsRect(CGRect rect1, CGRect rect2);





extern CFDictionaryRef CGPointCreateDictionaryRepresentation(CGPoint point)
    ;





extern bool CGPointMakeWithDictionaryRepresentation(CFDictionaryRef dict,
    CGPoint *point) ;



extern CFDictionaryRef CGSizeCreateDictionaryRepresentation(CGSize size)
    ;





extern bool CGSizeMakeWithDictionaryRepresentation(CFDictionaryRef dict,
    CGSize *size) ;



extern CFDictionaryRef CGRectCreateDictionaryRepresentation(CGRect)
    ;





extern bool CGRectMakeWithDictionaryRepresentation(CFDictionaryRef dict,
    CGRect *rect) ;



static inline CGPoint
CGPointMake(CGFloat x, CGFloat y)
{
    CGPoint p; p.x = x; p.y = y; return p;
}

static inline CGSize
CGSizeMake(CGFloat width, CGFloat height)
{
    CGSize size; size.width = width; size.height = height; return size;
}

static inline CGRect
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
    CGRect rect;
    rect.origin.x = x; rect.origin.y = y;
    rect.size.width = width; rect.size.height = height;
    return rect;
}

}
# 11 "/System/Library/Frameworks/Foundation.framework/Headers/NSGeometry.h" 2 3
# 40 "/System/Library/Frameworks/Foundation.framework/Headers/NSGeometry.h" 3
typedef struct _NSPoint {
    CGFloat x;
    CGFloat y;
} NSPoint;

typedef NSPoint *NSPointPointer;
typedef NSPoint *NSPointArray;

typedef struct _NSSize {
    CGFloat width;
    CGFloat height;
} NSSize;

typedef NSSize *NSSizePointer;
typedef NSSize *NSSizeArray;

typedef struct _NSRect {
    NSPoint origin;
    NSSize size;
} NSRect;

typedef NSRect *NSRectPointer;
typedef NSRect *NSRectArray;

typedef enum {
    NSMinXEdge = 0,
    NSMinYEdge = 1,
    NSMaxXEdge = 2,
    NSMaxYEdge = 3
} NSRectEdge;



@class NSString;

extern "C" const NSPoint NSZeroPoint;
extern "C" const NSSize NSZeroSize;
extern "C" const NSRect NSZeroRect;

static __inline__ __attribute__((always_inline)) NSPoint NSMakePoint(CGFloat x, CGFloat y) {
    NSPoint p;
    p.x = x;
    p.y = y;
    return p;
}

static __inline__ __attribute__((always_inline)) NSSize NSMakeSize(CGFloat w, CGFloat h) {
    NSSize s;
    s.width = w;
    s.height = h;
    return s;
}

static __inline__ __attribute__((always_inline)) NSRect NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h) {
    NSRect r;
    r.origin.x = x;
    r.origin.y = y;
    r.size.width = w;
    r.size.height = h;
    return r;
}

static __inline__ __attribute__((always_inline)) CGFloat NSMaxX(NSRect aRect) {
    return (aRect.origin.x + aRect.size.width);
}

static __inline__ __attribute__((always_inline)) CGFloat NSMaxY(NSRect aRect) {
    return (aRect.origin.y + aRect.size.height);
}

static __inline__ __attribute__((always_inline)) CGFloat NSMidX(NSRect aRect) {
    return (aRect.origin.x + aRect.size.width * (CGFloat)0.5);
}

static __inline__ __attribute__((always_inline)) CGFloat NSMidY(NSRect aRect) {
    return (aRect.origin.y + aRect.size.height * (CGFloat)0.5);
}

static __inline__ __attribute__((always_inline)) CGFloat NSMinX(NSRect aRect) {
    return (aRect.origin.x);
}

static __inline__ __attribute__((always_inline)) CGFloat NSMinY(NSRect aRect) {
    return (aRect.origin.y);
}

static __inline__ __attribute__((always_inline)) CGFloat NSWidth(NSRect aRect) {
    return (aRect.size.width);
}

static __inline__ __attribute__((always_inline)) CGFloat NSHeight(NSRect aRect) {
    return (aRect.size.height);
}



static __inline__ __attribute__((always_inline)) NSRect NSRectFromCGRect(CGRect cgrect) {
    return (*(NSRect *)&(cgrect));
}

static __inline__ __attribute__((always_inline)) CGRect NSRectToCGRect(NSRect nsrect) {
    return (*(CGRect *)&(nsrect));
}

static __inline__ __attribute__((always_inline)) NSPoint NSPointFromCGPoint(CGPoint cgpoint) {
    return (*(NSPoint *)&(cgpoint));
}

static __inline__ __attribute__((always_inline)) CGPoint NSPointToCGPoint(NSPoint nspoint) {
    return (*(CGPoint *)&(nspoint));
}

static __inline__ __attribute__((always_inline)) NSSize NSSizeFromCGSize(CGSize cgsize) {
    return (*(NSSize *)&(cgsize));
}

static __inline__ __attribute__((always_inline)) CGSize NSSizeToCGSize(NSSize nssize) {
    return (*(CGSize *)&(nssize));
}



extern "C" BOOL NSEqualPoints(NSPoint aPoint, NSPoint bPoint);
extern "C" BOOL NSEqualSizes(NSSize aSize, NSSize bSize);
extern "C" BOOL NSEqualRects(NSRect aRect, NSRect bRect);
extern "C" BOOL NSIsEmptyRect(NSRect aRect);

extern "C" NSRect NSInsetRect(NSRect aRect, CGFloat dX, CGFloat dY);
extern "C" NSRect NSIntegralRect(NSRect aRect);
extern "C" NSRect NSUnionRect(NSRect aRect, NSRect bRect);
extern "C" NSRect NSIntersectionRect(NSRect aRect, NSRect bRect);
extern "C" NSRect NSOffsetRect(NSRect aRect, CGFloat dX, CGFloat dY);
extern "C" void NSDivideRect(NSRect inRect, NSRect *slice, NSRect *rem, CGFloat amount, NSRectEdge edge);
extern "C" BOOL NSPointInRect(NSPoint aPoint, NSRect aRect);
extern "C" BOOL NSMouseInRect(NSPoint aPoint, NSRect aRect, BOOL flipped);
extern "C" BOOL NSContainsRect(NSRect aRect, NSRect bRect);
extern "C" BOOL NSIntersectsRect(NSRect aRect, NSRect bRect);

extern "C" NSString *NSStringFromPoint(NSPoint aPoint);
extern "C" NSString *NSStringFromSize(NSSize aSize);
extern "C" NSString *NSStringFromRect(NSRect aRect);
extern "C" NSPoint NSPointFromString(NSString *aString);
extern "C" NSSize NSSizeFromString(NSString *aString);
extern "C" NSRect NSRectFromString(NSString *aString);

@interface NSValue (NSValueGeometryExtensions)

+ (NSValue *)valueWithPoint:(NSPoint)point;
+ (NSValue *)valueWithSize:(NSSize)size;
+ (NSValue *)valueWithRect:(NSRect)rect;

- (NSPoint)pointValue;
- (NSSize)sizeValue;
- (NSRect)rectValue;

@end

@interface NSCoder (NSGeometryCoding)

- (void)encodePoint:(NSPoint)point;
- (NSPoint)decodePoint;

- (void)encodeSize:(NSSize)size;
- (NSSize)decodeSize;

- (void)encodeRect:(NSRect)rect;
- (NSRect)decodeRect;

@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSAffineTransform.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGAffineTransform.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGAffineTransform.h" 3
typedef struct CGAffineTransform CGAffineTransform;




extern "C" {

struct CGAffineTransform {
    CGFloat a, b, c, d;
    CGFloat tx, ty;
};



extern const CGAffineTransform CGAffineTransformIdentity;



extern CGAffineTransform CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty);




extern CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty);




extern CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);




extern CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle);



extern bool CGAffineTransformIsIdentity(CGAffineTransform t) ;




extern CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);




extern CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);




extern CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);




extern CGAffineTransform CGAffineTransformInvert(CGAffineTransform t);




extern CGAffineTransform CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2);



extern bool CGAffineTransformEqualToTransform(CGAffineTransform t1, CGAffineTransform t2) ;





extern CGPoint CGPointApplyAffineTransform(CGPoint point, CGAffineTransform t);





extern CGSize CGSizeApplyAffineTransform(CGSize size, CGAffineTransform t);
# 96 "/System/Library/Frameworks/ApplicationServices.framework/Headers/../Frameworks/CoreGraphics.framework/Headers/CGAffineTransform.h" 3
extern CGRect CGRectApplyAffineTransform(CGRect rect, CGAffineTransform t) ;



static inline CGAffineTransform
__CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d,
    CGFloat tx, CGFloat ty)
{
    CGAffineTransform t;

    t.a = a; t.b = b; t.c = c; t.d = d; t.tx = tx; t.ty = ty;
    return t;
}



static inline CGPoint
__CGPointApplyAffineTransform(CGPoint point, CGAffineTransform t)
{
    CGPoint p;

    p.x = t.a * point.x + t.c * point.y + t.tx;
    p.y = t.b * point.x + t.d * point.y + t.ty;
    return p;
}



static inline CGSize
__CGSizeApplyAffineTransform(CGSize size, CGAffineTransform t)
{
    CGSize s;

    s.width = t.a * size.width + t.c * size.height;
    s.height = t.b * size.width + t.d * size.height;
    return s;
}



}
# 8 "/System/Library/Frameworks/Foundation.framework/Headers/NSAffineTransform.h" 2 3

typedef struct {
    CGFloat m11, m12, m21, m22;
    CGFloat tX, tY;
} NSAffineTransformStruct;

@interface NSAffineTransform : NSObject <NSCopying, NSCoding> {
    @private
    NSAffineTransformStruct _transformStruct;
}


+ (NSAffineTransform *)transform;


- (id)initWithTransform:(NSAffineTransform *)transform;


- (void)translateXBy:(CGFloat)deltaX yBy:(CGFloat)deltaY;


- (void)rotateByDegrees:(CGFloat)angle;
- (void)rotateByRadians:(CGFloat)angle;


- (void)scaleBy:(CGFloat)scale;
- (void)scaleXBy:(CGFloat)scaleX yBy:(CGFloat)scaleY;


- (void)invert;


- (void)appendTransform:(NSAffineTransform *)transform;
- (void)prependTransform:(NSAffineTransform *)transform;


- (NSPoint)transformPoint:(NSPoint)aPoint;
- (NSSize)transformSize:(NSSize)aSize;


- (NSAffineTransformStruct)transformStruct;
- (void)setTransformStruct:(NSAffineTransformStruct)transformStruct;

@end
# 14 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSArchiver.h" 1 3






@class NSString, NSData, NSMutableData, NSMutableDictionary, NSMutableArray;



@interface NSArchiver : NSCoder {
@private
    void *mdata;
    void *pointerTable;
    void *stringTable;
    void *ids;
    void *map;
    void *replacementTable;
    void *reserved;
}

- (id)initForWritingWithMutableData:(NSMutableData *)mdata;

- (NSMutableData *)archiverData;

- (void)encodeRootObject:(id)rootObject;
- (void)encodeConditionalObject:(id)object;

+ (NSData *)archivedDataWithRootObject:(id)rootObject;

+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;

- (void)encodeClassName:(NSString *)trueName intoClassName:(NSString *)inArchiveName;
- (NSString *)classNameEncodedForTrueClassName:(NSString *)trueName;

- (void)replaceObject:(id)object withObject:(id)newObject;

@end



@interface NSUnarchiver : NSCoder {
@private
    void * datax;
    NSUInteger cursor;
    NSZone *objectZone;
    NSUInteger systemVersion;
    signed char streamerVersion;
    char swap;
    char unused1;
    char unused2;
    void *pointerTable;
    void *stringTable;
    id classVersions;
    NSInteger lastLabel;
    void *map;
    void *allUnarchivedObjects;
    void *reserved;
}

- (id)initForReadingWithData:(NSData *)data;

- (void)setObjectZone:(NSZone *)zone;
- (NSZone *)objectZone;

- (BOOL)isAtEnd;

- (unsigned)systemVersion;

+ (id)unarchiveObjectWithData:(NSData *)data;
+ (id)unarchiveObjectWithFile:(NSString *)path;

+ (void)decodeClassName:(NSString *)inArchiveName asClassName:(NSString *)trueName;

- (void)decodeClassName:(NSString *)inArchiveName asClassName:(NSString *)trueName;

+ (NSString *)classNameDecodedForArchiveClassName:(NSString *)inArchiveName;
- (NSString *)classNameDecodedForArchiveClassName:(NSString *)inArchiveName;

- (void)replaceObject:(id)object withObject:(id)newObject;

@end



extern "C" NSString * const NSInconsistentArchiveException;



@interface NSObject (NSArchiverCallback)

- (Class)classForArchiver;
- (id)replacementObjectForArchiver:(NSArchiver *)archiver;

@end
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSArray.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSEnumerator.h" 1 3






@class NSArray;
# 19 "/System/Library/Frameworks/Foundation.framework/Headers/NSEnumerator.h" 3
typedef struct {
    unsigned long state;
    id *itemsPtr;
    unsigned long *mutationsPtr;
    unsigned long extra[5];
} NSFastEnumerationState;

@protocol NSFastEnumeration

- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len;

@end

@interface NSEnumerator : NSObject <NSFastEnumeration>

- (id)nextObject;

@end

@interface NSEnumerator (NSExtendedEnumerator)

- (NSArray *)allObjects;

@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSArray.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSRange.h" 1 3







@class NSString;

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

typedef NSRange *NSRangePointer;

static __inline__ __attribute__((always_inline)) NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
    NSRange r;
    r.location = loc;
    r.length = len;
    return r;
}

static __inline__ __attribute__((always_inline)) NSUInteger NSMaxRange(NSRange range) {
    return (range.location + range.length);
}

static __inline__ __attribute__((always_inline)) BOOL NSLocationInRange(NSUInteger loc, NSRange range) {
    return (loc - range.location < range.length);
}

static __inline__ __attribute__((always_inline)) BOOL NSEqualRanges(NSRange range1, NSRange range2) {
    return (range1.location == range2.location && range1.length == range2.length);
}

extern "C" NSRange NSUnionRange(NSRange range1, NSRange range2);
extern "C" NSRange NSIntersectionRange(NSRange range1, NSRange range2);
extern "C" NSString *NSStringFromRange(NSRange range);
extern "C" NSRange NSRangeFromString(NSString *aString);

@interface NSValue (NSValueRangeExtensions)

+ (NSValue *)valueWithRange:(NSRange)range;
- (NSRange)rangeValue;

@end
# 8 "/System/Library/Frameworks/Foundation.framework/Headers/NSArray.h" 2 3

@class NSData, NSDictionary, NSEnumerator, NSIndexSet, NSString, NSURL;



@interface NSArray : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>

- (NSUInteger)count;
- (id)objectAtIndex:(NSUInteger)index;

@end

@interface NSArray (NSExtendedArray)

- (NSArray *)arrayByAddingObject:(id)anObject;
- (NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray;
- (NSString *)componentsJoinedByString:(NSString *)separator;
- (BOOL)containsObject:(id)anObject;
- (NSString *)description;
- (NSString *)descriptionWithLocale:(NSDictionary *)locale;
- (NSString *)descriptionWithLocale:(NSDictionary *)locale indent:(NSUInteger)level;
- (id)firstObjectCommonWithArray:(NSArray *)otherArray;
- (void)getObjects:(id *)objects;
- (void)getObjects:(id *)objects range:(NSRange)range;
- (NSUInteger)indexOfObject:(id)anObject;
- (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;
- (NSUInteger)indexOfObjectIdenticalTo:(id)anObject;
- (NSUInteger)indexOfObjectIdenticalTo:(id)anObject inRange:(NSRange)range;
- (BOOL)isEqualToArray:(NSArray *)otherArray;
- (id)lastObject;
- (NSEnumerator *)objectEnumerator;
- (NSEnumerator *)reverseObjectEnumerator;
- (NSData *)sortedArrayHint;
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context;
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context hint:(NSData *)hint;
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator;
- (NSArray *)subarrayWithRange:(NSRange)range;
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;

- (void)makeObjectsPerformSelector:(SEL)aSelector;
- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;


- (NSArray *)objectsAtIndexes:(NSIndexSet *)indexes;


@end

@interface NSArray (NSArrayCreation)

+ (id)array;
+ (id)arrayWithContentsOfFile:(NSString *)path;
+ (id)arrayWithContentsOfURL:(NSURL *)url;
+ (id)arrayWithObject:(id)anObject;
+ (id)arrayWithObjects:(id)firstObj, ... ;
- (id)initWithArray:(NSArray *)array;

- (id)initWithArray:(NSArray *)array copyItems:(BOOL)flag;

- (id)initWithContentsOfFile:(NSString *)path;
- (id)initWithContentsOfURL:(NSURL *)url;
- (id)initWithObjects:(const id *)objects count:(NSUInteger)count;
- (id)initWithObjects:(id)firstObj, ... ;

+ (id)arrayWithArray:(NSArray *)array;
+ (id)arrayWithObjects:(const id *)objs count:(NSUInteger)cnt;

@end



@interface NSMutableArray : NSArray

- (void)addObject:(id)anObject;
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
- (void)removeLastObject;
- (void)removeObjectAtIndex:(NSUInteger)index;
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;

@end

@interface NSMutableArray (NSExtendedMutableArray)

- (void)addObjectsFromArray:(NSArray *)otherArray;
- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;
- (void)removeAllObjects;
- (void)removeObject:(id)anObject inRange:(NSRange)range;
- (void)removeObject:(id)anObject;
- (void)removeObjectIdenticalTo:(id)anObject inRange:(NSRange)range;
- (void)removeObjectIdenticalTo:(id)anObject;
- (void)removeObjectsFromIndices:(NSUInteger *)indices numIndices:(NSUInteger)count;
- (void)removeObjectsInArray:(NSArray *)otherArray;
- (void)removeObjectsInRange:(NSRange)range;
- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray range:(NSRange)otherRange;
- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray;
- (void)setArray:(NSArray *)otherArray;
- (void)sortUsingFunction:(NSInteger (*)(id, id, void *))compare context:(void *)context;
- (void)sortUsingSelector:(SEL)comparator;


- (void)insertObjects:(NSArray *)objects atIndexes:(NSIndexSet *)indexes;
- (void)removeObjectsAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectsAtIndexes:(NSIndexSet *)indexes withObjects:(NSArray *)objects;


@end

@interface NSMutableArray (NSMutableArrayCreation)

+ (id)arrayWithCapacity:(NSUInteger)numItems;
- (id)initWithCapacity:(NSUInteger)numItems;

@end
# 16 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSAttributedString.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSString.h" 1 3




typedef unsigned short unichar;






@class NSData, NSArray, NSDictionary, NSCharacterSet, NSData, NSURL, NSError, NSLocale;

extern "C" NSString * const NSParseErrorException;







enum {
    NSCaseInsensitiveSearch = 1,
    NSLiteralSearch = 2,
    NSBackwardsSearch = 4,
    NSAnchoredSearch = 8,
    NSNumericSearch = 64

    ,
    NSDiacriticInsensitiveSearch = 128,
    NSWidthInsensitiveSearch = 256,
    NSForcedOrderingSearch = 512

};
typedef NSUInteger NSStringCompareOptions;





enum {
    NSASCIIStringEncoding = 1,
    NSNEXTSTEPStringEncoding = 2,
    NSJapaneseEUCStringEncoding = 3,
    NSUTF8StringEncoding = 4,
    NSISOLatin1StringEncoding = 5,
    NSSymbolStringEncoding = 6,
    NSNonLossyASCIIStringEncoding = 7,
    NSShiftJISStringEncoding = 8,
    NSISOLatin2StringEncoding = 9,
    NSUnicodeStringEncoding = 10,
    NSWindowsCP1251StringEncoding = 11,
    NSWindowsCP1252StringEncoding = 12,
    NSWindowsCP1253StringEncoding = 13,
    NSWindowsCP1254StringEncoding = 14,
    NSWindowsCP1250StringEncoding = 15,
    NSISO2022JPStringEncoding = 21,
    NSMacOSRomanStringEncoding = 30,

    NSUTF16StringEncoding = NSUnicodeStringEncoding,


    NSUTF16BigEndianStringEncoding = 0x90000100,
    NSUTF16LittleEndianStringEncoding = 0x94000100,

    NSUTF32StringEncoding = 0x8c000100,
    NSUTF32BigEndianStringEncoding = 0x98000100,
    NSUTF32LittleEndianStringEncoding = 0x9c000100

};
typedef NSUInteger NSStringEncoding;


enum {
    NSStringEncodingConversionAllowLossy = 1,
    NSStringEncodingConversionExternalRepresentation = 2
};
typedef NSUInteger NSStringEncodingConversionOptions;


extern "C" NSString * const NSCharacterConversionException;


@interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding>



- (NSUInteger)length;
- (unichar)characterAtIndex:(NSUInteger)index;

@end

@interface NSString (NSStringExtensionMethods)

- (void)getCharacters:(unichar *)buffer;
- (void)getCharacters:(unichar *)buffer range:(NSRange)aRange;

- (NSString *)substringFromIndex:(NSUInteger)from;
- (NSString *)substringToIndex:(NSUInteger)to;
- (NSString *)substringWithRange:(NSRange)range;

- (NSComparisonResult)compare:(NSString *)string;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(id)locale;
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;
- (NSComparisonResult)localizedCompare:(NSString *)string;
- (NSComparisonResult)localizedCaseInsensitiveCompare:(NSString *)string;

- (BOOL)isEqualToString:(NSString *)aString;

- (BOOL)hasPrefix:(NSString *)aString;
- (BOOL)hasSuffix:(NSString *)aString;



- (NSRange)rangeOfString:(NSString *)aString;
- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;
- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)searchRange;

- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)searchRange locale:(NSLocale *)locale;




- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)aSet;
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)aSet options:(NSStringCompareOptions)mask;
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)aSet options:(NSStringCompareOptions)mask range:(NSRange)searchRange;

- (NSRange)rangeOfComposedCharacterSequenceAtIndex:(NSUInteger)index;

- (NSRange)rangeOfComposedCharacterSequencesForRange:(NSRange)range;


- (NSString *)stringByAppendingString:(NSString *)aString;
- (NSString *)stringByAppendingFormat:(NSString *)format, ...;



- (double)doubleValue;
- (float)floatValue;
- (int)intValue;

- (NSInteger)integerValue;
- (long long)longLongValue;
- (BOOL)boolValue;


- (NSArray *)componentsSeparatedByString:(NSString *)separator;

- (NSArray *)componentsSeparatedByCharactersInSet:(NSString *)separator;


- (NSString *)commonPrefixWithString:(NSString *)aString options:(NSStringCompareOptions)mask;

- (NSString *)uppercaseString;
- (NSString *)lowercaseString;
- (NSString *)capitalizedString;


- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;
- (NSString *)stringByPaddingToLength:(NSUInteger)newLength withString:(NSString *)padString startingAtIndex:(NSUInteger)padIndex;


- (void)getLineStart:(NSUInteger *)startPtr end:(NSUInteger *)lineEndPtr contentsEnd:(NSUInteger *)contentsEndPtr forRange:(NSRange)range;
- (NSRange)lineRangeForRange:(NSRange)range;


- (void)getParagraphStart:(NSUInteger *)startPtr end:(NSUInteger *)parEndPtr contentsEnd:(NSUInteger *)contentsEndPtr forRange:(NSRange)range;
- (NSRange)paragraphRangeForRange:(NSRange)range;


- (NSString *)description;

- (NSUInteger)hash;



- (NSStringEncoding)fastestEncoding;
- (NSStringEncoding)smallestEncoding;

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)lossy;
- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding;

- (BOOL)canBeConvertedToEncoding:(NSStringEncoding)encoding;




- (const char *)cStringUsingEncoding:(NSStringEncoding)encoding;
- (BOOL)getCString:(char *)buffer maxLength:(NSUInteger)maxBufferCount encoding:(NSStringEncoding)encoding;
# 205 "/System/Library/Frameworks/Foundation.framework/Headers/NSString.h" 3
- (BOOL)getBytes:(void *)buffer maxLength:(NSUInteger)maxBufferCount usedLength:(NSUInteger *)usedBufferCount encoding:(NSStringEncoding)encoding options:(NSStringEncodingConversionOptions)options range:(NSRange)range remainingRange:(NSRangePointer)leftover;




- (NSUInteger)maximumLengthOfBytesUsingEncoding:(NSStringEncoding)enc;
- (NSUInteger)lengthOfBytesUsingEncoding:(NSStringEncoding)enc;



- (NSString *)decomposedStringWithCanonicalMapping;
- (NSString *)precomposedStringWithCanonicalMapping;
- (NSString *)decomposedStringWithCompatibilityMapping;
- (NSString *)precomposedStringWithCompatibilityMapping;





- (NSString *)stringByFoldingWithOptions:(NSStringCompareOptions)options locale:(NSLocale *)locale;



- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement options:(NSStringCompareOptions)options range:(NSRange)searchRange;



- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;



- (NSString *)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)replacement;


- (const char *)UTF8String;



+ (NSStringEncoding)defaultCStringEncoding;

+ (const NSStringEncoding *)availableStringEncodings;
+ (NSString *)localizedNameOfStringEncoding:(NSStringEncoding)encoding;





- (id)init;
- (id)initWithCharactersNoCopy:(unichar *)characters length:(NSUInteger)length freeWhenDone:(BOOL)freeBuffer;
- (id)initWithCharacters:(const unichar *)characters length:(NSUInteger)length;
- (id)initWithUTF8String:(const char *)nullTerminatedCString;
- (id)initWithString:(NSString *)aString;
- (id)initWithFormat:(NSString *)format, ...;
- (id)initWithFormat:(NSString *)format arguments:(va_list)argList;
- (id)initWithFormat:(NSString *)format locale:(NSDictionary *)dict, ...;
- (id)initWithFormat:(NSString *)format locale:(NSDictionary *)dict arguments:(va_list)argList;
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;
- (id)initWithBytes:(const void *)bytes length:(NSUInteger)len encoding:(NSStringEncoding)encoding;

- (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)len encoding:(NSStringEncoding)encoding freeWhenDone:(BOOL)freeBuffer;


+ (id)string;
+ (id)stringWithString:(NSString *)string;
+ (id)stringWithCharacters:(const unichar *)characters length:(NSUInteger)length;
+ (id)stringWithUTF8String:(const char *)nullTerminatedCString;
+ (id)stringWithFormat:(NSString *)format, ...;
+ (id)localizedStringWithFormat:(NSString *)format, ...;


- (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding;
+ (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc;



- (id)initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;
- (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;
+ (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;
+ (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;



- (id)initWithContentsOfURL:(NSURL *)url usedEncoding:(NSStringEncoding *)enc error:(NSError **)error;
- (id)initWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error;
+ (id)stringWithContentsOfURL:(NSURL *)url usedEncoding:(NSStringEncoding *)enc error:(NSError **)error;
+ (id)stringWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error;



- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;




@end


@interface NSMutableString : NSString



- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;

@end

@interface NSMutableString (NSMutableStringExtensionMethods)

- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
- (void)deleteCharactersInRange:(NSRange)range;
- (void)appendString:(NSString *)aString;
- (void)appendFormat:(NSString *)format, ...;
- (void)setString:(NSString *)aString;



- (id)initWithCapacity:(NSUInteger)capacity;
+ (id)stringWithCapacity:(NSUInteger)capacity;




- (NSUInteger)replaceOccurrencesOfString:(NSString *)target withString:(NSString *)replacement options:(NSStringCompareOptions)options range:(NSRange)searchRange;


@end



@interface NSString (NSExtendedStringPropertyListParsing)

- (id)propertyList;
- (NSDictionary *)propertyListFromStringsFileFormat;

@end



@interface NSString (NSStringDeprecated)



- (const char *)cString;
- (const char *)lossyCString;
- (NSUInteger)cStringLength;
- (void)getCString:(char *)bytes;
- (void)getCString:(char *)bytes maxLength:(NSUInteger)maxLength;
- (void)getCString:(char *)bytes maxLength:(NSUInteger)maxLength range:(NSRange)aRange remainingRange:(NSRangePointer)leftoverRange;

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;

- (id)initWithContentsOfFile:(NSString *)path;
- (id)initWithContentsOfURL:(NSURL *)url;
+ (id)stringWithContentsOfFile:(NSString *)path;
+ (id)stringWithContentsOfURL:(NSURL *)url;

- (id)initWithCStringNoCopy:(char *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)freeBuffer;
- (id)initWithCString:(const char *)bytes length:(NSUInteger)length;
- (id)initWithCString:(const char *)bytes;
+ (id)stringWithCString:(const char *)bytes length:(NSUInteger)length;
+ (id)stringWithCString:(const char *)bytes;

@end


enum {
    NSProprietaryStringEncoding = 65536
};
# 386 "/System/Library/Frameworks/Foundation.framework/Headers/NSString.h" 3
@interface NSSimpleCString : NSString {
@protected
    char *bytes;
    int numBytes;



}
@end

@interface NSConstantString : NSSimpleCString
@end

extern void *_NSConstantStringClassReference;
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSAttributedString.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDictionary.h" 1 3







@class NSArray, NSEnumerator, NSString, NSURL;



@interface NSDictionary : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>

- (NSUInteger)count;
- (NSEnumerator *)keyEnumerator;
- (id)objectForKey:(id)aKey;

@end

@interface NSDictionary (NSExtendedDictionary)

- (NSArray *)allKeys;
- (NSArray *)allKeysForObject:(id)anObject;
- (NSArray *)allValues;
- (NSString *)description;
- (NSString *)descriptionInStringsFileFormat;
- (NSString *)descriptionWithLocale:(NSDictionary *)locale;
- (NSString *)descriptionWithLocale:(NSDictionary *)locale indent:(NSUInteger)level;
- (BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary;
- (NSEnumerator *)objectEnumerator;
- (NSArray *)objectsForKeys:(NSArray *)keys notFoundMarker:(id)marker;
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;

- (NSArray *)keysSortedByValueUsingSelector:(SEL)comparator;
- (void)getObjects:(id *)objects andKeys:(id *)keys;

@end

@interface NSDictionary (NSDictionaryCreation)

+ (id)dictionary;
+ (id)dictionaryWithContentsOfFile:(NSString *)path;
+ (id)dictionaryWithContentsOfURL:(NSURL *)url;
+ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys;
+ (id)dictionaryWithObjects:(id *)objects forKeys:(id *)keys count:(NSUInteger)count;
+ (id)dictionaryWithObjectsAndKeys:(id)firstObject, ... ;
- (id)initWithContentsOfFile:(NSString *)path;
- (id)initWithContentsOfURL:(NSURL *)url;
- (id)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys;
- (id)initWithObjects:(id *)objects forKeys:(id *)keys count:(NSUInteger)count;
- (id)initWithObjectsAndKeys:(id)firstObject, ... ;
- (id)initWithDictionary:(NSDictionary *)otherDictionary;

+ (id)dictionaryWithDictionary:(NSDictionary *)dict;
+ (id)dictionaryWithObject:(id)object forKey:(id)key;
- (id)initWithDictionary:(NSDictionary *)otherDictionary copyItems:(BOOL)aBool;

@end



@interface NSMutableDictionary : NSDictionary

- (void)removeObjectForKey:(id)aKey;
- (void)setObject:(id)anObject forKey:(id)aKey;

@end

@interface NSMutableDictionary (NSExtendedMutableDictionary)

- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
- (void)removeAllObjects;
- (void)removeObjectsForKeys:(NSArray *)keyArray;
- (void)setDictionary:(NSDictionary *)otherDictionary;

@end

@interface NSMutableDictionary (NSMutableDictionaryCreation)

+ (id)dictionaryWithCapacity:(NSUInteger)numItems;
- (id)initWithCapacity:(NSUInteger)numItems;

@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSAttributedString.h" 2 3

@interface NSAttributedString : NSObject <NSCopying, NSMutableCopying, NSCoding>

- (NSString *)string;
- (NSDictionary *)attributesAtIndex:(NSUInteger)location effectiveRange:(NSRangePointer)range;

@end

@interface NSAttributedString (NSExtendedAttributedString)

- (NSUInteger)length;
- (id)attribute:(NSString *)attrName atIndex:(NSUInteger)location effectiveRange:(NSRangePointer)range;
- (NSAttributedString *)attributedSubstringFromRange:(NSRange)range;

- (NSDictionary *)attributesAtIndex:(NSUInteger)location longestEffectiveRange:(NSRangePointer)range inRange:(NSRange)rangeLimit;
- (id)attribute:(NSString *)attrName atIndex:(NSUInteger)location longestEffectiveRange:(NSRangePointer)range inRange:(NSRange)rangeLimit;

- (BOOL)isEqualToAttributedString:(NSAttributedString *)other;

- (id)initWithString:(NSString *)str;
- (id)initWithString:(NSString *)str attributes:(NSDictionary *)attrs;
- (id)initWithAttributedString:(NSAttributedString *)attrStr;

@end

@interface NSMutableAttributedString : NSAttributedString

- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)str;
- (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;

@end

@interface NSMutableAttributedString (NSExtendedMutableAttributedString)

- (NSMutableString *)mutableString;

- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;
- (void)removeAttribute:(NSString *)name range:(NSRange)range;

- (void)replaceCharactersInRange:(NSRange)range withAttributedString:(NSAttributedString *)attrString;
- (void)insertAttributedString:(NSAttributedString *)attrString atIndex:(NSUInteger)loc;
- (void)appendAttributedString:(NSAttributedString *)attrString;
- (void)deleteCharactersInRange:(NSRange)range;
- (void)setAttributedString:(NSAttributedString *)attrString;

- (void)beginEditing;
- (void)endEditing;

@end
# 17 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSAutoreleasePool.h" 1 3






@interface NSAutoreleasePool : NSObject {
@private
    void *_token;
    void *_reserved3;
    void *_reserved2;
    void *_reserved;
}

+ (void)addObject:(id)anObject;

- (void)addObject:(id)anObject;


- (void)drain;


@end
# 18 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h" 1 3






@class NSArray, NSDictionary, NSString, NSError;



@interface NSBundle : NSObject {
@private
    NSUInteger _flags;
    id _cfBundle;
    NSUInteger _refCount;
    Class _principalClass;
    void *_tmp1;
    void *_tmp2;
    void *_reserved1;
    void *_reserved0;
}

+ (NSBundle *)mainBundle;
+ (NSBundle *)bundleWithPath:(NSString *)path;
- (id)initWithPath:(NSString *)path;

+ (NSBundle *)bundleForClass:(Class)aClass;
+ (NSBundle *)bundleWithIdentifier:(NSString *)identifier;

+ (NSArray *)allBundles;
+ (NSArray *)allFrameworks;

- (BOOL)load;

- (BOOL)isLoaded;
- (BOOL)unload;



- (BOOL)preflightAndReturnError:(NSError **)error;
- (BOOL)loadAndReturnError:(NSError **)error;


- (NSString *)bundlePath;
- (NSString *)resourcePath;
- (NSString *)executablePath;
- (NSString *)pathForAuxiliaryExecutable:(NSString *)executableName;

- (NSString *)privateFrameworksPath;
- (NSString *)sharedFrameworksPath;
- (NSString *)sharedSupportPath;
- (NSString *)builtInPlugInsPath;

- (NSString *)bundleIdentifier;

- (Class)classNamed:(NSString *)className;

- (Class)principalClass;


+ (NSString *)pathForResource:(NSString *)name ofType:(NSString *)ext inDirectory:(NSString *)bundlePath;
- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)ext;
- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)ext inDirectory:(NSString *)subpath;
- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)ext inDirectory:(NSString *)subpath forLocalization:(NSString *)localizationName;

+ (NSArray *)pathsForResourcesOfType:(NSString *)ext inDirectory:(NSString *)bundlePath;
- (NSArray *)pathsForResourcesOfType:(NSString *)ext inDirectory:(NSString *)subpath;
- (NSArray *)pathsForResourcesOfType:(NSString *)ext inDirectory:(NSString *)subpath forLocalization:(NSString *)localizationName;

- (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName;

- (NSDictionary *)infoDictionary;

- (NSDictionary *)localizedInfoDictionary;
- (id)objectForInfoDictionaryKey:(NSString *)key;


- (NSArray *)localizations;
- (NSArray *)preferredLocalizations;

- (NSString *)developmentLocalization;


+ (NSArray *)preferredLocalizationsFromArray:(NSArray *)localizationsArray;

+ (NSArray *)preferredLocalizationsFromArray:(NSArray *)localizationsArray forPreferences:(NSArray *)preferencesArray;



enum {
    NSBundleExecutableArchitectureI386 = 0x00000007,
    NSBundleExecutableArchitecturePPC = 0x00000012,
    NSBundleExecutableArchitectureX86_64 = 0x01000007,
    NSBundleExecutableArchitecturePPC64 = 0x01000012
};

- (NSArray *)executableArchitectures;


@end
# 111 "/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h" 3
extern "C" NSString * const NSBundleDidLoadNotification;
extern "C" NSString * const NSLoadedClasses;
# 19 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSByteOrder.h" 1 3







enum {
    NS_UnknownByteOrder = CFByteOrderUnknown,
    NS_LittleEndian = CFByteOrderLittleEndian,
    NS_BigEndian = CFByteOrderBigEndian
};

static __inline__ __attribute__((always_inline)) long NSHostByteOrder(void) {
    return CFByteOrderGetCurrent();
}

static __inline__ __attribute__((always_inline)) unsigned short NSSwapShort(unsigned short inv) {
    return CFSwapInt16(inv);
}

static __inline__ __attribute__((always_inline)) unsigned int NSSwapInt(unsigned int inv) {
    return CFSwapInt32(inv);
}

static __inline__ __attribute__((always_inline)) unsigned long NSSwapLong(unsigned long inv) {



    return CFSwapInt32(inv);

}

static __inline__ __attribute__((always_inline)) unsigned long long NSSwapLongLong(unsigned long long inv) {
    return CFSwapInt64(inv);
}

static __inline__ __attribute__((always_inline)) unsigned short NSSwapBigShortToHost(unsigned short x) {
    return CFSwapInt16BigToHost(x);
}

static __inline__ __attribute__((always_inline)) unsigned int NSSwapBigIntToHost(unsigned int x) {
    return CFSwapInt32BigToHost(x);
}

static __inline__ __attribute__((always_inline)) unsigned long NSSwapBigLongToHost(unsigned long x) {



    return CFSwapInt32BigToHost(x);

}

static __inline__ __attribute__((always_inline)) unsigned long long NSSwapBigLongLongToHost(unsigned long long x) {
    return CFSwapInt64BigToHost(x);
}

static __inline__ __attribute__((always_inline)) unsigned short NSSwapHostShortToBig(unsigned short x) {
    return CFSwapInt16HostToBig(x);
}

static __inline__ __attribute__((always_inline)) unsigned int NSSwapHostIntToBig(unsigned int x) {
    return CFSwapInt32HostToBig(x);
}

static __inline__ __attribute__((always_inline)) unsigned long NSSwapHostLongToBig(unsigned long x) {



    return CFSwapInt32HostToBig(x);

}

static __inline__ __attribute__((always_inline)) unsigned long long NSSwapHostLongLongToBig(unsigned long long x) {
    return CFSwapInt64HostToBig(x);
}

static __inline__ __attribute__((always_inline)) unsigned short NSSwapLittleShortToHost(unsigned short x) {
    return CFSwapInt16LittleToHost(x);
}

static __inline__ __attribute__((always_inline)) unsigned int NSSwapLittleIntToHost(unsigned int x) {
    return CFSwapInt32LittleToHost(x);
}

static __inline__ __attribute__((always_inline)) unsigned long NSSwapLittleLongToHost(unsigned long x) {



    return CFSwapInt32LittleToHost(x);

}

static __inline__ __attribute__((always_inline)) unsigned long long NSSwapLittleLongLongToHost(unsigned long long x) {
    return CFSwapInt64LittleToHost(x);
}

static __inline__ __attribute__((always_inline)) unsigned short NSSwapHostShortToLittle(unsigned short x) {
    return CFSwapInt16HostToLittle(x);
}

static __inline__ __attribute__((always_inline)) unsigned int NSSwapHostIntToLittle(unsigned int x) {
    return CFSwapInt32HostToLittle(x);
}

static __inline__ __attribute__((always_inline)) unsigned long NSSwapHostLongToLittle(unsigned long x) {



    return CFSwapInt32HostToLittle(x);

}

static __inline__ __attribute__((always_inline)) unsigned long long NSSwapHostLongLongToLittle(unsigned long long x) {
    return CFSwapInt64HostToLittle(x);
}


typedef struct {unsigned int v;} NSSwappedFloat;
typedef struct {unsigned long long v;} NSSwappedDouble;

static __inline__ __attribute__((always_inline)) NSSwappedFloat NSConvertHostFloatToSwapped(float x) {
    union fconv {
 float number;
 NSSwappedFloat sf;
    };
    return ((union fconv *)&x)->sf;
}

static __inline__ __attribute__((always_inline)) float NSConvertSwappedFloatToHost(NSSwappedFloat x) {
    union fconv {
 float number;
 NSSwappedFloat sf;
    };
    return ((union fconv *)&x)->number;
}

static __inline__ __attribute__((always_inline)) NSSwappedDouble NSConvertHostDoubleToSwapped(double x) {
    union dconv {
 double number;
 NSSwappedDouble sd;
    };
    return ((union dconv *)&x)->sd;
}

static __inline__ __attribute__((always_inline)) double NSConvertSwappedDoubleToHost(NSSwappedDouble x) {
    union dconv {
 double number;
 NSSwappedDouble sd;
    };
    return ((union dconv *)&x)->number;
}

static __inline__ __attribute__((always_inline)) NSSwappedFloat NSSwapFloat(NSSwappedFloat x) {
    x.v = NSSwapLong(x.v);
    return x;
}

static __inline__ __attribute__((always_inline)) NSSwappedDouble NSSwapDouble(NSSwappedDouble x) {
    x.v = NSSwapLongLong(x.v);
    return x;
}



static __inline__ __attribute__((always_inline)) double NSSwapBigDoubleToHost(NSSwappedDouble x) {
    return NSConvertSwappedDoubleToHost(x);
}

static __inline__ __attribute__((always_inline)) float NSSwapBigFloatToHost(NSSwappedFloat x) {
    return NSConvertSwappedFloatToHost(x);
}

static __inline__ __attribute__((always_inline)) NSSwappedDouble NSSwapHostDoubleToBig(double x) {
    return NSConvertHostDoubleToSwapped(x);
}

static __inline__ __attribute__((always_inline)) NSSwappedFloat NSSwapHostFloatToBig(float x) {
    return NSConvertHostFloatToSwapped(x);
}

static __inline__ __attribute__((always_inline)) double NSSwapLittleDoubleToHost(NSSwappedDouble x) {
    return NSConvertSwappedDoubleToHost(NSSwapDouble(x));
}

static __inline__ __attribute__((always_inline)) float NSSwapLittleFloatToHost(NSSwappedFloat x) {
    return NSConvertSwappedFloatToHost(NSSwapFloat(x));
}

static __inline__ __attribute__((always_inline)) NSSwappedDouble NSSwapHostDoubleToLittle(double x) {
    return NSSwapDouble(NSConvertHostDoubleToSwapped(x));
}

static __inline__ __attribute__((always_inline)) NSSwappedFloat NSSwapHostFloatToLittle(float x) {
    return NSSwapFloat(NSConvertHostFloatToSwapped(x));
}
# 20 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSCalendar.h" 1 3






# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDate.h" 1 3






@class NSString;

typedef double NSTimeInterval;



@interface NSDate : NSObject <NSCopying, NSCoding>

- (NSTimeInterval)timeIntervalSinceReferenceDate;

@end

@interface NSDate (NSExtendedDate)

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;
- (NSTimeInterval)timeIntervalSinceNow;
- (NSTimeInterval)timeIntervalSince1970;

- (id)addTimeInterval:(NSTimeInterval)seconds;

- (NSDate *)earlierDate:(NSDate *)anotherDate;
- (NSDate *)laterDate:(NSDate *)anotherDate;
- (NSComparisonResult)compare:(NSDate *)other;

- (NSString *)description;
- (BOOL)isEqualToDate:(NSDate *)otherDate;

+ (NSTimeInterval)timeIntervalSinceReferenceDate;

@end

@interface NSDate (NSDateCreation)

+ (id)date;

+ (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;
+ (id)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)secs;
+ (id)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;

+ (id)distantFuture;
+ (id)distantPast;

- (id)init;
- (id)initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)secsToBeAdded;
- (id)initWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)anotherDate;
- (id)initWithTimeIntervalSinceNow:(NSTimeInterval)secsToBeAddedToNow;

@end
# 8 "/System/Library/Frameworks/Foundation.framework/Headers/NSCalendar.h" 2 3





@class NSDateComponents, NSLocale, NSTimeZone, NSString;

enum {
 NSEraCalendarUnit = kCFCalendarUnitEra,
 NSYearCalendarUnit = kCFCalendarUnitYear,
 NSMonthCalendarUnit = kCFCalendarUnitMonth,
 NSDayCalendarUnit = kCFCalendarUnitDay,
 NSHourCalendarUnit = kCFCalendarUnitHour,
 NSMinuteCalendarUnit = kCFCalendarUnitMinute,
 NSSecondCalendarUnit = kCFCalendarUnitSecond,
 NSWeekCalendarUnit = kCFCalendarUnitWeek,
 NSWeekdayCalendarUnit = kCFCalendarUnitWeekday,
 NSWeekdayOrdinalCalendarUnit = kCFCalendarUnitWeekdayOrdinal,
};
typedef NSUInteger NSCalendarUnit;

@interface NSCalendar : NSObject <NSCopying, NSCoding>

+ (id)currentCalendar;

- (id)initWithCalendarIdentifier:(NSString *)ident;

- (NSString *)calendarIdentifier;


- (void)setLocale:(NSLocale *)locale;
- (NSLocale *)locale;

- (void)setTimeZone:(NSTimeZone *)tz;
- (NSTimeZone *)timeZone;

- (void)setFirstWeekday:(NSUInteger)weekday;
- (NSUInteger)firstWeekday;

- (void)setMinimumDaysInFirstWeek:(NSUInteger)mdw;
- (NSUInteger)minimumDaysInFirstWeek;


- (NSRange)minimumRangeOfUnit:(NSCalendarUnit)unit;
- (NSRange)maximumRangeOfUnit:(NSCalendarUnit)unit;

- (NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date;
- (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date;

- (BOOL)rangeOfUnit:(NSCalendarUnit)unit startDate:(NSDate **)datep interval:(NSTimeInterval *)tip forDate:(NSDate *)date ;

- (NSDate *)dateFromComponents:(NSDateComponents *)comps;
- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)date;

- (NSDate *)dateByAddingComponents:(NSDateComponents *)comps toDate:(NSDate *)date options:(NSUInteger)opts;

- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts;

@end

enum {
 NSWrapCalendarComponents = kCFCalendarComponentsWrap,
};
# 90 "/System/Library/Frameworks/Foundation.framework/Headers/NSCalendar.h" 3
enum {
 NSUndefinedDateComponent = 2147483647L
};

@interface NSDateComponents : NSObject <NSCopying, NSCoding>
- (NSInteger)era;
- (NSInteger)year;
- (NSInteger)month;
- (NSInteger)day;
- (NSInteger)hour;
- (NSInteger)minute;
- (NSInteger)second;
- (NSInteger)week;
- (NSInteger)weekday;
- (NSInteger)weekdayOrdinal;

- (void)setEra:(NSInteger)v;
- (void)setYear:(NSInteger)v;
- (void)setMonth:(NSInteger)v;
- (void)setDay:(NSInteger)v;
- (void)setHour:(NSInteger)v;
- (void)setMinute:(NSInteger)v;
- (void)setSecond:(NSInteger)v;
- (void)setWeek:(NSInteger)v;
- (void)setWeekday:(NSInteger)v;
- (void)setWeekdayOrdinal:(NSInteger)v;
@end
# 21 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSCalendarDate.h" 1 3






@class NSString, NSArray, NSDictionary, NSTimeZone;

@interface NSCalendarDate : NSDate {
@private
    NSUInteger refCount;
    NSTimeInterval _timeIntervalSinceReferenceDate;
    NSTimeZone *_timeZone;
    NSString *_formatString;
    void *_reserved;
}

+ (id)dateWithYear:(NSInteger)year month:(NSUInteger)month day:(NSUInteger)day hour:(NSUInteger)hour minute:(NSUInteger)minute second:(NSUInteger)second timeZone:(NSTimeZone *)aTimeZone;

+ (id)dateWithString:(NSString *)description calendarFormat:(NSString *)format;

+ (id)dateWithString:(NSString *)description calendarFormat:(NSString *)format locale:(NSDictionary *)dict;

+ (id)calendarDate;

- (id)initWithYear:(NSInteger)year month:(NSUInteger)month day:(NSUInteger)day hour:(NSUInteger)hour minute:(NSUInteger)minute second:(NSUInteger)second timeZone:(NSTimeZone *)aTimeZone;

- (id)initWithString:(NSString *)description;
- (id)initWithString:(NSString *)description calendarFormat:(NSString *)format;

- (id)initWithString:(NSString *)description calendarFormat:(NSString *)format locale:(NSDictionary *)dict;

- (NSTimeZone *)timeZone;
- (void)setTimeZone:(NSTimeZone *)aTimeZone;

- (NSString *)calendarFormat;
- (void)setCalendarFormat:(NSString *)format;

- (NSInteger)yearOfCommonEra;
- (NSInteger)monthOfYear;
- (NSInteger)dayOfMonth;
- (NSInteger)dayOfWeek;
- (NSInteger)dayOfYear;
- (NSInteger)dayOfCommonEra;
- (NSInteger)hourOfDay;
- (NSInteger)minuteOfHour;
- (NSInteger)secondOfMinute;

- (NSCalendarDate *)dateByAddingYears:(NSInteger)year months:(NSInteger)month days:(NSInteger)day hours:(NSInteger)hour minutes:(NSInteger)minute seconds:(NSInteger)second;

- (void)years:(NSInteger *)yp months:(NSInteger *)mop days:(NSInteger *)dp hours:(NSInteger *)hp minutes:(NSInteger *)mip seconds:(NSInteger *)sp sinceDate:(NSCalendarDate *)date;

- (NSString *)description;
- (NSString *)descriptionWithLocale:(NSDictionary *)locale;
- (NSString *)descriptionWithCalendarFormat:(NSString *)format;
- (NSString *)descriptionWithCalendarFormat:(NSString *)format locale:(NSDictionary *)locale;

@end



@interface NSDate (NSCalendarDateExtras)

+ (id)dateWithString:(NSString *)aString;

- (id)initWithString:(NSString *)description;

- (NSCalendarDate *)dateWithCalendarFormat:(NSString *)format timeZone:(NSTimeZone *)aTimeZone;

- (NSString *)descriptionWithLocale:(NSDictionary *)locale;

- (NSString *)descriptionWithCalendarFormat:(NSString *)format timeZone:(NSTimeZone *)aTimeZone locale:(NSDictionary *)locale;

@end

@interface NSDate (NSNaturalLangage)

+ dateWithNaturalLanguageString:(NSString *)string;
+ dateWithNaturalLanguageString:(NSString *)string locale:(NSDictionary *)dict;

@end
# 22 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSCharacterSet.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSCharacterSet.h" 3
@class NSData;

enum {
    NSOpenStepUnicodeReservedBase = 0xF400
};

@interface NSCharacterSet : NSObject <NSCopying, NSMutableCopying, NSCoding>

+ (id)controlCharacterSet;
+ (id)whitespaceCharacterSet;
+ (id)whitespaceAndNewlineCharacterSet;
+ (id)decimalDigitCharacterSet;
+ (id)letterCharacterSet;
+ (id)lowercaseLetterCharacterSet;
+ (id)uppercaseLetterCharacterSet;
+ (id)nonBaseCharacterSet;
+ (id)alphanumericCharacterSet;
+ (id)decomposableCharacterSet;
+ (id)illegalCharacterSet;
+ (id)punctuationCharacterSet;

+ (id)capitalizedLetterCharacterSet;


+ (id)symbolCharacterSet;


+ (id)newlineCharacterSet;


+ (id)characterSetWithRange:(NSRange)aRange;
+ (id)characterSetWithCharactersInString:(NSString *)aString;
+ (id)characterSetWithBitmapRepresentation:(NSData *)data;
+ (id)characterSetWithContentsOfFile:(NSString *)fName;

- (BOOL)characterIsMember:(unichar)aCharacter;
- (NSData *)bitmapRepresentation;
- (NSCharacterSet *)invertedSet;


- (BOOL)longCharacterIsMember:(UTF32Char)theLongChar;

- (BOOL)isSupersetOfSet:(NSCharacterSet *)theOtherSet;
- (BOOL)hasMemberInPlane:(uint8_t)thePlane;

@end

@interface NSMutableCharacterSet : NSCharacterSet <NSCopying, NSMutableCopying>

- (void)addCharactersInRange:(NSRange)aRange;
- (void)removeCharactersInRange:(NSRange)aRange;
- (void)addCharactersInString:(NSString *)aString;
- (void)removeCharactersInString:(NSString *)aString;
- (void)formUnionWithCharacterSet:(NSCharacterSet *)otherSet;
- (void)formIntersectionWithCharacterSet:(NSCharacterSet *)otherSet;
- (void)invert;

@end
# 23 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSClassDescription.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSException.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSException.h" 3
@class NSString, NSDictionary, NSArray;



extern "C" NSString * const NSGenericException;
extern "C" NSString * const NSRangeException;
extern "C" NSString * const NSInvalidArgumentException;
extern "C" NSString * const NSInternalInconsistencyException;

extern "C" NSString * const NSMallocException;

extern "C" NSString * const NSObjectInaccessibleException;
extern "C" NSString * const NSObjectNotAvailableException;
extern "C" NSString * const NSDestinationInvalidException;

extern "C" NSString * const NSPortTimeoutException;
extern "C" NSString * const NSInvalidSendPortException;
extern "C" NSString * const NSInvalidReceivePortException;
extern "C" NSString * const NSPortSendException;
extern "C" NSString * const NSPortReceiveException;

extern "C" NSString * const NSOldStyleException;



@interface NSException : NSObject <NSCopying, NSCoding> {
    @private
    NSString *name;
    NSString *reason;
    NSDictionary *userInfo;
    id reserved;
}

+ (NSException *)exceptionWithName:(NSString *)name reason:(NSString *)reason userInfo:(NSDictionary *)userInfo;
- (id)initWithName:(NSString *)aName reason:(NSString *)aReason userInfo:(NSDictionary *)aUserInfo;

- (NSString *)name;
- (NSString *)reason;
- (NSDictionary *)userInfo;

- (NSArray *)callStackReturnAddresses ;

- (void)raise;

@end

@interface NSException (NSExceptionRaisingConveniences)

+ (void)raise:(NSString *)name format:(NSString *)format, ...;
+ (void)raise:(NSString *)name format:(NSString *)format arguments:(va_list)argList;

@end
# 70 "/System/Library/Frameworks/Foundation.framework/Headers/NSException.h" 3
typedef void NSUncaughtExceptionHandler(NSException *exception);

extern "C" NSUncaughtExceptionHandler *NSGetUncaughtExceptionHandler(void);
extern "C" void NSSetUncaughtExceptionHandler(NSUncaughtExceptionHandler *);

@class NSAssertionHandler;
# 156 "/System/Library/Frameworks/Foundation.framework/Headers/NSException.h" 3
@interface NSAssertionHandler : NSObject {
    @private
    void *_reserved;
}

+ (NSAssertionHandler *)currentHandler;

- (void)handleFailureInMethod:(SEL)selector object:(id)object file:(NSString *)fileName lineNumber:(NSInteger)line description:(NSString *)format,...;

- (void)handleFailureInFunction:(NSString *)functionName file:(NSString *)fileName lineNumber:(NSInteger)line description:(NSString *)format,...;

@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSClassDescription.h" 2 3

@class NSString, NSArray, NSDictionary;

@interface NSClassDescription : NSObject

+ (void)registerClassDescription:(NSClassDescription *)description forClass:(Class)aClass;
+ (void)invalidateClassDescriptionCache;
+ (NSClassDescription *)classDescriptionForClass:(Class)aClass;

- (NSArray *)attributeKeys;
- (NSArray *)toOneRelationshipKeys;
- (NSArray *)toManyRelationshipKeys;
- (NSString *)inverseForRelationshipKey:(NSString *)relationshipKey;

@end

@interface NSObject (NSClassDescriptionPrimitives)

- (NSClassDescription *)classDescription;
- (NSArray *)attributeKeys;
- (NSArray *)toOneRelationshipKeys;
- (NSArray *)toManyRelationshipKeys;
- (NSString *)inverseForRelationshipKey:(NSString *)relationshipKey;

@end

extern "C" NSString *NSClassDescriptionNeededForClassNotification;
# 24 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSConnection.h" 1 3







@class NSMutableData, NSDistantObject, NSException, NSData;
@class NSPort, NSRunLoop, NSPortNameServer, NSDictionary, NSArray;

@interface NSConnection : NSObject {
    @private
    id receivePort;
    id sendPort;
    id delegate;
    int32_t busy;
    int32_t localProxyCount;
    uintptr_t ___4;
    uintptr_t ___3;
    id statistics;
    unsigned char isDead;
    unsigned char isValid;
    unsigned char wantsInvalid;
    unsigned char authGen:1;
    unsigned char authCheck:1;
    unsigned char encryptFlag:1;
    unsigned char decryptFlag:1;
    unsigned char doRequest:1;
    unsigned char isQueueing:1;
    unsigned char isMulti:1;
    unsigned char invalidateRP:1;
    id ___1;
    id ___2;
    id runLoops;
    id requestModes;
    id rootObject;
    void * registerInfo;
    id replMode;
    id classInfoImported;
    id releasedProxies;
    void * reserved;
}

- (NSDictionary *)statistics;

+ (NSArray *)allConnections;

+ (NSConnection *)defaultConnection;

+ (id)connectionWithRegisteredName:(NSString *)name host:(NSString *)hostName;
+ (id)connectionWithRegisteredName:(NSString *)name host:(NSString *)hostName usingNameServer:(NSPortNameServer *)server;
+ (NSDistantObject *)rootProxyForConnectionWithRegisteredName:(NSString *)name host:(NSString *)hostName;
+ (NSDistantObject *)rootProxyForConnectionWithRegisteredName:(NSString *)name host:(NSString *)hostName usingNameServer:(NSPortNameServer *)server;

+ (id)serviceConnectionWithName:(NSString *)name rootObject:(id)root usingNameServer:(NSPortNameServer *)server ;
+ (id)serviceConnectionWithName:(NSString *)name rootObject:(id)root ;

- (void)setRequestTimeout:(NSTimeInterval)ti;
- (NSTimeInterval)requestTimeout;
- (void)setReplyTimeout:(NSTimeInterval)ti;
- (NSTimeInterval)replyTimeout;

- (void)setRootObject:(id)anObject;
- (id)rootObject;

- (NSDistantObject *)rootProxy;

- (void)setDelegate:(id)anObject;
- (id)delegate;

- (void)setIndependentConversationQueueing:(BOOL)yorn;
- (BOOL)independentConversationQueueing;

- (BOOL)isValid;

- (void)invalidate;

- (void)addRequestMode:(NSString *)rmode;
- (void)removeRequestMode:(NSString *)rmode;
- (NSArray *)requestModes;

- (BOOL)registerName:(NSString *) name;
- (BOOL)registerName:(NSString *) name withNameServer:(NSPortNameServer *)server;

+ (id)connectionWithReceivePort:(NSPort *)receivePort sendPort:(NSPort *)sendPort;

+ (id)currentConversation;

- (id)initWithReceivePort:(NSPort *)receivePort sendPort:(NSPort *)sendPort;
- (NSPort *)sendPort;
- (NSPort *)receivePort;

- (void)enableMultipleThreads;
- (BOOL)multipleThreadsEnabled;

- (void)addRunLoop:(NSRunLoop *)runloop;
- (void)removeRunLoop:(NSRunLoop *)runloop;

- (void)runInNewThread;

- (NSArray *)remoteObjects;
- (NSArray *)localObjects;

@end

extern "C" NSString * const NSConnectionReplyMode;

extern "C" NSString * const NSConnectionDidDieNotification;


@interface NSObject (NSConnectionDelegateMethods)



- (BOOL)makeNewConnection:(NSConnection *)conn sender:(NSConnection *)ancestor;



- (BOOL)connection:(NSConnection *)ancestor shouldMakeNewConnection:(NSConnection *)conn;

- (NSData *)authenticationDataForComponents:(NSArray *)components;
- (BOOL)authenticateComponents:(NSArray *)components withData:(NSData *)signature;

- (id)createConversationForConnection:(NSConnection *)conn;

@end

extern "C" NSString * const NSFailedAuthenticationException;

extern "C" NSString * const NSConnectionDidInitializeNotification;

@interface NSDistantObjectRequest : NSObject

- (NSInvocation *)invocation;
- (NSConnection *)connection;
- (id)conversation;
- (void)replyWithException:(NSException *)exception;

@end

@interface NSObject (NSDistantObjectRequestMethods)

- (BOOL)connection:(NSConnection *)connection handleRequest:(NSDistantObjectRequest *)doreq;

@end
# 26 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSData.h" 1 3







@class NSString, NSURL, NSError;




enum {
    NSMappedRead = 1,
    NSUncachedRead = 2
};

enum {
    NSAtomicWrite = 1
};





@interface NSData : NSObject <NSCopying, NSMutableCopying, NSCoding>

- (NSUInteger)length;
- (const void *)bytes;

@end

@interface NSData (NSExtendedData)

- (NSString *)description;
- (void)getBytes:(void *)buffer;
- (void)getBytes:(void *)buffer length:(NSUInteger)length;
- (void)getBytes:(void *)buffer range:(NSRange)range;
- (BOOL)isEqualToData:(NSData *)other;
- (NSData *)subdataWithRange:(NSRange)range;
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;

- (BOOL)writeToFile:(NSString *)path options:(NSUInteger)writeOptionsMask error:(NSError **)errorPtr;
- (BOOL)writeToURL:(NSURL *)url options:(NSUInteger)writeOptionsMask error:(NSError **)errorPtr;


@end

@interface NSData (NSDataCreation)

+ (id)data;
+ (id)dataWithBytes:(const void *)bytes length:(NSUInteger)length;
+ (id)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length;

+ (id)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b;


+ (id)dataWithContentsOfFile:(NSString *)path options:(NSUInteger)readOptionsMask error:(NSError **)errorPtr;
+ (id)dataWithContentsOfURL:(NSURL *)url options:(NSUInteger)readOptionsMask error:(NSError **)errorPtr;

+ (id)dataWithContentsOfFile:(NSString *)path;
+ (id)dataWithContentsOfURL:(NSURL *)url;
+ (id)dataWithContentsOfMappedFile:(NSString *)path;
- (id)initWithBytes:(const void *)bytes length:(NSUInteger)length;
- (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length;

- (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b;


- (id)initWithContentsOfFile:(NSString *)path options:(NSUInteger)readOptionsMask error:(NSError **)errorPtr;
- (id)initWithContentsOfURL:(NSURL *)url options:(NSUInteger)readOptionsMask error:(NSError **)errorPtr;

- (id)initWithContentsOfFile:(NSString *)path;
- (id)initWithContentsOfURL:(NSURL *)url;
- (id)initWithContentsOfMappedFile:(NSString *)path;
- (id)initWithData:(NSData *)data;
+ (id)dataWithData:(NSData *)data;

@end



@interface NSMutableData : NSData

- (void *)mutableBytes;
- (void)setLength:(NSUInteger)length;

@end

@interface NSMutableData (NSExtendedMutableData)

- (void)appendBytes:(const void *)bytes length:(NSUInteger)length;
- (void)appendData:(NSData *)other;
- (void)increaseLengthBy:(NSUInteger)extraLength;
- (void)replaceBytesInRange:(NSRange)range withBytes:(const void *)bytes;
- (void)resetBytesInRange:(NSRange)range;
- (void)setData:(NSData *)data;

- (void)replaceBytesInRange:(NSRange)range withBytes:(const void *)replacementBytes length:(NSUInteger)replacementLength;


@end

@interface NSMutableData (NSMutableDataCreation)

+ (id)dataWithCapacity:(NSUInteger)aNumItems;
+ (id)dataWithLength:(NSUInteger)length;
- (id)initWithCapacity:(NSUInteger)capacity;
- (id)initWithLength:(NSUInteger)length;

@end
# 27 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDateFormatter.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSFormatter.h" 1 3







@class NSString;
@class NSAttributedString;
@class NSDictionary;

@interface NSFormatter : NSObject <NSCopying, NSCoding>

- (NSString *)stringForObjectValue:(id)obj;

- (NSAttributedString *)attributedStringForObjectValue:(id)obj withDefaultAttributes:(NSDictionary *)attrs;

- (NSString *)editingStringForObjectValue:(id)obj;

- (BOOL)getObjectValue:(id *)obj forString:(NSString *)string errorDescription:(NSString **)error;

- (BOOL)isPartialStringValid:(NSString *)partialString newEditingString:(NSString **)newString errorDescription:(NSString **)error;


- (BOOL)isPartialStringValid:(NSString **)partialStringPtr proposedSelectedRange:(NSRangePointer)proposedSelRangePtr originalString:(NSString *)origString originalSelectedRange:(NSRange)origSelRange errorDescription:(NSString **)error;

@end
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSDateFormatter.h" 2 3


@class NSLocale, NSDate, NSCalendar, NSTimeZone, NSError, NSArray, NSMutableDictionary;

@interface NSDateFormatter : NSFormatter {
@private
    NSMutableDictionary *_attributes;
    CFDateFormatterRef _formatter;
    void *_reserved;
}

- (id)init;





- (BOOL)getObjectValue:(id *)obj forString:(NSString *)string range:(inout NSRange *)rangep error:(NSError **)error;




- (NSString *)stringFromDate:(NSDate *)date;
- (NSDate *)dateFromString:(NSString *)string;





- (NSString *)dateFormat;



enum {
    NSDateFormatterNoStyle = kCFDateFormatterNoStyle,
    NSDateFormatterShortStyle = kCFDateFormatterShortStyle,
    NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle,
    NSDateFormatterLongStyle = kCFDateFormatterLongStyle,
    NSDateFormatterFullStyle = kCFDateFormatterFullStyle
};
typedef NSUInteger NSDateFormatterStyle;

- (NSDateFormatterStyle)dateStyle;
- (void)setDateStyle:(NSDateFormatterStyle)style;

- (NSDateFormatterStyle)timeStyle;
- (void)setTimeStyle:(NSDateFormatterStyle)style;

- (NSLocale *)locale;
- (void)setLocale:(NSLocale *)locale;

- (BOOL)generatesCalendarDates;
- (void)setGeneratesCalendarDates:(BOOL)b;

enum {
    NSDateFormatterBehaviorDefault = 0,
    NSDateFormatterBehavior10_0 = 1000,
    NSDateFormatterBehavior10_4 = 1040,
};
typedef NSUInteger NSDateFormatterBehavior;

- (NSDateFormatterBehavior)formatterBehavior;
- (void)setFormatterBehavior:(NSDateFormatterBehavior)behavior;

+ (NSDateFormatterBehavior)defaultFormatterBehavior;
+ (void)setDefaultFormatterBehavior:(NSDateFormatterBehavior)behavior;

- (void)setDateFormat:(NSString *)string;

- (NSTimeZone *)timeZone;
- (void)setTimeZone:(NSTimeZone *)tz;

- (NSCalendar *)calendar;
- (void)setCalendar:(NSCalendar *)calendar;

- (BOOL)isLenient;
- (void)setLenient:(BOOL)b;

- (NSDate *)twoDigitStartDate;
- (void)setTwoDigitStartDate:(NSDate *)date;

- (NSDate *)defaultDate;
- (void)setDefaultDate:(NSDate *)date;

- (NSArray *)eraSymbols;
- (void)setEraSymbols:(NSArray *)array;

- (NSArray *)monthSymbols;
- (void)setMonthSymbols:(NSArray *)array;

- (NSArray *)shortMonthSymbols;
- (void)setShortMonthSymbols:(NSArray *)array;

- (NSArray *)weekdaySymbols;
- (void)setWeekdaySymbols:(NSArray *)array;

- (NSArray *)shortWeekdaySymbols;
- (void)setShortWeekdaySymbols:(NSArray *)array;

- (NSString *)AMSymbol;
- (void)setAMSymbol:(NSString *)string;

- (NSString *)PMSymbol;
- (void)setPMSymbol:(NSString *)string;



- (NSArray *)longEraSymbols ;
- (void)setLongEraSymbols:(NSArray *)array ;

- (NSArray *)veryShortMonthSymbols ;
- (void)setVeryShortMonthSymbols:(NSArray *)array ;

- (NSArray *)standaloneMonthSymbols ;
- (void)setStandaloneMonthSymbols:(NSArray *)array ;

- (NSArray *)shortStandaloneMonthSymbols ;
- (void)setShortStandaloneMonthSymbols:(NSArray *)array ;

- (NSArray *)veryShortStandaloneMonthSymbols ;
- (void)setVeryShortStandaloneMonthSymbols:(NSArray *)array ;

- (NSArray *)veryShortWeekdaySymbols ;
- (void)setVeryShortWeekdaySymbols:(NSArray *)array ;

- (NSArray *)standaloneWeekdaySymbols ;
- (void)setStandaloneWeekdaySymbols:(NSArray *)array ;

- (NSArray *)shortStandaloneWeekdaySymbols ;
- (void)setShortStandaloneWeekdaySymbols:(NSArray *)array ;

- (NSArray *)veryShortStandaloneWeekdaySymbols ;
- (void)setVeryShortStandaloneWeekdaySymbols:(NSArray *)array ;

- (NSArray *)quarterSymbols ;
- (void)setQuarterSymbols:(NSArray *)array ;

- (NSArray *)shortQuarterSymbols ;
- (void)setShortQuarterSymbols:(NSArray *)array ;

- (NSArray *)standaloneQuarterSymbols ;
- (void)setStandaloneQuarterSymbols:(NSArray *)array ;

- (NSArray *)shortStandaloneQuarterSymbols ;
- (void)setShortStandaloneQuarterSymbols:(NSArray *)array ;

- (NSDate *)gregorianStartDate ;
- (void)setGregorianStartDate:(NSDate *)array ;

@end

@interface NSDateFormatter (NSDateFormatterCompatibility)

- (id)initWithDateFormat:(NSString *)format allowNaturalLanguage:(BOOL)flag;
- (BOOL)allowsNaturalLanguage;

@end
# 29 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDecimal.h" 1 3







@class NSDictionary;
# 20 "/System/Library/Frameworks/Foundation.framework/Headers/NSDecimal.h" 3
enum {
    NSRoundPlain,
    NSRoundDown,
    NSRoundUp,
    NSRoundBankers
};
typedef NSUInteger NSRoundingMode;

enum {
    NSCalculationNoError = 0,
    NSCalculationLossOfPrecision,
    NSCalculationUnderflow,
    NSCalculationOverflow,
    NSCalculationDivideByZero
};
typedef NSUInteger NSCalculationError;






typedef struct {
    signed int _exponent:8;
    unsigned int _length:4;
    unsigned int _isNegative:1;
    unsigned int _isCompact:1;
    unsigned int _reserved:18;
    unsigned short _mantissa[(8)];
} NSDecimal;

static __inline__ __attribute__((always_inline)) BOOL NSDecimalIsNotANumber(const NSDecimal *dcm)
  { return ((dcm->_length == 0) && dcm->_isNegative); }



extern "C" void NSDecimalCopy(NSDecimal *destination, const NSDecimal *source);

extern "C" void NSDecimalCompact(NSDecimal *number);

extern "C" NSComparisonResult NSDecimalCompare(const NSDecimal *leftOperand, const NSDecimal *rightOperand);


extern "C" void NSDecimalRound(NSDecimal *result, const NSDecimal *number, NSInteger scale, NSRoundingMode roundingMode);




extern "C" NSCalculationError NSDecimalNormalize(NSDecimal *number1, NSDecimal *number2, NSRoundingMode roundingMode);

extern "C" NSCalculationError NSDecimalAdd(NSDecimal *result, const NSDecimal *leftOperand, const NSDecimal *rightOperand, NSRoundingMode roundingMode);


extern "C" NSCalculationError NSDecimalSubtract(NSDecimal *result, const NSDecimal *leftOperand, const NSDecimal *rightOperand, NSRoundingMode roundingMode);


extern "C" NSCalculationError NSDecimalMultiply(NSDecimal *result, const NSDecimal *leftOperand, const NSDecimal *rightOperand, NSRoundingMode roundingMode);


extern "C" NSCalculationError NSDecimalDivide(NSDecimal *result, const NSDecimal *leftOperand, const NSDecimal *rightOperand, NSRoundingMode roundingMode);



extern "C" NSCalculationError NSDecimalPower(NSDecimal *result, const NSDecimal *number, NSUInteger power, NSRoundingMode roundingMode);

extern "C" NSCalculationError NSDecimalMultiplyByPowerOf10(NSDecimal *result, const NSDecimal *number, short power, NSRoundingMode roundingMode);

extern "C" NSString *NSDecimalString(const NSDecimal *dcm, NSDictionary *locale);
# 30 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDecimalNumber.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScanner.h" 1 3






@class NSString, NSCharacterSet, NSDictionary;

@interface NSScanner : NSObject <NSCopying>

- (NSString *)string;
- (NSUInteger)scanLocation;
- (void)setScanLocation:(NSUInteger)pos;
- (void)setCharactersToBeSkipped:(NSCharacterSet *)set;
- (void)setCaseSensitive:(BOOL)flag;
- (void)setLocale:(NSDictionary *)dict;

@end

@interface NSScanner (NSExtendedScanner)

- (NSCharacterSet *)charactersToBeSkipped;
- (BOOL)caseSensitive;
- (NSDictionary *)locale;

- (BOOL)scanInt:(int *)value;

- (BOOL)scanInteger:(NSInteger *)value;

- (BOOL)scanHexInt:(unsigned *)value;
- (BOOL)scanLongLong:(long long *)value;
- (BOOL)scanFloat:(float *)value;
- (BOOL)scanDouble:(double *)value;
- (BOOL)scanString:(NSString *)string intoString:(NSString **)value;
- (BOOL)scanCharactersFromSet:(NSCharacterSet *)set intoString:(NSString **)value;

- (BOOL)scanUpToString:(NSString *)string intoString:(NSString **)value;
- (BOOL)scanUpToCharactersFromSet:(NSCharacterSet *)set intoString:(NSString **)value;

- (BOOL)isAtEnd;

- (id)initWithString:(NSString *)string;
+ (id)scannerWithString:(NSString *)string;
+ (id)localizedScannerWithString:(NSString *)string;

@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSDecimalNumber.h" 2 3





extern "C" NSString * const NSDecimalNumberExactnessException;
extern "C" NSString * const NSDecimalNumberOverflowException;
extern "C" NSString * const NSDecimalNumberUnderflowException;
extern "C" NSString * const NSDecimalNumberDivideByZeroException;



@class NSDecimalNumber;

@protocol NSDecimalNumberBehaviors

- (NSRoundingMode)roundingMode;

- (short)scale;


- (NSDecimalNumber *)exceptionDuringOperation:(SEL)operation error:(NSCalculationError)error leftOperand:(NSDecimalNumber *)leftOperand rightOperand:(NSDecimalNumber *)rightOperand;


@end



@interface NSDecimalNumber : NSNumber {
@private
    signed int _exponent:8;
    unsigned int _length:4;
    unsigned int _isNegative:1;
    unsigned int _isCompact:1;
    unsigned int _reserved:1;
    unsigned int _hasExternalRefCount:1;
    unsigned int _refs:16;
    unsigned short _mantissa[0];
}

- (id)initWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag;
- (id)initWithDecimal:(NSDecimal)dcm;
- (id)initWithString:(NSString *)numberValue;
- (id)initWithString:(NSString *)numberValue locale:(NSDictionary *)locale;

- (NSString *)descriptionWithLocale:(NSDictionary *)locale;

- (NSDecimal)decimalValue;

+ (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag;
+ (NSDecimalNumber *)decimalNumberWithDecimal:(NSDecimal)dcm;
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numberValue;
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numberValue locale:(NSDictionary *)locale;

+ (NSDecimalNumber *)zero;
+ (NSDecimalNumber *)one;
+ (NSDecimalNumber *)minimumDecimalNumber;
+ (NSDecimalNumber *)maximumDecimalNumber;
+ (NSDecimalNumber *)notANumber;

- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber withBehavior:(id <NSDecimalNumberBehaviors>)behavior;

- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber withBehavior:(id <NSDecimalNumberBehaviors>)behavior;

- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber withBehavior:(id <NSDecimalNumberBehaviors>)behavior;

- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber withBehavior:(id <NSDecimalNumberBehaviors>)behavior;

- (NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power;
- (NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power withBehavior:(id <NSDecimalNumberBehaviors>)behavior;

- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power;
- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power withBehavior:(id <NSDecimalNumberBehaviors>)behavior;


- (NSDecimalNumber *)decimalNumberByRoundingAccordingToBehavior:(id <NSDecimalNumberBehaviors>)behavior;


- (NSComparisonResult)compare:(NSNumber *)decimalNumber;


+ (void)setDefaultBehavior:(id <NSDecimalNumberBehaviors>)behavior;

+ (id <NSDecimalNumberBehaviors>)defaultBehavior;






- (const char *)objCType;


- (double)doubleValue;


@end



@interface NSDecimalNumberHandler : NSObject <NSDecimalNumberBehaviors, NSCoding> {
  @private
    signed int _scale:16;
    unsigned _roundingMode:3;
    unsigned _raiseOnExactness:1;
    unsigned _raiseOnOverflow:1;
    unsigned _raiseOnUnderflow:1;
    unsigned _raiseOnDivideByZero:1;
    unsigned _unused:9;
    void *_reserved2;
    void *_reserved;
}

+ (id)defaultDecimalNumberHandler;





- (id)initWithRoundingMode:(NSRoundingMode)roundingMode scale:(short)scale raiseOnExactness:(BOOL)exact raiseOnOverflow:(BOOL)overflow raiseOnUnderflow:(BOOL)underflow raiseOnDivideByZero:(BOOL)divideByZero;

+ (id)decimalNumberHandlerWithRoundingMode:(NSRoundingMode)roundingMode scale:(short)scale raiseOnExactness:(BOOL)exact raiseOnOverflow:(BOOL)overflow raiseOnUnderflow:(BOOL)underflow raiseOnDivideByZero:(BOOL)divideByZero;

@end



@interface NSNumber (NSDecimalNumberExtensions)

- (NSDecimal)decimalValue;


@end

@interface NSScanner (NSDecimalNumberScanning)

- (BOOL)scanDecimal:(NSDecimal *)dcm;

@end
# 31 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDistantObject.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSProxy.h" 1 3






@class NSMethodSignature, NSInvocation;

@interface NSProxy <NSObject> {
    Class isa;
}

+ (id)alloc;
+ (id)allocWithZone:(NSZone *)zone;
+ (Class)class;

- (void)forwardInvocation:(NSInvocation *)invocation;
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel;
- (void)dealloc;
- (void)finalize;
- (NSString *)description;
+ (BOOL)respondsToSelector:(SEL)aSelector;

@end
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSDistantObject.h" 2 3

@class Protocol, NSConnection, NSCoder;

@interface NSDistantObject : NSProxy <NSCoding> {
    @private
    id _knownSelectors;
    NSUInteger _wireCount;
    NSUInteger _refCount;
    id ___3;
    uint16_t ___2;
    uint8_t ___1;
    uint8_t _wireType;
    void *___0;
}



+ (NSDistantObject *)proxyWithTarget:(id)target connection:(NSConnection *)connection;
- (id)initWithTarget:(id)target connection:(NSConnection *)connection;

+ (NSDistantObject *)proxyWithLocal:(id)target connection:(NSConnection *)connection;
- (id)initWithLocal:(id)target connection:(NSConnection *)connection;

- (void)setProtocolForProxy:(Protocol *)proto;

- (NSConnection *)connectionForProxy;

@end
# 33 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDistributedLock.h" 1 3






@class NSDate;

@interface NSDistributedLock : NSObject {
@private
    void *_priv;
}

+ (NSDistributedLock *)lockWithPath:(NSString *)path;

- (id)initWithPath:(NSString *)path;

- (BOOL)tryLock;
- (void)unlock;
- (void)breakLock;
- (NSDate *)lockDate;

@end
# 34 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSDistributedNotificationCenter.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSNotification.h" 1 3






@class NSString, NSDictionary;



@interface NSNotification : NSObject <NSCopying, NSCoding>

- (NSString *)name;
- (id)object;
- (NSDictionary *)userInfo;

@end

@interface NSNotification (NSNotificationCreation)

+ (id)notificationWithName:(NSString *)aName object:(id)anObject;
+ (id)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

@end



@interface NSNotificationCenter : NSObject {
    @protected
    void *_impl;
    uintptr_t _counter;
    void *_pad[11];
}

+ (id)defaultCenter;

- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;

- (void)postNotification:(NSNotification *)notification;
- (void)postNotificationName:(NSString *)aName object:(id)anObject;
- (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

- (void)removeObserver:(id)observer;
- (void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;

@end
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSDistributedNotificationCenter.h" 2 3

@class NSString, NSDictionary;

extern "C" NSString * const NSLocalNotificationCenterType;


enum {
    NSNotificationSuspensionBehaviorDrop = 1,

    NSNotificationSuspensionBehaviorCoalesce = 2,

    NSNotificationSuspensionBehaviorHold = 3,

    NSNotificationSuspensionBehaviorDeliverImmediately = 4



};
typedef NSUInteger NSNotificationSuspensionBehavior;

@interface NSDistributedNotificationCenter : NSNotificationCenter

+ (NSDistributedNotificationCenter *)notificationCenterForType:(NSString *)notificationCenterType;


+ (id)defaultCenter;


- (void)addObserver:(id)observer selector:(SEL)selector name:(NSString *)name object:(NSString *)object suspensionBehavior:(NSNotificationSuspensionBehavior)suspensionBehavior;


- (void)postNotificationName:(NSString *)name object:(NSString *)object userInfo:(NSDictionary *)userInfo deliverImmediately:(BOOL)deliverImmediately;





enum {
    NSNotificationDeliverImmediately = (1 << 0),
    NSNotificationPostToAllSessions = (1 << 1)
};

- (void)postNotificationName:(NSString *)name object:(NSString *)object userInfo:(NSDictionary *)userInfo options:(NSUInteger)options;



- (void)setSuspended:(BOOL)suspended;


- (BOOL)suspended;


- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(NSString *)anObject;

- (void)postNotificationName:(NSString *)aName object:(NSString *)anObject;
- (void)postNotificationName:(NSString *)aName object:(NSString *)anObject userInfo:(NSDictionary *)aUserInfo;
- (void)removeObserver:(id)observer name:(NSString *)aName object:(NSString *)anObject;

@end
# 35 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSError.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSError.h" 3
@class NSDictionary, NSArray;



extern "C" NSString *const NSCocoaErrorDomain ;


extern "C" NSString *const NSPOSIXErrorDomain ;
extern "C" NSString *const NSOSStatusErrorDomain ;
extern "C" NSString *const NSMachErrorDomain ;


extern "C" NSString *const NSUnderlyingErrorKey ;


extern "C" NSString *const NSLocalizedDescriptionKey ;
extern "C" NSString *const NSLocalizedFailureReasonErrorKey ;
extern "C" NSString *const NSLocalizedRecoverySuggestionErrorKey ;
extern "C" NSString *const NSLocalizedRecoveryOptionsErrorKey ;
extern "C" NSString *const NSRecoveryAttempterErrorKey ;


extern "C" NSString *const NSStringEncodingErrorKey ;
extern "C" NSString *const NSURLErrorKey ;
extern "C" NSString *const NSFilePathErrorKey ;



@interface NSError : NSObject <NSCopying, NSCoding> {
    @private
    void *_reserved;
    NSInteger _code;
    NSString *_domain;
    NSDictionary *_userInfo;
}



- (id)initWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict;
+ (id)errorWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict;



- (NSString *)domain;
- (NSInteger)code;



- (NSDictionary *)userInfo;



- (NSString *)localizedDescription;





- (NSString *)localizedFailureReason;



- (NSString *)localizedRecoverySuggestion;



- (NSArray *)localizedRecoveryOptions;



- (id)recoveryAttempter;



@end



@interface NSObject(NSErrorRecoveryAttempting)







- (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo;



- (BOOL)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex;

@end
# 37 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSFileHandle.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSFileHandle.h" 3
@class NSString, NSData;

@interface NSFileHandle : NSObject

- (NSData *)availableData;

- (NSData *)readDataToEndOfFile;
- (NSData *)readDataOfLength:(NSUInteger)length;

- (void)writeData:(NSData *)data;

- (unsigned long long)offsetInFile;
- (unsigned long long)seekToEndOfFile;
- (void)seekToFileOffset:(unsigned long long)offset;

- (void)truncateFileAtOffset:(unsigned long long)offset;
- (void)synchronizeFile;
- (void)closeFile;

@end

@interface NSFileHandle (NSFileHandleCreation)

+ (id)fileHandleWithStandardInput;
+ (id)fileHandleWithStandardOutput;
+ (id)fileHandleWithStandardError;
+ (id)fileHandleWithNullDevice;

+ (id)fileHandleForReadingAtPath:(NSString *)path;
+ (id)fileHandleForWritingAtPath:(NSString *)path;
+ (id)fileHandleForUpdatingAtPath:(NSString *)path;

@end

extern "C" NSString * const NSFileHandleOperationException;

extern "C" NSString * const NSFileHandleReadCompletionNotification;
extern "C" NSString * const NSFileHandleReadToEndOfFileCompletionNotification;
extern "C" NSString * const NSFileHandleConnectionAcceptedNotification;
extern "C" NSString * const NSFileHandleDataAvailableNotification;

extern "C" NSString * const NSFileHandleNotificationDataItem;
extern "C" NSString * const NSFileHandleNotificationFileHandleItem;
extern "C" NSString * const NSFileHandleNotificationMonitorModes;

@interface NSFileHandle (NSFileHandleAsynchronousAccess)

- (void)readInBackgroundAndNotifyForModes:(NSArray *)modes;
- (void)readInBackgroundAndNotify;

- (void)readToEndOfFileInBackgroundAndNotifyForModes:(NSArray *)modes;
- (void)readToEndOfFileInBackgroundAndNotify;

- (void)acceptConnectionInBackgroundAndNotifyForModes:(NSArray *)modes;
- (void)acceptConnectionInBackgroundAndNotify;

- (void)waitForDataInBackgroundAndNotifyForModes:(NSArray *)modes;
- (void)waitForDataInBackgroundAndNotify;

@end

@interface NSFileHandle (NSFileHandlePlatformSpecific)

- (id)initWithFileDescriptor:(int)fd closeOnDealloc:(BOOL)closeopt;
- (id)initWithFileDescriptor:(int)fd;
- (int)fileDescriptor;

@end

@interface NSPipe : NSObject

- (NSFileHandle *)fileHandleForReading;
- (NSFileHandle *)fileHandleForWriting;

- (id)init;
+ (id)pipe;

@end
# 39 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSFileManager.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSFileManager.h" 3
@class NSArray, NSData, NSDate, NSDirectoryEnumerator, NSError, NSNumber;





@interface NSFileManager : NSObject



+ (NSFileManager *)defaultManager;



- (void)setDelegate:(id)delegate;
- (id)delegate;





- (BOOL)setAttributes:(NSDictionary *)attributes ofItemAtPath:(NSString *)path error:(NSError **)error;





- (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error;





- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;





- (NSArray *)subpathsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;





- (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error;





- (NSDictionary *)attributesOfFileSystemForPath:(NSString *)path error:(NSError **)error;





- (BOOL)createSymbolicLinkAtPath:(NSString *)path withDestinationPath:(NSString *)destPath error:(NSError **)error;





- (NSString *)destinationOfSymbolicLinkAtPath:(NSString *)path error:(NSError **)error;

- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;
- (BOOL)linkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error;



- (NSString *)currentDirectoryPath;
- (BOOL)changeCurrentDirectoryPath:(NSString *)path;

- (NSDictionary *)fileAttributesAtPath:(NSString *)path traverseLink:(BOOL)yorn;

- (BOOL)changeFileAttributes:(NSDictionary *)attributes atPath:(NSString *)path;

- (BOOL)fileExistsAtPath:(NSString *)path;
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory;
- (BOOL)isReadableFileAtPath:(NSString *)path;
- (BOOL)isWritableFileAtPath:(NSString *)path;
- (BOOL)isExecutableFileAtPath:(NSString *)path;
- (BOOL)isDeletableFileAtPath:(NSString *)path;

- (NSString *)displayNameAtPath:(NSString *)path;

- (BOOL)contentsEqualAtPath:(NSString *)path1 andPath:(NSString *)path2;
- (BOOL)linkPath:(NSString *)src toPath:(NSString *)dest handler:handler;
- (BOOL)copyPath:(NSString *)src toPath:(NSString *)dest handler:handler;

- (BOOL)movePath:(NSString *)src toPath:(NSString *)dest handler:handler;

- (BOOL)removeFileAtPath:(NSString *)path handler:handler;

- (NSArray *)directoryContentsAtPath:(NSString *)path;
- (NSDirectoryEnumerator *)enumeratorAtPath:(NSString *)path;
- (NSArray *)subpathsAtPath:(NSString *)path;

- (BOOL)createDirectoryAtPath:(NSString *)path attributes:(NSDictionary *)attributes;

- (NSData *)contentsAtPath:(NSString *)path;
- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;

- (NSString *)pathContentOfSymbolicLinkAtPath:(NSString *)path;
- (BOOL)createSymbolicLinkAtPath:(NSString *)path pathContent:(NSString *)otherpath;

- (NSDictionary *)fileSystemAttributesAtPath:(NSString *)path;

- (const char *)fileSystemRepresentationWithPath:(NSString *)path;
- (NSString *)stringWithFileSystemRepresentation:(const char *)str length:(NSUInteger)len;

- (NSArray *)componentsToDisplayForPath:(NSString *)path;

@end

@interface NSObject (NSCopyLinkMoveHandler)
- (BOOL)fileManager:(NSFileManager *)fm shouldProceedAfterError:(NSDictionary *)errorInfo;
- (void)fileManager:(NSFileManager *)fm willProcessPath:(NSString *)path;
@end



@interface NSObject (NSFileManagerFileOperationAdditions)

- (BOOL)fileManager:(NSFileManager *)fileManager shouldCopyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath;
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error copyingItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath;

- (BOOL)fileManager:(NSFileManager *)fileManager shouldMoveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath;
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error movingItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath;

- (BOOL)fileManager:(NSFileManager *)fileManager shouldLinkItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath;
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error linkingItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath;

- (BOOL)fileManager:(NSFileManager *)fileManager shouldRemoveItemAtPath:(NSString *)path;
- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error removingItemAtPath:(NSString *)path;

@end



@interface NSDirectoryEnumerator : NSEnumerator
- (NSDictionary *)fileAttributes;
- (NSDictionary *)directoryAttributes;
- (void)skipDescendents;
@end

#pragma mark -
#pragma mark File attributes keys

extern "C" NSString * const NSFileType;
extern "C" NSString * const NSFileTypeDirectory;
extern "C" NSString * const NSFileTypeRegular;
extern "C" NSString * const NSFileTypeSymbolicLink;
extern "C" NSString * const NSFileTypeSocket;
extern "C" NSString * const NSFileTypeCharacterSpecial;
extern "C" NSString * const NSFileTypeBlockSpecial;
extern "C" NSString * const NSFileTypeUnknown;
extern "C" NSString * const NSFileSize;
extern "C" NSString * const NSFileModificationDate;
extern "C" NSString * const NSFileReferenceCount;
extern "C" NSString * const NSFileDeviceIdentifier;
extern "C" NSString * const NSFileOwnerAccountName;
extern "C" NSString * const NSFileGroupOwnerAccountName;
extern "C" NSString * const NSFilePosixPermissions;
extern "C" NSString * const NSFileSystemNumber;
extern "C" NSString * const NSFileSystemFileNumber;
extern "C" NSString * const NSFileExtensionHidden;
extern "C" NSString * const NSFileHFSCreatorCode;
extern "C" NSString * const NSFileHFSTypeCode;

extern "C" NSString * const NSFileImmutable;
extern "C" NSString * const NSFileAppendOnly;
extern "C" NSString * const NSFileCreationDate;
extern "C" NSString * const NSFileOwnerAccountID;
extern "C" NSString * const NSFileGroupOwnerAccountID;


extern "C" NSString * const NSFileBusy;


#pragma mark -
#pragma mark Filesystem attributes keys

extern "C" NSString * const NSFileSystemSize;
extern "C" NSString * const NSFileSystemFreeSize;
extern "C" NSString * const NSFileSystemNodes;
extern "C" NSString * const NSFileSystemFreeNodes;

@interface NSDictionary (NSFileAttributes)

- (unsigned long long)fileSize;
- (NSDate *)fileModificationDate;
- (NSString *)fileType;
- (NSUInteger)filePosixPermissions;
- (NSString *)fileOwnerAccountName;
- (NSString *)fileGroupOwnerAccountName;
- (NSInteger)fileSystemNumber;
- (NSUInteger)fileSystemFileNumber;
- (BOOL)fileExtensionHidden;
- (OSType)fileHFSCreatorCode;
- (OSType)fileHFSTypeCode;

- (BOOL)fileIsImmutable;
- (BOOL)fileIsAppendOnly;
- (NSDate *)fileCreationDate;
- (NSNumber *)fileOwnerAccountID;
- (NSNumber *)fileGroupOwnerAccountID;

@end
# 40 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3


# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSHashTable.h" 1 3







@class NSArray, NSMutableSet;




enum {
    NSHashTableOptionZeroingWeakMemory = (1 << 0),
    NSHashTableOptionCopyIn = (1 << 15),
    NSHashTableOptionObjectPointerPersonality = (2 << 16),
};

typedef NSUInteger NSHashTableOptions;

@interface NSHashTable : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>


- (id)initWithOptions:(NSHashTableOptions)options capacity:(NSUInteger)capacity;



+ (id)hashTableWithWeakObjects;

- (NSUInteger)count;
- (id)member:(id)object;
- (NSEnumerator *)objectEnumerator;

- (void)addObject:(id)object;
- (void)removeObject:(id)object;


- (void)removeAllObjects;

- (NSArray *)allObjects;

- (id)anyObject;
- (BOOL)containsObject:(id)anObject;

- (BOOL)intersectsHashTable:(NSHashTable *)other;
- (BOOL)isEqualToHashTable:(NSHashTable *)other;
- (BOOL)isSubsetOfHashTable:(NSHashTable *)other;

- (void)intersectHashTable:(NSHashTable *)other;
- (void)unionHashTable:(NSHashTable *)other;
- (void)minusHashTable:(NSHashTable *)other;

- (NSMutableSet *)mutableSet;

@end




typedef struct {NSUInteger _pi; NSUInteger _si; void *_bs;} NSHashEnumerator;

extern "C" void NSFreeHashTable(NSHashTable *table);
extern "C" void NSResetHashTable(NSHashTable *table);
extern "C" BOOL NSCompareHashTables(NSHashTable *table1, NSHashTable *table2);
extern "C" NSHashTable *NSCopyHashTableWithZone(NSHashTable *table, NSZone *zone);
extern "C" void *NSHashGet(NSHashTable *table, const void *pointer);
extern "C" void NSHashInsert(NSHashTable *table, const void *pointer);
extern "C" void NSHashInsertKnownAbsent(NSHashTable *table, const void *pointer);
extern "C" void *NSHashInsertIfAbsent(NSHashTable *table, const void *pointer);
extern "C" void NSHashRemove(NSHashTable *table, const void *pointer);
extern "C" NSHashEnumerator NSEnumerateHashTable(NSHashTable *table);
extern "C" void *NSNextHashEnumeratorItem(NSHashEnumerator *enumerator);
extern "C" void NSEndHashTableEnumeration(NSHashEnumerator *enumerator);
extern "C" NSUInteger NSCountHashTable(NSHashTable *table);
extern "C" NSString *NSStringFromHashTable(NSHashTable *table);
extern "C" NSArray *NSAllHashTableObjects(NSHashTable *table);




typedef struct {
    NSUInteger (*hash)(NSHashTable *table, const void *);
    BOOL (*isEqual)(NSHashTable *table, const void *, const void *);
    void (*retain)(NSHashTable *table, const void *);
    void (*release)(NSHashTable *table, void *);
    NSString *(*describe)(NSHashTable *table, const void *);
} NSHashTableCallBacks;

extern "C" NSHashTable *NSCreateHashTableWithZone(NSHashTableCallBacks callBacks, NSUInteger capacity, NSZone *zone);
extern "C" NSHashTable *NSCreateHashTable(NSHashTableCallBacks callBacks, NSUInteger capacity);


extern "C" const NSHashTableCallBacks NSIntegerHashCallBacks ;
extern "C" const NSHashTableCallBacks NSNonOwnedPointerHashCallBacks;
extern "C" const NSHashTableCallBacks NSNonRetainedObjectHashCallBacks;
extern "C" const NSHashTableCallBacks NSObjectHashCallBacks;
extern "C" const NSHashTableCallBacks NSOwnedObjectIdentityHashCallBacks;
extern "C" const NSHashTableCallBacks NSOwnedPointerHashCallBacks;
extern "C" const NSHashTableCallBacks NSPointerToStructHashCallBacks;
extern "C" const NSHashTableCallBacks NSIntHashCallBacks ;
# 43 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSHFSFileTypes.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSHFSFileTypes.h" 3
@class NSString;


extern "C" NSString *NSFileTypeForHFSTypeCode(OSType hfsFileTypeCode);


extern "C" OSType NSHFSTypeCodeFromFileType(NSString *fileTypeString);


extern "C" NSString *NSHFSTypeOfFile(NSString *fullFilePath);
# 44 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSHost.h" 1 3






@class NSString, NSArray, NSMutableArray;

@interface NSHost : NSObject {
@private
    NSArray *names;
    NSArray *addresses;
    void *reserved;
}

+ (NSHost *)currentHost;
+ (NSHost *)hostWithName:(NSString *)name;
+ (NSHost *)hostWithAddress:(NSString *)address;


+ (void)setHostCacheEnabled:(BOOL)flag;
+ (BOOL)isHostCacheEnabled;
+ (void)flushHostCache;

- (BOOL)isEqualToHost:(NSHost *)aHost;

- (NSString *)name;
- (NSArray *)names;

- (NSString *)address;
- (NSArray *)addresses;

@end
# 45 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSIndexPath.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSIndexPath.h" 3
@interface NSIndexPath : NSObject <NSCopying, NSCoding> {
 NSUInteger *_indexes;
 NSUInteger _hash;
 NSUInteger _length;
        void *_reserved;
}

+ (id)indexPathWithIndex:(NSUInteger)index;
+ (id)indexPathWithIndexes:(NSUInteger *)indexes length:(NSUInteger)length;

- (id)initWithIndex:(NSUInteger)index;
- (id)initWithIndexes:(NSUInteger *)indexes length:(NSUInteger)length;

- (NSIndexPath *)indexPathByAddingIndex:(NSUInteger)index;
- (NSIndexPath *)indexPathByRemovingLastIndex;

- (NSUInteger)indexAtPosition:(NSUInteger)position;
- (NSUInteger)length;

- (void)getIndexes:(NSUInteger *)indexes;


- (NSComparisonResult)compare:(NSIndexPath *)otherObject;

@end
# 46 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSIndexSet.h" 1 3
# 31 "/System/Library/Frameworks/Foundation.framework/Headers/NSIndexSet.h" 3
@interface NSIndexSet : NSObject <NSCopying, NSMutableCopying, NSCoding> {
@protected
    struct {
        NSUInteger _isEmpty:1;
        NSUInteger _hasSingleRange:1;
        NSUInteger _cacheValid:1;
        NSUInteger _reservedArrayBinderController:29;
    } _indexSetFlags;
    union {
        struct {
            NSRange _range;
        } _singleRange;
        struct {
            void *_data;
            void *_reserved;
        } _multipleRanges;
    } _internal;
}

+ (id)indexSet;
+ (id)indexSetWithIndex:(NSUInteger)value;
+ (id)indexSetWithIndexesInRange:(NSRange)range;

- (id)init;
- (id)initWithIndex:(NSUInteger)value;
- (id)initWithIndexesInRange:(NSRange)range;
- (id)initWithIndexSet:(NSIndexSet *)indexSet;

- (BOOL)isEqualToIndexSet:(NSIndexSet *)indexSet;

- (NSUInteger)count;



- (NSUInteger)firstIndex;
- (NSUInteger)lastIndex;
- (NSUInteger)indexGreaterThanIndex:(NSUInteger)value;
- (NSUInteger)indexLessThanIndex:(NSUInteger)value;
- (NSUInteger)indexGreaterThanOrEqualToIndex:(NSUInteger)value;
- (NSUInteger)indexLessThanOrEqualToIndex:(NSUInteger)value;



- (NSUInteger)getIndexes:(NSUInteger *)indexBuffer maxCount:(NSUInteger)bufferSize inIndexRange:(NSRangePointer)range;


- (NSUInteger)countOfIndexesInRange:(NSRange)range;


- (BOOL)containsIndex:(NSUInteger)value;
- (BOOL)containsIndexesInRange:(NSRange)range;
- (BOOL)containsIndexes:(NSIndexSet *)indexSet;

- (BOOL)intersectsIndexesInRange:(NSRange)range;

@end


@interface NSMutableIndexSet : NSIndexSet {
    void *_reserved;
}

- (void)addIndexes:(NSIndexSet *)indexSet;
- (void)removeIndexes:(NSIndexSet *)indexSet;
- (void)removeAllIndexes;
- (void)addIndex:(NSUInteger)value;
- (void)removeIndex:(NSUInteger)value;
- (void)addIndexesInRange:(NSRange)range;
- (void)removeIndexesInRange:(NSRange)range;



- (void)shiftIndexesStartingAtIndex:(NSUInteger)index by:(NSInteger)delta;

@end
# 47 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSInvocation.h" 1 3







@class NSMethodSignature;

@interface NSInvocation : NSObject {
    @private
    void *_frame;
    id _signature;
    id _container;
    unsigned retainedArgs:1;
    unsigned isInvalid:1;
    unsigned signatureValid:1;
    unsigned retainedRet:1;
    unsigned externalArgFrame:1;
    unsigned isStret:1;
    unsigned unused:26;
    uint8_t returnValue[12];
    void *_retdata;
}

+ (NSInvocation *)invocationWithMethodSignature:(NSMethodSignature *)sig;

- (NSMethodSignature *)methodSignature;

- (void)retainArguments;
- (BOOL)argumentsRetained;

- (id)target;
- (void)setTarget:(id)target;

- (SEL)selector;
- (void)setSelector:(SEL)selector;

- (void)getReturnValue:(void *)retLoc;
- (void)setReturnValue:(void *)retLoc;

- (void)getArgument:(void *)argumentLocation atIndex:(NSInteger)idx;
- (void)setArgument:(void *)argumentLocation atIndex:(NSInteger)idx;

- (void)invoke;
- (void)invokeWithTarget:(id)target;

@end




enum _NSObjCValueType {
    NSObjCNoType = 0,
    NSObjCVoidType = 'v',
    NSObjCCharType = 'c',
    NSObjCShortType = 's',
    NSObjCLongType = 'l',
    NSObjCLonglongType = 'q',
    NSObjCFloatType = 'f',
    NSObjCDoubleType = 'd',

    NSObjCBoolType = 'B',

    NSObjCSelectorType = ':',
    NSObjCObjectType = '@',
    NSObjCStructType = '{',
    NSObjCPointerType = '^',
    NSObjCStringType = '*',
    NSObjCArrayType = '[',
    NSObjCUnionType = '(',
    NSObjCBitfield = 'b'
} ;

typedef struct {
    enum _NSObjCValueType type ;
    union {
     char charValue;
 short shortValue;
 long longValue;
 long long longlongValue;
 float floatValue;
 double doubleValue;

 bool boolValue;

 SEL selectorValue;
 id objectValue;
 void *pointerValue;
 void *structLocation;
 char *cStringLocation;
    } value ;
} NSObjCValue ;
# 48 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSSet.h" 1 3







@class NSArray, NSDictionary, NSEnumerator, NSString;



@interface NSSet : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>

- (NSUInteger)count;
- (id)member:(id)object;
- (NSEnumerator *)objectEnumerator;

@end

@interface NSSet (NSExtendedSet)

- (NSArray *)allObjects;
- (id)anyObject;
- (BOOL)containsObject:(id)anObject;
- (NSString *)description;
- (NSString *)descriptionWithLocale:(NSDictionary *)locale;
- (BOOL)intersectsSet:(NSSet *)otherSet;
- (BOOL)isEqualToSet:(NSSet *)otherSet;
- (BOOL)isSubsetOfSet:(NSSet *)otherSet;

- (void)makeObjectsPerformSelector:(SEL)aSelector;
- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;

- (NSSet *)setByAddingObject:(id)anObject ;
- (NSSet *)setByAddingObjectsFromSet:(NSSet *)other ;
- (NSSet *)setByAddingObjectsFromArray:(NSArray *)other ;

@end

@interface NSSet (NSSetCreation)

+ (id)set;
+ (id)setWithArray:(NSArray *)array;
+ (id)setWithObject:(id)object;
+ (id)setWithObjects:(id)firstObj, ... ;
- (id)initWithArray:(NSArray *)array;
- (id)initWithObjects:(id *)objects count:(NSUInteger)count;
- (id)initWithObjects:(id)firstObj, ... ;
- (id)initWithSet:(NSSet *)set;
- (id)initWithSet:(NSSet *)set copyItems:(BOOL)flag;

+ (id)setWithSet:(NSSet *)set;
+ (id)setWithObjects:(id *)objs count:(NSUInteger)cnt;

@end



@interface NSMutableSet : NSSet

- (void)addObject:(id)object;
- (void)removeObject:(id)object;

@end

@interface NSMutableSet (NSExtendedMutableSet)

- (void)addObjectsFromArray:(NSArray *)array;
- (void)intersectSet:(NSSet *)otherSet;
- (void)minusSet:(NSSet *)otherSet;
- (void)removeAllObjects;
- (void)unionSet:(NSSet *)otherSet;

- (void)setSet:(NSSet *)otherSet;

@end

@interface NSMutableSet (NSMutableSetCreation)

+ (id)setWithCapacity:(NSUInteger)numItems;
- (id)initWithCapacity:(NSUInteger)numItems;

@end



@interface NSCountedSet : NSMutableSet {
    @private
    id _table;
    void *_reserved;
}

- (id)initWithCapacity:(NSUInteger)numItems;

- (id)initWithArray:(NSArray *)array;
- (id)initWithSet:(NSSet *)set;

- (NSUInteger)countForObject:(id)object;

- (NSEnumerator *)objectEnumerator;
- (void)addObject:(id)object;
- (void)removeObject:(id)object;

@end
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 2 3

@class NSError, NSString;







extern "C" NSString *const NSUndefinedKeyException ;



extern "C" NSString *const NSAverageKeyValueOperator ;
extern "C" NSString *const NSCountKeyValueOperator ;
extern "C" NSString *const NSDistinctUnionOfArraysKeyValueOperator ;
extern "C" NSString *const NSDistinctUnionOfObjectsKeyValueOperator ;
extern "C" NSString *const NSDistinctUnionOfSetsKeyValueOperator ;
extern "C" NSString *const NSMaximumKeyValueOperator ;
extern "C" NSString *const NSMinimumKeyValueOperator ;
extern "C" NSString *const NSSumKeyValueOperator ;
extern "C" NSString *const NSUnionOfArraysKeyValueOperator ;
extern "C" NSString *const NSUnionOfObjectsKeyValueOperator ;
extern "C" NSString *const NSUnionOfSetsKeyValueOperator ;

@interface NSObject(NSKeyValueCoding)



+ (BOOL)accessInstanceVariablesDirectly;
# 55 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 3
- (id)valueForKey:(NSString *)key;
# 72 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 3
- (void)setValue:(id)value forKey:(NSString *)key;





- (BOOL)validateValue:(id *)ioValue forKey:(NSString *)inKey error:(NSError **)outError;
# 90 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 3
- (NSMutableArray *)mutableArrayValueForKey:(NSString *)key;
# 106 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueCoding.h" 3
- (NSMutableSet *)mutableSetValueForKey:(NSString *)key;





- (id)valueForKeyPath:(NSString *)keyPath;

- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
- (BOOL)validateValue:(id *)ioValue forKeyPath:(NSString *)inKeyPath error:(NSError **)outError;
- (NSMutableArray *)mutableArrayValueForKeyPath:(NSString *)keyPath;


- (NSMutableSet *)mutableSetValueForKeyPath:(NSString *)keyPath;






- (id)valueForUndefinedKey:(NSString *)key;



- (void)setValue:(id)value forUndefinedKey:(NSString *)key;



- (void)setNilValueForKey:(NSString *)key;



- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;



- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;



@end



@interface NSArray(NSKeyValueCoding)



- (id)valueForKey:(NSString *)key;



- (void)setValue:(id)value forKey:(NSString *)key;

@end



@interface NSDictionary(NSKeyValueCoding)



- (id)valueForKey:(NSString *)key;

@end



@interface NSMutableDictionary(NSKeyValueCoding)



- (void)setValue:(id)value forKey:(NSString *)key;

@end





@interface NSSet(NSKeyValueCoding)



- (id)valueForKey:(NSString *)key;



- (void)setValue:(id)value forKey:(NSString *)key;

@end



@interface NSObject(NSDeprecatedKeyValueCoding)



- (void)takeValue:(id)value forKey:(NSString *)key;
- (void)takeValue:(id)value forKeyPath:(NSString *)keyPath;
- (id)handleQueryWithUnboundKey:(NSString *)key;
- (void)handleTakeValue:(id)value forUnboundKey:(NSString *)key;
- (void)unableToSetNilForKey:(NSString *)key;
- (NSDictionary *)valuesForKeys:(NSArray *)keys;
- (void)takeValuesFromDictionary:(NSDictionary *)properties;



+ (BOOL)useStoredAccessor;
- (id)storedValueForKey:(NSString *)key;
- (void)takeStoredValue:(id)value forKey:(NSString *)key;

@end
# 49 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueObserving.h" 1 3
# 12 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueObserving.h" 3
@class NSIndexSet, NSString;



enum {



    NSKeyValueObservingOptionNew = 0x01,
    NSKeyValueObservingOptionOld = 0x02,





    NSKeyValueObservingOptionInitial = 0x04,



    NSKeyValueObservingOptionPrior = 0x08



};
typedef NSUInteger NSKeyValueObservingOptions;



enum {
    NSKeyValueChangeSetting = 1,
    NSKeyValueChangeInsertion = 2,
    NSKeyValueChangeRemoval = 3,
    NSKeyValueChangeReplacement = 4
};
typedef NSUInteger NSKeyValueChange;





enum {
    NSKeyValueUnionSetMutation = 1,
    NSKeyValueMinusSetMutation = 2,
    NSKeyValueIntersectSetMutation = 3,
    NSKeyValueSetSetMutation = 4
};
typedef NSUInteger NSKeyValueSetMutationKind;





extern "C" NSString *const NSKeyValueChangeKindKey ;
extern "C" NSString *const NSKeyValueChangeNewKey ;
extern "C" NSString *const NSKeyValueChangeOldKey ;
extern "C" NSString *const NSKeyValueChangeIndexesKey ;
extern "C" NSString *const NSKeyValueChangeNotificationIsPriorKey ;

@interface NSObject(NSKeyValueObserving)
# 87 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueObserving.h" 3
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;

@end

@interface NSObject(NSKeyValueObserverRegistration)



- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

@end

@interface NSArray(NSKeyValueObserverRegistration)



- (void)addObserver:(NSObject *)observer toObjectsAtIndexes:(NSIndexSet *)indexes forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
- (void)removeObserver:(NSObject *)observer fromObjectsAtIndexes:(NSIndexSet *)indexes forKeyPath:(NSString *)keyPath;



- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

@end



@interface NSSet(NSKeyValueObserverRegistration)



- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

@end



@interface NSObject(NSKeyValueObserverNotification)







- (void)willChangeValueForKey:(NSString *)key;
- (void)didChangeValueForKey:(NSString *)key;







- (void)willChange:(NSKeyValueChange)changeKind valuesAtIndexes:(NSIndexSet *)indexes forKey:(NSString *)key;
- (void)didChange:(NSKeyValueChange)changeKind valuesAtIndexes:(NSIndexSet *)indexes forKey:(NSString *)key;
# 161 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueObserving.h" 3
- (void)willChangeValueForKey:(NSString *)key withSetMutation:(NSKeyValueSetMutationKind)mutationKind usingObjects:(NSSet *)objects;
- (void)didChangeValueForKey:(NSString *)key withSetMutation:(NSKeyValueSetMutationKind)mutationKind usingObjects:(NSSet *)objects;



@end

@interface NSObject(NSKeyValueObservingCustomization)
# 180 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyValueObserving.h" 3
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key;





+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key;



- (void)setObservationInfo:(void *)observationInfo;
- (void *)observationInfo;

@end

@interface NSObject(NSDeprecatedKeyValueObservingCustomization)



+ (void)setKeys:(NSArray *)keys triggerChangeNotificationsForDependentKey:(NSString *)dependentKey;

@end
# 50 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyedArchiver.h" 1 3






# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPropertyList.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSPropertyList.h" 3
@class NSData, NSString;

enum {
    NSPropertyListImmutable = kCFPropertyListImmutable,
    NSPropertyListMutableContainers = kCFPropertyListMutableContainers,
    NSPropertyListMutableContainersAndLeaves = kCFPropertyListMutableContainersAndLeaves
};
typedef NSUInteger NSPropertyListMutabilityOptions;

enum {
    NSPropertyListOpenStepFormat = kCFPropertyListOpenStepFormat,
    NSPropertyListXMLFormat_v1_0 = kCFPropertyListXMLFormat_v1_0,
    NSPropertyListBinaryFormat_v1_0 = kCFPropertyListBinaryFormat_v1_0
};
typedef NSUInteger NSPropertyListFormat;

@interface NSPropertyListSerialization : NSObject {
    void *reserved[6];
}

+ (BOOL)propertyList:(id)plist isValidForFormat:(NSPropertyListFormat)format;
+ (NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString;
+ (id)propertyListFromData:(NSData *)data mutabilityOption:(NSPropertyListMutabilityOptions)opt format:(NSPropertyListFormat *)format errorDescription:(NSString **)errorString;

@end
# 8 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyedArchiver.h" 2 3



@class NSArray, NSMutableData, NSData;

extern "C" NSString * const NSInvalidArchiveOperationException;
extern "C" NSString * const NSInvalidUnarchiveOperationException;

@interface NSKeyedArchiver : NSCoder {
@private
    void *_stream;
    NSUInteger _flags;
    id _delegate;
    id _containers;
    id _objects;
    id _objRefMap;
    id _replacementMap;
    id _classNameMap;
    id _conditionals;
    id _classes;
    NSUInteger _genericKey;
    void *_cache;
    NSUInteger _cacheSize;
    void *_reserved3;
    void *_reserved2;
    void *_reserved1;
    void *_reserved0;
}

+ (NSData *)archivedDataWithRootObject:(id)rootObject;
+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;

- (id)initForWritingWithMutableData:(NSMutableData *)data;

- (void)setDelegate:(id)delegate;
- (id)delegate;

- (void)setOutputFormat:(NSPropertyListFormat)format;
- (NSPropertyListFormat)outputFormat;

- (void)finishEncoding;

+ (void)setClassName:(NSString *)codedName forClass:(Class)cls;
- (void)setClassName:(NSString *)codedName forClass:(Class)cls;



+ (NSString *)classNameForClass:(Class)cls;
- (NSString *)classNameForClass:(Class)cls;

- (void)encodeObject:(id)objv forKey:(NSString *)key;
- (void)encodeConditionalObject:(id)objv forKey:(NSString *)key;
- (void)encodeBool:(BOOL)boolv forKey:(NSString *)key;
- (void)encodeInt:(int)intv forKey:(NSString *)key;
- (void)encodeInt32:(int32_t)intv forKey:(NSString *)key;
- (void)encodeInt64:(int64_t)intv forKey:(NSString *)key;
- (void)encodeFloat:(float)realv forKey:(NSString *)key;
- (void)encodeDouble:(double)realv forKey:(NSString *)key;
- (void)encodeBytes:(const uint8_t *)bytesp length:(NSUInteger)lenv forKey:(NSString *)key;

@end

@interface NSKeyedUnarchiver : NSCoder {
@private
    id _delegate;
    uint32_t _flags;
    id _objRefMap;
    id _replacementMap;
    id _nameClassMap;
    id _tmpRefObjMap;
    id _refObjMap;
    int32_t _genericKey;
    id _data;
    void *_offsetData;
    id _containers;
    id _objects;
    const uint8_t *_bytes;
    uint64_t _len;
    void *_reserved1;
    void *_reserved0;
}

+ (id)unarchiveObjectWithData:(NSData *)data;
+ (id)unarchiveObjectWithFile:(NSString *)path;

- (id)initForReadingWithData:(NSData *)data;

- (void)setDelegate:(id)delegate;
- (id)delegate;

- (void)finishDecoding;

+ (void)setClass:(Class)cls forClassName:(NSString *)codedName;
- (void)setClass:(Class)cls forClassName:(NSString *)codedName;



+ (Class)classForClassName:(NSString *)codedName;
- (Class)classForClassName:(NSString *)codedName;

- (BOOL)containsValueForKey:(NSString *)key;

- (id)decodeObjectForKey:(NSString *)key;
- (BOOL)decodeBoolForKey:(NSString *)key;
- (int)decodeIntForKey:(NSString *)key;
- (int32_t)decodeInt32ForKey:(NSString *)key;
- (int64_t)decodeInt64ForKey:(NSString *)key;
- (float)decodeFloatForKey:(NSString *)key;
- (double)decodeDoubleForKey:(NSString *)key;
- (const uint8_t *)decodeBytesForKey:(NSString *)key returnedLength:(NSUInteger *)lengthp;

@end

@interface NSCoder (NSGeometryKeyedCoding)

- (void)encodePoint:(NSPoint)point forKey:(NSString *)key;
- (void)encodeSize:(NSSize)size forKey:(NSString *)key;
- (void)encodeRect:(NSRect)rect forKey:(NSString *)key;

- (NSPoint)decodePointForKey:(NSString *)key;
- (NSSize)decodeSizeForKey:(NSString *)key;
- (NSRect)decodeRectForKey:(NSString *)key;

@end

@interface NSObject (NSKeyedArchiverDelegate)


- (id)archiver:(NSKeyedArchiver *)archiver willEncodeObject:(id)object;
# 147 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyedArchiver.h" 3
- (void)archiver:(NSKeyedArchiver *)archiver didEncodeObject:(id)object;






- (void)archiver:(NSKeyedArchiver *)archiver willReplaceObject:(id)object withObject:(id)newObject;





- (void)archiverWillFinish:(NSKeyedArchiver *)archiver;


- (void)archiverDidFinish:(NSKeyedArchiver *)archiver;


@end

@interface NSObject (NSKeyedUnarchiverDelegate)


- (Class)unarchiver:(NSKeyedUnarchiver *)unarchiver cannotDecodeObjectOfClassName:(NSString *)name originalClasses:(NSArray *)classNames;
# 180 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyedArchiver.h" 3
- (id)unarchiver:(NSKeyedUnarchiver *)unarchiver didDecodeObject:(id)object;







- (void)unarchiver:(NSKeyedUnarchiver *)unarchiver willReplaceObject:(id)object withObject:(id)newObject;





- (void)unarchiverWillFinish:(NSKeyedUnarchiver *)unarchiver;


- (void)unarchiverDidFinish:(NSKeyedUnarchiver *)unarchiver;


@end

@interface NSObject (NSKeyedArchiverObjectSubstitution)

- (Class)classForKeyedArchiver;
# 213 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyedArchiver.h" 3
- (id)replacementObjectForKeyedArchiver:(NSKeyedArchiver *)archiver;
# 226 "/System/Library/Frameworks/Foundation.framework/Headers/NSKeyedArchiver.h" 3
+ (NSArray *)classFallbacksForKeyedArchiver;



@end

@interface NSObject (NSKeyedUnarchiverObjectSubstitution)

+ (Class)classForKeyedUnarchiver;





@end
# 51 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSLocale.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSLocale.h" 3
@class NSArray, NSDictionary, NSString;



@interface NSLocale : NSObject <NSCopying, NSCoding>

- (id)objectForKey:(id)key;

- (NSString *)displayNameForKey:(id)key value:(id)value;

@end

@interface NSLocale (NSExtendedLocale)

- (NSString *)localeIdentifier;

@end

@interface NSLocale (NSLocaleCreation)

+ (id)systemLocale;
+ (id)currentLocale;

- (id)initWithLocaleIdentifier:(NSString *)string;

@end

@interface NSLocale (NSLocaleGeneralInfo)

+ (NSArray *)availableLocaleIdentifiers;
+ (NSArray *)ISOLanguageCodes;
+ (NSArray *)ISOCountryCodes;
+ (NSArray *)ISOCurrencyCodes;
+ (NSArray *)commonISOCurrencyCodes ;
+ (NSArray *)preferredLanguages ;

+ (NSDictionary *)componentsFromLocaleIdentifier:(NSString *)string;
+ (NSString *)localeIdentifierFromComponents:(NSDictionary *)dict;

+ (NSString *)canonicalLocaleIdentifierFromString:(NSString *)string;

@end


extern "C" NSString * const NSCurrentLocaleDidChangeNotification ;


extern "C" NSString * const NSLocaleIdentifier;
extern "C" NSString * const NSLocaleLanguageCode;
extern "C" NSString * const NSLocaleCountryCode;
extern "C" NSString * const NSLocaleScriptCode;
extern "C" NSString * const NSLocaleVariantCode;
extern "C" NSString * const NSLocaleExemplarCharacterSet;
extern "C" NSString * const NSLocaleCalendar;
extern "C" NSString * const NSLocaleCollationIdentifier;
extern "C" NSString * const NSLocaleUsesMetricSystem;
extern "C" NSString * const NSLocaleMeasurementSystem;
extern "C" NSString * const NSLocaleDecimalSeparator;
extern "C" NSString * const NSLocaleGroupingSeparator;
extern "C" NSString * const NSLocaleCurrencySymbol;
extern "C" NSString * const NSLocaleCurrencyCode;


extern "C" NSString * const NSGregorianCalendar;
extern "C" NSString * const NSBuddhistCalendar;
extern "C" NSString * const NSChineseCalendar;
extern "C" NSString * const NSHebrewCalendar;
extern "C" NSString * const NSIslamicCalendar;
extern "C" NSString * const NSIslamicCivilCalendar;
extern "C" NSString * const NSJapaneseCalendar;
# 52 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSLock.h" 1 3






@class NSDate;

@protocol NSLocking

- (void)lock;
- (void)unlock;

@end

@interface NSLock : NSObject <NSLocking> {
@private
    void *_priv;
}

- (BOOL)tryLock;
- (BOOL)lockBeforeDate:(NSDate *)limit;

- (void)setName:(NSString *)n ;
- (NSString *)name ;

@end

@interface NSConditionLock : NSObject <NSLocking> {
@private
    void *_priv;
}

- (id)initWithCondition:(NSInteger)condition;

- (NSInteger)condition;
- (void)lockWhenCondition:(NSInteger)condition;
- (BOOL)tryLock;
- (BOOL)tryLockWhenCondition:(NSInteger)condition;
- (void)unlockWithCondition:(NSInteger)condition;
- (BOOL)lockBeforeDate:(NSDate *)limit;
- (BOOL)lockWhenCondition:(NSInteger)condition beforeDate:(NSDate *)limit;

- (void)setName:(NSString *)n ;
- (NSString *)name ;

@end

@interface NSRecursiveLock : NSObject <NSLocking> {
@private
    void *_priv;
}

- (BOOL)tryLock;
- (BOOL)lockBeforeDate:(NSDate *)limit;

- (void)setName:(NSString *)n ;
- (NSString *)name ;

@end

@interface NSCondition : NSObject <NSLocking> {
@private
    void *_priv;
}

- (void)wait;
- (BOOL)waitUntilDate:(NSDate *)limit;
- (void)signal;
- (void)broadcast;

- (void)setName:(NSString *)n ;
- (NSString *)name ;

@end
# 53 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSMapTable.h" 1 3







@class NSArray, NSMutableDictionary;






enum {
    NSMapTableOptionZeroingWeakMemory = (1 << 0),
    NSMapTableOptionCopyIn = (1 << 15),
    NSMapTableOptionObjectPointerPersonality = (2 << 16),
};

typedef NSUInteger NSMapTableOptions;

@interface NSMapTable : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>

- (id)initWithKeyOptions:(NSMapTableOptions)keyOptions valueOptions:(NSMapTableOptions)valueOptions capacity:(NSUInteger)capacity;

+ (id)mapTableWithStrongToStrongObjects;
+ (id)mapTableWithWeakToStrongObjects;
+ (id)mapTableWithStrongToWeakObjects;
+ (id)mapTableWithWeakToWeakObjects;


- (id)objectForKey:(id)aKey;

- (void)removeObjectForKey:(id)aKey;
- (void)setObject:(id)anObject forKey:(id)aKey;

- (NSUInteger)count;

- (NSEnumerator *)keyEnumerator;
- (NSEnumerator *)objectEnumerator;

- (void)removeAllObjects;

- (NSMutableDictionary *)mutableDictionary;
@end






typedef struct {NSUInteger _pi; NSUInteger _si; void *_bs;} NSMapEnumerator;



extern "C" void NSFreeMapTable(NSMapTable *table);
extern "C" void NSResetMapTable(NSMapTable *table);
extern "C" BOOL NSCompareMapTables(NSMapTable *table1, NSMapTable *table2);
extern "C" NSMapTable *NSCopyMapTableWithZone(NSMapTable *table, NSZone *zone);
extern "C" BOOL NSMapMember(NSMapTable *table, const void *key, void **originalKey, void **value);
extern "C" void *NSMapGet(NSMapTable *table, const void *key);
extern "C" void NSMapInsert(NSMapTable *table, const void *key, const void *value);
extern "C" void NSMapInsertKnownAbsent(NSMapTable *table, const void *key, const void *value);
extern "C" void *NSMapInsertIfAbsent(NSMapTable *table, const void *key, const void *value);
extern "C" void NSMapRemove(NSMapTable *table, const void *key);
extern "C" NSMapEnumerator NSEnumerateMapTable(NSMapTable *table);
extern "C" BOOL NSNextMapEnumeratorPair(NSMapEnumerator *enumerator, void **key, void **value);
extern "C" void NSEndMapTableEnumeration(NSMapEnumerator *enumerator);
extern "C" NSUInteger NSCountMapTable(NSMapTable *table);
extern "C" NSString *NSStringFromMapTable(NSMapTable *table);
extern "C" NSArray *NSAllMapTableKeys(NSMapTable *table);
extern "C" NSArray *NSAllMapTableValues(NSMapTable *table);




typedef struct {
    NSUInteger (*hash)(NSMapTable *table, const void *);
    BOOL (*isEqual)(NSMapTable *table, const void *, const void *);
    void (*retain)(NSMapTable *table, const void *);
    void (*release)(NSMapTable *table, void *);
    NSString *(*describe)(NSMapTable *table, const void *);
    const void *notAKeyMarker;
} NSMapTableKeyCallBacks;





typedef struct {
    void (*retain)(NSMapTable *table, const void *);
    void (*release)(NSMapTable *table, void *);
    NSString *(*describe)(NSMapTable *table, const void *);
} NSMapTableValueCallBacks;

extern "C" NSMapTable *NSCreateMapTableWithZone(NSMapTableKeyCallBacks keyCallBacks, NSMapTableValueCallBacks valueCallBacks, NSUInteger capacity, NSZone *zone);
extern "C" NSMapTable *NSCreateMapTable(NSMapTableKeyCallBacks keyCallBacks, NSMapTableValueCallBacks valueCallBacks, NSUInteger capacity);




extern "C" const NSMapTableKeyCallBacks NSIntegerMapKeyCallBacks ;
extern "C" const NSMapTableKeyCallBacks NSNonOwnedPointerMapKeyCallBacks;
extern "C" const NSMapTableKeyCallBacks NSNonOwnedPointerOrNullMapKeyCallBacks;
extern "C" const NSMapTableKeyCallBacks NSNonRetainedObjectMapKeyCallBacks;
extern "C" const NSMapTableKeyCallBacks NSObjectMapKeyCallBacks;
extern "C" const NSMapTableKeyCallBacks NSOwnedPointerMapKeyCallBacks;
extern "C" const NSMapTableKeyCallBacks NSIntMapKeyCallBacks ;



extern "C" const NSMapTableValueCallBacks NSIntegerMapValueCallBacks ;
extern "C" const NSMapTableValueCallBacks NSNonOwnedPointerMapValueCallBacks;
extern "C" const NSMapTableValueCallBacks NSObjectMapValueCallBacks;
extern "C" const NSMapTableValueCallBacks NSNonRetainedObjectMapValueCallBacks;
extern "C" const NSMapTableValueCallBacks NSOwnedPointerMapValueCallBacks;
extern "C" const NSMapTableValueCallBacks NSIntMapValueCallBacks ;
# 54 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSMetadata.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSMetadata.h" 3
@class NSString, NSArray, NSDictionary, NSPredicate;
@class NSMetadataItem, NSMetadataQueryAttributeValueTuple, NSMetadataQueryResultGroup;


@interface NSMetadataQuery : NSObject {
@private
    NSUInteger _flags;
    NSTimeInterval _interval;
    id _private[11];
    void *_reserved;
}

- (id)init;

- (id)delegate;
- (void)setDelegate:(id)delegate;

- (NSPredicate *)predicate;
- (void)setPredicate:(NSPredicate *)predicate;

- (NSArray *)sortDescriptors;
- (void)setSortDescriptors:(NSArray *)descriptors;

- (NSArray *)valueListAttributes;
- (void)setValueListAttributes:(NSArray *)attrs;

- (NSArray *)groupingAttributes;
- (void)setGroupingAttributes:(NSArray *)attrs;

- (NSTimeInterval)notificationBatchingInterval;
- (void)setNotificationBatchingInterval:(NSTimeInterval)ti;

- (NSArray *)searchScopes;
- (void)setSearchScopes:(NSArray *)scopes;






- (BOOL)startQuery;
- (void)stopQuery;

- (BOOL)isStarted;
- (BOOL)isGathering;
- (BOOL)isStopped;

- (void)disableUpdates;
- (void)enableUpdates;



- (NSUInteger)resultCount;
- (id)resultAtIndex:(NSUInteger)idx;

- (NSArray *)results;

- (NSUInteger)indexOfResult:(id)result;

- (NSDictionary *)valueLists;

- (NSArray *)groupedResults;

- (id)valueOfAttribute:(NSString *)attrName forResultAtIndex:(NSUInteger)idx;

@end

@interface NSObject (NSMetadataQueryDelegate)

- (id)metadataQuery:(NSMetadataQuery *)query replacementObjectForResultObject:(NSMetadataItem *)result;
- (id)metadataQuery:(NSMetadataQuery *)query replacementValueForAttribute:(NSString *)attrName value:(id)attrValue;

@end


extern "C" NSString * const NSMetadataQueryDidStartGatheringNotification ;
extern "C" NSString * const NSMetadataQueryGatheringProgressNotification ;
extern "C" NSString * const NSMetadataQueryDidFinishGatheringNotification ;
extern "C" NSString * const NSMetadataQueryDidUpdateNotification ;

extern "C" NSString * const NSMetadataQueryResultContentRelevanceAttribute ;


extern "C" NSString * const NSMetadataQueryUserHomeScope ;
extern "C" NSString * const NSMetadataQueryLocalComputerScope ;
extern "C" NSString * const NSMetadataQueryNetworkScope ;

@interface NSMetadataItem : NSObject {
@private
    id _item;
    void *_reserved;
}

- (id)valueForAttribute:(NSString *)key;
- (NSDictionary *)valuesForAttributes:(NSArray *)keys;

- (NSArray *)attributes;

@end

@interface NSMetadataQueryAttributeValueTuple : NSObject {
@private
    id _attr;
    id _value;
    NSUInteger _count;
    void *_reserved;
}

- (NSString *)attribute;
- (id)value;
- (NSUInteger)count;

@end

@interface NSMetadataQueryResultGroup : NSObject {
@private
    id _private[9];
    NSUInteger _private2[1];
    void *_reserved;
}

- (NSString *)attribute;
- (id)value;

- (NSArray *)subgroups;

- (NSUInteger)resultCount;
- (id)resultAtIndex:(NSUInteger)idx;

- (NSArray *)results;

@end
# 55 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSMethodSignature.h" 1 3






@interface NSMethodSignature : NSObject {
    @private
    void *_private;
    const char *_types;
    NSInteger _nargs;
    NSUInteger _sizeofParams;
    NSUInteger _returnValueLength;
    NSInteger *_fixup;
    void *_reserved;
}

+ (NSMethodSignature *)signatureWithObjCTypes:(const char *)types;

- (NSUInteger)numberOfArguments;
- (const char *)getArgumentTypeAtIndex:(NSUInteger)idx;

- (NSUInteger)frameLength;

- (BOOL)isOneway;

- (const char *)methodReturnType;
- (NSUInteger)methodReturnLength;

@end
# 56 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSNetServices.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSNetServices.h" 3
@class NSArray, NSData, NSDictionary, NSInputStream, NSOutputStream, NSRunLoop, NSString;

#pragma mark Error constants

extern "C" NSString * const NSNetServicesErrorCode;
extern "C" NSString * const NSNetServicesErrorDomain;

enum {



    NSNetServicesUnknownError = -72000,



    NSNetServicesCollisionError = -72001,



    NSNetServicesNotFoundError = -72002,



    NSNetServicesActivityInProgress = -72003,



    NSNetServicesBadArgumentError = -72004,



    NSNetServicesCancelledError = -72005,



    NSNetServicesInvalidError = -72006,





    NSNetServicesTimeoutError = -72007,



};
typedef NSInteger NSNetServicesError;


enum {


    NSNetServiceNoAutoRename = 1 << 0
};
typedef NSUInteger NSNetServiceOptions;


#pragma mark -

@interface NSNetService : NSObject {
@private
    id _netService;
    id _delegate;
    id _reserved;
}



- (id)initWithDomain:(NSString *)domain type:(NSString *)type name:(NSString *)name port:(int)port;





- (id)initWithDomain:(NSString *)domain type:(NSString *)type name:(NSString *)name;

- (id)delegate;
- (void)setDelegate:(id)delegate;



- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
- (void)removeFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;



- (NSString *)domain;



- (NSString *)type;



- (NSString *)name;



- (NSArray *)addresses;




- (NSInteger)port;







- (void)publish;







- (void)publishWithOptions:(NSNetServiceOptions)options;





- (void)resolve;



- (void)stop;





+ (NSDictionary *)dictionaryFromTXTRecordData:(NSData *)txtData;



+ (NSData *)dataFromTXTRecordDictionary:(NSDictionary *)txtDictionary;



- (NSString *)hostName;



- (void)resolveWithTimeout:(NSTimeInterval)timeout;



- (BOOL)getInputStream:(NSInputStream **)inputStream outputStream:(NSOutputStream **)outputStream;



- (BOOL)setTXTRecordData:(NSData *)recordData;



- (NSData *)TXTRecordData;



- (void)startMonitoring;



- (void)stopMonitoring;



@end

#pragma mark -

@interface NSNetServiceBrowser : NSObject {
@private
    id _netServiceBrowser;
    id _delegate;
    void * _reserved;
}

- (id)init;

- (id)delegate;
- (void)setDelegate:(id)delegate;



- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
- (void)removeFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;





- (void)searchForBrowsableDomains;





- (void)searchForRegistrationDomains;



- (void)searchForServicesOfType:(NSString *)type inDomain:(NSString *)domainString;



- (void)stop;

@end

#pragma mark -

@interface NSObject (NSNetServiceDelegateMethods)



- (void)netServiceWillPublish:(NSNetService *)sender;





- (void)netServiceDidPublish:(NSNetService *)sender;





- (void)netService:(NSNetService *)sender didNotPublish:(NSDictionary *)errorDict;



- (void)netServiceWillResolve:(NSNetService *)sender;



- (void)netServiceDidResolveAddress:(NSNetService *)sender;



- (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict;



- (void)netServiceDidStop:(NSNetService *)sender;





- (void)netService:(NSNetService *)sender didUpdateTXTRecordData:(NSData *)data;



@end

#pragma mark -

@interface NSObject (NSNetServiceBrowserDelegateMethods)



- (void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser;



- (void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser;



- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didNotSearch:(NSDictionary *)errorDict;



- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindDomain:(NSString *)domainString moreComing:(BOOL)moreComing;



- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing;



- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didRemoveDomain:(NSString *)domainString moreComing:(BOOL)moreComing;



- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didRemoveService:(NSNetService *)aNetService moreComing:(BOOL)moreComing;

@end

#pragma mark -
#pragma mark Deprecated API




@interface NSNetService (NSDeprecated)





- (NSString *)protocolSpecificInformation;





- (void)setProtocolSpecificInformation:(NSString *)specificInformation;

@end

@interface NSNetServiceBrowser (NSDeprecated)





- (void)searchForAllDomains;

@end
# 57 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSNotificationQueue.h" 1 3






@class NSNotification, NSNotificationCenter, NSArray;

enum {
    NSPostWhenIdle = 1,
    NSPostASAP = 2,
    NSPostNow = 3
};
typedef NSUInteger NSPostingStyle;

enum {
    NSNotificationNoCoalescing = 0,
    NSNotificationCoalescingOnName = 1,
    NSNotificationCoalescingOnSender = 2
};
typedef NSUInteger NSNotificationCoalescing;

@interface NSNotificationQueue : NSObject {
@private
    id _notificationCenter;
    id _asapQueue;
    id _asapObs;
    id _idleQueue;
    id _idleObs;
}

+ (id)defaultQueue;

- (id)initWithNotificationCenter:(NSNotificationCenter *)notificationCenter;

- (void)enqueueNotification:(NSNotification *)notification postingStyle:(NSPostingStyle)postingStyle;
- (void)enqueueNotification:(NSNotification *)notification postingStyle:(NSPostingStyle)postingStyle coalesceMask:(NSUInteger)coalesceMask forModes:(NSArray *)modes;

- (void)dequeueNotificationsMatching:(NSNotification *)notification coalesceMask:(NSUInteger)coalesceMask;

@end
# 59 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSNull.h" 1 3






@interface NSNull : NSObject <NSCopying, NSCoding>

+ (NSNull *)null;

@end
# 60 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSNumberFormatter.h" 1 3







@class NSLocale, NSError, NSMutableDictionary;

@interface NSNumberFormatter : NSFormatter {
@private
    NSMutableDictionary *_attributes;
    CFNumberFormatterRef _formatter;
    void *_unused[12];
    void *_reserved;
}

- (id)init;





- (BOOL)getObjectValue:(out id *)obj forString:(NSString *)string range:(inout NSRange *)rangep error:(out NSError **)error;




- (NSString *)stringFromNumber:(NSNumber *)number;
- (NSNumber *)numberFromString:(NSString *)string;







enum {
    NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,
    NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,
    NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,
    NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,
    NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
    NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle
};
typedef NSUInteger NSNumberFormatterStyle;

- (NSNumberFormatterStyle)numberStyle;
- (void)setNumberStyle:(NSNumberFormatterStyle)style;

- (NSLocale *)locale;
- (void)setLocale:(NSLocale *)string;

- (BOOL)generatesDecimalNumbers;
- (void)setGeneratesDecimalNumbers:(BOOL)b;

enum {
    NSNumberFormatterBehaviorDefault = 0,
    NSNumberFormatterBehavior10_0 = 1000,
    NSNumberFormatterBehavior10_4 = 1040,
};
typedef NSUInteger NSNumberFormatterBehavior;

- (NSNumberFormatterBehavior)formatterBehavior;
- (void)setFormatterBehavior:(NSNumberFormatterBehavior)behavior;

+ (NSNumberFormatterBehavior)defaultFormatterBehavior;
+ (void)setDefaultFormatterBehavior:(NSNumberFormatterBehavior)behavior;



- (NSString *)negativeFormat;
- (void)setNegativeFormat:(NSString *)format;

- (NSDictionary *)textAttributesForNegativeValues;
- (void)setTextAttributesForNegativeValues:(NSDictionary *)newAttributes;

- (NSString *)positiveFormat;
- (void)setPositiveFormat:(NSString *)format;

- (NSDictionary *)textAttributesForPositiveValues;
- (void)setTextAttributesForPositiveValues:(NSDictionary *)newAttributes;

- (BOOL)allowsFloats;
- (void)setAllowsFloats:(BOOL)flag;

- (NSString *)decimalSeparator;
- (void)setDecimalSeparator:(NSString *)string;



- (BOOL)alwaysShowsDecimalSeparator;
- (void)setAlwaysShowsDecimalSeparator:(BOOL)b;

- (NSString *)currencyDecimalSeparator;
- (void)setCurrencyDecimalSeparator:(NSString *)string;

- (BOOL)usesGroupingSeparator;
- (void)setUsesGroupingSeparator:(BOOL)b;

- (NSString *)groupingSeparator;
- (void)setGroupingSeparator:(NSString *)string;


- (NSString *)zeroSymbol;
- (void)setZeroSymbol:(NSString *)string;

- (NSDictionary *)textAttributesForZero;
- (void)setTextAttributesForZero:(NSDictionary *)newAttributes;

- (NSString *)nilSymbol;
- (void)setNilSymbol:(NSString *)string;

- (NSDictionary *)textAttributesForNil;
- (void)setTextAttributesForNil:(NSDictionary *)newAttributes;

- (NSString *)notANumberSymbol;
- (void)setNotANumberSymbol:(NSString *)string;

- (NSDictionary *)textAttributesForNotANumber;
- (void)setTextAttributesForNotANumber:(NSDictionary *)newAttributes;

- (NSString *)positiveInfinitySymbol;
- (void)setPositiveInfinitySymbol:(NSString *)string;

- (NSDictionary *)textAttributesForPositiveInfinity;
- (void)setTextAttributesForPositiveInfinity:(NSDictionary *)newAttributes;

- (NSString *)negativeInfinitySymbol;
- (void)setNegativeInfinitySymbol:(NSString *)string;

- (NSDictionary *)textAttributesForNegativeInfinity;
- (void)setTextAttributesForNegativeInfinity:(NSDictionary *)newAttributes;


- (NSString *)positivePrefix;
- (void)setPositivePrefix:(NSString *)string;

- (NSString *)positiveSuffix;
- (void)setPositiveSuffix:(NSString *)string;

- (NSString *)negativePrefix;
- (void)setNegativePrefix:(NSString *)string;

- (NSString *)negativeSuffix;
- (void)setNegativeSuffix:(NSString *)string;

- (NSString *)currencyCode;
- (void)setCurrencyCode:(NSString *)string;

- (NSString *)currencySymbol;
- (void)setCurrencySymbol:(NSString *)string;

- (NSString *)internationalCurrencySymbol;
- (void)setInternationalCurrencySymbol:(NSString *)string;

- (NSString *)percentSymbol;
- (void)setPercentSymbol:(NSString *)string;

- (NSString *)perMillSymbol;
- (void)setPerMillSymbol:(NSString *)string;

- (NSString *)minusSign;
- (void)setMinusSign:(NSString *)string;

- (NSString *)plusSign;
- (void)setPlusSign:(NSString *)string;

- (NSString *)exponentSymbol;
- (void)setExponentSymbol:(NSString *)string;


- (NSUInteger)groupingSize;
- (void)setGroupingSize:(NSUInteger)number;

- (NSUInteger)secondaryGroupingSize;
- (void)setSecondaryGroupingSize:(NSUInteger)number;

- (NSNumber *)multiplier;
- (void)setMultiplier:(NSNumber *)number;

- (NSUInteger)formatWidth;
- (void)setFormatWidth:(NSUInteger)number;

- (NSString *)paddingCharacter;
- (void)setPaddingCharacter:(NSString *)string;

enum {
    NSNumberFormatterPadBeforePrefix = kCFNumberFormatterPadBeforePrefix,
    NSNumberFormatterPadAfterPrefix = kCFNumberFormatterPadAfterPrefix,
    NSNumberFormatterPadBeforeSuffix = kCFNumberFormatterPadBeforeSuffix,
    NSNumberFormatterPadAfterSuffix = kCFNumberFormatterPadAfterSuffix
};
typedef NSUInteger NSNumberFormatterPadPosition;

- (NSNumberFormatterPadPosition)paddingPosition;
- (void)setPaddingPosition:(NSNumberFormatterPadPosition)position;

enum {
    NSNumberFormatterRoundCeiling = kCFNumberFormatterRoundCeiling,
    NSNumberFormatterRoundFloor = kCFNumberFormatterRoundFloor,
    NSNumberFormatterRoundDown = kCFNumberFormatterRoundDown,
    NSNumberFormatterRoundUp = kCFNumberFormatterRoundUp,
    NSNumberFormatterRoundHalfEven = kCFNumberFormatterRoundHalfEven,
    NSNumberFormatterRoundHalfDown = kCFNumberFormatterRoundHalfDown,
    NSNumberFormatterRoundHalfUp = kCFNumberFormatterRoundHalfUp
};
typedef NSUInteger NSNumberFormatterRoundingMode;

- (NSNumberFormatterRoundingMode)roundingMode;
- (void)setRoundingMode:(NSNumberFormatterRoundingMode)mode;

- (NSNumber *)roundingIncrement;
- (void)setRoundingIncrement:(NSNumber *)number;

- (NSUInteger)minimumIntegerDigits;
- (void)setMinimumIntegerDigits:(NSUInteger)number;

- (NSUInteger)maximumIntegerDigits;
- (void)setMaximumIntegerDigits:(NSUInteger)number;

- (NSUInteger)minimumFractionDigits;
- (void)setMinimumFractionDigits:(NSUInteger)number;

- (NSUInteger)maximumFractionDigits;
- (void)setMaximumFractionDigits:(NSUInteger)number;


- (NSNumber *)minimum;
- (void)setMinimum:(NSNumber *)number;

- (NSNumber *)maximum;
- (void)setMaximum:(NSNumber *)number;



- (NSString *)currencyGroupingSeparator ;
- (NSString *)setCurrencyGroupingSeparator:(NSString *)string ;

- (BOOL)isLenient ;
- (void)setLenient:(BOOL)b ;

- (BOOL)usesSignificantDigits ;
- (void)setUsesSignificantDigits:(BOOL)b ;

- (NSUInteger)minimumSignificantDigits ;
- (void)setMinimumSignificantDigits:(NSUInteger)number ;

- (NSUInteger)maximumSignificantDigits ;
- (void)setMaximumSignificantDigits:(NSUInteger)number ;

- (BOOL)isPartialStringValidationEnabled ;
- (void)setPartialStringValidationEnabled:(BOOL)b ;

@end

@class NSDecimalNumberHandler;

@interface NSNumberFormatter (NSNumberFormatterCompatibility)

- (BOOL)hasThousandSeparators;
- (void)setHasThousandSeparators:(BOOL)flag;
- (NSString *)thousandSeparator;
- (void)setThousandSeparator:(NSString *)newSeparator;

- (BOOL)localizesFormat;
- (void)setLocalizesFormat:(BOOL)flag;

- (NSString *)format;
- (void)setFormat:(NSString *)string;

- (NSAttributedString *)attributedStringForZero;
- (void)setAttributedStringForZero:(NSAttributedString *)newAttributedString;
- (NSAttributedString *)attributedStringForNil;
- (void)setAttributedStringForNil:(NSAttributedString *)newAttributedString;
- (NSAttributedString *)attributedStringForNotANumber;
- (void)setAttributedStringForNotANumber:(NSAttributedString *)newAttributedString;

- (NSDecimalNumberHandler *)roundingBehavior;
- (void)setRoundingBehavior:(NSDecimalNumberHandler *)newRoundingBehavior;
# 291 "/System/Library/Frameworks/Foundation.framework/Headers/NSNumberFormatter.h" 3
@end
# 61 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSOperation.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSOperation.h" 3
@class NSArray, NSSet;

@interface NSOperation : NSObject {
@private
    id _private;
    void *_reserved;
}

- (id)init;

- (void)start;
- (void)main;

- (BOOL)isCancelled;
- (void)cancel;

- (BOOL)isExecuting;
- (BOOL)isFinished;

- (BOOL)isConcurrent;

- (BOOL)isReady;

- (void)addDependency:(NSOperation *)op;
- (void)removeDependency:(NSOperation *)op;

- (NSArray *)dependencies;

- (double)operationQueuePriority;
- (void)setOperationQueuePriority:(double)p;

@end

@interface NSInvocationOperation : NSOperation {
@private
    id _inv;
    id _exc;
    void *_reserved2;
}

- (id)initWithTarget:(id)target selector:(SEL)sel object:(id)arg;
- (id)initWithInvocation:(NSInvocation *)inv;

- (NSInvocation *)invocation;

- (id)result;

@end

extern "C" NSString * const NSInvocationOperationVoidResultException;
extern "C" NSString * const NSInvocationOperationCancelledException;


@interface NSOperationQueue : NSObject {
@private
    id _private;
    void *_reserved;
}

- (void)addOperation:(NSOperation *)op;

- (NSArray *)operations;

- (NSInteger)maxConcurrentOperationCount;
- (void)setMaxConcurrentOperationCount:(NSInteger)cnt;

enum {
    NSOperationQueueDefaultMaxConcurrentOperationCount = -1
};

- (void)setSuspended:(BOOL)b;
- (BOOL)isSuspended;

- (void)cancelAllOperations;

- (void)waitUntilAllOperationsAreFinished;

@end
# 63 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPathUtilities.h" 1 3







@interface NSString (NSStringPathExtensions)

+ (NSString *)pathWithComponents:(NSArray *)components;
- (NSArray *)pathComponents;

- (BOOL)isAbsolutePath;

- (NSString *)lastPathComponent;
- (NSString *)stringByDeletingLastPathComponent;
- (NSString *)stringByAppendingPathComponent:(NSString *)str;

- (NSString *)pathExtension;
- (NSString *)stringByDeletingPathExtension;
- (NSString *)stringByAppendingPathExtension:(NSString *)str;

- (NSString *)stringByAbbreviatingWithTildeInPath;
- (NSString *)stringByExpandingTildeInPath;

- (NSString *)stringByStandardizingPath;

- (NSString *)stringByResolvingSymlinksInPath;

- (NSArray *)stringsByAppendingPaths:(NSArray *)paths;

- (NSUInteger)completePathIntoString:(NSString **)outputName caseSensitive:(BOOL)flag matchesIntoArray:(NSArray **)outputArray filterTypes:(NSArray *)filterTypes;

- (const char *)fileSystemRepresentation;
- (BOOL)getFileSystemRepresentation:(char *)cname maxLength:(NSUInteger)max;

@end

@interface NSArray (NSArrayPathExtensions)

- (NSArray *)pathsMatchingExtensions:(NSArray *)filterTypes;

@end

extern "C" NSString *NSUserName(void);
extern "C" NSString *NSFullUserName(void);

extern "C" NSString *NSHomeDirectory(void);
extern "C" NSString *NSHomeDirectoryForUser(NSString *userName);

extern "C" NSString *NSTemporaryDirectory(void);

extern "C" NSString *NSOpenStepRootDirectory(void);

enum {
    NSApplicationDirectory = 1,
    NSDemoApplicationDirectory,
    NSDeveloperApplicationDirectory,
    NSAdminApplicationDirectory,
    NSLibraryDirectory,
    NSDeveloperDirectory,
    NSUserDirectory,
    NSDocumentationDirectory,

    NSDocumentDirectory,


    NSCoreServiceDirectory,


    NSDesktopDirectory = 12,
    NSCachesDirectory = 13,
    NSApplicationSupportDirectory = 14,

    NSAllApplicationsDirectory = 100,
    NSAllLibrariesDirectory = 101
};
typedef NSUInteger NSSearchPathDirectory;

enum {
    NSUserDomainMask = 1,
    NSLocalDomainMask = 2,
    NSNetworkDomainMask = 4,
    NSSystemDomainMask = 8,
    NSAllDomainsMask = 0x0ffff
};
typedef NSUInteger NSSearchPathDomainMask;

extern "C" NSArray *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);
# 64 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPort.h" 1 3






typedef int NSSocketNativeHandle;

@class NSRunLoop, NSMutableArray, NSDate;
@class NSConnection, NSPortMessage;
@class NSData;

extern "C" NSString * const NSPortDidBecomeInvalidNotification;

@interface NSPort : NSObject <NSCopying, NSCoding>






+ (id)allocWithZone:(NSZone *)zone;

+ (NSPort *)port;

- (void)invalidate;
- (BOOL)isValid;

- (void)setDelegate:(id)anId;
- (id)delegate;





- (void)scheduleInRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;
- (void)removeFromRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;


- (NSUInteger)reservedSpaceLength;
- (BOOL)sendBeforeDate:(NSDate *)limitDate components:(NSMutableArray *)components from:(NSPort *) receivePort reserved:(NSUInteger)headerSpaceReserved;
- (BOOL)sendBeforeDate:(NSDate *)limitDate msgid:(NSUInteger)msgID components:(NSMutableArray *)components from:(NSPort *)receivePort reserved:(NSUInteger)headerSpaceReserved;
# 54 "/System/Library/Frameworks/Foundation.framework/Headers/NSPort.h" 3
- (void)addConnection:(NSConnection *)conn toRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;
- (void)removeConnection:(NSConnection *)conn fromRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;





@end

@interface NSObject (NSPortDelegateMethods)

- (void)handlePortMessage:(NSPortMessage *)message;



@end



@interface NSMachPort : NSPort {
    @private
    id _delegate;
    void *_tickler;
    uint32_t _machPort;
    NSUInteger _reserved;
}

+ (NSPort *)portWithMachPort:(uint32_t)machPort;
- (id)initWithMachPort:(uint32_t)machPort;

enum {
    NSMachPortDeallocateNone = 0,
    NSMachPortDeallocateSendRight = (1 << 0),
    NSMachPortDeallocateReceiveRight = (1 << 1)
};

+ (NSPort *)portWithMachPort:(uint32_t)machPort options:(NSUInteger)f ;
- (id)initWithMachPort:(uint32_t)machPort options:(NSUInteger)f ;

- (uint32_t)machPort;

- (void)scheduleInRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;
- (void)removeFromRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;




@end

@interface NSObject (NSMachPortDelegateMethods)



- (void)handleMachMessage:(void *)msg;

@end





@interface NSMessagePort : NSPort {
    @private
    void *_port;
    id _delegate;
}

@end




@interface NSSocketPort : NSPort {
    @private
    void *_receiver;
    void *_connectors;
    void *_loops;
    void *_data;
    id _signature;
    id _delegate;
    id _lock;
    NSUInteger _maxSize;
    NSUInteger _maxSockets;
    NSUInteger _reserved;
}

- (id)init;
- (id)initWithTCPPort:(unsigned short)port;
- (id)initWithProtocolFamily:(int)family socketType:(int)type protocol:(int)protocol address:(NSData *)address;
- (id)initWithProtocolFamily:(int)family socketType:(int)type protocol:(int)protocol socket:(NSSocketNativeHandle)sock;
- (id)initRemoteWithTCPPort:(unsigned short)port host:(NSString *)hostName;
- (id)initRemoteWithProtocolFamily:(int)family socketType:(int)type protocol:(int)protocol address:(NSData *)address;
- (int)protocolFamily;
- (int)socketType;
- (int)protocol;
- (NSData *)address;
- (NSSocketNativeHandle)socket;

@end
# 65 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPortCoder.h" 1 3






@class NSConnection, NSPort, NSArray;

@interface NSPortCoder : NSCoder

- (BOOL)isBycopy;
- (BOOL)isByref;
- (NSConnection *)connection;
- (void)encodePortObject:(NSPort *)aport;
- (NSPort *)decodePortObject;


+ portCoderWithReceivePort:(NSPort *)rcvPort sendPort:(NSPort *)sndPort components:(NSArray *)comps;
- (id)initWithReceivePort:(NSPort *)rcvPort sendPort:(NSPort *)sndPort components:(NSArray *)comps;
- (void)dispatch;

@end

@interface NSObject (NSDistributedObjects)

- (Class)classForPortCoder;

- (id)replacementObjectForPortCoder:(NSPortCoder *)coder;

@end
# 66 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPortMessage.h" 1 3






@class NSPort, NSDate, NSArray, NSMutableArray;

@interface NSPortMessage : NSObject {
    @private
    NSPort *localPort;
    NSPort *remotePort;
    NSMutableArray *components;
    uint32_t msgid;
    void *reserved2;
    void *reserved;
}

- (id)initWithSendPort:(NSPort *)sendPort receivePort:(NSPort *)replyPort components:(NSArray *)components;

- (NSArray *)components;
- (NSPort *)receivePort;
- (NSPort *)sendPort;
- (BOOL)sendBeforeDate:(NSDate *)date;

- (uint32_t)msgid;
- (void)setMsgid:(uint32_t)msgid;

@end
# 67 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPortNameServer.h" 1 3






@class NSString, NSPort;

@interface NSPortNameServer : NSObject

+ (NSPortNameServer *)systemDefaultPortNameServer;

- (NSPort *)portForName:(NSString *)name;
- (NSPort *)portForName:(NSString *)name host:(NSString *)host;

- (BOOL)registerPort:(NSPort *)port name:(NSString *)name;

- (BOOL)removePortForName:(NSString *)name;

@end



@interface NSMachBootstrapServer : NSPortNameServer



+ (id)sharedInstance;

- (NSPort *)portForName:(NSString *)name;
- (NSPort *)portForName:(NSString *)name host:(NSString *)host;



- (BOOL)registerPort:(NSPort *)port name:(NSString *)name;






- (NSPort *)servicePortWithName:(NSString *)name ;

@end



@interface NSMessagePortNameServer : NSPortNameServer



+ (id)sharedInstance;

- (NSPort *)portForName:(NSString *)name;
- (NSPort *)portForName:(NSString *)name host:(NSString *)host;
# 64 "/System/Library/Frameworks/Foundation.framework/Headers/NSPortNameServer.h" 3
@end

@interface NSSocketPortNameServer : NSPortNameServer



+ (id)sharedInstance;

- (NSPort *)portForName:(NSString *)name;
- (NSPort *)portForName:(NSString *)name host:(NSString *)host;

- (BOOL)registerPort:(NSPort *)port name:(NSString *)name;

- (BOOL)removePortForName:(NSString *)name;



- (NSPort *)portForName:(NSString *)name host:(NSString *)host nameServerPortNumber:(uint16_t)portNumber;
- (BOOL)registerPort:(NSPort *)port name:(NSString *)name nameServerPortNumber:(uint16_t)portNumber;
- (void)setDefaultNameServerPortNumber:(uint16_t)portNumber;
- (uint16_t)defaultNameServerPortNumber;

@end
# 68 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSProcessInfo.h" 1 3






enum {
 NSWindowsNTOperatingSystem = 1,
 NSWindows95OperatingSystem,
 NSSolarisOperatingSystem,
 NSHPUXOperatingSystem,
 NSMACHOperatingSystem,
 NSSunOSOperatingSystem,
 NSOSF1OperatingSystem
};

@class NSArray, NSString, NSDictionary;

@interface NSProcessInfo : NSObject {
    @private
    NSDictionary *environment;
    NSArray *arguments;
    NSString *hostName;
    NSString *name;
    void *reserved;
}

+ (NSProcessInfo *)processInfo;

- (NSDictionary *)environment;

- (NSArray *)arguments;

- (NSString *)hostName;

- (NSString *)processName;

- (int)processIdentifier;

- (void)setProcessName:(NSString *)newName;

- (NSString *)globallyUniqueString;

- (NSUInteger)operatingSystem;
- (NSString *)operatingSystemName;


- (NSString *)operatingSystemVersionString;



- (NSUInteger)processorCount;
- (NSUInteger)activeProcessorCount;
- (unsigned long long)physicalMemory;


@end
# 69 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSProtocolChecker.h" 1 3







@interface NSProtocolChecker : NSProxy

- (Protocol *)protocol;
- (NSObject *)target;

@end

@interface NSProtocolChecker (NSProtocolCheckerCreation)

+ (id)protocolCheckerWithTarget:(NSObject *)anObject protocol:(Protocol *)aProtocol;
- (id)initWithTarget:(NSObject *)anObject protocol:(Protocol *)aProtocol;

@end
# 71 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3


# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSRunLoop.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSRunLoop.h" 3
@class NSTimer, NSPort, NSArray;

extern "C" NSString * const NSDefaultRunLoopMode;
extern "C" NSString * const NSRunLoopCommonModes ;

@interface NSRunLoop : NSObject {
@private
    id _rl;
    id _dperf;
    id _perft;
    void *_reserved[8];
}

+ (NSRunLoop *)currentRunLoop;
+ (NSRunLoop *)mainRunLoop ;

- (NSString *)currentMode;
- (CFRunLoopRef)getCFRunLoop;

- (void)addTimer:(NSTimer *)timer forMode:(NSString *)mode;

- (void)addPort:(NSPort *)aPort forMode:(NSString *)mode;
- (void)removePort:(NSPort *)aPort forMode:(NSString *)mode;

- (NSDate *)limitDateForMode:(NSString *)mode;
- (void)acceptInputForMode:(NSString *)mode beforeDate:(NSDate *)limitDate;

@end

@interface NSRunLoop (NSRunLoopConveniences)

- (void)run;
- (void)runUntilDate:(NSDate *)limitDate;
- (BOOL)runMode:(NSString *)mode beforeDate:(NSDate *)limitDate;

- (void)configureAsServer ;

@end



@interface NSObject (NSDelayedPerforming)

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument;

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;


@end

@interface NSRunLoop (NSOrderedPerform)

- (void)performSelector:(SEL)aSelector target:(id)target argument:(id)arg order:(NSUInteger)order modes:(NSArray *)modes;
- (void)cancelPerformSelector:(SEL)aSelector target:(id)target argument:(id)arg;

- (void)cancelPerformSelectorsWithTarget:(id)target;


@end
# 74 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3


# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSSortDescriptor.h" 1 3
# 12 "/System/Library/Frameworks/Foundation.framework/Headers/NSSortDescriptor.h" 3
@interface NSSortDescriptor : NSObject <NSCoding, NSCopying> {
@private
    NSUInteger _sortDescriptorFlags;
    NSString *_key;
    SEL _selector;
    NSString *_selectorName;
}


- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending;
- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending selector:(SEL)selector;

- (NSString *)key;
- (BOOL)ascending;
- (SEL)selector;

- (NSComparisonResult)compareObject:(id)object1 toObject:(id)object2;
- (id)reversedSortDescriptor;

@end

@interface NSArray (NSSortDescriptorSorting)

- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors;

@end

@interface NSMutableArray (NSSortDescriptorSorting)

- (void)sortUsingDescriptors:(NSArray *)sortDescriptors;

@end
# 77 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSSpellServer.h" 1 3







@class NSArray;






@interface NSSpellServer : NSObject {



  @private

    id _delegate;
    NSInteger _caseSensitive;
    id _spellServerConnection;
    id _dictionaries;
    NSArray *_learnedDictionaries;

    struct __ssFlags {
        unsigned int delegateLearnsWords:1;
        unsigned int delegateForgetsWords:1;
        unsigned int busy:1;
        unsigned int _reserved:29;
    } _ssFlags;

    void *_reservedSpellServer1;
    void *_reservedSpellServer2;
}

- (void)setDelegate:(id)anObject;
- (id)delegate;


- (BOOL)registerLanguage:(NSString *)language byVendor:(NSString *)vendor;


- (BOOL)isWordInUserDictionaries:(NSString *)word caseSensitive:(BOOL)flag;


- (void)run;

@end
# 65 "/System/Library/Frameworks/Foundation.framework/Headers/NSSpellServer.h" 3
@interface NSObject(NSSpellServerDelegate)

- (NSRange)spellServer:(NSSpellServer *)sender findMisspelledWordInString:(NSString *)stringToCheck language:(NSString *)language wordCount:(NSInteger *)wordCount countOnly:(BOOL)countOnly;

- (NSArray *)spellServer:(NSSpellServer *)sender suggestGuessesForWord:(NSString *)word inLanguage:(NSString *)language;

- (void)spellServer:(NSSpellServer *)sender didLearnWord:(NSString *)word inLanguage:(NSString *)language;

- (void)spellServer:(NSSpellServer *)sender didForgetWord:(NSString *)word inLanguage:(NSString *)language;


- (NSArray *)spellServer:(NSSpellServer *)sender suggestCompletionsForPartialWordRange:(NSRange)range inString:(NSString *)string language:(NSString *)language;



- (NSRange)spellServer:(NSSpellServer *)sender checkGrammarInString:(NSString *)stringToCheck language:(NSString *)language details:(NSArray **)details;


extern "C" NSString *const NSGrammarRange;
extern "C" NSString *const NSGrammarUserDescription;
extern "C" NSString *const NSGrammarCorrections;



@end
# 78 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSStream.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSStream.h" 3
@class NSData, NSDictionary, NSError, NSHost, NSInputStream, NSRunLoop, NSString, NSOutputStream;

enum {
    NSStreamStatusNotOpen = 0,
    NSStreamStatusOpening = 1,
    NSStreamStatusOpen = 2,
    NSStreamStatusReading = 3,
    NSStreamStatusWriting = 4,
    NSStreamStatusAtEnd = 5,
    NSStreamStatusClosed = 6,
    NSStreamStatusError = 7
};
typedef NSUInteger NSStreamStatus;

enum {
    NSStreamEventNone = 0,
    NSStreamEventOpenCompleted = 1 << 0,
    NSStreamEventHasBytesAvailable = 1 << 1,
    NSStreamEventHasSpaceAvailable = 1 << 2,
    NSStreamEventErrorOccurred = 1 << 3,
    NSStreamEventEndEncountered = 1 << 4
};
typedef NSUInteger NSStreamEvent;



@interface NSStream : NSObject
- (void)open;
- (void)close;

- (id)delegate;
- (void)setDelegate:(id)delegate;


- (id)propertyForKey:(NSString *)key;
- (BOOL)setProperty:(id)property forKey:(NSString *)key;

- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
- (void)removeFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;

- (NSStreamStatus)streamStatus;
- (NSError *)streamError;
@end



@interface NSInputStream : NSStream
- (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len;


- (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)len;


- (BOOL)hasBytesAvailable;

@end



@interface NSOutputStream : NSStream
- (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)len;


- (BOOL)hasSpaceAvailable;

@end

@interface NSStream (NSSocketStreamCreationExtensions)
+ (void)getStreamsToHost:(NSHost *)host port:(NSInteger)port inputStream:(NSInputStream **)inputStream outputStream:(NSOutputStream **)outputStream;
@end


@interface NSInputStream (NSInputStreamExtensions)
- (id)initWithData:(NSData *)data;
- (id)initWithFileAtPath:(NSString *)path;

+ (id)inputStreamWithData:(NSData *)data;
+ (id)inputStreamWithFileAtPath:(NSString *)path;
@end


@interface NSOutputStream (NSOutputStreamExtensions)
- (id)initToMemory;
- (id)initToBuffer:(uint8_t *)buffer capacity:(NSUInteger)capacity;
- (id)initToFileAtPath:(NSString *)path append:(BOOL)shouldAppend;

+ (id)outputStreamToMemory;
+ (id)outputStreamToBuffer:(uint8_t *)buffer capacity:(NSUInteger)capacity;
+ (id)outputStreamToFileAtPath:(NSString *)path append:(BOOL)shouldAppend;
@end

@interface NSObject (NSStreamDelegateEventExtensions)
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode;
@end



extern "C" NSString * const NSStreamSocketSecurityLevelKey ;

extern "C" NSString * const NSStreamSocketSecurityLevelNone ;
extern "C" NSString * const NSStreamSocketSecurityLevelSSLv2 ;
extern "C" NSString * const NSStreamSocketSecurityLevelSSLv3 ;
extern "C" NSString * const NSStreamSocketSecurityLevelTLSv1 ;
extern "C" NSString * const NSStreamSocketSecurityLevelNegotiatedSSL ;

extern "C" NSString * const NSStreamSOCKSProxyConfigurationKey ;

extern "C" NSString * const NSStreamSOCKSProxyHostKey ;

extern "C" NSString * const NSStreamSOCKSProxyPortKey ;

extern "C" NSString * const NSStreamSOCKSProxyVersionKey ;

extern "C" NSString * const NSStreamSOCKSProxyUserKey ;

extern "C" NSString * const NSStreamSOCKSProxyPasswordKey ;


extern "C" NSString * const NSStreamSOCKSProxyVersion4 ;

extern "C" NSString * const NSStreamSOCKSProxyVersion5 ;


extern "C" NSString * const NSStreamDataWrittenToMemoryStreamKey ;


extern "C" NSString * const NSStreamFileCurrentOffsetKey ;



extern "C" NSString * const NSStreamSocketSSLErrorDomain ;

extern "C" NSString * const NSStreamSOCKSErrorDomain ;
# 79 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSTask.h" 1 3






@class NSString, NSArray, NSDictionary;

@interface NSTask : NSObject
# 18 "/System/Library/Frameworks/Foundation.framework/Headers/NSTask.h" 3
- (id)init;



- (void)setLaunchPath:(NSString *)path;
- (void)setArguments:(NSArray *)arguments;
- (void)setEnvironment:(NSDictionary *)dict;

- (void)setCurrentDirectoryPath:(NSString *)path;



- (void)setStandardInput:(id)input;
- (void)setStandardOutput:(id)output;
- (void)setStandardError:(id)error;


- (NSString *)launchPath;
- (NSArray *)arguments;
- (NSDictionary *)environment;
- (NSString *)currentDirectoryPath;


- (id)standardInput;
- (id)standardOutput;
- (id)standardError;


- (void)launch;

- (void)interrupt;
- (void)terminate;

- (BOOL)suspend;
- (BOOL)resume;


- (int)processIdentifier;
- (BOOL)isRunning;

- (int)terminationStatus;

@end

@interface NSTask (NSTaskConveniences)

+ (NSTask *)launchedTaskWithLaunchPath:(NSString *)path arguments:(NSArray *)arguments;


- (void)waitUntilExit;


@end

extern "C" NSString * const NSTaskDidTerminateNotification;
# 81 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSThread.h" 1 3







@class NSArray, NSMutableDictionary, NSDate, NSThreadQueue;

@interface NSThread : NSObject {
@private
    id _private;
    uint8_t _bytes[44];
}

+ (NSThread *)currentThread;

+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;

+ (BOOL)isMultiThreaded;

- (NSMutableDictionary *)threadDictionary;

+ (void)sleepUntilDate:(NSDate *)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;

+ (void)exit;


+ (double)threadPriority;
+ (BOOL)setThreadPriority:(double)p;




+ (NSArray *)callStackReturnAddresses;

- (void)setName:(NSString *)n;
- (NSString *)name;

- (NSUInteger)stackSize;
- (void)setStackSize:(NSUInteger)s;

- (BOOL)isMainThread;
+ (BOOL)isMainThread;
+ (NSThread *)mainThread;

- (id)init;
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;

- (BOOL)isExecuting;
- (BOOL)isFinished;

- (BOOL)isCancelled;
- (void)cancel;

- (void)start;

- (void)main;



@end

extern "C" NSString * const NSWillBecomeMultiThreadedNotification;
extern "C" NSString * const NSDidBecomeSingleThreadedNotification;
extern "C" NSString * const NSThreadWillExitNotification;

@interface NSObject (NSThreadPerformAdditions)


- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array;
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;




- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array;
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg;


@end
# 82 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSTimeZone.h" 1 3







@class NSString, NSArray, NSDictionary, NSDate, NSData, NSLocale;

@interface NSTimeZone : NSObject <NSCopying, NSCoding>

- (NSString *)name;
- (NSData *)data;

- (NSInteger)secondsFromGMTForDate:(NSDate *)aDate;
- (NSString *)abbreviationForDate:(NSDate *)aDate;
- (BOOL)isDaylightSavingTimeForDate:(NSDate *)aDate;
- (NSTimeInterval)daylightSavingTimeOffsetForDate:(NSDate *)aDate ;
- (NSDate *)nextDaylightSavingTimeTransitionAfterDate:(NSDate *)aDate ;

@end

@interface NSTimeZone (NSExtendedTimeZone)

+ (NSTimeZone *)systemTimeZone;
+ (void)resetSystemTimeZone;

+ (NSTimeZone *)defaultTimeZone;
+ (void)setDefaultTimeZone:(NSTimeZone *)aTimeZone;

+ (NSTimeZone *)localTimeZone;

+ (NSArray *)knownTimeZoneNames;

+ (NSDictionary *)abbreviationDictionary;

- (NSInteger)secondsFromGMT;
- (NSString *)abbreviation;
- (BOOL)isDaylightSavingTime;
- (NSTimeInterval)daylightSavingTimeOffset ;
- (NSDate *)nextDaylightSavingTimeTransition ;

- (NSString *)description;

- (BOOL)isEqualToTimeZone:(NSTimeZone *)aTimeZone;

enum {
 NSTimeZoneNameStyleStandard,
 NSTimeZoneNameStyleShortStandard,
 NSTimeZoneNameStyleDaylightSaving,
 NSTimeZoneNameStyleShortDaylightSaving
};
typedef NSInteger NSTimeZoneNameStyle;

- (NSString *)localizedName:(NSTimeZoneNameStyle)style locale:(NSLocale *)locale ;

@end

@interface NSTimeZone (NSTimeZoneCreation)




+ (id)timeZoneWithName:(NSString *)tzName;
+ (id)timeZoneWithName:(NSString *)tzName data:(NSData *)aData;

- (id)initWithName:(NSString *)tzName;
- (id)initWithName:(NSString *)tzName data:(NSData *)aData;




+ (id)timeZoneForSecondsFromGMT:(NSInteger)seconds;

+ (id)timeZoneWithAbbreviation:(NSString *)abbreviation;

@end

extern "C" NSString * const NSSystemTimeZoneDidChangeNotification;
# 83 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSTimer.h" 1 3







@interface NSTimer : NSObject

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;


- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(id)ui repeats:(BOOL)rep;


- (void)fire;

- (NSDate *)fireDate;

- (void)setFireDate:(NSDate *)date;


- (NSTimeInterval)timeInterval;

- (void)invalidate;
- (BOOL)isValid;

- (id)userInfo;

@end
# 84 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSUndoManager.h" 1 3
# 12 "/System/Library/Frameworks/Foundation.framework/Headers/NSUndoManager.h" 3
@class NSArray;
@class NSString;


enum {
    NSUndoCloseGroupingRunLoopOrdering = 350000
};

@interface NSUndoManager : NSObject
{
    @private
    id _undoStack;
    id _redoStack;
    NSArray *_runLoopModes;
    NSInteger _disabled;
    struct {
        unsigned int undoing:1;
        unsigned int redoing:1;
        unsigned int registeredForCallback:1;
        unsigned int postingCheckpointNotification:1;
        unsigned int groupsByEvent:1;
        unsigned int reserved:27;
    } _flags;

    id _target;

    void *_NSUndoManagerReserved1;
    void *_NSUndoManagerReserved2;
    void *_NSUndoManagerReserved3;
}



- (void)beginUndoGrouping;
- (void)endUndoGrouping;


- (NSInteger)groupingLevel;




- (void)disableUndoRegistration;
- (void)enableUndoRegistration;
- (BOOL)isUndoRegistrationEnabled;



- (BOOL)groupsByEvent;
- (void)setGroupsByEvent:(BOOL)groupsByEvent;






- (void)setLevelsOfUndo:(NSUInteger)levels;
- (NSUInteger)levelsOfUndo;






- (void)setRunLoopModes:(NSArray *)runLoopModes;
- (NSArray *)runLoopModes;



- (void)undo;



- (void)redo;


- (void)undoNestedGroup;



- (BOOL)canUndo;
- (BOOL)canRedo;


- (BOOL)isUndoing;
- (BOOL)isRedoing;





- (void)removeAllActions;

- (void)removeAllActionsWithTarget:(id)target;





- (void)registerUndoWithTarget:(id)target selector:(SEL)selector object:(id)anObject;



- (id)prepareWithInvocationTarget:(id)target;







- (NSString *)undoActionName;
- (NSString *)redoActionName;



- (void)setActionName:(NSString *)actionName;





- (NSString *)undoMenuItemTitle;
- (NSString *)redoMenuItemTitle;






- (NSString *)undoMenuTitleForUndoActionName:(NSString *)actionName;
- (NSString *)redoMenuTitleForUndoActionName:(NSString *)actionName;




@end

extern "C" NSString * const NSUndoManagerCheckpointNotification;




extern "C" NSString * const NSUndoManagerWillUndoChangeNotification;
extern "C" NSString * const NSUndoManagerWillRedoChangeNotification;

extern "C" NSString * const NSUndoManagerDidUndoChangeNotification;
extern "C" NSString * const NSUndoManagerDidRedoChangeNotification;

extern "C" NSString * const NSUndoManagerDidOpenUndoGroupNotification;
extern "C" NSString * const NSUndoManagerWillCloseUndoGroupNotification;
# 85 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURL.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLHandle.h" 1 3






@class NSURLHandle, NSMutableArray, NSMutableData, NSData, NSURL;


extern "C" NSString *NSHTTPPropertyStatusCodeKey;
extern "C" NSString *NSHTTPPropertyStatusReasonKey;
extern "C" NSString *NSHTTPPropertyServerHTTPVersionKey;
extern "C" NSString *NSHTTPPropertyRedirectionHeadersKey;
extern "C" NSString *NSHTTPPropertyErrorPageDataKey;

extern "C" NSString *NSHTTPPropertyHTTPProxy;
# 25 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLHandle.h" 3
extern "C" NSString *NSFTPPropertyUserLoginKey;
extern "C" NSString *NSFTPPropertyUserPasswordKey;
extern "C" NSString *NSFTPPropertyActiveTransferModeKey;
extern "C" NSString *NSFTPPropertyFileOffsetKey;







extern "C" NSString *NSFTPPropertyFTPProxy;




enum {
    NSURLHandleNotLoaded = 0,
    NSURLHandleLoadSucceeded,
    NSURLHandleLoadInProgress,
    NSURLHandleLoadFailed
};
typedef NSUInteger NSURLHandleStatus;

@protocol NSURLHandleClient
- (void)URLHandle:(NSURLHandle *)sender resourceDataDidBecomeAvailable:(NSData *)newBytes;
- (void)URLHandleResourceDidBeginLoading:(NSURLHandle *)sender;
- (void)URLHandleResourceDidFinishLoading:(NSURLHandle *)sender;
- (void)URLHandleResourceDidCancelLoading:(NSURLHandle *)sender;
- (void)URLHandle:(NSURLHandle *)sender resourceDidFailLoadingWithReason:(NSString *)reason;
@end

@interface NSURLHandle:NSObject
{
    NSMutableArray *_clients;
    id _data;
    NSURLHandleStatus _status;
    NSInteger _reserved;
}

+ (void)registerURLHandleClass:(Class)anURLHandleSubclass;
+ (Class)URLHandleClassForURL:(NSURL *)anURL;

- (NSURLHandleStatus)status;
- (NSString *)failureReason;

- (void)addClient:(id <NSURLHandleClient>)client;
- (void)removeClient:(id <NSURLHandleClient>)client;

- (void)loadInBackground;
- (void)cancelLoadInBackground;

- (NSData *)resourceData;
- (NSData *)availableResourceData;


- (long long) expectedResourceDataSize;


- (void)flushCachedData;


- (void)backgroundLoadDidFailWithReason:(NSString *)reason;
- (void)didLoadBytes:(NSData *)newBytes loadComplete:(BOOL)yorn;


+ (BOOL)canInitWithURL:(NSURL *)anURL;
+ (NSURLHandle *)cachedHandleForURL:(NSURL *)anURL;
- initWithURL:(NSURL *)anURL cached:(BOOL)willCache;

- (id)propertyForKey:(NSString *)propertyKey;
- (id)propertyForKeyIfAvailable:(NSString *)propertyKey;
- (BOOL)writeProperty:(id)propertyValue forKey:(NSString *)propertyKey;
- (BOOL)writeData:(NSData *)data;

- (NSData *)loadInForeground;
- (void)beginLoadInBackground;
- (void)endLoadInBackground;

@end
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSURL.h" 2 3


@class NSNumber, NSData, NSDictionary;


extern "C" NSString *NSURLFileScheme;

@interface NSURL: NSObject <NSCoding, NSCopying, NSURLHandleClient>
{
    NSString *_urlString;
    NSURL *_baseURL;
    void *_clients;
    void *_reserved;
}


- initWithScheme:(NSString *)scheme host:(NSString *)host path:(NSString *)path;
- initFileURLWithPath:(NSString *)path isDirectory:(BOOL)isDir;
- initFileURLWithPath:(NSString *)path;

+ (id)fileURLWithPath:(NSString *)path isDirectory:(BOOL) isDir;
+ (id)fileURLWithPath:(NSString *)path;


- initWithString:(NSString *)URLString;
- initWithString:(NSString *)URLString relativeToURL:(NSURL *)baseURL;
+ (id)URLWithString:(NSString *)URLString;
+ (id)URLWithString:(NSString *)URLString relativeToURL:(NSURL *)baseURL;

- (NSString *)absoluteString;
- (NSString *)relativeString;
- (NSURL *)baseURL;
- (NSURL *)absoluteURL;


- (NSString *)scheme;
- (NSString *)resourceSpecifier;


- (NSString *)host;
- (NSNumber *)port;
- (NSString *)user;
- (NSString *)password;
- (NSString *)path;
- (NSString *)fragment;
- (NSString *)parameterString;
- (NSString *)query;
- (NSString *)relativePath;

- (BOOL)isFileURL;

- (NSURL *)standardizedURL;
@end

@interface NSObject(NSURLClient)
- (void)URL:(NSURL *)sender resourceDataDidBecomeAvailable:(NSData *)newBytes;
- (void)URLResourceDidFinishLoading:(NSURL *)sender;
- (void)URLResourceDidCancelLoading:(NSURL *)sender;
- (void)URL:(NSURL *)sender resourceDidFailLoadingWithReason:(NSString *)reason;
@end


@interface NSString (NSURLUtilities)


- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc;


- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)enc;

@end




@interface NSURL (NSURLLoading)
- (NSData *)resourceDataUsingCache:(BOOL)shouldUseCache;
- (void)loadResourceDataNotifyingClient:(id)client usingCache:(BOOL)shouldUseCache;
- (id)propertyForKey:(NSString *)propertyKey;


- (BOOL)setResourceData:(NSData *)data;
- (BOOL)setProperty:(id)property forKey:(NSString *)propertyKey;

- (NSURLHandle *)URLHandleUsingCache:(BOOL)shouldUseCache;

@end
# 86 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSUserDefaults.h" 1 3






@class NSArray, NSData, NSDictionary, NSMutableDictionary, NSString;

extern "C" NSString * const NSGlobalDomain;
extern "C" NSString * const NSArgumentDomain;
extern "C" NSString * const NSRegistrationDomain;

@interface NSUserDefaults : NSObject {
@private
    void *_preferences;
    NSMutableDictionary *_temp;
    NSString *_reserved;
    void *_reserved2;
    void *_reserved3;
}

+ (NSUserDefaults *)standardUserDefaults;
+ (void)resetStandardUserDefaults;

- (id)init;
- (id)initWithUser:(NSString *)username;

- (id)objectForKey:(NSString *)defaultName;
- (void)setObject:(id)value forKey:(NSString *)defaultName;
- (void)removeObjectForKey:(NSString *)defaultName;

- (NSString *)stringForKey:(NSString *)defaultName;
- (NSArray *)arrayForKey:(NSString *)defaultName;
- (NSDictionary *)dictionaryForKey:(NSString *)defaultName;
- (NSData *)dataForKey:(NSString *)defaultName;
- (NSArray *)stringArrayForKey:(NSString *)defaultName;
- (NSInteger)integerForKey:(NSString *)defaultName;
- (float)floatForKey:(NSString *)defaultName;
- (BOOL)boolForKey:(NSString *)defaultName;

- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;
- (void)setFloat:(float)value forKey:(NSString *)defaultName;
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;

- (void)registerDefaults:(NSDictionary *)registrationDictionary;

- (void)addSuiteNamed:(NSString *)suiteName;
- (void)removeSuiteNamed:(NSString *)suiteName;

- (NSDictionary *)dictionaryRepresentation;

- (NSArray *)volatileDomainNames;
- (NSDictionary *)volatileDomainForName:(NSString *)domainName;
- (void)setVolatileDomain:(NSDictionary *)domain forName:(NSString *)domainName;
- (void)removeVolatileDomainForName:(NSString *)domainName;

- (NSArray *)persistentDomainNames;
- (NSDictionary *)persistentDomainForName:(NSString *)domainName;
- (void)setPersistentDomain:(NSDictionary *)domain forName:(NSString *)domainName;
- (void)removePersistentDomainForName:(NSString *)domainName;

- (BOOL)synchronize;


- (BOOL)objectIsForcedForKey:(NSString *)key;
- (BOOL)objectIsForcedForKey:(NSString *)key inDomain:(NSString *)domain;



@end

extern "C" NSString * const NSUserDefaultsDidChangeNotification;

extern "C" NSString * const NSWeekDayNameArray ;
extern "C" NSString * const NSShortWeekDayNameArray ;
extern "C" NSString * const NSMonthNameArray ;
extern "C" NSString * const NSShortMonthNameArray ;
extern "C" NSString * const NSTimeFormatString ;
extern "C" NSString * const NSDateFormatString ;
extern "C" NSString * const NSTimeDateFormatString ;
extern "C" NSString * const NSShortTimeDateFormatString ;
extern "C" NSString * const NSCurrencySymbol ;
extern "C" NSString * const NSDecimalSeparator ;
extern "C" NSString * const NSThousandsSeparator ;
extern "C" NSString * const NSDecimalDigits ;
extern "C" NSString * const NSAMPMDesignation ;
extern "C" NSString * const NSHourNameDesignations ;
extern "C" NSString * const NSYearMonthWeekDesignations ;
extern "C" NSString * const NSEarlierTimeDesignations ;
extern "C" NSString * const NSLaterTimeDesignations ;
extern "C" NSString * const NSThisDayDesignations ;
extern "C" NSString * const NSNextDayDesignations ;
extern "C" NSString * const NSNextNextDayDesignations ;
extern "C" NSString * const NSPriorDayDesignations ;
extern "C" NSString * const NSDateTimeOrdering ;
extern "C" NSString * const NSInternationalCurrencyString ;
extern "C" NSString * const NSShortDateFormatString ;
extern "C" NSString * const NSPositiveCurrencyFormatString ;
extern "C" NSString * const NSNegativeCurrencyFormatString ;
# 88 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSValueTransformer.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSValueTransformer.h" 3
@class NSArray, NSString;

extern "C" NSString * const NSNegateBooleanTransformerName ;
extern "C" NSString * const NSIsNilTransformerName ;
extern "C" NSString * const NSIsNotNilTransformerName ;
extern "C" NSString * const NSUnarchiveFromDataTransformerName ;

@interface NSValueTransformer : NSObject {
}


+ (void)setValueTransformer:(NSValueTransformer *)transformer forName:(NSString *)name;
+ (NSValueTransformer *)valueTransformerForName:(NSString *)name;
+ (NSArray *)valueTransformerNames;


+ (Class)transformedValueClass;
+ (BOOL)allowsReverseTransformation;

- (id)transformedValue:(id)value;
- (id)reverseTransformedValue:(id)value;

@end
# 90 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDTD.h" 1 3




# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLNode.h" 1 3





# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLNodeOptions.h" 1 3
# 38 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLNodeOptions.h" 3
enum {
    NSXMLNodeOptionsNone = 0,


    NSXMLNodeIsCDATA = 1 << 0,
    NSXMLNodeExpandEmptyElement = 1 << 1,
    NSXMLNodeCompactEmptyElement = 1 << 2,
    NSXMLNodeUseSingleQuotes = 1 << 3,
    NSXMLNodeUseDoubleQuotes = 1 << 4,


    NSXMLDocumentTidyHTML = 1 << 9,
    NSXMLDocumentTidyXML = 1 << 10,


    NSXMLDocumentValidate = 1 << 13,


    NSXMLDocumentXInclude = 1 << 16,


    NSXMLNodePrettyPrint = 1 << 17,
    NSXMLDocumentIncludeContentTypeDeclaration = 1 << 18,


    NSXMLNodePreserveNamespaceOrder = 1 << 20,
    NSXMLNodePreserveAttributeOrder = 1 << 21,
    NSXMLNodePreserveEntities = 1 << 22,
    NSXMLNodePreservePrefixes = 1 << 23,
    NSXMLNodePreserveCDATA = 1 << 24,
    NSXMLNodePreserveWhitespace = 1 << 25,
    NSXMLNodePreserveDTD = 1 << 26,
    NSXMLNodePreserveCharacterReferences = 1 << 27,
    NSXMLNodePreserveEmptyElements =
            (NSXMLNodeExpandEmptyElement | NSXMLNodeCompactEmptyElement),
    NSXMLNodePreserveQuotes =
            (NSXMLNodeUseSingleQuotes | NSXMLNodeUseDoubleQuotes),
    NSXMLNodePreserveAll = (
            NSXMLNodePreserveNamespaceOrder |
            NSXMLNodePreserveAttributeOrder |
            NSXMLNodePreserveEntities |
            NSXMLNodePreservePrefixes |
            NSXMLNodePreserveCDATA |
            NSXMLNodePreserveEmptyElements |
            NSXMLNodePreserveQuotes |
            NSXMLNodePreserveWhitespace |
            NSXMLNodePreserveDTD |
            NSXMLNodePreserveCharacterReferences |
            0xFFF00000)
};
# 7 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLNode.h" 2 3



@class NSArray, NSDictionary, NSError, NSString, NSURL;
@class NSXMLElement, NSXMLDocument;




enum {
 NSXMLInvalidKind = 0,
 NSXMLDocumentKind,
 NSXMLElementKind,
 NSXMLAttributeKind,
 NSXMLNamespaceKind,
 NSXMLProcessingInstructionKind,
 NSXMLCommentKind,
 NSXMLTextKind,
 NSXMLDTDKind,
 NSXMLEntityDeclarationKind,
 NSXMLAttributeDeclarationKind,
 NSXMLElementDeclarationKind,
 NSXMLNotationDeclarationKind
};
typedef NSUInteger NSXMLNodeKind;
# 54 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLNode.h" 3
@interface NSXMLNode : NSObject <NSCopying> {
@protected
 NSXMLNodeKind _kind;
 NSXMLNode *_parent;
 NSUInteger _index;
 id _objectValue;
}





- (id)initWithKind:(NSXMLNodeKind)kind;





- (id)initWithKind:(NSXMLNodeKind)kind options:(NSUInteger)options;





+ (id)document;






+ (id)documentWithRootElement:(NSXMLElement *)element;





+ (id)elementWithName:(NSString *)name;





+ (id)elementWithName:(NSString *)name URI:(NSString *)URI;





+ (id)elementWithName:(NSString *)name stringValue:(NSString *)string;





+ (id)elementWithName:(NSString *)name children:(NSArray *)children attributes:(NSArray *)attributes;





+ (id)attributeWithName:(NSString *)name stringValue:(NSString *)stringValue;





+ (id)attributeWithName:(NSString *)name URI:(NSString *)URI stringValue:(NSString *)stringValue;





+ (id)namespaceWithName:(NSString *)name stringValue:(NSString *)stringValue;





+ (id)processingInstructionWithName:(NSString *)name stringValue:(NSString *)stringValue;





+ (id)commentWithStringValue:(NSString *)stringValue;





+ (id)textWithStringValue:(NSString *)stringValue;





+ (id)DTDNodeWithXMLString:(NSString *)string;

#pragma mark --- Properties ---





- (NSXMLNodeKind)kind;





- (void)setName:(NSString *)name;





- (NSString *)name;





- (void)setObjectValue:(id)value;





- (id)objectValue;





- (void)setStringValue:(NSString *)string;





- (void)setStringValue:(NSString *)string resolvingEntities:(BOOL)resolve;





- (NSString *)stringValue;

#pragma mark --- Tree Navigation ---





- (NSUInteger)index;





- (NSUInteger)level;





- (NSXMLDocument *)rootDocument;





- (NSXMLNode *)parent;





- (NSUInteger)childCount;





- (NSArray *)children;





- (NSXMLNode *)childAtIndex:(NSUInteger)index;





- (NSXMLNode *)previousSibling;





- (NSXMLNode *)nextSibling;





- (NSXMLNode *)previousNode;





- (NSXMLNode *)nextNode;





- (void)detach;





- (NSString *)XPath;

#pragma mark --- QNames ---





- (NSString *)localName;





- (NSString *)prefix;





- (void)setURI:(NSString *)URI;





- (NSString *)URI;





+ (NSString *)localNameForName:(NSString *)name;





+ (NSString *)prefixForName:(NSString *)name;






+ (NSXMLNode *)predefinedNamespaceForPrefix:(NSString *)name;

#pragma mark --- Output ---





- (NSString *)description;





- (NSString *)XMLString;





- (NSString *)XMLStringWithOptions:(NSUInteger)options;





- (NSString *)canonicalXMLStringPreservingComments:(BOOL)comments;

#pragma mark --- XPath/XQuery ---






- (NSArray *)nodesForXPath:(NSString *)xpath error:(NSError **)error;






- (NSArray *)objectsForXQuery:(NSString *)xquery constants:(NSDictionary *)constants error:(NSError **)error;

- (NSArray *)objectsForXQuery:(NSString *)xquery error:(NSError **)error;
@end
# 6 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDTD.h" 2 3



@class NSData, NSMutableDictionary;
@class NSXMLDTDNode;





@interface NSXMLDTD : NSXMLNode {
@private
 NSString *_name;
 NSString *_publicID;
 NSString *_systemID;
 NSArray *_children;
 BOOL _childrenHaveMutated;
 uint8_t _padding3[3];
 NSMutableDictionary *_entities;
 NSMutableDictionary *_elements;
 NSMutableDictionary *_notations;
 NSMutableDictionary *_attributes;
 NSString *_original;
 BOOL _modified;
 uint8_t _padding2[3];
}

#pragma mark --- Properties ---

- (id)initWithContentsOfURL:(NSURL *)url options:(NSUInteger)mask error:(NSError **)error;
- (id)initWithData:(NSData *)data options:(NSUInteger)mask error:(NSError **)error;





- (void)setPublicID:(NSString *)publicID;





- (NSString *)publicID;





- (void)setSystemID:(NSString *)systemID;





- (NSString *)systemID;

#pragma mark --- Children ---





- (void)insertChild:(NSXMLNode *)child atIndex:(NSUInteger)index;





- (void)insertChildren:(NSArray *)children atIndex:(NSUInteger)index;





- (void)removeChildAtIndex:(NSUInteger)index;





- (void)setChildren:(NSArray *)children;





- (void)addChild:(NSXMLNode *)child;





- (void)replaceChildAtIndex:(NSUInteger)index withNode:(NSXMLNode *)node;

#pragma mark --- Accessors ---





- (NSXMLDTDNode *)entityDeclarationForName:(NSString *)name;





- (NSXMLDTDNode *)notationDeclarationForName:(NSString *)name;





- (NSXMLDTDNode *)elementDeclarationForName:(NSString *)name;





- (NSXMLDTDNode *)attributeDeclarationForName:(NSString *)name elementName:(NSString *)elementName;







+ (NSXMLDTDNode *)predefinedEntityDeclarationForName:(NSString *)name;
@end
# 91 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDTDNode.h" 1 3
# 13 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDTDNode.h" 3
enum {
 NSXMLEntityGeneralKind = 1,
 NSXMLEntityParsedKind,
 NSXMLEntityUnparsedKind,
 NSXMLEntityParameterKind,
 NSXMLEntityPredefined,

 NSXMLAttributeCDATAKind,
 NSXMLAttributeIDKind,
 NSXMLAttributeIDRefKind,
 NSXMLAttributeIDRefsKind,
 NSXMLAttributeEntityKind,
 NSXMLAttributeEntitiesKind,
 NSXMLAttributeNMTokenKind,
 NSXMLAttributeNMTokensKind,
 NSXMLAttributeEnumerationKind,
 NSXMLAttributeNotationKind,

 NSXMLElementDeclarationUndefinedKind,
 NSXMLElementDeclarationEmptyKind,
 NSXMLElementDeclarationAnyKind,
 NSXMLElementDeclarationMixedKind,
 NSXMLElementDeclarationElementKind
};
typedef NSUInteger NSXMLDTDNodeKind;
# 48 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDTDNode.h" 3
@interface NSXMLDTDNode : NSXMLNode {
@protected
 NSXMLDTDNodeKind _DTDKind;
 NSString *_name;
 NSString *_notationName;
 NSString *_publicID;
 NSString *_systemID;
}





- (id)initWithXMLString:(NSString *)string;





- (void)setDTDKind:(NSXMLDTDNodeKind)kind;





- (NSXMLDTDNodeKind)DTDKind;





- (BOOL)isExternal;





- (void)setPublicID:(NSString *)publicID;





- (NSString *)publicID;





- (void)setSystemID:(NSString *)systemID;





- (NSString *)systemID;





- (void)setNotationName:(NSString *)notationName;





- (NSString *)notationName;

@end
# 92 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDocument.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDocument.h" 3
@class NSData;
@class NSXMLDTD;
# 41 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLDocument.h" 3
enum {
 NSXMLDocumentXMLKind = 0,
 NSXMLDocumentXHTMLKind,
 NSXMLDocumentHTMLKind,
 NSXMLDocumentTextKind
};
typedef NSUInteger NSXMLDocumentContentKind;






@interface NSXMLDocument : NSXMLNode {
@protected
 NSString *_encoding;
 NSString *_version;
 NSXMLDTD *_docType;
 NSArray *_children;
 BOOL _childrenHaveMutated;
 BOOL _standalone;
 uint8_t _padding3[2];
 NSXMLElement *_rootElement;
 NSString *_URI;
 NSString *_MIMEType;
 NSUInteger _fidelityMask;
 NSXMLDocumentContentKind _contentKind;
}





- (id)initWithXMLString:(NSString *)string options:(NSUInteger)mask error:(NSError **)error;





- (id)initWithContentsOfURL:(NSURL *)url options:(NSUInteger)mask error:(NSError **)error;





- (id)initWithData:(NSData *)data options:(NSUInteger)mask error:(NSError **)error;





- (id)initWithRootElement:(NSXMLElement *)element;

#pragma mark --- Properties ---

+ (Class)replacementClassForClass:(Class)cls;





- (void)setCharacterEncoding:(NSString *)encoding;





- (NSString *)characterEncoding;





- (void)setVersion:(NSString *)version;





- (NSString *)version;





- (void)setStandalone:(BOOL)standalone;





- (BOOL)isStandalone;





- (void)setDocumentContentKind:(NSXMLDocumentContentKind)kind;





- (NSXMLDocumentContentKind)documentContentKind;





- (void)setMIMEType:(NSString *)MIMEType;





- (NSString *)MIMEType;





- (void)setDTD:(NSXMLDTD *)documentTypeDeclaration;





- (NSXMLDTD *)DTD;





- (void)setRootElement:(NSXMLNode *)root;





- (NSXMLElement *)rootElement;

#pragma mark --- Children ---





- (void)insertChild:(NSXMLNode *)child atIndex:(NSUInteger)index;





- (void)insertChildren:(NSArray *)children atIndex:(NSUInteger)index;





- (void)removeChildAtIndex:(NSUInteger)index;





- (void)setChildren:(NSArray *)children;





- (void)addChild:(NSXMLNode *)child;





- (void)replaceChildAtIndex:(NSUInteger)index withNode:(NSXMLNode *)node;

#pragma mark --- Output ---





- (NSData *)XMLData;





- (NSData *)XMLDataWithOptions:(NSUInteger)options;

#pragma mark --- XSLT ---





- (id)objectByApplyingXSLT:(NSData *)xslt arguments:(NSDictionary *)arguments error:(NSError **)error;





- (id)objectByApplyingXSLTString:(NSString *)xslt arguments:(NSDictionary *)arguments error:(NSError **)error;





- (id)objectByApplyingXSLTAtURL:(NSURL *)xsltURL arguments:(NSDictionary *)argument error:(NSError **)error;

#pragma mark --- Validation ---

- (BOOL)validateAndReturnError:(NSError **)error;

@end
# 93 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLElement.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLElement.h" 3
@class NSDictionary, NSMutableArray, NSEnumerator;






@interface NSXMLElement : NSXMLNode {
@protected
 NSString *_name;
 NSMutableArray *_attributes;
 NSMutableArray *_namespaces;
 NSArray *_children;
 BOOL _childrenHaveMutated;
 uint8_t _padding3[3];
 NSString *_URI;
 NSInteger _prefixIndex;
}





- (id)initWithName:(NSString *)name;





- (id)initWithName:(NSString *)name URI:(NSString *)URI;





- (id)initWithName:(NSString *)name stringValue:(NSString *)string;





- (id)initWithXMLString:(NSString *)string error:(NSError **)error;

#pragma mark --- Elements by name ---





- (NSArray *)elementsForName:(NSString *)name;





- (NSArray *)elementsForLocalName:(NSString *)localName URI:(NSString *)URI;

#pragma mark --- Attributes ---





- (void)addAttribute:(NSXMLNode *)attribute;





- (void)removeAttributeForName:(NSString *)name;





- (void)setAttributes:(NSArray *)attributes;





- (void)setAttributesAsDictionary:(NSDictionary *)attributes;





- (NSArray *)attributes;





- (NSXMLNode *)attributeForName:(NSString *)name;





- (NSXMLNode *)attributeForLocalName:(NSString *)localName URI:(NSString *)URI;

#pragma mark --- Namespaces ---





- (void)addNamespace:(NSXMLNode *)aNamespace;





- (void)removeNamespaceForPrefix:(NSString *)name;





- (void)setNamespaces:(NSArray *)namespaces;





- (NSArray *)namespaces;





- (NSXMLNode *)namespaceForPrefix:(NSString *)name;





- (NSXMLNode *)resolveNamespaceForName:(NSString *)name;





- (NSString *)resolvePrefixForNamespaceURI:(NSString *)namespaceURI;

#pragma mark --- Children ---





- (void)insertChild:(NSXMLNode *)child atIndex:(NSUInteger)index;





- (void)insertChildren:(NSArray *)children atIndex:(NSUInteger)index;





- (void)removeChildAtIndex:(NSUInteger)index;





- (void)setChildren:(NSArray *)children;





- (void)addChild:(NSXMLNode *)child;





- (void)replaceChildAtIndex:(NSUInteger)index withNode:(NSXMLNode *)node;





- (void)normalizeAdjacentTextNodesPreservingCDATA:(BOOL)preserve;

@end
# 94 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3


# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLParser.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLParser.h" 3
@class NSData, NSDictionary, NSError, NSString, NSURL;

@interface NSXMLParser : NSObject {
@private
    void * _parser;
    id _delegate;
    id _reserved1;
    id _reserved2;
    id _reserved3;
}
- (id)initWithContentsOfURL:(NSURL *)url;
- (id)initWithData:(NSData *)data;


- (id)delegate;
- (void)setDelegate:(id)delegate;

- (void)setShouldProcessNamespaces:(BOOL)shouldProcessNamespaces;
- (void)setShouldReportNamespacePrefixes:(BOOL)shouldReportNamespacePrefixes;
- (void)setShouldResolveExternalEntities:(BOOL)shouldResolveExternalEntities;

- (BOOL)shouldProcessNamespaces;
- (BOOL)shouldReportNamespacePrefixes;
- (BOOL)shouldResolveExternalEntities;

- (BOOL)parse;
- (void)abortParsing;

- (NSError *)parserError;
@end


@interface NSXMLParser (NSXMLParserLocatorAdditions)
- (NSString *)publicID;
- (NSString *)systemID;
- (NSInteger)lineNumber;
- (NSInteger)columnNumber;
@end
# 65 "/System/Library/Frameworks/Foundation.framework/Headers/NSXMLParser.h" 3
@interface NSObject (NSXMLParserDelegateEventAdditions)

- (void)parserDidStartDocument:(NSXMLParser *)parser;

- (void)parserDidEndDocument:(NSXMLParser *)parser;



- (void)parser:(NSXMLParser *)parser foundNotationDeclarationWithName:(NSString *)name publicID:(NSString *)publicID systemID:(NSString *)systemID;

- (void)parser:(NSXMLParser *)parser foundUnparsedEntityDeclarationWithName:(NSString *)name publicID:(NSString *)publicID systemID:(NSString *)systemID notationName:(NSString *)notationName;

- (void)parser:(NSXMLParser *)parser foundAttributeDeclarationWithName:(NSString *)attributeName forElement:(NSString *)elementName type:(NSString *)type defaultValue:(NSString *)defaultValue;

- (void)parser:(NSXMLParser *)parser foundElementDeclarationWithName:(NSString *)elementName model:(NSString *)model;

- (void)parser:(NSXMLParser *)parser foundInternalEntityDeclarationWithName:(NSString *)name value:(NSString *)value;

- (void)parser:(NSXMLParser *)parser foundExternalEntityDeclarationWithName:(NSString *)name publicID:(NSString *)publicID systemID:(NSString *)systemID;

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;







- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;


- (void)parser:(NSXMLParser *)parser didStartMappingPrefix:(NSString *)prefix toURI:(NSString *)namespaceURI;




- (void)parser:(NSXMLParser *)parser didEndMappingPrefix:(NSString *)prefix;


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;


- (void)parser:(NSXMLParser *)parser foundIgnorableWhitespace:(NSString *)whitespaceString;


- (void)parser:(NSXMLParser *)parser foundProcessingInstructionWithTarget:(NSString *)target data:(NSString *)data;


- (void)parser:(NSXMLParser *)parser foundComment:(NSString *)comment;


- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock;


- (NSData *)parser:(NSXMLParser *)parser resolveExternalEntityName:(NSString *)name systemID:(NSString *)systemID;


- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError;


- (void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validationError;

@end

extern "C" NSString * const NSXMLParserErrorDomain ;


enum {
    NSXMLParserInternalError = 1,
    NSXMLParserOutOfMemoryError = 2,
    NSXMLParserDocumentStartError = 3,
    NSXMLParserEmptyDocumentError = 4,
    NSXMLParserPrematureDocumentEndError = 5,
    NSXMLParserInvalidHexCharacterRefError = 6,
    NSXMLParserInvalidDecimalCharacterRefError = 7,
    NSXMLParserInvalidCharacterRefError = 8,
    NSXMLParserInvalidCharacterError = 9,
    NSXMLParserCharacterRefAtEOFError = 10,
    NSXMLParserCharacterRefInPrologError = 11,
    NSXMLParserCharacterRefInEpilogError = 12,
    NSXMLParserCharacterRefInDTDError = 13,
    NSXMLParserEntityRefAtEOFError = 14,
    NSXMLParserEntityRefInPrologError = 15,
    NSXMLParserEntityRefInEpilogError = 16,
    NSXMLParserEntityRefInDTDError = 17,
    NSXMLParserParsedEntityRefAtEOFError = 18,
    NSXMLParserParsedEntityRefInPrologError = 19,
    NSXMLParserParsedEntityRefInEpilogError = 20,
    NSXMLParserParsedEntityRefInInternalSubsetError = 21,
    NSXMLParserEntityReferenceWithoutNameError = 22,
    NSXMLParserEntityReferenceMissingSemiError = 23,
    NSXMLParserParsedEntityRefNoNameError = 24,
    NSXMLParserParsedEntityRefMissingSemiError = 25,
    NSXMLParserUndeclaredEntityError = 26,
    NSXMLParserUnparsedEntityError = 28,
    NSXMLParserEntityIsExternalError = 29,
    NSXMLParserEntityIsParameterError = 30,
    NSXMLParserUnknownEncodingError = 31,
    NSXMLParserEncodingNotSupportedError = 32,
    NSXMLParserStringNotStartedError = 33,
    NSXMLParserStringNotClosedError = 34,
    NSXMLParserNamespaceDeclarationError = 35,
    NSXMLParserEntityNotStartedError = 36,
    NSXMLParserEntityNotFinishedError = 37,
    NSXMLParserLessThanSymbolInAttributeError = 38,
    NSXMLParserAttributeNotStartedError = 39,
    NSXMLParserAttributeNotFinishedError = 40,
    NSXMLParserAttributeHasNoValueError = 41,
    NSXMLParserAttributeRedefinedError = 42,
    NSXMLParserLiteralNotStartedError = 43,
    NSXMLParserLiteralNotFinishedError = 44,
    NSXMLParserCommentNotFinishedError = 45,
    NSXMLParserProcessingInstructionNotStartedError = 46,
    NSXMLParserProcessingInstructionNotFinishedError = 47,
    NSXMLParserNotationNotStartedError = 48,
    NSXMLParserNotationNotFinishedError = 49,
    NSXMLParserAttributeListNotStartedError = 50,
    NSXMLParserAttributeListNotFinishedError = 51,
    NSXMLParserMixedContentDeclNotStartedError = 52,
    NSXMLParserMixedContentDeclNotFinishedError = 53,
    NSXMLParserElementContentDeclNotStartedError = 54,
    NSXMLParserElementContentDeclNotFinishedError = 55,
    NSXMLParserXMLDeclNotStartedError = 56,
    NSXMLParserXMLDeclNotFinishedError = 57,
    NSXMLParserConditionalSectionNotStartedError = 58,
    NSXMLParserConditionalSectionNotFinishedError = 59,
    NSXMLParserExternalSubsetNotFinishedError = 60,
    NSXMLParserDOCTYPEDeclNotFinishedError = 61,
    NSXMLParserMisplacedCDATAEndStringError = 62,
    NSXMLParserCDATANotFinishedError = 63,
    NSXMLParserMisplacedXMLDeclarationError = 64,
    NSXMLParserSpaceRequiredError = 65,
    NSXMLParserSeparatorRequiredError = 66,
    NSXMLParserNMTOKENRequiredError = 67,
    NSXMLParserNAMERequiredError = 68,
    NSXMLParserPCDATARequiredError = 69,
    NSXMLParserURIRequiredError = 70,
    NSXMLParserPublicIdentifierRequiredError = 71,
    NSXMLParserLTRequiredError = 72,
    NSXMLParserGTRequiredError = 73,
    NSXMLParserLTSlashRequiredError = 74,
    NSXMLParserEqualExpectedError = 75,
    NSXMLParserTagNameMismatchError = 76,
    NSXMLParserUnfinishedTagError = 77,
    NSXMLParserStandaloneValueError = 78,
    NSXMLParserInvalidEncodingNameError = 79,
    NSXMLParserCommentContainsDoubleHyphenError = 80,
    NSXMLParserInvalidEncodingError = 81,
    NSXMLParserExternalStandaloneEntityError = 82,
    NSXMLParserInvalidConditionalSectionError = 83,
    NSXMLParserEntityValueRequiredError = 84,
    NSXMLParserNotWellBalancedError = 85,
    NSXMLParserExtraContentError = 86,
    NSXMLParserInvalidCharacterInEntityError = 87,
    NSXMLParserParsedEntityRefInInternalError = 88,
    NSXMLParserEntityRefLoopError = 89,
    NSXMLParserEntityBoundaryError = 90,
    NSXMLParserInvalidURIError = 91,
    NSXMLParserURIFragmentError = 92,
    NSXMLParserNoDTDError = 94,
    NSXMLParserDelegateAbortedParseError = 512
};
typedef NSInteger NSXMLParserError;
# 97 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3


# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSExpression.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSExpression.h" 3
@class NSString;
@class NSArray;
@class NSMutableDictionary;
@class NSPredicate;



enum {
    NSConstantValueExpressionType = 0,
    NSEvaluatedObjectExpressionType,
    NSVariableExpressionType,
    NSKeyPathExpressionType,
    NSFunctionExpressionType

    ,
    NSUnionSetExpressionType,
    NSIntersectSetExpressionType,
    NSMinusSetExpressionType,
    NSSubqueryExpressionType = 13,
    NSAggregateExpressionType

};
typedef NSUInteger NSExpressionType;

@interface NSExpression : NSObject <NSCoding, NSCopying> {
    @private
    void *_reserved;
    NSExpressionType _expressionType;
}

+ (NSExpression *)expressionForConstantValue:(id)obj;
+ (NSExpression *)expressionForEvaluatedObject;
+ (NSExpression *)expressionForVariable:(NSString *)string;
+ (NSExpression *)expressionForKeyPath:(NSString *)keyPath;
+ (NSExpression *)expressionForFunction:(NSString *)name arguments:(NSArray *)parameters;


+ (NSExpression *)expressionForAggregate:(NSArray *)subexpressions;
+ (NSExpression *)expressionForUnionSet:(NSExpression *)left with:(NSExpression *)right;
+ (NSExpression *)expressionForIntersectSet:(NSExpression *)left with:(NSExpression *)right;
+ (NSExpression *)expressionForMinusSet:(NSExpression *)left with:(NSExpression *)right;
+ (NSExpression *)expressionForSubquery:(NSExpression *)expression usingIteratorVariable:(NSString *)variable predicate:(id)predicate;
+ (NSExpression *)expressionForFunction:(NSExpression *)target selectorName:(NSString *)name arguments:(NSArray *)parameters;
# 64 "/System/Library/Frameworks/Foundation.framework/Headers/NSExpression.h" 3
- (id)initWithExpressionType:(NSExpressionType)type;


- (NSExpressionType)expressionType;
- (id)constantValue;
- (NSString *)keyPath;
- (NSString *)function;
- (NSString *)variable;
- (NSExpression *)operand;
- (NSArray *)arguments;


- (id)collection;
- (NSPredicate *)predicate;
- (NSExpression *)leftExpression;
- (NSExpression *)rightExpression;



- (id)expressionValueWithObject:(id)object context:(NSMutableDictionary *)context;
@end
# 100 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSPredicate.h" 1 3
# 13 "/System/Library/Frameworks/Foundation.framework/Headers/NSPredicate.h" 3
@interface NSPredicate : NSObject <NSCoding, NSCopying> {
    void *_reserved;
}


+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat argumentArray:(NSArray *)arguments;
+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat, ...;
+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat arguments:(va_list)argList;

+ (NSPredicate *)predicateWithValue:(BOOL)value;

- (NSString *)predicateFormat;

- (NSPredicate *)predicateWithSubstitutionVariables:(NSDictionary *)variables;

- (BOOL)evaluateWithObject:(id)object;


- (BOOL)evaluateWithObject:(id)object substitutionVariables:(NSDictionary *)bindings;


@end

@interface NSArray (NSPredicateSupport)
- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate;
@end

@interface NSMutableArray (NSPredicateSupport)
- (void)filterUsingPredicate:(NSPredicate *)predicate;
@end


@interface NSSet (NSPredicateSupport)
- (NSSet *)filteredSetUsingPredicate:(NSPredicate *)predicate;
@end

@interface NSMutableSet (NSPredicateSupport)
- (void)filterUsingPredicate:(NSPredicate *)predicate;
@end
# 101 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSComparisonPredicate.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSComparisonPredicate.h" 3
enum {
    NSCaseInsensitivePredicateOption = 0x01,
    NSDiacriticInsensitivePredicateOption = 0x02,
};


enum {
    NSDirectPredicateModifier = 0,
    NSAllPredicateModifier,
    NSAnyPredicateModifier
};
typedef NSUInteger NSComparisonPredicateModifier;



enum {
    NSLessThanPredicateOperatorType = 0,
    NSLessThanOrEqualToPredicateOperatorType,
    NSGreaterThanPredicateOperatorType,
    NSGreaterThanOrEqualToPredicateOperatorType,
    NSEqualToPredicateOperatorType,
    NSNotEqualToPredicateOperatorType,
    NSMatchesPredicateOperatorType,
    NSLikePredicateOperatorType,
    NSBeginsWithPredicateOperatorType,
    NSEndsWithPredicateOperatorType,
    NSInPredicateOperatorType,
    NSCustomSelectorPredicateOperatorType

    ,
    NSContainsPredicateOperatorType = 99,
    NSBetweenPredicateOperatorType

};
typedef NSUInteger NSPredicateOperatorType;

@class NSPredicateOperator;
@class NSExpression;



@interface NSComparisonPredicate : NSPredicate {
    @private
    void *_reserved2;
    NSPredicateOperator *_predicateOperator;
    NSExpression *_lhs;
    NSExpression *_rhs;
}

+ (NSPredicate *)predicateWithLeftExpression:(NSExpression *)lhs rightExpression:(NSExpression *)rhs modifier:(NSComparisonPredicateModifier)modifier type:(NSPredicateOperatorType)type options:(NSUInteger)options;
+ (NSPredicate *)predicateWithLeftExpression:(NSExpression *)lhs rightExpression:(NSExpression *)rhs customSelector:(SEL)selector;

- (id)initWithLeftExpression:(NSExpression *)lhs rightExpression:(NSExpression *)rhs modifier:(NSComparisonPredicateModifier)modifier type:(NSPredicateOperatorType)type options:(NSUInteger)options;
- (id)initWithLeftExpression:(NSExpression *)lhs rightExpression:(NSExpression *)rhs customSelector:(SEL)selector;

- (NSPredicateOperatorType)predicateOperatorType;
- (NSComparisonPredicateModifier)comparisonPredicateModifier;
- (NSExpression *)leftExpression;
- (NSExpression *)rightExpression;
- (SEL)customSelector;
- (NSUInteger)options;

@end
# 102 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSCompoundPredicate.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSCompoundPredicate.h" 3
@class NSArray;



enum {
    NSNotPredicateType = 0,
    NSAndPredicateType,
    NSOrPredicateType,
};
typedef NSUInteger NSCompoundPredicateType;

@interface NSCompoundPredicate : NSPredicate {
    @private
    void *_reserved2;
    NSUInteger _type;
    NSArray *_subpredicates;
}

- (id)initWithType:(NSCompoundPredicateType)type subpredicates:(NSArray *)subpredicates;

- (NSCompoundPredicateType)compoundPredicateType;
- (NSArray *)subpredicates;


+ (NSPredicate *)andPredicateWithSubpredicates:(NSArray *)subpredicates;
+ (NSPredicate *)orPredicateWithSubpredicates:(NSArray *)subpredicates;
+ (NSPredicate *)notPredicateWithSubpredicate:(NSPredicate *)predicate;
@end
# 103 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSAppleEventDescriptor.h" 1 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 1 3
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 1 3
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 3
#pragma pack(push, 2)


enum {
  kClippingCreator = 'drag',
  kClippingPictureType = 'clpp',
  kClippingTextType = 'clpt',
  kClippingSoundType = 'clps',
  kClippingUnknownType = 'clpu'
};



enum {
  kInternetLocationCreator = 'drag',
  kInternetLocationHTTP = 'ilht',
  kInternetLocationFTP = 'ilft',
  kInternetLocationFile = 'ilfi',
  kInternetLocationMail = 'ilma',
  kInternetLocationNNTP = 'ilnw',
  kInternetLocationAFP = 'ilaf',
  kInternetLocationAppleTalk = 'ilat',
  kInternetLocationNSL = 'ilns',
  kInternetLocationGeneric = 'ilge'
};



enum {
  kCustomIconResource = -16455
};






enum {
  kCustomBadgeResourceType = 'badg',
  kCustomBadgeResourceID = kCustomIconResource,
  kCustomBadgeResourceVersion = 0
};

struct CustomBadgeResource {
  SInt16 version;
  SInt16 customBadgeResourceID;

  OSType customBadgeType;
  OSType customBadgeCreator;
  OSType windowBadgeType;
  OSType windowBadgeCreator;

  OSType overrideType;
  OSType overrideCreator;
};
typedef struct CustomBadgeResource CustomBadgeResource;
typedef CustomBadgeResource * CustomBadgeResourcePtr;
typedef CustomBadgeResourcePtr * CustomBadgeResourceHandle;
# 100 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 3
enum {
  kRoutingResourceType = 'rout',
  kRoutingResourceID = 0
};

struct RoutingResourceEntry {
  OSType creator;
  OSType fileType;
  OSType targetFolder;
  OSType destinationFolder;
  OSType reservedField;
};
typedef struct RoutingResourceEntry RoutingResourceEntry;
typedef RoutingResourceEntry * RoutingResourcePtr;
typedef RoutingResourcePtr * RoutingResourceHandle;


enum {
  kContainerFolderAliasType = 'fdrp',
  kContainerTrashAliasType = 'trsh',
  kContainerHardDiskAliasType = 'hdsk',
  kContainerFloppyAliasType = 'flpy',
  kContainerServerAliasType = 'srvr',
  kApplicationAliasType = 'adrp',
  kContainerAliasType = 'drop',
  kDesktopPrinterAliasType = 'dtpa',
  kContainerCDROMAliasType = 'cddr',
  kApplicationCPAliasType = 'acdp',
  kApplicationDAAliasType = 'addp',
  kPackageAliasType = 'fpka',
  kAppPackageAliasType = 'fapa'
};


enum {
  kSystemFolderAliasType = 'fasy',
  kAppleMenuFolderAliasType = 'faam',
  kStartupFolderAliasType = 'fast',
  kPrintMonitorDocsFolderAliasType = 'fapn',
  kPreferencesFolderAliasType = 'fapf',
  kControlPanelFolderAliasType = 'fact',
  kExtensionFolderAliasType = 'faex'
};


enum {
  kExportedFolderAliasType = 'faet',
  kDropFolderAliasType = 'fadr',
  kSharedFolderAliasType = 'fash',
  kMountedFolderAliasType = 'famn'
};





enum {
  kIsOnDesk = 0x0001,
  kColor = 0x000E,

  kIsShared = 0x0040,



  kHasNoINITs = 0x0080,

  kHasBeenInited = 0x0100,





  kHasCustomIcon = 0x0400,
  kIsStationery = 0x0800,
  kNameLocked = 0x1000,
  kHasBundle = 0x2000,
  kIsInvisible = 0x4000,
  kIsAlias = 0x8000
};


enum {
  fOnDesk = kIsOnDesk,
  fHasBundle = kHasBundle,
  fInvisible = kIsInvisible
};


enum {
  fTrash = -3,
  fDesktop = -2,
  fDisk = 0
};
# 203 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 3
enum {
  kExtendedFlagsAreInvalid = 0x8000,
  kExtendedFlagHasCustomBadge = 0x0100,
  kExtendedFlagObjectIsBusy = 0x0080,
  kExtendedFlagHasRoutingInfo = 0x0004
};
# 218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 3
enum {
  kFirstMagicBusyFiletype = 'bzy ',
  kLastMagicBusyFiletype = 'bzy?'
};






enum {
  kMagicBusyCreationDate = 0x4F3AFDB0
};
# 241 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 3
struct FileInfo {
  OSType fileType;
  OSType fileCreator;
  UInt16 finderFlags;
  Point location;

  UInt16 reservedField;
};
typedef struct FileInfo FileInfo;
struct FolderInfo {
  Rect windowBounds;
  UInt16 finderFlags;
  Point location;

  UInt16 reservedField;
};
typedef struct FolderInfo FolderInfo;
struct ExtendedFileInfo {
  SInt16 reserved1[4];
  UInt16 extendedFinderFlags;
  SInt16 reserved2;
  SInt32 putAwayFolderID;
};
typedef struct ExtendedFileInfo ExtendedFileInfo;
struct ExtendedFolderInfo {
  Point scrollPosition;
  SInt32 reserved1;
  UInt16 extendedFinderFlags;
  SInt16 reserved2;
  SInt32 putAwayFolderID;
};
typedef struct ExtendedFolderInfo ExtendedFolderInfo;
# 285 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Finder.h" 3
struct FInfo {
  OSType fdType;
  OSType fdCreator;
  UInt16 fdFlags;
  Point fdLocation;

  SInt16 fdFldr;
};
typedef struct FInfo FInfo;







struct FXInfo {
  SInt16 fdIconID;
  SInt16 fdReserved[3];
  SInt8 fdScript;
  SInt8 fdXFlags;
  SInt16 fdComment;
  SInt32 fdPutAway;
};
typedef struct FXInfo FXInfo;






struct DInfo {
  Rect frRect;
  UInt16 frFlags;
  Point frLocation;

  SInt16 frView;
};
typedef struct DInfo DInfo;







struct DXInfo {
  Point frScroll;
  SInt32 frOpenChain;
  SInt8 frScript;
  SInt8 frXFlags;
  SInt16 frComment;
  SInt32 frPutAway;
};
typedef struct DXInfo DXInfo;


#pragma pack(pop)
# 34 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern "C" {
# 130 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
FixRatio(
  short numer,
  short denom) ;
# 144 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
FixMul(
  Fixed a,
  Fixed b) ;
# 158 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern short
FixRound(Fixed x) ;
# 170 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
Fix2Frac(Fixed x) ;
# 182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern SInt32
Fix2Long(Fixed x) ;
# 194 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
Long2Fix(SInt32 x) ;
# 206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
Frac2Fix(Fract x) ;
# 218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
FracMul(
  Fract x,
  Fract y) ;
# 232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
FixDiv(
  Fixed x,
  Fixed y) ;
# 246 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
FracDiv(
  Fract x,
  Fract y) ;
# 260 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
FracSqrt(Fract x) ;
# 272 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
FracSin(Fixed x) ;
# 284 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
FracCos(Fixed x) ;
# 296 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
FixATan2(
  SInt32 x,
  SInt32 y) ;
# 319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern double
Frac2X(Fract x) ;
# 331 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern double
Fix2X(Fixed x) ;
# 343 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fixed
X2Fix(double x) ;
# 355 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern Fract
X2Frac(double x) ;
# 379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern short
WideCompare(
  const wide * target,
  const wide * source) ;
# 408 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideAdd(
  wide * target,
  const wide * source) ;
# 437 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideSubtract(
  wide * target,
  const wide * source) ;
# 462 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideNegate(wide * target) ;
# 487 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideShift(
  wide * target,
  SInt32 shift) ;
# 513 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern UInt32
WideSquareRoot(const wide * source) ;
# 541 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideMultiply(
  SInt32 multiplicand,
  SInt32 multiplier,
  wide * target) ;
# 580 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern SInt32
WideDivide(
  const wide * dividend,
  SInt32 divisor,
  SInt32 * remainder) ;
# 615 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideWideDivide(
  wide * dividend,
  SInt32 divisor,
  SInt32 * remainder) ;
# 646 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern wide *
WideBitShift(
  wide * target,
  SInt32 shift) ;
# 660 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/FixMath.h" 3
extern UnsignedFixed
UnsignedFixedMulDiv(
  UnsignedFixed value,
  UnsignedFixed multiplier,
  UnsignedFixed divisor) ;





}
# 38 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 1 3
# 24 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/IntlResources.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/IntlResources.h" 3
#pragma pack(push, 2)

enum {

  itlcShowIcon = 7,
  itlcDualCaret = 6,

  itlcSysDirection = 15
};

enum {

  itlcDisableKeyScriptSync = 3
};

enum {

  itlcDisableKeyScriptSyncMask = 1 << itlcDisableKeyScriptSync
};


enum {
  tokLeftQuote = 1,
  tokRightQuote = 2,
  tokLeadPlacer = 3,
  tokLeader = 4,
  tokNonLeader = 5,
  tokZeroLead = 6,
  tokPercent = 7,
  tokPlusSign = 8,
  tokMinusSign = 9,
  tokThousands = 10,
  tokReserved = 11,
  tokSeparator = 12,
  tokEscape = 13,
  tokDecPoint = 14,
  tokEPlus = 15,
  tokEMinus = 16,
  tokMaxSymbols = 31,
  curNumberPartsVersion = 1
};

enum {
  currSymLead = 16,
  currNegSym = 32,
  currTrailingZ = 64,
  currLeadingZ = 128
};

enum {
  mdy = 0,
  dmy = 1,
  ymd = 2,
  myd = 3,
  dym = 4,
  ydm = 5
};

typedef SInt8 DateOrders;
enum {
  timeCycle24 = 0,
  timeCycleZero = 1,
  timeCycle12 = 255,
  zeroCycle = 1,
  longDay = 0,
  longWeek = 1,
  longMonth = 2,
  longYear = 3,
  supDay = 1,
  supWeek = 2,
  supMonth = 4,
  supYear = 8,
  dayLdingZ = 32,
  mntLdingZ = 64,
  century = 128,
  secLeadingZ = 32,
  minLeadingZ = 64,
  hrLeadingZ = 128
};


struct OffPair {
  short offFirst;
  short offSecond;
};
typedef struct OffPair OffPair;
typedef OffPair OffsetTable[3];
struct Intl0Rec {
  char decimalPt;
  char thousSep;
  char listSep;
  char currSym1;
  char currSym2;
  char currSym3;
  UInt8 currFmt;
  UInt8 dateOrder;
  UInt8 shrtDateFmt;
  char dateSep;
  UInt8 timeCycle;
  UInt8 timeFmt;
  char mornStr[4];
  char eveStr[4];
  char timeSep;
  char time1Suff;
  char time2Suff;
  char time3Suff;
  char time4Suff;
  char time5Suff;
  char time6Suff;
  char time7Suff;
  char time8Suff;
  UInt8 metricSys;
  short intl0Vers;
};
typedef struct Intl0Rec Intl0Rec;
typedef Intl0Rec * Intl0Ptr;
typedef Intl0Ptr * Intl0Hndl;
struct Intl1Rec {
  Str15 days[7];
  Str15 months[12];
  UInt8 suppressDay;
  UInt8 lngDateFmt;
  UInt8 dayLeading0;
  UInt8 abbrLen;
  char st0[4];
  char st1[4];
  char st2[4];
  char st3[4];
  char st4[4];
  short intl1Vers;
  short localRtn[1];
};
typedef struct Intl1Rec Intl1Rec;
typedef Intl1Rec * Intl1Ptr;
typedef Intl1Ptr * Intl1Hndl;

struct Itl1ExtRec {
  Intl1Rec base;
  short version;
  short format;
  short calendarCode;
  SInt32 extraDaysTableOffset;
  SInt32 extraDaysTableLength;
  SInt32 extraMonthsTableOffset;
  SInt32 extraMonthsTableLength;
  SInt32 abbrevDaysTableOffset;
  SInt32 abbrevDaysTableLength;
  SInt32 abbrevMonthsTableOffset;
  SInt32 abbrevMonthsTableLength;
  SInt32 extraSepsTableOffset;
  SInt32 extraSepsTableLength;
  short tables[1];
};
typedef struct Itl1ExtRec Itl1ExtRec;
struct UntokenTable {
  short len;
  short lastToken;
  short index[256];
};
typedef struct UntokenTable UntokenTable;
typedef UntokenTable * UntokenTablePtr;
typedef UntokenTablePtr * UntokenTableHandle;
# 220 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/IntlResources.h" 3
union WideChar {
  char a[2];
  short b;
};
typedef union WideChar WideChar;


struct WideCharArr {
  short size;
  WideChar data[10];
};
typedef struct WideCharArr WideCharArr;
struct NumberParts {
  short version;
  WideChar data[31];
  WideCharArr pePlus;
  WideCharArr peMinus;
  WideCharArr peMinusPlus;
  WideCharArr altNumTable;
  char reserved[20];
};
typedef struct NumberParts NumberParts;
typedef NumberParts * NumberPartsPtr;

struct Itl4Rec {
  short flags;
  SInt32 resourceType;
  short resourceNum;
  short version;
  SInt32 resHeader1;
  SInt32 resHeader2;
  short numTables;
  SInt32 mapOffset;
  SInt32 strOffset;
  SInt32 fetchOffset;
  SInt32 unTokenOffset;
  SInt32 defPartsOffset;
  SInt32 resOffset6;
  SInt32 resOffset7;
  SInt32 resOffset8;
};
typedef struct Itl4Rec Itl4Rec;
typedef Itl4Rec * Itl4Ptr;
typedef Itl4Ptr * Itl4Handle;

struct NItl4Rec {
  short flags;
  SInt32 resourceType;
  short resourceNum;
  short version;
  short format;
  short resHeader;
  SInt32 resHeader2;
  short numTables;
  SInt32 mapOffset;
  SInt32 strOffset;
  SInt32 fetchOffset;
  SInt32 unTokenOffset;
  SInt32 defPartsOffset;
  SInt32 whtSpListOffset;
  SInt32 resOffset7;
  SInt32 resOffset8;
  short resLength1;
  short resLength2;
  short resLength3;
  short unTokenLength;
  short defPartsLength;
  short whtSpListLength;
  short resLength7;
  short resLength8;
};
typedef struct NItl4Rec NItl4Rec;
typedef NItl4Rec * NItl4Ptr;
typedef NItl4Ptr * NItl4Handle;

struct TableDirectoryRecord {
  OSType tableSignature;
  UInt32 reserved;
  UInt32 tableStartOffset;
  UInt32 tableSize;
};
typedef struct TableDirectoryRecord TableDirectoryRecord;
struct Itl5Record {
  Fixed versionNumber;
  unsigned short numberOfTables;
  unsigned short reserved[3];
  TableDirectoryRecord tableDirectory[1];
};
typedef struct Itl5Record Itl5Record;
struct RuleBasedTrslRecord {
  short sourceType;
  short targetType;
  short formatNumber;
  short propertyFlag;
  short numberOfRules;
};
typedef struct RuleBasedTrslRecord RuleBasedTrslRecord;

struct ItlcRecord {
  short itlcSystem;
  short itlcReserved;
  SInt8 itlcFontForce;
  SInt8 itlcIntlForce;
  SInt8 itlcOldKybd;
  SInt8 itlcFlags;
  short itlcIconOffset;
  SInt8 itlcIconSide;
  SInt8 itlcIconRsvd;
  short itlcRegionCode;
  short itlcSysFlags;
  SInt8 itlcReserved4[32];
};
typedef struct ItlcRecord ItlcRecord;
struct ItlbRecord {
  short itlbNumber;
  short itlbDate;
  short itlbSort;
  short itlbFlags;
  short itlbToken;
  short itlbEncoding;
  short itlbLang;
  SInt8 itlbNumRep;
  SInt8 itlbDateRep;
  short itlbKeys;
  short itlbIcon;
};
typedef struct ItlbRecord ItlbRecord;

struct ItlbExtRecord {
  ItlbRecord base;
  SInt32 itlbLocalSize;
  short itlbMonoFond;
  short itlbMonoSize;
  short itlbPrefFond;
  short itlbPrefSize;
  short itlbSmallFond;
  short itlbSmallSize;
  short itlbSysFond;
  short itlbSysSize;
  short itlbAppFond;
  short itlbAppSize;
  short itlbHelpFond;
  short itlbHelpSize;
  Style itlbValidStyles;
  Style itlbAliasStyle;
};
typedef struct ItlbExtRecord ItlbExtRecord;



#pragma pack(pop)
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 2 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern "C" {


#pragma pack(push, 2)


enum {
  smSystemScript = -1,
  smCurrentScript = -2,
  smAllScripts = -3
};
# 60 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
enum {
  smRoman = 0,
  smJapanese = 1,
  smTradChinese = 2,
  smKorean = 3,
  smArabic = 4,
  smHebrew = 5,
  smGreek = 6,
  smCyrillic = 7,
  smRSymbol = 8,
  smDevanagari = 9,
  smGurmukhi = 10,
  smGujarati = 11,
  smOriya = 12,
  smBengali = 13,
  smTamil = 14,
  smTelugu = 15,
  smKannada = 16,
  smMalayalam = 17,
  smSinhalese = 18,
  smBurmese = 19,
  smKhmer = 20,
  smThai = 21,
  smLao = 22,
  smGeorgian = 23,
  smArmenian = 24,
  smSimpChinese = 25,
  smTibetan = 26,
  smMongolian = 27,
  smEthiopic = 28,
  smGeez = 28,
  smCentralEuroRoman = 29,
  smVietnamese = 30,
  smExtArabic = 31,
  smUninterp = 32
};


enum {
  smUnicodeScript = 0x7E
};


enum {
  smChinese = 2,
  smRussian = 7,

  smLaotian = 22,
  smAmharic = 28,
  smSlavic = 29,
  smEastEurRoman = 29,
  smSindhi = 31,
  smKlingon = 32
};






enum {
  langEnglish = 0,
  langFrench = 1,
  langGerman = 2,
  langItalian = 3,
  langDutch = 4,
  langSwedish = 5,
  langSpanish = 6,
  langDanish = 7,
  langPortuguese = 8,
  langNorwegian = 9,
  langHebrew = 10,
  langJapanese = 11,
  langArabic = 12,
  langFinnish = 13,
  langGreek = 14,
  langIcelandic = 15,
  langMaltese = 16,
  langTurkish = 17,
  langCroatian = 18,
  langTradChinese = 19,
  langUrdu = 20,
  langHindi = 21,
  langThai = 22,
  langKorean = 23
};

enum {
  langLithuanian = 24,
  langPolish = 25,
  langHungarian = 26,
  langEstonian = 27,
  langLatvian = 28,
  langSami = 29,
  langFaroese = 30,
  langFarsi = 31,
  langPersian = 31,
  langRussian = 32,
  langSimpChinese = 33,
  langFlemish = 34,
  langIrishGaelic = 35,
  langAlbanian = 36,
  langRomanian = 37,
  langCzech = 38,
  langSlovak = 39,
  langSlovenian = 40,
  langYiddish = 41,
  langSerbian = 42,
  langMacedonian = 43,
  langBulgarian = 44,
  langUkrainian = 45,
  langByelorussian = 46,
  langBelorussian = 46
};

enum {
  langUzbek = 47,
  langKazakh = 48,
  langAzerbaijani = 49,
  langAzerbaijanAr = 50,
  langArmenian = 51,
  langGeorgian = 52,
  langMoldavian = 53,
  langKirghiz = 54,
  langTajiki = 55,
  langTurkmen = 56,
  langMongolian = 57,
  langMongolianCyr = 58,
  langPashto = 59,
  langKurdish = 60,
  langKashmiri = 61,
  langSindhi = 62,
  langTibetan = 63,
  langNepali = 64,
  langSanskrit = 65,
  langMarathi = 66,
  langBengali = 67,
  langAssamese = 68,
  langGujarati = 69,
  langPunjabi = 70
};

enum {
  langOriya = 71,
  langMalayalam = 72,
  langKannada = 73,
  langTamil = 74,
  langTelugu = 75,
  langSinhalese = 76,
  langBurmese = 77,
  langKhmer = 78,
  langLao = 79,
  langVietnamese = 80,
  langIndonesian = 81,
  langTagalog = 82,
  langMalayRoman = 83,
  langMalayArabic = 84,
  langAmharic = 85,
  langTigrinya = 86,
  langOromo = 87,
  langSomali = 88,
  langSwahili = 89,
  langKinyarwanda = 90,
  langRuanda = 90,
  langRundi = 91,
  langNyanja = 92,
  langChewa = 92,
  langMalagasy = 93,
  langEsperanto = 94
};

enum {
  langWelsh = 128,
  langBasque = 129,
  langCatalan = 130,
  langLatin = 131,
  langQuechua = 132,
  langGuarani = 133,
  langAymara = 134,
  langTatar = 135,
  langUighur = 136,
  langDzongkha = 137,
  langJavaneseRom = 138,
  langSundaneseRom = 139,
  langGalician = 140,
  langAfrikaans = 141
};

enum {
  langBreton = 142,
  langInuktitut = 143,
  langScottishGaelic = 144,
  langManxGaelic = 145,
  langIrishGaelicScript = 146,
  langTongan = 147,
  langGreekAncient = 148,
  langGreenlandic = 149,
  langAzerbaijanRoman = 150,
  langNynorsk = 151
};

enum {
  langUnspecified = 32767
};





enum {
  langPortugese = 8,
  langMalta = 16,
  langYugoslavian = 18,
  langChinese = 19,
  langLettish = 28,
  langLapponian = 29,
  langLappish = 29,
  langSaamisk = 29,
  langFaeroese = 30,
  langIrish = 35,
  langGalla = 87,
  langAfricaans = 141,
  langGreekPoly = 148
};
# 297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
enum {

  verUS = 0,
  verFrance = 1,
  verBritain = 2,
  verGermany = 3,
  verItaly = 4,
  verNetherlands = 5,
  verFlemish = 6,
  verSweden = 7,
  verSpain = 8,
  verDenmark = 9,
  verPortugal = 10,
  verFrCanada = 11,
  verNorway = 12,
  verIsrael = 13,
  verJapan = 14,
  verAustralia = 15,
  verArabic = 16,
  verFinland = 17,
  verFrSwiss = 18,
  verGrSwiss = 19,
  verGreece = 20,
  verIceland = 21,
  verMalta = 22,
  verCyprus = 23,
  verTurkey = 24,
  verYugoCroatian = 25
};

enum {
  verNetherlandsComma = 26,
  verFlemishPoint = 27,
  verCanadaComma = 28,
  verCanadaPoint = 29,
  vervariantPortugal = 30,
  vervariantNorway = 31,
  vervariantDenmark = 32
};

enum {
  verIndiaHindi = 33,
  verPakistanUrdu = 34,
  verTurkishModified = 35,
  verItalianSwiss = 36,
  verInternational = 37,

  verRomania = 39,
  verGreekAncient = 40,
  verLithuania = 41,
  verPoland = 42,
  verHungary = 43,
  verEstonia = 44,
  verLatvia = 45,
  verSami = 46,
  verFaroeIsl = 47,
  verIran = 48,
  verRussia = 49,
  verIreland = 50,
  verKorea = 51,
  verChina = 52,
  verTaiwan = 53,
  verThailand = 54,
  verScriptGeneric = 55,
  verCzech = 56,
  verSlovak = 57,
  verEastAsiaGeneric = 58,
  verMagyar = 59,
  verBengali = 60,
  verBelarus = 61
};

enum {
  verUkraine = 62,

  verGreeceAlt = 64,
  verSerbian = 65,
  verSlovenian = 66,
  verMacedonian = 67,
  verCroatia = 68,

  verGermanReformed = 70,
  verBrazil = 71,
  verBulgaria = 72,
  verCatalonia = 73,
  verMultilingual = 74,
  verScottishGaelic = 75,
  verManxGaelic = 76,
  verBreton = 77,
  verNunavut = 78,
  verWelsh = 79,

  verIrishGaelicScript = 81,
  verEngCanada = 82,
  verBhutan = 83,
  verArmenian = 84,
  verGeorgian = 85,
  verSpLatinAmerica = 86,

  verTonga = 88,


  verFrenchUniversal = 91,
  verAustria = 92,

  verGujarati = 94,
  verPunjabi = 95,
  verIndiaUrdu = 96,
  verVietnam = 97
};

enum {
  verFrBelgium = 98,
  verUzbek = 99,
  verSingapore = 100,
  verNynorsk = 101,
  verAfrikaans = 102,
  verEsperanto = 103,
  verMarathi = 104,
  verTibetan = 105,
  verNepal = 106,
  verGreenland = 107,
  verIrelandEnglish = 108
};
# 435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
enum {
  verFrBelgiumLux = 6,
  verBelgiumLux = 6,
  verArabia = 16,
  verYugoslavia = 25,
  verBelgiumLuxPoint = 27,
  verIndia = 33,
  verPakistan = 34,
  verRumania = 39,
  verGreecePoly = 40,
  verLapland = 46,
  verFaeroeIsl = 47,
  verGenericFE = 58,
  verFarEastGeneric = 58,
  verByeloRussian = 61,
  verUkrania = 62,
  verAlternateGr = 64,
  verSerbia = 65,
  verSlovenia = 66,
  verMacedonia = 67,
  verBrittany = 77,
  verWales = 79,
  verArmenia = 84,
  verGeorgia = 85,
  verAustriaGerman = 92,
  verTibet = 105
};

enum {
  minCountry = verUS,
  maxCountry = verIrelandEnglish
};

enum {

  calGregorian = 0,
  calArabicCivil = 1,
  calArabicLunar = 2,
  calJapanese = 3,
  calJewish = 4,
  calCoptic = 5,
  calPersian = 6
};

enum {

  intWestern = 0,
  intArabic = 1,
  intRoman = 2,
  intJapanese = 3,
  intEuropean = 4,
  intOutputMask = 0x8000
};

enum {

  smSingleByte = 0,
  smFirstByte = -1,
  smLastByte = 1,
  smMiddleByte = 2
};

enum {

  smcTypeMask = 0x000F,
  smcReserved = 0x00F0,
  smcClassMask = 0x0F00,
  smcOrientationMask = 0x1000,
  smcRightMask = 0x2000,
  smcUpperMask = 0x4000,
  smcDoubleMask = 0x8000
};

enum {

  smCharPunct = 0x0000,
  smCharAscii = 0x0001,
  smCharEuro = 0x0007,
  smCharExtAscii = 0x0007,

  smCharKatakana = 0x0002,
  smCharHiragana = 0x0003,
  smCharIdeographic = 0x0004,
  smCharTwoByteGreek = 0x0005,
  smCharTwoByteRussian = 0x0006,
  smCharBidirect = 0x0008,
  smCharContextualLR = 0x0009,
  smCharNonContextualLR = 0x000A,
  smCharHangul = 0x000C,
  smCharJamo = 0x000D,
  smCharBopomofo = 0x000E,
  smCharGanaKana = 0x000F,

  smCharFISKana = 0x0002,
  smCharFISGana = 0x0003,
  smCharFISIdeo = 0x0004
};

enum {
  smCharFISGreek = 0x0005,
  smCharFISRussian = 0x0006,

  smPunctNormal = 0x0000,
  smPunctNumber = 0x0100,
  smPunctSymbol = 0x0200,
  smPunctBlank = 0x0300,
  smPunctRepeat = 0x0400,
  smPunctGraphic = 0x0500,

  smKanaSmall = 0x0100,
  smKanaHardOK = 0x0200,
  smKanaSoftOK = 0x0300,

  smIdeographicLevel1 = 0x0000,
  smIdeographicLevel2 = 0x0100,
  smIdeographicUser = 0x0200,

  smFISClassLvl1 = 0x0000,
  smFISClassLvl2 = 0x0100,
  smFISClassUser = 0x0200,

  smJamoJaeum = 0x0000,
  smJamoBogJaeum = 0x0100,
  smJamoMoeum = 0x0200,
  smJamoBogMoeum = 0x0300
};

enum {

  smCharHorizontal = 0x0000,
  smCharVertical = 0x1000,

  smCharLeft = 0x0000,
  smCharRight = 0x2000,
  smCharLower = 0x0000,
  smCharUpper = 0x4000,
  smChar1byte = 0x0000,
  smChar2byte = 0x8000
};

enum {

  smTransAscii = 0,
  smTransNative = 1,
  smTransCase = 0xFE,
  smTransSystem = 0xFF,

  smTransAscii1 = 2,
  smTransAscii2 = 3,
  smTransKana1 = 4,
  smTransKana2 = 5
};

enum {
  smTransGana2 = 7,
  smTransHangul2 = 8,
  smTransJamo2 = 9,
  smTransBopomofo2 = 10,

  smTransLower = 0x4000,
  smTransUpper = 0x8000,

  smTransRuleBaseFormat = 1,
  smTransHangulFormat = 2,

  smTransPreDoubleByting = 1,
  smTransPreLowerCasing = 2
};

enum {

  smMaskAll = (long)0xFFFFFFFF,

  smMaskAscii = 0x00000001,
  smMaskNative = 0x00000002,

  smMaskAscii1 = 0x00000004,
  smMaskAscii2 = 0x00000008,
  smMaskKana1 = 0x00000010,
  smMaskKana2 = 0x00000020,
  smMaskGana2 = 0x00000080,
  smMaskHangul2 = 0x00000100,
  smMaskJamo2 = 0x00000200,
  smMaskBopomofo2 = 0x00000400
};

enum {

  iuSystemScript = -1,
  iuCurrentScript = -2
};

enum {

  smKeyNextScript = -1,
  smKeySysScript = -2,
  smKeySwapScript = -3,

  smKeyNextKybd = -4,
  smKeySwapKybd = -5,
  smKeyDisableKybds = -6,
  smKeyEnableKybds = -7,
  smKeyToggleInline = -8,
  smKeyToggleDirection = -9,
  smKeyNextInputMethod = -10,
  smKeySwapInputMethod = -11,
  smKeyDisableKybdSwitch = -12,
  smKeySetDirLeftRight = -15,
  smKeySetDirRightLeft = -16,
  smKeyRoman = -17
};

enum {

  smKeyForceKeyScriptBit = 7,
  smKeyForceKeyScriptMask = 1 << smKeyForceKeyScriptBit
};

enum {



  romanSysFond = 0x3FFF,
  romanAppFond = 3,
  romanFlags = 0x0007,

  smFondStart = 0x4000,
  smFondEnd = 0xC000,

  smUprHalfCharSet = 0x80
};

enum {

  diaeresisUprY = 0xD9,
  fraction = 0xDA,
  intlCurrency = 0xDB,
  leftSingGuillemet = 0xDC,
  rightSingGuillemet = 0xDD,
  fiLigature = 0xDE,
  flLigature = 0xDF,
  dblDagger = 0xE0,
  centeredDot = 0xE1,
  baseSingQuote = 0xE2,
  baseDblQuote = 0xE3,
  perThousand = 0xE4,
  circumflexUprA = 0xE5,
  circumflexUprE = 0xE6,
  acuteUprA = 0xE7,
  diaeresisUprE = 0xE8,
  graveUprE = 0xE9,
  acuteUprI = 0xEA,
  circumflexUprI = 0xEB,
  diaeresisUprI = 0xEC,
  graveUprI = 0xED,
  acuteUprO = 0xEE,
  circumflexUprO = 0xEF,
  appleLogo = 0xF0,
  graveUprO = 0xF1,
  acuteUprU = 0xF2,
  circumflexUprU = 0xF3,
  graveUprU = 0xF4,
  dotlessLwrI = 0xF5,
  circumflex = 0xF6,
  tilde = 0xF7,
  macron = 0xF8,
  breveMark = 0xF9,
  overDot = 0xFA,
  ringMark = 0xFB,
  cedilla = 0xFC,
  doubleAcute = 0xFD,
  ogonek = 0xFE,
  hachek = 0xFF
};

enum {

  tokenIntl = 4,
  tokenEmpty = -1
};

enum {
  tokenUnknown = 0,
  tokenWhite = 1,
  tokenLeftLit = 2,
  tokenRightLit = 3,
  tokenAlpha = 4,
  tokenNumeric = 5,
  tokenNewLine = 6,
  tokenLeftComment = 7,
  tokenRightComment = 8,
  tokenLiteral = 9,
  tokenEscape = 10,
  tokenAltNum = 11,
  tokenRealNum = 12,
  tokenAltReal = 13,
  tokenReserve1 = 14,
  tokenReserve2 = 15,
  tokenLeftParen = 16,
  tokenRightParen = 17,
  tokenLeftBracket = 18,
  tokenRightBracket = 19
};

enum {
  tokenLeftCurly = 20,
  tokenRightCurly = 21,
  tokenLeftEnclose = 22,
  tokenRightEnclose = 23,
  tokenPlus = 24,
  tokenMinus = 25,
  tokenAsterisk = 26,
  tokenDivide = 27,
  tokenPlusMinus = 28,
  tokenSlash = 29,
  tokenBackSlash = 30,
  tokenLess = 31,
  tokenGreat = 32,
  tokenEqual = 33,
  tokenLessEqual2 = 34,
  tokenLessEqual1 = 35,
  tokenGreatEqual2 = 36,
  tokenGreatEqual1 = 37,
  token2Equal = 38,
  tokenColonEqual = 39
};

enum {
  tokenNotEqual = 40,
  tokenLessGreat = 41,
  tokenExclamEqual = 42,
  tokenExclam = 43,
  tokenTilde = 44,
  tokenComma = 45,
  tokenPeriod = 46,
  tokenLeft2Quote = 47,
  tokenRight2Quote = 48,
  tokenLeft1Quote = 49,
  tokenRight1Quote = 50,
  token2Quote = 51,
  token1Quote = 52,
  tokenSemicolon = 53,
  tokenPercent = 54,
  tokenCaret = 55,
  tokenUnderline = 56,
  tokenAmpersand = 57,
  tokenAtSign = 58,
  tokenBar = 59
};

enum {
  tokenQuestion = 60,
  tokenPi = 61,
  tokenRoot = 62,
  tokenSigma = 63,
  tokenIntegral = 64,
  tokenMicro = 65,
  tokenCapPi = 66,
  tokenInfinity = 67,
  tokenColon = 68,
  tokenHash = 69,
  tokenDollar = 70,
  tokenNoBreakSpace = 71,
  tokenFraction = 72,
  tokenIntlCurrency = 73,
  tokenLeftSingGuillemet = 74,
  tokenRightSingGuillemet = 75,
  tokenPerThousand = 76,
  tokenEllipsis = 77,
  tokenCenterDot = 78,
  tokenNil = 127
};

enum {
  delimPad = -2,
  tokenTilda = 44,
  tokenCarat = 55
};

enum {

  smWordSelectTable = 0,
  smWordWrapTable = 1,
  smNumberPartsTable = 2,
  smUnTokenTable = 3,
  smWhiteSpaceList = 4,
  iuWordSelectTable = 0,
  iuWordWrapTable = 1,
  iuNumberPartsTable = 2,
  iuUnTokenTable = 3,
  iuWhiteSpaceList = 4
};


enum {
  tokenOK = 0,
  tokenOverflow = 1,
  stringOverflow = 2,
  badDelim = 3,
  badEnding = 4,
  crash = 5
};

typedef SInt8 TokenResults;
typedef char CharByteTable[256];

typedef short ScriptTokenType;
typedef ScriptTokenType DelimType[2];
typedef ScriptTokenType CommentType[4];
struct TokenRec {
  ScriptTokenType theToken;
  Ptr position;
  long length;
  StringPtr stringPosition;
};
typedef struct TokenRec TokenRec;
typedef TokenRec * TokenRecPtr;
struct TokenBlock {
  Ptr source;
  long sourceLength;
  Ptr tokenList;
  long tokenLength;
  long tokenCount;
  Ptr stringList;
  long stringLength;
  long stringCount;
  Boolean doString;
  Boolean doAppend;
  Boolean doAlphanumeric;
  Boolean doNest;
  ScriptTokenType leftDelims[2];
  ScriptTokenType rightDelims[2];
  ScriptTokenType leftComment[4];
  ScriptTokenType rightComment[4];
  ScriptTokenType escapeCode;
  ScriptTokenType decimalCode;
  Handle itlResource;
  long reserved[8];
};
typedef struct TokenBlock TokenBlock;
typedef TokenBlock * TokenBlockPtr;


enum {
  smNotInstalled = 0,
  smBadVerb = -1,
  smBadScript = -2
};



enum {
  smfShowIcon = 31,
  smfDualCaret = 30,
  smfNameTagEnab = 29,
  smfUseAssocFontInfo = 28,
  smfDisableKeyScriptSync = 27
};


enum {
  smfDisableKeyScriptSyncMask = 1L << smfDisableKeyScriptSync
};



enum {
  smVersion = 0,
  smEnabled = 4,
  smIntlForce = 10,
  smSysScript = 18,
  smKeyScript = 22,
  smGenFlags = 30,
  smDoubleByte = 36,
  smKCHRCache = 38,
  smRegionCode = 40,
  smKeyDisableState = 42
};


enum {
  smMunged = 2,
  smBidirect = 6,
  smFontForce = 8,
  smForced = 12,
  smDefault = 14,
  smPrint = 16,
  smLastScript = 20,
  smSysRef = 24,
  smKeyCache = 26,
  smKeySwap = 28,
  smOverride = 32,
  smCharPortion = 34
};
# 982 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern long
GetScriptManagerVariable(short selector) ;
# 1004 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern OSErr
SetScriptManagerVariable(
  short selector,
  long param) ;




enum {
  smRedrawChar = 0,
  smRedrawWord = 1,
  smRedrawLine = -1
};





enum {
  smsfIntellCP = 0,
  smsfSingByte = 1,
  smsfNatCase = 2,
  smsfContext = 3,
  smsfNoForceFont = 4,
  smsfB0Digits = 5,
  smsfAutoInit = 6,
  smsfUnivExt = 7,
  smsfSynchUnstyledTE = 8,
  smsfForms = 13,
  smsfLigatures = 14,
  smsfReverse = 15
};





enum {
  smScriptEnabled = 4,
  smScriptRight = 6,
  smScriptSysFond = 12,
  smScriptAppFond = 14,
  smScriptNumber = 16,
  smScriptDate = 18,
  smScriptSort = 20,
  smScriptFlags = 22,
  smScriptEncoding = 26,
  smScriptLang = 28,
  smScriptKeys = 32,
  smScriptIcon = 34,
  smScriptName = 44,

  smScriptPrefFondSize = 80,
  smScriptSmallFondSize = 82,
  smScriptSysFondSize = 84,
  smScriptAppFondSize = 86,
  smScriptAliasStyle = 92
};


enum {
  smScriptVersion = 0,
  smScriptMunged = 2,
  smScriptJust = 8,
  smScriptRedraw = 10,
  smScriptBundle = 16,
  smScriptToken = 24,
  smScriptNumDate = 30,
  smScriptPrint = 36,
  smScriptTrap = 38,
  smScriptCreator = 40,
  smScriptFile = 42,
  smScriptMonoFondSize = 78,
  smScriptHelpFondSize = 88,
  smScriptValidStyles = 90
};







enum {
  smLayoutCache = -309,
  smOldVerbSupport = -311,
  smSetKashidas = -291,
  smSetKashProp = -287,
  smScriptSysBase = -281,
  smScriptAppBase = -283,
  smScriptFntBase = -285,
  smScriptLigatures = -263,
  smScriptNumbers = -267
};
# 1153 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern long
GetScriptVariable(
  short script,
  short selector) ;
# 1181 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern OSErr
SetScriptVariable(
  short script,
  short selector,
  long param) ;
# 1206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern short
GetSysDirection(void) ;
# 1224 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern void
SetSysDirection(short value) ;
# 1243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern short
FontScript(void) ;
# 1262 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern short
IntlScript(void) ;
# 1281 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern short
FontToScript(short fontNumber) ;
# 1302 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern short
CharacterByteType(
  Ptr textBuf,
  short textOffset,
  ScriptCode script) ;
# 1326 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern short
CharacterType(
  Ptr textBuf,
  short textOffset,
  ScriptCode script) ;
# 1348 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern OSErr
TransliterateText(
  Handle srcHandle,
  Handle dstHandle,
  short target,
  long srcMask,
  ScriptCode script) ;
# 1374 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern Boolean
FillParseTable(
  CharByteTable table,
  ScriptCode script) ;
# 1394 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern Handle
GetIntlResource(short theID) ;
# 1412 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern void
ClearIntlResourceCache(void) ;
# 1430 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern void
GetIntlResourceTable(
  ScriptCode script,
  short tableCode,
  Handle * itlHandle,
  long * offset,
  long * length) ;
# 1544 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
extern TokenResults
IntlTokenize(TokenBlockPtr tokenParam) ;
# 1565 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Script.h" 3
#pragma pack(pop)


}
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 1 3
# 24 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
extern "C" {


enum {
  paramErr = -50,
  noHardwareErr = -200,
  notEnoughHardwareErr = -201,
  userCanceledErr = -128,
  qErr = -1,
  vTypErr = -2,
  corErr = -3,
  unimpErr = -4,
  SlpTypeErr = -5,
  seNoDB = -8,
  controlErr = -17,
  statusErr = -18,
  readErr = -19,
  writErr = -20,
  badUnitErr = -21,
  unitEmptyErr = -22,
  openErr = -23,
  closErr = -24,
  dRemovErr = -25,
  dInstErr = -26
};

enum {
  abortErr = -27,
  iIOAbortErr = -27,
  notOpenErr = -28,
  unitTblFullErr = -29,
  dceExtErr = -30,
  slotNumErr = -360,
  gcrOnMFMErr = -400,
  dirFulErr = -33,
  dskFulErr = -34,
  nsvErr = -35,
  ioErr = -36,
  bdNamErr = -37,
  fnOpnErr = -38,
  eofErr = -39,
  posErr = -40,
  mFulErr = -41,
  tmfoErr = -42,
  fnfErr = -43,
  wPrErr = -44,
  fLckdErr = -45
};

enum {
  vLckdErr = -46,
  fBsyErr = -47,
  dupFNErr = -48,
  opWrErr = -49,
  rfNumErr = -51,
  gfpErr = -52,
  volOffLinErr = -53,
  permErr = -54,
  volOnLinErr = -55,
  nsDrvErr = -56,
  noMacDskErr = -57,
  extFSErr = -58,
  fsRnErr = -59,
  badMDBErr = -60,
  wrPermErr = -61,
  dirNFErr = -120,
  tmwdoErr = -121,
  badMovErr = -122,
  wrgVolTypErr = -123,
  volGoneErr = -124
};

enum {
  fidNotFound = -1300,
  fidExists = -1301,
  notAFileErr = -1302,
  diffVolErr = -1303,
  catChangedErr = -1304,
  desktopDamagedErr = -1305,
  sameFileErr = -1306,
  badFidErr = -1307,
  notARemountErr = -1308,
  fileBoundsErr = -1309,
  fsDataTooBigErr = -1310,
  volVMBusyErr = -1311,
  badFCBErr = -1327,
  errFSUnknownCall = -1400,
  errFSBadFSRef = -1401,
  errFSBadForkName = -1402,
  errFSBadBuffer = -1403,
  errFSBadForkRef = -1404,
  errFSBadInfoBitmap = -1405,
  errFSMissingCatInfo = -1406,
  errFSNotAFolder = -1407,
  errFSForkNotFound = -1409,
  errFSNameTooLong = -1410,
  errFSMissingName = -1411,
  errFSBadPosMode = -1412,
  errFSBadAllocFlags = -1413,
  errFSNoMoreItems = -1417,
  errFSBadItemCount = -1418,
  errFSBadSearchParams = -1419,
  errFSRefsDifferent = -1420,
  errFSForkExists = -1421,
  errFSBadIteratorFlags = -1422,
  errFSIteratorNotFound = -1423,
  errFSIteratorNotSupported = -1424,
  errFSQuotaExceeded = -1425,
  errFSOperationNotSupported = -1426,
  errFSAttributeNotFound = -1427,
  errFSPropertyNotValid = -1428,
  errFSNotEnoughSpaceForOperation = -1429,
  envNotPresent = -5500,
  envBadVers = -5501,
  envVersTooBig = -5502,
  fontDecError = -64,
  fontNotDeclared = -65,
  fontSubErr = -66,
  fontNotOutlineErr = -32615,
  firstDskErr = -84,
  lastDskErr = -64,
  noDriveErr = -64,
  offLinErr = -65,
  noNybErr = -66
};

enum {
  noAdrMkErr = -67,
  dataVerErr = -68,
  badCksmErr = -69,
  badBtSlpErr = -70,
  noDtaMkErr = -71,
  badDCksum = -72,
  badDBtSlp = -73,
  wrUnderrun = -74,
  cantStepErr = -75,
  tk0BadErr = -76,
  initIWMErr = -77,
  twoSideErr = -78,
  spdAdjErr = -79,
  seekErr = -80,
  sectNFErr = -81,
  fmt1Err = -82,
  fmt2Err = -83,
  verErr = -84,
  clkRdErr = -85,
  clkWrErr = -86,
  prWrErr = -87,
  prInitErr = -88,
  rcvrErr = -89,
  breakRecd = -90
};

enum {

  noScrapErr = -100,
  noTypeErr = -102
};

enum {

  eLenErr = -92,
  eMultiErr = -91
};

enum {
  ddpSktErr = -91,
  ddpLenErr = -92,
  noBridgeErr = -93,
  lapProtErr = -94,
  excessCollsns = -95,
  portNotPwr = -96,
  portInUse = -97,
  portNotCf = -98
};

enum {

  memROZWarn = -99,
  memROZError = -99,
  memROZErr = -99,
  memFullErr = -108,
  nilHandleErr = -109,
  memWZErr = -111,
  memPurErr = -112,
  memAdrErr = -110,
  memAZErr = -113,
  memPCErr = -114,
  memBCErr = -115,
  memSCErr = -116,
  memLockedErr = -117
};

enum {

  iMemFullErr = -108,
  iIOAbort = -27
};


enum {
  resourceInMemory = -188,
  writingPastEnd = -189,
  inputOutOfBounds = -190,
  resNotFound = -192,
  resFNotFound = -193,
  addResFailed = -194,
  addRefFailed = -195,
  rmvResFailed = -196,
  rmvRefFailed = -197,
  resAttrErr = -198,
  mapReadErr = -199,
  CantDecompress = -186,
  badExtResource = -185,
  noMemForPictPlaybackErr = -145,
  rgnOverflowErr = -147,
  rgnTooBigError = -147,
  pixMapTooDeepErr = -148,
  insufficientStackErr = -149,
  nsStackErr = -149
};

enum {
  evtNotEnb = 1
};


enum {
  cMatchErr = -150,
  cTempMemErr = -151,
  cNoMemErr = -152,
  cRangeErr = -153,
  cProtectErr = -154,
  cDevErr = -155,
  cResErr = -156,
  cDepthErr = -157,
  rgnTooBigErr = -500,
  updPixMemErr = -125,
  pictInfoVersionErr = -11000,
  pictInfoIDErr = -11001,
  pictInfoVerbErr = -11002,
  cantLoadPickMethodErr = -11003,
  colorsRequestedErr = -11004,
  pictureDataErr = -11005
};


enum {

  cmProfileError = -170,
  cmMethodError = -171,
  cmMethodNotFound = -175,
  cmProfileNotFound = -176,
  cmProfilesIdentical = -177,
  cmCantConcatenateError = -178,
  cmCantXYZ = -179,
  cmCantDeleteProfile = -180,
  cmUnsupportedDataType = -181,
  cmNoCurrentProfile = -182
};


enum {

  noHardware = noHardwareErr,
  notEnoughHardware = notEnoughHardwareErr,
  queueFull = -203,
  resProblem = -204,
  badChannel = -205,
  badFormat = -206,
  notEnoughBufferSpace = -207,
  badFileFormat = -208,
  channelBusy = -209,
  buffersTooSmall = -210,
  channelNotBusy = -211,
  noMoreRealTime = -212,
  siVBRCompressionNotSupported = -213,
  siNoSoundInHardware = -220,
  siBadSoundInDevice = -221,
  siNoBufferSpecified = -222,
  siInvalidCompression = -223,
  siHardDriveTooSlow = -224,
  siInvalidSampleRate = -225,
  siInvalidSampleSize = -226,
  siDeviceBusyErr = -227,
  siBadDeviceName = -228,
  siBadRefNum = -229,
  siInputDeviceErr = -230,
  siUnknownInfoType = -231,
  siUnknownQuality = -232
};


enum {
  noSynthFound = -240,
  synthOpenFailed = -241,
  synthNotReady = -242,
  bufTooSmall = -243,
  voiceNotFound = -244,
  incompatibleVoice = -245,
  badDictFormat = -246,
  badInputText = -247
};


enum {
  midiNoClientErr = -250,
  midiNoPortErr = -251,
  midiTooManyPortsErr = -252,
  midiTooManyConsErr = -253,
  midiVConnectErr = -254,
  midiVConnectMade = -255,
  midiVConnectRmvd = -256,
  midiNoConErr = -257,
  midiWriteErr = -258,
  midiNameLenErr = -259,
  midiDupIDErr = -260,
  midiInvalidCmdErr = -261
};


enum {
  nmTypErr = -299
};


enum {
  siInitSDTblErr = 1,
  siInitVBLQsErr = 2,
  siInitSPTblErr = 3,
  sdmJTInitErr = 10,
  sdmInitErr = 11,
  sdmSRTInitErr = 12,
  sdmPRAMInitErr = 13,
  sdmPriInitErr = 14
};

enum {
  smSDMInitErr = -290,
  smSRTInitErr = -291,
  smPRAMInitErr = -292,
  smPriInitErr = -293,
  smEmptySlot = -300,
  smCRCFail = -301,
  smFormatErr = -302,
  smRevisionErr = -303,
  smNoDir = -304,
  smDisabledSlot = -305,
  smNosInfoArray = -306
};


enum {
  smResrvErr = -307,
  smUnExBusErr = -308,
  smBLFieldBad = -309,
  smFHBlockRdErr = -310,
  smFHBlkDispErr = -311,
  smDisposePErr = -312,
  smNoBoardSRsrc = -313,
  smGetPRErr = -314,
  smNoBoardId = -315,
  smInitStatVErr = -316,
  smInitTblVErr = -317,
  smNoJmpTbl = -318,
  smReservedSlot = -318,
  smBadBoardId = -319,
  smBusErrTO = -320,

  svTempDisable = -32768L,
  svDisabled = -32640,
  smBadRefId = -330,
  smBadsList = -331,
  smReservedErr = -332,
  smCodeRevErr = -333
};

enum {
  smCPUErr = -334,
  smsPointerNil = -335,
  smNilsBlockErr = -336,
  smSlotOOBErr = -337,
  smSelOOBErr = -338,
  smNewPErr = -339,
  smBlkMoveErr = -340,
  smCkStatusErr = -341,
  smGetDrvrNamErr = -342,
  smDisDrvrNamErr = -343,
  smNoMoresRsrcs = -344,
  smsGetDrvrErr = -345,
  smBadsPtrErr = -346,
  smByteLanesErr = -347,
  smOffsetErr = -348,
  smNoGoodOpens = -349,
  smSRTOvrFlErr = -350,
  smRecNotFnd = -351
};


enum {

  notBTree = -410,
  btNoSpace = -413,
  btDupRecErr = -414,
  btRecNotFnd = -415,
  btKeyLenErr = -416,
  btKeyAttrErr = -417,
  unknownInsertModeErr = -20000,
  recordDataTooBigErr = -20001,
  invalidIndexErr = -20002
};





enum {
  fsmFFSNotFoundErr = -431,
  fsmBusyFFSErr = -432,
  fsmBadFFSNameErr = -433,
  fsmBadFSDLenErr = -434,
  fsmDuplicateFSIDErr = -435,
  fsmBadFSDVersionErr = -436,
  fsmNoAlternateStackErr = -437,
  fsmUnknownFSMMessageErr = -438
};


enum {

  editionMgrInitErr = -450,
  badSectionErr = -451,
  notRegisteredSectionErr = -452,
  badEditionFileErr = -453,
  badSubPartErr = -454,
  multiplePublisherWrn = -460,
  containerNotFoundWrn = -461,
  containerAlreadyOpenWrn = -462,
  notThePublisherWrn = -463
};

enum {
  teScrapSizeErr = -501,
  hwParamErr = -502,
  driverHardwareGoneErr = -503
};

enum {

  procNotFound = -600,
  memFragErr = -601,
  appModeErr = -602,
  protocolErr = -603,
  hardwareConfigErr = -604,
  appMemFullErr = -605,
  appIsDaemon = -606,
  bufferIsSmall = -607,
  noOutstandingHLE = -608,
  connectionInvalid = -609,
  noUserInteractionAllowed = -610
};

enum {

  wrongApplicationPlatform = -875,
  appVersionTooOld = -876,
  notAppropriateForClassic = -877
};


enum {
  threadTooManyReqsErr = -617,
  threadNotFoundErr = -618,
  threadProtocolErr = -619
};

enum {
  threadBadAppContextErr = -616
};


enum {
  notEnoughMemoryErr = -620,
  notHeldErr = -621,
  cannotMakeContiguousErr = -622,
  notLockedErr = -623,
  interruptsMaskedErr = -624,
  cannotDeferErr = -625,
  noMMUErr = -626
};


enum {
  vmMorePhysicalThanVirtualErr = -628,
  vmKernelMMUInitErr = -629,
  vmOffErr = -630,
  vmMemLckdErr = -631,
  vmBadDriver = -632,
  vmNoVectorErr = -633
};


enum {
  vmInvalidBackingFileIDErr = -640,
  vmMappingPrivilegesErr = -641,
  vmBusyBackingFileErr = -642,
  vmNoMoreBackingFilesErr = -643,
  vmInvalidFileViewIDErr = -644,
  vmFileViewAccessErr = -645,
  vmNoMoreFileViewsErr = -646,
  vmAddressNotInFileViewErr = -647,
  vmInvalidOwningProcessErr = -648
};


enum {
  rcDBNull = -800,
  rcDBValue = -801,
  rcDBError = -802,
  rcDBBadType = -803,
  rcDBBreak = -804,
  rcDBExec = -805,
  rcDBBadSessID = -806,
  rcDBBadSessNum = -807,
  rcDBBadDDEV = -808,
  rcDBAsyncNotSupp = -809,
  rcDBBadAsyncPB = -810,
  rcDBNoHandler = -811,
  rcDBWrongVersion = -812,
  rcDBPackNotInited = -813
};



enum {
  hmHelpDisabled = -850,
  hmBalloonAborted = -853,
  hmSameAsLastBalloon = -854,
  hmHelpManagerNotInited = -855,
  hmSkippedBalloon = -857,
  hmWrongVersion = -858,
  hmUnknownHelpType = -859,
  hmOperationUnsupported = -861,
  hmNoBalloonUp = -862,
  hmCloseViewActive = -863
};



enum {

  notInitErr = -900,
  nameTypeErr = -902,
  noPortErr = -903,


  noGlobalsErr = -904,
  localOnlyErr = -905,
  destPortErr = -906,
  sessTableErr = -907,
  noSessionErr = -908,
  badReqErr = -909,
  portNameExistsErr = -910,
  noUserNameErr = -911,
  userRejectErr = -912,
  noMachineNameErr = -913,
  noToolboxNameErr = -914,
  noResponseErr = -915,
  portClosedErr = -916,
  sessClosedErr = -917,
  badPortNameErr = -919,
  noDefaultUserErr = -922,
  notLoggedInErr = -923,
  noUserRefErr = -924,
  networkErr = -925,
  noInformErr = -926,
  authFailErr = -927,
  noUserRecErr = -928,
  badServiceMethodErr = -930,
  badLocNameErr = -931,
  guestNotAllowedErr = -932
};


enum {
  kFMIterationCompleted = -980L,
  kFMInvalidFontFamilyErr = -981L,
  kFMInvalidFontErr = -982L,
  kFMIterationScopeModifiedErr = -983L,
  kFMFontTableAccessErr = -984L,
  kFMFontContainerAccessErr = -985L
};

enum {
  noMaskFoundErr = -1000
};

enum {
  nbpBuffOvr = -1024,
  nbpNoConfirm = -1025,
  nbpConfDiff = -1026,
  nbpDuplicate = -1027,
  nbpNotFound = -1028,
  nbpNISErr = -1029
};

enum {
  aspBadVersNum = -1066,
  aspBufTooSmall = -1067,
  aspNoMoreSess = -1068,
  aspNoServers = -1069,
  aspParamErr = -1070,
  aspServerBusy = -1071,
  aspSessClosed = -1072,
  aspSizeErr = -1073,
  aspTooMany = -1074,
  aspNoAck = -1075
};

enum {
  reqFailed = -1096,
  tooManyReqs = -1097,
  tooManySkts = -1098,
  badATPSkt = -1099,
  badBuffNum = -1100,
  noRelErr = -1101,
  cbNotFound = -1102,
  noSendResp = -1103,
  noDataArea = -1104,
  reqAborted = -1105
};


enum {

  errRefNum = -1280,
  errAborted = -1279,
  errState = -1278,
  errOpening = -1277,
  errAttention = -1276,
  errFwdReset = -1275,
  errDSPQueueSize = -1274,
  errOpenDenied = -1273
};






enum {
  errAECoercionFail = -1700,
  errAEDescNotFound = -1701,
  errAECorruptData = -1702,
  errAEWrongDataType = -1703,
  errAENotAEDesc = -1704,
  errAEBadListItem = -1705,
  errAENewerVersion = -1706,
  errAENotAppleEvent = -1707,
  errAEEventNotHandled = -1708,
  errAEReplyNotValid = -1709,
  errAEUnknownSendMode = -1710,
  errAEWaitCanceled = -1711,
  errAETimeout = -1712,
  errAENoUserInteraction = -1713,
  errAENotASpecialFunction = -1714,
  errAEParamMissed = -1715,
  errAEUnknownAddressType = -1716,
  errAEHandlerNotFound = -1717,
  errAEReplyNotArrived = -1718,
  errAEIllegalIndex = -1719,
  errAEImpossibleRange = -1720,
  errAEWrongNumberArgs = -1721,
  errAEAccessorNotFound = -1723,
  errAENoSuchLogical = -1725,
  errAEBadTestKey = -1726,
  errAENotAnObjSpec = -1727,
  errAENoSuchObject = -1728,
  errAENegativeCount = -1729,
  errAEEmptyListContainer = -1730,
  errAEUnknownObjectType = -1731,
  errAERecordingIsAlreadyOn = -1732,
  errAEReceiveTerminate = -1733,
  errAEReceiveEscapeCurrent = -1734,
  errAEEventFiltered = -1735,
  errAEDuplicateHandler = -1736,
  errAEStreamBadNesting = -1737,
  errAEStreamAlreadyConverted = -1738,
  errAEDescIsNull = -1739,
  errAEBuildSyntaxError = -1740,
  errAEBufferTooSmall = -1741
};

enum {
  errOSASystemError = -1750,
  errOSAInvalidID = -1751,
  errOSABadStorageType = -1752,
  errOSAScriptError = -1753,
  errOSABadSelector = -1754,
  errOSASourceNotAvailable = -1756,
  errOSANoSuchDialect = -1757,
  errOSADataFormatObsolete = -1758,
  errOSADataFormatTooNew = -1759,
  errOSACorruptData = errAECorruptData,
  errOSARecordingIsAlreadyOn = errAERecordingIsAlreadyOn,
  errOSAComponentMismatch = -1761,
  errOSACantOpenComponent = -1762
};




enum {
  errOffsetInvalid = -1800,
  errOffsetIsOutsideOfView = -1801,
  errTopOfDocument = -1810,
  errTopOfBody = -1811,
  errEndOfDocument = -1812,
  errEndOfBody = -1813
};


enum {

  badDragRefErr = -1850,
  badDragItemErr = -1851,
  badDragFlavorErr = -1852,
  duplicateFlavorErr = -1853,
  cantGetFlavorErr = -1854,
  duplicateHandlerErr = -1855,
  handlerNotFoundErr = -1856,
  dragNotAcceptedErr = -1857,
  unsupportedForPlatformErr = -1858,
  noSuitableDisplaysErr = -1859,
  badImageRgnErr = -1860,
  badImageErr = -1861,
  nonDragOriginatorErr = -1862
};



enum {
  couldNotResolveDataRef = -2000,
  badImageDescription = -2001,
  badPublicMovieAtom = -2002,
  cantFindHandler = -2003,
  cantOpenHandler = -2004,
  badComponentType = -2005,
  noMediaHandler = -2006,
  noDataHandler = -2007,
  invalidMedia = -2008,
  invalidTrack = -2009,
  invalidMovie = -2010,
  invalidSampleTable = -2011,
  invalidDataRef = -2012,
  invalidHandler = -2013,
  invalidDuration = -2014,
  invalidTime = -2015,
  cantPutPublicMovieAtom = -2016,
  badEditList = -2017,
  mediaTypesDontMatch = -2018,
  progressProcAborted = -2019,
  movieToolboxUninitialized = -2020,
  noRecordOfApp = movieToolboxUninitialized,
  wfFileNotFound = -2021,
  cantCreateSingleForkFile = -2022,
  invalidEditState = -2023,
  nonMatchingEditState = -2024,
  staleEditState = -2025,
  userDataItemNotFound = -2026,
  maxSizeToGrowTooSmall = -2027,
  badTrackIndex = -2028,
  trackIDNotFound = -2029,
  trackNotInMovie = -2030,
  timeNotInTrack = -2031,
  timeNotInMedia = -2032,
  badEditIndex = -2033,
  internalQuickTimeError = -2034,
  cantEnableTrack = -2035,
  invalidRect = -2036,
  invalidSampleNum = -2037,
  invalidChunkNum = -2038,
  invalidSampleDescIndex = -2039,
  invalidChunkCache = -2040,
  invalidSampleDescription = -2041,
  dataNotOpenForRead = -2042,
  dataNotOpenForWrite = -2043,
  dataAlreadyOpenForWrite = -2044,
  dataAlreadyClosed = -2045,
  endOfDataReached = -2046,
  dataNoDataRef = -2047,
  noMovieFound = -2048,
  invalidDataRefContainer = -2049,
  badDataRefIndex = -2050,
  noDefaultDataRef = -2051,
  couldNotUseAnExistingSample = -2052,
  featureUnsupported = -2053,
  noVideoTrackInMovieErr = -2054,
  noSoundTrackInMovieErr = -2055,
  soundSupportNotAvailableErr = -2056,
  unsupportedAuxiliaryImportData = -2057,
  auxiliaryExportDataUnavailable = -2058,
  samplesAlreadyInMediaErr = -2059,
  noSourceTreeFoundErr = -2060,
  sourceNotFoundErr = -2061,
  movieTextNotFoundErr = -2062,
  missingRequiredParameterErr = -2063,
  invalidSpriteWorldPropertyErr = -2064,
  invalidSpritePropertyErr = -2065,
  gWorldsNotSameDepthAndSizeErr = -2066,
  invalidSpriteIndexErr = -2067,
  invalidImageIndexErr = -2068,
  invalidSpriteIDErr = -2069
};

enum {
  internalComponentErr = -2070,
  notImplementedMusicOSErr = -2071,
  cantSendToSynthesizerOSErr = -2072,
  cantReceiveFromSynthesizerOSErr = -2073,
  illegalVoiceAllocationOSErr = -2074,
  illegalPartOSErr = -2075,
  illegalChannelOSErr = -2076,
  illegalKnobOSErr = -2077,
  illegalKnobValueOSErr = -2078,
  illegalInstrumentOSErr = -2079,
  illegalControllerOSErr = -2080,
  midiManagerAbsentOSErr = -2081,
  synthesizerNotRespondingOSErr = -2082,
  synthesizerOSErr = -2083,
  illegalNoteChannelOSErr = -2084,
  noteChannelNotAllocatedOSErr = -2085,
  tunePlayerFullOSErr = -2086,
  tuneParseOSErr = -2087,
  noExportProcAvailableErr = -2089,
  videoOutputInUseErr = -2090
};

enum {
  componentDllLoadErr = -2091,
  componentDllEntryNotFoundErr = -2092,
  qtmlDllLoadErr = -2093,
  qtmlDllEntryNotFoundErr = -2094,
  qtmlUninitialized = -2095,
  unsupportedOSErr = -2096,
  unsupportedProcessorErr = -2097,
  componentNotThreadSafeErr = -2098
};

enum {
  cannotFindAtomErr = -2101,
  notLeafAtomErr = -2102,
  atomsNotOfSameTypeErr = -2103,
  atomIndexInvalidErr = -2104,
  duplicateAtomTypeAndIDErr = -2105,
  invalidAtomErr = -2106,
  invalidAtomContainerErr = -2107,
  invalidAtomTypeErr = -2108,
  cannotBeLeafAtomErr = -2109,
  pathTooLongErr = -2110,
  emptyPathErr = -2111,
  noPathMappingErr = -2112,
  pathNotVerifiedErr = -2113,
  unknownFormatErr = -2114,
  wackBadFileErr = -2115,
  wackForkNotFoundErr = -2116,
  wackBadMetaDataErr = -2117,
  qfcbNotFoundErr = -2118,
  qfcbNotCreatedErr = -2119,
  AAPNotCreatedErr = -2120,
  AAPNotFoundErr = -2121,
  ASDBadHeaderErr = -2122,
  ASDBadForkErr = -2123,
  ASDEntryNotFoundErr = -2124,
  fileOffsetTooBigErr = -2125,
  notAllowedToSaveMovieErr = -2126,
  qtNetworkAlreadyAllocatedErr = -2127,
  urlDataHHTTPProtocolErr = -2129,
  urlDataHHTTPNoNetDriverErr = -2130,
  urlDataHHTTPURLErr = -2131,
  urlDataHHTTPRedirectErr = -2132,
  urlDataHFTPProtocolErr = -2133,
  urlDataHFTPShutdownErr = -2134,
  urlDataHFTPBadUserErr = -2135,
  urlDataHFTPBadPasswordErr = -2136,
  urlDataHFTPServerErr = -2137,
  urlDataHFTPDataConnectionErr = -2138,
  urlDataHFTPNoDirectoryErr = -2139,
  urlDataHFTPQuotaErr = -2140,
  urlDataHFTPPermissionsErr = -2141,
  urlDataHFTPFilenameErr = -2142,
  urlDataHFTPNoNetDriverErr = -2143,
  urlDataHFTPBadNameListErr = -2144,
  urlDataHFTPNeedPasswordErr = -2145,
  urlDataHFTPNoPasswordErr = -2146,
  urlDataHFTPServerDisconnectedErr = -2147,
  urlDataHFTPURLErr = -2148,
  notEnoughDataErr = -2149,
  qtActionNotHandledErr = -2157,
  qtXMLParseErr = -2158,
  qtXMLApplicationErr = -2159
};


enum {
  digiUnimpErr = -2201,
  qtParamErr = -2202,
  matrixErr = -2203,
  notExactMatrixErr = -2204,
  noMoreKeyColorsErr = -2205,
  notExactSizeErr = -2206,
  badDepthErr = -2207,
  noDMAErr = -2208,
  badCallOrderErr = -2209
};



enum {
  kernelIncompleteErr = -2401,
  kernelCanceledErr = -2402,
  kernelOptionsErr = -2403,
  kernelPrivilegeErr = -2404,
  kernelUnsupportedErr = -2405,
  kernelObjectExistsErr = -2406,
  kernelWritePermissionErr = -2407,
  kernelReadPermissionErr = -2408,
  kernelExecutePermissionErr = -2409,
  kernelDeletePermissionErr = -2410,
  kernelExecutionLevelErr = -2411,
  kernelAttributeErr = -2412,
  kernelAsyncSendLimitErr = -2413,
  kernelAsyncReceiveLimitErr = -2414,
  kernelTimeoutErr = -2415,
  kernelInUseErr = -2416,
  kernelTerminatedErr = -2417,
  kernelExceptionErr = -2418,
  kernelIDErr = -2419,
  kernelAlreadyFreeErr = -2421,
  kernelReturnValueErr = -2422,
  kernelUnrecoverableErr = -2499
};



enum {

  tsmComponentNoErr = 0,
  tsmUnsupScriptLanguageErr = -2500,
  tsmInputMethodNotFoundErr = -2501,
  tsmNotAnAppErr = -2502,
  tsmAlreadyRegisteredErr = -2503,
  tsmNeverRegisteredErr = -2504,
  tsmInvalidDocIDErr = -2505,
  tsmTSMDocBusyErr = -2506,
  tsmDocNotActiveErr = -2507,
  tsmNoOpenTSErr = -2508,
  tsmCantOpenComponentErr = -2509,
  tsmTextServiceNotFoundErr = -2510,
  tsmDocumentOpenErr = -2511,
  tsmUseInputWindowErr = -2512,
  tsmTSHasNoMenuErr = -2513,
  tsmTSNotOpenErr = -2514,
  tsmComponentAlreadyOpenErr = -2515,
  tsmInputMethodIsOldErr = -2516,
  tsmScriptHasNoIMErr = -2517,
  tsmUnsupportedTypeErr = -2518,
  tsmUnknownErr = -2519,
  tsmInvalidContext = -2520,
  tsmNoHandler = -2521,
  tsmNoMoreTokens = -2522,
  tsmNoStem = -2523,
  tsmDefaultIsNotInputMethodErr = -2524,
  tsmDocPropertyNotFoundErr = -2528,
  tsmDocPropertyBufferTooSmallErr = -2529,
  tsmCantChangeForcedClassStateErr = -2530,
  tsmComponentPropertyUnsupportedErr = -2531,
  tsmComponentPropertyNotFoundErr = -2532,
  tsmInputModeChangeFailedErr = -2533
};


enum {

  mmInternalError = -2526
};


enum {
  nrLockedErr = -2536,
  nrNotEnoughMemoryErr = -2537,
  nrInvalidNodeErr = -2538,
  nrNotFoundErr = -2539,
  nrNotCreatedErr = -2540,
  nrNameErr = -2541,
  nrNotSlotDeviceErr = -2542,
  nrDataTruncatedErr = -2543,
  nrPowerErr = -2544,
  nrPowerSwitchAbortErr = -2545,
  nrTypeMismatchErr = -2546,
  nrNotModifiedErr = -2547,
  nrOverrunErr = -2548,
  nrResultCodeBase = -2549,
  nrPathNotFound = -2550,
  nrPathBufferTooSmall = -2551,
  nrInvalidEntryIterationOp = -2552,
  nrPropertyAlreadyExists = -2553,
  nrIterationDone = -2554,
  nrExitedIteratorScope = -2555,
  nrTransactionAborted = -2556,
  nrCallNotSupported = -2557
};


enum {
  invalidIconRefErr = -2580,
  noSuchIconErr = -2581,
  noIconDataAvailableErr = -2582
};
# 1058 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  errOSACantCoerce = errAECoercionFail,
  errOSACantAccess = errAENoSuchObject,
  errOSACantAssign = -10006,
  errOSAGeneralError = -2700,
  errOSADivideByZero = -2701,
  errOSANumericOverflow = -2702,
  errOSACantLaunch = -2703,
  errOSAAppNotHighLevelEventAware = -2704,
  errOSACorruptTerminology = -2705,
  errOSAStackOverflow = -2706,
  errOSAInternalTableOverflow = -2707,
  errOSADataBlockTooLarge = -2708,
  errOSACantGetTerminology = -2709,
  errOSACantCreate = -2710
};
# 1089 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  errOSATypeError = errAEWrongDataType,
  OSAMessageNotUnderstood = errAEEventNotHandled,
  OSAUndefinedHandler = errAEHandlerNotFound,
  OSAIllegalAccess = errAEAccessorNotFound,
  OSAIllegalIndex = errAEIllegalIndex,
  OSAIllegalRange = errAEImpossibleRange,
  OSAIllegalAssign = -10003,
  OSASyntaxError = -2740,
  OSASyntaxTypeError = -2741,
  OSATokenTooLong = -2742,
  OSAMissingParameter = errAEDescNotFound,
  OSAParameterMismatch = errAEWrongNumberArgs,
  OSADuplicateParameter = -2750,
  OSADuplicateProperty = -2751,
  OSADuplicateHandler = -2752,
  OSAUndefinedVariable = -2753,
  OSAInconsistentDeclarations = -2754,
  OSAControlFlowError = -2755
};
# 1130 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  errASCantConsiderAndIgnore = -2720,
  errASCantCompareMoreThan32k = -2721,
  errASTerminologyNestingTooDeep = -2760,
  errASIllegalFormalParameter = -2761,
  errASParameterNotForEvent = -2762,
  errASNoResultReturned = -2763,
  errASInconsistentNames = -2780
};



enum {
  cfragFirstErrCode = -2800,
  cfragContextIDErr = -2800,
  cfragConnectionIDErr = -2801,
  cfragNoSymbolErr = -2802,
  cfragNoSectionErr = -2803,
  cfragNoLibraryErr = -2804,
  cfragDupRegistrationErr = -2805,
  cfragFragmentFormatErr = -2806,
  cfragUnresolvedErr = -2807,
  cfragNoPositionErr = -2808,
  cfragNoPrivateMemErr = -2809,
  cfragNoClientMemErr = -2810,
  cfragNoIDsErr = -2811,
  cfragInitOrderErr = -2812,
  cfragImportTooOldErr = -2813,
  cfragImportTooNewErr = -2814,
  cfragInitLoopErr = -2815,
  cfragInitAtBootErr = -2816,
  cfragLibConnErr = -2817,
  cfragCFMStartupErr = -2818,
  cfragCFMInternalErr = -2819,
  cfragFragmentCorruptErr = -2820,
  cfragInitFunctionErr = -2821,
  cfragNoApplicationErr = -2822,
  cfragArchitectureErr = -2823,
  cfragFragmentUsageErr = -2824,
  cfragFileSizeErr = -2825,
  cfragNotClosureErr = -2826,
  cfragNoRegistrationErr = -2827,
  cfragContainerIDErr = -2828,
  cfragClosureIDErr = -2829,
  cfragAbortClosureErr = -2830,
  cfragOutputLengthErr = -2831,
  cfragMapFileErr = -2851,
  cfragExecFileRefErr = -2854,
  cfragStdFolderErr = -2855,
  cfragRsrcForkErr = -2856,
  cfragCFragRsrcErr = -2857,
  cfragLastErrCode = -2899
};

enum {

  cfragFirstReservedCode = -2897,
  cfragReservedCode_3 = -2897,
  cfragReservedCode_2 = -2898,
  cfragReservedCode_1 = -2899
};
# 1225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  invalidComponentID = -3000,
  validInstancesExist = -3001,
  componentNotCaptured = -3002,
  componentDontRegister = -3003,
  unresolvedComponentDLLErr = -3004,
  retryComponentRegistrationErr = -3005
};


enum {
  invalidTranslationPathErr = -3025,
  couldNotParseSourceFileErr = -3026,
  noTranslationPathErr = -3030,
  badTranslationSpecErr = -3031,
  noPrefAppErr = -3032
};

enum {
  buf2SmallErr = -3101,
  noMPPErr = -3102,
  ckSumErr = -3103,
  extractErr = -3104,
  readQErr = -3105,
  atpLenErr = -3106,
  atpBadRsp = -3107,
  recNotFnd = -3108,
  sktClosedErr = -3109
};



enum {
  kOTNoError = 0,
  kOTOutOfMemoryErr = -3211,
  kOTNotFoundErr = -3201,
  kOTDuplicateFoundErr = -3216,
  kOTBadAddressErr = -3150,
  kOTBadOptionErr = -3151,
  kOTAccessErr = -3152,
  kOTBadReferenceErr = -3153,
  kOTNoAddressErr = -3154,
  kOTOutStateErr = -3155,
  kOTBadSequenceErr = -3156,
  kOTSysErrorErr = -3157,
  kOTLookErr = -3158,
  kOTBadDataErr = -3159,
  kOTBufferOverflowErr = -3160,
  kOTFlowErr = -3161,
  kOTNoDataErr = -3162,
  kOTNoDisconnectErr = -3163,
  kOTNoUDErrErr = -3164,
  kOTBadFlagErr = -3165,
  kOTNoReleaseErr = -3166,
  kOTNotSupportedErr = -3167,
  kOTStateChangeErr = -3168,
  kOTNoStructureTypeErr = -3169,
  kOTBadNameErr = -3170,
  kOTBadQLenErr = -3171,
  kOTAddressBusyErr = -3172,
  kOTIndOutErr = -3173,
  kOTProviderMismatchErr = -3174,
  kOTResQLenErr = -3175,
  kOTResAddressErr = -3176,
  kOTQFullErr = -3177,
  kOTProtocolErr = -3178,
  kOTBadSyncErr = -3179,
  kOTCanceledErr = -3180,
  kEPERMErr = -3200,
  kENOENTErr = -3201,
  kENORSRCErr = -3202,
  kEINTRErr = -3203,
  kEIOErr = -3204,
  kENXIOErr = -3205,
  kEBADFErr = -3208,
  kEAGAINErr = -3210,
  kENOMEMErr = -3211,
  kEACCESErr = -3212,
  kEFAULTErr = -3213,
  kEBUSYErr = -3215,
  kEEXISTErr = -3216,
  kENODEVErr = -3218,
  kEINVALErr = -3221,
  kENOTTYErr = -3224,
  kEPIPEErr = -3231,
  kERANGEErr = -3233,
  kEWOULDBLOCKErr = -3234,
  kEDEADLKErr = -3234,
  kEALREADYErr = -3236,
  kENOTSOCKErr = -3237,
  kEDESTADDRREQErr = -3238,
  kEMSGSIZEErr = -3239,
  kEPROTOTYPEErr = -3240,
  kENOPROTOOPTErr = -3241,
  kEPROTONOSUPPORTErr = -3242,
  kESOCKTNOSUPPORTErr = -3243,
  kEOPNOTSUPPErr = -3244,
  kEADDRINUSEErr = -3247,
  kEADDRNOTAVAILErr = -3248,
  kENETDOWNErr = -3249,
  kENETUNREACHErr = -3250,
  kENETRESETErr = -3251,
  kECONNABORTEDErr = -3252,
  kECONNRESETErr = -3253,
  kENOBUFSErr = -3254,
  kEISCONNErr = -3255,
  kENOTCONNErr = -3256,
  kESHUTDOWNErr = -3257,
  kETOOMANYREFSErr = -3258,
  kETIMEDOUTErr = -3259,
  kECONNREFUSEDErr = -3260,
  kEHOSTDOWNErr = -3263,
  kEHOSTUNREACHErr = -3264,
  kEPROTOErr = -3269,
  kETIMEErr = -3270,
  kENOSRErr = -3271,
  kEBADMSGErr = -3272,
  kECANCELErr = -3273,
  kENOSTRErr = -3274,
  kENODATAErr = -3275,
  kEINPROGRESSErr = -3276,
  kESRCHErr = -3277,
  kENOMSGErr = -3278,
  kOTClientNotInittedErr = -3279,
  kOTPortHasDiedErr = -3280,
  kOTPortWasEjectedErr = -3281,
  kOTBadConfigurationErr = -3282,
  kOTConfigurationChangedErr = -3283,
  kOTUserRequestedErr = -3284,
  kOTPortLostConnection = -3285
};



enum {
  kQDNoPalette = -3950,
  kQDNoColorHWCursorSupport = -3951,
  kQDCursorAlreadyRegistered = -3952,
  kQDCursorNotRegistered = -3953,
  kQDCorruptPICTDataErr = -3954
};




enum {
  firstPickerError = -4000,
  invalidPickerType = firstPickerError,
  requiredFlagsDontMatch = -4001,
  pickerResourceError = -4002,
  cantLoadPicker = -4003,
  cantCreatePickerWindow = -4004,
  cantLoadPackage = -4005,
  pickerCantLive = -4006,
  colorSyncNotInstalled = -4007,
  badProfileError = -4008,
  noHelpForItem = -4009
};




enum {
  kNSL68kContextNotSupported = -4170,
  kNSLSchedulerError = -4171,
  kNSLBadURLSyntax = -4172,
  kNSLNoCarbonLib = -4173,
  kNSLUILibraryNotAvailable = -4174,
  kNSLNotImplementedYet = -4175,
  kNSLErrNullPtrError = -4176,
  kNSLSomePluginsFailedToLoad = -4177,
  kNSLNullNeighborhoodPtr = -4178,
  kNSLNoPluginsForSearch = -4179,
  kNSLSearchAlreadyInProgress = -4180,
  kNSLNoPluginsFound = -4181,
  kNSLPluginLoadFailed = -4182,
  kNSLBadProtocolTypeErr = -4183,
  kNSLNullListPtr = -4184,
  kNSLBadClientInfoPtr = -4185,
  kNSLCannotContinueLookup = -4186,
  kNSLBufferTooSmallForData = -4187,
  kNSLNoContextAvailable = -4188,
  kNSLRequestBufferAlreadyInList = -4189,
  kNSLInvalidPluginSpec = -4190,
  kNSLNoSupportForService = -4191,
  kNSLBadNetConnection = -4192,
  kNSLBadDataTypeErr = -4193,
  kNSLBadServiceTypeErr = -4194,
  kNSLBadReferenceErr = -4195,
  kNSLNoElementsInList = -4196,
  kNSLInsufficientOTVer = -4197,
  kNSLInsufficientSysVer = -4198,
  kNSLNotInitialized = -4199,
  kNSLInitializationFailed = -4200
};




enum {
  kDTPHoldJobErr = -4200,
  kDTPStopQueueErr = -4201,
  kDTPTryAgainErr = -4202,
  kDTPAbortJobErr = 128
};



enum {

  cmElementTagNotFound = -4200,
  cmIndexRangeErr = -4201,
  cmCantDeleteElement = -4202,
  cmFatalProfileErr = -4203,
  cmInvalidProfile = -4204,
  cmInvalidProfileLocation = -4205,
  cmCantCopyModifiedV1Profile = -4215,

  cmInvalidSearch = -4206,
  cmSearchError = -4207,
  cmErrIncompatibleProfile = -4208,
  cmInvalidColorSpace = -4209,
  cmInvalidSrcMap = -4210,
  cmInvalidDstMap = -4211,
  cmNoGDevicesError = -4212,
  cmInvalidProfileComment = -4213,
  cmRangeOverFlow = -4214,
  cmNamedColorNotFound = -4216,
  cmCantGamutCheckError = -4217
};


enum {
  badFolderDescErr = -4270,
  duplicateFolderDescErr = -4271,
  noMoreFolderDescErr = -4272,
  invalidFolderTypeErr = -4273,
  duplicateRoutingErr = -4274,
  routingNotFoundErr = -4275,
  badRoutingSizeErr = -4276
};



enum {
  coreFoundationUnknownErr = -4960
};


enum {
  errCoreEndianDataTooShortForFormat = -4940,
  errCoreEndianDataTooLongForFormat = -4941,
  errCoreEndianDataDoesNotMatchFormat = -4942
};



enum {
  internalScrapErr = -4988,
  duplicateScrapFlavorErr = -4989,
  badScrapRefErr = -4990,
  processStateIncorrectErr = -4991,
  scrapPromiseNotKeptErr = -4992,
  noScrapPromiseKeeperErr = -4993,
  nilScrapFlavorDataErr = -4994,
  scrapFlavorFlagsMismatchErr = -4995,
  scrapFlavorSizeMismatchErr = -4996,
  illegalScrapFlavorFlagsErr = -4997,
  illegalScrapFlavorTypeErr = -4998,
  illegalScrapFlavorSizeErr = -4999,
  scrapFlavorNotFoundErr = -102,
  needClearScrapErr = -100
};


enum {

  afpAccessDenied = -5000,
  afpAuthContinue = -5001,
  afpBadUAM = -5002,
  afpBadVersNum = -5003,
  afpBitmapErr = -5004,
  afpCantMove = -5005,
  afpDenyConflict = -5006,
  afpDirNotEmpty = -5007,
  afpDiskFull = -5008,
  afpEofError = -5009,
  afpFileBusy = -5010,
  afpFlatVol = -5011,
  afpItemNotFound = -5012,
  afpLockErr = -5013,
  afpMiscErr = -5014,
  afpNoMoreLocks = -5015,
  afpNoServer = -5016,
  afpObjectExists = -5017,
  afpObjectNotFound = -5018,
  afpParmErr = -5019,
  afpRangeNotLocked = -5020,
  afpRangeOverlap = -5021,
  afpSessClosed = -5022,
  afpUserNotAuth = -5023,
  afpCallNotSupported = -5024,
  afpObjectTypeErr = -5025,
  afpTooManyFilesOpen = -5026,
  afpServerGoingDown = -5027,
  afpCantRename = -5028,
  afpDirNotFound = -5029,
  afpIconTypeError = -5030,
  afpVolLocked = -5031,
  afpObjectLocked = -5032,
  afpContainsSharedErr = -5033,
  afpIDNotFound = -5034,
  afpIDExists = -5035,
  afpDiffVolErr = -5036,
  afpCatalogChanged = -5037,
  afpSameObjectErr = -5038,
  afpBadIDErr = -5039,
  afpPwdSameErr = -5040,
  afpPwdTooShortErr = -5041,
  afpPwdExpiredErr = -5042,
  afpInsideSharedErr = -5043,

  afpInsideTrashErr = -5044,

  afpPwdNeedsChangeErr = -5045,
  afpPwdPolicyErr = -5046,
  afpAlreadyLoggedInErr = -5047,
  afpCallNotAllowed = -5048
};

enum {

  afpBadDirIDType = -5060,
  afpCantMountMoreSrvre = -5061,
  afpAlreadyMounted = -5062,
  afpSameNodeErr = -5063
};






enum {
  numberFormattingNotANumberErr = -5200,
  numberFormattingOverflowInDestinationErr = -5201,
  numberFormattingBadNumberFormattingObjectErr = -5202,
  numberFormattingSpuriousCharErr = -5203,
  numberFormattingLiteralMissingErr = -5204,
  numberFormattingDelimiterMissingErr = -5205,
  numberFormattingEmptyFormatErr = -5206,
  numberFormattingBadFormatErr = -5207,
  numberFormattingBadOptionsErr = -5208,
  numberFormattingBadTokenErr = -5209,
  numberFormattingUnOrderedCurrencyRangeErr = -5210,
  numberFormattingBadCurrencyPositionErr = -5211,
  numberFormattingNotADigitErr = -5212,
  numberFormattingUnOrdredCurrencyRangeErr = -5210,
  numberFortmattingNotADigitErr = -5212
};


enum {
  textParserBadParamErr = -5220,
  textParserObjectNotFoundErr = -5221,
  textParserBadTokenValueErr = -5222,
  textParserBadParserObjectErr = -5223,
  textParserParamErr = -5224,
  textParserNoMoreTextErr = -5225,
  textParserBadTextLanguageErr = -5226,
  textParserBadTextEncodingErr = -5227,
  textParserNoSuchTokenFoundErr = -5228,
  textParserNoMoreTokensErr = -5229
};

enum {
  errUnknownAttributeTag = -5240,
  errMarginWilllNotFit = -5241,
  errNotInImagingMode = -5242,
  errAlreadyInImagingMode = -5243,
  errEngineNotFound = -5244,
  errIteratorReachedEnd = -5245,
  errInvalidRange = -5246,
  errOffsetNotOnElementBounday = -5247,
  errNoHiliteText = -5248,
  errEmptyScrap = -5249,
  errReadOnlyText = -5250,
  errUnknownElement = -5251,
  errNonContiuousAttribute = -5252,
  errCannotUndo = -5253
};



enum {
  hrHTMLRenderingLibNotInstalledErr = -5360,
  hrMiscellaneousExceptionErr = -5361,
  hrUnableToResizeHandleErr = -5362,
  hrURLNotHandledErr = -5363
};



enum {
  errIANoErr = 0,
  errIAUnknownErr = -5380,
  errIAAllocationErr = -5381,
  errIAParamErr = -5382,
  errIANoMoreItems = -5383,
  errIABufferTooSmall = -5384,
  errIACanceled = -5385,
  errIAInvalidDocument = -5386,
  errIATextExtractionErr = -5387,
  errIAEndOfTextRun = -5388
};



enum {
  qtsBadSelectorErr = -5400,
  qtsBadStateErr = -5401,
  qtsBadDataErr = -5402,
  qtsUnsupportedDataTypeErr = -5403,
  qtsUnsupportedRateErr = -5404,
  qtsUnsupportedFeatureErr = -5405,
  qtsTooMuchDataErr = -5406,
  qtsUnknownValueErr = -5407,
  qtsTimeoutErr = -5408,
  qtsConnectionFailedErr = -5420,
  qtsAddressBusyErr = -5421
};


enum {

  gestaltUnknownErr = -5550,
  gestaltUndefSelectorErr = -5551,
  gestaltDupSelectorErr = -5552,
  gestaltLocationErr = -5553
};



enum {
  menuPropertyInvalidErr = -5603,
  menuPropertyInvalid = menuPropertyInvalidErr,
  menuPropertyNotFoundErr = -5604,
  menuNotFoundErr = -5620,
  menuUsesSystemDefErr = -5621,
  menuItemNotFoundErr = -5622,
  menuInvalidErr = -5623
};



enum {
  errInvalidWindowPtr = -5600,
  errInvalidWindowRef = -5600,
  errUnsupportedWindowAttributesForClass = -5601,
  errWindowDoesNotHaveProxy = -5602,
  errInvalidWindowProperty = -5603,
  errWindowPropertyNotFound = -5604,
  errUnrecognizedWindowClass = -5605,
  errCorruptWindowDescription = -5606,
  errUserWantsToDragWindow = -5607,
  errWindowsAlreadyInitialized = -5608,
  errFloatingWindowsNotInitialized = -5609,
  errWindowNotFound = -5610,
  errWindowDoesNotFitOnscreen = -5611,
  windowAttributeImmutableErr = -5612,
  windowAttributesConflictErr = -5613,
  windowManagerInternalErr = -5614,
  windowWrongStateErr = -5615,
  windowGroupInvalidErr = -5616,
  windowAppModalStateAlreadyExistsErr = -5617,
  windowNoAppModalStateErr = -5618,
  errWindowDoesntSupportFocus = -30583,
  errWindowRegionCodeInvalid = -30593
};



enum {
  dialogNoTimeoutErr = -5640
};



enum {
  kNavWrongDialogStateErr = -5694,
  kNavWrongDialogClassErr = -5695,
  kNavInvalidSystemConfigErr = -5696,
  kNavCustomControlMessageFailedErr = -5697,
  kNavInvalidCustomControlMessageErr = -5698,
  kNavMissingKindStringErr = -5699
};



enum {
  collectionItemLockedErr = -5750,
  collectionItemNotFoundErr = -5751,
  collectionIndexRangeErr = -5752,
  collectionVersionErr = -5753
};



enum {
  kQTSSUnknownErr = -6150
};


enum {

  kDMGenErr = -6220,

  kDMMirroringOnAlready = -6221,
  kDMWrongNumberOfDisplays = -6222,
  kDMMirroringBlocked = -6223,
  kDMCantBlock = -6224,
  kDMMirroringNotOn = -6225,

  kSysSWTooOld = -6226,
  kDMSWNotInitializedErr = -6227,
  kDMDriverNotDisplayMgrAwareErr = -6228,
  kDMDisplayNotFoundErr = -6229,
  kDMNotFoundErr = -6229,
  kDMDisplayAlreadyInstalledErr = -6230,
  kDMMainDisplayCannotMoveErr = -6231,
  kDMNoDeviceTableclothErr = -6231,
  kDMFoundErr = -6232
};





enum {
  laTooSmallBufferErr = -6984,
  laEnvironmentBusyErr = -6985,
  laEnvironmentNotFoundErr = -6986,
  laEnvironmentExistErr = -6987,
  laInvalidPathErr = -6988,
  laNoMoreMorphemeErr = -6989,
  laFailAnalysisErr = -6990,
  laTextOverFlowErr = -6991,
  laDictionaryNotOpenedErr = -6992,
  laDictionaryUnknownErr = -6993,
  laDictionaryTooManyErr = -6994,
  laPropertyValueErr = -6995,
  laPropertyUnknownErr = -6996,
  laPropertyIsReadOnlyErr = -6997,
  laPropertyNotFoundErr = -6998,
  laPropertyErr = -6999,
  laEngineNotFoundErr = -7000
};


enum {
  kUSBNoErr = 0,
  kUSBNoTran = 0,
  kUSBNoDelay = 0,
  kUSBPending = 1
};
# 1804 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  kUSBNotSent2Err = -6901,
  kUSBNotSent1Err = -6902,
  kUSBBufUnderRunErr = -6903,
  kUSBBufOvrRunErr = -6904,
  kUSBRes2Err = -6905,
  kUSBRes1Err = -6906,
  kUSBUnderRunErr = -6907,
  kUSBOverRunErr = -6908,
  kUSBWrongPIDErr = -6909,
  kUSBPIDCheckErr = -6910,
  kUSBNotRespondingErr = -6911,
  kUSBEndpointStallErr = -6912,
  kUSBDataToggleErr = -6913,
  kUSBBitstufErr = -6914,
  kUSBCRCErr = -6915,
  kUSBLinkErr = -6916
};






enum {
  kUSBQueueFull = -6948,
  kUSBNotHandled = -6987,
  kUSBUnknownNotification = -6949,
  kUSBBadDispatchTable = -6950
};







enum {
  kUSBInternalReserved10 = -6951,
  kUSBInternalReserved9 = -6952,
  kUSBInternalReserved8 = -6953,
  kUSBInternalReserved7 = -6954,
  kUSBInternalReserved6 = -6955,
  kUSBInternalReserved5 = -6956,
  kUSBInternalReserved4 = -6957,
  kUSBInternalReserved3 = -6958,
  kUSBInternalReserved2 = -6959,
  kUSBInternalReserved1 = -6960
};


enum {
  kUSBPortDisabled = -6969,
  kUSBQueueAborted = -6970,
  kUSBTimedOut = -6971,
  kUSBDeviceDisconnected = -6972,
  kUSBDeviceNotSuspended = -6973,
  kUSBDeviceSuspended = -6974,
  kUSBInvalidBuffer = -6975,
  kUSBDevicePowerProblem = -6976,
  kUSBDeviceBusy = -6977,
  kUSBUnknownInterfaceErr = -6978,
  kUSBPipeStalledError = -6979,
  kUSBPipeIdleError = -6980,
  kUSBNoBandwidthError = -6981,
  kUSBAbortedError = -6982,
  kUSBFlagsError = -6983,
  kUSBCompletionError = -6984,
  kUSBPBLengthError = -6985,
  kUSBPBVersionError = -6986,
  kUSBNotFound = -6987,
  kUSBOutOfMemoryErr = -6988,
  kUSBDeviceErr = -6989,
  kUSBNoDeviceErr = -6990,
  kUSBAlreadyOpenErr = -6991,
  kUSBTooManyTransactionsErr = -6992,
  kUSBUnknownRequestErr = -6993,
  kUSBRqErr = -6994,
  kUSBIncorrectTypeErr = -6995,
  kUSBTooManyPipesErr = -6996,
  kUSBUnknownPipeErr = -6997,
  kUSBUnknownDeviceErr = -6998,
  kUSBInternalErr = -6999
};





enum {
  dcmParamErr = -7100,
  dcmNotDictionaryErr = -7101,
  dcmBadDictionaryErr = -7102,
  dcmPermissionErr = -7103,
  dcmDictionaryNotOpenErr = -7104,
  dcmDictionaryBusyErr = -7105,
  dcmBlockFullErr = -7107,
  dcmNoRecordErr = -7108,
  dcmDupRecordErr = -7109,
  dcmNecessaryFieldErr = -7110,
  dcmBadFieldInfoErr = -7111,
  dcmBadFieldTypeErr = -7112,
  dcmNoFieldErr = -7113,
  dcmBadKeyErr = -7115,
  dcmTooManyKeyErr = -7116,
  dcmBadDataSizeErr = -7117,
  dcmBadFindMethodErr = -7118,
  dcmBadPropertyErr = -7119,
  dcmProtectedErr = -7121,
  dcmNoAccessMethodErr = -7122,
  dcmBadFeatureErr = -7124,
  dcmIterationCompleteErr = -7126,
  dcmBufferOverflowErr = -7127
};



enum {
  kRAInvalidParameter = -7100,
  kRAInvalidPort = -7101,
  kRAStartupFailed = -7102,
  kRAPortSetupFailed = -7103,
  kRAOutOfMemory = -7104,
  kRANotSupported = -7105,
  kRAMissingResources = -7106,
  kRAIncompatiblePrefs = -7107,
  kRANotConnected = -7108,
  kRAConnectionCanceled = -7109,
  kRAUnknownUser = -7110,
  kRAInvalidPassword = -7111,
  kRAInternalError = -7112,
  kRAInstallationDamaged = -7113,
  kRAPortBusy = -7114,
  kRAUnknownPortState = -7115,
  kRAInvalidPortState = -7116,
  kRAInvalidSerialProtocol = -7117,
  kRAUserLoginDisabled = -7118,
  kRAUserPwdChangeRequired = -7119,
  kRAUserPwdEntryRequired = -7120,
  kRAUserInteractionRequired = -7121,
  kRAInitOpenTransportFailed = -7122,
  kRARemoteAccessNotReady = -7123,
  kRATCPIPInactive = -7124,
  kRATCPIPNotConfigured = -7125,
  kRANotPrimaryInterface = -7126,
  kRAConfigurationDBInitErr = -7127,
  kRAPPPProtocolRejected = -7128,
  kRAPPPAuthenticationFailed = -7129,
  kRAPPPNegotiationFailed = -7130,
  kRAPPPUserDisconnected = -7131,
  kRAPPPPeerDisconnected = -7132,
  kRAPeerNotResponding = -7133,
  kRAATalkInactive = -7134,
  kRAExtAuthenticationFailed = -7135,
  kRANCPRejectedbyPeer = -7136,
  kRADuplicateIPAddr = -7137,
  kRACallBackFailed = -7138,
  kRANotEnabled = -7139
};
# 1972 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  kATSUInvalidTextLayoutErr = -8790,


  kATSUInvalidStyleErr = -8791,


  kATSUInvalidTextRangeErr = -8792,


  kATSUFontsMatched = -8793,


  kATSUFontsNotMatched = -8794,


  kATSUNoCorrespondingFontErr = -8795,






  kATSUInvalidFontErr = -8796,
  kATSUInvalidAttributeValueErr = -8797,

  kATSUInvalidAttributeSizeErr = -8798,

  kATSUInvalidAttributeTagErr = -8799,

  kATSUInvalidCacheErr = -8800,




  kATSUNotSetErr = -8801,



  kATSUNoStyleRunsAssignedErr = -8802,

  kATSUQuickDrawTextErr = -8803,

  kATSULowLevelErr = -8804,

  kATSUNoFontCmapAvailableErr = -8805,

  kATSUNoFontScalerAvailableErr = -8806,

  kATSUCoordinateOverflowErr = -8807,

  kATSULineBreakInWord = -8808,


  kATSUBusyObjectErr = -8809
};
# 2037 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {

  kTextUnsupportedEncodingErr = -8738,
  kTextMalformedInputErr = -8739,
  kTextUndefinedElementErr = -8740,
  kTECMissingTableErr = -8745,
  kTECTableChecksumErr = -8746,
  kTECTableFormatErr = -8747,
  kTECCorruptConverterErr = -8748,
  kTECNoConversionPathErr = -8749,
  kTECBufferBelowMinimumSizeErr = -8750,
  kTECArrayFullErr = -8751,
  kTECBadTextRunErr = -8752,
  kTECPartialCharErr = -8753,
  kTECUnmappableElementErr = -8754,
  kTECIncompleteElementErr = -8755,
  kTECDirectionErr = -8756,
  kTECGlobalsUnavailableErr = -8770,
  kTECItemUnavailableErr = -8771,

  kTECUsedFallbacksStatus = -8783,
  kTECNeedFlushStatus = -8784,
  kTECOutputBufferFullStatus = -8785,

  unicodeChecksumErr = -8769,
  unicodeNoTableErr = -8768,
  unicodeVariantErr = -8767,
  unicodeFallbacksErr = -8766,
  unicodePartConvertErr = -8765,
  unicodeBufErr = -8764,
  unicodeCharErr = -8763,
  unicodeElementErr = -8762,
  unicodeNotFoundErr = -8761,
  unicodeTableFormatErr = -8760,
  unicodeDirectionErr = -8759,
  unicodeContextualErr = -8758,
  unicodeTextEncodingDataErr = -8757
};



enum {
  kUTCUnderflowErr = -8850,
  kUTCOverflowErr = -8851,
  kIllegalClockValueErr = -8852
};





enum {
  kATSUInvalidFontFallbacksErr = -8900,

  kATSUUnsupportedStreamFormatErr = -8901,

  kATSUBadStreamErr = -8902,


  kATSUOutputBufferTooSmallErr = -8903,

  kATSUInvalidCallInsideCallbackErr = -8904,

  kATSUNoFontNameErr = -8905,

  kATSULastErr = -8959
};



enum {
  codecErr = -8960,
  noCodecErr = -8961,
  codecUnimpErr = -8962,
  codecSizeErr = -8963,
  codecScreenBufErr = -8964,
  codecImageBufErr = -8965,
  codecSpoolErr = -8966,
  codecAbortErr = -8967,
  codecWouldOffscreenErr = -8968,
  codecBadDataErr = -8969,
  codecDataVersErr = -8970,
  codecExtensionNotFoundErr = -8971,
  scTypeNotFoundErr = codecExtensionNotFoundErr,
  codecConditionErr = -8972,
  codecOpenErr = -8973,
  codecCantWhenErr = -8974,
  codecCantQueueErr = -8975,
  codecNothingToBlitErr = -8976,
  codecNoMemoryPleaseWaitErr = -8977,
  codecDisabledErr = -8978,
  codecNeedToFlushChainErr = -8979,
  lockPortBitsBadSurfaceErr = -8980,
  lockPortBitsWindowMovedErr = -8981,
  lockPortBitsWindowResizedErr = -8982,
  lockPortBitsWindowClippedErr = -8983,
  lockPortBitsBadPortErr = -8984,
  lockPortBitsSurfaceLostErr = -8985,
  codecParameterDialogConfirm = -8986,
  codecNeedAccessKeyErr = -8987,
  codecOffscreenFailedErr = -8988,
  codecDroppedFrameErr = -8989,
  directXObjectAlreadyExists = -8990,
  lockPortBitsWrongGDeviceErr = -8991,
  codecOffscreenFailedPleaseRetryErr = -8992,
  badCodecCharacterizationErr = -8993,
  noThumbnailFoundErr = -8994
};



enum {
  kBadAdapterErr = -9050,
  kBadAttributeErr = -9051,
  kBadBaseErr = -9052,
  kBadEDCErr = -9053,
  kBadIRQErr = -9054,
  kBadOffsetErr = -9055,
  kBadPageErr = -9056,
  kBadSizeErr = -9057,
  kBadSocketErr = -9058,
  kBadTypeErr = -9059,
  kBadVccErr = -9060,
  kBadVppErr = -9061,
  kBadWindowErr = -9062,
  kBadArgLengthErr = -9063,
  kBadArgsErr = -9064,
  kBadHandleErr = -9065,
  kBadCISErr = -9066,
  kBadSpeedErr = -9067,
  kReadFailureErr = -9068,
  kWriteFailureErr = -9069,
  kGeneralFailureErr = -9070,
  kNoCardErr = -9071,
  kUnsupportedFunctionErr = -9072,
  kUnsupportedModeErr = -9073,
  kBusyErr = -9074,
  kWriteProtectedErr = -9075,
  kConfigurationLockedErr = -9076,
  kInUseErr = -9077,
  kNoMoreItemsErr = -9078,
  kOutOfResourceErr = -9079,
  kNoCardSevicesSocketsErr = -9080,
  kInvalidRegEntryErr = -9081,
  kBadLinkErr = -9082,
  kBadDeviceErr = -9083,
  k16BitCardErr = -9084,
  kCardBusCardErr = -9085,
  kPassCallToChainErr = -9086,
  kCantConfigureCardErr = -9087,
  kPostCardEventErr = -9088,
  kInvalidDeviceNumber = -9089,
  kUnsupportedVsErr = -9090,
  kInvalidCSClientErr = -9091,
  kBadTupleDataErr = -9092,
  kBadCustomIFIDErr = -9093,
  kNoIOWindowRequestedErr = -9094,
  kNoMoreTimerClientsErr = -9095,
  kNoMoreInterruptSlotsErr = -9096,
  kNoClientTableErr = -9097,
  kUnsupportedCardErr = -9098,
  kNoCardEnablersFoundErr = -9099,
  kNoEnablerForCardErr = -9100,
  kNoCompatibleNameErr = -9101,
  kClientRequestDenied = -9102,

  kNotReadyErr = -9103,
  kTooManyIOWindowsErr = -9104,
  kAlreadySavedStateErr = -9105,
  kAttemptDupCardEntryErr = -9106,
  kCardPowerOffErr = -9107,
  kNotZVCapableErr = -9108,
  kNoCardBusCISErr = -9109
};


enum {
  noDeviceForChannel = -9400,
  grabTimeComplete = -9401,
  cantDoThatInCurrentMode = -9402,
  notEnoughMemoryToGrab = -9403,
  notEnoughDiskSpaceToGrab = -9404,
  couldntGetRequiredComponent = -9405,
  badSGChannel = -9406,
  seqGrabInfoNotAvailable = -9407,
  deviceCantMeetRequest = -9408,
  badControllerHeight = -9994,
  editingNotAllowed = -9995,
  controllerBoundsNotExact = -9996,
  cannotSetWidthOfAttachedController = -9997,
  controllerHasFixedHeight = -9998,
  cannotMoveAttachedController = -9999
};


enum {
  errAEBadKeyForm = -10002,
  errAECantHandleClass = -10010,
  errAECantSupplyType = -10009,
  errAECantUndo = -10015,
  errAEEventFailed = -10000,
  errAEIndexTooLarge = -10007,
  errAEInTransaction = -10011,
  errAELocalOnly = -10016,
  errAENoSuchTransaction = -10012,
  errAENotAnElement = -10008,
  errAENotASingleObject = -10014,
  errAENotModifiable = -10003,
  errAENoUserSelection = -10013,
  errAEPrivilegeError = -10004,
  errAEReadDenied = -10005,
  errAETypeError = -10001,
  errAEWriteDenied = -10006,
  errAENotAnEnumMember = -10023,
  errAECantPutThatThere = -10024,
  errAEPropertiesClash = -10025
};


enum {
  telGenericError = -1,
  telNoErr = 0,
  telNoTools = 8,
  telBadTermErr = -10001,
  telBadDNErr = -10002,
  telBadCAErr = -10003,
  telBadHandErr = -10004,
  telBadProcErr = -10005,
  telCAUnavail = -10006,
  telNoMemErr = -10007,
  telNoOpenErr = -10008,
  telBadHTypeErr = -10010,
  telHTypeNotSupp = -10011,
  telBadLevelErr = -10012,
  telBadVTypeErr = -10013,
  telVTypeNotSupp = -10014,
  telBadAPattErr = -10015,
  telAPattNotSupp = -10016,
  telBadIndex = -10017,
  telIndexNotSupp = -10018,
  telBadStateErr = -10019,
  telStateNotSupp = -10020,
  telBadIntExt = -10021,
  telIntExtNotSupp = -10022,
  telBadDNDType = -10023,
  telDNDTypeNotSupp = -10024,
  telFeatNotSub = -10030,
  telFeatNotAvail = -10031,
  telFeatActive = -10032,
  telFeatNotSupp = -10033,
  telConfLimitErr = -10040,
  telConfNoLimit = -10041,
  telConfErr = -10042,
  telConfRej = -10043,
  telTransferErr = -10044,
  telTransferRej = -10045,
  telCBErr = -10046,
  telConfLimitExceeded = -10047,
  telBadDNType = -10050,
  telBadPageID = -10051,
  telBadIntercomID = -10052,
  telBadFeatureID = -10053,
  telBadFwdType = -10054,
  telBadPickupGroupID = -10055,
  telBadParkID = -10056,
  telBadSelect = -10057,
  telBadBearerType = -10058,
  telBadRate = -10059,
  telDNTypeNotSupp = -10060,
  telFwdTypeNotSupp = -10061,
  telBadDisplayMode = -10062,
  telDisplayModeNotSupp = -10063,
  telNoCallbackRef = -10064,
  telAlreadyOpen = -10070,
  telStillNeeded = -10071,
  telTermNotOpen = -10072,
  telCANotAcceptable = -10080,
  telCANotRejectable = -10081,
  telCANotDeflectable = -10082,
  telPBErr = -10090,
  telBadFunction = -10091,

  telNoSuchTool = -10102,
  telUnknownErr = -10103,
  telNoCommFolder = -10106,
  telInitFailed = -10107,
  telBadCodeResource = -10108,
  telDeviceNotFound = -10109,
  telBadProcID = -10110,
  telValidateFailed = -10111,
  telAutoAnsNotOn = -10112,
  telDetAlreadyOn = -10113,
  telBadSWErr = -10114,
  telBadSampleRate = -10115,
  telNotEnoughdspBW = -10116
};

enum {
  errTaskNotFound = -10780
};





enum {

  pmBusyErr = -13000,
  pmReplyTOErr = -13001,
  pmSendStartErr = -13002,
  pmSendEndErr = -13003,
  pmRecvStartErr = -13004,
  pmRecvEndErr = -13005
};


enum {
  kPowerHandlerExistsForDeviceErr = -13006,
  kPowerHandlerNotFoundForDeviceErr = -13007,
  kPowerHandlerNotFoundForProcErr = -13008,
  kPowerMgtMessageNotHandled = -13009,
  kPowerMgtRequestDenied = -13010,
  kCantReportProcessorTemperatureErr = -13013,
  kProcessorTempRoutineRequiresMPLib2 = -13014,
  kNoSuchPowerSource = -13020,
  kBridgeSoftwareRunningCantSleep = -13038
};



enum {
  debuggingExecutionContextErr = -13880,
  debuggingDuplicateSignatureErr = -13881,
  debuggingDuplicateOptionErr = -13882,
  debuggingInvalidSignatureErr = -13883,
  debuggingInvalidOptionErr = -13884,
  debuggingInvalidNameErr = -13885,
  debuggingNoCallbackErr = -13886,
  debuggingNoMatchErr = -13887
};



enum {
  kHIDVersionIncompatibleErr = -13909,
  kHIDDeviceNotReady = -13910
};



enum {
  kHIDSuccess = 0,
  kHIDInvalidRangePageErr = -13923,
  kHIDReportIDZeroErr = -13924,
  kHIDReportCountZeroErr = -13925,
  kHIDReportSizeZeroErr = -13926,
  kHIDUnmatchedDesignatorRangeErr = -13927,
  kHIDUnmatchedStringRangeErr = -13928,
  kHIDInvertedUsageRangeErr = -13929,
  kHIDUnmatchedUsageRangeErr = -13930,
  kHIDInvertedPhysicalRangeErr = -13931,
  kHIDInvertedLogicalRangeErr = -13932,
  kHIDBadLogicalMaximumErr = -13933,
  kHIDBadLogicalMinimumErr = -13934,
  kHIDUsagePageZeroErr = -13935,
  kHIDEndOfDescriptorErr = -13936,
  kHIDNotEnoughMemoryErr = -13937,
  kHIDBadParameterErr = -13938,
  kHIDNullPointerErr = -13939,
  kHIDInvalidReportLengthErr = -13940,
  kHIDInvalidReportTypeErr = -13941,
  kHIDBadLogPhysValuesErr = -13942,
  kHIDIncompatibleReportErr = -13943,
  kHIDInvalidPreparsedDataErr = -13944,
  kHIDNotValueArrayErr = -13945,
  kHIDUsageNotFoundErr = -13946,
  kHIDValueOutOfRangeErr = -13947,
  kHIDBufferTooSmallErr = -13948,
  kHIDNullStateErr = -13949,
  kHIDBaseError = -13950
};



enum {
  kModemOutOfMemory = -14000,
  kModemPreferencesMissing = -14001,
  kModemScriptMissing = -14002
};




enum {
  kTXNEndIterationErr = -22000,
  kTXNCannotAddFrameErr = -22001,
  kTXNInvalidFrameIDErr = -22002,
  kTXNIllegalToCrossDataBoundariesErr = -22003,
  kTXNUserCanceledOperationErr = -22004,
  kTXNBadDefaultFileTypeWarning = -22005,
  kTXNCannotSetAutoIndentErr = -22006,
  kTXNRunIndexOutofBoundsErr = -22007,
  kTXNNoMatchErr = -22008,
  kTXNAttributeTagInvalidForRunErr = -22009,
  kTXNSomeOrAllTagsInvalidForRunErr = -22010,
  kTXNInvalidRunIndex = -22011,
  kTXNAlreadyInitializedErr = -22012,
  kTXNCannotTurnTSMOffWhenUsingUnicodeErr = -22013,
  kTXNCopyNotAllowedInEchoModeErr = -22014,
  kTXNDataTypeNotAllowedErr = -22015,
  kTXNATSUIIsNotInstalledErr = -22016,
  kTXNOutsideOfLineErr = -22017,
  kTXNOutsideOfFrameErr = -22018
};





enum {
  printerStatusOpCodeNotSupportedErr = -25280
};



enum {
  errKCNotAvailable = -25291,
  errKCReadOnly = -25292,
  errKCAuthFailed = -25293,
  errKCNoSuchKeychain = -25294,
  errKCInvalidKeychain = -25295,
  errKCDuplicateKeychain = -25296,
  errKCDuplicateCallback = -25297,
  errKCInvalidCallback = -25298,
  errKCDuplicateItem = -25299,
  errKCItemNotFound = -25300,
  errKCBufferTooSmall = -25301,
  errKCDataTooLarge = -25302,
  errKCNoSuchAttr = -25303,
  errKCInvalidItemRef = -25304,
  errKCInvalidSearchRef = -25305,
  errKCNoSuchClass = -25306,
  errKCNoDefaultKeychain = -25307,
  errKCInteractionNotAllowed = -25308,
  errKCReadOnlyAttr = -25309,
  errKCWrongKCVersion = -25310,
  errKCKeySizeNotAllowed = -25311,
  errKCNoStorageModule = -25312,
  errKCNoCertificateModule = -25313,
  errKCNoPolicyModule = -25314,
  errKCInteractionRequired = -25315,
  errKCDataNotAvailable = -25316,
  errKCDataNotModifiable = -25317,
  errKCCreateChainFailed = -25318
};



enum {
  kUCOutputBufferTooSmall = -25340,
  kUCTextBreakLocatorMissingType = -25341
};

enum {
  kUCTSNoKeysAddedToObjectErr = -25342,
  kUCTSSearchListErr = -25343
};

enum {
  kUCTokenizerIterationFinished = -25344,
  kUCTokenizerUnknownLang = -25345,
  kUCTokenNotFound = -25346
};


enum {
  kMPIterationEndErr = -29275,
  kMPPrivilegedErr = -29276,
  kMPProcessCreatedErr = -29288,
  kMPProcessTerminatedErr = -29289,
  kMPTaskCreatedErr = -29290,
  kMPTaskBlockedErr = -29291,
  kMPTaskStoppedErr = -29292,
  kMPBlueBlockingErr = -29293,
  kMPDeletedErr = -29295,
  kMPTimeoutErr = -29296,
  kMPTaskAbortedErr = -29297,
  kMPInsufficientResourcesErr = -29298,
  kMPInvalidIDErr = -29299
};

enum {
  kMPNanokernelNeedsMemoryErr = -29294
};


enum {
  kCollateAttributesNotFoundErr = -29500,
  kCollateInvalidOptions = -29501,
  kCollateMissingUnicodeTableErr = -29502,
  kCollateUnicodeConvertFailedErr = -29503,
  kCollatePatternNotFoundErr = -29504,
  kCollateInvalidChar = -29505,
  kCollateBufferTooSmall = -29506,
  kCollateInvalidCollationRef = -29507
};



enum {
  kFNSInvalidReferenceErr = -29580,
  kFNSBadReferenceVersionErr = -29581,
  kFNSInvalidProfileErr = -29582,
  kFNSBadProfileVersionErr = -29583,
  kFNSDuplicateReferenceErr = -29584,
  kFNSMismatchErr = -29585,
  kFNSInsufficientDataErr = -29586,
  kFNSBadFlattenedSizeErr = -29587,
  kFNSNameNotFoundErr = -29589
};




enum {
  kLocalesBufferTooSmallErr = -30001,
  kLocalesTableFormatErr = -30002,
  kLocalesDefaultDisplayStatus = -30029
};



enum {
  kALMInternalErr = -30049,
  kALMGroupNotFoundErr = -30048,
  kALMNoSuchModuleErr = -30047,
  kALMModuleCommunicationErr = -30046,
  kALMDuplicateModuleErr = -30045,
  kALMInstallationErr = -30044,
  kALMDeferSwitchErr = -30043,
  kALMRebootFlagsLevelErr = -30042
};

enum {
  kALMLocationNotFoundErr = kALMGroupNotFoundErr
};



enum {
  kSSpInternalErr = -30340,
  kSSpVersionErr = -30341,
  kSSpCantInstallErr = -30342,
  kSSpParallelUpVectorErr = -30343,
  kSSpScaleToZeroErr = -30344
};



enum {
  kNSpInitializationFailedErr = -30360,
  kNSpAlreadyInitializedErr = -30361,
  kNSpTopologyNotSupportedErr = -30362,
  kNSpPipeFullErr = -30364,
  kNSpHostFailedErr = -30365,
  kNSpProtocolNotAvailableErr = -30366,
  kNSpInvalidGameRefErr = -30367,
  kNSpInvalidParameterErr = -30369,
  kNSpOTNotPresentErr = -30370,
  kNSpOTVersionTooOldErr = -30371,
  kNSpMemAllocationErr = -30373,
  kNSpAlreadyAdvertisingErr = -30374,
  kNSpNotAdvertisingErr = -30376,
  kNSpInvalidAddressErr = -30377,
  kNSpFreeQExhaustedErr = -30378,
  kNSpRemovePlayerFailedErr = -30379,
  kNSpAddressInUseErr = -30380,
  kNSpFeatureNotImplementedErr = -30381,
  kNSpNameRequiredErr = -30382,
  kNSpInvalidPlayerIDErr = -30383,
  kNSpInvalidGroupIDErr = -30384,
  kNSpNoPlayersErr = -30385,
  kNSpNoGroupsErr = -30386,
  kNSpNoHostVolunteersErr = -30387,
  kNSpCreateGroupFailedErr = -30388,
  kNSpAddPlayerFailedErr = -30389,
  kNSpInvalidDefinitionErr = -30390,
  kNSpInvalidProtocolRefErr = -30391,
  kNSpInvalidProtocolListErr = -30392,
  kNSpTimeoutErr = -30393,
  kNSpGameTerminatedErr = -30394,
  kNSpConnectFailedErr = -30395,
  kNSpSendFailedErr = -30396,
  kNSpMessageTooBigErr = -30397,
  kNSpCantBlockErr = -30398,
  kNSpJoinFailedErr = -30399
};



enum {
  kISpInternalErr = -30420,
  kISpSystemListErr = -30421,
  kISpBufferToSmallErr = -30422,
  kISpElementInListErr = -30423,
  kISpElementNotInListErr = -30424,
  kISpSystemInactiveErr = -30425,
  kISpDeviceInactiveErr = -30426,
  kISpSystemActiveErr = -30427,
  kISpDeviceActiveErr = -30428,
  kISpListBusyErr = -30429
};


enum {
  kDSpNotInitializedErr = -30440L,
  kDSpSystemSWTooOldErr = -30441L,
  kDSpInvalidContextErr = -30442L,
  kDSpInvalidAttributesErr = -30443L,
  kDSpContextAlreadyReservedErr = -30444L,
  kDSpContextNotReservedErr = -30445L,
  kDSpContextNotFoundErr = -30446L,
  kDSpFrameRateNotReadyErr = -30447L,
  kDSpConfirmSwitchWarning = -30448L,
  kDSpInternalErr = -30449L,
  kDSpStereoContextErr = -30450L
};







enum {
  kFBCvTwinExceptionErr = -30500,
  kFBCnoIndexesFound = -30501,
  kFBCallocFailed = -30502,
  kFBCbadParam = -30503,
  kFBCfileNotIndexed = -30504,
  kFBCbadIndexFile = -30505,
  kFBCcompactionFailed = -30506,
  kFBCvalidationFailed = -30507,
  kFBCindexingFailed = -30508,
  kFBCcommitFailed = -30509,
  kFBCdeletionFailed = -30510,
  kFBCmoveFailed = -30511,
  kFBCtokenizationFailed = -30512,
  kFBCmergingFailed = -30513,
  kFBCindexCreationFailed = -30514,
  kFBCaccessorStoreFailed = -30515,
  kFBCaddDocFailed = -30516,
  kFBCflushFailed = -30517,
  kFBCindexNotFound = -30518,
  kFBCnoSearchSession = -30519,
  kFBCindexingCanceled = -30520,
  kFBCaccessCanceled = -30521,
  kFBCindexFileDestroyed = -30522,
  kFBCindexNotAvailable = -30523,
  kFBCsearchFailed = -30524,
  kFBCsomeFilesNotIndexed = -30525,
  kFBCillegalSessionChange = -30526,

  kFBCanalysisNotAvailable = -30527,
  kFBCbadIndexFileVersion = -30528,
  kFBCsummarizationCanceled = -30529,
  kFBCindexDiskIOFailed = -30530,
  kFBCbadSearchSession = -30531,
  kFBCnoSuchHit = -30532
};



enum {
  notAQTVRMovieErr = -30540,
  constraintReachedErr = -30541,
  callNotSupportedByNodeErr = -30542,
  selectorNotSupportedByNodeErr = -30543,
  invalidNodeIDErr = -30544,
  invalidViewStateErr = -30545,
  timeNotInViewErr = -30546,
  propertyNotSupportedByNodeErr = -30547,
  settingNotSupportedByNodeErr = -30548,
  limitReachedErr = -30549,
  invalidNodeFormatErr = -30550,
  invalidHotSpotIDErr = -30551,
  noMemoryNodeFailedInitialize = -30552,
  streamingNodeNotReadyErr = -30553,
  qtvrLibraryLoadErr = -30554,
  qtvrUninitialized = -30555
};



enum {
  themeInvalidBrushErr = -30560,
  themeProcessRegisteredErr = -30561,
  themeProcessNotRegisteredErr = -30562,
  themeBadTextColorErr = -30563,
  themeHasNoAccentsErr = -30564,
  themeBadCursorIndexErr = -30565,
  themeScriptFontNotFoundErr = -30566,
  themeMonitorDepthNotSupportedErr = -30567,
  themeNoAppropriateBrushErr = -30568
};







enum {






  errMessageNotSupported = -30580,







  errDataNotSupported = -30581,






  errControlDoesntSupportFocus = -30582,







  errUnknownControl = -30584,
# 2788 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
  errCouldntSetFocus = -30585,
# 2797 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
  errNoRootControl = -30586,





  errRootAlreadyExists = -30587,





  errInvalidPartCode = -30588,
# 2820 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
  errControlsAlreadyExist = -30589,





  errControlIsNotEmbedder = -30590,






  errDataSizeMismatch = -30591,






  errControlHiddenOrDisabled = -30592,






  errCantEmbedIntoSelf = -30594,






  errCantEmbedRoot = -30595,





  errItemNotControl = -30596,







  controlInvalidDataVersionErr = -30597,





  controlPropertyInvalid = -5603,






  controlPropertyNotFoundErr = -5604,




  controlHandleInvalidErr = -30599
};





enum {
  kURLInvalidURLReferenceError = -30770,
  kURLProgressAlreadyDisplayedError = -30771,
  kURLDestinationExistsError = -30772,
  kURLInvalidURLError = -30773,
  kURLUnsupportedSchemeError = -30774,
  kURLServerBusyError = -30775,
  kURLAuthenticationError = -30776,
  kURLPropertyNotYetKnownError = -30777,
  kURLUnknownPropertyError = -30778,
  kURLPropertyBufferTooSmallError = -30779,
  kURLUnsettablePropertyError = -30780,
  kURLInvalidCallError = -30781,
  kURLFileEmptyError = -30783,
  kURLExtensionFailureError = -30785,
  kURLInvalidConfigurationError = -30786,
  kURLAccessNotAvailableError = -30787,
  kURL68kNotSupportedError = -30788
};
# 2922 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  errCppGeneral = -32000,
  errCppbad_alloc = -32001,
  errCppbad_cast = -32002,
  errCppbad_exception = -32003,
  errCppbad_typeid = -32004,
  errCpplogic_error = -32005,
  errCppdomain_error = -32006,
  errCppinvalid_argument = -32007,
  errCpplength_error = -32008,
  errCppout_of_range = -32009,
  errCppruntime_error = -32010,
  errCppoverflow_error = -32011,
  errCpprange_error = -32012,
  errCppunderflow_error = -32013,
  errCppios_base_failure = -32014,
  errCppLastSystemDefinedError = -32020,
  errCppLastUserDefinedError = -32049
};


enum {
  badComponentInstance = (long)0x80008001,
  badComponentSelector = (long)0x80008002
};



enum {
  dsBusError = 1,
  dsAddressErr = 2,
  dsIllInstErr = 3,
  dsZeroDivErr = 4,
  dsChkErr = 5,
  dsOvflowErr = 6,
  dsPrivErr = 7,
  dsTraceErr = 8,
  dsLineAErr = 9,
  dsLineFErr = 10,
  dsMiscErr = 11,
  dsCoreErr = 12,
  dsIrqErr = 13,
  dsIOCoreErr = 14,
  dsLoadErr = 15,
  dsFPErr = 16,
  dsNoPackErr = 17,
  dsNoPk1 = 18,
  dsNoPk2 = 19
};

enum {
  dsNoPk3 = 20,
  dsNoPk4 = 21,
  dsNoPk5 = 22,
  dsNoPk6 = 23,
  dsNoPk7 = 24,
  dsMemFullErr = 25,
  dsBadLaunch = 26,
  dsFSErr = 27,
  dsStknHeap = 28,
  negZcbFreeErr = 33,
  dsFinderErr = 41,
  dsBadSlotInt = 51,
  dsBadSANEOpcode = 81,
  dsBadPatchHeader = 83,
  menuPrgErr = 84,
  dsMBarNFnd = 85,
  dsHMenuFindErr = 86,
  dsWDEFNotFound = 87,
  dsCDEFNotFound = 88,
  dsMDEFNotFound = 89
};

enum {
  dsNoFPU = 90,
  dsNoPatch = 98,
  dsBadPatch = 99,
  dsParityErr = 101,
  dsOldSystem = 102,
  ds32BitMode = 103,
  dsNeedToWriteBootBlocks = 104,
  dsNotEnoughRAMToBoot = 105,
  dsBufPtrTooLow = 106,
  dsVMDeferredFuncTableFull = 112,
  dsVMBadBackingStore = 113,
  dsCantHoldSystemHeap = 114,
  dsSystemRequiresPowerPC = 116,
  dsGibblyMovedToDisabledFolder = 117,
  dsUnBootableSystem = 118,
  dsMustUseFCBAccessors = 119,
  dsMacOSROMVersionTooOld = 120,
  dsLostConnectionToNetworkDisk = 121,
  dsRAMDiskTooBig = 122,
  dsWriteToSupervisorStackGuardPage = 128,
  dsReinsert = 30,
  shutDownAlert = 42,
  dsShutDownOrRestart = 20000,
  dsSwitchOffOrRestart = 20001,
  dsForcedQuit = 20002,
  dsRemoveDisk = 20003,
  dsDirtyDisk = 20004,
  dsShutDownOrResume = 20109,
  dsSCSIWarn = 20010,
  dsMBSysError = 29200,
  dsMBFlpySysError = 29201,
  dsMBATASysError = 29202,
  dsMBATAPISysError = 29203,
  dsMBExternFlpySysError = 29204,
  dsPCCardATASysError = 29205
};






enum {
  dsNoExtsMacsBug = -1,
  dsNoExtsDisassembler = -2,
  dsMacsBugInstalled = -10,
  dsDisassemblerInstalled = -11,
  dsExtensionsDisabled = -13,
  dsGreeting = 40,
  dsSysErr = 32767,

  WDEFNFnd = dsWDEFNotFound
};

enum {
  CDEFNFnd = dsCDEFNotFound,
  dsNotThe1 = 31,
  dsBadStartupDisk = 42,
  dsSystemFileErr = 43,
  dsHD20Installed = -12,
  mBarNFnd = -126,
  fsDSIntErr = -127,
  hMenuFindErr = -127,
  userBreak = -490,
  strUserBreak = -491,
  exUserBreak = -492
};


enum {

  dsBadLibrary = 1010,
  dsMixedModeFailure = 1011
};
# 3078 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
enum {
  kPOSIXErrorBase = 100000L,
  kPOSIXErrorEPERM = 100001L,
  kPOSIXErrorENOENT = 100002L,
  kPOSIXErrorESRCH = 100003L,
  kPOSIXErrorEINTR = 100004L,
  kPOSIXErrorEIO = 100005L,
  kPOSIXErrorENXIO = 100006L,
  kPOSIXErrorE2BIG = 100007L,
  kPOSIXErrorENOEXEC = 100008L,
  kPOSIXErrorEBADF = 100009L,
  kPOSIXErrorECHILD = 100010L,
  kPOSIXErrorEDEADLK = 100011L,
  kPOSIXErrorENOMEM = 100012L,
  kPOSIXErrorEACCES = 100013L,
  kPOSIXErrorEFAULT = 100014L,
  kPOSIXErrorENOTBLK = 100015L,
  kPOSIXErrorEBUSY = 100016L,
  kPOSIXErrorEEXIST = 100017L,
  kPOSIXErrorEXDEV = 100018L,
  kPOSIXErrorENODEV = 100019L,
  kPOSIXErrorENOTDIR = 100020L,
  kPOSIXErrorEISDIR = 100021L,
  kPOSIXErrorEINVAL = 100022L,
  kPOSIXErrorENFILE = 100023L,
  kPOSIXErrorEMFILE = 100024L,
  kPOSIXErrorENOTTY = 100025L,
  kPOSIXErrorETXTBSY = 100026L,
  kPOSIXErrorEFBIG = 100027L,
  kPOSIXErrorENOSPC = 100028L,
  kPOSIXErrorESPIPE = 100029L,
  kPOSIXErrorEROFS = 100030L,
  kPOSIXErrorEMLINK = 100031L,
  kPOSIXErrorEPIPE = 100032L,
  kPOSIXErrorEDOM = 100033L,
  kPOSIXErrorERANGE = 100034L,
  kPOSIXErrorEAGAIN = 100035L,
  kPOSIXErrorEINPROGRESS = 100036L,
  kPOSIXErrorEALREADY = 100037L,
  kPOSIXErrorENOTSOCK = 100038L,
  kPOSIXErrorEDESTADDRREQ = 100039L,
  kPOSIXErrorEMSGSIZE = 100040L,
  kPOSIXErrorEPROTOTYPE = 100041L,
  kPOSIXErrorENOPROTOOPT = 100042L,
  kPOSIXErrorEPROTONOSUPPORT = 100043L,
  kPOSIXErrorESOCKTNOSUPPORT = 100044L,
  kPOSIXErrorENOTSUP = 100045L,
  kPOSIXErrorEPFNOSUPPORT = 100046L,
  kPOSIXErrorEAFNOSUPPORT = 100047L,
  kPOSIXErrorEADDRINUSE = 100048L,
  kPOSIXErrorEADDRNOTAVAIL = 100049L,
  kPOSIXErrorENETDOWN = 100050L,
  kPOSIXErrorENETUNREACH = 100051L,
  kPOSIXErrorENETRESET = 100052L,
  kPOSIXErrorECONNABORTED = 100053L,
  kPOSIXErrorECONNRESET = 100054L,
  kPOSIXErrorENOBUFS = 100055L,
  kPOSIXErrorEISCONN = 100056L,
  kPOSIXErrorENOTCONN = 100057L,
  kPOSIXErrorESHUTDOWN = 100058L,
  kPOSIXErrorETOOMANYREFS = 100059L,
  kPOSIXErrorETIMEDOUT = 100060L,
  kPOSIXErrorECONNREFUSED = 100061L,
  kPOSIXErrorELOOP = 100062L,
  kPOSIXErrorENAMETOOLONG = 100063L,
  kPOSIXErrorEHOSTDOWN = 100064L,
  kPOSIXErrorEHOSTUNREACH = 100065L,
  kPOSIXErrorENOTEMPTY = 100066L,
  kPOSIXErrorEPROCLIM = 100067L,
  kPOSIXErrorEUSERS = 100068L,
  kPOSIXErrorEDQUOT = 100069L,
  kPOSIXErrorESTALE = 100070L,
  kPOSIXErrorEREMOTE = 100071L,
  kPOSIXErrorEBADRPC = 100072L,
  kPOSIXErrorERPCMISMATCH = 100073L,
  kPOSIXErrorEPROGUNAVAIL = 100074L,
  kPOSIXErrorEPROGMISMATCH = 100075L,
  kPOSIXErrorEPROCUNAVAIL = 100076L,
  kPOSIXErrorENOLCK = 100077L,
  kPOSIXErrorENOSYS = 100078L,
  kPOSIXErrorEFTYPE = 100079L,
  kPOSIXErrorEAUTH = 100080L,
  kPOSIXErrorENEEDAUTH = 100081L,
  kPOSIXErrorEPWROFF = 100082L,
  kPOSIXErrorEDEVERR = 100083L,
  kPOSIXErrorEOVERFLOW = 100084L,
  kPOSIXErrorEBADEXEC = 100085L,
  kPOSIXErrorEBADARCH = 100086L,
  kPOSIXErrorESHLIBVERS = 100087L,
  kPOSIXErrorEBADMACHO = 100088L,
  kPOSIXErrorECANCELED = 100089L,
  kPOSIXErrorEIDRM = 100090L,
  kPOSIXErrorENOMSG = 100091L,
  kPOSIXErrorEILSEQ = 100092L,
  kPOSIXErrorENOATTR = 100093L,
  kPOSIXErrorEBADMSG = 100094L,
  kPOSIXErrorEMULTIHOP = 100095L,
  kPOSIXErrorENODATA = 100096L,
  kPOSIXErrorENOLINK = 100097L,
  kPOSIXErrorENOSR = 100098L,
  kPOSIXErrorENOSTR = 100099L,
  kPOSIXErrorEPROTO = 100100L,
  kPOSIXErrorETIME = 100101L,
  kPOSIXErrorEOPNOTSUPP = 100102L
};
# 3193 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h" 3
extern void
SysError(short errorCode) ;






}
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 2 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern "C" {


#pragma pack(push, 2)


enum {
  kUTCDefaultOptions = 0
};


struct UTCDateTime {
  UInt16 highSeconds;
  UInt32 lowSeconds;
  UInt16 fraction;
};
typedef struct UTCDateTime UTCDateTime;
typedef UTCDateTime * UTCDateTimePtr;
typedef UTCDateTimePtr * UTCDateTimeHandle;
struct LocalDateTime {
  UInt16 highSeconds;
  UInt32 lowSeconds;
  UInt16 fraction;
};
typedef struct LocalDateTime LocalDateTime;
typedef LocalDateTime * LocalDateTimePtr;
typedef LocalDateTimePtr * LocalDateTimeHandle;
# 79 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
ConvertLocalTimeToUTC(
  UInt32 localSeconds,
  UInt32 * utcSeconds) ;
# 100 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
ConvertUTCToLocalTime(
  UInt32 utcSeconds,
  UInt32 * localSeconds) ;
# 122 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
ConvertUTCToLocalDateTime(
  const UTCDateTime * utcDateTime,
  LocalDateTime * localDateTime) ;
# 143 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
ConvertLocalToUTCDateTime(
  const LocalDateTime * localDateTime,
  UTCDateTime * utcDateTime) ;
# 165 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
GetUTCDateTime(
  UTCDateTime * utcDateTime,
  OptionBits options) ;
# 186 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
SetUTCDateTime(
  const UTCDateTime * utcDateTime,
  OptionBits options) ;
# 207 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
GetLocalDateTime(
  LocalDateTime * localDateTime,
  OptionBits options) ;
# 227 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UTCUtils.h" 3
extern OSStatus
SetLocalDateTime(
  const LocalDateTime * localDateTime,
  OptionBits options) ;



#pragma pack(pop)


}
# 46 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern "C" {


#pragma pack(push, 2)



typedef UInt32 TextEncodingBase;
enum {

  kTextEncodingMacRoman = 0L,
  kTextEncodingMacJapanese = 1,
  kTextEncodingMacChineseTrad = 2,
  kTextEncodingMacKorean = 3,
  kTextEncodingMacArabic = 4,
  kTextEncodingMacHebrew = 5,
  kTextEncodingMacGreek = 6,
  kTextEncodingMacCyrillic = 7,
  kTextEncodingMacDevanagari = 9,
  kTextEncodingMacGurmukhi = 10,
  kTextEncodingMacGujarati = 11,
  kTextEncodingMacOriya = 12,
  kTextEncodingMacBengali = 13,
  kTextEncodingMacTamil = 14,
  kTextEncodingMacTelugu = 15,
  kTextEncodingMacKannada = 16,
  kTextEncodingMacMalayalam = 17,
  kTextEncodingMacSinhalese = 18,
  kTextEncodingMacBurmese = 19,
  kTextEncodingMacKhmer = 20,
  kTextEncodingMacThai = 21,
  kTextEncodingMacLaotian = 22,
  kTextEncodingMacGeorgian = 23,
  kTextEncodingMacArmenian = 24,
  kTextEncodingMacChineseSimp = 25,
  kTextEncodingMacTibetan = 26,
  kTextEncodingMacMongolian = 27,
  kTextEncodingMacEthiopic = 28,
  kTextEncodingMacCentralEurRoman = 29,
  kTextEncodingMacVietnamese = 30,
  kTextEncodingMacExtArabic = 31,
  kTextEncodingMacSymbol = 33,
  kTextEncodingMacDingbats = 34,
  kTextEncodingMacTurkish = 35,
  kTextEncodingMacCroatian = 36,
  kTextEncodingMacIcelandic = 37,
  kTextEncodingMacRomanian = 38,
  kTextEncodingMacCeltic = 39,
  kTextEncodingMacGaelic = 40,
  kTextEncodingMacKeyboardGlyphs = 41
};


enum {
  kTextEncodingMacTradChinese = kTextEncodingMacChineseTrad,
  kTextEncodingMacRSymbol = 8,
  kTextEncodingMacSimpChinese = kTextEncodingMacChineseSimp,
  kTextEncodingMacGeez = kTextEncodingMacEthiopic,
  kTextEncodingMacEastEurRoman = kTextEncodingMacCentralEurRoman,
  kTextEncodingMacUninterp = 32
};
# 104 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
enum {
  kTextEncodingMacUnicode = 0x7E
};


enum {

  kTextEncodingMacFarsi = 0x8C,

  kTextEncodingMacUkrainian = 0x98,

  kTextEncodingMacInuit = 0xEC,
  kTextEncodingMacVT100 = 0xFC
};


enum {
  kTextEncodingMacHFS = 0xFF
};


enum {
  kTextEncodingUnicodeDefault = 0x0100,
  kTextEncodingUnicodeV1_1 = 0x0101,
  kTextEncodingISO10646_1993 = 0x0101,
  kTextEncodingUnicodeV2_0 = 0x0103,
  kTextEncodingUnicodeV2_1 = 0x0103,
  kTextEncodingUnicodeV3_0 = 0x0104,
  kTextEncodingUnicodeV3_1 = 0x0105,
  kTextEncodingUnicodeV3_2 = 0x0106,
  kTextEncodingUnicodeV4_0 = 0x0108,
  kTextEncodingUnicodeV5_0 = 0x010A
};


enum {
  kTextEncodingISOLatin1 = 0x0201,
  kTextEncodingISOLatin2 = 0x0202,
  kTextEncodingISOLatin3 = 0x0203,
  kTextEncodingISOLatin4 = 0x0204,
  kTextEncodingISOLatinCyrillic = 0x0205,
  kTextEncodingISOLatinArabic = 0x0206,
  kTextEncodingISOLatinGreek = 0x0207,
  kTextEncodingISOLatinHebrew = 0x0208,
  kTextEncodingISOLatin5 = 0x0209,
  kTextEncodingISOLatin6 = 0x020A,
  kTextEncodingISOLatin7 = 0x020D,
  kTextEncodingISOLatin8 = 0x020E,
  kTextEncodingISOLatin9 = 0x020F,
  kTextEncodingISOLatin10 = 0x0210
};


enum {
  kTextEncodingDOSLatinUS = 0x0400,
  kTextEncodingDOSGreek = 0x0405,
  kTextEncodingDOSBalticRim = 0x0406,
  kTextEncodingDOSLatin1 = 0x0410,
  kTextEncodingDOSGreek1 = 0x0411,
  kTextEncodingDOSLatin2 = 0x0412,
  kTextEncodingDOSCyrillic = 0x0413,
  kTextEncodingDOSTurkish = 0x0414,
  kTextEncodingDOSPortuguese = 0x0415,
  kTextEncodingDOSIcelandic = 0x0416,
  kTextEncodingDOSHebrew = 0x0417,
  kTextEncodingDOSCanadianFrench = 0x0418,
  kTextEncodingDOSArabic = 0x0419,
  kTextEncodingDOSNordic = 0x041A,
  kTextEncodingDOSRussian = 0x041B,
  kTextEncodingDOSGreek2 = 0x041C,
  kTextEncodingDOSThai = 0x041D,
  kTextEncodingDOSJapanese = 0x0420,
  kTextEncodingDOSChineseSimplif = 0x0421,
  kTextEncodingDOSKorean = 0x0422,
  kTextEncodingDOSChineseTrad = 0x0423,
  kTextEncodingWindowsLatin1 = 0x0500,
  kTextEncodingWindowsANSI = 0x0500,
  kTextEncodingWindowsLatin2 = 0x0501,
  kTextEncodingWindowsCyrillic = 0x0502,
  kTextEncodingWindowsGreek = 0x0503,
  kTextEncodingWindowsLatin5 = 0x0504,
  kTextEncodingWindowsHebrew = 0x0505,
  kTextEncodingWindowsArabic = 0x0506,
  kTextEncodingWindowsBalticRim = 0x0507,
  kTextEncodingWindowsVietnamese = 0x0508,
  kTextEncodingWindowsKoreanJohab = 0x0510
};


enum {
  kTextEncodingUS_ASCII = 0x0600,
  kTextEncodingANSEL = 0x0601,
  kTextEncodingJIS_X0201_76 = 0x0620,
  kTextEncodingJIS_X0208_83 = 0x0621,
  kTextEncodingJIS_X0208_90 = 0x0622,
  kTextEncodingJIS_X0212_90 = 0x0623,
  kTextEncodingJIS_C6226_78 = 0x0624,
  kTextEncodingShiftJIS_X0213_00 = 0x0628,
  kTextEncodingJIS_X0213_MenKuTen = 0x0629,
  kTextEncodingGB_2312_80 = 0x0630,
  kTextEncodingGBK_95 = 0x0631,
  kTextEncodingGB_18030_2000 = 0x0632,
  kTextEncodingKSC_5601_87 = 0x0640,
  kTextEncodingKSC_5601_92_Johab = 0x0641,
  kTextEncodingCNS_11643_92_P1 = 0x0651,
  kTextEncodingCNS_11643_92_P2 = 0x0652,
  kTextEncodingCNS_11643_92_P3 = 0x0653
};


enum {
  kTextEncodingISO_2022_JP = 0x0820,
  kTextEncodingISO_2022_JP_2 = 0x0821,
  kTextEncodingISO_2022_JP_1 = 0x0822,
  kTextEncodingISO_2022_JP_3 = 0x0823,
  kTextEncodingISO_2022_CN = 0x0830,
  kTextEncodingISO_2022_CN_EXT = 0x0831,
  kTextEncodingISO_2022_KR = 0x0840
};


enum {
  kTextEncodingEUC_JP = 0x0920,
  kTextEncodingEUC_CN = 0x0930,
  kTextEncodingEUC_TW = 0x0931,
  kTextEncodingEUC_KR = 0x0940
};


enum {
  kTextEncodingShiftJIS = 0x0A01,
  kTextEncodingKOI8_R = 0x0A02,
  kTextEncodingBig5 = 0x0A03,
  kTextEncodingMacRomanLatin1 = 0x0A04,
  kTextEncodingHZ_GB_2312 = 0x0A05,
  kTextEncodingBig5_HKSCS_1999 = 0x0A06,
  kTextEncodingVISCII = 0x0A07,
  kTextEncodingKOI8_U = 0x0A08,
  kTextEncodingBig5_E = 0x0A09
};


enum {
  kTextEncodingNextStepLatin = 0x0B01,
  kTextEncodingNextStepJapanese = 0x0B02
};


enum {
  kTextEncodingEBCDIC_US = 0x0C01,
  kTextEncodingEBCDIC_CP037 = 0x0C02
};


enum {
  kTextEncodingMultiRun = 0x0FFF,
  kTextEncodingUnknown = 0xFFFF
};



typedef UInt32 TextEncodingVariant;

enum {
  kTextEncodingDefaultVariant = 0
};


enum {
  kMacRomanDefaultVariant = 0,
  kMacRomanCurrencySignVariant = 1,
  kMacRomanEuroSignVariant = 2
};


enum {
  kMacCyrillicDefaultVariant = 0,
  kMacCyrillicCurrSignStdVariant = 1,
  kMacCyrillicCurrSignUkrVariant = 2,
  kMacCyrillicEuroSignVariant = 3
};


enum {
  kMacIcelandicStdDefaultVariant = 0,
  kMacIcelandicTTDefaultVariant = 1,

  kMacIcelandicStdCurrSignVariant = 2,
  kMacIcelandicTTCurrSignVariant = 3,

  kMacIcelandicStdEuroSignVariant = 4,
  kMacIcelandicTTEuroSignVariant = 5
};


enum {
  kMacCroatianDefaultVariant = 0,
  kMacCroatianCurrencySignVariant = 1,
  kMacCroatianEuroSignVariant = 2
};



enum {
  kMacRomanianDefaultVariant = 0,
  kMacRomanianCurrencySignVariant = 1,
  kMacRomanianEuroSignVariant = 2
};



enum {
  kMacJapaneseStandardVariant = 0,
  kMacJapaneseStdNoVerticalsVariant = 1,
  kMacJapaneseBasicVariant = 2,
  kMacJapanesePostScriptScrnVariant = 3,
  kMacJapanesePostScriptPrintVariant = 4,
  kMacJapaneseVertAtKuPlusTenVariant = 5
};


enum {
  kMacArabicStandardVariant = 0,
  kMacArabicTrueTypeVariant = 1,
  kMacArabicThuluthVariant = 2,
  kMacArabicAlBayanVariant = 3
};


enum {
  kMacFarsiStandardVariant = 0,
  kMacFarsiTrueTypeVariant = 1
};


enum {
  kMacHebrewStandardVariant = 0,
  kMacHebrewFigureSpaceVariant = 1
};


enum {
  kMacGreekDefaultVariant = 0,
  kMacGreekNoEuroSignVariant = 1,
  kMacGreekEuroSignVariant = 2
};


enum {
  kMacVT100DefaultVariant = 0,
  kMacVT100CurrencySignVariant = 1,
  kMacVT100EuroSignVariant = 2
};


enum {
  kUnicodeNoSubset = 0,
  kUnicodeNormalizationFormD = 5,
  kUnicodeNormalizationFormC = 3,
  kUnicodeHFSPlusDecompVariant = 8,
  kUnicodeHFSPlusCompVariant = 9
};


enum {
  kISOLatin1StandardVariant = 0,
  kISOLatin1MusicCDVariant = 1
};
# 392 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
enum {
  kISOLatinArabicImplicitOrderVariant = 0,
  kISOLatinArabicVisualOrderVariant = 1,
  kISOLatinArabicExplicitOrderVariant = 2
};

enum {
  kISOLatinHebrewImplicitOrderVariant = 0,
  kISOLatinHebrewVisualOrderVariant = 1,
  kISOLatinHebrewExplicitOrderVariant = 2
};


enum {
  kWindowsLatin1StandardVariant = 0,
  kWindowsLatin1PalmVariant = 1
};


enum {
  kDOSJapaneseStandardVariant = 0,
  kDOSJapanesePalmVariant = 1
};






enum {
  kEUC_CN_BasicVariant = 0,
  kEUC_CN_DOSVariant = 1
};






enum {
  kEUC_KR_BasicVariant = 0,
  kEUC_KR_DOSVariant = 1
};






enum {
  kShiftJIS_BasicVariant = 0,
  kShiftJIS_DOSVariant = 1,
  kShiftJIS_MusicCDVariant = 2
};






enum {
  kBig5_BasicVariant = 0,
  kBig5_StandardVariant = 1,
  kBig5_ETenVariant = 2,
  kBig5_DOSVariant = 3
};


enum {
  kMacRomanLatin1DefaultVariant = 0,
  kMacRomanLatin1StandardVariant = 2,
  kMacRomanLatin1TurkishVariant = 6,
  kMacRomanLatin1CroatianVariant = 8,
  kMacRomanLatin1IcelandicVariant = 11,
  kMacRomanLatin1RomanianVariant = 14
};


enum {
  kUnicodeNoCompatibilityVariant = 1,
  kUnicodeNoCorporateVariant = 4
};


enum {
  kMacRomanStandardVariant = 0,
  kMacIcelandicStandardVariant = 0,
  kMacIcelandicTrueTypeVariant = 1,
  kJapaneseStandardVariant = 0,
  kJapaneseStdNoVerticalsVariant = 1,
  kJapaneseBasicVariant = 2,
  kJapanesePostScriptScrnVariant = 3,
  kJapanesePostScriptPrintVariant = 4,
  kJapaneseVertAtKuPlusTenVariant = 5,

  kHebrewStandardVariant = 0,
  kHebrewFigureSpaceVariant = 1,






  kUnicodeCanonicalDecompVariant = 2,
  kUnicodeMaxDecomposedVariant = 2,
  kUnicodeCanonicalCompVariant = 3,
  kUnicodeNoComposedVariant = 3,


  kJapaneseNoOneByteKanaOption = 0x20,
  kJapaneseUseAsciiBackslashOption = 0x40
};


typedef UInt32 TextEncodingFormat;
enum {

  kTextEncodingDefaultFormat = 0,
  kUnicodeUTF16Format = 0,
  kUnicodeUTF7Format = 1,
  kUnicodeUTF8Format = 2,
  kUnicodeUTF32Format = 3,
  kUnicodeUTF16BEFormat = 4,
  kUnicodeUTF16LEFormat = 5,
  kUnicodeUTF32BEFormat = 6,
  kUnicodeUTF32LEFormat = 7,
  kUnicodeSCSUFormat = 8,
# 528 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
  kUnicode16BitFormat = 0,
  kUnicode32BitFormat = 3
};


typedef UInt32 TextEncoding;

typedef UInt32 TextEncodingNameSelector;
enum {
  kTextEncodingFullName = 0,
  kTextEncodingBaseName = 1,
  kTextEncodingVariantName = 2,
  kTextEncodingFormatName = 3
};


struct TextEncodingRun {
  ByteOffset offset;
  TextEncoding textEncoding;
};
typedef struct TextEncodingRun TextEncodingRun;
typedef TextEncodingRun * TextEncodingRunPtr;
typedef const TextEncodingRun * ConstTextEncodingRunPtr;
struct ScriptCodeRun {
  ByteOffset offset;
  ScriptCode script;
};
typedef struct ScriptCodeRun ScriptCodeRun;
typedef ScriptCodeRun * ScriptCodeRunPtr;
typedef const ScriptCodeRun * ConstScriptCodeRunPtr;
typedef UInt8 * TextPtr;
typedef const UInt8 * ConstTextPtr;

typedef UniChar * UniCharArrayPtr;
typedef const UniChar * ConstUniCharArrayPtr;




typedef UniCharArrayPtr * UniCharArrayHandle;




typedef unsigned long UniCharArrayOffset;

enum {
  kTextScriptDontCare = -128,
  kTextLanguageDontCare = -128,
  kTextRegionDontCare = -128
};



struct TECInfo {
  UInt16 format;
  UInt16 tecVersion;
  UInt32 tecTextConverterFeatures;
  UInt32 tecUnicodeConverterFeatures;
  UInt32 tecTextCommonFeatures;
  Str31 tecTextEncodingsFolderName;
  Str31 tecExtensionFileName;
  UInt16 tecLowestTEFileVersion;
  UInt16 tecHighestTEFileVersion;
};
typedef struct TECInfo TECInfo;
typedef TECInfo * TECInfoPtr;
typedef TECInfoPtr * TECInfoHandle;

enum {
  kTECInfoCurrentFormat = 2
};
# 644 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
enum {
  kTECKeepInfoFixBit = 0,
  kTECFallbackTextLengthFixBit = 1,
  kTECTextRunBitClearFixBit = 2,
  kTECTextToUnicodeScanFixBit = 3,
  kTECAddForceASCIIChangesBit = 4,
  kTECPreferredEncodingFixBit = 5,
  kTECAddTextRunHeuristicsBit = 6,
  kTECAddFallbackInterruptBit = 7
};

enum {
  kTECKeepInfoFixMask = 1L << kTECKeepInfoFixBit,
  kTECFallbackTextLengthFixMask = 1L << kTECFallbackTextLengthFixBit,
  kTECTextRunBitClearFixMask = 1L << kTECTextRunBitClearFixBit,
  kTECTextToUnicodeScanFixMask = 1L << kTECTextToUnicodeScanFixBit,
  kTECAddForceASCIIChangesMask = 1L << kTECAddForceASCIIChangesBit,
  kTECPreferredEncodingFixMask = 1L << kTECPreferredEncodingFixBit,
  kTECAddTextRunHeuristicsMask = 1L << kTECAddTextRunHeuristicsBit,
  kTECAddFallbackInterruptMask = 1L << kTECAddFallbackInterruptBit
};







enum {
  kUnicodeByteOrderMark = 0xFEFF,
  kUnicodeObjectReplacement = 0xFFFC,
  kUnicodeReplacementChar = 0xFFFD,
  kUnicodeSwappedByteOrderMark = 0xFFFE,
  kUnicodeNotAChar = 0xFFFF
};
# 687 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
typedef SInt32 UCCharPropertyType;
enum {
  kUCCharPropTypeGenlCategory = 1,
  kUCCharPropTypeCombiningClass = 2,
  kUCCharPropTypeBidiCategory = 3,
  kUCCharPropTypeDecimalDigitValue = 4
};

typedef UInt32 UCCharPropertyValue;

enum {

  kUCGenlCatOtherNotAssigned = 0,
  kUCGenlCatOtherControl = 1,
  kUCGenlCatOtherFormat = 2,
  kUCGenlCatOtherSurrogate = 3,
  kUCGenlCatOtherPrivateUse = 4,
  kUCGenlCatMarkNonSpacing = 5,
  kUCGenlCatMarkSpacingCombining = 6,
  kUCGenlCatMarkEnclosing = 7,
  kUCGenlCatNumberDecimalDigit = 8,
  kUCGenlCatNumberLetter = 9,
  kUCGenlCatNumberOther = 10,
  kUCGenlCatSeparatorSpace = 11,
  kUCGenlCatSeparatorLine = 12,
  kUCGenlCatSeparatorParagraph = 13,
  kUCGenlCatLetterUppercase = 14,
  kUCGenlCatLetterLowercase = 15,
  kUCGenlCatLetterTitlecase = 16,

  kUCGenlCatLetterModifier = 17,
  kUCGenlCatLetterOther = 18,
  kUCGenlCatPunctConnector = 20,
  kUCGenlCatPunctDash = 21,
  kUCGenlCatPunctOpen = 22,
  kUCGenlCatPunctClose = 23,
  kUCGenlCatPunctInitialQuote = 24,
  kUCGenlCatPunctFinalQuote = 25,
  kUCGenlCatPunctOther = 26,
  kUCGenlCatSymbolMath = 28,
  kUCGenlCatSymbolCurrency = 29,
  kUCGenlCatSymbolModifier = 30,
  kUCGenlCatSymbolOther = 31
};


enum {
  kUCBidiCatNotApplicable = 0,

  kUCBidiCatLeftRight = 1,
  kUCBidiCatRightLeft = 2,

  kUCBidiCatEuroNumber = 3,
  kUCBidiCatEuroNumberSeparator = 4,
  kUCBidiCatEuroNumberTerminator = 5,
  kUCBidiCatArabicNumber = 6,
  kUCBidiCatCommonNumberSeparator = 7,

  kUCBidiCatBlockSeparator = 8,
  kUCBidiCatSegmentSeparator = 9,

  kUCBidiCatWhitespace = 10,
  kUCBidiCatOtherNeutral = 11,

  kUCBidiCatRightLeftArabic = 12,
  kUCBidiCatLeftRightEmbedding = 13,
  kUCBidiCatRightLeftEmbedding = 14,
  kUCBidiCatLeftRightOverride = 15,
  kUCBidiCatRightLeftOverride = 16,
  kUCBidiCatPopDirectionalFormat = 17,
  kUCBidiCatNonSpacingMark = 18,
  kUCBidiCatBoundaryNeutral = 19
};
# 777 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern TextEncoding
CreateTextEncoding(
  TextEncodingBase encodingBase,
  TextEncodingVariant encodingVariant,
  TextEncodingFormat encodingFormat) ;
# 792 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern TextEncodingBase
GetTextEncodingBase(TextEncoding encoding) ;
# 804 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern TextEncodingVariant
GetTextEncodingVariant(TextEncoding encoding) ;
# 816 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern TextEncodingFormat
GetTextEncodingFormat(TextEncoding encoding) ;
# 828 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern TextEncoding
ResolveDefaultTextEncoding(TextEncoding encoding) ;
# 840 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
GetTextEncodingName(
  TextEncoding iEncoding,
  TextEncodingNameSelector iNamePartSelector,
  RegionCode iPreferredRegion,
  TextEncoding iPreferredEncoding,
  ByteCount iOutputBufLen,
  ByteCount * oNameLength,
  RegionCode * oActualRegion,
  TextEncoding * oActualEncoding,
  TextPtr oEncodingName) ;
# 861 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
TECGetInfo(TECInfoHandle * tecInfo) ;
# 874 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
UpgradeScriptInfoToTextEncoding(
  ScriptCode iTextScriptID,
  LangCode iTextLanguageID,
  RegionCode iRegionID,
  ConstStr255Param iTextFontname,
  TextEncoding * oEncoding) ;
# 891 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
RevertTextEncodingToScriptInfo(
  TextEncoding iEncoding,
  ScriptCode * oTextScriptID,
  LangCode * oTextLanguageID,
  Str255 oTextFontname) ;
# 944 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
GetTextEncodingFromScriptInfo(
  ScriptCode iTextScriptID,
  LangCode iTextLanguageID,
  RegionCode iTextRegionID,
  TextEncoding * oEncoding) ;
# 993 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
GetScriptInfoFromTextEncoding(
  TextEncoding iEncoding,
  ScriptCode * oTextScriptID,
  LangCode * oTextLanguageID) ;
# 1009 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
NearestMacTextEncodings(
  TextEncoding generalEncoding,
  TextEncoding * bestMacEncoding,
  TextEncoding * alternateMacEncoding) ;
# 1024 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
extern OSStatus
UCGetCharProperty(
  const UniChar * charPtr,
  UniCharCount textLength,
  UCCharPropertyType propType,
  UCCharPropertyValue * propValue) ;
# 1050 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
enum {
  kUCHighSurrogateRangeStart = 0xD800UL,
    kUCHighSurrogateRangeEnd = 0xDBFFUL,
    kUCLowSurrogateRangeStart = 0xDC00UL,
    kUCLowSurrogateRangeEnd = 0xDFFFUL
};
# 1064 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
static __inline__ Boolean UCIsSurrogateHighCharacter( UniChar character ) {

   return ( ( character & 0xFC00UL ) == kUCHighSurrogateRangeStart );
}







static __inline__ Boolean UCIsSurrogateLowCharacter( UniChar character ) {

    return ( ( character & 0xFC00UL ) == kUCLowSurrogateRangeStart );
}
# 1089 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextCommon.h" 3
static __inline__ UnicodeScalarValue UCGetUnicodeScalarValueForSurrogatePair( UniChar surrogateHigh, UniChar surrogateLow ) {
  return ( ( surrogateHigh - kUCHighSurrogateRangeStart ) << 10 ) + ( surrogateLow - kUCLowSurrogateRangeStart ) + 0x0010000UL;
}



#pragma pack(pop)


}
# 50 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 1 3
# 24 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MixedMode.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MixedMode.h" 3
#pragma pack(push, 2)
# 47 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MixedMode.h" 3
enum {
  kRoutineDescriptorVersion = 7
};


enum {
  _MixedModeMagic = 0xAAFE
};


enum {
  kCurrentMixedModeStateRecord = 1
};


typedef unsigned short CallingConventionType;
enum {
  kPascalStackBased = 0,
  kCStackBased = 1,
  kRegisterBased = 2,
  kD0DispatchedPascalStackBased = 8,
  kD1DispatchedPascalStackBased = 12,
  kD0DispatchedCStackBased = 9,
  kStackDispatchedPascalStackBased = 14,
  kThinkCStackBased = 5
};


typedef SInt8 ISAType;
enum {
  kM68kISA = 0,
  kPowerPCISA = 1
};

enum {
  kX86ISA = 2
};


typedef SInt8 RTAType;
enum {
  kOld68kRTA = 0 << 4,
  kPowerPCRTA = 0 << 4,
  kCFM68kRTA = 1 << 4
};

enum {
  kX86RTA = 2 << 4
};
# 114 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MixedMode.h" 3
enum {
  kRegisterD0 = 0,
  kRegisterD1 = 1,
  kRegisterD2 = 2,
  kRegisterD3 = 3,
  kRegisterD4 = 8,
  kRegisterD5 = 9,
  kRegisterD6 = 10,
  kRegisterD7 = 11,
  kRegisterA0 = 4,
  kRegisterA1 = 5,
  kRegisterA2 = 6,
  kRegisterA3 = 7,
  kRegisterA4 = 12,
  kRegisterA5 = 13,
  kRegisterA6 = 14,
  kCCRegisterCBit = 16,
  kCCRegisterVBit = 17,
  kCCRegisterZBit = 18,
  kCCRegisterNBit = 19,
  kCCRegisterXBit = 20
};

typedef unsigned short registerSelectorType;

enum {
  kNoByteCode = 0,
  kOneByteCode = 1,
  kTwoByteCode = 2,
  kFourByteCode = 3
};


typedef unsigned long ProcInfoType;

typedef unsigned short RoutineFlagsType;
enum {
  kProcDescriptorIsAbsolute = 0x00,
  kProcDescriptorIsRelative = 0x01
};

enum {
  kFragmentIsPrepared = 0x00,
  kFragmentNeedsPreparing = 0x02
};

enum {
  kUseCurrentISA = 0x00,
  kUseNativeISA = 0x04
};

enum {
  kPassSelector = 0x00,
  kDontPassSelector = 0x08
};

enum {
  kRoutineIsNotDispatchedDefaultRoutine = 0x00,
  kRoutineIsDispatchedDefaultRoutine = 0x10
};

enum {
  kProcDescriptorIsProcPtr = 0x00,
  kProcDescriptorIsIndex = 0x20
};

struct RoutineRecord {
  ProcInfoType procInfo;
  SInt8 reserved1;
  ISAType ISA;
  RoutineFlagsType routineFlags;
  ProcPtr procDescriptor;
  UInt32 reserved2;
  UInt32 selector;
};
typedef struct RoutineRecord RoutineRecord;
typedef RoutineRecord * RoutineRecordPtr;
typedef RoutineRecordPtr * RoutineRecordHandle;


typedef UInt8 RDFlagsType;
enum {
  kSelectorsAreNotIndexable = 0x00,
  kSelectorsAreIndexable = 0x01
};


struct RoutineDescriptor {
  UInt16 goMixedModeTrap;
  SInt8 version;
  RDFlagsType routineDescriptorFlags;
  UInt32 reserved1;
  UInt8 reserved2;
  UInt8 selectorInfo;
  UInt16 routineCount;
  RoutineRecord routineRecords[1];
};
typedef struct RoutineDescriptor RoutineDescriptor;
typedef RoutineDescriptor * RoutineDescriptorPtr;
typedef RoutineDescriptorPtr * RoutineDescriptorHandle;

struct MixedModeStateRecord {
  UInt32 state1;
  UInt32 state2;
  UInt32 state3;
  UInt32 state4;
};
typedef struct MixedModeStateRecord MixedModeStateRecord;
# 264 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MixedMode.h" 3
enum {

  kCallingConventionWidth = 4,
  kCallingConventionPhase = 0,
  kCallingConventionMask = 0x0F,
  kResultSizeWidth = 2,
  kResultSizePhase = kCallingConventionWidth,
  kResultSizeMask = 0x30,
  kStackParameterWidth = 2,
  kStackParameterPhase = (kCallingConventionWidth + kResultSizeWidth),
  kStackParameterMask = (long)0xFFFFFFC0,
  kRegisterResultLocationWidth = 5,
  kRegisterResultLocationPhase = (kCallingConventionWidth + kResultSizeWidth),
  kRegisterParameterWidth = 5,
  kRegisterParameterPhase = (kCallingConventionWidth + kResultSizeWidth + kRegisterResultLocationWidth),
  kRegisterParameterMask = 0x7FFFF800,
  kRegisterParameterSizePhase = 0,
  kRegisterParameterSizeWidth = 2,
  kRegisterParameterWhichPhase = kRegisterParameterSizeWidth,
  kRegisterParameterWhichWidth = 3,
  kDispatchedSelectorSizeWidth = 2,
  kDispatchedSelectorSizePhase = (kCallingConventionWidth + kResultSizeWidth),
  kDispatchedParameterPhase = (kCallingConventionWidth + kResultSizeWidth + kDispatchedSelectorSizeWidth),
  kSpecialCaseSelectorWidth = 6,
  kSpecialCaseSelectorPhase = kCallingConventionWidth,
  kSpecialCaseSelectorMask = 0x03F0
};

enum {
  kSpecialCase = 0x000F
};

enum {

  kSpecialCaseHighHook = 0,
  kSpecialCaseCaretHook = 0,
  kSpecialCaseEOLHook = 1,
  kSpecialCaseWidthHook = 2,
  kSpecialCaseTextWidthHook = 2,
  kSpecialCaseNWidthHook = 3,
  kSpecialCaseDrawHook = 4,
  kSpecialCaseHitTestHook = 5,
  kSpecialCaseTEFindWord = 6,
  kSpecialCaseProtocolHandler = 7,
  kSpecialCaseSocketListener = 8,
  kSpecialCaseTERecalc = 9,
  kSpecialCaseTEDoText = 10,
  kSpecialCaseGNEFilterProc = 11,
  kSpecialCaseMBarHook = 12
};
# 531 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MixedMode.h" 3
#pragma pack(pop)
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 2 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern "C" {






enum {
  kCollectionDontWantTag = 0L,
  kCollectionDontWantId = 0L,
  kCollectionDontWantSize = 0L,
  kCollectionDontWantAttributes = 0L,
  kCollectionDontWantIndex = 0L,
  kCollectionDontWantData = 0L
};



enum {
  kCollectionNoAttributes = 0x00000000,
  kCollectionAllAttributes = (long)0xFFFFFFFF,
  kCollectionUserAttributes = 0x0000FFFF,
  kCollectionDefaultAttributes = 0x40000000
};







enum {
  kCollectionUser0Bit = 0,
  kCollectionUser1Bit = 1,
  kCollectionUser2Bit = 2,
  kCollectionUser3Bit = 3,
  kCollectionUser4Bit = 4,
  kCollectionUser5Bit = 5,
  kCollectionUser6Bit = 6,
  kCollectionUser7Bit = 7,
  kCollectionUser8Bit = 8,
  kCollectionUser9Bit = 9,
  kCollectionUser10Bit = 10,
  kCollectionUser11Bit = 11,
  kCollectionUser12Bit = 12,
  kCollectionUser13Bit = 13,
  kCollectionUser14Bit = 14,
  kCollectionUser15Bit = 15,
  kCollectionReserved0Bit = 16,
  kCollectionReserved1Bit = 17,
  kCollectionReserved2Bit = 18,
  kCollectionReserved3Bit = 19,
  kCollectionReserved4Bit = 20,
  kCollectionReserved5Bit = 21,
  kCollectionReserved6Bit = 22,
  kCollectionReserved7Bit = 23,
  kCollectionReserved8Bit = 24,
  kCollectionReserved9Bit = 25,
  kCollectionReserved10Bit = 26,
  kCollectionReserved11Bit = 27,
  kCollectionReserved12Bit = 28,
  kCollectionReserved13Bit = 29,
  kCollectionPersistenceBit = 30,
  kCollectionLockBit = 31
};



enum {
  kCollectionUser0Mask = 1L << kCollectionUser0Bit,
  kCollectionUser1Mask = 1L << kCollectionUser1Bit,
  kCollectionUser2Mask = 1L << kCollectionUser2Bit,
  kCollectionUser3Mask = 1L << kCollectionUser3Bit,
  kCollectionUser4Mask = 1L << kCollectionUser4Bit,
  kCollectionUser5Mask = 1L << kCollectionUser5Bit,
  kCollectionUser6Mask = 1L << kCollectionUser6Bit,
  kCollectionUser7Mask = 1L << kCollectionUser7Bit,
  kCollectionUser8Mask = 1L << kCollectionUser8Bit,
  kCollectionUser9Mask = 1L << kCollectionUser9Bit,
  kCollectionUser10Mask = 1L << kCollectionUser10Bit,
  kCollectionUser11Mask = 1L << kCollectionUser11Bit,
  kCollectionUser12Mask = 1L << kCollectionUser12Bit,
  kCollectionUser13Mask = 1L << kCollectionUser13Bit,
  kCollectionUser14Mask = 1L << kCollectionUser14Bit,
  kCollectionUser15Mask = 1L << kCollectionUser15Bit,
  kCollectionReserved0Mask = 1L << kCollectionReserved0Bit,
  kCollectionReserved1Mask = 1L << kCollectionReserved1Bit,
  kCollectionReserved2Mask = 1L << kCollectionReserved2Bit,
  kCollectionReserved3Mask = 1L << kCollectionReserved3Bit,
  kCollectionReserved4Mask = 1L << kCollectionReserved4Bit,
  kCollectionReserved5Mask = 1L << kCollectionReserved5Bit,
  kCollectionReserved6Mask = 1L << kCollectionReserved6Bit,
  kCollectionReserved7Mask = 1L << kCollectionReserved7Bit,
  kCollectionReserved8Mask = 1L << kCollectionReserved8Bit,
  kCollectionReserved9Mask = 1L << kCollectionReserved9Bit,
  kCollectionReserved10Mask = 1L << kCollectionReserved10Bit,
  kCollectionReserved11Mask = 1L << kCollectionReserved11Bit,
  kCollectionReserved12Mask = 1L << kCollectionReserved12Bit,
  kCollectionReserved13Mask = 1L << kCollectionReserved13Bit,
  kCollectionPersistenceMask = 1L << kCollectionPersistenceBit,
  kCollectionLockMask = 1L << kCollectionLockBit
};






typedef struct OpaqueCollection* Collection;

typedef FourCharCode CollectionTag;
typedef OSErr ( * CollectionFlattenProcPtr)(SInt32 size, void *data, void *refCon);
typedef OSErr ( * CollectionExceptionProcPtr)(Collection c, OSErr status);
typedef CollectionFlattenProcPtr CollectionFlattenUPP;
typedef CollectionExceptionProcPtr CollectionExceptionUPP;
# 159 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern CollectionFlattenUPP
NewCollectionFlattenUPP(CollectionFlattenProcPtr userRoutine) ;
# 170 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern CollectionExceptionUPP
NewCollectionExceptionUPP(CollectionExceptionProcPtr userRoutine) ;
# 181 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
DisposeCollectionFlattenUPP(CollectionFlattenUPP userUPP) ;
# 192 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
DisposeCollectionExceptionUPP(CollectionExceptionUPP userUPP) ;
# 203 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
InvokeCollectionFlattenUPP(
  SInt32 size,
  void * data,
  void * refCon,
  CollectionFlattenUPP userUPP) ;
# 218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
InvokeCollectionExceptionUPP(
  Collection c,
  OSErr status,
  CollectionExceptionUPP userUPP) ;



    inline CollectionFlattenUPP NewCollectionFlattenUPP(CollectionFlattenProcPtr userRoutine) { return userRoutine; }
    inline CollectionExceptionUPP NewCollectionExceptionUPP(CollectionExceptionProcPtr userRoutine) { return userRoutine; }
    inline void DisposeCollectionFlattenUPP(CollectionFlattenUPP) { }
    inline void DisposeCollectionExceptionUPP(CollectionExceptionUPP) { }
    inline OSErr InvokeCollectionFlattenUPP(SInt32 size, void * data, void * refCon, CollectionFlattenUPP userUPP) { return (*userUPP)(size, data, refCon); }
    inline OSErr InvokeCollectionExceptionUPP(Collection c, OSErr status, CollectionExceptionUPP userUPP) { return (*userUPP)(c, status); }
# 253 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern Collection
NewCollection(void) ;
# 266 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
DisposeCollection(Collection c) ;
# 279 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern Collection
CloneCollection(Collection c) ;
# 292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern SInt32
CountCollectionOwners(Collection c) ;
# 305 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSStatus
RetainCollection(Collection c) ;
# 318 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSStatus
ReleaseCollection(Collection c) ;
# 331 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern ItemCount
GetCollectionRetainCount(Collection c) ;
# 344 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern Collection
CopyCollection(
  Collection srcCollection,
  Collection dstCollection) ;
# 359 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern SInt32
GetCollectionDefaultAttributes(Collection c) ;
# 372 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
SetCollectionDefaultAttributes(
  Collection c,
  SInt32 whichAttributes,
  SInt32 newAttributes) ;
# 388 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern SInt32
CountCollectionItems(Collection c) ;
# 401 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
AddCollectionItem(
  Collection c,
  CollectionTag tag,
  SInt32 id,
  SInt32 itemSize,
  const void * itemData) ;
# 419 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetCollectionItem(
  Collection c,
  CollectionTag tag,
  SInt32 id,
  SInt32 * itemSize,
  void * itemData) ;
# 437 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
RemoveCollectionItem(
  Collection c,
  CollectionTag tag,
  SInt32 id) ;
# 453 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
SetCollectionItemInfo(
  Collection c,
  CollectionTag tag,
  SInt32 id,
  SInt32 whichAttributes,
  SInt32 newAttributes) ;
# 471 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetCollectionItemInfo(
  Collection c,
  CollectionTag tag,
  SInt32 id,
  SInt32 * itemIndex,
  SInt32 * itemSize,
  SInt32 * attributes) ;
# 490 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
ReplaceIndexedCollectionItem(
  Collection c,
  SInt32 itemIndex,
  SInt32 itemSize,
  const void * itemData) ;
# 507 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetIndexedCollectionItem(
  Collection c,
  SInt32 itemIndex,
  SInt32 * itemSize,
  void * itemData) ;
# 524 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
RemoveIndexedCollectionItem(
  Collection c,
  SInt32 itemIndex) ;
# 539 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
SetIndexedCollectionItemInfo(
  Collection c,
  SInt32 itemIndex,
  SInt32 whichAttributes,
  SInt32 newAttributes) ;
# 556 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetIndexedCollectionItemInfo(
  Collection c,
  SInt32 itemIndex,
  CollectionTag * tag,
  SInt32 * id,
  SInt32 * itemSize,
  SInt32 * attributes) ;
# 575 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern Boolean
CollectionTagExists(
  Collection c,
  CollectionTag tag) ;
# 590 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern SInt32
CountCollectionTags(Collection c) ;
# 603 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetIndexedCollectionTag(
  Collection c,
  SInt32 tagIndex,
  CollectionTag * tag) ;
# 619 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern SInt32
CountTaggedCollectionItems(
  Collection c,
  CollectionTag tag) ;
# 634 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetTaggedCollectionItem(
  Collection c,
  CollectionTag tag,
  SInt32 whichItem,
  SInt32 * itemSize,
  void * itemData) ;
# 652 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetTaggedCollectionItemInfo(
  Collection c,
  CollectionTag tag,
  SInt32 whichItem,
  SInt32 * id,
  SInt32 * itemIndex,
  SInt32 * itemSize,
  SInt32 * attributes) ;
# 672 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
PurgeCollection(
  Collection c,
  SInt32 whichAttributes,
  SInt32 matchingAttributes) ;
# 688 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
PurgeCollectionTag(
  Collection c,
  CollectionTag tag) ;
# 703 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
EmptyCollection(Collection c) ;
# 715 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
FlattenCollection(
  Collection c,
  CollectionFlattenUPP flattenProc,
  void * refCon) ;
# 731 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
FlattenPartialCollection(
  Collection c,
  CollectionFlattenUPP flattenProc,
  void * refCon,
  SInt32 whichAttributes,
  SInt32 matchingAttributes) ;
# 749 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
UnflattenCollection(
  Collection c,
  CollectionFlattenUPP flattenProc,
  void * refCon) ;
# 765 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern CollectionExceptionUPP
GetCollectionExceptionProc(Collection c) ;
# 778 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern void
SetCollectionExceptionProc(
  Collection c,
  CollectionExceptionUPP exceptionProc) ;
# 793 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern Collection
GetNewCollection(SInt16 collectionID) ;
# 809 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
AddCollectionItemHdl(
  Collection aCollection,
  CollectionTag tag,
  SInt32 id,
  Handle itemData) ;
# 826 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetCollectionItemHdl(
  Collection aCollection,
  CollectionTag tag,
  SInt32 id,
  Handle itemData) ;
# 843 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
ReplaceIndexedCollectionItemHdl(
  Collection aCollection,
  SInt32 itemIndex,
  Handle itemData) ;
# 859 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
GetIndexedCollectionItemHdl(
  Collection aCollection,
  SInt32 itemIndex,
  Handle itemData) ;
# 875 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
FlattenCollectionToHdl(
  Collection aCollection,
  Handle flattened) ;
# 890 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
extern OSErr
UnflattenCollectionFromHdl(
  Collection aCollection,
  Handle flattened) ;
# 989 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Collections.h" 3
}
# 54 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
extern "C" {


#pragma pack(push, 2)
# 281 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
typedef long BigEndianLong;
typedef unsigned long BigEndianUnsignedLong;
typedef short BigEndianShort;
typedef unsigned short BigEndianUnsignedShort;
typedef Fixed BigEndianFixed;
typedef UnsignedFixed BigEndianUnsignedFixed;
typedef OSType BigEndianOSType;
# 307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
enum {
  kCoreEndianResourceManagerDomain = 'rsrc',
  kCoreEndianAppleEventManagerDomain = 'aevt'
};
# 351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
typedef OSStatus ( * CoreEndianFlipProc)(OSType dataDomain, OSType dataType, SInt16 id, void *dataPtr, ByteCount dataSize, Boolean currentlyNative, void *refcon);
# 388 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
extern OSStatus
CoreEndianInstallFlipper(
  OSType dataDomain,
  OSType dataType,
  CoreEndianFlipProc proc,
  void * refcon) ;
# 428 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
extern OSStatus
CoreEndianGetFlipper(
  OSType dataDomain,
  OSType dataType,
  CoreEndianFlipProc * proc,
  void ** refcon) ;
# 476 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Endian.h" 3
extern OSStatus
CoreEndianFlipData(
  OSType dataDomain,
  OSType dataType,
  SInt16 id,
  void * data,
  ByteCount dataLen,
  Boolean currentlyNative) ;





#pragma pack(pop)


}
# 58 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern "C" {




typedef OSErr ( * SelectorFunctionProcPtr)(OSType selector, long *response);
typedef SelectorFunctionProcPtr SelectorFunctionUPP;
# 128 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
Gestalt(
  OSType selector,
  SInt32 * response) ;
# 174 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
ReplaceGestalt(
  OSType selector,
  SelectorFunctionUPP gestaltFunction,
  SelectorFunctionUPP * oldGestaltFunction) ;
# 232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
NewGestalt(
  OSType selector,
  SelectorFunctionUPP gestaltFunction) ;
# 279 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
NewGestaltValue(
  OSType selector,
  SInt32 newValue) ;
# 319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
ReplaceGestaltValue(
  OSType selector,
  SInt32 replacementValue) ;
# 358 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
SetGestaltValue(
  OSType selector,
  SInt32 newValue) ;
# 393 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
DeleteGestaltValue(OSType selector) ;
# 406 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern SelectorFunctionUPP
NewSelectorFunctionUPP(SelectorFunctionProcPtr userRoutine) ;
# 417 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern void
DisposeSelectorFunctionUPP(SelectorFunctionUPP userUPP) ;
# 428 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
extern OSErr
InvokeSelectorFunctionUPP(
  OSType selector,
  long * response,
  SelectorFunctionUPP userUPP) ;



    inline SelectorFunctionUPP NewSelectorFunctionUPP(SelectorFunctionProcPtr userRoutine) { return userRoutine; }
    inline void DisposeSelectorFunctionUPP(SelectorFunctionUPP) { }
    inline OSErr InvokeSelectorFunctionUPP(OSType selector, long * response, SelectorFunctionUPP userUPP) { return (*userUPP)(selector, response); }
# 448 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltAddressingModeAttr = 'addr',
  gestalt32BitAddressing = 0,
  gestalt32BitSysZone = 1,
  gestalt32BitCapable = 2
};

enum {
  gestaltAFPClient = 'afps',
  gestaltAFPClientVersionMask = 0x0000FFFF,

  gestaltAFPClient3_5 = 0x0001,
  gestaltAFPClient3_6 = 0x0002,
  gestaltAFPClient3_6_1 = 0x0003,
  gestaltAFPClient3_6_2 = 0x0004,
  gestaltAFPClient3_6_3 = 0x0005,
  gestaltAFPClient3_7 = 0x0006,
  gestaltAFPClient3_7_2 = 0x0007,
  gestaltAFPClient3_8 = 0x0008,
  gestaltAFPClient3_8_1 = 0x0009,
  gestaltAFPClient3_8_3 = 0x000A,
  gestaltAFPClient3_8_4 = 0x000B,
  gestaltAFPClientAttributeMask = (long)0xFFFF0000,

  gestaltAFPClientCfgRsrc = 16,
  gestaltAFPClientSupportsIP = 29,
  gestaltAFPClientVMUI = 30,
  gestaltAFPClientMultiReq = 31
};


enum {
  gestaltAliasMgrAttr = 'alis',
  gestaltAliasMgrPresent = 0,
  gestaltAliasMgrSupportsRemoteAppletalk = 1,
  gestaltAliasMgrSupportsAOCEKeychain = 2,
  gestaltAliasMgrResolveAliasFileWithMountOptions = 3,
  gestaltAliasMgrFollowsAliasesWhenResolving = 4,
  gestaltAliasMgrSupportsExtendedCalls = 5,
  gestaltAliasMgrSupportsFSCalls = 6,
  gestaltAliasMgrPrefersPath = 7,
  gestaltAliasMgrRequiresAccessors = 8
};


enum {
  gestaltAppearanceAttr = 'appr',
  gestaltAppearanceExists = 0,
  gestaltAppearanceCompatMode = 1
};







enum {
  gestaltAppearanceVersion = 'apvr'
};

enum {
  gestaltArbitorAttr = 'arb ',
  gestaltSerialArbitrationExists = 0
};

enum {
  gestaltAppleScriptVersion = 'ascv'
};

enum {
  gestaltAppleScriptAttr = 'ascr',
  gestaltAppleScriptPresent = 0,
  gestaltAppleScriptPowerPCSupport = 1
};

enum {
  gestaltATAAttr = 'ata ',
  gestaltATAPresent = 0
};

enum {
  gestaltATalkVersion = 'atkv'
};

enum {
  gestaltAppleTalkVersion = 'atlk'
};
# 559 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltAUXVersion = 'a/ux'
};

enum {
  gestaltMacOSCompatibilityBoxAttr = 'bbox',
  gestaltMacOSCompatibilityBoxPresent = 0,
  gestaltMacOSCompatibilityBoxHasSerial = 1,
  gestaltMacOSCompatibilityBoxless = 2
};

enum {
  gestaltBusClkSpeed = 'bclk'
};

enum {
  gestaltBusClkSpeedMHz = 'bclm'
};

enum {
  gestaltCloseViewAttr = 'BSDa',
  gestaltCloseViewEnabled = 0,
  gestaltCloseViewDisplayMgrFriendly = 1
};

enum {
  gestaltCarbonVersion = 'cbon'
};

enum {
  gestaltCFMAttr = 'cfrg',
  gestaltCFMPresent = 0,
  gestaltCFMPresentMask = 0x0001,
  gestaltCFM99Present = 2,
  gestaltCFM99PresentMask = 0x0004
};

enum {
  gestaltProcessorCacheLineSize = 'csiz'
};

enum {
  gestaltCollectionMgrVersion = 'cltn'
};

enum {
  gestaltColorMatchingAttr = 'cmta',
  gestaltHighLevelMatching = 0,
  gestaltColorMatchingLibLoaded = 1
};

enum {
  gestaltColorMatchingVersion = 'cmtc',
  gestaltColorSync10 = 0x0100,
  gestaltColorSync11 = 0x0110,
  gestaltColorSync104 = 0x0104,
  gestaltColorSync105 = 0x0105,
  gestaltColorSync20 = 0x0200,
  gestaltColorSync21 = 0x0210,
  gestaltColorSync211 = 0x0211,
  gestaltColorSync212 = 0x0212,
  gestaltColorSync213 = 0x0213,
  gestaltColorSync25 = 0x0250,
  gestaltColorSync26 = 0x0260,
  gestaltColorSync261 = 0x0261,
  gestaltColorSync30 = 0x0300
};

enum {
  gestaltControlMgrVersion = 'cmvr'
};

enum {
  gestaltControlMgrAttr = 'cntl',
  gestaltControlMgrPresent = (1L << 0),


  gestaltControlMgrPresentBit = 0,
  gestaltControlMsgPresentMask = (1L << gestaltControlMgrPresentBit)
};

enum {
  gestaltConnMgrAttr = 'conn',
  gestaltConnMgrPresent = 0,
  gestaltConnMgrCMSearchFix = 1,
  gestaltConnMgrErrorString = 2,
  gestaltConnMgrMultiAsyncIO = 3
};

enum {
  gestaltColorPickerVersion = 'cpkr',
  gestaltColorPicker = 'cpkr'
};

enum {
  gestaltComponentMgr = 'cpnt',
  gestaltComponentPlatform = 'copl'
};
# 686 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltNativeCPUtype = 'cput',
  gestaltNativeCPUfamily = 'cpuf',
  gestaltCPU68000 = 0,
  gestaltCPU68010 = 1,
  gestaltCPU68020 = 2,
  gestaltCPU68030 = 3,
  gestaltCPU68040 = 4,
  gestaltCPU601 = 0x0101,
  gestaltCPU603 = 0x0103,
  gestaltCPU604 = 0x0104,
  gestaltCPU603e = 0x0106,
  gestaltCPU603ev = 0x0107,
  gestaltCPU750 = 0x0108,
  gestaltCPU604e = 0x0109,
  gestaltCPU604ev = 0x010A,
  gestaltCPUG4 = 0x010C,
  gestaltCPUG47450 = 0x0110
};

enum {
  gestaltCPUApollo = 0x0111,
  gestaltCPUG47447 = 0x0112,
  gestaltCPU750FX = 0x0120,
  gestaltCPU970 = 0x0139,
  gestaltCPU970FX = 0x013C,
  gestaltCPU970MP = 0x0144,
  gestaltCPUM18 = gestaltCPU970MP
};

enum {

  gestaltCPU486 = 'i486',
  gestaltCPUPentium = 'i586',
  gestaltCPUPentiumPro = 'i5pr',
  gestaltCPUPentiumII = 'i5ii',
  gestaltCPUX86 = 'ixxx',
  gestaltCPUPentium4 = 'i5iv'
};

enum {
  gestaltCRMAttr = 'crm ',
  gestaltCRMPresent = 0,
  gestaltCRMPersistentFix = 1,
  gestaltCRMToolRsrcCalls = 2
};

enum {
  gestaltControlStripVersion = 'csvr'
};

enum {
  gestaltCountOfCPUs = 'cpus'
};

enum {
  gestaltCTBVersion = 'ctbv'
};

enum {
  gestaltDBAccessMgrAttr = 'dbac',
  gestaltDBAccessMgrPresent = 0
};

enum {
  gestaltDiskCacheSize = 'dcsz'
};

enum {
  gestaltSDPFindVersion = 'dfnd'
};

enum {
  gestaltDictionaryMgrAttr = 'dict',
  gestaltDictionaryMgrPresent = 0
};

enum {
  gestaltDITLExtAttr = 'ditl',
  gestaltDITLExtPresent = 0,
  gestaltDITLExtSupportsIctb = 1
};

enum {
  gestaltDialogMgrAttr = 'dlog',
  gestaltDialogMgrPresent = (1L << 0),


  gestaltDialogMgrPresentBit = 0,
  gestaltDialogMgrHasAquaAlertBit = 2,
  gestaltDialogMgrPresentMask = (1L << gestaltDialogMgrPresentBit),
  gestaltDialogMgrHasAquaAlertMask = (1L << gestaltDialogMgrHasAquaAlertBit),
  gestaltDialogMsgPresentMask = gestaltDialogMgrPresentMask
};

enum {
  gestaltDesktopPicturesAttr = 'dkpx',
  gestaltDesktopPicturesInstalled = 0,
  gestaltDesktopPicturesDisplayed = 1
};

enum {
  gestaltDisplayMgrVers = 'dplv'
};

enum {
  gestaltDisplayMgrAttr = 'dply',
  gestaltDisplayMgrPresent = 0,
  gestaltDisplayMgrCanSwitchMirrored = 2,
  gestaltDisplayMgrSetDepthNotifies = 3,
  gestaltDisplayMgrCanConfirm = 4,
  gestaltDisplayMgrColorSyncAware = 5,
  gestaltDisplayMgrGeneratesProfiles = 6,
  gestaltDisplayMgrSleepNotifies = 7
};

enum {
  gestaltDragMgrAttr = 'drag',
  gestaltDragMgrPresent = 0,
  gestaltDragMgrFloatingWind = 1,
  gestaltPPCDragLibPresent = 2,
  gestaltDragMgrHasImageSupport = 3,
  gestaltCanStartDragInFloatWindow = 4,
  gestaltSetDragImageUpdates = 5
};

enum {
  gestaltDrawSprocketVersion = 'dspv'
};

enum {
  gestaltDigitalSignatureVersion = 'dsig'
};





enum {
  gestaltDTPFeatures = 'dtpf',
  kDTPThirdPartySupported = 0x00000004
};






enum {
  gestaltDTPInfo = 'dtpx'
};

enum {
  gestaltEasyAccessAttr = 'easy',
  gestaltEasyAccessOff = 0,
  gestaltEasyAccessOn = 1,
  gestaltEasyAccessSticky = 2,
  gestaltEasyAccessLocked = 3
};

enum {
  gestaltEditionMgrAttr = 'edtn',
  gestaltEditionMgrPresent = 0,
  gestaltEditionMgrTranslationAware = 1
};

enum {
  gestaltAppleEventsAttr = 'evnt',
  gestaltAppleEventsPresent = 0,
  gestaltScriptingSupport = 1,
  gestaltOSLInSystem = 2,
  gestaltSupportsApplicationURL = 4
};

enum {
  gestaltExtensionTableVersion = 'etbl'
};


enum {
  gestaltFBCIndexingState = 'fbci',
  gestaltFBCindexingSafe = 0,
  gestaltFBCindexingCritical = 1
};

enum {
  gestaltFBCVersion = 'fbcv',
  gestaltFBCCurrentVersion = 0x0011,
  gestaltOSXFBCCurrentVersion = 0x0100
};


enum {
  gestaltFileMappingAttr = 'flmp',
  gestaltFileMappingPresent = 0,
  gestaltFileMappingMultipleFilesFix = 1
};

enum {
  gestaltFloppyAttr = 'flpy',
  gestaltFloppyIsMFMOnly = 0,
  gestaltFloppyIsManualEject = 1,
  gestaltFloppyUsesDiskInPlace = 2
};

enum {
  gestaltFinderAttr = 'fndr',
  gestaltFinderDropEvent = 0,
  gestaltFinderMagicPlacement = 1,
  gestaltFinderCallsAEProcess = 2,
  gestaltOSLCompliantFinder = 3,
  gestaltFinderSupports4GBVolumes = 4,
  gestaltFinderHasClippings = 6,
  gestaltFinderFullDragManagerSupport = 7,
  gestaltFinderFloppyRootComments = 8,
  gestaltFinderLargeAndNotSavedFlavorsOK = 9,
  gestaltFinderUsesExtensibleFolderManager = 10,
  gestaltFinderUnderstandsRedirectedDesktopFolder = 11
};

enum {
  gestaltFindFolderAttr = 'fold',
  gestaltFindFolderPresent = 0,
  gestaltFolderDescSupport = 1,
  gestaltFolderMgrFollowsAliasesWhenResolving = 2,
  gestaltFolderMgrSupportsExtendedCalls = 3,
  gestaltFolderMgrSupportsDomains = 4,
  gestaltFolderMgrSupportsFSCalls = 5
};

enum {
  gestaltFindFolderRedirectionAttr = 'fole'
};


enum {
  gestaltFontMgrAttr = 'font',
  gestaltOutlineFonts = 0
};

enum {
  gestaltFPUType = 'fpu ',
  gestaltNoFPU = 0,
  gestalt68881 = 1,
  gestalt68882 = 2,
  gestalt68040FPU = 3
};

enum {
  gestaltFSAttr = 'fs  ',
  gestaltFullExtFSDispatching = 0,
  gestaltHasFSSpecCalls = 1,
  gestaltHasFileSystemManager = 2,
  gestaltFSMDoesDynamicLoad = 3,
  gestaltFSSupports4GBVols = 4,
  gestaltFSSupports2TBVols = 5,
  gestaltHasExtendedDiskInit = 6,
  gestaltDTMgrSupportsFSM = 7,
  gestaltFSNoMFSVols = 8,
  gestaltFSSupportsHFSPlusVols = 9,
  gestaltFSIncompatibleDFA82 = 10
};

enum {
  gestaltFSSupportsDirectIO = 11
};

enum {
  gestaltHasHFSPlusAPIs = 12,
  gestaltMustUseFCBAccessors = 13,
  gestaltFSUsesPOSIXPathsForConversion = 14,
  gestaltFSSupportsExclusiveLocks = 15,
  gestaltFSSupportsHardLinkDetection = 16,
  gestaltFSAllowsConcurrentAsyncIO = 17
};

enum {
  gestaltAdminFeaturesFlagsAttr = 'fred',
  gestaltFinderUsesSpecialOpenFoldersFile = 0
};

enum {
  gestaltFSMVersion = 'fsm '
};

enum {
  gestaltFXfrMgrAttr = 'fxfr',
  gestaltFXfrMgrPresent = 0,
  gestaltFXfrMgrMultiFile = 1,
  gestaltFXfrMgrErrorString = 2,
  gestaltFXfrMgrAsync = 3
};

enum {
  gestaltGraphicsAttr = 'gfxa',
  gestaltGraphicsIsDebugging = 0x00000001,
  gestaltGraphicsIsLoaded = 0x00000002,
  gestaltGraphicsIsPowerPC = 0x00000004
};

enum {
  gestaltGraphicsVersion = 'grfx',
  gestaltCurrentGraphicsVersion = 0x00010200
};

enum {
  gestaltHardwareAttr = 'hdwr',
  gestaltHasVIA1 = 0,
  gestaltHasVIA2 = 1,
  gestaltHasASC = 3,
  gestaltHasSCC = 4,
  gestaltHasSCSI = 7,
  gestaltHasSoftPowerOff = 19,
  gestaltHasSCSI961 = 21,
  gestaltHasSCSI962 = 22,
  gestaltHasUniversalROM = 24,
  gestaltHasEnhancedLtalk = 30
};

enum {
  gestaltHelpMgrAttr = 'help',
  gestaltHelpMgrPresent = 0,
  gestaltHelpMgrExtensions = 1,
  gestaltAppleGuideIsDebug = 30,
  gestaltAppleGuidePresent = 31
};

enum {
  gestaltHardwareVendorCode = 'hrad',
  gestaltHardwareVendorApple = 'Appl'
};

enum {
  gestaltCompressionMgr = 'icmp'
};

enum {
  gestaltIconUtilitiesAttr = 'icon',
  gestaltIconUtilitiesPresent = 0,
  gestaltIconUtilitiesHas48PixelIcons = 1,
  gestaltIconUtilitiesHas32BitIcons = 2,
  gestaltIconUtilitiesHas8BitDeepMasks = 3,
  gestaltIconUtilitiesHasIconServices = 4
};

enum {
  gestaltInternalDisplay = 'idsp'
};





enum {
  gestaltKeyboardType = 'kbd ',
  gestaltMacKbd = 1,
  gestaltMacAndPad = 2,
  gestaltMacPlusKbd = 3,
  gestaltUnknownThirdPartyKbd = 3,
  gestaltExtADBKbd = 4,
  gestaltStdADBKbd = 5,
  gestaltPrtblADBKbd = 6,
  gestaltPrtblISOKbd = 7,
  gestaltStdISOADBKbd = 8,
  gestaltExtISOADBKbd = 9,
  gestaltADBKbdII = 10,
  gestaltADBISOKbdII = 11,
  gestaltPwrBookADBKbd = 12,
  gestaltPwrBookISOADBKbd = 13,
  gestaltAppleAdjustKeypad = 14,
  gestaltAppleAdjustADBKbd = 15,
  gestaltAppleAdjustISOKbd = 16,
  gestaltJapanAdjustADBKbd = 17,
  gestaltPwrBkExtISOKbd = 20,
  gestaltPwrBkExtJISKbd = 21,
  gestaltPwrBkExtADBKbd = 24,
  gestaltPS2Keyboard = 27,
  gestaltPwrBkSubDomKbd = 28,
  gestaltPwrBkSubISOKbd = 29,
  gestaltPwrBkSubJISKbd = 30,
  gestaltPortableUSBANSIKbd = 37,
  gestaltPortableUSBISOKbd = 38,
  gestaltPortableUSBJISKbd = 39,
  gestaltThirdPartyANSIKbd = 40,
  gestaltThirdPartyISOKbd = 41,
  gestaltThirdPartyJISKbd = 42,
  gestaltPwrBkEKDomKbd = 195,
  gestaltPwrBkEKISOKbd = 196,
  gestaltPwrBkEKJISKbd = 197,
  gestaltUSBCosmoANSIKbd = 198,
  gestaltUSBCosmoISOKbd = 199,
  gestaltUSBCosmoJISKbd = 200,
  gestaltPwrBk99JISKbd = 201,
  gestaltUSBAndyANSIKbd = 204,
  gestaltUSBAndyISOKbd = 205,
  gestaltUSBAndyJISKbd = 206
};


enum {
  gestaltPortable2001ANSIKbd = 202,
  gestaltPortable2001ISOKbd = 203,
  gestaltPortable2001JISKbd = 207
};

enum {
  gestaltUSBProF16ANSIKbd = 34,
  gestaltUSBProF16ISOKbd = 35,
  gestaltUSBProF16JISKbd = 36,
  gestaltProF16ANSIKbd = 31,
  gestaltProF16ISOKbd = 32,
  gestaltProF16JISKbd = 33
};





enum {
  gestaltUDFSupport = 'kudf'
};

enum {
  gestaltLowMemorySize = 'lmem'
};

enum {
  gestaltLogicalRAMSize = 'lram'
};
# 1213 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltMachineType = 'mach',
  gestaltClassic = 1,
  gestaltMacXL = 2,
  gestaltMac512KE = 3,
  gestaltMacPlus = 4,
  gestaltMacSE = 5,
  gestaltMacII = 6,
  gestaltMacIIx = 7,
  gestaltMacIIcx = 8,
  gestaltMacSE030 = 9,
  gestaltPortable = 10,
  gestaltMacIIci = 11,
  gestaltPowerMac8100_120 = 12,
  gestaltMacIIfx = 13,
  gestaltMacClassic = 17,
  gestaltMacIIsi = 18,
  gestaltMacLC = 19,
  gestaltMacQuadra900 = 20,
  gestaltPowerBook170 = 21,
  gestaltMacQuadra700 = 22,
  gestaltClassicII = 23,
  gestaltPowerBook100 = 24,
  gestaltPowerBook140 = 25,
  gestaltMacQuadra950 = 26,
  gestaltMacLCIII = 27,
  gestaltPerforma450 = gestaltMacLCIII,
  gestaltPowerBookDuo210 = 29,
  gestaltMacCentris650 = 30,
  gestaltPowerBookDuo230 = 32,
  gestaltPowerBook180 = 33,
  gestaltPowerBook160 = 34,
  gestaltMacQuadra800 = 35,
  gestaltMacQuadra650 = 36,
  gestaltMacLCII = 37,
  gestaltPowerBookDuo250 = 38,
  gestaltAWS9150_80 = 39,
  gestaltPowerMac8100_110 = 40,
  gestaltAWS8150_110 = gestaltPowerMac8100_110,
  gestaltPowerMac5200 = 41,
  gestaltPowerMac5260 = gestaltPowerMac5200,
  gestaltPerforma5300 = gestaltPowerMac5200,
  gestaltPowerMac6200 = 42,
  gestaltPerforma6300 = gestaltPowerMac6200,
  gestaltMacIIvi = 44,
  gestaltMacIIvm = 45,
  gestaltPerforma600 = gestaltMacIIvm,
  gestaltPowerMac7100_80 = 47,
  gestaltMacIIvx = 48,
  gestaltMacColorClassic = 49,
  gestaltPerforma250 = gestaltMacColorClassic,
  gestaltPowerBook165c = 50,
  gestaltMacCentris610 = 52,
  gestaltMacQuadra610 = 53,
  gestaltPowerBook145 = 54,
  gestaltPowerMac8100_100 = 55,
  gestaltMacLC520 = 56,
  gestaltAWS9150_120 = 57,
  gestaltPowerMac6400 = 58,
  gestaltPerforma6400 = gestaltPowerMac6400,
  gestaltPerforma6360 = gestaltPerforma6400,
  gestaltMacCentris660AV = 60,
  gestaltMacQuadra660AV = gestaltMacCentris660AV,
  gestaltPerforma46x = 62,
  gestaltPowerMac8100_80 = 65,
  gestaltAWS8150_80 = gestaltPowerMac8100_80,
  gestaltPowerMac9500 = 67,
  gestaltPowerMac9600 = gestaltPowerMac9500,
  gestaltPowerMac7500 = 68,
  gestaltPowerMac7600 = gestaltPowerMac7500,
  gestaltPowerMac8500 = 69,
  gestaltPowerMac8600 = gestaltPowerMac8500,
  gestaltAWS8550 = gestaltPowerMac7500,
  gestaltPowerBook180c = 71,
  gestaltPowerBook520 = 72,
  gestaltPowerBook520c = gestaltPowerBook520,
  gestaltPowerBook540 = gestaltPowerBook520,
  gestaltPowerBook540c = gestaltPowerBook520,
  gestaltPowerMac5400 = 74,
  gestaltPowerMac6100_60 = 75,
  gestaltAWS6150_60 = gestaltPowerMac6100_60,
  gestaltPowerBookDuo270c = 77,
  gestaltMacQuadra840AV = 78,
  gestaltPerforma550 = 80,
  gestaltPowerBook165 = 84,
  gestaltPowerBook190 = 85,
  gestaltMacTV = 88,
  gestaltMacLC475 = 89,
  gestaltPerforma47x = gestaltMacLC475,
  gestaltMacLC575 = 92,
  gestaltMacQuadra605 = 94,
  gestaltMacQuadra630 = 98,
  gestaltMacLC580 = 99,
  gestaltPerforma580 = gestaltMacLC580,
  gestaltPowerMac6100_66 = 100,
  gestaltAWS6150_66 = gestaltPowerMac6100_66,
  gestaltPowerBookDuo280 = 102,
  gestaltPowerBookDuo280c = 103,
  gestaltPowerMacLC475 = 104,
  gestaltPowerMacPerforma47x = gestaltPowerMacLC475,
  gestaltPowerMacLC575 = 105,
  gestaltPowerMacPerforma57x = gestaltPowerMacLC575,
  gestaltPowerMacQuadra630 = 106,
  gestaltPowerMacLC630 = gestaltPowerMacQuadra630,
  gestaltPowerMacPerforma63x = gestaltPowerMacQuadra630,
  gestaltPowerMac7200 = 108,
  gestaltPowerMac7300 = 109,
  gestaltPowerMac7100_66 = 112,
  gestaltPowerBook150 = 115,
  gestaltPowerMacQuadra700 = 116,
  gestaltPowerMacQuadra900 = 117,
  gestaltPowerMacQuadra950 = 118,
  gestaltPowerMacCentris610 = 119,
  gestaltPowerMacCentris650 = 120,
  gestaltPowerMacQuadra610 = 121,
  gestaltPowerMacQuadra650 = 122,
  gestaltPowerMacQuadra800 = 123,
  gestaltPowerBookDuo2300 = 124,
  gestaltPowerBook500PPCUpgrade = 126,
  gestaltPowerBook5300 = 128,
  gestaltPowerBook1400 = 310,
  gestaltPowerBook3400 = 306,
  gestaltPowerBook2400 = 307,
  gestaltPowerBookG3Series = 312,
  gestaltPowerBookG3 = 313,
  gestaltPowerBookG3Series2 = 314,
  gestaltPowerMacNewWorld = 406,
  gestaltPowerMacG3 = 510,
  gestaltPowerMac5500 = 512,
  gestalt20thAnniversary = gestaltPowerMac5500,
  gestaltPowerMac6500 = 513,
  gestaltPowerMac4400_160 = 514,
  gestaltPowerMac4400 = 515,
  gestaltMacOSCompatibility = 1206
};


enum {
  gestaltQuadra605 = gestaltMacQuadra605,
  gestaltQuadra610 = gestaltMacQuadra610,
  gestaltQuadra630 = gestaltMacQuadra630,
  gestaltQuadra650 = gestaltMacQuadra650,
  gestaltQuadra660AV = gestaltMacQuadra660AV,
  gestaltQuadra700 = gestaltMacQuadra700,
  gestaltQuadra800 = gestaltMacQuadra800,
  gestaltQuadra840AV = gestaltMacQuadra840AV,
  gestaltQuadra900 = gestaltMacQuadra900,
  gestaltQuadra950 = gestaltMacQuadra950
};

enum {
  kMachineNameStrID = -16395
};

enum {
  gestaltSMPMailerVersion = 'malr'
};

enum {
  gestaltMediaBay = 'mbeh',
  gestaltMBLegacy = 0,
  gestaltMBSingleBay = 1,
  gestaltMBMultipleBays = 2
};

enum {
  gestaltMessageMgrVersion = 'mess'
};



enum {
  gestaltMenuMgrAttr = 'menu',
  gestaltMenuMgrPresent = (1L << 0),


  gestaltMenuMgrPresentBit = 0,
  gestaltMenuMgrAquaLayoutBit = 1,
  gestaltMenuMgrMultipleItemsWithCommandIDBit = 2,
  gestaltMenuMgrRetainsIconRefBit = 3,
  gestaltMenuMgrSendsMenuBoundsToDefProcBit = 4,
  gestaltMenuMgrMoreThanFiveMenusDeepBit = 5,
  gestaltMenuMgrCGImageMenuTitleBit = 6,

  gestaltMenuMgrPresentMask = (1L << gestaltMenuMgrPresentBit),
  gestaltMenuMgrAquaLayoutMask = (1L << gestaltMenuMgrAquaLayoutBit),
  gestaltMenuMgrMultipleItemsWithCommandIDMask = (1L << gestaltMenuMgrMultipleItemsWithCommandIDBit),
  gestaltMenuMgrRetainsIconRefMask = (1L << gestaltMenuMgrRetainsIconRefBit),
  gestaltMenuMgrSendsMenuBoundsToDefProcMask = (1L << gestaltMenuMgrSendsMenuBoundsToDefProcBit),
  gestaltMenuMgrMoreThanFiveMenusDeepMask = (1L << gestaltMenuMgrMoreThanFiveMenusDeepBit),
  gestaltMenuMgrCGImageMenuTitleMask = (1L << gestaltMenuMgrCGImageMenuTitleBit)
};


enum {
  gestaltMultipleUsersState = 'mfdr'
};


enum {
  gestaltMachineIcon = 'micn'
};

enum {
  gestaltMiscAttr = 'misc',
  gestaltScrollingThrottle = 0,
  gestaltSquareMenuBar = 2
};
# 1437 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltMixedModeVersion = 'mixd'
};

enum {
  gestaltMixedModeAttr = 'mixd',
  gestaltMixedModePowerPC = 0,
  gestaltPowerPCAware = 0,
  gestaltMixedModeCFM68K = 1,
  gestaltMixedModeCFM68KHasTrap = 2,
  gestaltMixedModeCFM68KHasState = 3
};

enum {
  gestaltQuickTimeConferencing = 'mtlk'
};

enum {
  gestaltMemoryMapAttr = 'mmap',
  gestaltMemoryMapSparse = 0
};

enum {
  gestaltMMUType = 'mmu ',
  gestaltNoMMU = 0,
  gestaltAMU = 1,
  gestalt68851 = 2,
  gestalt68030MMU = 3,
  gestalt68040MMU = 4,
  gestaltEMMU1 = 5
};

enum {



  gestaltUserVisibleMachineName = 'mnam'
};

enum {
  gestaltMPCallableAPIsAttr = 'mpsc',
  gestaltMPFileManager = 0,
  gestaltMPDeviceManager = 1,
  gestaltMPTrapCalls = 2
};

enum {
  gestaltStdNBPAttr = 'nlup',
  gestaltStdNBPPresent = 0,
  gestaltStdNBPSupportsAutoPosition = 1
};

enum {
  gestaltNotificationMgrAttr = 'nmgr',
  gestaltNotificationPresent = 0
};

enum {
  gestaltNameRegistryVersion = 'nreg'
};

enum {
  gestaltNuBusSlotCount = 'nubs'
};

enum {
  gestaltOCEToolboxVersion = 'ocet',
  gestaltOCETB = 0x0102,
  gestaltSFServer = 0x0100
};

enum {
  gestaltOCEToolboxAttr = 'oceu',
  gestaltOCETBPresent = 0x01,
  gestaltOCETBAvailable = 0x02,
  gestaltOCESFServerAvailable = 0x04,
  gestaltOCETBNativeGlueAvailable = 0x10
};

enum {
  gestaltOpenFirmwareInfo = 'opfw'
};

enum {
  gestaltOSAttr = 'os  ',
  gestaltSysZoneGrowable = 0,
  gestaltLaunchCanReturn = 1,
  gestaltLaunchFullFileSpec = 2,
  gestaltLaunchControl = 3,
  gestaltTempMemSupport = 4,
  gestaltRealTempMemory = 5,
  gestaltTempMemTracked = 6,
  gestaltIPCSupport = 7,
  gestaltSysDebuggerSupport = 8,
  gestaltNativeProcessMgrBit = 19,
  gestaltAltivecRegistersSwappedCorrectlyBit = 20
};

enum {
  gestaltOSTable = 'ostt'
};
# 1546 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltOpenTptNetworkSetup = 'otcf',
  gestaltOpenTptNetworkSetupLegacyImport = 0,
  gestaltOpenTptNetworkSetupLegacyExport = 1,
  gestaltOpenTptNetworkSetupSupportsMultihoming = 2
};

enum {
  gestaltOpenTptNetworkSetupVersion = 'otcv'
};







enum {
  gestaltOpenTptRemoteAccess = 'otra',
  gestaltOpenTptRemoteAccessPresent = 0,
  gestaltOpenTptRemoteAccessLoaded = 1,
  gestaltOpenTptRemoteAccessClientOnly = 2,
  gestaltOpenTptRemoteAccessPServer = 3,
  gestaltOpenTptRemoteAccessMPServer = 4,
  gestaltOpenTptPPPPresent = 5,
  gestaltOpenTptARAPPresent = 6
};

enum {
  gestaltOpenTptRemoteAccessVersion = 'otrv'
};





enum {
  gestaltOpenTptVersions = 'otvr'
};

enum {
  gestaltOpenTpt = 'otan',
  gestaltOpenTptPresentMask = 0x00000001,
  gestaltOpenTptLoadedMask = 0x00000002,
  gestaltOpenTptAppleTalkPresentMask = 0x00000004,
  gestaltOpenTptAppleTalkLoadedMask = 0x00000008,
  gestaltOpenTptTCPPresentMask = 0x00000010,
  gestaltOpenTptTCPLoadedMask = 0x00000020,
  gestaltOpenTptIPXSPXPresentMask = 0x00000040,
  gestaltOpenTptIPXSPXLoadedMask = 0x00000080,
  gestaltOpenTptPresentBit = 0,
  gestaltOpenTptLoadedBit = 1,
  gestaltOpenTptAppleTalkPresentBit = 2,
  gestaltOpenTptAppleTalkLoadedBit = 3,
  gestaltOpenTptTCPPresentBit = 4,
  gestaltOpenTptTCPLoadedBit = 5,
  gestaltOpenTptIPXSPXPresentBit = 6,
  gestaltOpenTptIPXSPXLoadedBit = 7
};


enum {
  gestaltPCCard = 'pccd',
  gestaltCardServicesPresent = 0,
  gestaltPCCardFamilyPresent = 1,
  gestaltPCCardHasPowerControl = 2,
  gestaltPCCardSupportsCardBus = 3
};

enum {
  gestaltProcClkSpeed = 'pclk'
};

enum {
  gestaltProcClkSpeedMHz = 'mclk'
};

enum {
  gestaltPCXAttr = 'pcxg',
  gestaltPCXHas8and16BitFAT = 0,
  gestaltPCXHasProDOS = 1,
  gestaltPCXNewUI = 2,
  gestaltPCXUseICMapping = 3
};

enum {
  gestaltLogicalPageSize = 'pgsz'
};
# 1645 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltScreenCaptureMain = 'pic1',
  gestaltScreenCaptureDir = 'pic2'
};

enum {
  gestaltGXPrintingMgrVersion = 'pmgr'
};

enum {
  gestaltPopupAttr = 'pop!',
  gestaltPopupPresent = 0
};

enum {
  gestaltPowerMgrAttr = 'powr',
  gestaltPMgrExists = 0,
  gestaltPMgrCPUIdle = 1,
  gestaltPMgrSCC = 2,
  gestaltPMgrSound = 3,
  gestaltPMgrDispatchExists = 4,
  gestaltPMgrSupportsAVPowerStateAtSleepWake = 5
};

enum {
  gestaltPowerMgrVers = 'pwrv'
};







enum {
  gestaltPPCToolboxAttr = 'ppc ',
  gestaltPPCToolboxPresent = 0x0000,
  gestaltPPCSupportsRealTime = 0x1000,
  gestaltPPCSupportsIncoming = 0x0001,
  gestaltPPCSupportsOutGoing = 0x0002,
  gestaltPPCSupportsTCP_IP = 0x0004,
  gestaltPPCSupportsIncomingAppleTalk = 0x0010,
  gestaltPPCSupportsIncomingTCP_IP = 0x0020,
  gestaltPPCSupportsOutgoingAppleTalk = 0x0100,
  gestaltPPCSupportsOutgoingTCP_IP = 0x0200
};






enum {
  gestaltPowerPCProcessorFeatures = 'ppcf',
  gestaltPowerPCHasGraphicsInstructions = 0,
  gestaltPowerPCHasSTFIWXInstruction = 1,
  gestaltPowerPCHasSquareRootInstructions = 2,
  gestaltPowerPCHasDCBAInstruction = 3,
  gestaltPowerPCHasVectorInstructions = 4,
  gestaltPowerPCHasDataStreams = 5,
  gestaltPowerPCHas64BitSupport = 6,
  gestaltPowerPCHasDCBTStreams = 7,
  gestaltPowerPCASArchitecture = 8,
  gestaltPowerPCIgnoresDCBST = 9
};

enum {
  gestaltProcessorType = 'proc',
  gestalt68000 = 1,
  gestalt68010 = 2,
  gestalt68020 = 3,
  gestalt68030 = 4,
  gestalt68040 = 5
};

enum {
  gestaltSDPPromptVersion = 'prpv'
};

enum {
  gestaltParityAttr = 'prty',
  gestaltHasParityCapability = 0,
  gestaltParityEnabled = 1
};

enum {
  gestaltQD3DVersion = 'q3v '
};

enum {
  gestaltQD3DViewer = 'q3vc',
  gestaltQD3DViewerPresent = 0
};
# 1747 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltQuickdrawVersion = 'qd  ',
  gestaltOriginalQD = 0x0000,
  gestalt8BitQD = 0x0100,
  gestalt32BitQD = 0x0200,
  gestalt32BitQD11 = 0x0201,
  gestalt32BitQD12 = 0x0220,
  gestalt32BitQD13 = 0x0230,
  gestaltAllegroQD = 0x0250,
  gestaltMacOSXQD = 0x0300
};

enum {
  gestaltQD3D = 'qd3d',
  gestaltQD3DPresent = 0
};
# 1772 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltGXVersion = 'qdgx'
};

enum {
  gestaltQuickdrawFeatures = 'qdrw',
  gestaltHasColor = 0,
  gestaltHasDeepGWorlds = 1,
  gestaltHasDirectPixMaps = 2,
  gestaltHasGrayishTextOr = 3,
  gestaltSupportsMirroring = 4,
  gestaltQDHasLongRowBytes = 5
};

enum {
  gestaltQDTextVersion = 'qdtx',
  gestaltOriginalQDText = 0x0000,
  gestaltAllegroQDText = 0x0100,
  gestaltMacOSXQDText = 0x0200
};

enum {
  gestaltQDTextFeatures = 'qdtf',
  gestaltWSIISupport = 0,
  gestaltSbitFontSupport = 1,
  gestaltAntiAliasedTextAvailable = 2,
  gestaltOFA2available = 3,
  gestaltCreatesAliasFontRsrc = 4,
  gestaltNativeType1FontSupport = 5,
  gestaltCanUseCGTextRendering = 6
};


enum {
  gestaltQuickTimeConferencingInfo = 'qtci'
};

enum {
  gestaltQuickTimeVersion = 'qtim',
  gestaltQuickTime = 'qtim'
};

enum {
  gestaltQuickTimeFeatures = 'qtrs',
  gestaltPPCQuickTimeLibPresent = 0
};

enum {
  gestaltQuickTimeStreamingFeatures = 'qtsf'
};

enum {
  gestaltQuickTimeStreamingVersion = 'qtst'
};

enum {
  gestaltQuickTimeThreadSafeFeaturesAttr = 'qtth',
  gestaltQuickTimeThreadSafeICM = 0,
  gestaltQuickTimeThreadSafeMovieToolbox = 1,
  gestaltQuickTimeThreadSafeMovieImport = 2,
  gestaltQuickTimeThreadSafeMovieExport = 3,
  gestaltQuickTimeThreadSafeGraphicsImport = 4,
  gestaltQuickTimeThreadSafeGraphicsExport = 5,
  gestaltQuickTimeThreadSafeMoviePlayback = 6
};

enum {
  gestaltQTVRMgrAttr = 'qtvr',
  gestaltQTVRMgrPresent = 0,
  gestaltQTVRObjMoviesPresent = 1,
  gestaltQTVRCylinderPanosPresent = 2,
  gestaltQTVRCubicPanosPresent = 3
};

enum {
  gestaltQTVRMgrVers = 'qtvv'
};
# 1862 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltPhysicalRAMSize = 'ram '
};

enum {
  gestaltPhysicalRAMSizeInMegabytes = 'ramm'
};

enum {
  gestaltRBVAddr = 'rbv '
};

enum {
  gestaltROMSize = 'rom '
};

enum {
  gestaltROMVersion = 'romv'
};

enum {
  gestaltResourceMgrAttr = 'rsrc',
  gestaltPartialRsrcs = 0,
  gestaltHasResourceOverrides = 1
};

enum {
  gestaltResourceMgrBugFixesAttrs = 'rmbg',
  gestaltRMForceSysHeapRolledIn = 0,
  gestaltRMFakeAppleMenuItemsRolledIn = 1,
  gestaltSanityCheckResourceFiles = 2,
  gestaltSupportsFSpResourceFileAlreadyOpenBit = 3,
  gestaltRMSupportsFSCalls = 4,
  gestaltRMTypeIndexOrderingReverse = 8
};


enum {
  gestaltRealtimeMgrAttr = 'rtmr',
  gestaltRealtimeMgrPresent = 0
};


enum {
  gestaltSafeOFAttr = 'safe',
  gestaltVMZerosPagesBit = 0,
  gestaltInitHeapZerosOutHeapsBit = 1,
  gestaltNewHandleReturnsZeroedMemoryBit = 2,
  gestaltNewPtrReturnsZeroedMemoryBit = 3,
  gestaltFileAllocationZeroedBlocksBit = 4
};


enum {
  gestaltSCCReadAddr = 'sccr'
};

enum {
  gestaltSCCWriteAddr = 'sccw'
};

enum {
  gestaltScrapMgrAttr = 'scra',
  gestaltScrapMgrTranslationAware = 0
};

enum {
  gestaltScriptMgrVersion = 'scri'
};

enum {
  gestaltScriptCount = 'scr#'
};

enum {
  gestaltSCSI = 'scsi',
  gestaltAsyncSCSI = 0,
  gestaltAsyncSCSIINROM = 1,
  gestaltSCSISlotBoot = 2,
  gestaltSCSIPollSIH = 3
};

enum {
  gestaltControlStripAttr = 'sdev',
  gestaltControlStripExists = 0,
  gestaltControlStripVersionFixed = 1,
  gestaltControlStripUserFont = 2,
  gestaltControlStripUserHotKey = 3
};

enum {
  gestaltSDPStandardDirectoryVersion = 'sdvr'
};

enum {
  gestaltSerialAttr = 'ser ',
  gestaltHasGPIaToDCDa = 0,
  gestaltHasGPIaToRTxCa = 1,
  gestaltHasGPIbToDCDb = 2,
  gestaltHidePortA = 3,
  gestaltHidePortB = 4,
  gestaltPortADisabled = 5,
  gestaltPortBDisabled = 6
};

enum {
  gestaltShutdownAttributes = 'shut',
  gestaltShutdownHassdOnBootVolUnmount = 0
};

enum {
  gestaltNuBusConnectors = 'sltc'
};

enum {
  gestaltSlotAttr = 'slot',
  gestaltSlotMgrExists = 0,
  gestaltNuBusPresent = 1,
  gestaltSESlotPresent = 2,
  gestaltSE30SlotPresent = 3,
  gestaltPortableSlotPresent = 4
};

enum {
  gestaltFirstSlotNumber = 'slt1'
};

enum {
  gestaltSoundAttr = 'snd ',
  gestaltStereoCapability = 0,
  gestaltStereoMixing = 1,
  gestaltSoundIOMgrPresent = 3,
  gestaltBuiltInSoundInput = 4,
  gestaltHasSoundInputDevice = 5,
  gestaltPlayAndRecord = 6,
  gestalt16BitSoundIO = 7,
  gestaltStereoInput = 8,
  gestaltLineLevelInput = 9,

  gestaltSndPlayDoubleBuffer = 10,
  gestaltMultiChannels = 11,
  gestalt16BitAudioSupport = 12
};

enum {
  gestaltSplitOSAttr = 'spos',
  gestaltSplitOSBootDriveIsNetworkVolume = 0,
  gestaltSplitOSAware = 1,
  gestaltSplitOSEnablerVolumeIsDifferentFromBootVolume = 2,
  gestaltSplitOSMachineNameSetToNetworkNameTemp = 3,
  gestaltSplitOSMachineNameStartupDiskIsNonPersistent = 5
};

enum {
  gestaltSMPSPSendLetterVersion = 'spsl'
};

enum {
  gestaltSpeechRecognitionAttr = 'srta',
  gestaltDesktopSpeechRecognition = 1,
  gestaltTelephoneSpeechRecognition = 2
};

enum {
  gestaltSpeechRecognitionVersion = 'srtb'
};

enum {
  gestaltSoftwareVendorCode = 'srad',
  gestaltSoftwareVendorApple = 'Appl',
  gestaltSoftwareVendorLicensee = 'Lcns'
};

enum {
  gestaltStandardFileAttr = 'stdf',
  gestaltStandardFile58 = 0,
  gestaltStandardFileTranslationAware = 1,
  gestaltStandardFileHasColorIcons = 2,
  gestaltStandardFileUseGenericIcons = 3,
  gestaltStandardFileHasDynamicVolumeAllocation = 4
};

enum {
  gestaltSysArchitecture = 'sysa',
  gestalt68k = 1,
  gestaltPowerPC = 2,
  gestaltIntel = 10
};

enum {
  gestaltSystemUpdateVersion = 'sysu'
};
# 2074 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Gestalt.h" 3
enum {
  gestaltSystemVersion = 'sysv',
  gestaltSystemVersionMajor = 'sys1',
  gestaltSystemVersionMinor = 'sys2',
  gestaltSystemVersionBugFix = 'sys3'
};

enum {
  gestaltToolboxTable = 'tbtt'
};

enum {
  gestaltTextEditVersion = 'te  ',
  gestaltTE1 = 1,
  gestaltTE2 = 2,
  gestaltTE3 = 3,
  gestaltTE4 = 4,
  gestaltTE5 = 5
};

enum {
  gestaltTE6 = 6
};

enum {
  gestaltTEAttr = 'teat',
  gestaltTEHasGetHiliteRgn = 0,
  gestaltTESupportsInlineInput = 1,
  gestaltTESupportsTextObjects = 2,
  gestaltTEHasWhiteBackground = 3
};

enum {
  gestaltTeleMgrAttr = 'tele',
  gestaltTeleMgrPresent = 0,
  gestaltTeleMgrPowerPCSupport = 1,
  gestaltTeleMgrSoundStreams = 2,
  gestaltTeleMgrAutoAnswer = 3,
  gestaltTeleMgrIndHandset = 4,
  gestaltTeleMgrSilenceDetect = 5,
  gestaltTeleMgrNewTELNewSupport = 6
};

enum {
  gestaltTermMgrAttr = 'term',
  gestaltTermMgrPresent = 0,
  gestaltTermMgrErrorString = 2
};

enum {
  gestaltThreadMgrAttr = 'thds',
  gestaltThreadMgrPresent = 0,
  gestaltSpecificMatchSupport = 1,
  gestaltThreadsLibraryPresent = 2
};

enum {
  gestaltTimeMgrVersion = 'tmgr',
  gestaltStandardTimeMgr = 1,
  gestaltRevisedTimeMgr = 2,
  gestaltExtendedTimeMgr = 3,
  gestaltNativeTimeMgr = 4
};

enum {
  gestaltTSMTEVersion = 'tmTV',
  gestaltTSMTE1 = 0x0100,
  gestaltTSMTE15 = 0x0150,
  gestaltTSMTE152 = 0x0152
};

enum {
  gestaltTSMTEAttr = 'tmTE',
  gestaltTSMTEPresent = 0,
  gestaltTSMTE = 0
};

enum {
  gestaltAVLTreeAttr = 'tree',
  gestaltAVLTreePresentBit = 0,
  gestaltAVLTreeSupportsHandleBasedTreeBit = 1,
  gestaltAVLTreeSupportsTreeLockingBit = 2
};

enum {
  gestaltALMAttr = 'trip',
  gestaltALMPresent = 0,
  gestaltALMHasSFGroup = 1,
  gestaltALMHasCFMSupport = 2,
  gestaltALMHasRescanNotifiers = 3
};

enum {
  gestaltALMHasSFLocation = gestaltALMHasSFGroup
};

enum {
  gestaltTSMgrVersion = 'tsmv',
  gestaltTSMgr15 = 0x0150,
  gestaltTSMgr20 = 0x0200,
  gestaltTSMgr22 = 0x0220,
  gestaltTSMgr23 = 0x0230
};

enum {
  gestaltTSMgrAttr = 'tsma',
  gestaltTSMDisplayMgrAwareBit = 0,
  gestaltTSMdoesTSMTEBit = 1
};

enum {
  gestaltSpeechAttr = 'ttsc',
  gestaltSpeechMgrPresent = 0,
  gestaltSpeechHasPPCGlue = 1
};

enum {
  gestaltTVAttr = 'tv  ',
  gestaltHasTVTuner = 0,
  gestaltHasSoundFader = 1,
  gestaltHasHWClosedCaptioning = 2,
  gestaltHasIRRemote = 3,
  gestaltHasVidDecoderScaler = 4,
  gestaltHasStereoDecoder = 5,
  gestaltHasSerialFader = 6,
  gestaltHasFMTuner = 7,
  gestaltHasSystemIRFunction = 8,
  gestaltIRDisabled = 9,
  gestaltINeedIRPowerOffConfirm = 10,
  gestaltHasZoomedVideo = 11
};


enum {
  gestaltATSUVersion = 'uisv',
  gestaltOriginalATSUVersion = (1 << 16),
  gestaltATSUUpdate1 = (2 << 16),
  gestaltATSUUpdate2 = (3 << 16),
  gestaltATSUUpdate3 = (4 << 16),
  gestaltATSUUpdate4 = (5 << 16),
  gestaltATSUUpdate5 = (6 << 16),
  gestaltATSUUpdate6 = (7 << 16),
  gestaltATSUUpdate7 = (8 << 16)
};

enum {
  gestaltATSUFeatures = 'uisf',
  gestaltATSUTrackingFeature = 0x00000001,
  gestaltATSUMemoryFeature = 0x00000001,
  gestaltATSUFallbacksFeature = 0x00000001,
  gestaltATSUGlyphBoundsFeature = 0x00000001,
  gestaltATSULineControlFeature = 0x00000001,
  gestaltATSULayoutCreateAndCopyFeature = 0x00000001,
  gestaltATSULayoutCacheClearFeature = 0x00000001,
  gestaltATSUTextLocatorUsageFeature = 0x00000002,
  gestaltATSULowLevelOrigFeatures = 0x00000004,
  gestaltATSUFallbacksObjFeatures = 0x00000008,
  gestaltATSUIgnoreLeadingFeature = 0x00000008,
  gestaltATSUByCharacterClusterFeature = 0x00000010,
  gestaltATSUAscentDescentControlsFeature = 0x00000010,
  gestaltATSUHighlightInactiveTextFeature = 0x00000010,
  gestaltATSUPositionToCursorFeature = 0x00000010,
  gestaltATSUBatchBreakLinesFeature = 0x00000010,
  gestaltATSUTabSupportFeature = 0x00000010,
  gestaltATSUDirectAccess = 0x00000010,
  gestaltATSUDecimalTabFeature = 0x00000020,
  gestaltATSUBiDiCursorPositionFeature = 0x00000020,
  gestaltATSUNearestCharLineBreakFeature = 0x00000020,
  gestaltATSUHighlightColorControlFeature = 0x00000020,
  gestaltATSUUnderlineOptionsStyleFeature = 0x00000020,
  gestaltATSUStrikeThroughStyleFeature = 0x00000020,
  gestaltATSUDropShadowStyleFeature = 0x00000020
};

enum {
  gestaltUSBAttr = 'usb ',
  gestaltUSBPresent = 0,
  gestaltUSBHasIsoch = 1
};

enum {
  gestaltUSBVersion = 'usbv'
};

enum {
  gestaltVersion = 'vers',
  gestaltValueImplementedVers = 5
};

enum {
  gestaltVIA1Addr = 'via1'
};

enum {
  gestaltVIA2Addr = 'via2'
};

enum {
  gestaltVMAttr = 'vm  ',
  gestaltVMPresent = 0,
  gestaltVMHasLockMemoryForOutput = 1,
  gestaltVMFilemappingOn = 3,
  gestaltVMHasPagingControl = 4
};

enum {
  gestaltVMInfoType = 'vmin',

  gestaltVMInfoSizeStorageType = 0,
  gestaltVMInfoSizeType = 1,
  gestaltVMInfoSimpleType = 2,
  gestaltVMInfoNoneType = 3
};

enum {
  gestaltVMBackingStoreFileRefNum = 'vmbs'
};



enum {
  gestaltALMVers = 'walk'
};

enum {
  gestaltWindowMgrAttr = 'wind',
  gestaltWindowMgrPresent = (1L << 0),


  gestaltWindowMgrPresentBit = 0,
  gestaltExtendedWindowAttributes = 1,
  gestaltExtendedWindowAttributesBit = 1,
  gestaltHasFloatingWindows = 2,
  gestaltHasFloatingWindowsBit = 2,
  gestaltHasWindowBuffering = 3,
  gestaltHasWindowBufferingBit = 3,
  gestaltWindowLiveResizeBit = 4,
  gestaltWindowMinimizeToDockBit = 5,
  gestaltHasWindowShadowsBit = 6,
  gestaltSheetsAreWindowModalBit = 7,
  gestaltFrontWindowMayBeHiddenBit = 8,

  gestaltWindowMgrPresentMask = (1L << gestaltWindowMgrPresentBit),
  gestaltExtendedWindowAttributesMask = (1L << gestaltExtendedWindowAttributesBit),
  gestaltHasFloatingWindowsMask = (1L << gestaltHasFloatingWindowsBit),
  gestaltHasWindowBufferingMask = (1L << gestaltHasWindowBufferingBit),
  gestaltWindowLiveResizeMask = (1L << gestaltWindowLiveResizeBit),
  gestaltWindowMinimizeToDockMask = (1L << gestaltWindowMinimizeToDockBit),
  gestaltHasWindowShadowsMask = (1L << gestaltHasWindowShadowsBit),
  gestaltSheetsAreWindowModalMask = (1L << gestaltSheetsAreWindowModalBit),
  gestaltFrontWindowMayBeHiddenMask = (1L << gestaltFrontWindowMayBeHiddenBit)
};

enum {
  gestaltHasSingleWindowModeBit = 8,
  gestaltHasSingleWindowModeMask = (1L << gestaltHasSingleWindowModeBit)
};






enum {
  gestaltX86Features = 'x86f',
  gestaltX86HasFPU = 0,
  gestaltX86HasVME = 1,
  gestaltX86HasDE = 2,
  gestaltX86HasPSE = 3,
  gestaltX86HasTSC = 4,
  gestaltX86HasMSR = 5,
  gestaltX86HasPAE = 6,
  gestaltX86HasMCE = 7,
  gestaltX86HasCX8 = 8,
  gestaltX86HasAPIC = 9,
  gestaltX86HasSEP = 11,
  gestaltX86HasMTRR = 12,
  gestaltX86HasPGE = 13,
  gestaltX86HasMCA = 14,
  gestaltX86HasCMOV = 15,

  gestaltX86HasPAT = 16,
  gestaltX86HasPSE36 = 17,
  gestaltX86HasPSN = 18,
  gestaltX86HasCLFSH = 19,
  gestaltX86Serviced20 = 20,
  gestaltX86HasDS = 21,
  gestaltX86ResACPI = 22,
  gestaltX86HasMMX = 23,
  gestaltX86HasFXSR = 24,
  gestaltX86HasSSE = 25,
  gestaltX86HasSSE2 = 26,
  gestaltX86HasSS = 27,
  gestaltX86HasHTT = 28,
  gestaltX86HasTM = 29
};




enum {
  gestaltX86AdditionalFeatures = 'x86a',
  gestaltX86HasSSE3 = 0,
  gestaltX86HasMONITOR = 3,
  gestaltX86HasDSCPL = 4,
  gestaltX86HasVMX = 5,
  gestaltX86HasSMX = 6,
  gestaltX86HasEST = 7,
  gestaltX86HasTM2 = 8,
  gestaltX86HasSupplementalSSE3 = 9,
  gestaltX86HasCID = 10,
  gestaltX86HasCX16 = 13,
  gestaltX86HasxTPR = 14
};

enum {
  gestaltTranslationAttr = 'xlat',
  gestaltTranslationMgrExists = 0,
  gestaltTranslationMgrHintOrder = 1,
  gestaltTranslationPPCAvail = 2,
  gestaltTranslationGetPathAPIAvail = 3
};

enum {
  gestaltExtToolboxTable = 'xttt'
};

enum {
  gestaltUSBPrinterSharingVersion = 'zak ',
  gestaltUSBPrinterSharingVersionMask = 0x0000FFFF,
  gestaltUSBPrinterSharingAttr = 'zak ',
  gestaltUSBPrinterSharingAttrMask = (long)0xFFFF0000,
  gestaltUSBPrinterSharingAttrRunning = (long)0x80000000,
  gestaltUSBPrinterSharingAttrBooted = 0x40000000
};


enum {
  gestaltWorldScriptIIVersion = 'doub',
  gestaltWorldScriptIIAttr = 'wsat',
  gestaltWSIICanPrintWithoutPrGeneralBit = 0
};






}
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 1 3
# 37 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern "C" {


#pragma pack(push, 2)

enum {
  maxSize = 0x7FFFFFF0
};
# 56 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
enum {
  defaultPhysicalEntryCount = 8
};

enum {

  kPageInMemory = 0,
  kPageOnDisk = 1,
  kNotPaged = 2
};

enum {

  k32BitHeap = 1,
  kNewStyleHeap = 2,
  kNewDebugHeap = 4
};





enum {
  kHandleIsResourceBit = 5,
  kHandlePurgeableBit = 6,
  kHandleLockedBit = 7
};


enum {
  kHandleIsResourceMask = 0x20,
  kHandlePurgeableMask = 0x40,
  kHandleLockedMask = 0x80
};


typedef long ( * GrowZoneProcPtr)(Size cbNeeded);
typedef void ( * PurgeProcPtr)(Handle blockToPurge);
typedef void ( * UserFnProcPtr)(void * parameter);
typedef GrowZoneProcPtr GrowZoneUPP;
typedef PurgeProcPtr PurgeUPP;
typedef UserFnProcPtr UserFnUPP;
struct Zone {
  Ptr bkLim;
  Ptr purgePtr;
  Ptr hFstFree;
  long zcbFree;
  GrowZoneUPP gzProc;
  short moreMast;
  short flags;
  short cntRel;
  short maxRel;
  short cntNRel;
  SInt8 heapType;
  SInt8 unused;
  short cntEmpty;
  short cntHandles;
  long minCBFree;
  PurgeUPP purgeProc;
  Ptr sparePtr;
  Ptr allocPtr;
  short heapData;
};
typedef struct Zone Zone;
typedef Zone * THz;
typedef THz * THzPtr;

struct MemoryBlock {
  void * address;
  unsigned long count;
};
typedef struct MemoryBlock MemoryBlock;
struct LogicalToPhysicalTable {
  MemoryBlock logical;
  MemoryBlock physical[8];
};
typedef struct LogicalToPhysicalTable LogicalToPhysicalTable;

typedef short PageState;
typedef short StatusRegisterContents;
enum {
  kVolumeVirtualMemoryInfoVersion1 = 1
};

struct VolumeVirtualMemoryInfo {
  PBVersion version;
  SInt16 volumeRefNum;
  Boolean inUse;
  UInt8 _fill;
  UInt32 vmOptions;

};
typedef struct VolumeVirtualMemoryInfo VolumeVirtualMemoryInfo;
typedef VolumeVirtualMemoryInfo * VolumeVirtualMemoryInfoPtr;
# 160 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern GrowZoneUPP
NewGrowZoneUPP(GrowZoneProcPtr userRoutine) ;
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern PurgeUPP
NewPurgeUPP(PurgeProcPtr userRoutine) ;
# 182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern UserFnUPP
NewUserFnUPP(UserFnProcPtr userRoutine) ;
# 193 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
DisposeGrowZoneUPP(GrowZoneUPP userUPP) ;
# 204 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
DisposePurgeUPP(PurgeUPP userUPP) ;
# 215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
DisposeUserFnUPP(UserFnUPP userUPP) ;
# 226 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
InvokeGrowZoneUPP(
  Size cbNeeded,
  GrowZoneUPP userUPP) ;
# 239 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
InvokePurgeUPP(
  Handle blockToPurge,
  PurgeUPP userUPP) ;
# 252 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
InvokeUserFnUPP(
  void * parameter,
  UserFnUPP userUPP) ;



    inline GrowZoneUPP NewGrowZoneUPP(GrowZoneProcPtr userRoutine) { return userRoutine; }
    inline PurgeUPP NewPurgeUPP(PurgeProcPtr userRoutine) { return userRoutine; }
    inline UserFnUPP NewUserFnUPP(UserFnProcPtr userRoutine) { return userRoutine; }
    inline void DisposeGrowZoneUPP(GrowZoneUPP) { }
    inline void DisposePurgeUPP(PurgeUPP) { }
    inline void DisposeUserFnUPP(UserFnUPP) { }
    inline long InvokeGrowZoneUPP(Size cbNeeded, GrowZoneUPP userUPP) { return (*userUPP)(cbNeeded); }
    inline void InvokePurgeUPP(Handle blockToPurge, PurgeUPP userUPP) { (*userUPP)(blockToPurge); }
    inline void InvokeUserFnUPP(void * parameter, UserFnUPP userUPP) { (*userUPP)(parameter); }
# 326 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
MemError(void) ;
# 377 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern SInt16
LMGetMemErr(void) ;
# 404 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
LMSetMemErr(SInt16 value) ;
# 447 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Handle
NewHandle(Size byteCount) ;
# 489 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Handle
NewHandleClear(Size byteCount) ;
# 528 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Handle
RecoverHandle(Ptr p) ;
# 564 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Ptr
NewPtr(Size byteCount) ;
# 601 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Ptr
NewPtrClear(Size byteCount) ;
# 627 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
MaxBlock(void) ;
# 645 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
StackSpace(void) ;
# 672 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Handle
NewEmptyHandle(void) ;
# 721 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HLock(Handle h) ;
# 754 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HLockHi(Handle h) ;
# 787 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HUnlock(Handle h) ;
# 829 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HPurge(Handle h) ;
# 858 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HNoPurge(Handle h) ;
# 911 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Handle
TempNewHandle(
  Size logicalSize,
  OSErr * resultCode) ;
# 943 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Size
TempMaxMem(Size * grow) ;
# 968 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
TempFreeMem(void) ;
# 992 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Size
CompactMem(Size cbNeeded) ;
# 1016 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
PurgeMem(Size cbNeeded) ;
# 1040 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
FreeMem(void) ;
# 1069 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Size
MaxMem(Size * grow) ;
# 1096 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
SetGrowZone(GrowZoneUPP growZone) ;
# 1118 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern GrowZoneUPP
GetGrowZone(void) ;
# 1149 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
MoveHHi(Handle h) ;
# 1184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
DisposePtr(Ptr p) ;
# 1217 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Size
GetPtrSize(Ptr p) ;
# 1232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
SetPtrSize(
  Ptr p,
  Size newSize) ;
# 1274 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
DisposeHandle(Handle h) ;
# 1317 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
SetHandleSize(
  Handle h,
  Size newSize) ;
# 1352 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Size
GetHandleSize(Handle h) ;
# 1394 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
ReallocateHandle(
  Handle h,
  Size byteCount) ;
# 1442 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
EmptyHandle(Handle h) ;
# 1460 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HSetRBit(Handle h) ;
# 1478 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HClrRBit(Handle h) ;
# 1534 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern SInt8
HGetState(Handle h) ;
# 1565 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
HSetState(
  Handle h,
  SInt8 flags) ;
# 1590 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
  static inline void BlockMove(const void *srcPtr,void *destPtr,Size byteCount) { if ( byteCount > 0 ) memmove( destPtr, srcPtr, byteCount ); }
# 1600 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
  static inline void BlockMoveData(const void *srcPtr,void *destPtr,Size byteCount) { if ( byteCount > 0 ) memmove( destPtr, srcPtr, byteCount ); }
# 1610 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
  static inline void BlockMoveUncached(const void *srcPtr,void *destPtr,Size byteCount) { if ( byteCount > 0 ) memmove( destPtr, srcPtr, byteCount ); }
# 1620 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
  static inline void BlockMoveDataUncached(const void *srcPtr,void *destPtr,Size byteCount) { if ( byteCount > 0 ) memmove( destPtr, srcPtr, byteCount ); }
# 1630 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
  static inline void BlockZero(void *destPtr,Size byteCount) { if ( byteCount > 0 ) bzero( destPtr, byteCount ); }
# 1640 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
  static inline void BlockZeroUncached(void *destPtr,Size byteCount) { if ( byteCount > 0 ) bzero( destPtr, byteCount ); }
# 1690 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
HandToHand(Handle * theHndl) ;
# 1725 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
PtrToXHand(
  const void * srcPtr,
  Handle dstHndl,
  long size) ;
# 1768 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
PtrToHand(
  const void * srcPtr,
  Handle * dstHndl,
  long size) ;
# 1823 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
HandAndHand(
  Handle hand1,
  Handle hand2) ;
# 1865 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
PtrAndHand(
  const void * ptr1,
  Handle hand2,
  long size) ;
# 1888 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
MoreMasters(void) ;
# 1912 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
MoreMasterPointers(UInt32 inCount) ;
# 1932 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
TempHLock(
  Handle h,
  OSErr * resultCode) ;
# 1953 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
TempHUnlock(
  Handle h,
  OSErr * resultCode) ;
# 1974 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
TempDisposeHandle(
  Handle h,
  OSErr * resultCode) ;
# 1995 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Ptr
TempTopMem(void) ;
# 2020 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
HoldMemory(
  void * address,
  unsigned long count) ;
# 2041 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
UnholdMemory(
  void * address,
  unsigned long count) ;
# 2070 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
MakeMemoryResident(
  void * address,
  unsigned long count) ;
# 2099 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
ReleaseMemoryData(
  void * address,
  unsigned long count) ;
# 2128 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
MakeMemoryNonResident(
  void * address,
  unsigned long count) ;
# 2157 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern OSErr
FlushMemory(
  void * address,
  unsigned long count) ;
# 2178 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Handle
GZSaveHnd(void) ;
# 2196 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Ptr
TopMem(void) ;
# 2214 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
ReserveMem(Size cbNeeded) ;
# 2242 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
PurgeSpace(
  long * total,
  long * contig) ;
# 2267 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
PurgeSpaceTotal(void) ;
# 2290 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern long
PurgeSpaceContiguous(void) ;
# 2312 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Boolean
CheckAllHeaps(void) ;
# 2332 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Boolean
IsHeapValid(void) ;
# 2348 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Boolean
IsHandleValid(Handle h) ;
# 2364 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern Boolean
IsPointerValid(Ptr p) ;
# 2401 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern THz
LMGetSysZone(void) ;
# 2419 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
LMSetSysZone(THz value) ;
# 2437 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern THz
LMGetApplZone(void) ;
# 2455 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
extern void
LMSetApplZone(THz value) ;
# 2524 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacMemory.h" 3
#pragma pack(pop)


}
# 66 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern "C" {
# 51 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Max(void);
# 73 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Min(void);
# 98 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Add(
  SInt64 left,
  SInt64 right);
# 125 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Subtract(
  SInt64 left,
  SInt64 right);
# 152 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Negate(SInt64 value);
# 206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Multiply(
  SInt64 left,
  SInt64 right);
# 232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Mod(
  SInt64 dividend,
  SInt64 divisor);
# 265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Divide(
  SInt64 dividend,
  SInt64 divisor,
  SInt64 * remainder);
# 289 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Div(
  SInt64 dividend,
  SInt64 divisor);
# 316 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64Set(SInt32 value);
# 339 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64SetU(UInt32 value);
# 362 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt32
S32Set(SInt64 value);
# 385 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
S64And(
  SInt64 left,
  SInt64 right);
# 410 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
S64Or(
  SInt64 left,
  SInt64 right);
# 435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
S64Eor(
  SInt64 left,
  SInt64 right);
# 460 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
S64Not(SInt64 value);
# 492 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt32
S64Compare(
  SInt64 left,
  SInt64 right) ;
# 510 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64BitwiseAnd(
  SInt64 left,
  SInt64 right);
# 535 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64BitwiseOr(
  SInt64 left,
  SInt64 right);
# 560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64BitwiseEor(
  SInt64 left,
  SInt64 right);
# 585 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64BitwiseNot(SInt64 value);
# 608 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64ShiftRight(
  SInt64 value,
  UInt32 shift);
# 633 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
S64ShiftLeft(
  SInt64 value,
  UInt32 shift);
# 716 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Max(void);
# 740 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Add(
  UInt64 left,
  UInt64 right);
# 766 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Subtract(
  UInt64 left,
  UInt64 right);
# 794 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Multiply(
  UInt64 left,
  UInt64 right);
# 820 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Mod(
  UInt64 dividend,
  UInt64 divisor);
# 852 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Divide(
  UInt64 dividend,
  UInt64 divisor,
  UInt64 * remainder);
# 878 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Div(
  UInt64 dividend,
  UInt64 divisor);
# 905 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64Set(SInt32 value);
# 928 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64SetU(UInt32 value);
# 951 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt32
U32SetU(UInt64 value);
# 974 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
U64And(
  UInt64 left,
  UInt64 right);
# 999 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
U64Or(
  UInt64 left,
  UInt64 right);
# 1024 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
U64Eor(
  UInt64 left,
  UInt64 right);
# 1049 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern Boolean
U64Not(UInt64 value);
# 1081 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt32
U64Compare(
  UInt64 left,
  UInt64 right) ;
# 1098 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64BitwiseAnd(
  UInt64 left,
  UInt64 right);
# 1123 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64BitwiseOr(
  UInt64 left,
  UInt64 right);
# 1148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64BitwiseEor(
  UInt64 left,
  UInt64 right);
# 1173 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64BitwiseNot(UInt64 value);
# 1196 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64ShiftRight(
  UInt64 value,
  UInt32 shift);
# 1221 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
U64ShiftLeft(
  UInt64 value,
  UInt32 shift);
# 1296 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern SInt64
UInt64ToSInt64(UInt64 value);
# 1319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
extern UInt64
SInt64ToUInt64(SInt64 value);
# 1371 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
       static inline wide SInt64ToWide ( SInt64 s ) { wide result; result.hi = ( s >> 32 ); result.lo = ( s & 0xffffffffUL ); return result; }
       static inline SInt64 WideToSInt64 ( wide w ) { SInt64 result = w.hi; result = ( result << 32 ) | ( w.lo ); return result; }

     static inline UnsignedWide UInt64ToUnsignedWide ( UInt64 u ) { UnsignedWide result; result.hi = ( u >> 32 ); result.lo = ( u & 0xffffffffUL ); return result; }
       static inline UInt64 UnsignedWideToUInt64 ( UnsignedWide uw ) { UInt64 result = uw.hi ; result = ( result << 32 ) | ( uw.lo ); return result; }
# 1410 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Math64.h" 3
}
# 70 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3
# 81 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/BackupCore.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/BackupCore.h" 3
extern "C" {
# 66 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/BackupCore.h" 3
extern OSStatus
CSBackupSetItemExcluded(
  CFURLRef item,
  Boolean exclude,
  Boolean excludeByPath) ;
# 101 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/BackupCore.h" 3
extern Boolean
CSBackupIsItemExcluded(
  CFURLRef item,
  Boolean * excludeByPath) ;




}
# 82 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 1 3
# 28 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 1 3
# 34 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 1 3
# 44 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern "C" {


#pragma pack(push, 2)
# 79 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
typedef SInt16 ToggleResults;
enum {

  toggleUndefined = 0,
  toggleOK = 1,
  toggleBadField = 2,
  toggleBadDelta = 3,
  toggleBadChar = 4,
  toggleUnknown = 5,
  toggleBadNum = 6,
  toggleOutOfRange = 7,
  toggleErr3 = 7,
  toggleErr4 = 8,
  toggleErr5 = 9
};

enum {

  smallDateBit = 31,
  togChar12HourBit = 30,
  togCharZCycleBit = 29,
  togDelta12HourBit = 28,
  genCdevRangeBit = 27,
  validDateFields = -1,
  maxDateField = 10
};

enum {
  eraMask = 0x0001,
  yearMask = 0x0002,
  monthMask = 0x0004,
  dayMask = 0x0008,
  hourMask = 0x0010,
  minuteMask = 0x0020,
  secondMask = 0x0040,
  dayOfWeekMask = 0x0080,
  dayOfYearMask = 0x0100,
  weekOfYearMask = 0x0200,
  pmMask = 0x0400,
  dateStdMask = 0x007F
};

typedef SInt8 LongDateField;
enum {
  eraField = 0,
  yearField = 1,
  monthField = 2,
  dayField = 3,
  hourField = 4,
  minuteField = 5,
  secondField = 6,
  dayOfWeekField = 7,
  dayOfYearField = 8,
  weekOfYearField = 9,
  pmField = 10,
  res1Field = 11,
  res2Field = 12,
  res3Field = 13
};

typedef SInt8 DateForm;
enum {
  shortDate = 0,
  longDate = 1,
  abbrevDate = 2
};

enum {

  fatalDateTime = 0x8000,
  longDateFound = 1,
  leftOverChars = 2,
  sepNotIntlSep = 4,
  fieldOrderNotIntl = 8,
  extraneousStrings = 16,
  tooManySeps = 32,
  sepNotConsistent = 64,
  tokenErr = 0x8100,
  cantReadUtilities = 0x8200,
  dateTimeNotFound = 0x8400,
  dateTimeInvalid = 0x8800
};

typedef short StringToDateStatus;
typedef StringToDateStatus String2DateStatus;
struct DateCacheRecord {
  short hidden[256];
};
typedef struct DateCacheRecord DateCacheRecord;
typedef DateCacheRecord * DateCachePtr;
struct DateTimeRec {
  short year;
  short month;
  short day;
  short hour;
  short minute;
  short second;
  short dayOfWeek;
};
typedef struct DateTimeRec DateTimeRec;

typedef SInt64 LongDateTime;

union LongDateCvt {
  SInt64 c;
  struct {
    UInt32 lHigh;
    UInt32 lLow;
  } hl;
};
typedef union LongDateCvt LongDateCvt;
# 201 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
union LongDateRec {
  struct {
    short era;
    short year;
    short month;
    short day;
    short hour;
    short minute;
    short second;
    short dayOfWeek;
    short dayOfYear;
    short weekOfYear;
    short pm;
    short res1;
    short res2;
    short res3;
  } ld;
  short list[14];
  struct {
    short eraAlt;
    DateTimeRec oldDate;
  } od;
};
typedef union LongDateRec LongDateRec;

typedef SInt8 DateDelta;
struct TogglePB {
  long togFlags;
  ResType amChars;
  ResType pmChars;
  long reserved[4];
};
typedef struct TogglePB TogglePB;
# 264 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSStatus
UCConvertUTCDateTimeToCFAbsoluteTime(
  const UTCDateTime * iUTCDate,
  CFAbsoluteTime * oCFTime) ;
# 297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSStatus
UCConvertSecondsToCFAbsoluteTime(
  UInt32 iSeconds,
  CFAbsoluteTime * oCFTime) ;
# 330 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSStatus
UCConvertLongDateTimeToCFAbsoluteTime(
  LongDateTime iLongTime,
  CFAbsoluteTime * oCFTime) ;
# 363 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSStatus
UCConvertCFAbsoluteTimeToUTCDateTime(
  CFAbsoluteTime iCFTime,
  UTCDateTime * oUTCDate) ;
# 396 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSStatus
UCConvertCFAbsoluteTimeToSeconds(
  CFAbsoluteTime iCFTime,
  UInt32 * oSeconds) ;
# 429 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSStatus
UCConvertCFAbsoluteTimeToLongDateTime(
  CFAbsoluteTime iCFTime,
  LongDateTime * oLongDate) ;
# 455 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
DateString(
  SInt32 dateTime,
  DateForm longFlag,
  Str255 result,
  Handle intlHandle) ;
# 478 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
TimeString(
  SInt32 dateTime,
  Boolean wantSeconds,
  Str255 result,
  Handle intlHandle) ;
# 501 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
LongDateString(
  const LongDateTime * dateTime,
  DateForm longFlag,
  Str255 result,
  Handle intlHandle) ;
# 524 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
LongTimeString(
  const LongDateTime * dateTime,
  Boolean wantSeconds,
  Str255 result,
  Handle intlHandle) ;
# 550 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSErr
InitDateCache(DateCachePtr theCache) ;
# 569 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern StringToDateStatus
StringToDate(
  Ptr textPtr,
  SInt32 textLen,
  DateCachePtr theCache,
  SInt32 * lengthUsed,
  LongDateRec * dateTime) ;
# 593 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern StringToDateStatus
StringToTime(
  Ptr textPtr,
  SInt32 textLen,
  DateCachePtr theCache,
  SInt32 * lengthUsed,
  LongDateRec * dateTime) ;
# 617 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
LongDateToSeconds(
  const LongDateRec * lDate,
  LongDateTime * lSecs) ;
# 638 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
LongSecondsToDate(
  const LongDateTime * lSecs,
  LongDateRec * lDate) ;
# 659 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern ToggleResults
ToggleDate(
  LongDateTime * lSecs,
  LongDateField field,
  DateDelta delta,
  short ch,
  const TogglePB * params) ;
# 683 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern short
ValidDate(
  const LongDateRec * vDate,
  long flags,
  LongDateTime * newSecs) ;
# 705 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSErr
ReadDateTime(unsigned long * datetime) ;
# 724 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
GetDateTime(unsigned long * secs) ;
# 743 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern OSErr
SetDateTime(unsigned long datetime) ;
# 762 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
SetTime(const DateTimeRec * d) ;
# 781 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
GetTime(DateTimeRec * d) ;
# 803 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
DateToSeconds(
  const DateTimeRec * d,
  unsigned long * secs) ;
# 827 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
extern void
SecondsToDate(
  unsigned long secs,
  DateTimeRec * d) ;
# 987 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DateTimeUtils.h" 3
#pragma pack(pop)


}
# 35 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 2 3
# 49 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern "C" {


#pragma pack(push, 2)

enum {

  sortsBefore = -1,
  sortsEqual = 0,
  sortsAfter = 1
};

enum {
  dummyType = 0,
  vType = 1,
  ioQType = 2,
  drvQType = 3,
  evType = 4,
  fsQType = 5,
  sIQType = 6,
  dtQType = 7,
  nmType = 8
};

typedef SignedByte QTypes;
struct QElem {
  struct QElem * qLink;
  short qType;
  short qData[1];
};
typedef struct QElem QElem;
typedef QElem * QElemPtr;
struct QHdr {
  volatile short qFlags;
  volatile QElemPtr qHead;
  volatile QElemPtr qTail;
};
typedef struct QHdr QHdr;
typedef QHdr * QHdrPtr;
# 117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
struct MachineLocation {
    Fract latitude;
    Fract longitude;
    union {

        SInt8 dlsDelta;

        long gmtDelta;
        struct {



            SInt8 Delta;
        } dls;
    } u;
};
typedef struct MachineLocation MachineLocation;
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern Boolean
IsMetric(void) ;
# 198 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
Delay(
  unsigned long numTicks,
  unsigned long * finalTicks) ;
# 233 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
Enqueue(
  QElemPtr qElement,
  QHdrPtr qHeader) ;
# 267 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern OSErr
Dequeue(
  QElemPtr qElement,
  QHdrPtr qHeader) ;
# 303 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
MakeDataExecutable(
  void * baseAddress,
  unsigned long length) ;
# 354 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
ReadLocation(MachineLocation * loc) ;
# 390 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern UInt32
TickCount(void) ;
# 418 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern CFStringRef
CSCopyUserName(Boolean useShortName) ;
# 441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern CFStringRef
CSCopyMachineName(void) ;


enum {
  useFree = 0,
  useATalk = 1,
  useAsync = 2,
  useExtClk = 3,
  useMIDI = 4
};

enum {
  false32b = 0,
  true32b = 1
};
# 475 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
typedef void * SysPPtr;
# 494 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern SysPPtr
GetSysPPtr(void) ;
# 507 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
typedef void ( * DeferredTaskProcPtr)(long dtParam);
typedef DeferredTaskProcPtr DeferredTaskUPP;
# 517 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern DeferredTaskUPP
NewDeferredTaskUPP(DeferredTaskProcPtr userRoutine) ;
# 528 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
DisposeDeferredTaskUPP(DeferredTaskUPP userUPP) ;
# 539 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
InvokeDeferredTaskUPP(
  long dtParam,
  DeferredTaskUPP userUPP) ;



    inline DeferredTaskUPP NewDeferredTaskUPP(DeferredTaskProcPtr userRoutine) { return userRoutine; }
    inline void DisposeDeferredTaskUPP(DeferredTaskUPP) { }
    inline void InvokeDeferredTaskUPP(long dtParam, DeferredTaskUPP userUPP) { (*userUPP)(dtParam); }







struct DeferredTask {
  volatile QElemPtr qLink;
  short qType;
  volatile short dtFlags;
  DeferredTaskUPP dtAddr;
  long dtParam;
  long dtReserved;
};
typedef struct DeferredTask DeferredTask;
typedef DeferredTask * DeferredTaskPtr;
# 586 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern OSErr
DTInstall(DeferredTaskPtr dtTaskPtr) ;
# 609 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern OSErr
DTUninstall(DeferredTaskPtr dtTaskPtr) ;
# 627 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern long
SetCurrentA5(void) ;
# 645 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern long
SetA5(long newA5) ;
# 664 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern OSErr
InitUtil(void) ;
# 683 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern OSErr
WriteParam(void) ;
# 703 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
extern void
WriteLocation(const MachineLocation * loc) __attribute__((deprecated));
# 780 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/OSUtils.h" 3
#pragma pack(pop)


}
# 29 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 2 3
# 60 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
# 1 "/usr/include/sys/fcntl.h" 1 3 4
# 293 "/usr/include/sys/fcntl.h" 3 4
struct flock {
 off_t l_start;
 off_t l_len;
 pid_t l_pid;
 short l_type;
 short l_whence;
};







struct radvisory {
       off_t ra_offset;
       int ra_count;
};
# 321 "/usr/include/sys/fcntl.h" 3 4
typedef struct fstore {
 unsigned int fst_flags;
 int fst_posmode;
 off_t fst_offset;
 off_t fst_length;
 off_t fst_bytesalloc;
} fstore_t;



typedef struct fbootstraptransfer {
  off_t fbt_offset;
  size_t fbt_length;
  void *fbt_buffer;
} fbootstraptransfer_t;
# 356 "/usr/include/sys/fcntl.h" 3 4
#pragma pack(4)

struct log2phys {
 unsigned int l2p_flags;
 off_t l2p_contigbytes;
 off_t l2p_devoffset;
};

#pragma pack()
# 373 "/usr/include/sys/fcntl.h" 3 4
struct _filesec;
typedef struct _filesec *filesec_t;


typedef enum {
 FILESEC_OWNER = 1,
 FILESEC_GROUP = 2,
 FILESEC_UUID = 3,
 FILESEC_MODE = 4,
 FILESEC_ACL = 5,
 FILESEC_GRPUUID = 6,


 FILESEC_ACL_RAW = 100,
 FILESEC_ACL_ALLOCSIZE = 101
} filesec_property_t;





extern "C" {
int open(const char *, int, ...) __asm("_" "open" "$UNIX2003");
int creat(const char *, mode_t) __asm("_" "creat" "$UNIX2003");
int fcntl(int, int, ...) __asm("_" "fcntl" "$UNIX2003");

int openx_np(const char *, int, filesec_t);
int flock(int, int);
filesec_t filesec_init(void);
filesec_t filesec_dup(filesec_t);
void filesec_free(filesec_t);
int filesec_get_property(filesec_t, filesec_property_t, void *);
int filesec_set_property(filesec_t, filesec_property_t, const void *);
int filesec_unset_property(filesec_t, filesec_property_t);
int filesec_query_property(filesec_t, filesec_property_t, int *);



}
# 61 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 2 3
# 1 "/usr/include/sys/acl.h" 1 3 4
# 26 "/usr/include/sys/acl.h" 3 4
# 1 "/usr/include/sys/kauth.h" 1 3 4
# 48 "/usr/include/sys/kauth.h" 3 4
typedef struct {

 unsigned char g_guid[16];
} guid_t;




#pragma pack(1)
typedef struct {
 u_int8_t sid_kind;
 u_int8_t sid_authcount;
 u_int8_t sid_authority[6];

 u_int32_t sid_authorities[16];
} ntsid_t;
#pragma pack()
# 78 "/usr/include/sys/kauth.h" 3 4
struct kauth_identity_extlookup {
 u_int32_t el_seqno;
 u_int32_t el_result;





 u_int32_t el_flags;
# 102 "/usr/include/sys/kauth.h" 3 4
 uid_t el_uid;
 guid_t el_uguid;
 u_int32_t el_uguid_valid;
 ntsid_t el_usid;
 u_int32_t el_usid_valid;
 gid_t el_gid;
 guid_t el_gguid;
 u_int32_t el_gguid_valid;
 ntsid_t el_gsid;
 u_int32_t el_gsid_valid;
 u_int32_t el_member_valid;
};
# 126 "/usr/include/sys/kauth.h" 3 4
typedef u_int32_t kauth_ace_rights_t;


struct kauth_ace {
 guid_t ace_applicable;
 u_int32_t ace_flags;
# 144 "/usr/include/sys/kauth.h" 3 4
 kauth_ace_rights_t ace_rights;






};



typedef struct kauth_ace *kauth_ace_t;




struct kauth_acl {
 u_int32_t acl_entrycount;
 u_int32_t acl_flags;

 struct kauth_ace acl_ace[];
};
# 205 "/usr/include/sys/kauth.h" 3 4
typedef struct kauth_acl *kauth_acl_t;
# 215 "/usr/include/sys/kauth.h" 3 4
struct kauth_filesec {
 u_int32_t fsec_magic;

 guid_t fsec_owner;
 guid_t fsec_group;

 struct kauth_acl fsec_acl;
};
# 236 "/usr/include/sys/kauth.h" 3 4
typedef struct kauth_filesec *kauth_filesec_t;
# 27 "/usr/include/sys/acl.h" 2 3 4
# 38 "/usr/include/sys/acl.h" 3 4
typedef enum {
 ACL_READ_DATA = (1<<1),
 ACL_LIST_DIRECTORY = (1<<1),
 ACL_WRITE_DATA = (1<<2),
 ACL_ADD_FILE = (1<<2),
 ACL_EXECUTE = (1<<3),
 ACL_SEARCH = (1<<3),
 ACL_DELETE = (1<<4),
 ACL_APPEND_DATA = (1<<5),
 ACL_ADD_SUBDIRECTORY = (1<<5),
 ACL_DELETE_CHILD = (1<<6),
 ACL_READ_ATTRIBUTES = (1<<7),
 ACL_WRITE_ATTRIBUTES = (1<<8),
 ACL_READ_EXTATTRIBUTES = (1<<9),
 ACL_WRITE_EXTATTRIBUTES = (1<<10),
 ACL_READ_SECURITY = (1<<11),
 ACL_WRITE_SECURITY = (1<<12),
 ACL_CHANGE_OWNER = (1<<13)
} acl_perm_t;


typedef enum {
 ACL_UNDEFINED_TAG = 0,
 ACL_EXTENDED_ALLOW = 1,
 ACL_EXTENDED_DENY = 2
} acl_tag_t;


typedef enum {
 ACL_TYPE_EXTENDED = 0x00000100,

 ACL_TYPE_ACCESS = 0x00000000,
 ACL_TYPE_DEFAULT = 0x00000001,

 ACL_TYPE_AFS = 0x00000002,
 ACL_TYPE_CODA = 0x00000003,
 ACL_TYPE_NTFS = 0x00000004,
 ACL_TYPE_NWFS = 0x00000005
} acl_type_t;






typedef enum {
 ACL_FIRST_ENTRY = 0,
 ACL_NEXT_ENTRY = -1,
 ACL_LAST_ENTRY = -2
} acl_entry_id_t;


typedef enum {
 ACL_FLAG_DEFER_INHERIT = (1 << 0),
 ACL_ENTRY_INHERITED = (1<<4),
 ACL_ENTRY_FILE_INHERIT = (1<<5),
 ACL_ENTRY_DIRECTORY_INHERIT = (1<<6),
 ACL_ENTRY_LIMIT_INHERIT = (1<<7),
 ACL_ENTRY_ONLY_INHERIT = (1<<8)
} acl_flag_t;



struct _acl;
struct _acl_entry;
struct _acl_permset;
struct _acl_flagset;

typedef struct _acl *acl_t;
typedef struct _acl_entry *acl_entry_t;
typedef struct _acl_permset *acl_permset_t;
typedef struct _acl_flagset *acl_flagset_t;

extern "C" {

extern acl_t acl_dup(acl_t acl);
extern int acl_free(void *obj_p);
extern acl_t acl_init(int count);


extern int acl_copy_entry(acl_entry_t dest_d, acl_entry_t src_d);
extern int acl_create_entry(acl_t *acl_p, acl_entry_t *entry_p);
extern int acl_create_entry_np(acl_t *acl_p, acl_entry_t *entry_p, int entry_index);
extern int acl_delete_entry(acl_t acl, acl_entry_t entry_d);
extern int acl_get_entry(acl_t acl, int entry_id, acl_entry_t *entry_p);
extern int acl_valid(acl_t acl);
extern int acl_valid_fd_np(int fd, acl_type_t type, acl_t acl);
extern int acl_valid_file_np(const char *path, acl_type_t type, acl_t acl);
extern int acl_valid_link_np(const char *path, acl_type_t type, acl_t acl);


extern int acl_add_perm(acl_permset_t permset_d, acl_perm_t perm);
extern int acl_calc_mask(acl_t *acl_p);
extern int acl_clear_perms(acl_permset_t permset_d);
extern int acl_delete_perm(acl_permset_t permset_d, acl_perm_t perm);
extern int acl_get_perm_np(acl_permset_t permset_d, acl_perm_t perm);
extern int acl_get_permset(acl_entry_t entry_d, acl_permset_t *permset_p);
extern int acl_set_permset(acl_entry_t entry_d, acl_permset_t permset_d);


extern int acl_add_flag_np(acl_flagset_t flagset_d, acl_flag_t flag);
extern int acl_clear_flags_np(acl_flagset_t flagset_d);
extern int acl_delete_flag_np(acl_flagset_t flagset_d, acl_flag_t flag);
extern int acl_get_flag_np(acl_flagset_t flagset_d, acl_flag_t flag);
extern int acl_get_flagset_np(void *obj_p, acl_flagset_t *flagset_p);
extern int acl_set_flagset_np(void *obj_p, acl_flagset_t flagset_d);


extern void *acl_get_qualifier(acl_entry_t entry_d);
extern int acl_get_tag_type(acl_entry_t entry_d, acl_tag_t *tag_type_p);
extern int acl_set_qualifier(acl_entry_t entry_d, const void *tag_qualifier_p);
extern int acl_set_tag_type(acl_entry_t entry_d, acl_tag_t tag_type);


extern int acl_delete_def_file(const char *path_p);
extern acl_t acl_get_fd(int fd);
extern acl_t acl_get_fd_np(int fd, acl_type_t type);
extern acl_t acl_get_file(const char *path_p, acl_type_t type);
extern acl_t acl_get_link_np(const char *path_p, acl_type_t type);
extern int acl_set_fd(int fd, acl_t acl);
extern int acl_set_fd_np(int fd, acl_t acl, acl_type_t acl_type);
extern int acl_set_file(const char *path_p, acl_type_t type, acl_t acl);
extern int acl_set_link_np(const char *path_p, acl_type_t type, acl_t acl);


extern ssize_t acl_copy_ext(void *buf_p, acl_t acl, ssize_t size);
extern ssize_t acl_copy_ext_native(void *buf_p, acl_t acl, ssize_t size);
extern acl_t acl_copy_int(const void *buf_p);
extern acl_t acl_copy_int_native(const void *buf_p);
extern acl_t acl_from_text(const char *buf_p);
extern ssize_t acl_size(acl_t acl);
extern char *acl_to_text(acl_t acl, ssize_t *len_p);
}
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 2 3
# 1 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 1 3
# 28 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
# 1 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 1 3
# 41 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
# 1 "/usr/include/mach/mach_types.h" 1 3 4
# 75 "/usr/include/mach/mach_types.h" 3 4
# 1 "/usr/include/mach/host_info.h" 1 3 4
# 63 "/usr/include/mach/host_info.h" 3 4
# 1 "/usr/include/mach/message.h" 1 3 4
# 72 "/usr/include/mach/message.h" 3 4
# 1 "/usr/include/mach/kern_return.h" 1 3 4
# 65 "/usr/include/mach/kern_return.h" 3 4
# 1 "/usr/include/mach/machine/kern_return.h" 1 3 4
# 28 "/usr/include/mach/machine/kern_return.h" 3 4
# 1 "/usr/include/mach/ppc/kern_return.h" 1 3 4
# 66 "/usr/include/mach/ppc/kern_return.h" 3 4
typedef int kern_return_t;
# 29 "/usr/include/mach/machine/kern_return.h" 2 3 4
# 66 "/usr/include/mach/kern_return.h" 2 3 4
# 73 "/usr/include/mach/message.h" 2 3 4
# 84 "/usr/include/mach/message.h" 3 4
typedef natural_t mach_msg_timeout_t;
# 167 "/usr/include/mach/message.h" 3 4
typedef unsigned int mach_msg_bits_t;
typedef natural_t mach_msg_size_t;
typedef integer_t mach_msg_id_t;




typedef unsigned int mach_msg_type_name_t;
# 184 "/usr/include/mach/message.h" 3 4
typedef unsigned int mach_msg_copy_options_t;
# 194 "/usr/include/mach/message.h" 3 4
typedef unsigned int mach_msg_descriptor_type_t;






#pragma pack(4)

typedef struct
{
  natural_t pad1;
  mach_msg_size_t pad2;
  unsigned int pad3 : 24;
  mach_msg_descriptor_type_t type : 8;
} mach_msg_type_descriptor_t;

typedef struct
{
  mach_port_t name;
  mach_msg_size_t pad1;
  unsigned int pad2 : 16;
  mach_msg_type_name_t disposition : 8;
  mach_msg_descriptor_type_t type : 8;
} mach_msg_port_descriptor_t;

typedef struct
{
  uint32_t address;
  mach_msg_size_t size;
  boolean_t deallocate: 8;
  mach_msg_copy_options_t copy: 8;
  unsigned int pad1: 8;
  mach_msg_descriptor_type_t type: 8;
} mach_msg_ool_descriptor32_t;

typedef struct
{
  uint64_t address;
  boolean_t deallocate: 8;
  mach_msg_copy_options_t copy: 8;
  unsigned int pad1: 8;
  mach_msg_descriptor_type_t type: 8;
  mach_msg_size_t size;
} mach_msg_ool_descriptor64_t;

typedef struct
{
  void* address;

  mach_msg_size_t size;

  boolean_t deallocate: 8;
  mach_msg_copy_options_t copy: 8;
  unsigned int pad1: 8;
  mach_msg_descriptor_type_t type: 8;



} mach_msg_ool_descriptor_t;

typedef struct
{
  uint32_t address;
  mach_msg_size_t count;
  boolean_t deallocate: 8;
  mach_msg_copy_options_t copy: 8;
  mach_msg_type_name_t disposition : 8;
  mach_msg_descriptor_type_t type : 8;
} mach_msg_ool_ports_descriptor32_t;

typedef struct
{
  uint64_t address;
  boolean_t deallocate: 8;
  mach_msg_copy_options_t copy: 8;
  mach_msg_type_name_t disposition : 8;
  mach_msg_descriptor_type_t type : 8;
  mach_msg_size_t count;
} mach_msg_ool_ports_descriptor64_t;

typedef struct
{
  void* address;

  mach_msg_size_t count;

  boolean_t deallocate: 8;
  mach_msg_copy_options_t copy: 8;
  mach_msg_type_name_t disposition : 8;
  mach_msg_descriptor_type_t type : 8;



} mach_msg_ool_ports_descriptor_t;






typedef union
{
  mach_msg_port_descriptor_t port;
  mach_msg_ool_descriptor_t out_of_line;
  mach_msg_ool_ports_descriptor_t ool_ports;
  mach_msg_type_descriptor_t type;
} mach_msg_descriptor_t;

typedef struct
{
        mach_msg_size_t msgh_descriptor_count;
} mach_msg_body_t;




typedef struct
{
  mach_msg_bits_t msgh_bits;
  mach_msg_size_t msgh_size;
  mach_port_t msgh_remote_port;
  mach_port_t msgh_local_port;
  mach_msg_size_t msgh_reserved;
  mach_msg_id_t msgh_id;
} mach_msg_header_t;



typedef struct
{
        mach_msg_header_t header;
        mach_msg_body_t body;
} mach_msg_base_t;

typedef unsigned int mach_msg_trailer_type_t;



typedef unsigned int mach_msg_trailer_size_t;

typedef struct
{
  mach_msg_trailer_type_t msgh_trailer_type;
  mach_msg_trailer_size_t msgh_trailer_size;
} mach_msg_trailer_t;

typedef struct
{
  mach_msg_trailer_type_t msgh_trailer_type;
  mach_msg_trailer_size_t msgh_trailer_size;
  mach_port_seqno_t msgh_seqno;
} mach_msg_seqno_trailer_t;

typedef struct
{
  unsigned int val[2];
} security_token_t;

typedef struct
{
  mach_msg_trailer_type_t msgh_trailer_type;
  mach_msg_trailer_size_t msgh_trailer_size;
  mach_port_seqno_t msgh_seqno;
  security_token_t msgh_sender;
} mach_msg_security_trailer_t;
# 370 "/usr/include/mach/message.h" 3 4
typedef struct
{
  unsigned int val[8];
} audit_token_t;

typedef struct
{
  mach_msg_trailer_type_t msgh_trailer_type;
  mach_msg_trailer_size_t msgh_trailer_size;
  mach_port_seqno_t msgh_seqno;
  security_token_t msgh_sender;
  audit_token_t msgh_audit;
} mach_msg_audit_trailer_t;

typedef struct
{
  mach_port_name_t sender;
} msg_labels_t;






typedef struct
{
  mach_msg_trailer_type_t msgh_trailer_type;
  mach_msg_trailer_size_t msgh_trailer_size;
  mach_port_seqno_t msgh_seqno;
  security_token_t msgh_sender;
  audit_token_t msgh_audit;
  msg_labels_t msgh_labels;
  int msgh_ad;
} mach_msg_mac_trailer_t;
# 416 "/usr/include/mach/message.h" 3 4
typedef mach_msg_mac_trailer_t mach_msg_max_trailer_t;
# 426 "/usr/include/mach/message.h" 3 4
typedef mach_msg_security_trailer_t mach_msg_format_0_trailer_t;







extern security_token_t KERNEL_SECURITY_TOKEN;


extern audit_token_t KERNEL_AUDIT_TOKEN;

typedef integer_t mach_msg_options_t;

typedef struct
{
  mach_msg_header_t header;
} mach_msg_empty_send_t;

typedef struct
{
  mach_msg_header_t header;
  mach_msg_trailer_t trailer;
} mach_msg_empty_rcv_t;

typedef union
{
  mach_msg_empty_send_t send;
  mach_msg_empty_rcv_t rcv;
} mach_msg_empty_t;

#pragma pack()
# 504 "/usr/include/mach/message.h" 3 4
typedef natural_t mach_msg_type_size_t;
typedef natural_t mach_msg_type_number_t;
# 548 "/usr/include/mach/message.h" 3 4
typedef integer_t mach_msg_option_t;
# 621 "/usr/include/mach/message.h" 3 4
typedef kern_return_t mach_msg_return_t;
# 704 "/usr/include/mach/message.h" 3 4
extern "C" {
# 723 "/usr/include/mach/message.h" 3 4
extern mach_msg_return_t mach_msg_overwrite(
     mach_msg_header_t *msg,
     mach_msg_option_t option,
     mach_msg_size_t send_size,
     mach_msg_size_t rcv_size,
     mach_port_name_t rcv_name,
     mach_msg_timeout_t timeout,
     mach_port_name_t notify,
     mach_msg_header_t *rcv_msg,
     mach_msg_size_t rcv_limit);
# 743 "/usr/include/mach/message.h" 3 4
extern mach_msg_return_t mach_msg(
     mach_msg_header_t *msg,
     mach_msg_option_t option,
     mach_msg_size_t send_size,
     mach_msg_size_t rcv_size,
     mach_port_name_t rcv_name,
     mach_msg_timeout_t timeout,
     mach_port_name_t notify);


}
# 64 "/usr/include/mach/host_info.h" 2 3 4
# 1 "/usr/include/mach/vm_statistics.h" 1 3 4
# 66 "/usr/include/mach/vm_statistics.h" 3 4
struct vm_statistics {
 natural_t free_count;
 natural_t active_count;
 natural_t inactive_count;
 natural_t wire_count;
 natural_t zero_fill_count;
 natural_t reactivations;
 natural_t pageins;
 natural_t pageouts;
 natural_t faults;
 natural_t cow_faults;
 natural_t lookups;
 natural_t hits;

 natural_t purgeable_count;
 natural_t purges;
};

typedef struct vm_statistics *vm_statistics_t;
typedef struct vm_statistics vm_statistics_data_t;

struct vm_statistics_rev0 {
 natural_t free_count;
 natural_t active_count;
 natural_t inactive_count;
 natural_t wire_count;
 natural_t zero_fill_count;
 natural_t reactivations;
 natural_t pageins;
 natural_t pageouts;
 natural_t faults;
 natural_t cow_faults;
 natural_t lookups;
 natural_t hits;
};

typedef struct vm_statistics_rev0 *vm_statistics_rev0_t;
typedef struct vm_statistics_rev0 vm_statistics_rev0_data_t;
# 65 "/usr/include/mach/host_info.h" 2 3 4
# 1 "/usr/include/mach/machine.h" 1 3 4
# 62 "/usr/include/mach/machine.h" 3 4
typedef integer_t cpu_type_t;
typedef integer_t cpu_subtype_t;
typedef integer_t cpu_threadtype_t;
# 66 "/usr/include/mach/host_info.h" 2 3 4

# 1 "/usr/include/mach/time_value.h" 1 3 4
# 61 "/usr/include/mach/time_value.h" 3 4
struct time_value {
 integer_t seconds;
 integer_t microseconds;
};

typedef struct time_value time_value_t;
# 68 "/usr/include/mach/host_info.h" 2 3 4






typedef integer_t *host_info_t;


typedef integer_t host_info_data_t[(1024)];


typedef char kernel_version_t[(512)];


typedef char kernel_boot_info_t[(4096)];





typedef integer_t host_flavor_t;
# 98 "/usr/include/mach/host_info.h" 3 4
#pragma pack(4)

struct host_basic_info {
 integer_t max_cpus;
 integer_t avail_cpus;
 natural_t memory_size;
 cpu_type_t cpu_type;
 cpu_subtype_t cpu_subtype;
 cpu_threadtype_t cpu_threadtype;
 integer_t physical_cpu;
 integer_t physical_cpu_max;
 integer_t logical_cpu;
 integer_t logical_cpu_max;
 uint64_t max_mem;
};

#pragma pack()

typedef struct host_basic_info host_basic_info_data_t;
typedef struct host_basic_info *host_basic_info_t;



struct host_sched_info {
 integer_t min_timeout;
 integer_t min_quantum;
};

typedef struct host_sched_info host_sched_info_data_t;
typedef struct host_sched_info *host_sched_info_t;



struct kernel_resource_sizes {
 natural_t task;
        natural_t thread;
        natural_t port;
        natural_t memory_region;
        natural_t memory_object;
};

typedef struct kernel_resource_sizes kernel_resource_sizes_data_t;
typedef struct kernel_resource_sizes *kernel_resource_sizes_t;



struct host_priority_info {
     integer_t kernel_priority;
     integer_t system_priority;
     integer_t server_priority;
     integer_t user_priority;
     integer_t depress_priority;
     integer_t idle_priority;
     integer_t minimum_priority;
 integer_t maximum_priority;
};

typedef struct host_priority_info host_priority_info_data_t;
typedef struct host_priority_info *host_priority_info_t;
# 165 "/usr/include/mach/host_info.h" 3 4
struct host_load_info {
 integer_t avenrun[3];
 integer_t mach_factor[3];
};

typedef struct host_load_info host_load_info_data_t;
typedef struct host_load_info *host_load_info_t;
# 181 "/usr/include/mach/host_info.h" 3 4
struct host_cpu_load_info {
 natural_t cpu_ticks[4];
};

typedef struct host_cpu_load_info host_cpu_load_info_data_t;
typedef struct host_cpu_load_info *host_cpu_load_info_t;
# 76 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/host_notify.h" 1 3 4
# 77 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/host_special_ports.h" 1 3 4
# 78 "/usr/include/mach/mach_types.h" 2 3 4


# 1 "/usr/include/mach/memory_object_types.h" 1 3 4
# 70 "/usr/include/mach/memory_object_types.h" 3 4
# 1 "/usr/include/mach/vm_prot.h" 1 3 4
# 70 "/usr/include/mach/vm_prot.h" 3 4
typedef int vm_prot_t;
# 71 "/usr/include/mach/memory_object_types.h" 2 3 4
# 1 "/usr/include/mach/vm_sync.h" 1 3 4
# 61 "/usr/include/mach/vm_sync.h" 3 4
typedef unsigned vm_sync_t;
# 72 "/usr/include/mach/memory_object_types.h" 2 3 4
# 1 "/usr/include/mach/vm_types.h" 1 3 4
# 35 "/usr/include/mach/vm_types.h" 3 4
typedef vm_offset_t pointer_t;
typedef vm_offset_t vm_address_t;







typedef uint64_t addr64_t;
# 56 "/usr/include/mach/vm_types.h" 3 4
typedef uint32_t reg64_t;






typedef uint32_t ppnum_t;




typedef mach_port_t vm_map_t;
# 77 "/usr/include/mach/vm_types.h" 3 4
typedef uint64_t vm_object_offset_t;
typedef uint64_t vm_object_size_t;


typedef mach_port_t upl_t;
typedef mach_port_t vm_named_entry_t;
# 73 "/usr/include/mach/memory_object_types.h" 2 3 4






typedef unsigned long long memory_object_offset_t;
typedef unsigned long long memory_object_size_t;
typedef natural_t memory_object_cluster_size_t;







typedef mach_port_t memory_object_t;
typedef mach_port_t memory_object_control_t;


typedef memory_object_t *memory_object_array_t;




typedef mach_port_t memory_object_name_t;



typedef mach_port_t memory_object_default_t;
# 112 "/usr/include/mach/memory_object_types.h" 3 4
typedef int memory_object_copy_strategy_t;
# 148 "/usr/include/mach/memory_object_types.h" 3 4
typedef int memory_object_return_t;
# 176 "/usr/include/mach/memory_object_types.h" 3 4
typedef int *memory_object_info_t;
typedef int memory_object_flavor_t;
typedef int memory_object_info_data_t[(1024)];







struct memory_object_perf_info {
 memory_object_cluster_size_t cluster_size;
 boolean_t may_cache;
};

struct memory_object_attr_info {
 memory_object_copy_strategy_t copy_strategy;
 memory_object_cluster_size_t cluster_size;
 boolean_t may_cache_object;
 boolean_t temporary;
};

struct memory_object_behave_info {
 memory_object_copy_strategy_t copy_strategy;
 boolean_t temporary;
 boolean_t invalidate;
 boolean_t silent_overwrite;
 boolean_t advisory_pageout;
};


typedef struct memory_object_behave_info *memory_object_behave_info_t;
typedef struct memory_object_behave_info memory_object_behave_info_data_t;

typedef struct memory_object_perf_info *memory_object_perf_info_t;
typedef struct memory_object_perf_info memory_object_perf_info_data_t;

typedef struct memory_object_attr_info *memory_object_attr_info_t;
typedef struct memory_object_attr_info memory_object_attr_info_data_t;
# 81 "/usr/include/mach/mach_types.h" 2 3 4

# 1 "/usr/include/mach/exception_types.h" 1 3 4
# 57 "/usr/include/mach/exception_types.h" 3 4
# 1 "/usr/include/mach/machine/exception.h" 1 3 4
# 28 "/usr/include/mach/machine/exception.h" 3 4
# 1 "/usr/include/mach/ppc/exception.h" 1 3 4
# 29 "/usr/include/mach/machine/exception.h" 2 3 4
# 58 "/usr/include/mach/exception_types.h" 2 3 4
# 148 "/usr/include/mach/exception_types.h" 3 4
# 1 "/usr/include/mach/thread_status.h" 1 3 4
# 71 "/usr/include/mach/thread_status.h" 3 4
# 1 "/usr/include/mach/machine/thread_status.h" 1 3 4
# 28 "/usr/include/mach/machine/thread_status.h" 3 4
# 1 "/usr/include/mach/ppc/thread_status.h" 1 3 4
# 63 "/usr/include/mach/ppc/thread_status.h" 3 4
typedef struct __darwin_ppc_thread_state ppc_thread_state_t;

typedef struct __darwin_ppc_thread_state64 ppc_thread_state64_t;

typedef struct __darwin_ppc_float_state ppc_float_state_t;
typedef struct __darwin_ppc_vector_state ppc_vector_state_t;
# 85 "/usr/include/mach/ppc/thread_status.h" 3 4
typedef struct ppc_thread_state ppc_saved_state_t;
# 106 "/usr/include/mach/ppc/thread_status.h" 3 4
typedef struct __darwin_ppc_exception_state ppc_exception_state_t;

typedef struct __darwin_ppc_exception_state64 ppc_exception_state64_t;
# 29 "/usr/include/mach/machine/thread_status.h" 2 3 4
# 72 "/usr/include/mach/thread_status.h" 2 3 4
# 1 "/usr/include/mach/machine/thread_state.h" 1 3 4
# 28 "/usr/include/mach/machine/thread_state.h" 3 4
# 1 "/usr/include/mach/ppc/thread_state.h" 1 3 4
# 29 "/usr/include/mach/machine/thread_state.h" 2 3 4
# 73 "/usr/include/mach/thread_status.h" 2 3 4





typedef natural_t *thread_state_t;


typedef natural_t thread_state_data_t[(144)];




typedef int thread_state_flavor_t;
typedef thread_state_flavor_t *thread_state_flavor_array_t;
# 149 "/usr/include/mach/exception_types.h" 2 3 4





typedef int exception_type_t;
typedef integer_t exception_data_type_t;
typedef int exception_behavior_t;
typedef integer_t *exception_data_t;
typedef unsigned int exception_mask_t;
typedef exception_mask_t *exception_mask_array_t;
typedef exception_behavior_t *exception_behavior_array_t;
typedef thread_state_flavor_t *exception_flavor_array_t;
typedef mach_port_t *exception_port_array_t;
# 83 "/usr/include/mach/mach_types.h" 2 3 4

# 1 "/usr/include/mach/processor_info.h" 1 3 4
# 67 "/usr/include/mach/processor_info.h" 3 4
# 1 "/usr/include/mach/machine/processor_info.h" 1 3 4
# 28 "/usr/include/mach/machine/processor_info.h" 3 4
# 1 "/usr/include/mach/ppc/processor_info.h" 1 3 4
# 29 "/usr/include/mach/machine/processor_info.h" 2 3 4
# 68 "/usr/include/mach/processor_info.h" 2 3 4




typedef integer_t *processor_info_t;
typedef integer_t *processor_info_array_t;


typedef integer_t processor_info_data_t[(1024)];


typedef integer_t *processor_set_info_t;


typedef integer_t processor_set_info_data_t[(1024)];




typedef int processor_flavor_t;





struct processor_basic_info {
 cpu_type_t cpu_type;
 cpu_subtype_t cpu_subtype;
 boolean_t running;
 int slot_num;
 boolean_t is_master;
};

typedef struct processor_basic_info processor_basic_info_data_t;
typedef struct processor_basic_info *processor_basic_info_t;



struct processor_cpu_load_info {
        unsigned long cpu_ticks[4];
};

typedef struct processor_cpu_load_info processor_cpu_load_info_data_t;
typedef struct processor_cpu_load_info *processor_cpu_load_info_t;
# 120 "/usr/include/mach/processor_info.h" 3 4
typedef int processor_set_flavor_t;


struct processor_set_basic_info {
 int processor_count;
 int default_policy;
};

typedef struct processor_set_basic_info processor_set_basic_info_data_t;
typedef struct processor_set_basic_info *processor_set_basic_info_t;





struct processor_set_load_info {
        int task_count;
        int thread_count;
        integer_t load_average;
        integer_t mach_factor;
};

typedef struct processor_set_load_info processor_set_load_info_data_t;
typedef struct processor_set_load_info *processor_set_load_info_t;
# 85 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/task_info.h" 1 3 4
# 66 "/usr/include/mach/task_info.h" 3 4
# 1 "/usr/include/mach/policy.h" 1 3 4
# 74 "/usr/include/mach/policy.h" 3 4
typedef int policy_t;
typedef integer_t *policy_info_t;
typedef integer_t *policy_base_t;
typedef integer_t *policy_limit_t;
# 108 "/usr/include/mach/policy.h" 3 4
struct policy_timeshare_base {
 integer_t base_priority;
};
struct policy_timeshare_limit {
 integer_t max_priority;
};
struct policy_timeshare_info {
 integer_t max_priority;
 integer_t base_priority;
 integer_t cur_priority;
 boolean_t depressed;
 integer_t depress_priority;
};

typedef struct policy_timeshare_base *policy_timeshare_base_t;
typedef struct policy_timeshare_limit *policy_timeshare_limit_t;
typedef struct policy_timeshare_info *policy_timeshare_info_t;

typedef struct policy_timeshare_base policy_timeshare_base_data_t;
typedef struct policy_timeshare_limit policy_timeshare_limit_data_t;
typedef struct policy_timeshare_info policy_timeshare_info_data_t;
# 142 "/usr/include/mach/policy.h" 3 4
struct policy_rr_base {
 integer_t base_priority;
 integer_t quantum;
};
struct policy_rr_limit {
 integer_t max_priority;
};
struct policy_rr_info {
 integer_t max_priority;
 integer_t base_priority;
 integer_t quantum;
 boolean_t depressed;
 integer_t depress_priority;
};

typedef struct policy_rr_base *policy_rr_base_t;
typedef struct policy_rr_limit *policy_rr_limit_t;
typedef struct policy_rr_info *policy_rr_info_t;

typedef struct policy_rr_base policy_rr_base_data_t;
typedef struct policy_rr_limit policy_rr_limit_data_t;
typedef struct policy_rr_info policy_rr_info_data_t;
# 176 "/usr/include/mach/policy.h" 3 4
struct policy_fifo_base {
 integer_t base_priority;
};
struct policy_fifo_limit {
 integer_t max_priority;
};
struct policy_fifo_info {
 integer_t max_priority;
 integer_t base_priority;
 boolean_t depressed;
 integer_t depress_priority;
};

typedef struct policy_fifo_base *policy_fifo_base_t;
typedef struct policy_fifo_limit *policy_fifo_limit_t;
typedef struct policy_fifo_info *policy_fifo_info_t;

typedef struct policy_fifo_base policy_fifo_base_data_t;
typedef struct policy_fifo_limit policy_fifo_limit_data_t;
typedef struct policy_fifo_info policy_fifo_info_data_t;
# 208 "/usr/include/mach/policy.h" 3 4
struct policy_bases {
 policy_timeshare_base_data_t ts;
 policy_rr_base_data_t rr;
 policy_fifo_base_data_t fifo;
};

struct policy_limits {
 policy_timeshare_limit_data_t ts;
 policy_rr_limit_data_t rr;
 policy_fifo_limit_data_t fifo;
};

struct policy_infos {
 policy_timeshare_info_data_t ts;
 policy_rr_info_data_t rr;
 policy_fifo_info_data_t fifo;
};

typedef struct policy_bases policy_base_data_t;
typedef struct policy_limits policy_limit_data_t;
typedef struct policy_infos policy_info_data_t;
# 67 "/usr/include/mach/task_info.h" 2 3 4






typedef natural_t task_flavor_t;
typedef integer_t *task_info_t;


typedef integer_t task_info_data_t[(1024)];





#pragma pack(4)



struct task_basic_info_32 {
        integer_t suspend_count;
        natural_t virtual_size;
        natural_t resident_size;
        time_value_t user_time;

        time_value_t system_time;

 policy_t policy;
};
typedef struct task_basic_info_32 task_basic_info_32_data_t;
typedef struct task_basic_info_32 *task_basic_info_32_t;






struct task_basic_info_64 {
        integer_t suspend_count;
        mach_vm_size_t virtual_size;
        mach_vm_size_t resident_size;
        time_value_t user_time;

        time_value_t system_time;

 policy_t policy;
};
typedef struct task_basic_info_64 task_basic_info_64_data_t;
typedef struct task_basic_info_64 *task_basic_info_64_t;






struct task_basic_info {
        integer_t suspend_count;
        vm_size_t virtual_size;
        vm_size_t resident_size;
        time_value_t user_time;

        time_value_t system_time;

 policy_t policy;
};

typedef struct task_basic_info task_basic_info_data_t;
typedef struct task_basic_info *task_basic_info_t;
# 148 "/usr/include/mach/task_info.h" 3 4
struct task_events_info {
 integer_t faults;
 integer_t pageins;
 integer_t cow_faults;
 integer_t messages_sent;
 integer_t messages_received;
        integer_t syscalls_mach;
 integer_t syscalls_unix;
 integer_t csw;
};
typedef struct task_events_info task_events_info_data_t;
typedef struct task_events_info *task_events_info_t;






struct task_thread_times_info {
 time_value_t user_time;

 time_value_t system_time;

};

typedef struct task_thread_times_info task_thread_times_info_data_t;
typedef struct task_thread_times_info *task_thread_times_info_t;





struct task_absolutetime_info {
 uint64_t total_user;
 uint64_t total_system;
 uint64_t threads_user;
 uint64_t threads_system;
};

typedef struct task_absolutetime_info task_absolutetime_info_data_t;
typedef struct task_absolutetime_info *task_absolutetime_info_t;
# 200 "/usr/include/mach/task_info.h" 3 4
#pragma pack()
# 86 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/task_policy.h" 1 3 4
# 27 "/usr/include/mach/task_policy.h" 3 4
# 1 "/usr/include/mach/mach_types.h" 1 3 4
# 28 "/usr/include/mach/task_policy.h" 2 3 4
# 46 "/usr/include/mach/task_policy.h" 3 4
typedef natural_t task_policy_flavor_t;
typedef integer_t *task_policy_t;
# 101 "/usr/include/mach/task_policy.h" 3 4
enum task_role {
 TASK_RENICED = -1,
 TASK_UNSPECIFIED = 0,
 TASK_FOREGROUND_APPLICATION,
 TASK_BACKGROUND_APPLICATION,
 TASK_CONTROL_APPLICATION,
 TASK_GRAPHICS_SERVER
};

typedef enum task_role task_role_t;

struct task_category_policy {
 task_role_t role;
};

typedef struct task_category_policy task_category_policy_data_t;
typedef struct task_category_policy *task_category_policy_t;
# 87 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/task_special_ports.h" 1 3 4
# 65 "/usr/include/mach/task_special_ports.h" 3 4
typedef int task_special_port_t;
# 88 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/thread_info.h" 1 3 4
# 76 "/usr/include/mach/thread_info.h" 3 4
typedef natural_t thread_flavor_t;
typedef integer_t *thread_info_t;


typedef integer_t thread_info_data_t[(1024)];






struct thread_basic_info {
        time_value_t user_time;
        time_value_t system_time;
        integer_t cpu_usage;
 policy_t policy;
        integer_t run_state;
        integer_t flags;
        integer_t suspend_count;
        integer_t sleep_time;

};

typedef struct thread_basic_info thread_basic_info_data_t;
typedef struct thread_basic_info *thread_basic_info_t;
# 89 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/thread_policy.h" 1 3 4
# 46 "/usr/include/mach/thread_policy.h" 3 4
typedef natural_t thread_policy_flavor_t;
typedef integer_t *thread_policy_t;
# 81 "/usr/include/mach/thread_policy.h" 3 4
struct thread_standard_policy {
 natural_t no_data;
};

typedef struct thread_standard_policy thread_standard_policy_data_t;
typedef struct thread_standard_policy *thread_standard_policy_t;
# 104 "/usr/include/mach/thread_policy.h" 3 4
struct thread_extended_policy {
 boolean_t timeshare;
};

typedef struct thread_extended_policy thread_extended_policy_data_t;
typedef struct thread_extended_policy *thread_extended_policy_t;
# 143 "/usr/include/mach/thread_policy.h" 3 4
struct thread_time_constraint_policy {
 uint32_t period;
 uint32_t computation;
 uint32_t constraint;
 boolean_t preemptible;
};

typedef struct thread_time_constraint_policy thread_time_constraint_policy_data_t;

typedef struct thread_time_constraint_policy *thread_time_constraint_policy_t;
# 171 "/usr/include/mach/thread_policy.h" 3 4
struct thread_precedence_policy {
 integer_t importance;
};

typedef struct thread_precedence_policy thread_precedence_policy_data_t;
typedef struct thread_precedence_policy *thread_precedence_policy_t;
# 90 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/thread_special_ports.h" 1 3 4
# 91 "/usr/include/mach/mach_types.h" 2 3 4


# 1 "/usr/include/mach/clock_types.h" 1 3 4
# 46 "/usr/include/mach/clock_types.h" 3 4
typedef int alarm_type_t;
typedef int sleep_type_t;
typedef int clock_id_t;
typedef int clock_flavor_t;
typedef int *clock_attr_t;
typedef int clock_res_t;




struct mach_timespec {
 unsigned int tv_sec;
 clock_res_t tv_nsec;
};
typedef struct mach_timespec mach_timespec_t;
# 94 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/vm_attributes.h" 1 3 4
# 71 "/usr/include/mach/vm_attributes.h" 3 4
typedef unsigned int vm_machine_attribute_t;
# 80 "/usr/include/mach/vm_attributes.h" 3 4
typedef int vm_machine_attribute_val_t;
# 95 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/vm_inherit.h" 1 3 4
# 70 "/usr/include/mach/vm_inherit.h" 3 4
typedef unsigned int vm_inherit_t;
# 96 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/vm_purgable.h" 1 3 4
# 38 "/usr/include/mach/vm_purgable.h" 3 4
typedef int vm_purgable_t;
# 97 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/vm_behavior.h" 1 3 4
# 42 "/usr/include/mach/vm_behavior.h" 3 4
typedef int vm_behavior_t;
# 98 "/usr/include/mach/mach_types.h" 2 3 4




# 1 "/usr/include/mach/vm_region.h" 1 3 4
# 42 "/usr/include/mach/vm_region.h" 3 4
# 1 "/usr/include/mach/machine/vm_param.h" 1 3 4
# 28 "/usr/include/mach/machine/vm_param.h" 3 4
# 1 "/usr/include/mach/ppc/vm_param.h" 1 3 4
# 29 "/usr/include/mach/machine/vm_param.h" 2 3 4
# 43 "/usr/include/mach/vm_region.h" 2 3 4





#pragma pack(4)
# 57 "/usr/include/mach/vm_region.h" 3 4
typedef int *vm_region_info_t;
typedef int *vm_region_info_64_t;
typedef int *vm_region_recurse_info_t;
typedef int *vm_region_recurse_info_64_t;
typedef int vm_region_flavor_t;
typedef int vm_region_info_data_t[(1024)];


struct vm_region_basic_info_64 {
 vm_prot_t protection;
 vm_prot_t max_protection;
 vm_inherit_t inheritance;
 boolean_t shared;
 boolean_t reserved;
 memory_object_offset_t offset;
 vm_behavior_t behavior;
 unsigned short user_wired_count;
};
typedef struct vm_region_basic_info_64 *vm_region_basic_info_64_t;
typedef struct vm_region_basic_info_64 vm_region_basic_info_data_64_t;
# 93 "/usr/include/mach/vm_region.h" 3 4
struct vm_region_basic_info {
 vm_prot_t protection;
 vm_prot_t max_protection;
 vm_inherit_t inheritance;
 boolean_t shared;
 boolean_t reserved;
 uint32_t offset;
 vm_behavior_t behavior;
 unsigned short user_wired_count;
};

typedef struct vm_region_basic_info *vm_region_basic_info_t;
typedef struct vm_region_basic_info vm_region_basic_info_data_t;
# 128 "/usr/include/mach/vm_region.h" 3 4
struct vm_region_extended_info {
 vm_prot_t protection;
        unsigned int user_tag;
        unsigned int pages_resident;
        unsigned int pages_shared_now_private;
        unsigned int pages_swapped_out;
        unsigned int pages_dirtied;
        unsigned int ref_count;
        unsigned short shadow_depth;
        unsigned char external_pager;
        unsigned char share_mode;
};

typedef struct vm_region_extended_info *vm_region_extended_info_t;
typedef struct vm_region_extended_info vm_region_extended_info_data_t;







struct vm_region_top_info {
        unsigned int obj_id;
        unsigned int ref_count;
        unsigned int private_pages_resident;
        unsigned int shared_pages_resident;
        unsigned char share_mode;
};

typedef struct vm_region_top_info *vm_region_top_info_t;
typedef struct vm_region_top_info vm_region_top_info_data_t;
# 186 "/usr/include/mach/vm_region.h" 3 4
struct vm_region_submap_info {
 vm_prot_t protection;
 vm_prot_t max_protection;
 vm_inherit_t inheritance;
 uint32_t offset;
        unsigned int user_tag;
        unsigned int pages_resident;
        unsigned int pages_shared_now_private;
        unsigned int pages_swapped_out;
        unsigned int pages_dirtied;
        unsigned int ref_count;
        unsigned short shadow_depth;
        unsigned char external_pager;
        unsigned char share_mode;
 boolean_t is_submap;
 vm_behavior_t behavior;
 vm_offset_t object_id;
 unsigned short user_wired_count;
};

typedef struct vm_region_submap_info *vm_region_submap_info_t;
typedef struct vm_region_submap_info vm_region_submap_info_data_t;




struct vm_region_submap_info_64 {
 vm_prot_t protection;
 vm_prot_t max_protection;
 vm_inherit_t inheritance;
 memory_object_offset_t offset;
        unsigned int user_tag;
        unsigned int pages_resident;
        unsigned int pages_shared_now_private;
        unsigned int pages_swapped_out;
        unsigned int pages_dirtied;
        unsigned int ref_count;
        unsigned short shadow_depth;
        unsigned char external_pager;
        unsigned char share_mode;
 boolean_t is_submap;
 vm_behavior_t behavior;
 vm_offset_t object_id;
 unsigned short user_wired_count;
};

typedef struct vm_region_submap_info_64 *vm_region_submap_info_64_t;
typedef struct vm_region_submap_info_64 vm_region_submap_info_data_64_t;




struct mach_vm_read_entry {
 mach_vm_address_t address;
 mach_vm_size_t size;
};

struct vm_read_entry {
 vm_address_t address;
 vm_size_t size;
};



typedef struct mach_vm_read_entry mach_vm_read_entry_t[(256)];
typedef struct vm_read_entry vm_read_entry_t[(256)];

#pragma pack()
# 103 "/usr/include/mach/mach_types.h" 2 3 4
# 1 "/usr/include/mach/kmod.h" 1 3 4
# 47 "/usr/include/mach/kmod.h" 3 4
typedef int kmod_t;
typedef int kmod_control_flavor_t;
typedef void* kmod_args_t;



#pragma pack(4)


typedef struct kmod_reference {
 struct kmod_reference *next;
 struct kmod_info *info;
} kmod_reference_t;

#pragma pack()
# 70 "/usr/include/mach/kmod.h" 3 4
typedef kern_return_t kmod_start_func_t(struct kmod_info *ki, void *data);
typedef kern_return_t kmod_stop_func_t(struct kmod_info *ki, void *data);

#pragma pack(4)



typedef struct kmod_info {
 struct kmod_info *next;
 int info_version;
 int id;
 char name[64];
 char version[64];
 int reference_count;
 kmod_reference_t *reference_list;
 vm_address_t address;
 vm_size_t size;
 vm_size_t hdr_size;
        kmod_start_func_t *start;
        kmod_stop_func_t *stop;
} kmod_info_t;

#pragma pack()

typedef kmod_info_t *kmod_info_array_t;
# 131 "/usr/include/mach/kmod.h" 3 4
typedef struct kmod_load_extension_cmd {
 int type;
 char name[64];
} kmod_load_extension_cmd_t;

typedef struct kmod_load_with_dependencies_cmd {
 int type;
 char name[64];
 char dependencies[1][64];
} kmod_load_with_dependencies_cmd_t;

typedef struct kmod_generic_cmd {
 int type;
 char data[1];
} kmod_generic_cmd_t;
# 104 "/usr/include/mach/mach_types.h" 2 3 4






typedef mach_port_t task_t;
typedef mach_port_t task_name_t;
typedef mach_port_t thread_t;
typedef mach_port_t thread_act_t;
typedef mach_port_t ipc_space_t;
typedef mach_port_t host_t;
typedef mach_port_t host_priv_t;
typedef mach_port_t host_security_t;
typedef mach_port_t processor_t;
typedef mach_port_t processor_set_t;
typedef mach_port_t processor_set_control_t;
typedef mach_port_t semaphore_t;
typedef mach_port_t lock_set_t;
typedef mach_port_t ledger_t;
typedef mach_port_t alarm_t;
typedef mach_port_t clock_serv_t;
typedef mach_port_t clock_ctrl_t;







typedef processor_set_t processor_set_name_t;




typedef mach_port_t clock_reply_t;
typedef mach_port_t bootstrap_t;
typedef mach_port_t mem_entry_name_port_t;
typedef mach_port_t exception_handler_t;
typedef exception_handler_t *exception_handler_array_t;
typedef mach_port_t vm_task_entry_t;
typedef mach_port_t io_master_t;
typedef mach_port_t UNDServerRef;
# 155 "/usr/include/mach/mach_types.h" 3 4
typedef task_t *task_array_t;
typedef thread_t *thread_array_t;
typedef processor_set_t *processor_set_array_t;
typedef processor_set_t *processor_set_name_array_t;
typedef processor_t *processor_array_t;
typedef thread_act_t *thread_act_array_t;
typedef ledger_t *ledger_array_t;







typedef task_t task_port_t;
typedef task_array_t task_port_array_t;
typedef thread_t thread_port_t;
typedef thread_array_t thread_port_array_t;
typedef ipc_space_t ipc_space_port_t;
typedef host_t host_name_t;
typedef host_t host_name_port_t;
typedef processor_set_t processor_set_port_t;
typedef processor_set_t processor_set_name_port_t;
typedef processor_set_array_t processor_set_name_port_array_t;
typedef processor_set_t processor_set_control_port_t;
typedef processor_t processor_port_t;
typedef processor_array_t processor_port_array_t;
typedef thread_act_t thread_act_port_t;
typedef thread_act_array_t thread_act_port_array_t;
typedef semaphore_t semaphore_port_t;
typedef lock_set_t lock_set_port_t;
typedef ledger_t ledger_port_t;
typedef ledger_array_t ledger_port_array_t;
typedef alarm_t alarm_port_t;
typedef clock_serv_t clock_serv_port_t;
typedef clock_ctrl_t clock_ctrl_port_t;
typedef exception_handler_t exception_port_t;
typedef exception_handler_array_t exception_port_arrary_t;
# 212 "/usr/include/mach/mach_types.h" 3 4
typedef natural_t ledger_item_t;


typedef mach_vm_offset_t *emulation_vector_t;
typedef char *user_subsystem_t;

typedef char *labelstr_t;




# 1 "/usr/include/mach/std_types.h" 1 3 4
# 224 "/usr/include/mach/mach_types.h" 2 3 4
# 42 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 2 3
# 1 "/usr/include/mach/mach_init.h" 1 3 4
# 65 "/usr/include/mach/mach_init.h" 3 4
extern "C" {
extern mach_port_t mach_task_self(void);
extern mach_port_t mach_host_self(void);
extern mach_port_t mach_thread_self(void);
extern kern_return_t host_page_size(host_t, vm_size_t *);
}

extern mach_port_t mach_task_self_;



# 1 "/usr/include/mach/mach_traps.h" 1 3 4
# 77 "/usr/include/mach/mach_traps.h" 3 4
extern "C" {



extern boolean_t swtch_pri(int pri);

extern boolean_t swtch(void);

extern kern_return_t thread_switch(
    mach_port_name_t thread_name,
    int option,
    mach_msg_timeout_t option_time);

extern mach_port_name_t task_self_trap(void);





extern kern_return_t task_for_pid(
    mach_port_name_t target_tport,
    int pid,
    mach_port_name_t *t);

extern kern_return_t task_name_for_pid(
    mach_port_name_t target_tport,
    int pid,
    mach_port_name_t *tn);

extern kern_return_t pid_for_task(
    mach_port_name_t t,
    int *x);




extern kern_return_t map_fd(
    int fd,
    vm_offset_t offset,
    vm_offset_t *va,
    boolean_t findspace,
    vm_size_t size);




}
# 77 "/usr/include/mach/mach_init.h" 2 3 4





extern mach_port_t bootstrap_port;
extern mach_port_t name_server_port;
extern mach_port_t environment_port;
extern mach_port_t service_port;
# 103 "/usr/include/mach/mach_init.h" 3 4
extern vm_size_t vm_page_size;
extern vm_size_t vm_page_mask;
extern int vm_page_shift;
# 115 "/usr/include/mach/mach_init.h" 3 4
extern "C" {
extern int (*vprintf_stderr_func)(const char *format, va_list ap);
}
# 43 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 2 3





# 1 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 1 3
# 37 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 3
# 1 "/System/Library/Frameworks/IOKit.framework/Headers/IOReturn.h" 1 3
# 35 "/System/Library/Frameworks/IOKit.framework/Headers/IOReturn.h" 3
extern "C" {


# 1 "/usr/include/mach/error.h" 1 3 4
# 106 "/usr/include/mach/error.h" 3 4
typedef kern_return_t mach_error_t;
typedef mach_error_t (* mach_error_fn_t)( void );
# 39 "/System/Library/Frameworks/IOKit.framework/Headers/IOReturn.h" 2 3

typedef kern_return_t IOReturn;
# 128 "/System/Library/Frameworks/IOKit.framework/Headers/IOReturn.h" 3
}
# 38 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 2 3


extern "C" {
# 63 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 3
typedef UInt32 IOOptionBits;
typedef SInt32 IOFixed;
typedef UInt32 IOVersion;
typedef UInt32 IOItemCount;
typedef UInt32 IOCacheMode;

typedef UInt32 IOByteCount;


typedef vm_address_t IOVirtualAddress;
typedef IOVirtualAddress IOLogicalAddress;
# 84 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 3
typedef UInt32 IOPhysicalAddress;
typedef UInt32 IOPhysicalLength;







struct IOVirtualRange
{
    IOVirtualAddress address;
    IOByteCount length;
};
struct IOAddressRange
{
    mach_vm_address_t address;
    mach_vm_size_t length;
};
# 120 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 3
typedef struct {
 int value;
 const char *name;
} IONamedValue;





typedef unsigned int IOAlignment;
# 144 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 3
typedef mach_port_t io_object_t;


# 1 "/usr/include/device/device_types.h" 1 3 4
# 72 "/usr/include/device/device_types.h" 3 4
typedef char * io_buf_ptr_t;
# 81 "/usr/include/device/device_types.h" 3 4
typedef char io_name_t[128];
typedef char io_string_t[512];
typedef char io_struct_inband_t[4096];
# 100 "/usr/include/device/device_types.h" 3 4
typedef int io_user_scalar_t;
typedef natural_t io_user_reference_t;
typedef io_user_scalar_t io_scalar_inband_t[16];
typedef io_user_reference_t io_async_ref_t[8];
typedef uint64_t io_scalar_inband64_t[16];
typedef uint64_t io_async_ref64_t[8];
# 148 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 2 3

typedef io_object_t io_connect_t;
typedef io_object_t io_enumerator_t;
typedef io_object_t io_iterator_t;
typedef io_object_t io_registry_entry_t;
typedef io_object_t io_service_t;






enum {
    kIODefaultMemoryType = 0
};

enum {
    kIODefaultCache = 0,
    kIOInhibitCache = 1,
    kIOWriteThruCache = 2,
    kIOCopybackCache = 3,
    kIOWriteCombineCache = 4
};


enum {
    kIOMapAnywhere = 0x00000001,

    kIOMapCacheMask = 0x00000700,
    kIOMapCacheShift = 8,
    kIOMapDefaultCache = kIODefaultCache << kIOMapCacheShift,
    kIOMapInhibitCache = kIOInhibitCache << kIOMapCacheShift,
    kIOMapWriteThruCache = kIOWriteThruCache << kIOMapCacheShift,
    kIOMapCopybackCache = kIOCopybackCache << kIOMapCacheShift,
    kIOMapWriteCombineCache = kIOWriteCombineCache << kIOMapCacheShift,

    kIOMapUserOptionsMask = 0x00000fff,

    kIOMapReadOnly = 0x00001000,

    kIOMapStatic = 0x01000000,
    kIOMapReference = 0x02000000,
    kIOMapUnique = 0x04000000,
    kIOMap64Bit = 0x08000000
};
# 202 "/System/Library/Frameworks/IOKit.framework/Headers/IOTypes.h" 3
enum {
    kNanosecondScale = 1,
    kMicrosecondScale = 1000,
    kMillisecondScale = 1000 * 1000,
    kSecondScale = 1000 * 1000 * 1000,
    kTickScale = (kSecondScale / 100)
};






typedef enum {
        IO_CacheOff,
        IO_WriteThrough,
        IO_CopyBack
} IOCache;


typedef unsigned int IODeviceNumber;
typedef unsigned int IOObjectNumber;



}
# 49 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 2 3
# 1 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitKeys.h" 1 3
# 50 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 2 3

# 1 "/System/Library/Frameworks/IOKit.framework/Headers/OSMessageNotification.h" 1 3
# 34 "/System/Library/Frameworks/IOKit.framework/Headers/OSMessageNotification.h" 3
extern "C" {






enum {
    kFirstIOKitNotificationType = 100,
    kIOServicePublishNotificationType = 100,
    kIOServiceMatchedNotificationType = 101,
    kIOServiceTerminatedNotificationType = 102,
    kIOAsyncCompletionNotificationType = 150,
    kIOServiceMessageNotificationType = 160,
    kLastIOKitNotificationType = 199
};

enum {
    kOSNotificationMessageID = 53,
    kOSAsyncCompleteMessageID = 57,
    kMaxAsyncArgs = 16
};

enum {
    kIOAsyncReservedIndex = 0,
    kIOAsyncReservedCount,

    kIOAsyncCalloutFuncIndex = kIOAsyncReservedCount,
    kIOAsyncCalloutRefconIndex,
    kIOAsyncCalloutCount,

    kIOMatchingCalloutFuncIndex = kIOAsyncReservedCount,
    kIOMatchingCalloutRefconIndex,
    kIOMatchingCalloutCount,

    kIOInterestCalloutFuncIndex = kIOAsyncReservedCount,
    kIOInterestCalloutRefconIndex,
    kIOInterestCalloutServiceIndex,
    kIOInterestCalloutCount
};




enum {
    kOSAsyncRef64Count = 8,
    kOSAsyncRef64Size = kOSAsyncRef64Count * sizeof(io_user_reference_t)
};
typedef io_user_reference_t OSAsyncReference64[kOSAsyncRef64Count];

struct OSNotificationHeader64 {
    mach_msg_size_t size;
    natural_t type;
    OSAsyncReference64 reference;




    unsigned char content[0];

};

struct IOServiceInterestContent64 {
    natural_t messageType;
    io_user_reference_t messageArgument[1];
};




enum {
    kOSAsyncRefCount = 8,
    kOSAsyncRefSize = 32
};
typedef natural_t OSAsyncReference[kOSAsyncRefCount];

struct OSNotificationHeader {
    mach_msg_size_t size;
    natural_t type;
    OSAsyncReference reference;




    unsigned char content[0];

};

#pragma pack(4)
struct IOServiceInterestContent {
    natural_t messageType;
    void * messageArgument[1];
};
#pragma pack()



struct IOAsyncCompletionContent {
    IOReturn result;



    void * args[0];

};
# 147 "/System/Library/Frameworks/IOKit.framework/Headers/OSMessageNotification.h" 3
}
# 52 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 2 3



extern "C" {
# 64 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef struct IONotificationPort * IONotificationPortRef;







typedef void
(*IOServiceMatchingCallback)(
 void * refcon,
 io_iterator_t iterator );
# 85 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef void
(*IOServiceInterestCallback)(
 void * refcon,
 io_service_t service,
 uint32_t messageType,
 void * messageArgument );
# 99 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
extern
const mach_port_t kIOMasterPortDefault;
# 109 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOMasterPort( mach_port_t bootstrapPort,
       mach_port_t * masterPort );
# 120 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
IONotificationPortRef
IONotificationPortCreate(
 mach_port_t masterPort );





void
IONotificationPortDestroy(
 IONotificationPortRef notify );







CFRunLoopSourceRef
IONotificationPortGetRunLoopSource(
 IONotificationPortRef notify );







mach_port_t
IONotificationPortGetMachPort(
 IONotificationPortRef notify );
# 159 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
void
IODispatchCalloutFromMessage(
        void *unused,
        mach_msg_header_t *msg,
        void *reference );
# 176 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOCreateReceivePort( uint32_t msgType, mach_port_t * recvPort );
# 191 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOObjectRelease(
 io_object_t object );







kern_return_t
IOObjectRetain(
 io_object_t object );
# 212 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOObjectGetClass(
 io_object_t object,
 io_name_t className );







CFStringRef
IOObjectCopyClass(io_object_t object)
;







CFStringRef
IOObjectCopySuperclassForClass(CFStringRef classname)
;







CFStringRef
IOObjectCopyBundleIdentifierForClass(CFStringRef classname)
;
# 254 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
boolean_t
IOObjectConformsTo(
 io_object_t object,
 const io_name_t className );
# 266 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
boolean_t
IOObjectIsEqualTo(
 io_object_t object,
 io_object_t anObject );







uint32_t
IOObjectGetRetainCount(
 io_object_t object );
# 293 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
io_object_t
IOIteratorNext(
 io_iterator_t iterator );






void
IOIteratorReset(
 io_iterator_t iterator );







boolean_t
IOIteratorIsValid(
 io_iterator_t iterator );
# 331 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
io_service_t
IOServiceGetMatchingService(
 mach_port_t masterPort,
 CFDictionaryRef matching );
# 344 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceGetMatchingServices(
 mach_port_t masterPort,
 CFDictionaryRef matching,
 io_iterator_t * existing );


kern_return_t
IOServiceAddNotification(
 mach_port_t masterPort,
 const io_name_t notificationType,
 CFDictionaryRef matching,
 mach_port_t wakePort,
 uintptr_t reference,
 io_iterator_t * notification ) __attribute__((deprecated));
# 376 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceAddMatchingNotification(
 IONotificationPortRef notifyPort,
 const io_name_t notificationType,
 CFDictionaryRef matching,
        IOServiceMatchingCallback callback,
        void * refCon,
 io_iterator_t * notification );
# 397 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceAddInterestNotification(
 IONotificationPortRef notifyPort,
        io_service_t service,
 const io_name_t interestType,
        IOServiceInterestCallback callback,
        void * refCon,
        io_object_t * notification );
# 414 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceMatchPropertyTable(
        io_service_t service,
        CFDictionaryRef matching,
        boolean_t * matches );
# 427 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceGetBusyState(
 io_service_t service,
 uint32_t * busyState );
# 439 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceWaitQuiet(
 io_service_t service,
 mach_timespec_t * waitTime );
# 451 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOKitGetBusyState(
 mach_port_t masterPort,
 uint32_t * busyState );
# 463 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOKitWaitQuiet(
 mach_port_t masterPort,
 mach_timespec_t * waitTime );
# 477 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceOpen(
 io_service_t service,
 task_port_t owningTask,
 uint32_t type,
 io_connect_t * connect );
# 491 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceRequestProbe(
 io_service_t service,
 uint32_t options );
# 508 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceClose(
 io_connect_t connect );







kern_return_t
IOConnectAddRef(
 io_connect_t connect );







kern_return_t
IOConnectRelease(
 io_connect_t connect );
# 539 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectGetService(
 io_connect_t connect,
 io_service_t * service );
# 553 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectSetNotificationPort(
 io_connect_t connect,
 uint32_t type,
 mach_port_t port,
 uintptr_t reference );
# 571 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectMapMemory(
 io_connect_t connect,
 uint32_t memoryType,
 task_port_t intoTask,
 vm_address_t *atAddress,
 vm_size_t *ofSize,
 IOOptionBits options );

kern_return_t IOConnectMapMemory64



 (io_connect_t connect,
  uint32_t memoryType,
  task_port_t intoTask,
  mach_vm_address_t *atAddress,
  mach_vm_size_t *ofSize,
  IOOptionBits options );
# 601 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectUnmapMemory(
 io_connect_t connect,
 uint32_t memoryType,
 task_port_t fromTask,
 vm_address_t atAddress );

kern_return_t IOConnectUnmapMemory64



 (io_connect_t connect,
  uint32_t memoryType,
  task_port_t fromTask,
  mach_vm_address_t atAddress );
# 624 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectSetCFProperties(
 io_connect_t connect,
 CFTypeRef properties );
# 637 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectSetCFProperty(
 io_connect_t connect,
        CFStringRef propertyName,
 CFTypeRef property );





kern_return_t
IOConnectCallMethod(
 mach_port_t connection,
 uint32_t selector,
 const uint64_t *input,
 uint32_t inputCnt,
 const void *inputStruct,
 size_t inputStructCnt,
 uint64_t *output,
 uint32_t *outputCnt,
 void *outputStruct,
 size_t *outputStructCnt)
;

kern_return_t
IOConnectCallAsyncMethod(
 mach_port_t connection,
 uint32_t selector,
 mach_port_t wake_port,
 uint64_t *reference,
 uint32_t referenceCnt,
 const uint64_t *input,
 uint32_t inputCnt,
 const void *inputStruct,
 size_t inputStructCnt,
 uint64_t *output,
 uint32_t *outputCnt,
 void *outputStruct,
 size_t *outputStructCnt)
;

kern_return_t
IOConnectCallStructMethod(
 mach_port_t connection,
 uint32_t selector,
 const void *inputStruct,
 size_t inputStructCnt,
 void *outputStruct,
 size_t *outputStructCnt)
;

kern_return_t
IOConnectCallAsyncStructMethod(
 mach_port_t connection,
 uint32_t selector,
 mach_port_t wake_port,
 uint64_t *reference,
 uint32_t referenceCnt,
 const void *inputStruct,
 size_t inputStructCnt,
 void *outputStruct,
 size_t *outputStructCnt)
;

kern_return_t
IOConnectCallScalarMethod(
 mach_port_t connection,
 uint32_t selector,
 const uint64_t *input,
 uint32_t inputCnt,
 uint64_t *output,
 uint32_t *outputCnt)
;

kern_return_t
IOConnectCallAsyncScalarMethod(
 mach_port_t connection,
 uint32_t selector,
 mach_port_t wake_port,
 uint64_t *reference,
 uint32_t referenceCnt,
 const uint64_t *input,
 uint32_t inputCnt,
 uint64_t *output,
 uint32_t *outputCnt)
;



kern_return_t
IOConnectTrap0(io_connect_t connect,
        uint32_t index );

kern_return_t
IOConnectTrap1(io_connect_t connect,
        uint32_t index,
        uintptr_t p1 );

kern_return_t
IOConnectTrap2(io_connect_t connect,
        uint32_t index,
        uintptr_t p1,
        uintptr_t p2);

kern_return_t
IOConnectTrap3(io_connect_t connect,
        uint32_t index,
        uintptr_t p1,
        uintptr_t p2,
        uintptr_t p3);

kern_return_t
IOConnectTrap4(io_connect_t connect,
        uint32_t index,
        uintptr_t p1,
        uintptr_t p2,
        uintptr_t p3,
        uintptr_t p4);

kern_return_t
IOConnectTrap5(io_connect_t connect,
        uint32_t index,
        uintptr_t p1,
        uintptr_t p2,
        uintptr_t p3,
        uintptr_t p4,
        uintptr_t p5);

kern_return_t
IOConnectTrap6(io_connect_t connect,
        uint32_t index,
        uintptr_t p1,
        uintptr_t p2,
        uintptr_t p3,
        uintptr_t p4,
        uintptr_t p5,
        uintptr_t p6);
# 784 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOConnectAddClient(
 io_connect_t connect,
 io_connect_t client );
# 801 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
io_registry_entry_t
IORegistryGetRootEntry(
 mach_port_t masterPort );
# 812 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
io_registry_entry_t
IORegistryEntryFromPath(
 mach_port_t masterPort,
 const io_string_t path );


enum {
    kIORegistryIterateRecursively = 0x00000001,
    kIORegistryIterateParents = 0x00000002
};
# 832 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryCreateIterator(
 mach_port_t masterPort,
 const io_name_t plane,
 IOOptionBits options,
 io_iterator_t * iterator );
# 848 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryCreateIterator(
 io_registry_entry_t entry,
 const io_name_t plane,
 IOOptionBits options,
 io_iterator_t * iterator );
# 866 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryIteratorEnterEntry(
 io_iterator_t iterator );






kern_return_t
IORegistryIteratorExitEntry(
 io_iterator_t iterator );
# 892 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetName(
 io_registry_entry_t entry,
 io_name_t name );
# 905 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetNameInPlane(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_name_t name );
# 919 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetLocationInPlane(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_name_t location );
# 933 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetPath(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_string_t path );
# 948 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryCreateCFProperties(
 io_registry_entry_t entry,
 CFMutableDictionaryRef * properties,
        CFAllocatorRef allocator,
 IOOptionBits options );
# 964 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
CFTypeRef
IORegistryEntryCreateCFProperty(
 io_registry_entry_t entry,
 CFStringRef key,
        CFAllocatorRef allocator,
 IOOptionBits options );
# 982 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
CFTypeRef
IORegistryEntrySearchCFProperty(
 io_registry_entry_t entry,
 const io_name_t plane,
 CFStringRef key,
        CFAllocatorRef allocator,
 IOOptionBits options );




kern_return_t
IORegistryEntryGetProperty(
 io_registry_entry_t entry,
 const io_name_t propertyName,
 io_struct_inband_t buffer,
 uint32_t * size );
# 1007 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntrySetCFProperties(
 io_registry_entry_t entry,
 CFTypeRef properties );
# 1020 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntrySetCFProperty(
 io_registry_entry_t entry,
        CFStringRef propertyName,
 CFTypeRef property );
# 1034 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetChildIterator(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_iterator_t * iterator );
# 1048 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetChildEntry(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_registry_entry_t * child );
# 1062 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetParentIterator(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_iterator_t * iterator );
# 1076 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IORegistryEntryGetParentEntry(
 io_registry_entry_t entry,
 const io_name_t plane,
 io_registry_entry_t * parent );
# 1089 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
boolean_t
IORegistryEntryInPlane(
 io_registry_entry_t entry,
 const io_name_t plane );
# 1106 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
CFMutableDictionaryRef
IOServiceMatching(
 const char * name );







CFMutableDictionaryRef
IOServiceNameMatching(
 const char * name );
# 1128 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
CFMutableDictionaryRef
IOBSDNameMatching(
 mach_port_t masterPort,
 uint32_t options,
 const char * bsdName );
# 1142 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
CFMutableDictionaryRef
IOOpenFirmwarePathMatching(
 mach_port_t masterPort,
 uint32_t options,
 const char * path );
# 1158 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
kern_return_t
IOServiceOFPathToBSDName(mach_port_t masterPort,
                         const io_name_t openFirmwarePath,
                         io_name_t bsdName);
# 1171 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef void (*IOAsyncCallback0)(void *refcon, IOReturn result);
# 1181 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef void (*IOAsyncCallback1)(void *refcon, IOReturn result, void *arg0);
# 1191 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef void (*IOAsyncCallback2)(void *refcon, IOReturn result, void *arg0, void *arg1);
# 1201 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef void (*IOAsyncCallback)(void *refcon, IOReturn result, void **args,
                                uint32_t numArgs);




kern_return_t
OSGetNotificationFromMessage(
 mach_msg_header_t * msg,
 uint32_t index,
        uint32_t * type,
        uintptr_t * reference,
 void ** content,
        vm_size_t * size );





kern_return_t
IOCatalogueSendData(
        mach_port_t masterPort,
        uint32_t flag,
        const char *buffer,
        uint32_t size );

kern_return_t
IOCatalogueTerminate(
        mach_port_t masterPort,
        uint32_t flag,
 io_name_t description );

kern_return_t
IOCatalogueGetData(
        mach_port_t masterPort,
        uint32_t flag,
        char **buffer,
        uint32_t *size );

kern_return_t
IOCatalogueModuleLoaded(
        mach_port_t masterPort,
        io_name_t name );

kern_return_t
IOCatalogueReset(
        mach_port_t masterPort,
        uint32_t flag );
# 1258 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
typedef struct IOObject IOObject;



kern_return_t
IORegistryDisposeEnumerator(
 io_enumerator_t enumerator ) __attribute__((deprecated));

kern_return_t
IOMapMemory(
 io_connect_t connect,
 uint32_t memoryType,
 task_port_t intoTask,
 vm_address_t * atAddress,
 vm_size_t * ofSize,
 uint32_t flags ) __attribute__((deprecated));



kern_return_t
IOCompatibiltyNumber(
 mach_port_t connect,
 uint32_t * objectNumber ) __attribute__((deprecated));


kern_return_t
IOConnectMethodScalarIScalarO(
 io_connect_t connect,
        uint32_t index,
        IOItemCount scalarInputCount,
        IOItemCount scalarOutputCount,
        ... ) __attribute__((deprecated));

kern_return_t
IOConnectMethodScalarIStructureO(
 io_connect_t connect,
        uint32_t index,
        IOItemCount scalarInputCount,
        IOByteCount * structureSize,
        ... ) __attribute__((deprecated));

kern_return_t
IOConnectMethodScalarIStructureI(
 io_connect_t connect,
        uint32_t index,
        IOItemCount scalarInputCount,
        IOByteCount structureSize,
        ... ) __attribute__((deprecated));

kern_return_t
IOConnectMethodStructureIStructureO(
 io_connect_t connect,
        uint32_t index,
        IOItemCount structureInputSize,
        IOByteCount * structureOutputSize,
        void * inputStructure,
        void * ouputStructure ) __attribute__((deprecated));
# 1422 "/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h" 3
}
# 29 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 2 3

# 1 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 1 3
# 30 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern "C" {
# 40 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
typedef struct __DASession * DASessionRef;






extern CFTypeID DASessionGetTypeID( void );
# 58 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern DASessionRef DASessionCreate( CFAllocatorRef allocator );
# 68 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern void DASessionScheduleWithRunLoop( DASessionRef session, CFRunLoopRef runLoop, CFStringRef runLoopMode );
# 78 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern void DASessionUnscheduleFromRunLoop( DASessionRef session, CFRunLoopRef runLoop, CFStringRef runLoopMode );






typedef struct __DAApprovalSession * DAApprovalSessionRef;






extern CFTypeID DAApprovalSessionGetTypeID( void );
# 103 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern DAApprovalSessionRef DAApprovalSessionCreate( CFAllocatorRef allocator );
# 113 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern void DAApprovalSessionScheduleWithRunLoop( DAApprovalSessionRef session, CFRunLoopRef runLoop, CFStringRef runLoopMode );
# 123 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DASession.h" 3
extern void DAApprovalSessionUnscheduleFromRunLoop( DAApprovalSessionRef session, CFRunLoopRef runLoop, CFStringRef runLoopMode );




}
# 31 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 2 3


extern "C" {


extern const CFStringRef kDADiskDescriptionVolumeKindKey;
extern const CFStringRef kDADiskDescriptionVolumeMountableKey;
extern const CFStringRef kDADiskDescriptionVolumeNameKey;
extern const CFStringRef kDADiskDescriptionVolumeNetworkKey;
extern const CFStringRef kDADiskDescriptionVolumePathKey;
extern const CFStringRef kDADiskDescriptionVolumeUUIDKey;

extern const CFStringRef kDADiskDescriptionMediaBlockSizeKey;
extern const CFStringRef kDADiskDescriptionMediaBSDMajorKey;
extern const CFStringRef kDADiskDescriptionMediaBSDMinorKey;
extern const CFStringRef kDADiskDescriptionMediaBSDNameKey;
extern const CFStringRef kDADiskDescriptionMediaBSDUnitKey;
extern const CFStringRef kDADiskDescriptionMediaContentKey;
extern const CFStringRef kDADiskDescriptionMediaEjectableKey;
extern const CFStringRef kDADiskDescriptionMediaIconKey;
extern const CFStringRef kDADiskDescriptionMediaKindKey;
extern const CFStringRef kDADiskDescriptionMediaLeafKey;
extern const CFStringRef kDADiskDescriptionMediaNameKey;
extern const CFStringRef kDADiskDescriptionMediaPathKey;
extern const CFStringRef kDADiskDescriptionMediaRemovableKey;
extern const CFStringRef kDADiskDescriptionMediaSizeKey;
extern const CFStringRef kDADiskDescriptionMediaTypeKey;
extern const CFStringRef kDADiskDescriptionMediaUUIDKey;
extern const CFStringRef kDADiskDescriptionMediaWholeKey;
extern const CFStringRef kDADiskDescriptionMediaWritableKey;

extern const CFStringRef kDADiskDescriptionDeviceGUIDKey;
extern const CFStringRef kDADiskDescriptionDeviceInternalKey;
extern const CFStringRef kDADiskDescriptionDeviceModelKey;
extern const CFStringRef kDADiskDescriptionDevicePathKey;
extern const CFStringRef kDADiskDescriptionDeviceProtocolKey;
extern const CFStringRef kDADiskDescriptionDeviceRevisionKey;
extern const CFStringRef kDADiskDescriptionDeviceUnitKey;
extern const CFStringRef kDADiskDescriptionDeviceVendorKey;

extern const CFStringRef kDADiskDescriptionBusNameKey;
extern const CFStringRef kDADiskDescriptionBusPathKey;
# 81 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
typedef struct __DADisk * DADiskRef;






extern CFTypeID DADiskGetTypeID( void );
# 103 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
extern DADiskRef DADiskCreateFromBSDName( CFAllocatorRef allocator, DASessionRef session, const char * name );
# 118 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
extern DADiskRef DADiskCreateFromIOMedia( CFAllocatorRef allocator, DASessionRef session, io_service_t media );
# 129 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
extern const char * DADiskGetBSDName( DADiskRef disk );
# 142 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
extern io_service_t DADiskCopyIOMedia( DADiskRef disk );
# 160 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
extern CFDictionaryRef DADiskCopyDescription( DADiskRef disk );
# 173 "/System/Library/Frameworks/DiskArbitration.framework/Headers/DADisk.h" 3
extern DADiskRef DADiskCopyWholeDisk( DADiskRef disk );




}
# 63 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 2 3
# 71 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern "C" {


#pragma pack(push, 2)




struct HFSUniStr255 {
  UInt16 length;
  UniChar unicode[255];
};
typedef struct HFSUniStr255 HFSUniStr255;
typedef const HFSUniStr255 * ConstHFSUniStr255Param;
# 97 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {
  fsCurPerm = 0x00,
  fsRdPerm = 0x01,
  fsWrPerm = 0x02,
  fsRdWrPerm = 0x03,
  fsRdWrShPerm = 0x04
};
# 115 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {
  fsRdAccessPerm = 0x01,
  fsWrAccessPerm = 0x02,
  fsRdDenyPerm = 0x10,
  fsWrDenyPerm = 0x20
};

enum {
  fsRtParID = 1,
  fsRtDirID = 2
};

enum {
  fsAtMark = 0,
  fsFromStart = 1,
  fsFromLEOF = 2,
  fsFromMark = 3
};

enum {

  kFSAllowConcurrentAsyncIOBit = 3,
  kFSAllowConcurrentAsyncIOMask = 0x0008,
  kFSPleaseCacheBit = 4,
  kFSPleaseCacheMask = 0x0010,
  kFSNoCacheBit = 5,
  kFSNoCacheMask = 0x0020,
  kFSRdVerifyBit = 6,
  kFSRdVerifyMask = 0x0040,
  kFSForceReadBit = 6,
  kFSForceReadMask = 0x0040,
  kFSNewLineBit = 7,
  kFSNewLineMask = 0x0080,
  kFSNewLineCharMask = 0xFF00
};


enum {

  fsSBPartialName = 0x01,
  fsSBFullName = 0x02,
  fsSBFlAttrib = 0x04,
  fsSBFlFndrInfo = 0x08,
  fsSBFlLgLen = 0x20,
  fsSBFlPyLen = 0x40,
  fsSBFlRLgLen = 0x80,
  fsSBFlRPyLen = 0x0100,
  fsSBFlCrDat = 0x0200,
  fsSBFlMdDat = 0x0400,
  fsSBFlBkDat = 0x0800,
  fsSBFlXFndrInfo = 0x1000,
  fsSBFlParID = 0x2000,
  fsSBNegate = 0x4000,
  fsSBDrUsrWds = 0x08,
  fsSBDrNmFls = 0x10,
  fsSBDrCrDat = 0x0200,
  fsSBDrMdDat = 0x0400,
  fsSBDrBkDat = 0x0800,
  fsSBDrFndrInfo = 0x1000,
  fsSBDrParID = 0x2000,
  fsSBNodeID = 0x8000,
  fsSBAttributeModDate = 0x00010000,
  fsSBAccessDate = 0x00020000,
  fsSBPermissions = 0x00040000,
  fsSBSkipPackageContents = 0x00080000,
  fsSBSkipHiddenItems = 0x00100000,
  fsSBUserID = 0x00200000,
  fsSBGroupID = 0x00400000
};

enum {

  fsSBPartialNameBit = 0,
  fsSBFullNameBit = 1,
  fsSBFlAttribBit = 2,
  fsSBFlFndrInfoBit = 3,
  fsSBFlLgLenBit = 5,
  fsSBFlPyLenBit = 6,
  fsSBFlRLgLenBit = 7,
  fsSBFlRPyLenBit = 8,
  fsSBFlCrDatBit = 9,
  fsSBFlMdDatBit = 10,
  fsSBFlBkDatBit = 11,
  fsSBFlXFndrInfoBit = 12,
  fsSBFlParIDBit = 13,
  fsSBNegateBit = 14,
  fsSBDrUsrWdsBit = 3,
  fsSBDrNmFlsBit = 4,
  fsSBDrCrDatBit = 9,
  fsSBDrMdDatBit = 10,
  fsSBDrBkDatBit = 11,
  fsSBDrFndrInfoBit = 12,
  fsSBDrParIDBit = 13,
  fsSBNodeIDBit = 15,
  fsSBAttributeModDateBit = 16,
  fsSBAccessDateBit = 17,
  fsSBPermissionsBit = 18,
  fsSBSkipPackageContentsBit = 19,
  fsSBSkipHiddenItemsBit = 20,
  fsSBUserIDBit = 21,
  fsSBGroupIDBit = 22
};

enum {

  bLimitFCBs = 31,
  bLocalWList = 30,
  bNoMiniFndr = 29,
  bNoVNEdit = 28,
  bNoLclSync = 27,
  bTrshOffLine = 26,
  bNoSwitchTo = 25,
  bNoDeskItems = 20,
  bNoBootBlks = 19,
  bAccessCntl = 18,
  bNoSysDir = 17,
  bHasExtFSVol = 16,
  bHasOpenDeny = 15,
  bHasCopyFile = 14,
  bHasMoveRename = 13,
  bHasDesktopMgr = 12,
  bHasShortName = 11,
  bHasFolderLock = 10,
  bHasPersonalAccessPrivileges = 9,
  bHasUserGroupList = 8,
  bHasCatSearch = 7,
  bHasFileIDs = 6,
  bHasBTreeMgr = 5,
  bHasBlankAccessPrivileges = 4,
  bSupportsAsyncRequests = 3,
  bSupportsTrashVolumeCache = 2
};

enum {

  bHasDirectIO = 1
};

enum {

  bIsEjectable = 0,
  bSupportsHFSPlusAPIs = 1,
  bSupportsFSCatalogSearch = 2,
  bSupportsFSExchangeObjects = 3,
  bSupports2TBFiles = 4,
  bSupportsLongNames = 5,
  bSupportsMultiScriptNames = 6,
  bSupportsNamedForks = 7,
  bSupportsSubtreeIterators = 8,
  bL2PCanMapFileBlocks = 9,
  bParentModDateChanges = 10,
  bAncestorModDateChanges = 11,
  bSupportsSymbolicLinks = 13,
  bIsAutoMounted = 14,
  bAllowCDiDataHandler = 17,
  bSupportsExclusiveLocks = 18,
  bSupportsJournaling = 19,
  bNoVolumeSizes = 20,
  bIsOnInternalBus = 21,
  bIsCaseSensitive = 22,
  bIsCasePreserving = 23,
  bDoNotDisplay = 24,
  bIsRemovable = 25,
  bNoRootTimes = 26,
  bIsOnExternalBus = 27,
  bSupportsExtendedFileSecurity = 28
};






enum {

  kWidePosOffsetBit = 8,
  kUseWidePositioning = (1 << kWidePosOffsetBit),
  kMaximumBlocksIn4GB = 0x007FFFFF
};

enum {

  fsUnixPriv = 1
};

enum {

  kNoUserAuthentication = 1,
  kPassword = 2,
  kEncryptPassword = 3,
  kTwoWayEncryptPassword = 6
};



enum {
  knoUser = 0,
  kadministratorUser = 1
};

enum {
  knoGroup = 0
};


typedef SInt16 FSVolumeRefNum;



typedef SInt16 FSIORefNum;


enum {
  kFSInvalidVolumeRefNum = 0
};

struct FSRef {
  UInt8 hidden[80];
};
typedef struct FSRef FSRef;
typedef FSRef * FSRefPtr;
typedef struct __FSFileSecurity* FSFileSecurityRef;

struct CatPositionRec {
  SInt32 initialize;
  SInt16 priv[6];
};
typedef struct CatPositionRec CatPositionRec;



struct FSSpec {
  FSVolumeRefNum vRefNum;
  SInt32 parID;
  StrFileName name;
};
typedef struct FSSpec FSSpec;


typedef FSSpec * FSSpecPtr;
typedef FSSpecPtr * FSSpecHandle;

typedef FSSpecPtr FSSpecArrayPtr;




typedef const FSSpec * ConstFSSpecPtr;
typedef union ParamBlockRec ParamBlockRec;



typedef ParamBlockRec * ParmBlkPtr;


typedef void ( * IOCompletionProcPtr)(ParmBlkPtr paramBlock);
typedef IOCompletionProcPtr IOCompletionUPP;

struct IOParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioRefNum;
  SInt8 ioVersNum;
  SInt8 ioPermssn;
  Ptr ioMisc;
  Ptr ioBuffer;
  SInt32 ioReqCount;
  SInt32 ioActCount;
  SInt16 ioPosMode;
  SInt32 ioPosOffset;
};
typedef struct IOParam IOParam;
typedef IOParam * IOParamPtr;
struct FileParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioFRefNum;
  SInt8 ioFVersNum;
  SInt8 filler1;
  SInt16 ioFDirIndex;
  SInt8 ioFlAttrib;
  SInt8 ioFlVersNum;
  FInfo ioFlFndrInfo;
  UInt32 ioFlNum;
  UInt16 ioFlStBlk;
  SInt32 ioFlLgLen;
  SInt32 ioFlPyLen;
  UInt16 ioFlRStBlk;
  SInt32 ioFlRLgLen;
  SInt32 ioFlRPyLen;
  UInt32 ioFlCrDat;
  UInt32 ioFlMdDat;
};
typedef struct FileParam FileParam;
typedef FileParam * FileParamPtr;
struct VolumeParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  UInt32 filler2;
  SInt16 ioVolIndex;
  UInt32 ioVCrDate;
  UInt32 ioVLsBkUp;
  UInt16 ioVAtrb;
  UInt16 ioVNmFls;
  UInt16 ioVDirSt;
  SInt16 ioVBlLn;
  UInt16 ioVNmAlBlks;
  UInt32 ioVAlBlkSiz;
  UInt32 ioVClpSiz;
  UInt16 ioAlBlSt;
  UInt32 ioVNxtFNum;
  UInt16 ioVFrBlk;
};
typedef struct VolumeParam VolumeParam;
typedef VolumeParam * VolumeParamPtr;
struct CntrlParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioCRefNum;
  SInt16 csCode;
  SInt16 csParam[11];
};
typedef struct CntrlParam CntrlParam;
typedef CntrlParam * CntrlParamPtr;
struct SlotDevParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioSRefNum;
  SInt8 ioSVersNum;
  SInt8 ioSPermssn;
  Ptr ioSMix;
  SInt16 ioSFlags;
  SInt8 ioSlot;
  SInt8 ioID;
};
typedef struct SlotDevParam SlotDevParam;
typedef SlotDevParam * SlotDevParamPtr;
struct MultiDevParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioMRefNum;
  SInt8 ioMVersNum;
  SInt8 ioMPermssn;
  Ptr ioMMix;
  SInt16 ioMFlags;
  Ptr ioSEBlkPtr;
};
typedef struct MultiDevParam MultiDevParam;
typedef MultiDevParam * MultiDevParamPtr;
union ParamBlockRec {
  IOParam ioParam;
  FileParam fileParam;
  VolumeParam volumeParam;
  CntrlParam cntrlParam;
  SlotDevParam slotDevParam;
  MultiDevParam multiDevParam;
};

struct HFileInfo {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioFRefNum;
  SInt8 ioFVersNum;
  SInt8 filler1;
  SInt16 ioFDirIndex;
  SInt8 ioFlAttrib;
  SInt8 ioACUser;
  FInfo ioFlFndrInfo;
  SInt32 ioDirID;
  UInt16 ioFlStBlk;
  SInt32 ioFlLgLen;
  SInt32 ioFlPyLen;
  UInt16 ioFlRStBlk;
  SInt32 ioFlRLgLen;
  SInt32 ioFlRPyLen;
  UInt32 ioFlCrDat;
  UInt32 ioFlMdDat;
  UInt32 ioFlBkDat;
  FXInfo ioFlXFndrInfo;
  SInt32 ioFlParID;
  SInt32 ioFlClpSiz;
};
typedef struct HFileInfo HFileInfo;
struct DirInfo {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioFRefNum;
  SInt8 ioFVersNum;
  SInt8 filler1;
  SInt16 ioFDirIndex;
  SInt8 ioFlAttrib;
  SInt8 ioACUser;
  DInfo ioDrUsrWds;
  SInt32 ioDrDirID;
  UInt16 ioDrNmFls;
  SInt16 filler3[9];
  UInt32 ioDrCrDat;
  UInt32 ioDrMdDat;
  UInt32 ioDrBkDat;
  DXInfo ioDrFndrInfo;
  SInt32 ioDrParID;
};
typedef struct DirInfo DirInfo;
union CInfoPBRec {
  HFileInfo hFileInfo;
  DirInfo dirInfo;
};
typedef union CInfoPBRec CInfoPBRec;
typedef CInfoPBRec * CInfoPBPtr;
struct XCInfoPBRec {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  ProcPtr ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt32 filler1;
  StringPtr ioShortNamePtr;
  SInt16 filler2;
  SInt16 ioPDType;
  SInt32 ioPDAuxType;
  SInt32 filler3[2];
  SInt32 ioDirID;
};
typedef struct XCInfoPBRec XCInfoPBRec;
typedef XCInfoPBRec * XCInfoPBPtr;
struct DTPBRec {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioDTRefNum;
  SInt16 ioIndex;
  SInt32 ioTagInfo;
  Ptr ioDTBuffer;
  SInt32 ioDTReqCount;
  SInt32 ioDTActCount;
  SInt8 ioFiller1;
  UInt8 ioIconType;
  SInt16 ioFiller2;
  SInt32 ioDirID;
  OSType ioFileCreator;
  OSType ioFileType;
  SInt32 ioFiller3;
  SInt32 ioDTLgLen;
  SInt32 ioDTPyLen;
  SInt16 ioFiller4[14];
  SInt32 ioAPPLParID;
};
typedef struct DTPBRec DTPBRec;
typedef DTPBRec * DTPBPtr;

struct HIOParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioRefNum;
  SInt8 ioVersNum;
  SInt8 ioPermssn;
  Ptr ioMisc;
  Ptr ioBuffer;
  SInt32 ioReqCount;
  SInt32 ioActCount;
  SInt16 ioPosMode;
  SInt32 ioPosOffset;
};
typedef struct HIOParam HIOParam;
typedef HIOParam * HIOParamPtr;
struct HFileParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioFRefNum;
  SInt8 ioFVersNum;
  SInt8 filler1;
  SInt16 ioFDirIndex;
  SInt8 ioFlAttrib;
  SInt8 ioFlVersNum;
  FInfo ioFlFndrInfo;
  SInt32 ioDirID;
  UInt16 ioFlStBlk;
  SInt32 ioFlLgLen;
  SInt32 ioFlPyLen;
  UInt16 ioFlRStBlk;
  SInt32 ioFlRLgLen;
  SInt32 ioFlRPyLen;
  UInt32 ioFlCrDat;
  UInt32 ioFlMdDat;
};
typedef struct HFileParam HFileParam;
typedef HFileParam * HFileParamPtr;
struct HVolumeParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt32 filler2;
  SInt16 ioVolIndex;
  UInt32 ioVCrDate;
  UInt32 ioVLsMod;
  SInt16 ioVAtrb;
  UInt16 ioVNmFls;
  UInt16 ioVBitMap;
  UInt16 ioAllocPtr;
  UInt16 ioVNmAlBlks;
  UInt32 ioVAlBlkSiz;
  UInt32 ioVClpSiz;
  UInt16 ioAlBlSt;
  UInt32 ioVNxtCNID;
  UInt16 ioVFrBlk;
  UInt16 ioVSigWord;
  SInt16 ioVDrvInfo;
  FSIORefNum ioVDRefNum;
  SInt16 ioVFSID;
  UInt32 ioVBkUp;
  SInt16 ioVSeqNum;
  UInt32 ioVWrCnt;
  UInt32 ioVFilCnt;
  UInt32 ioVDirCnt;
  SInt32 ioVFndrInfo[8];
};
typedef struct HVolumeParam HVolumeParam;
typedef HVolumeParam * HVolumeParamPtr;
struct XIOParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioRefNum;
  SInt8 ioVersNum;
  SInt8 ioPermssn;
  Ptr ioMisc;
  Ptr ioBuffer;
  SInt32 ioReqCount;
  SInt32 ioActCount;
  SInt16 ioPosMode;
  wide ioWPosOffset;
};
typedef struct XIOParam XIOParam;
typedef XIOParam * XIOParamPtr;
struct XVolumeParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  UInt32 ioXVersion;
  SInt16 ioVolIndex;
  UInt32 ioVCrDate;
  UInt32 ioVLsMod;
  SInt16 ioVAtrb;
  UInt16 ioVNmFls;
  UInt16 ioVBitMap;
  UInt16 ioAllocPtr;
  UInt16 ioVNmAlBlks;
  UInt32 ioVAlBlkSiz;
  UInt32 ioVClpSiz;
  UInt16 ioAlBlSt;
  UInt32 ioVNxtCNID;
  UInt16 ioVFrBlk;
  UInt16 ioVSigWord;
  SInt16 ioVDrvInfo;
  SInt16 ioVDRefNum;
  SInt16 ioVFSID;
  UInt32 ioVBkUp;
  SInt16 ioVSeqNum;
  UInt32 ioVWrCnt;
  UInt32 ioVFilCnt;
  UInt32 ioVDirCnt;
  SInt32 ioVFndrInfo[8];
  UInt64 ioVTotalBytes;
  UInt64 ioVFreeBytes;
};
typedef struct XVolumeParam XVolumeParam;
typedef XVolumeParam * XVolumeParamPtr;
struct AccessParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioRefNum;
  SInt16 ioDenyModes;
  SInt16 filler4;
  SInt8 filler5;
  SInt8 ioACUser;
  SInt32 filler6;
  SInt32 ioACOwnerID;
  SInt32 ioACGroupID;
  SInt32 ioACAccess;
  SInt32 ioDirID;
};
typedef struct AccessParam AccessParam;
typedef AccessParam * AccessParamPtr;
struct ObjParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt16 filler7;
  SInt16 ioObjType;
  StringPtr ioObjNamePtr;
  SInt32 ioObjID;
};
typedef struct ObjParam ObjParam;
typedef ObjParam * ObjParamPtr;
struct CopyParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSVolumeRefNum ioDstVRefNum;
  SInt16 filler8;
  StringPtr ioNewName;
  StringPtr ioCopyName;
  SInt32 ioNewDirID;
  SInt32 filler14;
  SInt32 filler15;
  SInt32 ioDirID;
};
typedef struct CopyParam CopyParam;
typedef CopyParam * CopyParamPtr;
struct WDParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt16 ioWDCreated;
  SInt16 ioWDIndex;
  SInt32 ioWDProcID;
  FSVolumeRefNum ioWDVRefNum;
  SInt16 filler10;
  SInt32 filler11;
  SInt32 filler12;
  SInt32 filler13;
  SInt32 ioWDDirID;
};
typedef struct WDParam WDParam;
typedef WDParam * WDParamPtr;
struct FIDParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt32 filler14;
  StringPtr ioDestNamePtr;
  SInt32 filler15;
  SInt32 ioDestDirID;
  SInt32 filler16;
  SInt32 filler17;
  SInt32 ioSrcDirID;
  SInt16 filler18;
  SInt32 ioFileID;
};
typedef struct FIDParam FIDParam;
typedef FIDParam * FIDParamPtr;
struct ForeignPrivParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt32 ioFiller21;
  SInt32 ioFiller22;
  Ptr ioForeignPrivBuffer;
  SInt32 ioForeignPrivActCount;
  SInt32 ioForeignPrivReqCount;
  SInt32 ioFiller23;
  SInt32 ioForeignPrivDirID;
  SInt32 ioForeignPrivInfo1;
  SInt32 ioForeignPrivInfo2;
  SInt32 ioForeignPrivInfo3;
  SInt32 ioForeignPrivInfo4;
};
typedef struct ForeignPrivParam ForeignPrivParam;
typedef ForeignPrivParam * ForeignPrivParamPtr;
struct CSParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSSpecPtr ioMatchPtr;
  SInt32 ioReqMatchCount;
  SInt32 ioActMatchCount;
  SInt32 ioSearchBits;
  CInfoPBPtr ioSearchInfo1;
  CInfoPBPtr ioSearchInfo2;
  SInt32 ioSearchTime;
  CatPositionRec ioCatPosition;
  Ptr ioOptBuffer;
  SInt32 ioOptBufSize;
};
typedef struct CSParam CSParam;
typedef CSParam * CSParamPtr;
union HParamBlockRec {
  HIOParam ioParam;
  HFileParam fileParam;
  HVolumeParam volumeParam;
  AccessParam accessParam;
  ObjParam objParam;
  CopyParam copyParam;
  WDParam wdParam;
  FIDParam fidParam;
  CSParam csParam;
  ForeignPrivParam foreignPrivParam;
};
typedef union HParamBlockRec HParamBlockRec;


typedef HParamBlockRec * HParmBlkPtr;

struct CMovePBRec {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt32 filler1;
  StringPtr ioNewName;
  SInt32 filler2;
  SInt32 ioNewDirID;
  SInt32 filler3[2];
  SInt32 ioDirID;
};
typedef struct CMovePBRec CMovePBRec;
typedef CMovePBRec * CMovePBPtr;
struct WDPBRec {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  SInt16 filler1;
  SInt16 ioWDIndex;
  SInt32 ioWDProcID;
  FSVolumeRefNum ioWDVRefNum;
  SInt16 filler2[7];
  SInt32 ioWDDirID;
};
typedef struct WDPBRec WDPBRec;
typedef WDPBRec * WDPBPtr;
struct FCBPBRec {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;
  FSIORefNum ioRefNum;
  SInt16 filler;
  SInt16 ioFCBIndx;
  SInt16 filler1;
  SInt32 ioFCBFlNm;
  SInt16 ioFCBFlags;
  UInt16 ioFCBStBlk;
  SInt32 ioFCBEOF;
  SInt32 ioFCBPLen;
  SInt32 ioFCBCrPs;
  FSVolumeRefNum ioFCBVRefNum;
  SInt32 ioFCBClpSiz;
  SInt32 ioFCBParID;
};
typedef struct FCBPBRec FCBPBRec;
typedef FCBPBRec * FCBPBPtr;
struct VCB {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 vcbFlags;
  UInt16 vcbSigWord;
  UInt32 vcbCrDate;
  UInt32 vcbLsMod;
  SInt16 vcbAtrb;
  UInt16 vcbNmFls;
  SInt16 vcbVBMSt;
  SInt16 vcbAllocPtr;
  UInt16 vcbNmAlBlks;
  SInt32 vcbAlBlkSiz;
  SInt32 vcbClpSiz;
  SInt16 vcbAlBlSt;
  SInt32 vcbNxtCNID;
  UInt16 vcbFreeBks;
  Str27 vcbVN;
  SInt16 vcbDrvNum;
  FSIORefNum vcbDRefNum;
  SInt16 vcbFSID;
  FSVolumeRefNum vcbVRefNum;
  Ptr vcbMAdr;
  Ptr vcbBufAdr;
  SInt16 vcbMLen;
  SInt16 vcbDirIndex;
  SInt16 vcbDirBlk;
  UInt32 vcbVolBkUp;
  UInt16 vcbVSeqNum;
  SInt32 vcbWrCnt;
  SInt32 vcbXTClpSiz;
  SInt32 vcbCTClpSiz;
  UInt16 vcbNmRtDirs;
  SInt32 vcbFilCnt;
  SInt32 vcbDirCnt;
  SInt32 vcbFndrInfo[8];
  UInt16 vcbVCSize;
  UInt16 vcbVBMCSiz;
  UInt16 vcbCtlCSiz;
  UInt16 vcbXTAlBlks;
  UInt16 vcbCTAlBlks;
  SInt16 vcbXTRef;
  SInt16 vcbCTRef;
  Ptr vcbCtlBuf;
  SInt32 vcbDirIDM;
  SInt16 vcbOffsM;
};
typedef struct VCB VCB;
typedef VCB * VCBPtr;
struct DrvQEl {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 dQDrive;
  SInt16 dQRefNum;
  SInt16 dQFSID;
  UInt16 dQDrvSz;
  UInt16 dQDrvSz2;
};
typedef struct DrvQEl DrvQEl;
typedef DrvQEl * DrvQElPtr;
# 1064 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
struct FSPermissionInfo {
  UInt32 userID;
  UInt32 groupID;
  UInt8 reserved1;
  UInt8 userAccess;
  UInt16 mode;
  FSFileSecurityRef fileSec;
};
typedef struct FSPermissionInfo FSPermissionInfo;


typedef UInt32 FSCatalogInfoBitmap;
enum {
  kFSCatInfoNone = 0x00000000,
  kFSCatInfoTextEncoding = 0x00000001,
  kFSCatInfoNodeFlags = 0x00000002,
  kFSCatInfoVolume = 0x00000004,
  kFSCatInfoParentDirID = 0x00000008,
  kFSCatInfoNodeID = 0x00000010,
  kFSCatInfoCreateDate = 0x00000020,
  kFSCatInfoContentMod = 0x00000040,
  kFSCatInfoAttrMod = 0x00000080,
  kFSCatInfoAccessDate = 0x00000100,
  kFSCatInfoBackupDate = 0x00000200,
  kFSCatInfoPermissions = 0x00000400,
  kFSCatInfoFinderInfo = 0x00000800,
  kFSCatInfoFinderXInfo = 0x00001000,
  kFSCatInfoValence = 0x00002000,
  kFSCatInfoDataSizes = 0x00004000,
  kFSCatInfoRsrcSizes = 0x00008000,
  kFSCatInfoSharingFlags = 0x00010000,
  kFSCatInfoUserPrivs = 0x00020000,
  kFSCatInfoUserAccess = 0x00080000,
  kFSCatInfoSetOwnership = 0x00100000,
  kFSCatInfoFSFileSecurityRef = 0x00400000,
  kFSCatInfoAllDates = 0x000003E0,
  kFSCatInfoGettableInfo = 0x0003FFFF,
  kFSCatInfoSettableInfo = 0x00001FE3,
  kFSCatInfoReserved = (long)0xFFFC0000
};


enum {
  kFSNodeLockedBit = 0,
  kFSNodeLockedMask = 0x0001,
  kFSNodeResOpenBit = 2,
  kFSNodeResOpenMask = 0x0004,
  kFSNodeDataOpenBit = 3,
  kFSNodeDataOpenMask = 0x0008,
  kFSNodeIsDirectoryBit = 4,
  kFSNodeIsDirectoryMask = 0x0010,
  kFSNodeCopyProtectBit = 6,
  kFSNodeCopyProtectMask = 0x0040,
  kFSNodeForkOpenBit = 7,
  kFSNodeForkOpenMask = 0x0080,
  kFSNodeHardLinkBit = 8,
  kFSNodeHardLinkMask = 0x00000100
};


enum {
  kFSNodeInSharedBit = 2,
  kFSNodeInSharedMask = 0x0004,
  kFSNodeIsMountedBit = 3,
  kFSNodeIsMountedMask = 0x0008,
  kFSNodeIsSharePointBit = 5,
  kFSNodeIsSharePointMask = 0x0020
};
# 1268 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
struct FSCatalogInfo {
  UInt16 nodeFlags;
  FSVolumeRefNum volume;
  UInt32 parentDirID;
  UInt32 nodeID;
  UInt8 sharingFlags;
  UInt8 userPrivileges;
  UInt8 reserved1;
  UInt8 reserved2;
  UTCDateTime createDate;
  UTCDateTime contentModDate;
  UTCDateTime attributeModDate;
  UTCDateTime accessDate;
  UTCDateTime backupDate;
  UInt32 permissions[4];
  UInt8 finderInfo[16];
  UInt8 extFinderInfo[16];

  UInt64 dataLogicalSize;
  UInt64 dataPhysicalSize;
  UInt64 rsrcLogicalSize;
  UInt64 rsrcPhysicalSize;

  UInt32 valence;
  TextEncoding textEncodingHint;
};
typedef struct FSCatalogInfo FSCatalogInfo;


typedef FSCatalogInfo * FSCatalogInfoPtr;
struct FSRefParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  ConstStringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;

  SInt16 reserved1;
  UInt8 reserved2;
  UInt8 reserved3;

  const FSRef * ref;
  FSCatalogInfoBitmap whichInfo;
  FSCatalogInfo * catInfo;
  UniCharCount nameLength;
  const UniChar * name;
  UInt32 ioDirID;
  FSSpec * spec;
  FSRef * parentRef;
  FSRef * newRef;
  TextEncoding textEncodingHint;
  HFSUniStr255 * outName;
};
typedef struct FSRefParam FSRefParam;
typedef FSRefParam * FSRefParamPtr;

struct FSRefForkIOParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  const FSRef * parentRef;
  UniCharCount nameLength;
  const UniChar * name;
  FSCatalogInfoBitmap whichInfo;
  const FSCatalogInfo * catInfo;
  UniCharCount forkNameLength;
  const UniChar * forkName;
  SInt8 permissions;
  UInt8 reserved1;
  FSIORefNum forkRefNum;
  FSRef * newRef;
};
typedef struct FSRefForkIOParam FSRefForkIOParam;
typedef FSRefForkIOParam * FSRefForkIOParamPtr;
typedef struct OpaqueFSIterator* FSIterator;
enum {
  kFSIterateFlat = 0,
  kFSIterateSubtree = 1,
  kFSIterateDelete = 2,
  kFSIterateReserved = (long)0xFFFFFFFC
};

typedef OptionBits FSIteratorFlags;
struct FSSearchParams {
  Duration searchTime;
  OptionBits searchBits;
  UniCharCount searchNameLength;
  const UniChar * searchName;
  FSCatalogInfo * searchInfo1;
  FSCatalogInfo * searchInfo2;
};
typedef struct FSSearchParams FSSearchParams;
typedef FSSearchParams * FSSearchParamsPtr;
struct FSCatalogBulkParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  Boolean containerChanged;
  UInt8 reserved;

  FSIteratorFlags iteratorFlags;
  FSIterator iterator;
  const FSRef * container;
  ItemCount maximumItems;
  ItemCount actualItems;
  FSCatalogInfoBitmap whichInfo;
  FSCatalogInfo * catalogInfo;
  FSRef * refs;
  FSSpec * specs;
  HFSUniStr255 * names;
  const FSSearchParams * searchParams;
};
typedef struct FSCatalogBulkParam FSCatalogBulkParam;
typedef FSCatalogBulkParam * FSCatalogBulkParamPtr;
typedef UInt16 FSAllocationFlags;
enum {
  kFSAllocDefaultFlags = 0x0000,
  kFSAllocAllOrNothingMask = 0x0001,
  kFSAllocContiguousMask = 0x0002,
  kFSAllocNoRoundUpMask = 0x0004,
  kFSAllocReservedMask = 0xFFF8
};

struct FSForkIOParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  void * reserved1;
  SInt16 reserved2;
  FSIORefNum forkRefNum;
  UInt8 reserved3;
  SInt8 permissions;
  const FSRef * ref;


  Ptr buffer;
  UInt32 requestCount;
  UInt32 actualCount;
  UInt16 positionMode;
  SInt64 positionOffset;

  FSAllocationFlags allocationFlags;
  UInt64 allocationAmount;

  UniCharCount forkNameLength;
  const UniChar * forkName;

  CatPositionRec forkIterator;
  HFSUniStr255 * outForkName;
};
typedef struct FSForkIOParam FSForkIOParam;
typedef FSForkIOParam * FSForkIOParamPtr;
struct FSForkInfo {
  SInt8 flags;
  SInt8 permissions;
  FSVolumeRefNum volume;
  UInt32 reserved2;
  UInt32 nodeID;
  UInt32 forkID;
  UInt64 currentPosition;
  UInt64 logicalEOF;
  UInt64 physicalEOF;
  UInt64 process;
};
typedef struct FSForkInfo FSForkInfo;
typedef FSForkInfo * FSForkInfoPtr;
struct FSForkCBInfoParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  FSIORefNum desiredRefNum;
  FSVolumeRefNum volumeRefNum;
  FSIORefNum iterator;
  FSVolumeRefNum actualRefNum;

  FSRef * ref;
  FSForkInfo * forkInfo;
  HFSUniStr255 * forkName;
};
typedef struct FSForkCBInfoParam FSForkCBInfoParam;
typedef FSForkCBInfoParam * FSForkCBInfoParamPtr;

struct FSRangeLockParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  FSIORefNum forkRefNum;
  UInt64 requestCount;
  UInt16 positionMode;
  SInt64 positionOffset;
  UInt64 rangeStart;

};
typedef struct FSRangeLockParam FSRangeLockParam;
typedef FSRangeLockParam * FSRangeLockParamPtr;
typedef UInt32 FSVolumeInfoBitmap;
enum {
  kFSVolInfoNone = 0x0000,
  kFSVolInfoCreateDate = 0x0001,
  kFSVolInfoModDate = 0x0002,
  kFSVolInfoBackupDate = 0x0004,
  kFSVolInfoCheckedDate = 0x0008,
  kFSVolInfoFileCount = 0x0010,
  kFSVolInfoDirCount = 0x0020,
  kFSVolInfoSizes = 0x0040,
  kFSVolInfoBlocks = 0x0080,
  kFSVolInfoNextAlloc = 0x0100,
  kFSVolInfoRsrcClump = 0x0200,
  kFSVolInfoDataClump = 0x0400,
  kFSVolInfoNextID = 0x0800,
  kFSVolInfoFinderInfo = 0x1000,
  kFSVolInfoFlags = 0x2000,
  kFSVolInfoFSInfo = 0x4000,
  kFSVolInfoDriveInfo = 0x8000,
  kFSVolInfoGettableInfo = 0xFFFF,
  kFSVolInfoSettableInfo = 0x3004
};


enum {
  kFSVolFlagDefaultVolumeBit = 5,
  kFSVolFlagDefaultVolumeMask = 0x0020,
  kFSVolFlagFilesOpenBit = 6,
  kFSVolFlagFilesOpenMask = 0x0040,
  kFSVolFlagHardwareLockedBit = 7,
  kFSVolFlagHardwareLockedMask = 0x0080,
  kFSVolFlagJournalingActiveBit = 14,
  kFSVolFlagJournalingActiveMask = 0x4000,
  kFSVolFlagSoftwareLockedBit = 15,
  kFSVolFlagSoftwareLockedMask = 0x8000
};


struct FSVolumeInfo {

  UTCDateTime createDate;
  UTCDateTime modifyDate;
  UTCDateTime backupDate;
  UTCDateTime checkedDate;


  UInt32 fileCount;
  UInt32 folderCount;


  UInt64 totalBytes;
  UInt64 freeBytes;


  UInt32 blockSize;
  UInt32 totalBlocks;
  UInt32 freeBlocks;
  UInt32 nextAllocation;
  UInt32 rsrcClumpSize;
  UInt32 dataClumpSize;
  UInt32 nextCatalogID;
  UInt8 finderInfo[32];


  UInt16 flags;
  UInt16 filesystemID;
  UInt16 signature;
  UInt16 driveNumber;
  FSIORefNum driverRefNum;
};
typedef struct FSVolumeInfo FSVolumeInfo;
typedef FSVolumeInfo * FSVolumeInfoPtr;
struct FSVolumeInfoParam {
  QElemPtr qLink;
  SInt16 qType;
  SInt16 ioTrap;
  Ptr ioCmdAddr;
  IOCompletionUPP ioCompletion;
  volatile OSErr ioResult;
  StringPtr ioNamePtr;
  FSVolumeRefNum ioVRefNum;

  UInt32 volumeIndex;
  FSVolumeInfoBitmap whichInfo;
  FSVolumeInfo * volumeInfo;
  HFSUniStr255 * volumeName;
  FSRef * ref;
};
typedef struct FSVolumeInfoParam FSVolumeInfoParam;
typedef FSVolumeInfoParam * FSVolumeInfoParamPtr;
struct GetVolParmsInfoBuffer {
  SInt16 vMVersion;
  SInt32 vMAttrib;
  Handle vMLocalHand;
  SInt32 vMServerAdr;

  SInt32 vMVolumeGrade;
  SInt16 vMForeignPrivID;

  SInt32 vMExtendedAttributes;

  void * vMDeviceID;

  UniCharCount vMMaxNameLength;

};
typedef struct GetVolParmsInfoBuffer GetVolParmsInfoBuffer;






typedef OSType VolumeType;
enum {

  AppleShareMediaType = 'afpm'
};




struct VolMountInfoHeader {
  SInt16 length;
  VolumeType media;
};
typedef struct VolMountInfoHeader VolMountInfoHeader;
typedef VolMountInfoHeader * VolMountInfoPtr;




struct VolumeMountInfoHeader {
  SInt16 length;
  VolumeType media;
  SInt16 flags;
};
typedef struct VolumeMountInfoHeader VolumeMountInfoHeader;
typedef VolumeMountInfoHeader * VolumeMountInfoHeaderPtr;

enum {
  volMountNoLoginMsgFlagBit = 0,
  volMountNoLoginMsgFlagMask = 0x0001,
  volMountExtendedFlagsBit = 7,
  volMountExtendedFlagsMask = 0x0080,
  volMountInteractBit = 15,
  volMountInteractMask = 0x8000,
  volMountChangedBit = 14,
  volMountChangedMask = 0x4000,
  volMountFSReservedMask = 0x00FF,
  volMountSysReservedMask = 0xFF00
};



struct AFPVolMountInfo {
  SInt16 length;
  VolumeType media;
  SInt16 flags;
  SInt8 nbpInterval;
  SInt8 nbpCount;
  SInt16 uamType;
  SInt16 zoneNameOffset;
  SInt16 serverNameOffset;
  SInt16 volNameOffset;
  SInt16 userNameOffset;
  SInt16 userPasswordOffset;
  SInt16 volPasswordOffset;
  char AFPData[144];
};
typedef struct AFPVolMountInfo AFPVolMountInfo;
typedef AFPVolMountInfo * AFPVolMountInfoPtr;



struct AFPXVolMountInfo {
  SInt16 length;
  VolumeType media;
  SInt16 flags;
  SInt8 nbpInterval;
  SInt8 nbpCount;
  SInt16 uamType;
  SInt16 zoneNameOffset;
  SInt16 serverNameOffset;
  SInt16 volNameOffset;
  SInt16 userNameOffset;
  SInt16 userPasswordOffset;
  SInt16 volPasswordOffset;
  SInt16 extendedFlags;
  SInt16 uamNameOffset;
  SInt16 alternateAddressOffset;
  char AFPData[176];
};
typedef struct AFPXVolMountInfo AFPXVolMountInfo;
typedef AFPXVolMountInfo * AFPXVolMountInfoPtr;
enum {
  kAFPExtendedFlagsAlternateAddressMask = 1
};


enum {

  kAFPTagTypeIP = 0x01,
  kAFPTagTypeIPPort = 0x02,
  kAFPTagTypeDDP = 0x03,
  kAFPTagTypeDNS = 0x04
};


enum {

  kAFPTagLengthIP = 0x06,
  kAFPTagLengthIPPort = 0x08,
  kAFPTagLengthDDP = 0x06
};

struct AFPTagData {
  UInt8 fLength;
  UInt8 fType;
  UInt8 fData[1];
};
typedef struct AFPTagData AFPTagData;
struct AFPAlternateAddress {

  UInt8 fVersion;
  UInt8 fAddressCount;
  UInt8 fAddressList[1];
};
typedef struct AFPAlternateAddress AFPAlternateAddress;
enum {
  kLargeIconSize = 256,
  kLarge4BitIconSize = 512,
  kLarge8BitIconSize = 1024,
  kSmallIconSize = 64,
  kSmall4BitIconSize = 128,
  kSmall8BitIconSize = 256
};
# 1727 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern IOCompletionUPP
NewIOCompletionUPP(IOCompletionProcPtr userRoutine) ;
# 1738 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
DisposeIOCompletionUPP(IOCompletionUPP userUPP) ;
# 1749 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
InvokeIOCompletionUPP(
  ParmBlkPtr paramBlock,
  IOCompletionUPP userUPP) ;



    inline IOCompletionUPP NewIOCompletionUPP(IOCompletionProcPtr userRoutine) { return userRoutine; }
    inline void DisposeIOCompletionUPP(IOCompletionUPP) { }
    inline void InvokeIOCompletionUPP(ParmBlkPtr paramBlock, IOCompletionUPP userUPP) { (*userUPP)(paramBlock); }
# 1790 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSMakeFSRefUnicode(const FSRef *parentRef, UniCharCount nameLength, const UniChar *name, TextEncoding textEncodingHint, FSRef *newRef) ;
# 1804 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBMakeFSRefUnicodeSync(FSRefParam * paramBlock) ;
# 1818 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBMakeFSRefUnicodeAsync(FSRefParam * paramBlock) ;
# 1843 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCompareFSRefs(const FSRef *ref1, const FSRef *ref2) ;
# 1857 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCompareFSRefsSync(FSRefParam * paramBlock) ;
# 1871 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCompareFSRefsAsync(FSRefParam * paramBlock) ;
# 1900 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCreateFileUnicode(const FSRef *parentRef, UniCharCount nameLength, const UniChar *name, FSCatalogInfoBitmap whichInfo, const FSCatalogInfo *catalogInfo, FSRef *newRef, FSSpec *newSpec) ;
# 1914 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCreateFileUnicodeSync(FSRefParam * paramBlock) ;
# 1928 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCreateFileUnicodeAsync(FSRefParam * paramBlock) ;
# 1958 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCreateDirectoryUnicode(const FSRef *parentRef, UniCharCount nameLength, const UniChar *name, FSCatalogInfoBitmap whichInfo, const FSCatalogInfo *catalogInfo, FSRef *newRef, FSSpec *newSpec, UInt32 *newDirID) ;
# 1972 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCreateDirectoryUnicodeSync(FSRefParam * paramBlock) ;
# 1986 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCreateDirectoryUnicodeAsync(FSRefParam * paramBlock) ;
# 2008 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSDeleteObject(const FSRef * ref) ;
# 2022 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDeleteObjectSync(FSRefParam * paramBlock) ;
# 2036 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBDeleteObjectAsync(FSRefParam * paramBlock) ;
# 2059 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSUnlinkObject(const FSRef * ref) ;
# 2073 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBUnlinkObjectSync(FSRefParam * paramBlock) ;
# 2087 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBUnlinkObjectAsync(FSRefParam * paramBlock) ;
# 2116 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSMoveObject(const FSRef *ref, const FSRef *destDirectory, FSRef *newRef) ;
# 2130 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBMoveObjectSync(FSRefParam * paramBlock) ;
# 2144 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBMoveObjectAsync(FSRefParam * paramBlock) ;
# 2167 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSExchangeObjects(const FSRef *ref, const FSRef *destRef) ;
# 2181 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBExchangeObjectsSync(FSRefParam * paramBlock) ;
# 2195 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBExchangeObjectsAsync(FSRefParam * paramBlock) ;
# 2297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {





  kFSReplaceObjectDefaultOptions = 0,






  kFSReplaceObjectReplaceMetadata = 0x01,







  kFSReplaceObjectSaveOriginalAsABackup = 0x02,




  kFSReplaceObjectReplacePermissionInfo = 0x04,




  kFSReplaceObjectPreservePermissionInfo = 0x08
};
# 2378 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSReplaceObject(const FSRef *originalObject, const FSRef *replacementObject, CFStringRef newName, CFStringRef temporaryName, const FSRef *temporaryDirectory, OptionBits flags, FSRef *resultObject) ;
# 2426 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathReplaceObject(const char *originalObjectPath, const char *replacementObjectPath, CFStringRef newName, CFStringRef temporaryName, const char *temporaryDirectoryPath, OptionBits flags) ;
# 2458 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetTemporaryDirectoryForReplaceObject(const FSRef *originalObject, FSRef *temporaryDirectory, OptionBits flags) ;
# 2494 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathGetTemporaryDirectoryForReplaceObject(const char *originalObjectPath, char *temporaryDirectoryPath, UInt32 maxPathSize, OptionBits flags) ;
# 2525 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSRenameUnicode(const FSRef *ref, UniCharCount nameLength, const UniChar *name, TextEncoding textEncodingHint, FSRef *newRef) ;
# 2539 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBRenameUnicodeSync(FSRefParam * paramBlock) ;
# 2553 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBRenameUnicodeAsync(FSRefParam * paramBlock) ;
# 2582 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetCatalogInfo(const FSRef *ref, FSCatalogInfoBitmap whichInfo, FSCatalogInfo *catalogInfo, HFSUniStr255 *outName, FSSpec *fsSpec, FSRef *parentRef) ;
# 2596 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetCatalogInfoSync(FSRefParam * paramBlock) ;
# 2610 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBGetCatalogInfoAsync(FSRefParam * paramBlock) ;
# 2652 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSSetCatalogInfo(const FSRef *ref, FSCatalogInfoBitmap whichInfo, const FSCatalogInfo *catalogInfo) ;
# 2674 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetCatalogInfoSync(FSRefParam * paramBlock) ;
# 2696 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBSetCatalogInfoAsync(FSRefParam * paramBlock) ;
# 2723 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSOpenIterator(const FSRef *container, FSIteratorFlags iteratorFlags, FSIterator *iterator) ;
# 2737 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBOpenIteratorSync(FSCatalogBulkParam * paramBlock) ;
# 2751 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBOpenIteratorAsync(FSCatalogBulkParam * paramBlock) ;
# 2773 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCloseIterator(FSIterator iterator) ;
# 2787 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCloseIteratorSync(FSCatalogBulkParam * paramBlock) ;
# 2801 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCloseIteratorAsync(FSCatalogBulkParam * paramBlock) ;
# 2834 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetCatalogInfoBulk(FSIterator iterator, ItemCount maximumObjects, ItemCount *actualObjects, Boolean *containerChanged, FSCatalogInfoBitmap whichInfo, FSCatalogInfo *catalogInfos, FSRef *refs, FSSpec *specs, HFSUniStr255 *names) ;
# 2848 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetCatalogInfoBulkSync(FSCatalogBulkParam * paramBlock) ;
# 2862 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBGetCatalogInfoBulkAsync(FSCatalogBulkParam * paramBlock) ;
# 2898 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCatalogSearch(FSIterator iterator, const FSSearchParams *searchCriteria, ItemCount maximumObjects, ItemCount *actualObjects, Boolean *containerChanged, FSCatalogInfoBitmap whichInfo, FSCatalogInfo *catalogInfos, FSRef *refs, FSSpec *specs, HFSUniStr255 *names) ;
# 2912 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCatalogSearchSync(FSCatalogBulkParam * paramBlock) ;
# 2926 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCatalogSearchAsync(FSCatalogBulkParam * paramBlock) ;
# 2958 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCreateFileAndOpenForkUnicode(const FSRef *parentRef, UniCharCount nameLength, const UniChar *name, FSCatalogInfoBitmap whichInfo, const FSCatalogInfo *catalogInfo, UniCharCount forkNameLength, const UniChar *forkName, SInt8 permissions, FSIORefNum *forkRefNum, FSRef *newRef) ;
# 2972 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBCreateFileAndOpenForkUnicodeSync(FSRefForkIOParamPtr paramBlock) ;
# 2986 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCreateFileAndOpenForkUnicodeAsync(FSRefForkIOParamPtr paramBlock) ;
# 3009 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCreateFork(const FSRef *ref, UniCharCount forkNameLength, const UniChar *forkName) ;
# 3023 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCreateForkSync(FSForkIOParam * paramBlock) ;
# 3037 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCreateForkAsync(FSForkIOParam * paramBlock) ;
# 3061 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSDeleteFork(const FSRef *ref, UniCharCount forkNameLength, const UniChar *forkName) ;
# 3075 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDeleteForkSync(FSForkIOParam * paramBlock) ;
# 3089 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBDeleteForkAsync(FSForkIOParam * paramBlock) ;
# 3117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSIterateForks(const FSRef *ref, CatPositionRec *forkIterator, HFSUniStr255 *forkName, SInt64 *forkSize, UInt64 *forkPhysicalSize) ;
# 3131 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBIterateForksSync(FSForkIOParam * paramBlock) ;
# 3145 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBIterateForksAsync(FSForkIOParam * paramBlock) ;
# 3174 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSOpenFork(const FSRef *ref, UniCharCount forkNameLength, const UniChar *forkName, SInt8 permissions, FSIORefNum *forkRefNum) ;
# 3188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBOpenForkSync(FSForkIOParam * paramBlock) ;
# 3202 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBOpenForkAsync(FSForkIOParam * paramBlock) ;
# 3230 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSReadFork(FSIORefNum forkRefNum, UInt16 positionMode, SInt64 positionOffset, ByteCount requestCount, void *buffer, ByteCount *actualCount) ;
# 3244 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBReadForkSync(FSForkIOParam * paramBlock) ;
# 3258 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBReadForkAsync(FSForkIOParam * paramBlock) ;
# 3286 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSWriteFork(FSIORefNum forkRefNum, UInt16 positionMode, SInt64 positionOffset, ByteCount requestCount, const void *buffer, ByteCount *actualCount) ;
# 3300 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBWriteForkSync(FSForkIOParam * paramBlock) ;
# 3314 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBWriteForkAsync(FSForkIOParam * paramBlock) ;
# 3338 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetForkPosition(FSIORefNum forkRefNum, SInt64 *position) ;
# 3352 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetForkPositionSync(FSForkIOParam * paramBlock) ;
# 3366 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBGetForkPositionAsync(FSForkIOParam * paramBlock) ;
# 3391 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSSetForkPosition(FSIORefNum forkRefNum, UInt16 positionMode, SInt64 positionOffset) ;
# 3405 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetForkPositionSync(FSForkIOParam * paramBlock) ;
# 3419 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBSetForkPositionAsync(FSForkIOParam * paramBlock) ;
# 3442 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetForkSize(FSIORefNum forkRefNum, SInt64 *forkSize) ;
# 3456 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetForkSizeSync(FSForkIOParam * paramBlock) ;
# 3470 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBGetForkSizeAsync(FSForkIOParam * paramBlock) ;
# 3495 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSSetForkSize(FSIORefNum forkRefNum, UInt16 positionMode, SInt64 positionOffset) ;
# 3509 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetForkSizeSync(FSForkIOParam * paramBlock) ;
# 3523 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBSetForkSizeAsync(FSForkIOParam * paramBlock) ;
# 3563 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSAllocateFork(FSIORefNum forkRefNum, FSAllocationFlags flags, UInt16 positionMode, SInt64 positionOffset, UInt64 requestCount, UInt64 *actualCount) ;
# 3577 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBAllocateForkSync(FSForkIOParam * paramBlock) ;
# 3591 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBAllocateForkAsync(FSForkIOParam * paramBlock) ;
# 3614 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSFlushFork(FSIORefNum forkRefNum) ;
# 3628 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBFlushForkSync(FSForkIOParam * paramBlock) ;
# 3642 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBFlushForkAsync(FSForkIOParam * paramBlock) ;
# 3665 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSCloseFork(FSIORefNum forkRefNum) ;
# 3679 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCloseForkSync(FSForkIOParam * paramBlock) ;
# 3693 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBCloseForkAsync(FSForkIOParam * paramBlock) ;
# 3731 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetForkCBInfo(FSIORefNum desiredRefNum, FSVolumeRefNum volume, short *iterator, FSIORefNum *actualRefNum, FSForkInfo *forkInfo, FSRef *ref, HFSUniStr255 *outForkName) ;
# 3745 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetForkCBInfoSync(FSForkCBInfoParam * paramBlock) ;
# 3759 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBGetForkCBInfoAsync(FSForkCBInfoParam * paramBlock) ;
# 3785 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSLockRange(FSIORefNum forkRefNum, UInt16 positionMode, SInt64 positionOffset, UInt64 requestCount, UInt64 *rangeStart) ;
# 3799 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBXLockRangeSync(FSRangeLockParamPtr paramBlock) ;
# 3813 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBXLockRangeAsync(FSRangeLockParamPtr paramBlock) ;
# 3839 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSUnlockRange(FSIORefNum forkRefNum, UInt16 positionMode, SInt64 positionOffset, UInt64 requestCount, UInt64 *rangeStart) ;
# 3853 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBXUnlockRangeSync(FSRangeLockParamPtr paramBlock) ;
# 3867 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBXUnlockRangeAsync(FSRangeLockParamPtr paramBlock) ;
# 3898 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetVolumeInfo(FSVolumeRefNum volume, ItemCount volumeIndex, FSVolumeRefNum *actualVolume, FSVolumeInfoBitmap whichInfo, FSVolumeInfo *info, HFSUniStr255 *volumeName, FSRef *rootDirectory) ;
# 3912 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetVolumeInfoSync(FSVolumeInfoParam * paramBlock) ;
# 3926 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBGetVolumeInfoAsync(FSVolumeInfoParam * paramBlock) ;
# 3953 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSSetVolumeInfo(FSVolumeRefNum volume, FSVolumeInfoBitmap whichInfo, const FSVolumeInfo *info) ;
# 3967 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetVolumeInfoSync(FSVolumeInfoParam * paramBlock) ;
# 3981 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBSetVolumeInfoAsync(FSVolumeInfoParam * paramBlock) ;
# 3999 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetDataForkName(HFSUniStr255 * dataForkName) ;
# 4018 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSGetResourceForkName(HFSUniStr255 * resourceForkName) ;
# 4047 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSRefMakePath(const FSRef *ref, UInt8 *path, UInt32 maxPathSize) ;
# 4076 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathMakeRef(const UInt8 *path, FSRef *ref, Boolean *isDirectory) ;
# 4086 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {
  kFSPathMakeRefDefaultOptions = 0,
  kFSPathMakeRefDoNotFollowLeafSymlink = 0x01
};
# 4121 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathMakeRefWithOptions(const UInt8 *path, OptionBits options, FSRef *ref, Boolean *isDirectory) ;
# 4145 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern Boolean FSIsFSRefValid(const FSRef * ref) ;
# 4158 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
typedef UInt32 FNMessage;
enum {
  kFNDirectoryModifiedMessage = 1
};
# 4199 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNNotify(const FSRef *ref, FNMessage message, OptionBits flags) ;
# 4228 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNNotifyByPath(const UInt8 *path, FNMessage message, OptionBits flags) ;
# 4256 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNNotifyAll(FNMessage message, OptionBits flags) ;
# 4271 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
typedef struct OpaqueFNSubscriptionRef* FNSubscriptionRef;





enum {







  kFNNoImplicitAllSubscription = (1 << 0),







  kFNNotifyInBackground = (1 << 1)
};
# 4318 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
typedef void ( * FNSubscriptionProcPtr)(FNMessage message, OptionBits flags, void *refcon, FNSubscriptionRef subscription);
typedef FNSubscriptionProcPtr FNSubscriptionUPP;
# 4328 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FNSubscriptionUPP
NewFNSubscriptionUPP(FNSubscriptionProcPtr userRoutine) ;
# 4339 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
DisposeFNSubscriptionUPP(FNSubscriptionUPP userUPP) ;
# 4350 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
InvokeFNSubscriptionUPP(
  FNMessage message,
  OptionBits flags,
  void * refcon,
  FNSubscriptionRef subscription,
  FNSubscriptionUPP userUPP) ;



    inline FNSubscriptionUPP NewFNSubscriptionUPP(FNSubscriptionProcPtr userRoutine) { return userRoutine; }
    inline void DisposeFNSubscriptionUPP(FNSubscriptionUPP) { }
    inline void InvokeFNSubscriptionUPP(FNMessage message, OptionBits flags, void * refcon, FNSubscriptionRef subscription, FNSubscriptionUPP userUPP) { (*userUPP)(message, flags, refcon, subscription); }
# 4402 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNSubscribe(const FSRef *directoryRef, FNSubscriptionUPP callback, void *refcon, OptionBits flags, FNSubscriptionRef *subscription) ;
# 4437 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNSubscribeByPath(const UInt8 *directoryPath, FNSubscriptionUPP callback, void *refcon, OptionBits flags, FNSubscriptionRef *subscription) ;
# 4460 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNUnsubscribe(FNSubscriptionRef subscription) ;
# 4490 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FNGetDirectoryForSubscription(FNSubscriptionRef subscription, FSRef *ref) ;




enum {
  kAsyncMountInProgress = 1,
  kAsyncMountComplete = 2,
  kAsyncUnmountInProgress = 3,
  kAsyncUnmountComplete = 4,
  kAsyncEjectInProgress = 5,
  kAsyncEjectComplete = 6
};


typedef UInt32 FSMountStatus;
typedef UInt32 FSEjectStatus;
typedef UInt32 FSUnmountStatus;
typedef struct OpaqueFSVolumeOperation* FSVolumeOperation;
typedef void ( * FSVolumeMountProcPtr)(FSVolumeOperation volumeOp, void *clientData, OSStatus err, FSVolumeRefNum mountedVolumeRefNum);
typedef void ( * FSVolumeUnmountProcPtr)(FSVolumeOperation volumeOp, void *clientData, OSStatus err, FSVolumeRefNum volumeRefNum, pid_t dissenter);
typedef void ( * FSVolumeEjectProcPtr)(FSVolumeOperation volumeOp, void *clientData, OSStatus err, FSVolumeRefNum volumeRefNum, pid_t dissenter);
typedef FSVolumeMountProcPtr FSVolumeMountUPP;
typedef FSVolumeUnmountProcPtr FSVolumeUnmountUPP;
typedef FSVolumeEjectProcPtr FSVolumeEjectUPP;
# 4523 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSVolumeMountUPP
NewFSVolumeMountUPP(FSVolumeMountProcPtr userRoutine) ;
# 4534 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSVolumeUnmountUPP
NewFSVolumeUnmountUPP(FSVolumeUnmountProcPtr userRoutine) ;
# 4545 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSVolumeEjectUPP
NewFSVolumeEjectUPP(FSVolumeEjectProcPtr userRoutine) ;
# 4556 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
DisposeFSVolumeMountUPP(FSVolumeMountUPP userUPP) ;
# 4567 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
DisposeFSVolumeUnmountUPP(FSVolumeUnmountUPP userUPP) ;
# 4578 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
DisposeFSVolumeEjectUPP(FSVolumeEjectUPP userUPP) ;
# 4589 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
InvokeFSVolumeMountUPP(
  FSVolumeOperation volumeOp,
  void * clientData,
  OSStatus err,
  FSVolumeRefNum mountedVolumeRefNum,
  FSVolumeMountUPP userUPP) ;
# 4605 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
InvokeFSVolumeUnmountUPP(
  FSVolumeOperation volumeOp,
  void * clientData,
  OSStatus err,
  FSVolumeRefNum volumeRefNum,
  pid_t dissenter,
  FSVolumeUnmountUPP userUPP) ;
# 4622 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void
InvokeFSVolumeEjectUPP(
  FSVolumeOperation volumeOp,
  void * clientData,
  OSStatus err,
  FSVolumeRefNum volumeRefNum,
  pid_t dissenter,
  FSVolumeEjectUPP userUPP) ;



    inline FSVolumeMountUPP NewFSVolumeMountUPP(FSVolumeMountProcPtr userRoutine) { return userRoutine; }
    inline FSVolumeUnmountUPP NewFSVolumeUnmountUPP(FSVolumeUnmountProcPtr userRoutine) { return userRoutine; }
    inline FSVolumeEjectUPP NewFSVolumeEjectUPP(FSVolumeEjectProcPtr userRoutine) { return userRoutine; }
    inline void DisposeFSVolumeMountUPP(FSVolumeMountUPP) { }
    inline void DisposeFSVolumeUnmountUPP(FSVolumeUnmountUPP) { }
    inline void DisposeFSVolumeEjectUPP(FSVolumeEjectUPP) { }
    inline void InvokeFSVolumeMountUPP(FSVolumeOperation volumeOp, void * clientData, OSStatus err, FSVolumeRefNum mountedVolumeRefNum, FSVolumeMountUPP userUPP) { (*userUPP)(volumeOp, clientData, err, mountedVolumeRefNum); }
    inline void InvokeFSVolumeUnmountUPP(FSVolumeOperation volumeOp, void * clientData, OSStatus err, FSVolumeRefNum volumeRefNum, pid_t dissenter, FSVolumeUnmountUPP userUPP) { (*userUPP)(volumeOp, clientData, err, volumeRefNum, dissenter); }
    inline void InvokeFSVolumeEjectUPP(FSVolumeOperation volumeOp, void * clientData, OSStatus err, FSVolumeRefNum volumeRefNum, pid_t dissenter, FSVolumeEjectUPP userUPP) { (*userUPP)(volumeOp, clientData, err, volumeRefNum, dissenter); }
# 4661 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {





  kFSMountServerMarkDoNotDisplay = (1 << 0),





  kFSMountServerMountWithoutNotification = (1 << 1),





  kFSMountServerMountOnMountDir = (1 << 2)
};






enum {
# 4697 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
  kFSEjectVolumeForceEject = (1 << 0)
};






enum {
# 4715 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
  kFSUnmountVolumeForceUnmount = (1 << 0)
};
# 4740 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCreateVolumeOperation(FSVolumeOperation * volumeOp) ;
# 4763 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSDisposeVolumeOperation(FSVolumeOperation volumeOp) ;
# 4796 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMountLocalVolumeSync(CFStringRef diskID, CFURLRef mountDir, FSVolumeRefNum *mountedVolumeRefNum, OptionBits flags) ;
# 4844 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMountLocalVolumeAsync(CFStringRef diskID, CFURLRef mountDir, FSVolumeOperation volumeOp, void *clientData, OptionBits flags, FSVolumeMountUPP callback, CFRunLoopRef runloop, CFStringRef runloopMode) ;
# 4886 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMountServerVolumeSync(CFURLRef url, CFURLRef mountDir, CFStringRef user, CFStringRef password, FSVolumeRefNum *mountedVolumeRefNum, OptionBits flags) ;
# 4943 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMountServerVolumeAsync(CFURLRef url, CFURLRef mountDir, CFStringRef user, CFStringRef password, FSVolumeOperation volumeOp, void *clientData, OptionBits flags, FSVolumeMountUPP callback, CFRunLoopRef runloop, CFStringRef runloopMode) ;
# 4986 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetAsyncMountStatus(FSVolumeOperation volumeOp, FSMountStatus *status, OSStatus *volumeOpStatus, FSVolumeRefNum *mountedVolumeRefNum, void **clientData) ;
# 5019 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSUnmountVolumeSync(FSVolumeRefNum vRefNum, OptionBits flags, pid_t *dissenter) ;
# 5063 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSUnmountVolumeAsync(FSVolumeRefNum vRefNum, OptionBits flags, FSVolumeOperation volumeOp, void *clientData, FSVolumeUnmountUPP callback, CFRunLoopRef runloop, CFStringRef runloopMode) ;
# 5105 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetAsyncUnmountStatus(FSVolumeOperation volumeOp, FSUnmountStatus *status, OSStatus *volumeOpStatus, FSVolumeRefNum *volumeRefNum, pid_t *dissenter, void **clientData) ;
# 5129 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCancelVolumeOperation(FSVolumeOperation volumeOp) ;
# 5162 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSEjectVolumeSync(FSVolumeRefNum vRefNum, OptionBits flags, pid_t *dissenter) ;
# 5206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSEjectVolumeAsync(FSVolumeRefNum vRefNum, OptionBits flags, FSVolumeOperation volumeOp, void *clientData, FSVolumeEjectUPP callback, CFRunLoopRef runloop, CFStringRef runloopMode) ;
# 5248 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetAsyncEjectStatus(FSVolumeOperation volumeOp, FSEjectStatus *status, OSStatus *volumeOpStatus, FSVolumeRefNum *volumeRefNum, pid_t *dissenter, void **clientData) ;
# 5275 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCopyDiskIDForVolume(FSVolumeRefNum vRefNum, CFStringRef *diskID) ;
# 5301 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCopyURLForVolume(FSVolumeRefNum vRefNum, CFURLRef *url) ;
# 5326 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetVolumeForDiskID(CFStringRef diskID, FSVolumeRefNum *vRefNum) ;
# 5353 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCopyDADiskForVolume(FSVolumeRefNum vRefNum, DADiskRef *disk) ;
# 5379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetVolumeForDADisk(DADiskRef disk, FSVolumeRefNum *vRefNum) ;




typedef struct __FSFileOperation* FSFileOperationRef;
typedef UInt32 FSFileOperationStage;
# 5394 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
struct FSFileOperationClientContext {






  CFIndex version;





  void * info;
# 5416 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
  CFAllocatorRetainCallBack retain;





  CFAllocatorReleaseCallBack release;







  CFAllocatorCopyDescriptionCallBack copyDescription;
};
typedef struct FSFileOperationClientContext FSFileOperationClientContext;
# 5469 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
typedef void ( * FSFileOperationStatusProcPtr)(FSFileOperationRef fileOp, const FSRef *currentItem, FSFileOperationStage stage, OSStatus error, CFDictionaryRef statusDictionary, void *info);
# 5508 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
typedef void ( * FSPathFileOperationStatusProcPtr)(FSFileOperationRef fileOp, const char *currentItem, FSFileOperationStage stage, OSStatus error, CFDictionaryRef statusDictionary, void *info);
# 5517 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {





  kFSFileOperationDefaultOptions = 0,





  kFSFileOperationOverwrite = 0x01,





  kFSFileOperationSkipSourcePermissionErrors = 0x02,





  kFSFileOperationDoNotMoveAcrossVolumes = 0x04,






  kFSFileOperationSkipPreflight = 0x08
};
# 5560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
enum {




  kFSOperationStageUndefined = 0,





  kFSOperationStagePreflighting = 1,




  kFSOperationStageRunning = 2,




  kFSOperationStageComplete = 3
};
# 5600 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationTotalBytesKey ;
# 5616 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationBytesCompleteKey ;
# 5632 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationBytesRemainingKey ;
# 5648 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationTotalObjectsKey ;
# 5664 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationObjectsCompleteKey ;
# 5680 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationObjectsRemainingKey ;
# 5698 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationTotalUserVisibleObjectsKey ;
# 5716 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationUserVisibleObjectsCompleteKey ;
# 5734 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationUserVisibleObjectsRemainingKey ;
# 5748 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern const CFStringRef kFSOperationThroughputKey ;
# 5784 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCopyObjectSync(const FSRef *source, const FSRef *destDir, CFStringRef destName, FSRef *target, OptionBits options) ;
# 5827 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMoveObjectSync(const FSRef *source, const FSRef *destDir, CFStringRef destName, FSRef *target, OptionBits options) ;
# 5861 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMoveObjectToTrashSync(const FSRef *source, FSRef *target, OptionBits options) ;
# 5900 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathCopyObjectSync(const char *sourcePath, const char *destDirPath, CFStringRef destName, char **targetPath, OptionBits options) ;
# 5944 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathMoveObjectSync(const char *sourcePath, const char *destDirPath, CFStringRef destName, char **targetPath, OptionBits options) ;
# 5979 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathMoveObjectToTrashSync(const char *sourcePath, char **targetPath, OptionBits options) ;
# 5999 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern CFTypeID FSFileOperationGetTypeID(void) ;
# 6026 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSFileOperationRef FSFileOperationCreate(CFAllocatorRef alloc) ;
# 6058 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileOperationScheduleWithRunLoop(FSFileOperationRef fileOp, CFRunLoopRef runLoop, CFStringRef runLoopMode) ;
# 6089 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileOperationUnscheduleFromRunLoop(FSFileOperationRef fileOp, CFRunLoopRef runLoop, CFStringRef runLoopMode) ;
# 6142 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSCopyObjectAsync(FSFileOperationRef fileOp, const FSRef *source, const FSRef *destDir, CFStringRef destName, OptionBits flags, FSFileOperationStatusProcPtr callback, CFTimeInterval statusChangeInterval, FSFileOperationClientContext *clientContext) ;
# 6198 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMoveObjectAsync(FSFileOperationRef fileOp, const FSRef *source, const FSRef *destDir, CFStringRef destName, OptionBits flags, FSFileOperationStatusProcPtr callback, CFTimeInterval statusChangeInterval, FSFileOperationClientContext *clientContext) ;
# 6247 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSMoveObjectToTrashAsync(FSFileOperationRef fileOp, const FSRef *source, OptionBits flags, FSFileOperationStatusProcPtr callback, CFTimeInterval statusChangeInterval, FSFileOperationClientContext *clientContext) ;
# 6300 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathCopyObjectAsync(FSFileOperationRef fileOp, const char *sourcePath, const char *destDirPath, CFStringRef destName, OptionBits flags, FSPathFileOperationStatusProcPtr callback, CFTimeInterval statusChangeInterval, FSFileOperationClientContext *clientContext) ;
# 6356 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathMoveObjectAsync(FSFileOperationRef fileOp, const char *sourcePath, const char *destDirPath, CFStringRef destName, OptionBits flags, FSPathFileOperationStatusProcPtr callback, CFTimeInterval statusChangeInterval, FSFileOperationClientContext *clientContext) ;
# 6406 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathMoveObjectToTrashAsync(FSFileOperationRef fileOp, const char *sourcePath, OptionBits flags, FSPathFileOperationStatusProcPtr callback, CFTimeInterval statusChangeInterval, FSFileOperationClientContext *clientContext) ;
# 6429 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileOperationCancel(FSFileOperationRef fileOp) ;
# 6473 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileOperationCopyStatus(FSFileOperationRef fileOp, FSRef *currentItem, FSFileOperationStage *stage, OSStatus *error, CFDictionaryRef *statusDictionary, void **info) ;
# 6518 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSPathFileOperationCopyStatus(FSFileOperationRef fileOp, char **currentItem, FSFileOperationStage *stage, OSStatus *error, CFDictionaryRef *statusDictionary, void **info) ;
# 6547 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern CFStringRef FSCreateStringFromHFSUniStr(CFAllocatorRef alloc, const HFSUniStr255 *uniStr) ;
# 6573 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetHFSUniStrFromString(CFStringRef theString, HFSUniStr255 *uniStr) ;
# 6595 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern CFTypeID FSFileSecurityGetTypeID(void) ;
# 6622 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSFileSecurityRef FSFileSecurityCreate(CFAllocatorRef alloc) ;
# 6636 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSFileSecurityRef FSFileSecurityCreateWithFSPermissionInfo(CFAllocatorRef alloc, const FSPermissionInfo *permissions) ;
# 6650 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern FSFileSecurityRef FSFileSecurityRefCreateCopy(CFAllocatorRef alloc, FSFileSecurityRef fileSec) ;
# 6681 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecurityGetOwnerUUID(FSFileSecurityRef fileSec, CFUUIDBytes *owner) ;
# 6708 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecuritySetOwnerUUID(FSFileSecurityRef fileSec, const CFUUIDBytes *owner) ;
# 6737 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecurityGetGroupUUID(FSFileSecurityRef fileSec, CFUUIDBytes *group) ;
# 6764 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecuritySetGroupUUID(FSFileSecurityRef fileSec, const CFUUIDBytes *group) ;
# 6795 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecurityCopyAccessControlList(FSFileSecurityRef fileSec, acl_t *accessControlList) ;
# 6825 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecuritySetAccessControlList(FSFileSecurityRef fileSec, acl_t accessControlList) ;
# 6854 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecurityGetOwner(FSFileSecurityRef fileSec, UInt32 *owner) ;
# 6880 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecuritySetOwner(FSFileSecurityRef fileSec, UInt32 owner) ;
# 6908 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecurityGetGroup(FSFileSecurityRef fileSec, UInt32 *group) ;
# 6934 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecuritySetGroup(FSFileSecurityRef fileSec, UInt32 group) ;
# 6962 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecurityGetMode(FSFileSecurityRef fileSec, UInt16 *mode) ;
# 6988 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFileSecuritySetMode(FSFileSecurityRef fileSec, UInt16 mode) ;



enum {

  pleaseCacheBit = 4,
  pleaseCacheMask = 0x0010,
  noCacheBit = 5,
  noCacheMask = 0x0020,
  rdVerifyBit = 6,
  rdVerifyMask = 0x0040,
  rdVerify = 64,
  forceReadBit = 6,
  forceReadMask = 0x0040,
  newLineBit = 7,
  newLineMask = 0x0080,
  newLineCharMask = 0xFF00
};



enum {
  kOwnerID2Name = 1,
  kGroupID2Name = 2,
  kOwnerName2ID = 3,
  kGroupName2ID = 4,
  kReturnNextUser = 1,
  kReturnNextGroup = 2,
  kReturnNextUG = 3
};


enum {
  kVCBFlagsIdleFlushBit = 3,
  kVCBFlagsIdleFlushMask = 0x0008,
  kVCBFlagsHFSPlusAPIsBit = 4,
  kVCBFlagsHFSPlusAPIsMask = 0x0010,
  kVCBFlagsHardwareGoneBit = 5,
  kVCBFlagsHardwareGoneMask = 0x0020,
  kVCBFlagsVolumeDirtyBit = 15,
  kVCBFlagsVolumeDirtyMask = 0x8000
};


enum {
  kioVAtrbDefaultVolumeBit = 5,
  kioVAtrbDefaultVolumeMask = 0x0020,
  kioVAtrbFilesOpenBit = 6,
  kioVAtrbFilesOpenMask = 0x0040,
  kioVAtrbHardwareLockedBit = 7,
  kioVAtrbHardwareLockedMask = 0x0080,
  kioVAtrbSoftwareLockedBit = 15,
  kioVAtrbSoftwareLockedMask = 0x8000
};


enum {

  kioFlAttribLockedBit = 0,
  kioFlAttribLockedMask = 0x01,
  kioFlAttribResOpenBit = 2,
  kioFlAttribResOpenMask = 0x04,
  kioFlAttribDataOpenBit = 3,
  kioFlAttribDataOpenMask = 0x08,
  kioFlAttribDirBit = 4,
  kioFlAttribDirMask = 0x10,
  ioDirFlg = 4,
  ioDirMask = 0x10,
  kioFlAttribCopyProtBit = 6,
  kioFlAttribCopyProtMask = 0x40,
  kioFlAttribFileOpenBit = 7,
  kioFlAttribFileOpenMask = 0x80,
  kioFlAttribInSharedBit = 2,
  kioFlAttribInSharedMask = 0x04,
  kioFlAttribMountedBit = 3,
  kioFlAttribMountedMask = 0x08,
  kioFlAttribSharePointBit = 5,
  kioFlAttribSharePointMask = 0x20
};


enum {
  kioFCBWriteBit = 8,
  kioFCBWriteMask = 0x0100,
  kioFCBResourceBit = 9,
  kioFCBResourceMask = 0x0200,
  kioFCBWriteLockedBit = 10,
  kioFCBWriteLockedMask = 0x0400,
  kioFCBLargeFileBit = 11,
  kioFCBLargeFileMask = 0x0800,
  kioFCBSharedWriteBit = 12,
  kioFCBSharedWriteMask = 0x1000,
  kioFCBFileLockedBit = 13,
  kioFCBFileLockedMask = 0x2000,
  kioFCBOwnClumpBit = 14,
  kioFCBOwnClumpMask = 0x4000,
  kioFCBModifiedBit = 15,
  kioFCBModifiedMask = 0x8000
};



enum {
  kioACUserNoSeeFolderBit = 0,
  kioACUserNoSeeFolderMask = 0x01,
  kioACUserNoSeeFilesBit = 1,
  kioACUserNoSeeFilesMask = 0x02,
  kioACUserNoMakeChangesBit = 2,
  kioACUserNoMakeChangesMask = 0x04,
  kioACUserNotOwnerBit = 7,
  kioACUserNotOwnerMask = 0x80
};


enum {
  kioACAccessOwnerBit = 31,
  kioACAccessOwnerMask = (long)0x80000000,
  kioACAccessBlankAccessBit = 28,
  kioACAccessBlankAccessMask = 0x10000000,
  kioACAccessUserWriteBit = 26,
  kioACAccessUserWriteMask = 0x04000000,
  kioACAccessUserReadBit = 25,
  kioACAccessUserReadMask = 0x02000000,
  kioACAccessUserSearchBit = 24,
  kioACAccessUserSearchMask = 0x01000000,
  kioACAccessEveryoneWriteBit = 18,
  kioACAccessEveryoneWriteMask = 0x00040000,
  kioACAccessEveryoneReadBit = 17,
  kioACAccessEveryoneReadMask = 0x00020000,
  kioACAccessEveryoneSearchBit = 16,
  kioACAccessEveryoneSearchMask = 0x00010000,
  kioACAccessGroupWriteBit = 10,
  kioACAccessGroupWriteMask = 0x00000400,
  kioACAccessGroupReadBit = 9,
  kioACAccessGroupReadMask = 0x00000200,
  kioACAccessGroupSearchBit = 8,
  kioACAccessGroupSearchMask = 0x00000100,
  kioACAccessOwnerWriteBit = 2,
  kioACAccessOwnerWriteMask = 0x00000004,
  kioACAccessOwnerReadBit = 1,
  kioACAccessOwnerReadMask = 0x00000002,
  kioACAccessOwnerSearchBit = 0,
  kioACAccessOwnerSearchMask = 0x00000001,
  kfullPrivileges = 0x00070007,
  kownerPrivileges = 0x00000007
};
# 7164 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetVolumeParms(FSVolumeRefNum volume, GetVolParmsInfoBuffer *buffer, ByteCount bufferSize) ;
# 7191 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetVolumeMountInfoSize(FSVolumeRefNum volume, ByteCount *size) ;
# 7225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSGetVolumeMountInfo(FSVolumeRefNum volume, BytePtr buffer, ByteCount bufferSize, ByteCount *actualSize) ;
# 7251 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSVolumeMount(BytePtr buffer, FSVolumeRefNum *mountedVolume) ;
# 7266 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSFlushVolume(FSVolumeRefNum vRefNum) ;
# 7280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBFlushVolumeSync(FSRefParamPtr paramBlock) ;
# 7294 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBFlushVolumeAsync(FSRefParamPtr paramBlock) ;
# 7321 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBFSCopyFileSync(FSRefParamPtr paramBlock) ;
# 7335 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBFSCopyFileAsync(FSRefParamPtr paramBlock) ;
# 7365 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus FSResolveNodeID(FSVolumeRefNum volume, UInt32 nodeID, FSRefPtr newRef) ;
# 7386 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBFSResolveNodeIDSync(FSRefParamPtr paramBlock) ;
# 7400 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSStatus PBFSResolveNodeIDAsync(FSRefParamPtr paramBlock) ;
# 7429 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FSpMakeFSRef(const FSSpec *source, FSRef *newRef) ;
# 7444 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBMakeFSRefSync(FSRefParam * paramBlock) ;
# 7459 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern void PBMakeFSRefAsync(FSRefParam * paramBlock) ;
# 7471 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCloseSync(ParmBlkPtr paramBlock) ;
# 7483 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCloseAsync(ParmBlkPtr paramBlock) ;
# 7495 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBReadSync(ParmBlkPtr paramBlock) ;
# 7507 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBReadAsync(ParmBlkPtr paramBlock) ;
# 7519 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBWriteSync(ParmBlkPtr paramBlock) ;
# 7531 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBWriteAsync(ParmBlkPtr paramBlock) ;
# 7543 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBWaitIOComplete(ParmBlkPtr paramBlock, Duration timeout) ;
# 7559 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetVolParmsSync(HParmBlkPtr paramBlock) ;
# 7574 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetVolParmsAsync(HParmBlkPtr paramBlock) ;
# 7590 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetVolMountInfoSize(ParmBlkPtr paramBlock) ;
# 7605 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetVolMountInfo(ParmBlkPtr paramBlock) ;
# 7617 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBVolumeMount(ParmBlkPtr paramBlock) ;
# 7633 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr FlushVol(ConstStr63Param volName, FSVolumeRefNum vRefNum) ;
# 7648 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBFlushVolSync(ParmBlkPtr paramBlock) ;
# 7663 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBFlushVolAsync(ParmBlkPtr paramBlock) ;
# 7678 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenDenySync(HParmBlkPtr paramBlock) ;
# 7693 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenDenyAsync(HParmBlkPtr paramBlock) ;
# 7708 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenRFDenySync(HParmBlkPtr paramBlock) ;
# 7723 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenRFDenyAsync(HParmBlkPtr paramBlock) ;
# 7738 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetDirAccessSync(HParmBlkPtr paramBlock) ;
# 7753 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetDirAccessAsync(HParmBlkPtr paramBlock) ;
# 7768 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetDirAccessSync(HParmBlkPtr paramBlock) ;
# 7783 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetDirAccessAsync(HParmBlkPtr paramBlock) ;
# 7798 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHMapIDSync(HParmBlkPtr paramBlock) ;
# 7813 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHMapIDAsync(HParmBlkPtr paramBlock) ;
# 7828 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHMapNameSync(HParmBlkPtr paramBlock) ;
# 7843 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHMapNameAsync(HParmBlkPtr paramBlock) ;
# 7858 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHCopyFileSync(HParmBlkPtr paramBlock) ;
# 7873 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHCopyFileAsync(HParmBlkPtr paramBlock) ;
# 7888 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCreateFileIDRefSync(HParmBlkPtr paramBlock) ;
# 7903 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCreateFileIDRefAsync(HParmBlkPtr paramBlock) ;
# 7918 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBResolveFileIDRefSync(HParmBlkPtr paramBlock) ;
# 7933 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBResolveFileIDRefAsync(HParmBlkPtr paramBlock) ;
# 7948 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDeleteFileIDRefSync(HParmBlkPtr paramBlock) ;
# 7963 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDeleteFileIDRefAsync(HParmBlkPtr paramBlock) ;
# 7978 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBXGetVolInfoSync(XVolumeParamPtr paramBlock) ;
# 7993 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBXGetVolInfoAsync(XVolumeParamPtr paramBlock) ;
# 8008 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBAllocateSync(ParmBlkPtr paramBlock) ;
# 8023 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBAllocateAsync(ParmBlkPtr paramBlock) ;
# 8038 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetEOFSync(ParmBlkPtr paramBlock) ;
# 8053 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetEOFAsync(ParmBlkPtr paramBlock) ;
# 8068 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetEOFSync(ParmBlkPtr paramBlock) ;
# 8083 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetEOFAsync(ParmBlkPtr paramBlock) ;
# 8098 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetFPosSync(ParmBlkPtr paramBlock) ;
# 8113 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetFPosAsync(ParmBlkPtr paramBlock) ;
# 8128 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetFPosSync(ParmBlkPtr paramBlock) ;
# 8143 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetFPosAsync(ParmBlkPtr paramBlock) ;
# 8158 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBFlushFileSync(ParmBlkPtr paramBlock) ;
# 8173 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBFlushFileAsync(ParmBlkPtr paramBlock) ;
# 8188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBUnmountVol(ParmBlkPtr paramBlock) ;
# 8203 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCatSearchSync(CSParamPtr paramBlock) ;
# 8218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCatSearchAsync(CSParamPtr paramBlock) ;
# 8233 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
UnmountVol(
  ConstStr63Param volName,
  FSVolumeRefNum vRefNum) ;
# 8251 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HSetVol(
  ConstStr63Param volName,
  FSVolumeRefNum vRefNum,
  SInt32 dirID) ;
# 8272 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSClose(FSIORefNum refNum) ;
# 8288 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSRead(
  FSIORefNum refNum,
  SInt32 * count,
  void * buffPtr) ;
# 8307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSWrite(
  FSIORefNum refNum,
  SInt32 * count,
  const void * buffPtr) ;
# 8326 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
Allocate(
  FSIORefNum refNum,
  SInt32 * count) ;
# 8344 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
GetEOF(
  FSIORefNum refNum,
  SInt32 * logEOF) ;
# 8362 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
SetEOF(
  FSIORefNum refNum,
  SInt32 logEOF) ;
# 8380 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
GetFPos(
  FSIORefNum refNum,
  SInt32 * filePos) ;
# 8398 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
SetFPos(
  FSIORefNum refNum,
  SInt16 posMode,
  SInt32 posOff) ;
# 8417 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
GetVRefNum(
  FSIORefNum fileRefNum,
  FSVolumeRefNum * vRefNum) ;
# 8435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
PBLockRangeSync(ParmBlkPtr paramBlock) ;
# 8451 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
PBLockRangeAsync(ParmBlkPtr paramBlock) ;
# 8467 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
PBUnlockRangeSync(ParmBlkPtr paramBlock) ;
# 8483 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
PBUnlockRangeAsync(ParmBlkPtr paramBlock) ;
# 8499 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetVolSync(WDPBPtr paramBlock) ;
# 8514 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetVolAsync(WDPBPtr paramBlock) ;
# 8529 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetVolSync(WDPBPtr paramBlock) ;
# 8544 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetVolAsync(WDPBPtr paramBlock) ;
# 8559 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCatMoveSync(CMovePBPtr paramBlock) ;
# 8574 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBCatMoveAsync(CMovePBPtr paramBlock) ;
# 8589 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDirCreateSync(HParmBlkPtr paramBlock) ;
# 8604 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDirCreateAsync(HParmBlkPtr paramBlock) ;
# 8619 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetFCBInfoSync(FCBPBPtr paramBlock) ;
# 8634 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetFCBInfoAsync(FCBPBPtr paramBlock) ;
# 8649 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetCatInfoSync(CInfoPBPtr paramBlock) ;
# 8664 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetCatInfoAsync(CInfoPBPtr paramBlock) ;
# 8679 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetCatInfoSync(CInfoPBPtr paramBlock) ;
# 8694 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetCatInfoAsync(CInfoPBPtr paramBlock) ;
# 8709 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBAllocContigSync(ParmBlkPtr paramBlock) ;
# 8724 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBAllocContigAsync(ParmBlkPtr paramBlock) ;
# 8739 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetVInfoSync(HParmBlkPtr paramBlock) ;
# 8754 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetVInfoAsync(HParmBlkPtr paramBlock) ;
# 8769 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetVInfoSync(HParmBlkPtr paramBlock) ;
# 8784 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetVInfoAsync(HParmBlkPtr paramBlock) ;
# 8799 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenSync(HParmBlkPtr paramBlock) ;
# 8814 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenAsync(HParmBlkPtr paramBlock) ;
# 8829 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenRFSync(HParmBlkPtr paramBlock) ;
# 8844 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenRFAsync(HParmBlkPtr paramBlock) ;
# 8859 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenDFSync(HParmBlkPtr paramBlock) ;
# 8874 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHOpenDFAsync(HParmBlkPtr paramBlock) ;
# 8889 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHCreateSync(HParmBlkPtr paramBlock) ;
# 8904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHCreateAsync(HParmBlkPtr paramBlock) ;
# 8919 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHDeleteSync(HParmBlkPtr paramBlock) ;
# 8934 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHDeleteAsync(HParmBlkPtr paramBlock) ;
# 8949 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHRenameSync(HParmBlkPtr paramBlock) ;
# 8964 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHRenameAsync(HParmBlkPtr paramBlock) ;
# 8979 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHRstFLockSync(HParmBlkPtr paramBlock) ;
# 8994 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHRstFLockAsync(HParmBlkPtr paramBlock) ;
# 9009 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetFLockSync(HParmBlkPtr paramBlock) ;
# 9024 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetFLockAsync(HParmBlkPtr paramBlock) ;
# 9039 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetFInfoSync(HParmBlkPtr paramBlock) ;
# 9054 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetFInfoAsync(HParmBlkPtr paramBlock) ;
# 9069 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetFInfoSync(HParmBlkPtr paramBlock) ;
# 9084 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHSetFInfoAsync(HParmBlkPtr paramBlock) ;
# 9099 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBMakeFSSpecSync(HParmBlkPtr paramBlock) ;
# 9114 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBMakeFSSpecAsync(HParmBlkPtr paramBlock) ;
# 9129 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HGetVol(
  StringPtr volName,
  FSVolumeRefNum * vRefNum,
  SInt32 * dirID) ;
# 9148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HOpen(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  SInt8 permission,
  FSIORefNum * refNum) ;
# 9169 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HOpenDF(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  SInt8 permission,
  FSIORefNum * refNum) ;
# 9190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HOpenRF(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  SInt8 permission,
  FSIORefNum * refNum) ;
# 9211 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
AllocContig(
  FSVolumeRefNum refNum,
  SInt32 * count) ;
# 9229 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HCreate(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  OSType creator,
  OSType fileType) ;
# 9250 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
DirCreate(
  FSVolumeRefNum vRefNum,
  SInt32 parentDirID,
  ConstStr255Param directoryName,
  SInt32 * createdDirID) ;
# 9270 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HDelete(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName) ;
# 9289 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HGetFInfo(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  FInfo * fndrInfo) ;
# 9309 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HSetFInfo(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  const FInfo * fndrInfo) ;
# 9329 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HSetFLock(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName) ;
# 9348 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HRstFLock(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName) ;
# 9367 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
HRename(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param oldName,
  ConstStr255Param newName) ;
# 9387 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
CatMove(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param oldName,
  SInt32 newDirID,
  ConstStr255Param newName) ;
# 9408 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetLogInInfoSync(HParmBlkPtr paramBlock) ;
# 9423 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHGetLogInInfoAsync(HParmBlkPtr paramBlock) ;
# 9441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHMoveRenameSync(HParmBlkPtr paramBlock) ;
# 9459 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBHMoveRenameAsync(HParmBlkPtr paramBlock) ;
# 9474 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetXCatInfoSync(XCInfoPBPtr paramBlock) ;
# 9489 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetXCatInfoAsync(XCInfoPBPtr paramBlock) ;
# 9504 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBExchangeFilesSync(HParmBlkPtr paramBlock) ;
# 9519 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBExchangeFilesAsync(HParmBlkPtr paramBlock) ;
# 9534 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetForeignPrivsSync(HParmBlkPtr paramBlock) ;
# 9549 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetForeignPrivsAsync(HParmBlkPtr paramBlock) ;
# 9564 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetForeignPrivsSync(HParmBlkPtr paramBlock) ;
# 9579 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBSetForeignPrivsAsync(HParmBlkPtr paramBlock) ;






enum {

  kLargeIcon = 1,
  kLarge4BitIcon = 2,
  kLarge8BitIcon = 3,
  kSmallIcon = 4,
  kSmall4BitIcon = 5,
  kSmall8BitIcon = 6,
  kicnsIconFamily = 239
};
# 9611 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetPath(DTPBPtr paramBlock) ;
# 9625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTCloseDown(DTPBPtr paramBlock) ;
# 9639 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTAddIconSync(DTPBPtr paramBlock) ;
# 9653 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTAddIconAsync(DTPBPtr paramBlock) ;
# 9667 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetIconSync(DTPBPtr paramBlock) ;
# 9681 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetIconAsync(DTPBPtr paramBlock) ;
# 9695 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetIconInfoSync(DTPBPtr paramBlock) ;
# 9709 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetIconInfoAsync(DTPBPtr paramBlock) ;
# 9723 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTAddAPPLSync(DTPBPtr paramBlock) ;
# 9737 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTAddAPPLAsync(DTPBPtr paramBlock) ;
# 9751 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTRemoveAPPLSync(DTPBPtr paramBlock) ;
# 9765 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTRemoveAPPLAsync(DTPBPtr paramBlock) ;
# 9779 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetAPPLSync(DTPBPtr paramBlock) ;
# 9793 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetAPPLAsync(DTPBPtr paramBlock) ;
# 9807 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTSetCommentSync(DTPBPtr paramBlock) ;
# 9821 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTSetCommentAsync(DTPBPtr paramBlock) ;
# 9835 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTRemoveCommentSync(DTPBPtr paramBlock) ;
# 9849 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTRemoveCommentAsync(DTPBPtr paramBlock) ;
# 9863 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetCommentSync(DTPBPtr paramBlock) ;
# 9877 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetCommentAsync(DTPBPtr paramBlock) ;
# 9891 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTFlushSync(DTPBPtr paramBlock) ;
# 9905 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTFlushAsync(DTPBPtr paramBlock) ;
# 9919 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTResetSync(DTPBPtr paramBlock) ;
# 9933 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTResetAsync(DTPBPtr paramBlock) ;
# 9947 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetInfoSync(DTPBPtr paramBlock) ;
# 9961 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTGetInfoAsync(DTPBPtr paramBlock) ;
# 9975 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTOpenInform(DTPBPtr paramBlock) ;
# 9989 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTDeleteSync(DTPBPtr paramBlock) ;
# 10003 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBDTDeleteAsync(DTPBPtr paramBlock) ;
# 10019 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSMakeFSSpec(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  ConstStr255Param fileName,
  FSSpec * spec) ;
# 10039 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpOpenDF(
  const FSSpec * spec,
  SInt8 permission,
  FSIORefNum * refNum) ;
# 10058 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpOpenRF(
  const FSSpec * spec,
  SInt8 permission,
  FSIORefNum * refNum) ;
# 10077 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpCreate(
  const FSSpec * spec,
  OSType creator,
  OSType fileType,
  ScriptCode scriptTag) ;
# 10097 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpDirCreate(
  const FSSpec * spec,
  ScriptCode scriptTag,
  SInt32 * createdDirID) ;
# 10116 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpDelete(const FSSpec * spec) ;
# 10132 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpGetFInfo(
  const FSSpec * spec,
  FInfo * fndrInfo) ;
# 10150 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpSetFInfo(
  const FSSpec * spec,
  const FInfo * fndrInfo) ;
# 10168 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpSetFLock(const FSSpec * spec) ;
# 10184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpRstFLock(const FSSpec * spec) ;
# 10200 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpRename(
  const FSSpec * spec,
  ConstStr255Param newName) ;
# 10218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpCatMove(
  const FSSpec * source,
  const FSSpec * dest) ;
# 10236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr
FSpExchangeFiles(
  const FSSpec * source,
  const FSSpec * dest) ;
# 10255 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBShareSync(HParmBlkPtr paramBlock) ;
# 10270 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBShareAsync(HParmBlkPtr paramBlock) ;
# 10285 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBUnshareSync(HParmBlkPtr paramBlock) ;
# 10300 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBUnshareAsync(HParmBlkPtr paramBlock) ;
# 10315 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetUGEntrySync(HParmBlkPtr paramBlock) ;
# 10330 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
extern OSErr PBGetUGEntryAsync(HParmBlkPtr paramBlock) ;
# 10421 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Files.h" 3
#pragma pack(pop)


}
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern "C" {


typedef SInt16 ResID;
typedef SInt16 ResAttributes;
typedef SInt16 ResFileAttributes;
typedef SInt16 ResourceCount;
typedef SInt16 ResourceIndex;
typedef FSIORefNum ResFileRefNum;

enum {
  resSysRefBit = 7,
  resSysHeapBit = 6,
  resPurgeableBit = 5,
  resLockedBit = 4,
  resProtectedBit = 3,
  resPreloadBit = 2,
  resChangedBit = 1
};


enum {
  resSysHeap = 64,
  resPurgeable = 32,
  resLocked = 16,
  resProtected = 8,
  resPreload = 4,
  resChanged = 2
};


enum {
  mapReadOnlyBit = 7,
  mapCompactBit = 6,
  mapChangedBit = 5
};


enum {
  mapReadOnly = 128,
  mapCompact = 64,
  mapChanged = 32
};


enum {
  kResFileNotOpened = -1,
  kSystemResFile = 0
};


typedef void ( * ResErrProcPtr)(OSErr thErr);
typedef ResErrProcPtr ResErrUPP;
# 101 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResErrUPP
NewResErrUPP(ResErrProcPtr userRoutine) ;
# 112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
DisposeResErrUPP(ResErrUPP userUPP) ;
# 123 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
InvokeResErrUPP(
  OSErr thErr,
  ResErrUPP userUPP) ;



    inline ResErrUPP NewResErrUPP(ResErrProcPtr userRoutine) { return userRoutine; }
    inline void DisposeResErrUPP(ResErrUPP) { }
    inline void InvokeResErrUPP(OSErr thErr, ResErrUPP userUPP) { (*userUPP)(thErr); }
# 141 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
typedef OSErr ( * ResourceEndianFilterPtr)(Handle theResource, Boolean currentlyNativeEndian);
# 153 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
CloseResFile(ResFileRefNum refNum) ;
# 168 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
ResError(void) ;
# 183 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileRefNum
CurResFile(void) ;
# 198 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileRefNum
HomeResFile(Handle theResource) ;
# 213 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
UseResFile(ResFileRefNum refNum) ;
# 228 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResourceCount
CountTypes(void) ;
# 243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResourceCount
Count1Types(void) ;
# 258 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
GetIndType(
  ResType * theType,
  ResourceIndex itemIndex) ;
# 275 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
Get1IndType(
  ResType * theType,
  ResourceIndex itemIndex) ;
# 292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
SetResLoad(Boolean load) ;
# 307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResourceCount
CountResources(ResType theType) ;
# 322 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResourceCount
Count1Resources(ResType theType) ;
# 337 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
GetIndResource(
  ResType theType,
  ResourceIndex itemIndex) ;
# 354 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
Get1IndResource(
  ResType theType,
  ResourceIndex itemIndex) ;
# 371 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
GetResource(
  ResType theType,
  ResID theID) ;
# 388 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
Get1Resource(
  ResType theType,
  ResID theID) ;
# 405 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
GetNamedResource(
  ResType theType,
  ConstStr255Param name) ;
# 422 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
Get1NamedResource(
  ResType theType,
  ConstStr255Param name) ;
# 442 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
LoadResource(Handle theResource) ;
# 457 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
ReleaseResource(Handle theResource) ;
# 472 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
DetachResource(Handle theResource) ;
# 487 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResID
UniqueID(ResType theType) ;
# 502 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResID
Unique1ID(ResType theType) ;
# 517 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResAttributes
GetResAttrs(Handle theResource) ;
# 532 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
GetResInfo(
  Handle theResource,
  ResID * theID,
  ResType * theType,
  Str255 name) ;
# 551 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
SetResInfo(
  Handle theResource,
  ResID theID,
  ConstStr255Param name) ;
# 569 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
AddResource(
  Handle theData,
  ResType theType,
  ResID theID,
  ConstStr255Param name) ;
# 588 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern long
GetResourceSizeOnDisk(Handle theResource) ;
# 603 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern long
GetMaxResourceSize(Handle theResource) ;
# 618 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
SetResAttrs(
  Handle theResource,
  ResAttributes attrs) ;
# 635 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
ChangedResource(Handle theResource) ;
# 650 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
RemoveResource(Handle theResource) ;
# 665 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
UpdateResFile(ResFileRefNum refNum) ;
# 680 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
WriteResource(Handle theResource) ;
# 695 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
SetResPurge(Boolean install) ;
# 710 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileAttributes
GetResFileAttrs(ResFileRefNum refNum) ;
# 725 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
SetResFileAttrs(
  ResFileRefNum refNum,
  ResFileAttributes attrs) ;
# 742 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
ReadPartialResource(
  Handle theResource,
  long offset,
  void * buffer,
  long count) ;
# 761 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
WritePartialResource(
  Handle theResource,
  long offset,
  const void * buffer,
  long count) ;
# 780 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
SetResourceSize(
  Handle theResource,
  long newSize) ;
# 797 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Handle
GetNextFOND(Handle fondHandle) ;
# 820 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
typedef SInt16 RsrcChainLocation;
enum {
  kRsrcChainBelowSystemMap = 0,
  kRsrcChainBelowApplicationMap = 1,
  kRsrcChainAboveApplicationMap = 2,
  kRsrcChainAboveAllMaps = 4
};
# 844 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
InsertResourceFile(
  ResFileRefNum refNum,
  RsrcChainLocation where) ;
# 865 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
DetachResourceFile(ResFileRefNum refNum) ;
# 884 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
GetTopResourceFile(ResFileRefNum * refNum) ;
# 905 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
GetNextResourceFile(
  ResFileRefNum curRefNum,
  ResFileRefNum * nextRefNum) ;
# 922 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileRefNum
FSOpenResFile(
  const FSRef * ref,
  SInt8 permission) ;
# 939 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
FSCreateResFile(
  const FSRef * parentRef,
  UniCharCount nameLength,
  const UniChar * name,
  FSCatalogInfoBitmap whichInfo,
  const FSCatalogInfo * catalogInfo,
  FSRef * newRef,
  FSSpec * newSpec) ;
# 968 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Boolean
FSResourceFileAlreadyOpen(
  const FSRef * resourceFileRef,
  Boolean * inChain,
  ResFileRefNum * refNum) ;
# 996 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
FSOpenOrphanResFile(
  const FSRef * ref,
  SignedByte permission,
  ResFileRefNum * refNum) ;
# 1053 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
FSCreateResourceFile(
  const FSRef * parentRef,
  UniCharCount nameLength,
  const UniChar * name,
  FSCatalogInfoBitmap whichInfo,
  const FSCatalogInfo * catalogInfo,
  UniCharCount forkNameLength,
  const UniChar * forkName,
  FSRef * newRef,
  FSSpec * newSpec) ;
# 1102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
FSCreateResourceFork(
  const FSRef * ref,
  UniCharCount forkNameLength,
  const UniChar * forkName,
  UInt32 flags) ;
# 1146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
FSOpenResourceFile(
  const FSRef * ref,
  UniCharCount forkNameLength,
  const UniChar * forkName,
  SInt8 permissions,
  ResFileRefNum * refNum) ;
# 1171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileRefNum
OpenRFPerm(
  ConstStr255Param fileName,
  FSVolumeRefNum vRefNum,
  SInt8 permission) ;
# 1190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileRefNum
HOpenResFile(
  FSVolumeRefNum vRefNum,
  long dirID,
  ConstStr255Param fileName,
  SInt8 permission) ;
# 1210 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
HCreateResFile(
  FSVolumeRefNum vRefNum,
  long dirID,
  ConstStr255Param fileName) ;
# 1229 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern ResFileRefNum
FSpOpenResFile(
  const FSSpec * spec,
  SignedByte permission) ;
# 1247 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern void
FSpCreateResFile(
  const FSSpec * spec,
  OSType creator,
  OSType fileType,
  ScriptCode scriptTag) ;
# 1267 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern Boolean
FSpResourceFileAlreadyOpen(
  const FSSpec * resourceFile,
  Boolean * inChain,
  ResFileRefNum * refNum) ;
# 1286 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
extern OSErr
FSpOpenOrphanResFile(
  const FSSpec * spec,
  SignedByte permission,
  ResFileRefNum * refNum) ;
# 1306 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Resources.h" 3
}
# 37 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 2 3
# 48 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern "C" {


#pragma pack(push, 2)

enum {
  kAppleManufacturer = 'appl',
  kComponentResourceType = 'thng',
  kComponentAliasResourceType = 'thga'
};

enum {
  kAnyComponentType = 0,
  kAnyComponentSubType = 0,
  kAnyComponentManufacturer = 0,
  kAnyComponentFlagsMask = 0
};

enum {
  cmpThreadSafe = 1L << 28,
  cmpIsMissing = 1L << 29,
  cmpWantsRegisterMessage = 1L << 31
};

enum {
  kComponentOpenSelect = -1,
  kComponentCloseSelect = -2,
  kComponentCanDoSelect = -3,
  kComponentVersionSelect = -4,
  kComponentRegisterSelect = -5,
  kComponentTargetSelect = -6,
  kComponentUnregisterSelect = -7,
  kComponentGetMPWorkFunctionSelect = -8,
  kComponentExecuteWiredActionSelect = -9,
  kComponentGetPublicResourceSelect = -10
};


enum {
  componentDoAutoVersion = (1 << 0),
  componentWantsUnregister = (1 << 1),
  componentAutoVersionIncludeFlags = (1 << 2),
  componentHasMultiplePlatforms = (1 << 3),
  componentLoadResident = (1 << 4)
};




enum {
  defaultComponentIdentical = 0,
  defaultComponentAnyFlags = 1,
  defaultComponentAnyManufacturer = 2,
  defaultComponentAnySubType = 4,
  defaultComponentAnyFlagsAnyManufacturer = (defaultComponentAnyFlags + defaultComponentAnyManufacturer),
  defaultComponentAnyFlagsAnyManufacturerAnySubType = (defaultComponentAnyFlags + defaultComponentAnyManufacturer + defaultComponentAnySubType)
};


enum {
  registerComponentGlobal = 1,
  registerComponentNoDuplicates = 2,
  registerComponentAfterExisting = 4,
  registerComponentAliasesOnly = 8
};


struct ComponentDescription {
  OSType componentType;
  OSType componentSubType;
  OSType componentManufacturer;
  UInt32 componentFlags;
  UInt32 componentFlagsMask;
};
typedef struct ComponentDescription ComponentDescription;

struct ResourceSpec {
  OSType resType;
  SInt16 resID;
};
typedef struct ResourceSpec ResourceSpec;
struct ComponentResource {
  ComponentDescription cd;
  ResourceSpec component;
  ResourceSpec componentName;
  ResourceSpec componentInfo;
  ResourceSpec componentIcon;
};
typedef struct ComponentResource ComponentResource;
typedef ComponentResource * ComponentResourcePtr;
typedef ComponentResourcePtr * ComponentResourceHandle;
struct ComponentPlatformInfo {
  SInt32 componentFlags;
  ResourceSpec component;
  SInt16 platformType;
};
typedef struct ComponentPlatformInfo ComponentPlatformInfo;
struct ComponentResourceExtension {
  SInt32 componentVersion;
  SInt32 componentRegisterFlags;
  SInt16 componentIconFamily;
};
typedef struct ComponentResourceExtension ComponentResourceExtension;
struct ComponentPlatformInfoArray {
  SInt32 count;
  ComponentPlatformInfo platformArray[1];
};
typedef struct ComponentPlatformInfoArray ComponentPlatformInfoArray;
struct ExtComponentResource {
  ComponentDescription cd;
  ResourceSpec component;
  ResourceSpec componentName;
  ResourceSpec componentInfo;
  ResourceSpec componentIcon;
  SInt32 componentVersion;
  SInt32 componentRegisterFlags;
  SInt16 componentIconFamily;
  SInt32 count;
  ComponentPlatformInfo platformArray[1];
};
typedef struct ExtComponentResource ExtComponentResource;
typedef ExtComponentResource * ExtComponentResourcePtr;
typedef ExtComponentResourcePtr * ExtComponentResourceHandle;
struct ComponentAliasResource {
  ComponentResource cr;
  ComponentDescription aliasCD;
};
typedef struct ComponentAliasResource ComponentAliasResource;

struct ComponentParameters {
  UInt8 flags;
  UInt8 paramSize;
  SInt16 what;





  long params[1];
};
typedef struct ComponentParameters ComponentParameters;
struct ComponentRecord {
  long data[1];
};
typedef struct ComponentRecord ComponentRecord;
typedef ComponentRecord * Component;
struct ComponentInstanceRecord {
  long data[1];
};
typedef struct ComponentInstanceRecord ComponentInstanceRecord;
typedef ComponentInstanceRecord * ComponentInstance;
struct RegisteredComponentRecord {
  long data[1];
};
typedef struct RegisteredComponentRecord RegisteredComponentRecord;
typedef RegisteredComponentRecord * RegisteredComponentRecordPtr;
struct RegisteredComponentInstanceRecord {
  long data[1];
};
typedef struct RegisteredComponentInstanceRecord RegisteredComponentInstanceRecord;
typedef RegisteredComponentInstanceRecord * RegisteredComponentInstanceRecordPtr;
typedef SInt32 ComponentResult;
enum {
  platform68k = 1,
  platformPowerPC = 2,
  platformInterpreted = 3,
  platformWin32 = 4,
  platformPowerPCNativeEntryPoint = 5,
  platformIA32NativeEntryPoint = 6,
  platformPowerPC64NativeEntryPoint = 7,
  platformX86_64NativeEntryPoint = 8
};

enum {
  platformIRIXmips = 1000,
  platformSunOSsparc = 1100,
  platformSunOSintel = 1101,
  platformLinuxppc = 1200,
  platformLinuxintel = 1201,
  platformAIXppc = 1300,
  platformNeXTIntel = 1400,
  platformNeXTppc = 1401,
  platformNeXTsparc = 1402,
  platformNeXT68k = 1403,
  platformMacOSx86 = 1500
};

enum {
  mpWorkFlagDoWork = (1 << 0),
  mpWorkFlagDoCompletion = (1 << 1),
  mpWorkFlagCopyWorkBlock = (1 << 2),
  mpWorkFlagDontBlock = (1 << 3),
  mpWorkFlagGetProcessorCount = (1 << 4),
  mpWorkFlagGetIsRunning = (1 << 6)
};

enum {
  cmpAliasNoFlags = 0,
  cmpAliasOnlyThisFile = 1
};

typedef UInt32 CSComponentsThreadMode;
enum {
  kCSAcceptAllComponentsMode = 0,
  kCSAcceptThreadSafeComponentsOnlyMode = 1
};
# 287 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
CSSetComponentsThreadMode(CSComponentsThreadMode mode) ;
# 310 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern CSComponentsThreadMode
CSGetComponentsThreadMode(void) ;


struct ComponentMPWorkFunctionHeaderRecord {
  UInt32 headerSize;
  UInt32 recordSize;
  UInt32 workFlags;
  UInt16 processorCount;
  UInt8 unused;
  UInt8 isRunning;
};
typedef struct ComponentMPWorkFunctionHeaderRecord ComponentMPWorkFunctionHeaderRecord;
typedef ComponentMPWorkFunctionHeaderRecord * ComponentMPWorkFunctionHeaderRecordPtr;
typedef ComponentResult ( * ComponentMPWorkFunctionProcPtr)(void *globalRefCon, ComponentMPWorkFunctionHeaderRecordPtr header);
typedef ComponentResult ( * ComponentRoutineProcPtr)(ComponentParameters *cp, Handle componentStorage);
typedef OSErr ( * GetMissingComponentResourceProcPtr)(Component c, OSType resType, SInt16 resID, void *refCon, Handle *resource);
typedef ComponentMPWorkFunctionProcPtr ComponentMPWorkFunctionUPP;
typedef ComponentRoutineProcPtr ComponentRoutineUPP;
typedef GetMissingComponentResourceProcPtr GetMissingComponentResourceUPP;





typedef UniversalProcPtr ComponentFunctionUPP;
# 352 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentFunctionUPP
NewComponentFunctionUPP(
  ProcPtr userRoutine,
  ProcInfoType procInfo) ;
# 374 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
DisposeComponentFunctionUPP(ComponentFunctionUPP userUPP) ;
# 418 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern Component
RegisterComponent(
  ComponentDescription * cd,
  ComponentRoutineUPP componentEntryPoint,
  SInt16 global,
  Handle componentName,
  Handle componentInfo,
  Handle componentIcon) ;
# 440 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern Component
RegisterComponentResource(
  ComponentResourceHandle cr,
  SInt16 global) ;
# 458 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
UnregisterComponent(Component aComponent) ;
# 474 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern Component
FindNextComponent(
  Component aComponent,
  ComponentDescription * looking) ;
# 492 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern long
CountComponents(ComponentDescription * looking) ;
# 508 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentInfo(
  Component aComponent,
  ComponentDescription * cd,
  Handle componentName,
  Handle componentInfo,
  Handle componentIcon) ;
# 529 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern SInt32
GetComponentListModSeed(void) ;
# 545 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern SInt32
GetComponentTypeModSeed(OSType componentType) ;
# 564 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
OpenAComponent(
  Component aComponent,
  ComponentInstance * ci) ;
# 582 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentInstance
OpenComponent(Component aComponent) ;
# 598 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
CloseComponent(ComponentInstance aComponentInstance) ;
# 614 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentInstanceError(ComponentInstance aComponentInstance) ;
# 633 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern Component
ResolveComponentAlias(Component aComponent) ;
# 652 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentPublicResource(
  Component aComponent,
  OSType resourceType,
  SInt16 resourceID,
  Handle * theResource) ;
# 671 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentPublicResourceList(
  OSType resourceType,
  SInt16 resourceID,
  SInt32 flags,
  ComponentDescription * cd,
  GetMissingComponentResourceUPP missingProc,
  void * refCon,
  void * atomContainerPtr) ;
# 693 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentPublicIndString(
  Component aComponent,
  Str255 theString,
  SInt16 strListID,
  SInt16 index) ;
# 721 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
SetComponentInstanceError(
  ComponentInstance aComponentInstance,
  OSErr theError) ;
# 739 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern long
GetComponentRefcon(Component aComponent) ;
# 755 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
SetComponentRefcon(
  Component aComponent,
  long theRefcon) ;
# 773 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ResFileRefNum
OpenComponentResFile(Component aComponent) ;
# 789 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
OpenAComponentResFile(
  Component aComponent,
  ResFileRefNum * resRef) ;
# 807 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
CloseComponentResFile(ResFileRefNum refnum) ;
# 824 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentResource(
  Component aComponent,
  OSType resType,
  SInt16 resID,
  Handle * theResource) ;
# 844 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentIndString(
  Component aComponent,
  Str255 theString,
  SInt16 strListID,
  SInt16 index) ;
# 867 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern Handle
GetComponentInstanceStorage(ComponentInstance aComponentInstance) ;
# 883 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
SetComponentInstanceStorage(
  ComponentInstance aComponentInstance,
  Handle theStorage) ;
# 901 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern long
CountComponentInstances(Component aComponent) ;
# 917 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentFunction(
  ComponentParameters * params,
  ComponentFunctionUPP func) ;
# 935 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentFunctionWithStorage(
  Handle storage,
  ComponentParameters * params,
  ComponentFunctionUPP func) ;
# 953 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentFunctionWithStorageProcInfo(
  Handle storage,
  ComponentParameters * params,
  ProcPtr func,
  ProcInfoType funcProcInfo) ;
# 973 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
DelegateComponentCall(
  ComponentParameters * originalParams,
  ComponentInstance ci) ;
# 991 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
SetDefaultComponent(
  Component aComponent,
  SInt16 flags) ;
# 1009 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentInstance
OpenDefaultComponent(
  OSType componentType,
  OSType componentSubType) ;
# 1027 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
OpenADefaultComponent(
  OSType componentType,
  OSType componentSubType,
  ComponentInstance * ci) ;
# 1046 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern Component
CaptureComponent(
  Component capturedComponent,
  Component capturingComponent) ;
# 1064 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
UncaptureComponent(Component aComponent) ;
# 1080 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern SInt32
RegisterComponentResourceFile(
  SInt16 resRefNum,
  SInt16 global) ;
# 1098 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
GetComponentIconSuite(
  Component aComponent,
  Handle * iconSuite) ;
# 1126 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
RegisterComponentFile(
  const FSSpec * spec,
  short global) ;
# 1143 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
RegisterComponentFileEntries(
  const FSSpec * spec,
  short global,
  const ComponentDescription * toRegister,
  UInt32 registerCount) ;
# 1164 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
RegisterComponentFileRef(
  const FSRef * ref,
  SInt16 global) ;
# 1181 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
RegisterComponentFileRefEntries(
  const FSRef * ref,
  SInt16 global,
  const ComponentDescription * toRegister,
  UInt32 registerCount) ;
# 1209 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
ComponentFunctionImplemented(
  ComponentInstance ci,
  SInt16 ftnNumber) ;
# 1227 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
GetComponentVersion(ComponentInstance ci) ;
# 1243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
ComponentSetTarget(
  ComponentInstance ci,
  ComponentInstance target) ;
# 1265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentOpen(
  ComponentInstance ci,
  ComponentInstance self) ;
# 1283 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentClose(
  ComponentInstance ci,
  ComponentInstance self) ;
# 1301 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentCanDo(
  ComponentInstance ci,
  SInt16 ftnNumber) ;
# 1319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentVersion(ComponentInstance ci) ;
# 1335 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentRegister(ComponentInstance ci) ;
# 1351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentTarget(
  ComponentInstance ci,
  ComponentInstance target) ;
# 1369 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentUnregister(ComponentInstance ci) ;
# 1385 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentGetMPWorkFunction(
  ComponentInstance ci,
  ComponentMPWorkFunctionUPP * workFunction,
  void ** refCon) ;
# 1403 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentGetPublicResource(
  ComponentInstance ci,
  OSType resourceType,
  SInt16 resourceID,
  Handle * resource) ;
# 1427 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
CallComponentDispatch(ComponentParameters * cp) ;
# 1441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentMPWorkFunctionUPP
NewComponentMPWorkFunctionUPP(ComponentMPWorkFunctionProcPtr userRoutine) ;
# 1452 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentRoutineUPP
NewComponentRoutineUPP(ComponentRoutineProcPtr userRoutine) ;
# 1463 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern GetMissingComponentResourceUPP
NewGetMissingComponentResourceUPP(GetMissingComponentResourceProcPtr userRoutine) ;
# 1474 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
DisposeComponentMPWorkFunctionUPP(ComponentMPWorkFunctionUPP userUPP) ;
# 1485 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
DisposeComponentRoutineUPP(ComponentRoutineUPP userUPP) ;
# 1496 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern void
DisposeGetMissingComponentResourceUPP(GetMissingComponentResourceUPP userUPP) ;
# 1507 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
InvokeComponentMPWorkFunctionUPP(
  void * globalRefCon,
  ComponentMPWorkFunctionHeaderRecordPtr header,
  ComponentMPWorkFunctionUPP userUPP) ;
# 1521 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern ComponentResult
InvokeComponentRoutineUPP(
  ComponentParameters * cp,
  Handle componentStorage,
  ComponentRoutineUPP userUPP) ;
# 1535 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
extern OSErr
InvokeGetMissingComponentResourceUPP(
  Component c,
  OSType resType,
  SInt16 resID,
  void * refCon,
  Handle * resource,
  GetMissingComponentResourceUPP userUPP) ;



    inline ComponentMPWorkFunctionUPP NewComponentMPWorkFunctionUPP(ComponentMPWorkFunctionProcPtr userRoutine) { return userRoutine; }
    inline ComponentRoutineUPP NewComponentRoutineUPP(ComponentRoutineProcPtr userRoutine) { return userRoutine; }
    inline GetMissingComponentResourceUPP NewGetMissingComponentResourceUPP(GetMissingComponentResourceProcPtr userRoutine) { return userRoutine; }
    inline void DisposeComponentMPWorkFunctionUPP(ComponentMPWorkFunctionUPP) { }
    inline void DisposeComponentRoutineUPP(ComponentRoutineUPP) { }
    inline void DisposeGetMissingComponentResourceUPP(GetMissingComponentResourceUPP) { }
    inline ComponentResult InvokeComponentMPWorkFunctionUPP(void * globalRefCon, ComponentMPWorkFunctionHeaderRecordPtr header, ComponentMPWorkFunctionUPP userUPP) { return (*userUPP)(globalRefCon, header); }
    inline ComponentResult InvokeComponentRoutineUPP(ComponentParameters * cp, Handle componentStorage, ComponentRoutineUPP userUPP) { return (*userUPP)(cp, componentStorage); }
    inline OSErr InvokeGetMissingComponentResourceUPP(Component c, OSType resType, SInt16 resID, void * refCon, Handle * resource, GetMissingComponentResourceUPP userUPP) { return (*userUPP)(c, resType, resID, refCon, resource); }
# 1571 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Components.h" 3
enum {
    uppComponentFunctionImplementedProcInfo = 0x000002F0,
    uppGetComponentVersionProcInfo = 0x000000F0,
    uppComponentSetTargetProcInfo = 0x000003F0,
    uppCallComponentOpenProcInfo = 0x000003F0,
    uppCallComponentCloseProcInfo = 0x000003F0,
    uppCallComponentCanDoProcInfo = 0x000002F0,
    uppCallComponentVersionProcInfo = 0x000000F0,
    uppCallComponentRegisterProcInfo = 0x000000F0,
    uppCallComponentTargetProcInfo = 0x000003F0,
    uppCallComponentUnregisterProcInfo = 0x000000F0,
    uppCallComponentGetMPWorkFunctionProcInfo = 0x00000FF0,
    uppCallComponentGetPublicResourceProcInfo = 0x00003BF0
};







#pragma pack(pop)


}
# 86 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3
# 101 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 1 3
# 41 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 1 3
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern "C" {


#pragma options align=power
# 194 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
enum {
  MPLibrary_MajorVersion = 2,
  MPLibrary_MinorVersion = 3,
  MPLibrary_Release = 1,
  MPLibrary_DevelopmentRevision = 1
};



typedef struct OpaqueMPProcessID* MPProcessID;
typedef struct OpaqueMPTaskID* MPTaskID;
typedef struct OpaqueMPQueueID* MPQueueID;
typedef struct OpaqueMPSemaphoreID* MPSemaphoreID;
typedef struct OpaqueMPCriticalRegionID* MPCriticalRegionID;
typedef struct OpaqueMPTimerID* MPTimerID;
typedef struct OpaqueMPEventID* MPEventID;
typedef struct OpaqueMPAddressSpaceID* MPAddressSpaceID;
typedef struct OpaqueMPNotificationID* MPNotificationID;
typedef struct OpaqueMPCoherenceID* MPCoherenceID;
typedef struct OpaqueMPCpuID* MPCpuID;
typedef struct OpaqueMPAreaID* MPAreaID;
typedef struct OpaqueMPConsoleID* MPConsoleID;
typedef struct OpaqueMPOpaqueID* MPOpaqueID;
enum {

  kOpaqueAnyID = 0,
  kOpaqueProcessID = 1,
  kOpaqueTaskID = 2,
  kOpaqueTimerID = 3,
  kOpaqueQueueID = 4,
  kOpaqueSemaphoreID = 5,
  kOpaqueCriticalRegionID = 6,
  kOpaqueCpuID = 7,
  kOpaqueAddressSpaceID = 8,
  kOpaqueEventID = 9,
  kOpaqueCoherenceID = 10,
  kOpaqueAreaID = 11,
  kOpaqueNotificationID = 12,
  kOpaqueConsoleID = 13
};

typedef UInt32 MPOpaqueIDClass;

enum {
  kMPNoID = 0
};


typedef OptionBits MPTaskOptions;
typedef ItemCount TaskStorageIndex;
typedef LogicalAddress TaskStorageValue;
typedef ItemCount MPSemaphoreCount;
typedef UInt32 MPTaskWeight;
typedef UInt32 MPEventFlags;
typedef UInt32 MPExceptionKind;
typedef UInt32 MPTaskStateKind;
typedef UInt32 MPPageSizeClass;

enum {
  kDurationImmediate = 0L,
  kDurationForever = 0x7FFFFFFF,
  kDurationMillisecond = 1,
  kDurationMicrosecond = -1
};
# 280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern ItemCount
MPProcessors(void) ;
# 297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern ItemCount
MPProcessorsScheduled(void) ;
# 312 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
enum {

  kMPCreateTaskSuspendedMask = 1L << 0,
  kMPCreateTaskTakesAllExceptionsMask = 1L << 1,
  kMPCreateTaskNotDebuggableMask = 1L << 2,
  kMPCreateTaskValidOptionsMask = kMPCreateTaskSuspendedMask | kMPCreateTaskTakesAllExceptionsMask | kMPCreateTaskNotDebuggableMask
};







typedef OSStatus ( * TaskProc)(void * parameter);
# 339 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateTask(
  TaskProc entryPoint,
  void * parameter,
  ByteCount stackSize,
  MPQueueID notifyQueue,
  void * terminationParameter1,
  void * terminationParameter2,
  MPTaskOptions options,
  MPTaskID * task) ;
# 364 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPTerminateTask(
  MPTaskID task,
  OSStatus terminationStatus) ;
# 383 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetTaskWeight(
  MPTaskID task,
  MPTaskWeight weight) ;
# 402 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern Boolean
MPTaskIsPreemptive(MPTaskID taskID) ;
# 419 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
MPExit(OSStatus status) ;
# 436 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
MPYield(void) ;
# 453 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern MPTaskID
MPCurrentTaskID(void) ;
# 470 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetTaskType(
  MPTaskID task,
  OSType taskType) ;
# 498 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPAllocateTaskStorageIndex(TaskStorageIndex * taskIndex) ;
# 515 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeallocateTaskStorageIndex(TaskStorageIndex taskIndex) ;
# 532 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetTaskStorageValue(
  TaskStorageIndex taskIndex,
  TaskStorageValue value) ;
# 551 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern TaskStorageValue
MPGetTaskStorageValue(TaskStorageIndex taskIndex) ;
# 576 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateQueue(MPQueueID * queue) ;
# 593 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeleteQueue(MPQueueID queue) ;
# 610 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPNotifyQueue(
  MPQueueID queue,
  void * param1,
  void * param2,
  void * param3) ;
# 631 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPWaitOnQueue(
  MPQueueID queue,
  void ** param1,
  void ** param2,
  void ** param3,
  Duration timeout) ;
# 653 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetQueueReserve(
  MPQueueID queue,
  ItemCount count) ;
# 675 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateSemaphore(
  MPSemaphoreCount maximumValue,
  MPSemaphoreCount initialValue,
  MPSemaphoreID * semaphore) ;
# 695 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeleteSemaphore(MPSemaphoreID semaphore) ;
# 712 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSignalSemaphore(MPSemaphoreID semaphore) ;
# 729 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPWaitOnSemaphore(
  MPSemaphoreID semaphore,
  Duration timeout) ;
# 754 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateCriticalRegion(MPCriticalRegionID * criticalRegion) ;
# 771 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeleteCriticalRegion(MPCriticalRegionID criticalRegion) ;
# 788 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPEnterCriticalRegion(
  MPCriticalRegionID criticalRegion,
  Duration timeout) ;
# 807 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPExitCriticalRegion(MPCriticalRegionID criticalRegion) ;
# 826 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateEvent(MPEventID * event) ;
# 842 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeleteEvent(MPEventID event) ;
# 859 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetEvent(
  MPEventID event,
  MPEventFlags flags) ;
# 877 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPWaitForEvent(
  MPEventID event,
  MPEventFlags * flags,
  Duration timeout) ;
# 904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateNotification(MPNotificationID * notificationID) ;
# 921 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeleteNotification(MPNotificationID notificationID) ;
# 938 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPModifyNotification(
  MPNotificationID notificationID,
  MPOpaqueID anID,
  void * notifyParam1,
  void * notifyParam2,
  void * notifyParam3) ;
# 960 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPModifyNotificationParameters(
  MPNotificationID notificationID,
  MPOpaqueIDClass kind,
  void * notifyParam1,
  void * notifyParam2,
  void * notifyParam3) ;
# 982 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCauseNotification(MPNotificationID notificationID) ;
# 1002 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
enum {

  kMPPreserveTimerIDMask = 1L << 0,
  kMPTimeIsDeltaMask = 1L << 1,
  kMPTimeIsDurationMask = 1L << 2
};
# 1022 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDelayUntil(AbsoluteTime * expirationTime) ;
# 1051 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCreateTimer(MPTimerID * timerID) ;
# 1068 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDeleteTimer(MPTimerID timerID) ;
# 1085 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetTimerNotify(
  MPTimerID timerID,
  MPOpaqueID anID,
  void * notifyParam1,
  void * notifyParam2,
  void * notifyParam3) ;
# 1107 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPArmTimer(
  MPTimerID timerID,
  AbsoluteTime * expirationTime,
  OptionBits options) ;
# 1127 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPCancelTimer(
  MPTimerID timerID,
  AbsoluteTime * timeRemaining) ;
# 1142 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
enum {

  kMPMaxAllocSize = 1024L * 1024 * 1024
};

enum {

  kMPAllocateDefaultAligned = 0,
  kMPAllocate8ByteAligned = 3,
  kMPAllocate16ByteAligned = 4,
  kMPAllocate32ByteAligned = 5,
  kMPAllocate1024ByteAligned = 10,
  kMPAllocate4096ByteAligned = 12,
  kMPAllocateMaxAlignment = 16,
  kMPAllocateAltiVecAligned = kMPAllocate16ByteAligned,
  kMPAllocateVMXAligned = kMPAllocateAltiVecAligned,
  kMPAllocateVMPageAligned = 254,
  kMPAllocateInterlockAligned = 255
};



enum {

  kMPAllocateClearMask = 0x0001,
  kMPAllocateGloballyMask = 0x0002,
  kMPAllocateResidentMask = 0x0004,
  kMPAllocateNoGrowthMask = 0x0010,
  kMPAllocateNoCreateMask = 0x0020
};
# 1189 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern LogicalAddress
MPAllocateAligned(
  ByteCount size,
  UInt8 alignment,
  OptionBits options) ;
# 1209 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern LogicalAddress
MPAllocate(ByteCount size) ;
# 1226 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
MPFree(LogicalAddress object) ;
# 1243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern ByteCount
MPGetAllocatedBlockSize(LogicalAddress object) ;
# 1263 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
MPBlockCopy(
  LogicalAddress source,
  LogicalAddress destination,
  ByteCount size) ;
# 1283 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
MPBlockClear(
  LogicalAddress address,
  ByteCount size) ;
# 1302 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
MPDataToCode(
  LogicalAddress address,
  ByteCount size) ;
# 1354 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
enum {

  kMPTaskStateRegisters = 0,
  kMPTaskStateFPU = 1,
  kMPTaskStateVectors = 2,
  kMPTaskStateMachine = 3,
  kMPTaskState32BitMemoryException = 4,
  kMPTaskStateTaskInfo = 5
};



enum {

  kMPTaskPropagate = 0,
  kMPTaskResumeStep = 1,
  kMPTaskResumeBranch = 2,
  kMPTaskResumeMask = 0x0000,
  kMPTaskPropagateMask = 1 << kMPTaskPropagate,
  kMPTaskResumeStepMask = 1 << kMPTaskResumeStep,
  kMPTaskResumeBranchMask = 1 << kMPTaskResumeBranch
};



enum {

  kMPTaskBlocked = 0,
  kMPTaskReady = 1,
  kMPTaskRunning = 2
};

enum {

  kMPTaskInfoVersion = 3
};


struct MPTaskInfoVersion2 {
  PBVersion version;

  OSType name;

  OSType queueName;
  UInt16 runState;
  UInt16 lastCPU;
  UInt32 weight;

  MPProcessID processID;

  AbsoluteTime cpuTime;
  AbsoluteTime schedTime;
  AbsoluteTime creationTime;

  ItemCount codePageFaults;
  ItemCount dataPageFaults;
  ItemCount preemptions;

  MPCpuID cpuID;
};
typedef struct MPTaskInfoVersion2 MPTaskInfoVersion2;
struct MPTaskInfo {
  PBVersion version;

  OSType name;

  OSType queueName;
  UInt16 runState;
  UInt16 lastCPU;
  UInt32 weight;

  MPProcessID processID;

  AbsoluteTime cpuTime;
  AbsoluteTime schedTime;
  AbsoluteTime creationTime;

  ItemCount codePageFaults;
  ItemCount dataPageFaults;
  ItemCount preemptions;

  MPCpuID cpuID;
  MPOpaqueID blockedObject;
  MPAddressSpaceID spaceID;

  LogicalAddress stackBase;
  LogicalAddress stackLimit;
  LogicalAddress stackCurr;
};
typedef struct MPTaskInfo MPTaskInfo;
# 1467 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetExceptionHandler(
  MPTaskID task,
  MPQueueID exceptionQ) ;
# 1486 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPDisposeTaskException(
  MPTaskID task,
  OptionBits action) ;
# 1505 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPExtractTaskState(
  MPTaskID task,
  MPTaskStateKind kind,
  void * info) ;
# 1525 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPSetTaskState(
  MPTaskID task,
  MPTaskStateKind kind,
  void * info) ;
# 1545 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPThrowException(
  MPTaskID task,
  MPExceptionKind kind) ;






typedef UInt32 MPDebuggerLevel;
enum {
  kMPLowLevelDebugger = 0x00000000,
  kMPMidLevelDebugger = 0x10000000,
  kMPHighLevelDebugger = 0x20000000
};
# 1575 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPRegisterDebugger(
  MPQueueID queue,
  MPDebuggerLevel level) ;
# 1594 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern OSStatus
MPUnregisterDebugger(MPQueueID queue) ;
# 1608 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
typedef void * ( * MPRemoteProcedure)(void * parameter);

typedef UInt8 MPRemoteContext;
enum {
  kMPAnyRemoteContext = 0,
  kMPOwningProcessRemoteContext = 1,
  kMPInterruptRemoteContext = 2,
  kMPAsyncInterruptRemoteContext = 3
};
# 1678 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void *
MPRemoteCall(
  MPRemoteProcedure remoteProc,
  void * parameter,
  MPRemoteContext context) ;
# 1738 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void *
MPRemoteCallCFM(
  MPRemoteProcedure remoteProc,
  void * parameter,
  MPRemoteContext context) ;
# 1820 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern Boolean
_MPIsFullyInitialized(void) ;


typedef Boolean ( * MPIsFullyInitializedProc)(void);
# 1845 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern void
_MPLibraryVersion(
  const char ** versionCString,
  UInt32 * major,
  UInt32 * minor,
  UInt32 * release,
  UInt32 * revision) ;
# 1915 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
extern Boolean
_MPLibraryIsCompatible(
  const char * versionCString,
  UInt32 major,
  UInt32 minor,
  UInt32 release,
  UInt32 revision) ;
# 2002 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Multiprocessing.h" 3
#pragma options align=reset


}
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 2 3
# 54 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern "C" {


#pragma pack(push, 2)
# 67 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
enum {
  kCFragResourceType = 'cfrg',
  kCFragResourceID = 0,
  kCFragLibraryFileType = 'shlb',
  kCFragAllFileTypes = (long)0xFFFFFFFF
};


typedef OSType CFragArchitecture;
enum {

  kPowerPCCFragArch = 'pwpc',
  kMotorola68KCFragArch = 'm68k',
  kAnyCFragArch = 0x3F3F3F3F
};



enum {
  kCompiledCFragArch = kPowerPCCFragArch
};
# 98 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
typedef UInt32 CFragVersionNumber;
enum {
  kNullCFragVersion = 0,
  kWildcardCFragVersion = (long)0xFFFFFFFF
};


typedef UInt8 CFragUsage;
enum {

  kImportLibraryCFrag = 0,
  kApplicationCFrag = 1,
  kDropInAdditionCFrag = 2,
  kStubLibraryCFrag = 3,
  kWeakStubLibraryCFrag = 4
};


enum {
  kIsCompleteCFrag = 0,
  kFirstCFragUpdate = 1
};


enum {
  kCFragGoesToEOF = 0
};




typedef UInt8 CFragLocatorKind;
enum {

  kMemoryCFragLocator = 0,
  kDataForkCFragLocator = 1,
  kResourceCFragLocator = 2,
  kNamedFragmentCFragLocator = 4,
  kCFBundleCFragLocator = 5,
  kCFBundlePreCFragLocator = 6
};
# 153 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
union CFragUsage1Union {
  UInt32 appStackSize;
};
typedef union CFragUsage1Union CFragUsage1Union;
union CFragUsage2Union {
  SInt16 appSubdirID;
  UInt16 libFlags;
};
typedef union CFragUsage2Union CFragUsage2Union;
enum {

  kCFragLibUsageMapPrivatelyMask = 0x0001
};

union CFragWhere1Union {
  UInt32 spaceID;
};
typedef union CFragWhere1Union CFragWhere1Union;
union CFragWhere2Union {
  UInt16 reserved;
};
typedef union CFragWhere2Union CFragWhere2Union;
enum {
  kDefaultCFragNameLen = 16
};


struct CFragResourceMember {
  CFragArchitecture architecture;
  UInt16 reservedA;
  UInt8 reservedB;
  UInt8 updateLevel;
  CFragVersionNumber currentVersion;
  CFragVersionNumber oldDefVersion;
  CFragUsage1Union uUsage1;
  CFragUsage2Union uUsage2;
  CFragUsage usage;
  CFragLocatorKind where;
  UInt32 offset;
  UInt32 length;
  CFragWhere1Union uWhere1;
  CFragWhere2Union uWhere2;
  UInt16 extensionCount;
  UInt16 memberSize;
  unsigned char name[16];
};
typedef struct CFragResourceMember CFragResourceMember;
typedef CFragResourceMember * CFragResourceMemberPtr;
struct CFragResourceExtensionHeader {
  UInt16 extensionKind;
  UInt16 extensionSize;
};
typedef struct CFragResourceExtensionHeader CFragResourceExtensionHeader;
typedef CFragResourceExtensionHeader * CFragResourceExtensionHeaderPtr;
struct CFragResourceSearchExtension {
  CFragResourceExtensionHeader header;
  OSType libKind;
  unsigned char qualifiers[1];
};
typedef struct CFragResourceSearchExtension CFragResourceSearchExtension;
typedef CFragResourceSearchExtension * CFragResourceSearchExtensionPtr;
enum {
  kCFragResourceSearchExtensionKind = 0x30EE
};


struct CFragResource {
  UInt32 reservedA;
  UInt32 reservedB;
  UInt16 reservedC;
  UInt16 version;
  UInt32 reservedD;
  UInt32 reservedE;
  UInt32 reservedF;
  UInt32 reservedG;
  UInt16 reservedH;
  UInt16 memberCount;
  CFragResourceMember firstMember;
};
typedef struct CFragResource CFragResource;
typedef CFragResource * CFragResourcePtr;
typedef CFragResourcePtr * CFragResourceHandle;
enum {
  kCurrCFragResourceVersion = 1
};
# 259 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
typedef MPProcessID CFragContextID;
typedef struct OpaqueCFragConnectionID* CFragConnectionID;
typedef struct OpaqueCFragClosureID* CFragClosureID;
typedef struct OpaqueCFragContainerID* CFragContainerID;
typedef OptionBits CFragLoadOptions;
enum {

  kReferenceCFrag = 0x0001,
  kFindCFrag = 0x0002,
  kPrivateCFragCopy = 0x0005
};


enum {
  kUnresolvedCFragSymbolAddress = 0
};


typedef UInt8 CFragSymbolClass;
enum {

  kCodeCFragSymbol = 0,
  kDataCFragSymbol = 1,
  kTVectorCFragSymbol = 2,
  kTOCCFragSymbol = 3,
  kGlueCFragSymbol = 4
};
# 315 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
GetSharedLibrary(
  ConstStr63Param libName,
  CFragArchitecture archType,
  CFragLoadOptions options,
  CFragConnectionID * connID,
  Ptr * mainAddr,
  Str255 errMessage) ;
# 336 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
GetDiskFragment(
  const FSSpec * fileSpec,
  UInt32 offset,
  UInt32 length,
  ConstStr63Param fragName,
  CFragLoadOptions options,
  CFragConnectionID * connID,
  Ptr * mainAddr,
  Str255 errMessage) ;
# 359 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
GetMemFragment(
  void * memAddr,
  UInt32 length,
  ConstStr63Param fragName,
  CFragLoadOptions options,
  CFragConnectionID * connID,
  Ptr * mainAddr,
  Str255 errMessage) ;
# 381 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
CloseConnection(CFragConnectionID * connID) ;
# 396 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
FindSymbol(
  CFragConnectionID connID,
  ConstStr255Param symName,
  Ptr * symAddr,
  CFragSymbolClass * symClass) ;
# 415 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
CountSymbols(
  CFragConnectionID connID,
  long * symCount) ;
# 432 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
GetIndSymbol(
  CFragConnectionID connID,
  long symIndex,
  Str255 symName,
  Ptr * symAddr,
  CFragSymbolClass * symClass) ;
# 482 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
struct CFragSystem7MemoryLocator {
  LogicalAddress address;
  UInt32 length;
  Boolean inPlace;
  UInt8 reservedA;
  UInt16 reservedB;
};
typedef struct CFragSystem7MemoryLocator CFragSystem7MemoryLocator;
struct CFragSystem7DiskFlatLocator {
  FSSpec * fileSpec;
  UInt32 offset;
  UInt32 length;
};
typedef struct CFragSystem7DiskFlatLocator CFragSystem7DiskFlatLocator;

struct CFragSystem7SegmentedLocator {
  FSSpec * fileSpec;
  OSType rsrcType;
  SInt16 rsrcID;
  UInt16 reservedA;
};
typedef struct CFragSystem7SegmentedLocator CFragSystem7SegmentedLocator;




struct CFragCFBundleLocator {
  CFBundleRef fragmentBundle;
  UInt32 offset;
  UInt32 length;
};
typedef struct CFragCFBundleLocator CFragCFBundleLocator;
struct CFragSystem7Locator {
  SInt32 where;
  union {
    CFragSystem7DiskFlatLocator onDisk;
    CFragSystem7MemoryLocator inMem;
    CFragSystem7SegmentedLocator inSegs;
    CFragCFBundleLocator inBundle;
  } u;
};
typedef struct CFragSystem7Locator CFragSystem7Locator;
typedef CFragSystem7Locator * CFragSystem7LocatorPtr;
struct CFragSystem7InitBlock {
  CFragContextID contextID;
  CFragClosureID closureID;
  CFragConnectionID connectionID;
  CFragSystem7Locator fragLocator;
  StringPtr libName;
  UInt32 reservedA;
};
typedef struct CFragSystem7InitBlock CFragSystem7InitBlock;
typedef CFragSystem7InitBlock * CFragSystem7InitBlockPtr;
typedef CFragSystem7InitBlock CFragInitBlock;
typedef CFragSystem7InitBlockPtr CFragInitBlockPtr;

typedef OSErr ( * CFragInitFunction)(const CFragInitBlock * initBlock);
typedef void ( * CFragTermProcedure)(void);
# 550 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
extern OSErr
ConvertBundlePreLocator(CFragSystem7LocatorPtr initBlockLocator) ;
# 573 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
enum {
  kLoadCFrag = kReferenceCFrag
};
# 640 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CodeFragments.h" 3
#pragma pack(pop)


}
# 102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern "C" {


#pragma pack(push, 2)

typedef UInt32 FSAliasInfoBitmap;
enum {
  kFSAliasInfoNone = 0x00000000,
  kFSAliasInfoVolumeCreateDate = 0x00000001,
  kFSAliasInfoTargetCreateDate = 0x00000002,
  kFSAliasInfoFinderInfo = 0x00000004,
  kFSAliasInfoIsDirectory = 0x00000008,
  kFSAliasInfoIDs = 0x00000010,
  kFSAliasInfoFSInfo = 0x00000020,
  kFSAliasInfoVolumeFlags = 0x00000040
};

enum {
  rAliasType = 'alis'
};

enum {

  kARMMountVol = 0x00000001,
  kARMNoUI = 0x00000002,
  kARMMultVols = 0x00000008,
  kARMSearch = 0x00000100,
  kARMSearchMore = 0x00000200,
  kARMSearchRelFirst = 0x00000400,
  kARMTryFileIDFirst = 0x00000800
};

enum {

  asiZoneName = -3,
  asiServerName = -2,
  asiVolumeName = -1,
  asiAliasName = 0,
  asiParentName = 1
};


enum {
  kResolveAliasFileNoUI = 0x00000001,
  kResolveAliasTryFileIDFirst = 0x00000002
};
# 95 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
struct AliasRecord {
  OSType userType;
  unsigned short aliasSize;
};
typedef struct AliasRecord AliasRecord;


typedef AliasRecord * AliasPtr;
typedef AliasPtr * AliasHandle;

struct FSAliasInfo {
  UTCDateTime volumeCreateDate;
  UTCDateTime targetCreateDate;
  OSType fileType;
  OSType fileCreator;
  UInt32 parentDirID;
  UInt32 nodeID;
  UInt16 filesystemID;
  UInt16 signature;
  Boolean volumeIsBootVolume;
  Boolean volumeIsAutomounted;
  Boolean volumeIsEjectable;
  Boolean volumeHasPersistentFileIDs;
  Boolean isDirectory;
};
typedef struct FSAliasInfo FSAliasInfo;
typedef FSAliasInfo * FSAliasInfoPtr;

typedef short AliasInfoType;

typedef Boolean ( * AliasFilterProcPtr)(CInfoPBPtr cpbPtr, Boolean *quitFlag, Ptr myDataPtr);
typedef AliasFilterProcPtr AliasFilterUPP;
# 135 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern AliasFilterUPP
NewAliasFilterUPP(AliasFilterProcPtr userRoutine) ;
# 146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern void
DisposeAliasFilterUPP(AliasFilterUPP userUPP) ;
# 157 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern Boolean
InvokeAliasFilterUPP(
  CInfoPBPtr cpbPtr,
  Boolean * quitFlag,
  Ptr myDataPtr,
  AliasFilterUPP userUPP) ;



    inline AliasFilterUPP NewAliasFilterUPP(AliasFilterProcPtr userRoutine) { return userRoutine; }
    inline void DisposeAliasFilterUPP(AliasFilterUPP) { }
    inline Boolean InvokeAliasFilterUPP(CInfoPBPtr cpbPtr, Boolean * quitFlag, Ptr myDataPtr, AliasFilterUPP userUPP) { return (*userUPP)(cpbPtr, quitFlag, myDataPtr); }
# 178 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
typedef Boolean ( * FSAliasFilterProcPtr)(const FSRef *ref, Boolean *quitFlag, Ptr myDataPtr);
# 190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSNewAlias(
  const FSRef * fromFile,
  const FSRef * target,
  AliasHandle * inAlias) ;
# 208 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSNewAliasMinimal(
  const FSRef * target,
  AliasHandle * inAlias) ;
# 225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSIsAliasFile(
  const FSRef * fileRef,
  Boolean * aliasFileFlag,
  Boolean * folderFlag) ;
# 244 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSResolveAliasWithMountFlags(
  const FSRef * fromFile,
  AliasHandle inAlias,
  FSRef * target,
  Boolean * wasChanged,
  unsigned long mountFlags) ;
# 265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSResolveAlias(
  const FSRef * fromFile,
  AliasHandle alias,
  FSRef * target,
  Boolean * wasChanged) ;
# 285 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSResolveAliasFileWithMountFlags(
  FSRef * theRef,
  Boolean resolveAliasChains,
  Boolean * targetIsFolder,
  Boolean * wasAliased,
  unsigned long mountFlags) ;
# 306 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSResolveAliasFile(
  FSRef * theRef,
  Boolean resolveAliasChains,
  Boolean * targetIsFolder,
  Boolean * wasAliased) ;
# 326 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSFollowFinderAlias(
  FSRef * fromFile,
  AliasHandle alias,
  Boolean logon,
  FSRef * target,
  Boolean * wasChanged) ;
# 346 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSUpdateAlias(
  const FSRef * fromFile,
  const FSRef * target,
  AliasHandle alias,
  Boolean * wasChanged) ;
# 395 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSNewAliasUnicode(
  const FSRef * fromFile,
  const FSRef * targetParentRef,
  UniCharCount targetNameLength,
  const UniChar * targetName,
  AliasHandle * inAlias,
  Boolean * isDirectory) ;
# 441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSNewAliasMinimalUnicode(
  const FSRef * targetParentRef,
  UniCharCount targetNameLength,
  const UniChar * targetName,
  AliasHandle * inAlias,
  Boolean * isDirectory) ;
# 487 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSStatus
FSNewAliasFromPath(
  const char * fromFilePath,
  const char * targetPath,
  OptionBits flags,
  AliasHandle * inAlias,
  Boolean * isDirectory) ;
# 511 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSStatus
FSMatchAliasBulk(
  const FSRef * fromFile,
  unsigned long rulesMask,
  AliasHandle inAlias,
  short * aliasCount,
  FSRef * aliasList,
  Boolean * needsUpdate,
  FSAliasFilterProcPtr aliasFilter,
  void * yourDataPtr) ;
# 563 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSStatus
FSCopyAliasInfo(
  AliasHandle inAlias,
  HFSUniStr255 * targetName,
  HFSUniStr255 * volumeName,
  CFStringRef * pathString,
  FSAliasInfoBitmap * whichInfo,
  FSAliasInfo * info) ;
# 598 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern Size
GetAliasSize(AliasHandle alias) ;
# 625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSType
GetAliasUserType(AliasHandle alias) ;
# 652 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern void
SetAliasUserType(
  AliasHandle alias,
  OSType userType) ;
# 681 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern Size
GetAliasSizeFromPtr(const AliasRecord * alias) ;
# 708 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSType
GetAliasUserTypeFromPtr(const AliasRecord * alias) ;
# 735 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern void
SetAliasUserTypeWithPtr(
  AliasPtr alias,
  OSType userType) ;
# 762 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSMatchAlias(
  const FSRef * fromFile,
  unsigned long rulesMask,
  AliasHandle inAlias,
  short * aliasCount,
  FSRef * aliasList,
  Boolean * needsUpdate,
  AliasFilterUPP aliasFilter,
  void * yourDataPtr) ;
# 791 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FSMatchAliasNoUI(
  const FSRef * fromFile,
  unsigned long rulesMask,
  AliasHandle inAlias,
  short * aliasCount,
  FSRef * aliasList,
  Boolean * needsUpdate,
  AliasFilterUPP aliasFilter,
  void * yourDataPtr) ;
# 828 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
NewAlias(
  const FSSpec * fromFile,
  const FSSpec * target,
  AliasHandle * alias) ;
# 861 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
NewAliasMinimal(
  const FSSpec * target,
  AliasHandle * alias) ;
# 893 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
NewAliasMinimalFromFullPath(
  short fullPathLength,
  const void * fullPath,
  ConstStr32Param zoneName,
  ConstStr31Param serverName,
  AliasHandle * alias) ;
# 920 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
ResolveAlias(
  const FSSpec * fromFile,
  AliasHandle alias,
  FSSpec * target,
  Boolean * wasChanged) ;
# 949 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
GetAliasInfo(
  AliasHandle alias,
  AliasInfoType itemIndex,
  Str63 theString) ;
# 974 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
IsAliasFile(
  const FSSpec * fileFSSpec,
  Boolean * aliasFileFlag,
  Boolean * folderFlag) ;
# 1001 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
ResolveAliasWithMountFlags(
  const FSSpec * fromFile,
  AliasHandle alias,
  FSSpec * target,
  Boolean * wasChanged,
  unsigned long mountFlags) ;
# 1030 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
ResolveAliasFile(
  FSSpec * theSpec,
  Boolean resolveAliasChains,
  Boolean * targetIsFolder,
  Boolean * wasAliased) ;
# 1050 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
ResolveAliasFileWithMountFlags(
  FSSpec * theSpec,
  Boolean resolveAliasChains,
  Boolean * targetIsFolder,
  Boolean * wasAliased,
  unsigned long mountFlags) ;
# 1071 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
FollowFinderAlias(
  const FSSpec * fromFile,
  AliasHandle alias,
  Boolean logon,
  FSSpec * target,
  Boolean * wasChanged) ;
# 1102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
UpdateAlias(
  const FSSpec * fromFile,
  const FSSpec * target,
  AliasHandle alias,
  Boolean * wasChanged) ;
# 1129 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
MatchAlias(
  const FSSpec * fromFile,
  unsigned long rulesMask,
  AliasHandle alias,
  short * aliasCount,
  FSSpecArrayPtr aliasList,
  Boolean * needsUpdate,
  AliasFilterUPP aliasFilter,
  void * yourDataPtr) ;
# 1162 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
ResolveAliasFileWithMountFlagsNoUI(
  FSSpec * theSpec,
  Boolean resolveAliasChains,
  Boolean * targetIsFolder,
  Boolean * wasAliased,
  unsigned long mountFlags) ;
# 1188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Aliases.h" 3
extern OSErr
MatchAliasNoUI(
  const FSSpec * fromFile,
  unsigned long rulesMask,
  AliasHandle alias,
  short * aliasCount,
  FSSpecArrayPtr aliasList,
  Boolean * needsUpdate,
  AliasFilterUPP aliasFilter,
  void * yourDataPtr) ;






#pragma pack(pop)


}
# 106 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern "C" {


#pragma pack(push, 2)
# 48 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
typedef struct OpaqueLocaleRef* LocaleRef;
typedef UInt32 LocalePartMask;
enum {

  kLocaleLanguageMask = 1L << 0,
  kLocaleLanguageVariantMask = 1L << 1,
  kLocaleScriptMask = 1L << 2,
  kLocaleScriptVariantMask = 1L << 3,
  kLocaleRegionMask = 1L << 4,
  kLocaleRegionVariantMask = 1L << 5,
  kLocaleAllPartsMask = 0x0000003F
};

typedef FourCharCode LocaleOperationClass;

typedef FourCharCode LocaleOperationVariant;
struct LocaleAndVariant {
  LocaleRef locale;
  LocaleOperationVariant opVariant;
};
typedef struct LocaleAndVariant LocaleAndVariant;

typedef UInt32 LocaleNameMask;
enum {

  kLocaleNameMask = 1L << 0,
  kLocaleOperationVariantNameMask = 1L << 1,
  kLocaleAndVariantNameMask = 0x00000003
};
# 94 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleRefFromLangOrRegionCode(
  LangCode lang,
  RegionCode region,
  LocaleRef * locale) ;
# 109 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleRefFromLocaleString(
  const char localeString[],
  LocaleRef * locale) ;
# 123 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleRefGetPartString(
  LocaleRef locale,
  LocalePartMask partMask,
  ByteCount maxStringLen,
  char partString[]) ;
# 140 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleStringToLangAndRegionCodes(
  const char localeString[],
  LangCode * lang,
  RegionCode * region) ;
# 158 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleOperationCountLocales(
  LocaleOperationClass opClass,
  ItemCount * localeCount) ;
# 172 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleOperationGetLocales(
  LocaleOperationClass opClass,
  ItemCount maxLocaleCount,
  ItemCount * actualLocaleCount,
  LocaleAndVariant localeVariantList[]) ;
# 190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleGetName(
  LocaleRef locale,
  LocaleOperationVariant opVariant,
  LocaleNameMask nameMask,
  LocaleRef displayLocale,
  UniCharCount maxNameLen,
  UniCharCount * actualNameLen,
  UniChar displayName[]) ;
# 209 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleCountNames(
  LocaleRef locale,
  LocaleOperationVariant opVariant,
  LocaleNameMask nameMask,
  ItemCount * nameCount) ;
# 225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleGetIndName(
  LocaleRef locale,
  LocaleOperationVariant opVariant,
  LocaleNameMask nameMask,
  ItemCount nameIndex,
  UniCharCount maxNameLen,
  UniCharCount * actualNameLen,
  UniChar displayName[],
  LocaleRef * displayLocale) ;
# 256 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleGetRegionLanguageName(
  RegionCode region,
  Str255 languageName) ;
# 275 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleOperationGetName(
  LocaleOperationClass opClass,
  LocaleRef displayLocale,
  UniCharCount maxNameLen,
  UniCharCount * actualNameLen,
  UniChar displayName[]) ;
# 292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleOperationCountNames(
  LocaleOperationClass opClass,
  ItemCount * nameCount) ;
# 306 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacLocales.h" 3
extern OSStatus
LocaleOperationGetIndName(
  LocaleOperationClass opClass,
  ItemCount nameIndex,
  UniCharCount maxNameLen,
  UniCharCount * actualNameLen,
  UniChar displayName[],
  LocaleRef * displayLocale) ;



#pragma pack(pop)


}
# 110 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 1 3
# 39 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern "C" {
# 219 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
# 1 "/usr/include/AssertMacros.h" 1 3 4
# 220 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 2 3
# 301 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
enum {
  kBlessedBusErrorBait = 0x68F168F1
};
# 353 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern void
DebugAssert(
  OSType componentSignature,
  UInt32 options,
  const char * assertionString,
  const char * exceptionLabelString,
  const char * errorString,
  const char * fileName,
  long lineNumber,
  void * value) ;





enum {
  k68kInterruptLevelMask = 0x00000007,
  kInVBLTaskMask = 0x00000010,
  kInDeferredTaskMask = 0x00000020,
  kInSecondaryIntHandlerMask = 0x00000040,
  kInNestedInterruptMask = 0x00000080
};
# 397 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern UInt32
TaskLevel(void) ;





enum {
  kComponentDebugOption = 0
};

enum {
  kGetDebugOption = 1,
  kSetDebugOption = 2
};
# 438 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
typedef void ( * DebugComponentCallbackProcPtr)(SInt32 optionSelectorNum, UInt32 command, Boolean *optionSetting);
typedef DebugComponentCallbackProcPtr DebugComponentCallbackUPP;
# 470 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern OSStatus
NewDebugComponent(
  OSType componentSignature,
  ConstStr255Param componentName,
  DebugComponentCallbackUPP componentCallback) ;
# 508 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern OSStatus
NewDebugOption(
  OSType componentSignature,
  SInt32 optionSelectorNum,
  ConstStr255Param optionName) ;
# 539 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern OSStatus
DisposeDebugComponent(OSType componentSignature) ;
# 574 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern OSStatus
GetDebugComponentInfo(
  UInt32 itemIndex,
  OSType * componentSignature,
  Str255 componentName) ;
# 621 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern OSStatus
GetDebugOptionInfo(
  UInt32 itemIndex,
  OSType componentSignature,
  SInt32 * optionSelectorNum,
  Str255 optionName,
  Boolean * optionSetting) ;
# 659 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern OSStatus
SetDebugOptionValue(
  OSType componentSignature,
  SInt32 optionSelectorNum,
  Boolean newOptionSetting) ;
# 708 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
typedef void ( * DebugAssertOutputHandlerProcPtr)(OSType componentSignature, UInt32 options, const char *assertionString, const char *exceptionLabelString, const char *errorString, const char *fileName, long lineNumber, void *value, ConstStr255Param outputMsg);
typedef DebugAssertOutputHandlerProcPtr DebugAssertOutputHandlerUPP;
# 729 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern void
InstallDebugAssertOutputHandler(DebugAssertOutputHandlerUPP handler) ;
# 813 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern const char *
GetMacOSStatusErrorString(OSStatus err) ;
# 854 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern const char *
GetMacOSStatusCommentString(OSStatus err) ;
# 871 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern DebugComponentCallbackUPP
NewDebugComponentCallbackUPP(DebugComponentCallbackProcPtr userRoutine) ;
# 882 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern DebugAssertOutputHandlerUPP
NewDebugAssertOutputHandlerUPP(DebugAssertOutputHandlerProcPtr userRoutine) ;
# 893 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern void
DisposeDebugComponentCallbackUPP(DebugComponentCallbackUPP userUPP) ;
# 904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern void
DisposeDebugAssertOutputHandlerUPP(DebugAssertOutputHandlerUPP userUPP) ;
# 915 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern void
InvokeDebugComponentCallbackUPP(
  SInt32 optionSelectorNum,
  UInt32 command,
  Boolean * optionSetting,
  DebugComponentCallbackUPP userUPP) ;
# 930 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
extern void
InvokeDebugAssertOutputHandlerUPP(
  OSType componentSignature,
  UInt32 options,
  const char * assertionString,
  const char * exceptionLabelString,
  const char * errorString,
  const char * fileName,
  long lineNumber,
  void * value,
  ConstStr255Param outputMsg,
  DebugAssertOutputHandlerUPP userUPP) ;



    inline DebugComponentCallbackUPP NewDebugComponentCallbackUPP(DebugComponentCallbackProcPtr userRoutine) { return userRoutine; }
    inline DebugAssertOutputHandlerUPP NewDebugAssertOutputHandlerUPP(DebugAssertOutputHandlerProcPtr userRoutine) { return userRoutine; }
    inline void DisposeDebugComponentCallbackUPP(DebugComponentCallbackUPP) { }
    inline void DisposeDebugAssertOutputHandlerUPP(DebugAssertOutputHandlerUPP) { }
    inline void InvokeDebugComponentCallbackUPP(SInt32 optionSelectorNum, UInt32 command, Boolean * optionSetting, DebugComponentCallbackUPP userUPP) { (*userUPP)(optionSelectorNum, command, optionSetting); }
    inline void InvokeDebugAssertOutputHandlerUPP(OSType componentSignature, UInt32 options, const char * assertionString, const char * exceptionLabelString, const char * errorString, const char * fileName, long lineNumber, void * value, ConstStr255Param outputMsg, DebugAssertOutputHandlerUPP userUPP) { (*userUPP)(componentSignature, options, assertionString, exceptionLabelString, errorString, fileName, lineNumber, value, outputMsg); }
# 963 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h" 3
}
# 114 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern "C" {
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern short
PLstrcmp(
  ConstStr255Param str1,
  ConstStr255Param str2) ;
# 127 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern short
PLstrncmp(
  ConstStr255Param str1,
  ConstStr255Param str2,
  short num) ;
# 170 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern StringPtr
PLstrcpy(
  StringPtr dest,
  ConstStr255Param source) ;
# 218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern StringPtr
PLstrncpy(
  StringPtr dest,
  ConstStr255Param source,
  short num) ;
# 265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern StringPtr
PLstrcat(
  StringPtr str,
  ConstStr255Param append) ;
# 315 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern StringPtr
PLstrncat(
  StringPtr str1,
  ConstStr255Param append,
  short num) ;
# 358 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern Ptr
PLstrchr(
  ConstStr255Param str1,
  short ch1) ;
# 400 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern Ptr
PLstrrchr(
  ConstStr255Param str1,
  short ch1) ;
# 444 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern Ptr
PLstrpbrk(
  ConstStr255Param str1,
  ConstStr255Param charSet) ;
# 490 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern short
PLstrspn(
  ConstStr255Param str1,
  ConstStr255Param charSet) ;
# 534 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern Ptr
PLstrstr(
  ConstStr255Param str1,
  ConstStr255Param searchStr) ;
# 571 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern short
PLstrlen(ConstStr255Param str) ;
# 614 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PLStringFuncs.h" 3
extern short
PLpos(
  ConstStr255Param str1,
  ConstStr255Param searchStr) ;





}
# 118 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern "C" {
# 77 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern Boolean
CompareAndSwap(
  UInt32 oldValue,
  UInt32 newValue,
  UInt32 * address) ;
# 117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern Boolean
TestAndClear(
  UInt32 bit,
  UInt8 * address) ;
# 156 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern Boolean
TestAndSet(
  UInt32 bit,
  UInt8 * address) ;
# 191 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt8
IncrementAtomic8(SInt8 * address) ;
# 224 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt8
DecrementAtomic8(SInt8 * address) ;
# 260 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt8
AddAtomic8(
  SInt32 amount,
  SInt8 * address) ;
# 299 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt8
BitAndAtomic8(
  UInt32 mask,
  UInt8 * address) ;
# 338 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt8
BitOrAtomic8(
  UInt32 mask,
  UInt8 * address) ;
# 377 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt8
BitXorAtomic8(
  UInt32 mask,
  UInt8 * address) ;
# 412 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt16
IncrementAtomic16(SInt16 * address) ;
# 445 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt16
DecrementAtomic16(SInt16 * address) ;
# 481 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt16
AddAtomic16(
  SInt32 amount,
  SInt16 * address) ;
# 520 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt16
BitAndAtomic16(
  UInt32 mask,
  UInt16 * address) ;
# 559 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt16
BitOrAtomic16(
  UInt32 mask,
  UInt16 * address) ;
# 598 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt16
BitXorAtomic16(
  UInt32 mask,
  UInt16 * address) ;
# 633 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt32
IncrementAtomic(SInt32 * address) ;
# 666 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt32
DecrementAtomic(SInt32 * address) ;
# 702 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern SInt32
AddAtomic(
  SInt32 amount,
  SInt32 * address) ;
# 741 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt32
BitAndAtomic(
  UInt32 mask,
  UInt32 * address) ;
# 780 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt32
BitOrAtomic(
  UInt32 mask,
  UInt32 * address) ;
# 819 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverSynchronization.h" 3
extern UInt32
BitXorAtomic(
  UInt32 mask,
  UInt32 * address) ;




}
# 122 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
extern "C" {


#pragma options align=power


typedef struct OpaqueAreaID* AreaID;
# 58 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
struct MachineInformationPowerPC {
  UnsignedWide CTR;
  UnsignedWide LR;
  UnsignedWide PC;
  unsigned long CRRegister;
  unsigned long XER;
  unsigned long MSR;
  unsigned long MQ;
  unsigned long ExceptKind;
  unsigned long DSISR;
  UnsignedWide DAR;
  UnsignedWide Reserved;
};
typedef struct MachineInformationPowerPC MachineInformationPowerPC;
struct RegisterInformationPowerPC {
  UnsignedWide R0;
  UnsignedWide R1;
  UnsignedWide R2;
  UnsignedWide R3;
  UnsignedWide R4;
  UnsignedWide R5;
  UnsignedWide R6;
  UnsignedWide R7;
  UnsignedWide R8;
  UnsignedWide R9;
  UnsignedWide R10;
  UnsignedWide R11;
  UnsignedWide R12;
  UnsignedWide R13;
  UnsignedWide R14;
  UnsignedWide R15;
  UnsignedWide R16;
  UnsignedWide R17;
  UnsignedWide R18;
  UnsignedWide R19;
  UnsignedWide R20;
  UnsignedWide R21;
  UnsignedWide R22;
  UnsignedWide R23;
  UnsignedWide R24;
  UnsignedWide R25;
  UnsignedWide R26;
  UnsignedWide R27;
  UnsignedWide R28;
  UnsignedWide R29;
  UnsignedWide R30;
  UnsignedWide R31;
};
typedef struct RegisterInformationPowerPC RegisterInformationPowerPC;
struct FPUInformationPowerPC {
  UnsignedWide Registers[32];
  unsigned long FPSCR;
  unsigned long Reserved;
};
typedef struct FPUInformationPowerPC FPUInformationPowerPC;
union Vector128 {



  unsigned long l[4];
  unsigned short s[8];
  unsigned char c[16];
};
typedef union Vector128 Vector128;
struct VectorInformationPowerPC {
  Vector128 Registers[32];
  Vector128 VSCR;
  UInt32 VRsave;
};
typedef struct VectorInformationPowerPC VectorInformationPowerPC;

enum {
  kWriteReference = 0,
  kReadReference = 1,
  kFetchReference = 2,
  writeReference = kWriteReference,
  readReference = kReadReference,
  fetchReference = kFetchReference
};


typedef unsigned long MemoryReferenceKind;
struct MemoryExceptionInformation {
  AreaID theArea;
  LogicalAddress theAddress;
  OSStatus theError;
  MemoryReferenceKind theReference;
};
typedef struct MemoryExceptionInformation MemoryExceptionInformation;
enum {
  kUnknownException = 0,
  kIllegalInstructionException = 1,
  kTrapException = 2,
  kAccessException = 3,
  kUnmappedMemoryException = 4,
  kExcludedMemoryException = 5,
  kReadOnlyMemoryException = 6,
  kUnresolvablePageFaultException = 7,
  kPrivilegeViolationException = 8,
  kTraceException = 9,
  kInstructionBreakpointException = 10,
  kDataBreakpointException = 11,
  kIntegerException = 12,
  kFloatingPointException = 13,
  kStackOverflowException = 14,
  kTaskTerminationException = 15,
  kTaskCreationException = 16,
  kDataAlignmentException = 17
};
# 192 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
typedef unsigned long ExceptionKind;
union ExceptionInfo {
  MemoryExceptionInformation * memoryInfo;
};
typedef union ExceptionInfo ExceptionInfo;
struct ExceptionInformationPowerPC {
  ExceptionKind theKind;
  MachineInformationPowerPC * machineState;
  RegisterInformationPowerPC * registerImage;
  FPUInformationPowerPC * FPUImage;
  ExceptionInfo info;
  VectorInformationPowerPC * vectorImage;
};
typedef struct ExceptionInformationPowerPC ExceptionInformationPowerPC;

typedef ExceptionInformationPowerPC ExceptionInformation;
typedef MachineInformationPowerPC MachineInformation;
typedef RegisterInformationPowerPC RegisterInformation;
typedef FPUInformationPowerPC FPUInformation;
typedef VectorInformationPowerPC VectorInformation;
# 347 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
typedef OSStatus ( * ExceptionHandlerProcPtr)(ExceptionInformation * theException);
typedef ExceptionHandlerProcPtr ExceptionHandlerUPP;
# 357 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
extern ExceptionHandlerUPP
NewExceptionHandlerUPP(ExceptionHandlerProcPtr userRoutine) ;
# 368 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
extern void
DisposeExceptionHandlerUPP(ExceptionHandlerUPP userUPP) ;
# 379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
extern OSStatus
InvokeExceptionHandlerUPP(
  ExceptionInformation * theException,
  ExceptionHandlerUPP userUPP) ;



    inline ExceptionHandlerUPP NewExceptionHandlerUPP(ExceptionHandlerProcPtr userRoutine) { return userRoutine; }
    inline void DisposeExceptionHandlerUPP(ExceptionHandlerUPP) { }
    inline OSStatus InvokeExceptionHandlerUPP(ExceptionInformation * theException, ExceptionHandlerUPP userUPP) { return (*userUPP)(theException); }
# 404 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
typedef ExceptionHandlerUPP ExceptionHandlerTPP;
typedef ExceptionHandlerTPP ExceptionHandler;
# 415 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MachineExceptions.h" 3
extern ExceptionHandlerTPP InstallExceptionHandler(ExceptionHandlerTPP theHandler) ;




#pragma options align=reset


}
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 2 3
# 48 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern "C" {


#pragma options align=power


enum {
  durationMicrosecond = -1L,
  durationMillisecond = 1L,
  durationSecond = 1000L,
  durationMinute = 60000L,
  durationHour = 3600000L,
  durationDay = 86400000L,
  durationNoWait = 0L,
  durationForever = 0x7FFFFFFF
};


typedef UnsignedWide Nanoseconds;
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
UpTime(void) ;
# 98 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern Nanoseconds
AbsoluteToNanoseconds(AbsoluteTime absoluteTime) ;
# 110 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern Duration
AbsoluteToDuration(AbsoluteTime absoluteTime) ;
# 122 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
NanosecondsToAbsolute(Nanoseconds nanoseconds) ;
# 134 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
DurationToAbsolute(Duration duration) ;
# 146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
AddAbsoluteToAbsolute(
  AbsoluteTime absoluteTime1,
  AbsoluteTime absoluteTime2) ;
# 160 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
SubAbsoluteFromAbsolute(
  AbsoluteTime leftAbsoluteTime,
  AbsoluteTime rightAbsoluteTime) ;
# 174 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
AddNanosecondsToAbsolute(
  Nanoseconds nanoseconds,
  AbsoluteTime absoluteTime) ;
# 188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
AddDurationToAbsolute(
  Duration duration,
  AbsoluteTime absoluteTime) ;
# 202 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
SubNanosecondsFromAbsolute(
  Nanoseconds nanoseconds,
  AbsoluteTime absoluteTime) ;
# 216 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern AbsoluteTime
SubDurationFromAbsolute(
  Duration duration,
  AbsoluteTime absoluteTime) ;
# 230 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern Nanoseconds
AbsoluteDeltaToNanoseconds(
  AbsoluteTime leftAbsoluteTime,
  AbsoluteTime rightAbsoluteTime) ;
# 244 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern Duration
AbsoluteDeltaToDuration(
  AbsoluteTime leftAbsoluteTime,
  AbsoluteTime rightAbsoluteTime) ;
# 258 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern Nanoseconds
DurationToNanoseconds(Duration theDuration) ;
# 270 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/DriverServices.h" 3
extern Duration
NanosecondsToDuration(Nanoseconds theNanoseconds) ;





#pragma options align=reset


}
# 126 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3







# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 1 3
# 41 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern "C" {


#pragma pack(push, 2)
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
struct NumFormatString {
  UInt8 fLength;
  UInt8 fVersion;
  char data[254];
};
typedef struct NumFormatString NumFormatString;
typedef NumFormatString NumFormatStringRec;
typedef short FormatStatus;
enum {
  fVNumber = 0
};

typedef SInt8 FormatClass;
enum {
  fPositive = 0,
  fNegative = 1,
  fZero = 2
};

typedef SInt8 FormatResultType;
enum {
  fFormatOK = 0,
  fBestGuess = 1,
  fOutOfSynch = 2,
  fSpuriousChars = 3,
  fMissingDelimiter = 4,
  fExtraDecimal = 5,
  fMissingLiteral = 6,
  fExtraExp = 7,
  fFormatOverflow = 8,
  fFormStrIsNAN = 9,
  fBadPartsTable = 10,
  fExtraPercent = 11,
  fExtraSeparator = 12,
  fEmptyFormatString = 13
};

struct FVector {
  short start;
  short length;
};
typedef struct FVector FVector;

typedef FVector TripleInt[3];
# 124 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern void
numtostring(
  long theNum,
  char * theString) ;
# 145 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern void
StringToNum(
  ConstStr255Param theString,
  long * theNum) ;
# 166 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern void
NumToString(
  long theNum,
  Str255 theString) ;
# 187 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern FormatStatus
ExtendedToString(
  const extended80 * x,
  const NumFormatString * myCanonical,
  const NumberParts * partsTable,
  Str255 outString) ;
# 210 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern FormatStatus
StringToExtended(
  ConstStr255Param source,
  const NumFormatString * myCanonical,
  const NumberParts * partsTable,
  extended80 * x) ;
# 233 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern FormatStatus
StringToFormatRec(
  ConstStr255Param inString,
  const NumberParts * partsTable,
  NumFormatString * outString) ;
# 255 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
extern FormatStatus
FormatRecToString(
  const NumFormatString * myCanonical,
  const NumberParts * partsTable,
  Str255 outString,
  TripleInt positions) ;
# 276 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/NumberFormatting.h" 3
#pragma pack(pop)


}
# 134 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3







# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 1 3
# 43 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern "C" {
# 77 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
enum {

  systemCurLang = -2,
  systemDefLang = -3,
  currentCurLang = -4,
  currentDefLang = -5,
  scriptCurLang = -6,
  scriptDefLang = -7
};


enum {
  iuSystemCurLang = systemCurLang,
  iuSystemDefLang = systemDefLang,
  iuCurrentCurLang = currentCurLang,
  iuCurrentDefLang = currentDefLang,
  iuScriptCurLang = scriptCurLang,
  iuScriptDefLang = scriptDefLang
};
# 119 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
ReplaceText(
  Handle baseText,
  Handle substitutionText,
  Str15 key) ;
# 141 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
ScriptOrder(
  ScriptCode script1,
  ScriptCode script2) ;
# 165 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
CompareString(
  ConstStr255Param aStr,
  ConstStr255Param bStr,
  Handle itl2Handle) ;
# 187 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
IdenticalString(
  ConstStr255Param aStr,
  ConstStr255Param bStr,
  Handle itl2Handle) ;
# 209 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
StringOrder(
  ConstStr255Param aStr,
  ConstStr255Param bStr,
  ScriptCode aScript,
  ScriptCode bScript,
  LangCode aLang,
  LangCode bLang) ;
# 234 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
CompareText(
  const void * aPtr,
  const void * bPtr,
  short aLen,
  short bLen,
  Handle itl2Handle) ;
# 258 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
IdenticalText(
  const void * aPtr,
  const void * bPtr,
  short aLen,
  short bLen,
  Handle itl2Handle) ;
# 282 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
TextOrder(
  const void * aPtr,
  const void * bPtr,
  short aLen,
  short bLen,
  ScriptCode aScript,
  ScriptCode bScript,
  LangCode aLang,
  LangCode bLang) ;
# 309 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
LanguageOrder(
  LangCode language1,
  LangCode language2) ;
# 525 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
RelString(
  ConstStr255Param str1,
  ConstStr255Param str2,
  Boolean caseSensitive,
  Boolean diacSensitive) ;
# 548 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern Boolean
EqualString(
  ConstStr255Param str1,
  ConstStr255Param str2,
  Boolean caseSensitive,
  Boolean diacSensitive) ;
# 571 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
extern short
relstring(
  const char * str1,
  const char * str2,
  Boolean caseSensitive,
  Boolean diacSensitive) ;
# 593 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/StringCompare.h" 3
}
# 142 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 1 3
# 44 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern "C" {


#pragma pack(push, 2)
# 79 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
struct ScriptRunStatus {
  SInt8 script;
  SInt8 runVariant;
};
typedef struct ScriptRunStatus ScriptRunStatus;
struct BreakTable {
  char charTypes[256];
  short tripleLength;
  short triples[1];
};
typedef struct BreakTable BreakTable;
typedef BreakTable * BreakTablePtr;
struct NBreakTable {
  SInt8 flags1;
  SInt8 flags2;
  short version;
  short classTableOff;
  short auxCTableOff;
  short backwdTableOff;
  short forwdTableOff;
  short doBackup;
  short length;
  char charTypes[256];
  short tables[1];
};
typedef struct NBreakTable NBreakTable;
typedef NBreakTable * NBreakTablePtr;
# 118 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern long
Munger(
  Handle h,
  long offset,
  const void * ptr1,
  long len1,
  const void * ptr2,
  long len2) ;
# 144 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern StringHandle
NewString(ConstStr255Param theString) ;
# 163 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
SetString(
  StringHandle theString,
  ConstStr255Param strNew) ;
# 184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern StringHandle
GetString(short stringID) ;
# 206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
GetIndString(
  Str255 theString,
  short strListID,
  short itemIndex) ;
# 271 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
FindWordBreaks(
  Ptr textPtr,
  short textLength,
  short offset,
  Boolean leadingEdge,
  BreakTablePtr breaks,
  OffsetTable offsets,
  ScriptCode script) ;
# 297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
LowercaseText(
  Ptr textPtr,
  short len,
  ScriptCode script) ;
# 319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
UppercaseText(
  Ptr textPtr,
  short len,
  ScriptCode script) ;
# 341 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
StripDiacritics(
  Ptr textPtr,
  short len,
  ScriptCode script) ;
# 363 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
UppercaseStripDiacritics(
  Ptr textPtr,
  short len,
  ScriptCode script) ;
# 384 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern ScriptRunStatus
FindScriptRun(
  Ptr textPtr,
  long textLen,
  long * lenUsed) ;
# 493 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
UpperString(
  Str255 theString,
  Boolean diacSensitive) ;
# 517 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
upperstring(
  char * theString,
  Boolean diacSensitive) ;
# 575 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
c2pstrcpy(
  Str255 dst,
  const char * src) ;
# 596 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
p2cstrcpy(
  char * dst,
  ConstStr255Param src) ;
# 617 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
CopyPascalStringToC(
  ConstStr255Param src,
  char * dst) ;
# 638 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern void
CopyCStringToPascal(
  const char * src,
  Str255 dst) ;
# 655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern StringPtr
c2pstr(char * aStr) ;
# 667 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern StringPtr
C2PStr(Ptr cString) ;
# 679 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern char *
p2cstr(StringPtr aStr) ;
# 691 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
extern Ptr
P2CStr(StringPtr pString) ;
# 717 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextUtils.h" 3
#pragma pack(pop)


}
# 146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern "C" {


#pragma pack(push, 2)
# 78 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern Boolean
BitTst(
  const void * bytePtr,
  long bitNum) ;
# 92 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern void
BitSet(
  void * bytePtr,
  long bitNum) ;
# 106 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern void
BitClr(
  void * bytePtr,
  long bitNum) ;
# 120 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern long
BitAnd(
  long value1,
  long value2) ;
# 134 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern long
BitOr(
  long value1,
  long value2) ;
# 148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern long
BitXor(
  long value1,
  long value2) ;
# 162 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern long
BitNot(long value) ;
# 174 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/ToolUtils.h" 3
extern long
BitShift(
  long value,
  short count) ;






#pragma pack(pop)


}
# 150 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 1 3
# 49 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern "C" {


#pragma pack(push, 2)
# 79 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
typedef UInt16 UCKeyOutput;
typedef UInt16 UCKeyCharSeq;
enum {
  kUCKeyOutputStateIndexMask = 0x4000,
  kUCKeyOutputSequenceIndexMask = 0x8000,
  kUCKeyOutputTestForIndexMask = 0xC000,
  kUCKeyOutputGetIndexMask = 0x3FFF
};
# 101 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
struct UCKeyStateRecord {
  UCKeyCharSeq stateZeroCharData;
  UInt16 stateZeroNextState;
  UInt16 stateEntryCount;
  UInt16 stateEntryFormat;


  UInt32 stateEntryData[1];
};
typedef struct UCKeyStateRecord UCKeyStateRecord;




enum {
  kUCKeyStateEntryTerminalFormat = 0x0001,
  kUCKeyStateEntryRangeFormat = 0x0002
};






struct UCKeyStateEntryTerminal {
  UInt16 curState;
  UCKeyCharSeq charData;
};
typedef struct UCKeyStateEntryTerminal UCKeyStateEntryTerminal;







struct UCKeyStateEntryRange {
  UInt16 curStateStart;
  UInt8 curStateRange;
  UInt8 deltaMultiplier;
  UCKeyCharSeq charData;
  UInt16 nextState;
};
typedef struct UCKeyStateEntryRange UCKeyStateEntryRange;
# 157 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
struct UCKeyboardTypeHeader {
  UInt32 keyboardTypeFirst;
  UInt32 keyboardTypeLast;
  UInt32 keyModifiersToTableNumOffset;
  UInt32 keyToCharTableIndexOffset;
  UInt32 keyStateRecordsIndexOffset;
  UInt32 keyStateTerminatorsOffset;
  UInt32 keySequenceDataIndexOffset;
};
typedef struct UCKeyboardTypeHeader UCKeyboardTypeHeader;
struct UCKeyboardLayout {

  UInt16 keyLayoutHeaderFormat;
  UInt16 keyLayoutDataVersion;
  UInt32 keyLayoutFeatureInfoOffset;
  UInt32 keyboardTypeCount;
  UCKeyboardTypeHeader keyboardTypeList[1];
};
typedef struct UCKeyboardLayout UCKeyboardLayout;

struct UCKeyLayoutFeatureInfo {
  UInt16 keyLayoutFeatureInfoFormat;
  UInt16 reserved;
  UInt32 maxOutputStringLength;
};
typedef struct UCKeyLayoutFeatureInfo UCKeyLayoutFeatureInfo;

struct UCKeyModifiersToTableNum {
  UInt16 keyModifiersToTableNumFormat;
  UInt16 defaultTableNum;
  UInt32 modifiersCount;
  UInt8 tableNum[1];


};
typedef struct UCKeyModifiersToTableNum UCKeyModifiersToTableNum;

struct UCKeyToCharTableIndex {
  UInt16 keyToCharTableIndexFormat;
  UInt16 keyToCharTableSize;
  UInt32 keyToCharTableCount;
  UInt32 keyToCharTableOffsets[1];






};
typedef struct UCKeyToCharTableIndex UCKeyToCharTableIndex;

struct UCKeyStateRecordsIndex {
  UInt16 keyStateRecordsIndexFormat;
  UInt16 keyStateRecordCount;
  UInt32 keyStateRecordOffsets[1];




};
typedef struct UCKeyStateRecordsIndex UCKeyStateRecordsIndex;

struct UCKeyStateTerminators {
  UInt16 keyStateTerminatorsFormat;
  UInt16 keyStateTerminatorCount;
  UCKeyCharSeq keyStateTerminators[1];



};
typedef struct UCKeyStateTerminators UCKeyStateTerminators;

struct UCKeySequenceDataIndex {
  UInt16 keySequenceDataIndexFormat;
  UInt16 charSequenceCount;
  UInt16 charSequenceOffsets[1];





};
typedef struct UCKeySequenceDataIndex UCKeySequenceDataIndex;



enum {
  kUCKeyLayoutHeaderFormat = 0x1002,
  kUCKeyLayoutFeatureInfoFormat = 0x2001,
  kUCKeyModifiersToTableNumFormat = 0x3001,
  kUCKeyToCharTableIndexFormat = 0x4001,
  kUCKeyStateRecordsIndexFormat = 0x5001,
  kUCKeyStateTerminatorsFormat = 0x6001,
  kUCKeySequenceDataIndexFormat = 0x7001
};
# 260 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
enum {
  kUCKeyActionDown = 0,
  kUCKeyActionUp = 1,
  kUCKeyActionAutoKey = 2,
  kUCKeyActionDisplay = 3
};







enum {
  kUCKeyTranslateNoDeadKeysBit = 0
};

enum {
  kUCKeyTranslateNoDeadKeysMask = 1L << kUCKeyTranslateNoDeadKeysBit
};
# 288 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
enum {
  kUnicodeCollationClass = 'ucol'
};

typedef struct OpaqueCollatorRef* CollatorRef;
typedef UInt32 UCCollateOptions;
enum {

  kUCCollateComposeInsensitiveMask = 1L << 1,
  kUCCollateWidthInsensitiveMask = 1L << 2,
  kUCCollateCaseInsensitiveMask = 1L << 3,
  kUCCollateDiacritInsensitiveMask = 1L << 4,
  kUCCollatePunctuationSignificantMask = 1L << 15,
  kUCCollateDigitsOverrideMask = 1L << 16,
  kUCCollateDigitsAsNumberMask = 1L << 17
};

enum {
  kUCCollateStandardOptions = kUCCollateComposeInsensitiveMask | kUCCollateWidthInsensitiveMask
};





enum {
  kUCCollateTypeHFSExtended = 1
};


enum {
  kUCCollateTypeSourceMask = 0x000000FF,
  kUCCollateTypeShiftBits = 24
};

enum {
  kUCCollateTypeMask = kUCCollateTypeSourceMask << kUCCollateTypeShiftBits
};


typedef UInt32 UCCollationValue;
# 340 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
typedef struct OpaqueUCTypeSelectRef* UCTypeSelectRef;




typedef SInt32 UCTypeSelectCompareResult;




typedef UInt16 UCTSWalkDirection;
enum {
  kUCTSDirectionNext = 0,
  kUCTSDirectionPrevious = 1
};
# 372 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
typedef UInt16 UCTypeSelectOptions;
enum {
  kUCTSOptionsNoneMask = 0,
  kUCTSOptionsReleaseStringMask = 1,
  kUCTSOptionsDataIsOrderedMask = 2
};






typedef Boolean ( * IndexToUCStringProcPtr)(UInt32 index, void *listDataPtr, void *refcon, CFStringRef *outString, UCTypeSelectOptions *tsOptions);

typedef IndexToUCStringProcPtr IndexToUCStringUPP;
# 395 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern IndexToUCStringUPP
NewIndexToUCStringUPP(IndexToUCStringProcPtr userRoutine) ;
# 406 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern void
DisposeIndexToUCStringUPP(IndexToUCStringUPP userUPP) ;
# 417 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern Boolean
InvokeIndexToUCStringUPP(
  UInt32 index,
  void * listDataPtr,
  void * refcon,
  CFStringRef * outString,
  UCTypeSelectOptions * tsOptions,
  IndexToUCStringUPP userUPP) ;



    inline IndexToUCStringUPP NewIndexToUCStringUPP(IndexToUCStringProcPtr userRoutine) { return userRoutine; }
    inline void DisposeIndexToUCStringUPP(IndexToUCStringUPP) { }
    inline Boolean InvokeIndexToUCStringUPP(UInt32 index, void * listDataPtr, void * refcon, CFStringRef * outString, UCTypeSelectOptions * tsOptions, IndexToUCStringUPP userUPP) { return (*userUPP)(index, listDataPtr, refcon, outString, tsOptions); }
# 442 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
enum {
  kUCTypeSelectMaxListSize = (UInt32)0xFFFFFFFF
};
# 454 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
enum {
  kUnicodeTextBreakClass = 'ubrk'
};

typedef struct OpaqueTextBreakLocatorRef* TextBreakLocatorRef;







typedef UInt32 UCTextBreakType;
enum {






  kUCTextBreakCharMask = 1L << 0,
# 485 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
  kUCTextBreakClusterMask = 1L << 2,






  kUCTextBreakWordMask = 1L << 4,
  kUCTextBreakLineMask = 1L << 6,






  kUCTextBreakParagraphMask = 1L << 8
};

typedef UInt32 UCTextBreakOptions;
enum {
  kUCTextBreakLeadingEdgeMask = 1L << 0,
  kUCTextBreakGoBackwardsMask = 1L << 1,
  kUCTextBreakIterateMask = 1L << 2
};
# 525 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCKeyTranslate(
  const UCKeyboardLayout * keyLayoutPtr,
  UInt16 virtualKeyCode,
  UInt16 keyAction,
  UInt32 modifierKeyState,
  UInt32 keyboardType,
  OptionBits keyTranslateOptions,
  UInt32 * deadKeyState,
  UniCharCount maxStringLength,
  UniCharCount * actualStringLength,
  UniChar unicodeString[]) ;
# 549 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCCreateCollator(
  LocaleRef locale,
  LocaleOperationVariant opVariant,
  UCCollateOptions options,
  CollatorRef * collatorRef) ;
# 565 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCGetCollationKey(
  CollatorRef collatorRef,
  const UniChar * textPtr,
  UniCharCount textLength,
  ItemCount maxKeySize,
  ItemCount * actualKeySize,
  UCCollationValue collationKey[]) ;
# 583 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCCompareCollationKeys(
  const UCCollationValue * key1Ptr,
  ItemCount key1Length,
  const UCCollationValue * key2Ptr,
  ItemCount key2Length,
  Boolean * equivalent,
  SInt32 * order) ;
# 601 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCCompareText(
  CollatorRef collatorRef,
  const UniChar * text1Ptr,
  UniCharCount text1Length,
  const UniChar * text2Ptr,
  UniCharCount text2Length,
  Boolean * equivalent,
  SInt32 * order) ;
# 620 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCDisposeCollator(CollatorRef * collatorRef) ;
# 634 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCCompareTextDefault(
  UCCollateOptions options,
  const UniChar * text1Ptr,
  UniCharCount text1Length,
  const UniChar * text2Ptr,
  UniCharCount text2Length,
  Boolean * equivalent,
  SInt32 * order) ;
# 656 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCCompareTextNoLocale(
  UCCollateOptions options,
  const UniChar * text1Ptr,
  UniCharCount text1Length,
  const UniChar * text2Ptr,
  UniCharCount text2Length,
  Boolean * equivalent,
  SInt32 * order) ;
# 678 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCCreateTextBreakLocator(
  LocaleRef locale,
  LocaleOperationVariant opVariant,
  UCTextBreakType breakTypes,
  TextBreakLocatorRef * breakRef) ;
# 694 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCFindTextBreak(
  TextBreakLocatorRef breakRef,
  UCTextBreakType breakType,
  UCTextBreakOptions options,
  const UniChar * textPtr,
  UniCharCount textLength,
  UniCharArrayOffset startOffset,
  UniCharArrayOffset * breakOffset) ;
# 713 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCDisposeTextBreakLocator(TextBreakLocatorRef * breakRef) ;
# 758 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectCreateSelector(
  LocaleRef locale,
  LocaleOperationVariant opVariant,
  UCCollateOptions options,
  UCTypeSelectRef * newSelector) ;
# 787 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectFlushSelectorData(UCTypeSelectRef ref) ;
# 814 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectReleaseSelector(UCTypeSelectRef * ref) ;
# 852 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern Boolean
UCTypeSelectWouldResetBuffer(
  UCTypeSelectRef inRef,
  CFStringRef inText,
  double inEventTime) ;
# 904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectAddKeyToSelector(
  UCTypeSelectRef inRef,
  CFStringRef inText,
  double inEventTime,
  Boolean * updateFlag) ;
# 952 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectCompare(
  UCTypeSelectRef ref,
  CFStringRef inText,
  UCTypeSelectCompareResult * result) ;
# 1018 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectFindItem(
  UCTypeSelectRef ref,
  UInt32 listSize,
  void * listDataPtr,
  void * refcon,
  IndexToUCStringUPP userUPP,
  UInt32 * closestItem) ;
# 1113 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeUtilities.h" 3
extern OSStatus
UCTypeSelectWalkList(
  UCTypeSelectRef ref,
  CFStringRef currSelect,
  UCTSWalkDirection direction,
  UInt32 listSize,
  void * listDataPtr,
  void * refcon,
  IndexToUCStringUPP userUPP,
  UInt32 * closestItem) ;



#pragma pack(pop)


}
# 154 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 1 3
# 52 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern "C" {


#pragma pack(push, 2)
# 1196 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern const double_t pi ;
# 1225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern double compound(double rate, double periods) ;
# 1236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern double annuity(double rate, double periods) ;
# 1257 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern double_t randomx(double_t * x) ;
# 1266 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
typedef short relop;
enum {
  GREATERTHAN = 0,
  LESSTHAN = 1,
  EQUALTO = 2,
  UNORDERED = 3
};
# 1283 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern relop relation(double_t x, double_t y) ;
# 1321 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
struct decimal {
    char sgn;
    char unused;
    short exp;
    struct {
        unsigned char length;
        unsigned char text[36];
        unsigned char unused;
    } sig;
};
typedef struct decimal decimal;

struct decform {
    char style;
    char unused;
    short digits;
};
typedef struct decform decform;
# 1347 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void num2dec(const decform *f, double_t x, decimal *d) ;
# 1358 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern double_t dec2num(const decimal * d) ;
# 1369 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void dec2str(const decform *f, const decimal *d, char *s) ;
# 1380 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void str2dec(const char *s, short *ix, decimal *d, short *vp) ;
# 1391 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern float dec2f(const decimal * d) ;
# 1402 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern short dec2s(const decimal * d) ;
# 1413 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long dec2l(const decimal * d) ;
# 1435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double cosl(long double x);


    inline long double cosl(long double x) { return (long double) cos((double)(x)); }
# 1454 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double sinl(long double x);


    inline long double sinl(long double x) { return (long double) sin((double)(x)); }
# 1473 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double tanl(long double x);


    inline long double tanl(long double x) { return (long double) tan((double)(x)); }
# 1492 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double acosl(long double x);


    inline long double acosl(long double x) { return (long double) acos((double)(x)); }
# 1511 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double asinl(long double x);


    inline long double asinl(long double x) { return (long double) asin((double)(x)); }
# 1530 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double atanl(long double x);


    inline long double atanl(long double x) { return (long double) atan((double)(x)); }
# 1549 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double atan2l(long double y, long double x);


    inline long double atan2l(long double y, long double x) { return (long double) atan2((double)(y), (double)(x)); }
# 1568 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double coshl(long double x);


    inline long double coshl(long double x) { return (long double) cosh((double)(x)); }
# 1587 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double sinhl(long double x);


    inline long double sinhl(long double x) { return (long double) sinh((double)(x)); }
# 1606 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double tanhl(long double x);


    inline long double tanhl(long double x) { return (long double) tanh((double)(x)); }
# 1625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double acoshl(long double x);


    inline long double acoshl(long double x) { return (long double) acosh((double)(x)); }
# 1644 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double asinhl(long double x);


    inline long double asinhl(long double x) { return (long double) asinh((double)(x)); }
# 1663 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double atanhl(long double x);


    inline long double atanhl(long double x) { return (long double) atanh((double)(x)); }
# 1682 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double expl(long double x);


    inline long double expl(long double x) { return (long double) exp((double)(x)); }
# 1701 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double expm1l(long double x);


    inline long double expm1l(long double x) { return (long double) expm1((double)(x)); }
# 1720 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double exp2l(long double x);


    inline long double exp2l(long double x) { return (long double) exp2((double)(x)); }
# 1739 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double frexpl(long double x, int *exponent);


    inline long double frexpl(long double x, int *exponent) { return (long double) frexp((double)(x), (exponent)); }
# 1758 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double ldexpl(long double x, int n);


    inline long double ldexpl(long double x, int n) { return (long double) ldexp((double)(x), (n)); }
# 1777 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double logl(long double x);


    inline long double logl(long double x) { return (long double) log((double)(x)); }
# 1796 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double log1pl(long double x);


    inline long double log1pl(long double x) { return (long double) log1p((double)(x)); }
# 1815 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double log10l(long double x);


    inline long double log10l(long double x) { return (long double) log10((double)(x)); }
# 1834 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double log2l(long double x);


    inline long double log2l(long double x) { return (long double) log2((double)(x)); }
# 1853 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double logbl(long double x);


    inline long double logbl(long double x) { return (long double) logb((double)(x)); }
# 1893 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double fabsl(long double x);


    inline long double fabsl(long double x) { return (long double) fabs((double)(x)); }
# 1912 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double hypotl(long double x, long double y);


    inline long double hypotl(long double x, long double y) { return (long double) hypot((double)(x), (double)(y)); }
# 1931 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double powl(long double x, long double y);


    inline long double powl(long double x, long double y) { return (long double) pow((double)(x), (double)(y)); }
# 1950 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double sqrtl(long double x);


    inline long double sqrtl(long double x) { return (long double) sqrt((double)(x)); }
# 1969 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double erfl(long double x);


    inline long double erfl(long double x) { return (long double) erf((double)(x)); }
# 1988 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double erfcl(long double x);


    inline long double erfcl(long double x) { return (long double) erfc((double)(x)); }
# 2007 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double gammal(long double x);


    inline long double gammal(long double x) { return (long double) gamma((double)(x)); }
# 2026 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double lgammal(long double x);


    inline long double lgammal(long double x) { return (long double) lgamma((double)(x)); }
# 2045 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double ceill(long double x);


    inline long double ceill(long double x) { return (long double) ceil((double)(x)); }
# 2064 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double floorl(long double x);


    inline long double floorl(long double x) { return (long double) floor((double)(x)); }
# 2083 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double rintl(long double x);


    inline long double rintl(long double x) { return (long double) rint((double)(x)); }
# 2102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double nearbyintl(long double x);


    inline long double nearbyintl(long double x) { return (long double) nearbyint((double)(x)); }
# 2121 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long rinttoll(long double x);


    inline long rinttoll(long double x) { return rinttol((double)(x)); }
# 2140 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double roundl(long double x);


    inline long double roundl(long double x) { return (long double) round((double)(x)); }
# 2159 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long roundtoll(long double x);


    inline long roundtoll(long double x) { return roundtol((double)(x)); }
# 2178 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double truncl(long double x);


    inline long double truncl(long double x) { return (long double) trunc((double)(x)); }
# 2197 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double remainderl(long double x, long double y);


    inline long double remainderl(long double x, long double y) { return (long double) remainder((double)(x), (double)(y)); }
# 2216 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double remquol(long double x, long double y, int *quo);


    inline long double remquol(long double x, long double y, int *quo) { return (long double) remquo((double)(x), (double)(y), (quo)); }
# 2235 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double copysignl(long double x, long double y);


    inline long double copysignl(long double x, long double y) { return (long double) copysign((double)(x), (double)(y)); }
# 2254 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double fdiml(long double x, long double y);


    inline long double fdiml(long double x, long double y) { return (long double) fdim((double)(x), (double)(y)); }
# 2273 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double fmaxl(long double x, long double y);


    inline long double fmaxl(long double x, long double y) { return (long double) fmax((double)(x), (double)(y)); }
# 2292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double fminl(long double x, long double y);


    inline long double fminl(long double x, long double y) { return (long double) fmin((double)(x), (double)(y)); }
# 2312 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern relop relationl(long double x, long double y);


    inline relop relationl(long double x, long double y) { return relation((double)(x), (double)(y)); }
# 2331 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void num2decl(const decform *f, long double x, decimal *d);


    inline void num2decl(const decform *f, long double x, decimal *d) { num2dec((f), (double)(x), (d)); }
# 2350 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern long double dec2numl(const decimal * d);


    inline long double dec2numl(const decimal *d) { return (long double) dec2num(d); }
# 2379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern double x80tod(const extended80 * x80) ;
# 2390 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void dtox80(const double *x, extended80 *x80) ;
# 2409 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void __inline_x80told(const extended80 *x80, long double *x);


    inline void __inline_x80told(const extended80 *x80, long double *x) { *(x) = (long double) x80tod(x80); }
# 2428 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
extern void __inline_ldtox80(const long double *x, extended80 *x80);


    inline void __inline_ldtox80(const long double *x, extended80 *x80) { double d = (double) *(x); dtox80(&d, (x80)); }
# 2441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/fp.h" 3
#pragma pack(pop)


}
# 158 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3


# 1 "/usr/include/fenv.h" 1 3 4
# 26 "/usr/include/fenv.h" 3 4
#pragma GCC fenv



# 1 "/usr/include/architecture/ppc/fenv.h" 1 3 4
# 35 "/usr/include/architecture/ppc/fenv.h" 3 4
#pragma GCC fenv



extern "C" {
# 62 "/usr/include/architecture/ppc/fenv.h" 3 4
typedef unsigned int fenv_t;
typedef unsigned int fexcept_t;


enum {
  _FE_INEXACT = 0x02000000,
  _FE_DIVBYZERO = 0x04000000,
  _FE_UNDERFLOW = 0x08000000,
  _FE_OVERFLOW = 0x10000000,
  _FE_INVALID = 0x20000000,
  _FE_ALL_EXCEPT = 0x3E000000
};
# 83 "/usr/include/architecture/ppc/fenv.h" 3 4
enum {
  _FE_TONEAREST = 0x00000000,
  _FE_TOWARDZERO = 0x00000001,
  _FE_UPWARD = 0x00000002,
  _FE_DOWNWARD = 0x00000003
};







extern const fenv_t _FE_DFL_ENV;
# 110 "/usr/include/architecture/ppc/fenv.h" 3 4
extern int feclearexcept(int);
# 119 "/usr/include/architecture/ppc/fenv.h" 3 4
extern int fegetexceptflag(fexcept_t *, int);







extern int feraiseexcept(int);
# 139 "/usr/include/architecture/ppc/fenv.h" 3 4
extern int fesetexceptflag(const fexcept_t *, int);
# 150 "/usr/include/architecture/ppc/fenv.h" 3 4
extern int fetestexcept(int);
# 162 "/usr/include/architecture/ppc/fenv.h" 3 4
extern int fegetround(void);
# 172 "/usr/include/architecture/ppc/fenv.h" 3 4
extern int fesetround(int);







extern int fegetenv(fenv_t *);
extern int feholdexcept(fenv_t *);
extern int fesetenv(const fenv_t *);
extern int feupdateenv(const fenv_t *);



}
# 31 "/usr/include/fenv.h" 2 3 4
# 161 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3

# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern "C" {


#pragma pack(push, 2)

typedef OSType TECPluginSignature;
typedef UInt32 TECPluginVersion;

enum {
  kTECSignature = 'encv',
  kTECUnicodePluginSignature = 'puni',
  kTECJapanesePluginSignature = 'pjpn',
  kTECChinesePluginSignature = 'pzho',
  kTECKoreanPluginSignature = 'pkor'
};



typedef struct OpaqueTECObjectRef* TECObjectRef;
typedef struct OpaqueTECSnifferObjectRef* TECSnifferObjectRef;
typedef OSType TECPluginSig;
struct TECConversionInfo {
  TextEncoding sourceEncoding;
  TextEncoding destinationEncoding;
  UInt16 reserved1;
  UInt16 reserved2;
};
typedef struct TECConversionInfo TECConversionInfo;
# 76 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
typedef UInt32 TECInternetNameUsageMask;
enum {






  kTECInternetNameDefaultUsageMask = 0,





  kTECInternetNameStrictUsageMask = 1,
# 99 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
  kTECInternetNameTolerantUsageMask = 2
};


enum {
  kTEC_MIBEnumDontCare = -1
};
# 117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountAvailableTextEncodings(ItemCount * numberEncodings) ;
# 130 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetAvailableTextEncodings(
  TextEncoding availableEncodings[],
  ItemCount maxAvailableEncodings,
  ItemCount * actualAvailableEncodings) ;
# 146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountDirectTextEncodingConversions(ItemCount * numberOfEncodings) ;
# 159 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetDirectTextEncodingConversions(
  TECConversionInfo availableConversions[],
  ItemCount maxAvailableConversions,
  ItemCount * actualAvailableConversions) ;
# 175 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountDestinationTextEncodings(
  TextEncoding inputEncoding,
  ItemCount * numberOfEncodings) ;
# 190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetDestinationTextEncodings(
  TextEncoding inputEncoding,
  TextEncoding destinationEncodings[],
  ItemCount maxDestinationEncodings,
  ItemCount * actualDestinationEncodings) ;
# 207 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetTextEncodingInternetName(
  TextEncoding textEncoding,
  Str255 encodingName) ;
# 221 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetTextEncodingFromInternetName(
  TextEncoding * textEncoding,
  ConstStr255Param encodingName) ;
# 236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCreateConverter(
  TECObjectRef * newEncodingConverter,
  TextEncoding inputEncoding,
  TextEncoding outputEncoding) ;
# 251 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCreateConverterFromPath(
  TECObjectRef * newEncodingConverter,
  const TextEncoding inPath[],
  ItemCount inEncodings) ;
# 266 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECDisposeConverter(TECObjectRef newEncodingConverter) ;
# 279 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECClearConverterContextInfo(TECObjectRef encodingConverter) ;
# 291 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECConvertText(
  TECObjectRef encodingConverter,
  ConstTextPtr inputBuffer,
  ByteCount inputBufferLength,
  ByteCount * actualInputLength,
  TextPtr outputBuffer,
  ByteCount outputBufferLength,
  ByteCount * actualOutputLength) ;
# 310 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECFlushText(
  TECObjectRef encodingConverter,
  TextPtr outputBuffer,
  ByteCount outputBufferLength,
  ByteCount * actualOutputLength) ;
# 327 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountSubTextEncodings(
  TextEncoding inputEncoding,
  ItemCount * numberOfEncodings) ;
# 341 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetSubTextEncodings(
  TextEncoding inputEncoding,
  TextEncoding subEncodings[],
  ItemCount maxSubEncodings,
  ItemCount * actualSubEncodings) ;
# 370 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetEncodingList(
  TECObjectRef encodingConverter,
  ItemCount * numEncodings,
  Handle * encodingList) ;
# 385 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCreateOneToManyConverter(
  TECObjectRef * newEncodingConverter,
  TextEncoding inputEncoding,
  ItemCount numOutputEncodings,
  const TextEncoding outputEncodings[]) ;
# 401 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECConvertTextToMultipleEncodings(
  TECObjectRef encodingConverter,
  ConstTextPtr inputBuffer,
  ByteCount inputBufferLength,
  ByteCount * actualInputLength,
  TextPtr outputBuffer,
  ByteCount outputBufferLength,
  ByteCount * actualOutputLength,
  TextEncodingRun outEncodingsBuffer[],
  ItemCount maxOutEncodingRuns,
  ItemCount * actualOutEncodingRuns) ;
# 423 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECFlushMultipleEncodings(
  TECObjectRef encodingConverter,
  TextPtr outputBuffer,
  ByteCount outputBufferLength,
  ByteCount * actualOutputLength,
  TextEncodingRun outEncodingsBuffer[],
  ItemCount maxOutEncodingRuns,
  ItemCount * actualOutEncodingRuns) ;
# 443 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountWebTextEncodings(
  RegionCode locale,
  ItemCount * numberEncodings) ;
# 457 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetWebTextEncodings(
  RegionCode locale,
  TextEncoding availableEncodings[],
  ItemCount maxAvailableEncodings,
  ItemCount * actualAvailableEncodings) ;
# 473 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountMailTextEncodings(
  RegionCode locale,
  ItemCount * numberEncodings) ;
# 487 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetMailTextEncodings(
  RegionCode locale,
  TextEncoding availableEncodings[],
  ItemCount maxAvailableEncodings,
  ItemCount * actualAvailableEncodings) ;
# 504 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCountAvailableSniffers(ItemCount * numberOfEncodings) ;
# 516 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetAvailableSniffers(
  TextEncoding availableSniffers[],
  ItemCount maxAvailableSniffers,
  ItemCount * actualAvailableSniffers) ;
# 531 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCreateSniffer(
  TECSnifferObjectRef * encodingSniffer,
  TextEncoding testEncodings[],
  ItemCount numTextEncodings) ;
# 546 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECSniffTextEncoding(
  TECSnifferObjectRef encodingSniffer,
  ConstTextPtr inputBuffer,
  ByteCount inputBufferLength,
  TextEncoding testEncodings[],
  ItemCount numTextEncodings,
  ItemCount numErrsArray[],
  ItemCount maxErrs,
  ItemCount numFeaturesArray[],
  ItemCount maxFeatures) ;
# 567 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECDisposeSniffer(TECSnifferObjectRef encodingSniffer) ;
# 579 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECClearSnifferContextInfo(TECSnifferObjectRef encodingSniffer) ;
# 591 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECSetBasicOptions(
  TECObjectRef encodingConverter,
  OptionBits controlFlags) ;
# 642 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECCopyTextEncodingInternetNameAndMIB(
  TextEncoding textEncoding,
  TECInternetNameUsageMask usage,
  CFStringRef * encodingNamePtr,
  SInt32 * mibEnumPtr) ;
# 676 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingConverter.h" 3
extern OSStatus
TECGetTextEncodingFromInternetNameOrMIB(
  TextEncoding * textEncodingPtr,
  TECInternetNameUsageMask usage,
  CFStringRef encodingName,
  SInt32 mibEnum) ;






#pragma pack(pop)


}
# 163 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern "C" {


#pragma pack(push, 2)


typedef struct OpaqueTextToUnicodeInfo* TextToUnicodeInfo;
typedef struct OpaqueUnicodeToTextInfo* UnicodeToTextInfo;
typedef struct OpaqueUnicodeToTextRunInfo* UnicodeToTextRunInfo;
typedef const TextToUnicodeInfo ConstTextToUnicodeInfo;
typedef const UnicodeToTextInfo ConstUnicodeToTextInfo;

typedef SInt32 UnicodeMapVersion;
enum {
  kUnicodeUseLatestMapping = -1,
  kUnicodeUseHFSPlusMapping = 4
};


struct UnicodeMapping {
  TextEncoding unicodeEncoding;
  TextEncoding otherEncoding;
  UnicodeMapVersion mappingVersion;
};
typedef struct UnicodeMapping UnicodeMapping;
typedef UnicodeMapping * UnicodeMappingPtr;
typedef const UnicodeMapping * ConstUnicodeMappingPtr;

enum {
  kUnicodeUseFallbacksBit = 0,
  kUnicodeKeepInfoBit = 1,
  kUnicodeDirectionalityBits = 2,
  kUnicodeVerticalFormBit = 4,
  kUnicodeLooseMappingsBit = 5,
  kUnicodeStringUnterminatedBit = 6,
  kUnicodeTextRunBit = 7,
  kUnicodeKeepSameEncodingBit = 8,
  kUnicodeForceASCIIRangeBit = 9,
  kUnicodeNoHalfwidthCharsBit = 10,
  kUnicodeTextRunHeuristicsBit = 11,
  kUnicodeMapLineFeedToReturnBit = 12,





  kUnicodeUseExternalEncodingFormBit = 13
};

enum {
  kUnicodeUseFallbacksMask = 1L << kUnicodeUseFallbacksBit,
  kUnicodeKeepInfoMask = 1L << kUnicodeKeepInfoBit,
  kUnicodeDirectionalityMask = 3L << kUnicodeDirectionalityBits,
  kUnicodeVerticalFormMask = 1L << kUnicodeVerticalFormBit,
  kUnicodeLooseMappingsMask = 1L << kUnicodeLooseMappingsBit,
  kUnicodeStringUnterminatedMask = 1L << kUnicodeStringUnterminatedBit,
  kUnicodeTextRunMask = 1L << kUnicodeTextRunBit,
  kUnicodeKeepSameEncodingMask = 1L << kUnicodeKeepSameEncodingBit,
  kUnicodeForceASCIIRangeMask = 1L << kUnicodeForceASCIIRangeBit,
  kUnicodeNoHalfwidthCharsMask = 1L << kUnicodeNoHalfwidthCharsBit,
  kUnicodeTextRunHeuristicsMask = 1L << kUnicodeTextRunHeuristicsBit,
  kUnicodeMapLineFeedToReturnMask = 1L << kUnicodeMapLineFeedToReturnBit,





  kUnicodeUseExternalEncodingFormMask = 1L << kUnicodeUseExternalEncodingFormBit
};


enum {
  kUnicodeDefaultDirection = 0,
  kUnicodeLeftToRight = 1,
  kUnicodeRightToLeft = 2
};


enum {
  kUnicodeDefaultDirectionMask = kUnicodeDefaultDirection << kUnicodeDirectionalityBits,
  kUnicodeLeftToRightMask = kUnicodeLeftToRight << kUnicodeDirectionalityBits,
  kUnicodeRightToLeftMask = kUnicodeRightToLeft << kUnicodeDirectionalityBits
};
# 146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
enum {
  kUnicodeMatchUnicodeBaseBit = 0,
  kUnicodeMatchUnicodeVariantBit = 1,
  kUnicodeMatchUnicodeFormatBit = 2,
  kUnicodeMatchOtherBaseBit = 3,
  kUnicodeMatchOtherVariantBit = 4,
  kUnicodeMatchOtherFormatBit = 5
};

enum {
  kUnicodeMatchUnicodeBaseMask = 1L << kUnicodeMatchUnicodeBaseBit,
  kUnicodeMatchUnicodeVariantMask = 1L << kUnicodeMatchUnicodeVariantBit,
  kUnicodeMatchUnicodeFormatMask = 1L << kUnicodeMatchUnicodeFormatBit,
  kUnicodeMatchOtherBaseMask = 1L << kUnicodeMatchOtherBaseBit,
  kUnicodeMatchOtherVariantMask = 1L << kUnicodeMatchOtherVariantBit,
  kUnicodeMatchOtherFormatMask = 1L << kUnicodeMatchOtherFormatBit
};


enum {
  kUnicodeFallbackSequencingBits = 0
};

enum {
  kUnicodeFallbackSequencingMask = 3L << kUnicodeFallbackSequencingBits,
  kUnicodeFallbackInterruptSafeMask = 1L << 2
};


enum {
  kUnicodeFallbackDefaultOnly = 0L,
  kUnicodeFallbackCustomOnly = 1L,
  kUnicodeFallbackDefaultFirst = 2L,
  kUnicodeFallbackCustomFirst = 3L
};



typedef OSStatus ( * UnicodeToTextFallbackProcPtr)(UniChar *iSrcUniStr, ByteCount iSrcUniStrLen, ByteCount *oSrcConvLen, TextPtr oDestStr, ByteCount iDestStrLen, ByteCount *oDestConvLen, LogicalAddress iInfoPtr, ConstUnicodeMappingPtr iUnicodeMappingPtr);
typedef UnicodeToTextFallbackProcPtr UnicodeToTextFallbackUPP;
# 194 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern UnicodeToTextFallbackUPP
NewUnicodeToTextFallbackUPP(UnicodeToTextFallbackProcPtr userRoutine) ;
# 205 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern void
DisposeUnicodeToTextFallbackUPP(UnicodeToTextFallbackUPP userUPP) ;
# 216 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
InvokeUnicodeToTextFallbackUPP(
  UniChar * iSrcUniStr,
  ByteCount iSrcUniStrLen,
  ByteCount * oSrcConvLen,
  TextPtr oDestStr,
  ByteCount iDestStrLen,
  ByteCount * oDestConvLen,
  LogicalAddress iInfoPtr,
  ConstUnicodeMappingPtr iUnicodeMappingPtr,
  UnicodeToTextFallbackUPP userUPP) ;



    inline UnicodeToTextFallbackUPP NewUnicodeToTextFallbackUPP(UnicodeToTextFallbackProcPtr userRoutine) { return userRoutine; }
    inline void DisposeUnicodeToTextFallbackUPP(UnicodeToTextFallbackUPP) { }
    inline OSStatus InvokeUnicodeToTextFallbackUPP(UniChar * iSrcUniStr, ByteCount iSrcUniStrLen, ByteCount * oSrcConvLen, TextPtr oDestStr, ByteCount iDestStrLen, ByteCount * oDestConvLen, LogicalAddress iInfoPtr, ConstUnicodeMappingPtr iUnicodeMappingPtr, UnicodeToTextFallbackUPP userUPP) { return (*userUPP)(iSrcUniStr, iSrcUniStrLen, oSrcConvLen, oDestStr, iDestStrLen, oDestConvLen, iInfoPtr, iUnicodeMappingPtr); }
# 249 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateTextToUnicodeInfo(
  ConstUnicodeMappingPtr iUnicodeMapping,
  TextToUnicodeInfo * oTextToUnicodeInfo) ;
# 263 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateTextToUnicodeInfoByEncoding(
  TextEncoding iEncoding,
  TextToUnicodeInfo * oTextToUnicodeInfo) ;
# 277 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateUnicodeToTextInfo(
  ConstUnicodeMappingPtr iUnicodeMapping,
  UnicodeToTextInfo * oUnicodeToTextInfo) ;
# 291 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateUnicodeToTextInfoByEncoding(
  TextEncoding iEncoding,
  UnicodeToTextInfo * oUnicodeToTextInfo) ;
# 305 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateUnicodeToTextRunInfo(
  ItemCount iNumberOfMappings,
  const UnicodeMapping iUnicodeMappings[],
  UnicodeToTextRunInfo * oUnicodeToTextInfo) ;
# 320 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateUnicodeToTextRunInfoByEncoding(
  ItemCount iNumberOfEncodings,
  const TextEncoding iEncodings[],
  UnicodeToTextRunInfo * oUnicodeToTextInfo) ;
# 335 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CreateUnicodeToTextRunInfoByScriptCode(
  ItemCount iNumberOfScriptCodes,
  const ScriptCode iScripts[],
  UnicodeToTextRunInfo * oUnicodeToTextInfo) ;
# 351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ChangeTextToUnicodeInfo(
  TextToUnicodeInfo ioTextToUnicodeInfo,
  ConstUnicodeMappingPtr iUnicodeMapping) ;
# 366 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ChangeUnicodeToTextInfo(
  UnicodeToTextInfo ioUnicodeToTextInfo,
  ConstUnicodeMappingPtr iUnicodeMapping) ;
# 381 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
DisposeTextToUnicodeInfo(TextToUnicodeInfo * ioTextToUnicodeInfo) ;
# 393 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
DisposeUnicodeToTextInfo(UnicodeToTextInfo * ioUnicodeToTextInfo) ;
# 405 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
DisposeUnicodeToTextRunInfo(UnicodeToTextRunInfo * ioUnicodeToTextRunInfo) ;
# 417 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ConvertFromTextToUnicode(
  TextToUnicodeInfo iTextToUnicodeInfo,
  ByteCount iSourceLen,
  ConstLogicalAddress iSourceStr,
  OptionBits iControlFlags,
  ItemCount iOffsetCount,
  const ByteOffset iOffsetArray[],
  ItemCount * oOffsetCount,
  ByteOffset oOffsetArray[],
  ByteCount iOutputBufLen,
  ByteCount * oSourceRead,
  ByteCount * oUnicodeLen,
  UniChar oUnicodeStr[]) ;
# 441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ConvertFromUnicodeToText(
  UnicodeToTextInfo iUnicodeToTextInfo,
  ByteCount iUnicodeLen,
  const UniChar iUnicodeStr[],
  OptionBits iControlFlags,
  ItemCount iOffsetCount,
  const ByteOffset iOffsetArray[],
  ItemCount * oOffsetCount,
  ByteOffset oOffsetArray[],
  ByteCount iOutputBufLen,
  ByteCount * oInputRead,
  ByteCount * oOutputLen,
  LogicalAddress oOutputStr) ;
# 465 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ConvertFromUnicodeToTextRun(
  UnicodeToTextRunInfo iUnicodeToTextInfo,
  ByteCount iUnicodeLen,
  const UniChar iUnicodeStr[],
  OptionBits iControlFlags,
  ItemCount iOffsetCount,
  const ByteOffset iOffsetArray[],
  ItemCount * oOffsetCount,
  ByteOffset oOffsetArray[],
  ByteCount iOutputBufLen,
  ByteCount * oInputRead,
  ByteCount * oOutputLen,
  LogicalAddress oOutputStr,
  ItemCount iEncodingRunBufLen,
  ItemCount * oEncodingRunOutLen,
  TextEncodingRun oEncodingRuns[]) ;
# 492 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ConvertFromUnicodeToScriptCodeRun(
  UnicodeToTextRunInfo iUnicodeToTextInfo,
  ByteCount iUnicodeLen,
  const UniChar iUnicodeStr[],
  OptionBits iControlFlags,
  ItemCount iOffsetCount,
  const ByteOffset iOffsetArray[],
  ItemCount * oOffsetCount,
  ByteOffset oOffsetArray[],
  ByteCount iOutputBufLen,
  ByteCount * oInputRead,
  ByteCount * oOutputLen,
  LogicalAddress oOutputStr,
  ItemCount iScriptRunBufLen,
  ItemCount * oScriptRunOutLen,
  ScriptCodeRun oScriptCodeRuns[]) ;
# 520 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
TruncateForTextToUnicode(
  ConstTextToUnicodeInfo iTextToUnicodeInfo,
  ByteCount iSourceLen,
  ConstLogicalAddress iSourceStr,
  ByteCount iMaxLen,
  ByteCount * oTruncatedLen) ;
# 538 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
TruncateForUnicodeToText(
  ConstUnicodeToTextInfo iUnicodeToTextInfo,
  ByteCount iSourceLen,
  const UniChar iSourceStr[],
  OptionBits iControlFlags,
  ByteCount iMaxLen,
  ByteCount * oTruncatedLen) ;
# 557 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ConvertFromPStringToUnicode(
  TextToUnicodeInfo iTextToUnicodeInfo,
  ConstStr255Param iPascalStr,
  ByteCount iOutputBufLen,
  ByteCount * oUnicodeLen,
  UniChar oUnicodeStr[]) ;
# 575 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ConvertFromUnicodeToPString(
  UnicodeToTextInfo iUnicodeToTextInfo,
  ByteCount iUnicodeLen,
  const UniChar iUnicodeStr[],
  Str255 oPascalStr) ;
# 592 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
CountUnicodeMappings(
  OptionBits iFilter,
  ConstUnicodeMappingPtr iFindMapping,
  ItemCount * oActualCount) ;
# 608 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
QueryUnicodeMappings(
  OptionBits iFilter,
  ConstUnicodeMappingPtr iFindMapping,
  ItemCount iMaxCount,
  ItemCount * oActualCount,
  UnicodeMapping oReturnedMappings[]) ;
# 626 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
SetFallbackUnicodeToText(
  UnicodeToTextInfo iUnicodeToTextInfo,
  UnicodeToTextFallbackUPP iFallback,
  OptionBits iControlFlags,
  LogicalAddress iInfoPtr) ;
# 643 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
SetFallbackUnicodeToTextRun(
  UnicodeToTextRunInfo iUnicodeToTextRunInfo,
  UnicodeToTextFallbackUPP iFallback,
  OptionBits iControlFlags,
  LogicalAddress iInfoPtr) ;
# 660 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ResetTextToUnicodeInfo(TextToUnicodeInfo ioTextToUnicodeInfo) ;
# 673 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ResetUnicodeToTextInfo(UnicodeToTextInfo ioUnicodeToTextInfo) ;
# 686 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/UnicodeConverter.h" 3
extern OSStatus
ResetUnicodeToTextRunInfo(UnicodeToTextRunInfo ioUnicodeToTextRunInfo) ;




#pragma pack(pop)


}
# 167 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern "C" {


#pragma pack(push, 2)


typedef UInt16 ThreadState;
enum {
  kReadyThreadState = 0,
  kStoppedThreadState = 1,
  kRunningThreadState = 2
};




typedef void * ThreadTaskRef;

typedef UInt32 ThreadStyle;
enum {
  kCooperativeThread = 1L << 0,
  kPreemptiveThread = 1L << 1
};


typedef unsigned long ThreadID;
enum {
  kNoThreadID = 0,
  kCurrentThreadID = 1,
  kApplicationThreadID = 2
};


typedef UInt32 ThreadOptions;
enum {
  kNewSuspend = (1 << 0),
  kUsePremadeThread = (1 << 1),
  kCreateIfNeeded = (1 << 2),
  kFPUNotNeeded = (1 << 3),
  kExactMatchThread = (1 << 4)
};


struct SchedulerInfoRec {
  UInt32 InfoRecSize;
  ThreadID CurrentThreadID;
  ThreadID SuggestedThreadID;
  ThreadID InterruptedCoopThreadID;
};
typedef struct SchedulerInfoRec SchedulerInfoRec;
typedef SchedulerInfoRec * SchedulerInfoRecPtr;






typedef void * voidPtr;

typedef voidPtr ( * ThreadEntryProcPtr)(void * threadParam);

typedef ThreadID ( * ThreadSchedulerProcPtr)(SchedulerInfoRecPtr schedulerInfo);

typedef void ( * ThreadSwitchProcPtr)(ThreadID threadBeingSwitched, void *switchProcParam);

typedef void ( * ThreadTerminationProcPtr)(ThreadID threadTerminated, void *terminationProcParam);

typedef void ( * DebuggerNewThreadProcPtr)(ThreadID threadCreated);

typedef void ( * DebuggerDisposeThreadProcPtr)(ThreadID threadDeleted);

typedef ThreadID ( * DebuggerThreadSchedulerProcPtr)(SchedulerInfoRecPtr schedulerInfo);
typedef ThreadEntryProcPtr ThreadEntryUPP;
typedef ThreadSchedulerProcPtr ThreadSchedulerUPP;
typedef ThreadSwitchProcPtr ThreadSwitchUPP;
typedef ThreadTerminationProcPtr ThreadTerminationUPP;
typedef DebuggerNewThreadProcPtr DebuggerNewThreadUPP;
typedef DebuggerDisposeThreadProcPtr DebuggerDisposeThreadUPP;
typedef DebuggerThreadSchedulerProcPtr DebuggerThreadSchedulerUPP;
# 127 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern ThreadEntryUPP
NewThreadEntryUPP(ThreadEntryProcPtr userRoutine) ;
# 138 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern ThreadSchedulerUPP
NewThreadSchedulerUPP(ThreadSchedulerProcPtr userRoutine) ;
# 149 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern ThreadSwitchUPP
NewThreadSwitchUPP(ThreadSwitchProcPtr userRoutine) ;
# 160 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern ThreadTerminationUPP
NewThreadTerminationUPP(ThreadTerminationProcPtr userRoutine) ;
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern DebuggerNewThreadUPP
NewDebuggerNewThreadUPP(DebuggerNewThreadProcPtr userRoutine) ;
# 182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern DebuggerDisposeThreadUPP
NewDebuggerDisposeThreadUPP(DebuggerDisposeThreadProcPtr userRoutine) ;
# 193 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern DebuggerThreadSchedulerUPP
NewDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerProcPtr userRoutine) ;
# 204 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeThreadEntryUPP(ThreadEntryUPP userUPP) ;
# 215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeThreadSchedulerUPP(ThreadSchedulerUPP userUPP) ;
# 226 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeThreadSwitchUPP(ThreadSwitchUPP userUPP) ;
# 237 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeThreadTerminationUPP(ThreadTerminationUPP userUPP) ;
# 248 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeDebuggerNewThreadUPP(DebuggerNewThreadUPP userUPP) ;
# 259 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeDebuggerDisposeThreadUPP(DebuggerDisposeThreadUPP userUPP) ;
# 270 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
DisposeDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerUPP userUPP) ;
# 281 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern voidPtr
InvokeThreadEntryUPP(
  void * threadParam,
  ThreadEntryUPP userUPP) ;
# 294 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern ThreadID
InvokeThreadSchedulerUPP(
  SchedulerInfoRecPtr schedulerInfo,
  ThreadSchedulerUPP userUPP) ;
# 307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
InvokeThreadSwitchUPP(
  ThreadID threadBeingSwitched,
  void * switchProcParam,
  ThreadSwitchUPP userUPP) ;
# 321 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
InvokeThreadTerminationUPP(
  ThreadID threadTerminated,
  void * terminationProcParam,
  ThreadTerminationUPP userUPP) ;
# 335 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
InvokeDebuggerNewThreadUPP(
  ThreadID threadCreated,
  DebuggerNewThreadUPP userUPP) ;
# 348 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern void
InvokeDebuggerDisposeThreadUPP(
  ThreadID threadDeleted,
  DebuggerDisposeThreadUPP userUPP) ;
# 361 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern ThreadID
InvokeDebuggerThreadSchedulerUPP(
  SchedulerInfoRecPtr schedulerInfo,
  DebuggerThreadSchedulerUPP userUPP) ;



    inline ThreadEntryUPP NewThreadEntryUPP(ThreadEntryProcPtr userRoutine) { return userRoutine; }
    inline ThreadSchedulerUPP NewThreadSchedulerUPP(ThreadSchedulerProcPtr userRoutine) { return userRoutine; }
    inline ThreadSwitchUPP NewThreadSwitchUPP(ThreadSwitchProcPtr userRoutine) { return userRoutine; }
    inline ThreadTerminationUPP NewThreadTerminationUPP(ThreadTerminationProcPtr userRoutine) { return userRoutine; }
    inline DebuggerNewThreadUPP NewDebuggerNewThreadUPP(DebuggerNewThreadProcPtr userRoutine) { return userRoutine; }
    inline DebuggerDisposeThreadUPP NewDebuggerDisposeThreadUPP(DebuggerDisposeThreadProcPtr userRoutine) { return userRoutine; }
    inline DebuggerThreadSchedulerUPP NewDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerProcPtr userRoutine) { return userRoutine; }
    inline void DisposeThreadEntryUPP(ThreadEntryUPP) { }
    inline void DisposeThreadSchedulerUPP(ThreadSchedulerUPP) { }
    inline void DisposeThreadSwitchUPP(ThreadSwitchUPP) { }
    inline void DisposeThreadTerminationUPP(ThreadTerminationUPP) { }
    inline void DisposeDebuggerNewThreadUPP(DebuggerNewThreadUPP) { }
    inline void DisposeDebuggerDisposeThreadUPP(DebuggerDisposeThreadUPP) { }
    inline void DisposeDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerUPP) { }
    inline voidPtr InvokeThreadEntryUPP(void * threadParam, ThreadEntryUPP userUPP) { return (*userUPP)(threadParam); }
    inline ThreadID InvokeThreadSchedulerUPP(SchedulerInfoRecPtr schedulerInfo, ThreadSchedulerUPP userUPP) { return (*userUPP)(schedulerInfo); }
    inline void InvokeThreadSwitchUPP(ThreadID threadBeingSwitched, void * switchProcParam, ThreadSwitchUPP userUPP) { (*userUPP)(threadBeingSwitched, switchProcParam); }
    inline void InvokeThreadTerminationUPP(ThreadID threadTerminated, void * terminationProcParam, ThreadTerminationUPP userUPP) { (*userUPP)(threadTerminated, terminationProcParam); }
    inline void InvokeDebuggerNewThreadUPP(ThreadID threadCreated, DebuggerNewThreadUPP userUPP) { (*userUPP)(threadCreated); }
    inline void InvokeDebuggerDisposeThreadUPP(ThreadID threadDeleted, DebuggerDisposeThreadUPP userUPP) { (*userUPP)(threadDeleted); }
    inline ThreadID InvokeDebuggerThreadSchedulerUPP(SchedulerInfoRecPtr schedulerInfo, DebuggerThreadSchedulerUPP userUPP) { return (*userUPP)(schedulerInfo); }
# 424 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
typedef ThreadEntryUPP ThreadEntryTPP;
typedef ThreadSchedulerUPP ThreadSchedulerTPP;
typedef ThreadSwitchUPP ThreadSwitchTPP;
typedef ThreadTerminationUPP ThreadTerminationTPP;
typedef DebuggerNewThreadUPP DebuggerNewThreadTPP;
typedef DebuggerDisposeThreadUPP DebuggerDisposeThreadTPP;
typedef DebuggerThreadSchedulerUPP DebuggerThreadSchedulerTPP;
# 439 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
NewThread(
  ThreadStyle threadStyle,
  ThreadEntryTPP threadEntry,
  void * threadParam,
  Size stackSize,
  ThreadOptions options,
  void ** threadResult,
  ThreadID * threadMade) ;
# 458 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetThreadScheduler(ThreadSchedulerTPP threadScheduler) ;
# 470 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetThreadSwitcher(
  ThreadID thread,
  ThreadSwitchTPP threadSwitcher,
  void * switchProcParam,
  Boolean inOrOut) ;
# 486 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetThreadTerminator(
  ThreadID thread,
  ThreadTerminationTPP threadTerminator,
  void * terminationProcParam) ;
# 501 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetDebuggerNotificationProcs(
  DebuggerNewThreadTPP notifyNewThread,
  DebuggerDisposeThreadTPP notifyDisposeThread,
  DebuggerThreadSchedulerTPP notifyThreadScheduler) ;
# 516 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
CreateThreadPool(
  ThreadStyle threadStyle,
  SInt16 numToCreate,
  Size stackSize) ;
# 531 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetDefaultThreadStackSize(
  ThreadStyle threadStyle,
  Size * stackSize) ;
# 545 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
ThreadCurrentStackSpace(
  ThreadID thread,
  ByteCount * freeStack) ;
# 559 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
DisposeThread(
  ThreadID threadToDump,
  void * threadResult,
  Boolean recycleThread) ;
# 574 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
YieldToThread(ThreadID suggestedThread) ;
# 586 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
YieldToAnyThread(void) ;
# 601 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetCurrentThread(ThreadID * currentThreadID) ;
# 613 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetThreadState(
  ThreadID threadToGet,
  ThreadState * threadState) ;
# 627 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetThreadState(
  ThreadID threadToSet,
  ThreadState newState,
  ThreadID suggestedThread) ;
# 642 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetThreadStateEndCritical(
  ThreadID threadToSet,
  ThreadState newState,
  ThreadID suggestedThread) ;
# 657 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
ThreadBeginCritical(void) ;
# 669 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
ThreadEndCritical(void) ;
# 681 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetThreadCurrentTaskRef(ThreadTaskRef * threadTRef) ;
# 693 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetThreadStateGivenTaskRef(
  ThreadTaskRef threadTRef,
  ThreadID threadToGet,
  ThreadState * threadState) ;
# 708 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
SetThreadReadyGivenTaskRef(
  ThreadTaskRef threadTRef,
  ThreadID threadToSet) ;
# 724 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetFreeThreadCount(
  ThreadStyle threadStyle,
  SInt16 * freeCount) ;
# 739 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Threads.h" 3
extern OSErr
GetSpecificFreeThreadCount(
  ThreadStyle threadStyle,
  Size stackSize,
  SInt16 * freeCount) ;





#pragma pack(pop)


}
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern "C" {


#pragma pack(push, 2)
# 69 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
enum {
  kOnSystemDisk = -32768L,
  kOnAppropriateDisk = -32767,


  kSystemDomain = -32766,
  kLocalDomain = -32765,
  kNetworkDomain = -32764,
  kUserDomain = -32763,
  kClassicDomain = -32762,
  kDeveloperDomain = -32760,
  kFolderManagerLastDomain = kDeveloperDomain
};





enum {
  kLastDomainConstant = -32760
};

enum {
  kCreateFolder = true,
  kDontCreateFolder = false
};
# 178 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FindFolder(
  FSVolumeRefNum vRefNum,
  OSType folderType,
  Boolean createFolder,
  FSVolumeRefNum * foundVRefNum,
  SInt32 * foundDirID) ;
# 220 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
ReleaseFolder(
  FSVolumeRefNum vRefNum,
  OSType folderType) ;
# 292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FSFindFolder(
  FSVolumeRefNum vRefNum,
  OSType folderType,
  Boolean createFolder,
  FSRef * foundRef) ;
# 306 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
enum {
  kDesktopFolderType = 'desk',
  kTrashFolderType = 'trsh',
  kWhereToEmptyTrashFolderType = 'empt',
  kFontsFolderType = 'font',
  kPreferencesFolderType = 'pref',
  kSystemPreferencesFolderType = 'sprf',
  kTemporaryFolderType = 'temp',
# 330 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
  kChewableItemsFolderType = 'flnt',
  kTemporaryItemsInCacheDataFolderType = 'vtmp',
  kApplicationsFolderType = 'apps',
  kVolumeRootFolderType = 'root',
  kDomainTopLevelFolderType = 'dtop',
  kDomainLibraryFolderType = 'dlib',
  kUsersFolderType = 'usrs',
  kCurrentUserFolderType = 'cusr',
  kSharedUserDataFolderType = 'sdat'
};





enum {
  kDocumentsFolderType = 'docs',
  kPictureDocumentsFolderType = 'pdoc',
  kMovieDocumentsFolderType = 'mdoc',
  kMusicDocumentsFolderType = 0xB5646F63 ,
  kInternetSitesFolderType = 'site',
  kPublicFolderType = 'pubb'
};

enum {
  kSharedLibrariesFolderType = 0xC46C6962 ,
  kVoicesFolderType = 'fvoc',
  kUtilitiesFolderType = 0x757469C4 ,
  kThemesFolderType = 'thme',
  kFavoritesFolderType = 'favs',
  kInternetSearchSitesFolderType = 'issf',
  kInstallerLogsFolderType = 'ilgf',
  kScriptsFolderType = 0x736372C4 ,
  kFolderActionsFolderType = 'fasf',
  kSpeakableItemsFolderType = 'spki',
  kKeychainFolderType = 'kchn'
};



enum {
  kColorSyncFolderType = 'sync',
  kColorSyncCMMFolderType = 'ccmm',
  kColorSyncScriptingFolderType = 'cscr',
  kPrintersFolderType = 'impr',
  kSpeechFolderType = 'spch',
  kCarbonLibraryFolderType = 'carb',
  kDocumentationFolderType = 'info',
  kDeveloperDocsFolderType = 'ddoc',
  kDeveloperHelpFolderType = 'devh',
  kISSDownloadsFolderType = 'issd',
  kUserSpecificTmpFolderType = 'utmp',
  kCachedDataFolderType = 'cach',
  kFrameworksFolderType = 'fram',
  kPrivateFrameworksFolderType = 'pfrm',
  kClassicDesktopFolderType = 'sdsk',
  kDeveloperFolderType = 'devf',
  kSystemSoundsFolderType = 'ssnd',
  kComponentsFolderType = 'cmpd',
  kQuickTimeComponentsFolderType = 'wcmp',
  kCoreServicesFolderType = 'csrv',
  kAudioSupportFolderType = 'adio',
  kAudioPresetsFolderType = 'apst',
  kAudioSoundsFolderType = 'asnd',
  kAudioSoundBanksFolderType = 'bank',
  kAudioAlertSoundsFolderType = 'alrt',
  kAudioPlugInsFolderType = 'aplg',
  kAudioComponentsFolderType = 'acmp',
  kKernelExtensionsFolderType = 'kext',
  kDirectoryServicesFolderType = 'dsrv',
  kDirectoryServicesPlugInsFolderType = 'dplg',
  kInstallerReceiptsFolderType = 'rcpt',
  kFileSystemSupportFolderType = 'fsys',
  kAppleShareSupportFolderType = 'shar',
  kAppleShareAuthenticationFolderType = 'auth',
  kMIDIDriversFolderType = 'midi',
  kKeyboardLayoutsFolderType = 'klay',
  kIndexFilesFolderType = 'indx',
  kFindByContentIndexesFolderType = 'fbcx',
  kManagedItemsFolderType = 'mang',
  kBootTimeStartupItemsFolderType = 'empz',
  kAutomatorWorkflowsFolderType = 'flow',
  kAutosaveInformationFolderType = 'asav',
  kSpotlightSavedSearchesFolderType = 'spot',
  kSpotlightImportersFolderType = 'simp',
  kSpotlightMetadataCacheFolderType = 'scch',
  kInputManagersFolderType = 'inpt',
  kInputMethodsFolderType = 'inpf'
};

enum {
  kColorSyncProfilesFolderType = 'prof',
  kApplicationSupportFolderType = 'asup',
  kTextEncodingsFolderType = 0xC4746578 ,
  kPrinterDescriptionFolderType = 'ppdf',
  kPrinterDriverFolderType = 0xC4707264 ,
  kScriptingAdditionsFolderType = 0xC4736372
};

enum {
  kClassicPreferencesFolderType = 'cprf'
};

enum {

  kSystemFolderType = 'macs',
  kSystemDesktopFolderType = 'sdsk',
  kSystemTrashFolderType = 'strs',
  kPrintMonitorDocsFolderType = 'prnt',
  kALMModulesFolderType = 'walk',
  kALMPreferencesFolderType = 'trip',
  kALMLocationsFolderType = 'fall',
  kAppleExtrasFolderType = 0x616578C4 ,
  kContextualMenuItemsFolderType = 'cmnu',
  kMacOSReadMesFolderType = 0x6D6F72C4 ,
  kStartupFolderType = 'strt',
  kShutdownFolderType = 'shdf',
  kAppleMenuFolderType = 'amnu',
  kControlPanelFolderType = 'ctrl',
  kSystemControlPanelFolderType = 'sctl',
  kExtensionFolderType = 'extn',
  kExtensionDisabledFolderType = 'extD',
  kControlPanelDisabledFolderType = 'ctrD',
  kSystemExtensionDisabledFolderType = 'macD',
  kStartupItemsDisabledFolderType = 'strD',
  kShutdownItemsDisabledFolderType = 'shdD',
  kAssistantsFolderType = 0x617374C4 ,
  kStationeryFolderType = 'odst',
  kOpenDocFolderType = 'odod',
  kOpenDocShellPlugInsFolderType = 'odsp',
  kEditorsFolderType = 'oded',
  kOpenDocEditorsFolderType = 0xC46F6466 ,
  kOpenDocLibrariesFolderType = 'odlb',
  kGenEditorsFolderType = 0xC4656469 ,
  kHelpFolderType = 0xC4686C70 ,
  kInternetPlugInFolderType = 0xC46E6574 ,
  kModemScriptsFolderType = 0xC46D6F64 ,
  kControlStripModulesFolderType = 'sdev',
  kInternetFolderType = 0x696E74C4 ,
  kAppearanceFolderType = 'appr',
  kSoundSetsFolderType = 'snds',
  kDesktopPicturesFolderType = 0x647470C4 ,
  kFindSupportFolderType = 'fnds',
  kRecentApplicationsFolderType = 'rapp',
  kRecentDocumentsFolderType = 'rdoc',
  kRecentServersFolderType = 'rsvr',
  kLauncherItemsFolderType = 'laun',
  kQuickTimeExtensionsFolderType = 'qtex',
  kDisplayExtensionsFolderType = 'dspl',
  kMultiprocessingFolderType = 'mpxf',
  kPrintingPlugInsFolderType = 'pplg',
  kAppleshareAutomountServerAliasesFolderType = 0x737276C4 ,
  kVolumeSettingsFolderType = 'vsfd',
  kPreMacOS91ApplicationsFolderType = 0x8C707073 ,
  kPreMacOS91InstallerLogsFolderType = 0x946C6766 ,
  kPreMacOS91AssistantsFolderType = 0x8C7374C4 ,
  kPreMacOS91UtilitiesFolderType = 0x9F7469C4 ,
  kPreMacOS91AppleExtrasFolderType = 0x8C6578C4 ,
  kPreMacOS91MacOSReadMesFolderType = 0xB56F72C4 ,
  kPreMacOS91InternetFolderType = 0x946E74C4 ,
  kPreMacOS91AutomountedServersFolderType = 0xA77276C4 ,
  kPreMacOS91StationeryFolderType = 0xBF647374 ,
  kLocalesFolderType = 0xC46C6F63 ,
  kFindByContentPluginsFolderType = 'fbcp',
  kFindByContentFolderType = 'fbcf'
};


enum {
  kMagicTemporaryItemsFolderType = 'mtmp',
  kTemporaryItemsInUserDomainFolderType = 'temq',
  kCurrentUserRemoteFolderLocation = 'rusf',
  kCurrentUserRemoteFolderType = 'rusr'
};


enum {
  kCreateFolderAtBoot = 0x00000002,
  kCreateFolderAtBootBit = 1,
  kFolderCreatedInvisible = 0x00000004,
  kFolderCreatedInvisibleBit = 2,
  kFolderCreatedNameLocked = 0x00000008,
  kFolderCreatedNameLockedBit = 3,
  kFolderCreatedAdminPrivs = 0x00000010,
  kFolderCreatedAdminPrivsBit = 4
};

enum {
  kFolderInUserFolder = 0x00000020,
  kFolderInUserFolderBit = 5,
  kFolderTrackedByAlias = 0x00000040,
  kFolderTrackedByAliasBit = 6,
  kFolderInRemoteUserFolderIfAvailable = 0x00000080,
  kFolderInRemoteUserFolderIfAvailableBit = 7,
  kFolderNeverMatchedInIdentifyFolder = 0x00000100,
  kFolderNeverMatchedInIdentifyFolderBit = 8,
  kFolderMustStayOnSameVolume = 0x00000200,
  kFolderMustStayOnSameVolumeBit = 9,
  kFolderManagerFolderInMacOS9FolderIfMacOSXIsInstalledMask = 0x00000400,
  kFolderManagerFolderInMacOS9FolderIfMacOSXIsInstalledBit = 10,
  kFolderInLocalOrRemoteUserFolder = kFolderInUserFolder | kFolderInRemoteUserFolderIfAvailable,
  kFolderManagerNotCreatedOnRemoteVolumesBit = 11,
  kFolderManagerNotCreatedOnRemoteVolumesMask = (1 << kFolderManagerNotCreatedOnRemoteVolumesBit),
  kFolderManagerNewlyCreatedFolderIsLocalizedBit = 12,
  kFolderManagerNewlyCreatedFolderShouldHaveDotLocalizedCreatedWithinMask = (1 << kFolderManagerNewlyCreatedFolderIsLocalizedBit)
};

typedef UInt32 FolderDescFlags;

enum {
  kRelativeFolder = 'relf',
  kRedirectedRelativeFolder = 'rrel',
  kSpecialFolder = 'spcf'
};

typedef OSType FolderClass;

enum {
  kBlessedFolder = 'blsf',
  kRootFolder = 'rotf'
};

enum {
  kCurrentUserFolderLocation = 'cusf'
};


enum {
  kDictionariesFolderType = 'dict',
  kLogsFolderType = 'logs',
  kDeveloperApplicationsFolderType = 'dapp',
  kPreferencePanesFolderType = 'ppan'
};


enum {
  kWidgetsFolderType = 'wdgt',
  kScreenSaversFolderType = 'scrn'
};

typedef OSType FolderType;
typedef OSType FolderLocation;

struct FolderDesc {
  Size descSize;
  FolderType foldType;
  FolderDescFlags flags;
  FolderClass foldClass;
  FolderType foldLocation;
  OSType badgeSignature;
  OSType badgeType;
  UInt32 reserved;
  StrFileName name;
};
typedef struct FolderDesc FolderDesc;
typedef FolderDesc * FolderDescPtr;

typedef UInt32 RoutingFlags;
struct FolderRouting {
  Size descSize;
  OSType fileType;
  FolderType routeFromFolder;
  FolderType routeToFolder;
  RoutingFlags flags;
};
typedef struct FolderRouting FolderRouting;
typedef FolderRouting * FolderRoutingPtr;
# 668 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
AddFolderDescriptor(
  FolderType foldType,
  FolderDescFlags flags,
  FolderClass foldClass,
  FolderLocation foldLocation,
  OSType badgeSignature,
  OSType badgeType,
  ConstStrFileNameParam name,
  Boolean replaceFlag) ;
# 720 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
GetFolderTypes(
  UInt32 requestedTypeCount,
  UInt32 * totalTypeCount,
  FolderType * theTypes) ;
# 748 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
RemoveFolderDescriptor(FolderType foldType) ;
# 794 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSStatus
GetFolderNameUnicode(
  FSVolumeRefNum vRefNum,
  OSType foldType,
  FSVolumeRefNum * foundVRefNum,
  HFSUniStr255 * name) ;
# 841 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
InvalidateFolderDescriptorCache(
  FSVolumeRefNum vRefNum,
  SInt32 dirID) ;
# 886 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
IdentifyFolder(
  FSVolumeRefNum vRefNum,
  SInt32 dirID,
  FolderType * foldType) ;
# 942 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FSDetermineIfRefIsEnclosedByFolder(
  FSVolumeRefNum domainOrVRefNum,
  OSType folderType,
  const FSRef * inRef,
  Boolean * outResult) ;
# 1004 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
DetermineIfPathIsEnclosedByFolder(
  FSVolumeRefNum domainOrVRefNum,
  OSType folderType,
  const UInt8 * utf8Path,
  Boolean pathIsRealPath,
  Boolean * outResult) ;
# 1096 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FindFolderExtended(
  FSVolumeRefNum vRefNum,
  OSType folderType,
  Boolean createFolder,
  UInt32 flags,
  void * data,
  FSVolumeRefNum * foundVRefNum,
  SInt32 * foundDirID) ;
# 1179 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FSFindFolderExtended(
  FSVolumeRefNum vRefNum,
  OSType folderType,
  Boolean createFolder,
  UInt32 flags,
  void * data,
  FSRef * foundRef) ;
# 1225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
GetFolderDescriptor(
  FolderType foldType,
  Size descSize,
  FolderDesc * foldDesc) ;
# 1276 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
GetFolderName(
  FSVolumeRefNum vRefNum,
  OSType foldType,
  FSVolumeRefNum * foundVRefNum,
  StrFileName name) ;
# 1332 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
AddFolderRouting(
  OSType fileType,
  FolderType routeFromFolder,
  FolderType routeToFolder,
  RoutingFlags flags,
  Boolean replaceFlag) ;
# 1375 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
RemoveFolderRouting(
  OSType fileType,
  FolderType routeFromFolder) ;
# 1427 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FindFolderRouting(
  OSType fileType,
  FolderType routeFromFolder,
  FolderType * routeToFolder,
  RoutingFlags * flags) ;
# 1481 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
GetFolderRoutings(
  UInt32 requestedRoutingCount,
  UInt32 * totalRoutingCount,
  Size routingSize,
  FolderRouting * theRoutings) ;
# 1540 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FSpDetermineIfSpecIsEnclosedByFolder(
  FSVolumeRefNum domainOrVRefNum,
  OSType folderType,
  const FSSpec * inSpec,
  Boolean * outResult) ;




typedef OSStatus ( * FolderManagerNotificationProcPtr)(OSType message, void *arg, void *userRefCon);
typedef FolderManagerNotificationProcPtr FolderManagerNotificationUPP;
# 1560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern FolderManagerNotificationUPP
NewFolderManagerNotificationUPP(FolderManagerNotificationProcPtr userRoutine) ;
# 1571 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern void
DisposeFolderManagerNotificationUPP(FolderManagerNotificationUPP userUPP) ;
# 1582 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSStatus
InvokeFolderManagerNotificationUPP(
  OSType message,
  void * arg,
  void * userRefCon,
  FolderManagerNotificationUPP userUPP) ;



    inline FolderManagerNotificationUPP NewFolderManagerNotificationUPP(FolderManagerNotificationProcPtr userRoutine) { return userRoutine; }
    inline void DisposeFolderManagerNotificationUPP(FolderManagerNotificationUPP) { }
    inline OSStatus InvokeFolderManagerNotificationUPP(OSType message, void * arg, void * userRefCon, FolderManagerNotificationUPP userUPP) { return (*userUPP)(message, arg, userRefCon); }
# 1627 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FolderManagerRegisterNotificationProc(
  FolderManagerNotificationUPP notificationProc,
  void * refCon,
  UInt32 options) ;
# 1657 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSErr
FolderManagerUnregisterNotificationProc(
  FolderManagerNotificationUPP notificationProc,
  void * refCon) ;
# 1688 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
extern OSStatus
FolderManagerRegisterCallNotificationProcs(
  OSType message,
  void * arg,
  UInt32 options) ;
# 1703 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Folders.h" 3
#pragma pack(pop)


}
# 175 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 1 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern "C" {


#pragma pack(push, 2)
# 74 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
Microseconds(UnsignedWide * microTickCount) ;
# 112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
enum {

  kTMTaskActive = (1L << 15)
};

typedef struct TMTask TMTask;
typedef TMTask * TMTaskPtr;
typedef void ( * TimerProcPtr)(TMTaskPtr tmTaskPtr);
typedef TimerProcPtr TimerUPP;
struct TMTask {
  QElemPtr qLink;
  short qType;
  TimerUPP tmAddr;
  long tmCount;
  long tmWakeUp;
  long tmReserved;
};
# 141 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
InsTime(QElemPtr tmTaskPtr) ;
# 156 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
InsXTime(QElemPtr tmTaskPtr) ;
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
PrimeTime(
  QElemPtr tmTaskPtr,
  long count) ;
# 188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
RmvTime(QElemPtr tmTaskPtr) ;
# 228 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern OSErr
InstallTimeTask(QElemPtr tmTaskPtr) ;
# 278 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern OSErr
InstallXTimeTask(QElemPtr tmTaskPtr) ;
# 341 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern OSErr
PrimeTimeTask(
  QElemPtr tmTaskPtr,
  long count) ;
# 391 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern OSErr
RemoveTimeTask(QElemPtr tmTaskPtr) ;
# 404 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern TimerUPP
NewTimerUPP(TimerProcPtr userRoutine) ;
# 415 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
DisposeTimerUPP(TimerUPP userUPP) ;
# 426 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
extern void
InvokeTimerUPP(
  TMTaskPtr tmTaskPtr,
  TimerUPP userUPP) ;



    inline TimerUPP NewTimerUPP(TimerProcPtr userRoutine) { return userRoutine; }
    inline void DisposeTimerUPP(TimerUPP) { }
    inline void InvokeTimerUPP(TMTaskPtr tmTaskPtr, TimerUPP userUPP) { (*userUPP)(tmTaskPtr); }
# 446 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Timer.h" 3
#pragma pack(pop)


}
# 179 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MultiprocessingInfo.h" 1 3
# 45 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MultiprocessingInfo.h" 3
extern "C" {


#pragma options align=power
# 148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MultiprocessingInfo.h" 3
extern OSStatus
MPGetNextCpuID(
  MPCoherenceID owningCoherenceID,
  MPCpuID * cpuID) ;
# 182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MultiprocessingInfo.h" 3
extern OSStatus
MPGetNextTaskID(
  MPProcessID owningProcessID,
  MPTaskID * taskID) ;
# 299 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MultiprocessingInfo.h" 3
enum {

  kMPQueueInfoVersion = 1L | (kOpaqueQueueID << 16),
  kMPSemaphoreInfoVersion = 1L | (kOpaqueSemaphoreID << 16),
  kMPEventInfoVersion = 1L | (kOpaqueEventID << 16),
  kMPCriticalRegionInfoVersion = 1L | (kOpaqueCriticalRegionID << 16),
  kMPNotificationInfoVersion = 1L | (kOpaqueNotificationID << 16),
  kMPAddressSpaceInfoVersion = 1L | (kOpaqueAddressSpaceID << 16)
};


struct MPQueueInfo {
  PBVersion version;

  MPProcessID processID;
  OSType queueName;

  ItemCount nWaiting;
  MPTaskID waitingTaskID;

  ItemCount nMessages;
  ItemCount nReserved;

  void * p1;
  void * p2;
  void * p3;
};
typedef struct MPQueueInfo MPQueueInfo;
struct MPSemaphoreInfo {
  PBVersion version;

  MPProcessID processID;
  OSType semaphoreName;

  ItemCount nWaiting;
  MPTaskID waitingTaskID;

  ItemCount maximum;
  ItemCount count;
};
typedef struct MPSemaphoreInfo MPSemaphoreInfo;
struct MPEventInfo {
  PBVersion version;

  MPProcessID processID;
  OSType eventName;

  ItemCount nWaiting;
  MPTaskID waitingTaskID;

  MPEventFlags events;
};
typedef struct MPEventInfo MPEventInfo;
struct MPCriticalRegionInfo {
  PBVersion version;

  MPProcessID processID;
  OSType regionName;

  ItemCount nWaiting;
  MPTaskID waitingTaskID;

  MPTaskID owningTask;
  ItemCount count;
};
typedef struct MPCriticalRegionInfo MPCriticalRegionInfo;
struct MPNotificationInfo {
  PBVersion version;

  MPProcessID processID;
  OSType notificationName;

  MPQueueID queueID;
  void * p1;
  void * p2;
  void * p3;

  MPEventID eventID;
  MPEventFlags events;

  MPSemaphoreID semaphoreID;
};
typedef struct MPNotificationInfo MPNotificationInfo;
struct MPAddressSpaceInfo {
  PBVersion version;

  MPProcessID processID;
  MPCoherenceID groupID;
  ItemCount nTasks;
  UInt32 vsid[16];
};
typedef struct MPAddressSpaceInfo MPAddressSpaceInfo;
# 460 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MultiprocessingInfo.h" 3
#pragma options align=reset


}
# 183 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3
# 194 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 1 3
# 49 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern "C" {


#pragma pack(push, 2)
# 124 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetMemTop(void) ;
# 135 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetMemTop(Ptr value) ;
# 147 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetBufPtr(void) ;
# 158 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetBufPtr(Ptr value) ;
# 170 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetHeapEnd(void) ;
# 181 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetHeapEnd(Ptr value) ;
# 192 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetCPUFlag(void) ;
# 203 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetCPUFlag(UInt8 value) ;
# 215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetRndSeed(void) ;
# 226 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetRndSeed(SInt32 value) ;
# 238 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetSEvtEnb(void) ;
# 249 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSEvtEnb(UInt8 value) ;
# 262 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetBootDrive(void) ;
# 273 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetBootDrive(SInt16 value) ;
# 286 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetSdVolume(void) ;
# 297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSdVolume(UInt8 value) ;
# 309 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetSoundPtr(void) ;
# 320 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSoundPtr(Ptr value) ;
# 332 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetSoundBase(void) ;
# 343 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSoundBase(Ptr value) ;
# 355 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetSoundLevel(void) ;
# 366 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSoundLevel(UInt8 value) ;
# 378 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetCurPitch(void) ;
# 389 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetCurPitch(SInt16 value) ;
# 587 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetScrDmpEnb(void) ;
# 598 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetScrDmpEnb(UInt8 value) ;
# 610 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetBufTgFNum(void) ;
# 621 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetBufTgFNum(SInt32 value) ;
# 633 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetBufTgFFlg(void) ;
# 644 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetBufTgFFlg(SInt16 value) ;
# 656 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetBufTgFBkNum(void) ;
# 667 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetBufTgFBkNum(SInt16 value) ;
# 679 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetBufTgDate(void) ;
# 690 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetBufTgDate(SInt32 value) ;
# 701 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetMinStack(void) ;
# 712 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetMinStack(SInt32 value) ;
# 724 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetDefltStack(void) ;
# 735 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetDefltStack(SInt32 value) ;
# 746 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Handle LMGetGZRootHnd(void) ;
# 757 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetGZRootHnd(Handle value) ;
# 769 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Handle LMGetGZMoveHnd(void) ;
# 780 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetGZMoveHnd(Handle value) ;
# 791 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UniversalProcPtr LMGetToExtFS(void) ;
# 802 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetToExtFS(UniversalProcPtr value) ;
# 813 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UniversalProcPtr LMGetJStash(void) ;
# 824 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetJStash(UniversalProcPtr value) ;
# 835 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern FSIORefNum LMGetCurApRefNum(void) ;
# 846 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetCurApRefNum(FSIORefNum value) ;
# 862 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetCurStackBase(void) ;
# 876 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetCurStackBase(Ptr value) ;
# 887 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetCurPageOption(void) ;
# 898 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetCurPageOption(SInt16 value) ;
# 911 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetPrintErr(void) ;
# 922 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetPrintErr(SInt16 value) ;
# 939 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetApFontID(void) ;
# 954 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetApFontID(SInt16 value) ;
# 966 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetOneOne(void) ;
# 977 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetOneOne(SInt32 value) ;
# 988 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt32 LMGetMinusOne(void) ;
# 999 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetMinusOne(SInt32 value) ;
# 1012 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetSysMap(void) ;
# 1023 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSysMap(SInt16 value) ;
# 1034 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetResLoad(void) ;
# 1045 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetResLoad(UInt8 value) ;
# 1056 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetResErr(void) ;
# 1067 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetResErr(SInt16 value) ;
# 1078 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UInt8 LMGetTmpResLoad(void) ;
# 1089 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetTmpResLoad(UInt8 value) ;
# 1101 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetIntlSpec(void) ;
# 1112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetIntlSpec(Ptr value) ;
# 1129 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetSysFontFam(void) ;
# 1146 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSysFontFam(SInt16 value) ;
# 1161 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern SInt16 LMGetSysFontSize(void) ;
# 1176 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSysFontSize(SInt16 value) ;
# 1193 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern StringPtr LMGetCurApName(void) ;
# 1204 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetCurApName(ConstStr31Param curApNameValue) ;
# 1219 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern StringPtr LMGetSysResName(void) ;
# 1234 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetSysResName(ConstStr15Param sysResNameValue) ;
# 1251 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern StringPtr LMGetFinderName(void) ;
# 1266 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetFinderName(ConstStr15Param finderNameValue) ;
# 1283 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetToolScratch(void) ;
# 1300 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetToolScratch(const void * toolScratchValue) ;
# 1317 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern UniversalProcPtr LMGetLvl2DT(short vectorNumber) ;
# 1328 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetLvl2DT(UniversalProcPtr Lvl2DTValue, short vectorNumber) ;
# 1352 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetHighHeapMark(void) ;
# 1363 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetHighHeapMark(Ptr value) ;
# 1375 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetStackLowPoint(void) ;
# 1386 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetStackLowPoint(Ptr value) ;
# 1398 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern Ptr LMGetDiskFormatingHFSDefaults(void) ;
# 1409 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/LowMem.h" 3
extern void LMSetDiskFormatingHFSDefaults(Ptr value) ;






#pragma pack(pop)


}
# 195 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern "C" {


#pragma pack(push, 2)
# 48 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef UInt16 AVLVisitStage;
enum {




  kAVLPreOrder = 0,





  kAVLInOrder = 1,




  kAVLPostOrder = 2
};
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef UInt16 AVLOrder;
enum {




  kLeftToRight = 0,




  kRightToLeft = 1
};
# 96 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef UInt16 AVLNodeType;
enum {
  kAVLIsTree = 0,
  kAVLIsLeftBranch = 1,
  kAVLIsRightBranch = 2,
  kAVLIsLeaf = 3,
  kAVLNullNode = 4
};

enum {
  errItemAlreadyInTree = -960,
  errNotValidTree = -961,
  errItemNotFoundInTree = -962,
  errCanNotInsertWhileWalkProcInProgress = -963,
  errTreeIsLocked = -964
};
# 124 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
struct AVLTreeStruct {
  OSType signature;
  unsigned long privateStuff[8];
};
typedef struct AVLTreeStruct AVLTreeStruct;
typedef AVLTreeStruct * AVLTreePtr;
# 166 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef SInt32 ( * AVLCompareItemsProcPtr)(AVLTreePtr tree, const void *i1, const void *i2, AVLNodeType nd_typ);
# 192 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef ByteCount ( * AVLItemSizeProcPtr)(AVLTreePtr tree, const void *itemPtr);
# 216 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef void ( * AVLDisposeItemProcPtr)(AVLTreePtr tree, const void *dataP);
# 269 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
typedef OSErr ( * AVLWalkProcPtr)(AVLTreePtr tree, const void *dataPtr, AVLVisitStage visitStage, AVLNodeType node, UInt32 level, SInt32 balance, void *refCon);
typedef AVLCompareItemsProcPtr AVLCompareItemsUPP;
typedef AVLItemSizeProcPtr AVLItemSizeUPP;
typedef AVLDisposeItemProcPtr AVLDisposeItemUPP;
typedef AVLWalkProcPtr AVLWalkUPP;
# 282 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern AVLCompareItemsUPP
NewAVLCompareItemsUPP(AVLCompareItemsProcPtr userRoutine) ;
# 293 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern AVLItemSizeUPP
NewAVLItemSizeUPP(AVLItemSizeProcPtr userRoutine) ;
# 304 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern AVLDisposeItemUPP
NewAVLDisposeItemUPP(AVLDisposeItemProcPtr userRoutine) ;
# 315 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern AVLWalkUPP
NewAVLWalkUPP(AVLWalkProcPtr userRoutine) ;
# 326 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern void
DisposeAVLCompareItemsUPP(AVLCompareItemsUPP userUPP) ;
# 337 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern void
DisposeAVLItemSizeUPP(AVLItemSizeUPP userUPP) ;
# 348 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern void
DisposeAVLDisposeItemUPP(AVLDisposeItemUPP userUPP) ;
# 359 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern void
DisposeAVLWalkUPP(AVLWalkUPP userUPP) ;
# 370 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern SInt32
InvokeAVLCompareItemsUPP(
  AVLTreePtr tree,
  const void * i1,
  const void * i2,
  AVLNodeType nd_typ,
  AVLCompareItemsUPP userUPP) ;
# 386 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern ByteCount
InvokeAVLItemSizeUPP(
  AVLTreePtr tree,
  const void * itemPtr,
  AVLItemSizeUPP userUPP) ;
# 400 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern void
InvokeAVLDisposeItemUPP(
  AVLTreePtr tree,
  const void * dataP,
  AVLDisposeItemUPP userUPP) ;
# 414 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
InvokeAVLWalkUPP(
  AVLTreePtr tree,
  const void * dataPtr,
  AVLVisitStage visitStage,
  AVLNodeType node,
  UInt32 level,
  SInt32 balance,
  void * refCon,
  AVLWalkUPP userUPP) ;



    inline AVLCompareItemsUPP NewAVLCompareItemsUPP(AVLCompareItemsProcPtr userRoutine) { return userRoutine; }
    inline AVLItemSizeUPP NewAVLItemSizeUPP(AVLItemSizeProcPtr userRoutine) { return userRoutine; }
    inline AVLDisposeItemUPP NewAVLDisposeItemUPP(AVLDisposeItemProcPtr userRoutine) { return userRoutine; }
    inline AVLWalkUPP NewAVLWalkUPP(AVLWalkProcPtr userRoutine) { return userRoutine; }
    inline void DisposeAVLCompareItemsUPP(AVLCompareItemsUPP) { }
    inline void DisposeAVLItemSizeUPP(AVLItemSizeUPP) { }
    inline void DisposeAVLDisposeItemUPP(AVLDisposeItemUPP) { }
    inline void DisposeAVLWalkUPP(AVLWalkUPP) { }
    inline SInt32 InvokeAVLCompareItemsUPP(AVLTreePtr tree, const void * i1, const void * i2, AVLNodeType nd_typ, AVLCompareItemsUPP userUPP) { return (*userUPP)(tree, i1, i2, nd_typ); }
    inline ByteCount InvokeAVLItemSizeUPP(AVLTreePtr tree, const void * itemPtr, AVLItemSizeUPP userUPP) { return (*userUPP)(tree, itemPtr); }
    inline void InvokeAVLDisposeItemUPP(AVLTreePtr tree, const void * dataP, AVLDisposeItemUPP userUPP) { (*userUPP)(tree, dataP); }
    inline OSErr InvokeAVLWalkUPP(AVLTreePtr tree, const void * dataPtr, AVLVisitStage visitStage, AVLNodeType node, UInt32 level, SInt32 balance, void * refCon, AVLWalkUPP userUPP) { return (*userUPP)(tree, dataPtr, visitStage, node, level, balance, refCon); }
# 511 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLInit(
  UInt32 flags,
  AVLCompareItemsUPP compareItemsProc,
  AVLItemSizeUPP sizeItemProc,
  AVLDisposeItemUPP disposeItemProc,
  void * refCon,
  AVLTreePtr * tree) ;
# 551 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLDispose(
  AVLTreePtr * tree,
  AVLOrder order) ;
# 619 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLWalk(
  AVLTreePtr tree,
  AVLWalkUPP walkProc,
  AVLOrder order,
  void * walkRefCon) ;
# 655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLCount(
  AVLTreePtr tree,
  UInt32 * count) ;
# 705 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLGetIndItem(
  AVLTreePtr tree,
  UInt32 index,
  void * dataPtr,
  ByteCount * itemSize) ;
# 747 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLInsert(
  AVLTreePtr tree,
  const void * data) ;
# 799 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLRemove(
  AVLTreePtr tree,
  const void * key,
  void * dataPtr,
  ByteCount * itemSize) ;
# 851 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLFind(
  AVLTreePtr tree,
  const void * key,
  void * dataPtr,
  ByteCount * itemSize) ;
# 887 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AVLTree.h" 3
extern OSErr
AVLGetRefcon(
  AVLTreePtr tree,
  void ** refCon) ;





#pragma pack(pop)


}
# 199 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 1 3
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
#pragma pack(push, 2)
# 102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFContainerHeader {
  OSType tag1;
  OSType tag2;
  OSType architecture;
  UInt32 formatVersion;
  UInt32 dateTimeStamp;
  UInt32 oldDefVersion;
  UInt32 oldImpVersion;
  UInt32 currentVersion;
  UInt16 sectionCount;
  UInt16 instSectionCount;
  UInt32 reservedA;
};
typedef struct PEFContainerHeader PEFContainerHeader;
enum {
  kPEFTag1 = 'Joy!',
  kPEFTag2 = 'peff',
  kPEFVersion = 0x00000001
};


enum {
  kPEFFirstSectionHeaderOffset = sizeof(PEFContainerHeader)
};
# 138 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFSectionHeader {
  SInt32 nameOffset;
  UInt32 defaultAddress;
  UInt32 totalLength;
  UInt32 unpackedLength;
  UInt32 containerLength;
  UInt32 containerOffset;
  UInt8 sectionKind;
  UInt8 shareKind;
  UInt8 alignment;
  UInt8 reservedA;
};
typedef struct PEFSectionHeader PEFSectionHeader;
enum {


  kPEFCodeSection = 0,
  kPEFUnpackedDataSection = 1,
  kPEFPackedDataSection = 2,
  kPEFConstantSection = 3,
  kPEFExecDataSection = 6,

  kPEFLoaderSection = 4,
  kPEFDebugSection = 5,
  kPEFExceptionSection = 7,
  kPEFTracebackSection = 8
};


enum {

  kPEFProcessShare = 1,
  kPEFGlobalShare = 4,
  kPEFProtectedShare = 5
};
# 197 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {

  kPEFPkDataZero = 0,
  kPEFPkDataBlock = 1,
  kPEFPkDataRepeat = 2,
  kPEFPkDataRepeatBlock = 3,
  kPEFPkDataRepeatZero = 4
};


enum {
  kPEFPkDataOpcodeShift = 5,
  kPEFPkDataCount5Mask = 0x1F,
  kPEFPkDataMaxCount5 = 31,
  kPEFPkDataVCountShift = 7,
  kPEFPkDataVCountMask = 0x7F,
  kPEFPkDataVCountEndMask = 0x80
};
# 313 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFLoaderInfoHeader {
  SInt32 mainSection;
  UInt32 mainOffset;
  SInt32 initSection;
  UInt32 initOffset;
  SInt32 termSection;
  UInt32 termOffset;
  UInt32 importedLibraryCount;
  UInt32 totalImportedSymbolCount;
  UInt32 relocSectionCount;
  UInt32 relocInstrOffset;
  UInt32 loaderStringsOffset;
  UInt32 exportHashOffset;
  UInt32 exportHashTablePower;
  UInt32 exportedSymbolCount;
};
typedef struct PEFLoaderInfoHeader PEFLoaderInfoHeader;







struct PEFImportedLibrary {
  UInt32 nameOffset;
  UInt32 oldImpVersion;
  UInt32 currentVersion;
  UInt32 importedSymbolCount;
  UInt32 firstImportedSymbol;
  UInt8 options;
  UInt8 reservedA;
  UInt16 reservedB;
};
typedef struct PEFImportedLibrary PEFImportedLibrary;
enum {

  kPEFWeakImportLibMask = 0x40,
  kPEFInitLibBeforeMask = 0x80
};
# 375 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFImportedSymbol {
  UInt32 classAndName;
};
typedef struct PEFImportedSymbol PEFImportedSymbol;
enum {
  kPEFImpSymClassShift = 24,
  kPEFImpSymNameOffsetMask = 0x00FFFFFF,
  kPEFImpSymMaxNameOffset = 0x00FFFFFF
};







enum {

  kPEFCodeSymbol = 0x00,
  kPEFDataSymbol = 0x01,
  kPEFTVectorSymbol = 0x02,
  kPEFTOCSymbol = 0x03,
  kPEFGlueSymbol = 0x04,
  kPEFUndefinedSymbol = 0x0F,
  kPEFWeakImportSymMask = 0x80
};
# 469 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFExportedSymbolHashSlot {
  UInt32 countAndStart;
};
typedef struct PEFExportedSymbolHashSlot PEFExportedSymbolHashSlot;
enum {
  kPEFHashSlotSymCountShift = 18,
  kPEFHashSlotFirstKeyMask = 0x0003FFFF,
  kPEFHashSlotMaxSymbolCount = 0x00003FFF,
  kPEFHashSlotMaxKeyIndex = 0x0003FFFF
};
# 497 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFSplitHashWord {
  UInt16 nameLength;
  UInt16 hashValue;
};
typedef struct PEFSplitHashWord PEFSplitHashWord;
struct PEFExportedSymbolKey {
  union {
    UInt32 fullHashWord;
    PEFSplitHashWord splitHashWord;
  } u;
};
typedef struct PEFExportedSymbolKey PEFExportedSymbolKey;
enum {
  kPEFHashLengthShift = 16,
  kPEFHashValueMask = 0x0000FFFF,
  kPEFHashMaxLength = 0x0000FFFF
};
# 560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct PEFExportedSymbol {
  UInt32 classAndName;
  UInt32 symbolValue;
  SInt16 sectionIndex;
};
typedef struct PEFExportedSymbol PEFExportedSymbol;
# 578 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFExpSymClassShift = 24,
  kPEFExpSymNameOffsetMask = 0x00FFFFFF,
  kPEFExpSymMaxNameOffset = 0x00FFFFFF
};







enum {

  kPEFAbsoluteExport = -2,
  kPEFReexportedImport = -3
};
# 618 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
typedef UInt16 PEFRelocChunk;
struct PEFLoaderRelocationHeader {
  UInt16 sectionIndex;
  UInt16 reservedA;
  UInt32 relocCount;
  UInt32 firstRelocOffset;
};
typedef struct PEFLoaderRelocationHeader PEFLoaderRelocationHeader;
# 662 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocBasicOpcodeRange = 128
};
# 675 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocBySectDWithSkip = 0x00,
  kPEFRelocBySectC = 0x20,
  kPEFRelocBySectD = 0x21,
  kPEFRelocTVector12 = 0x22,
  kPEFRelocTVector8 = 0x23,
  kPEFRelocVTable8 = 0x24,
  kPEFRelocImportRun = 0x25,
  kPEFRelocSmByImport = 0x30,
  kPEFRelocSmSetSectC = 0x31,
  kPEFRelocSmSetSectD = 0x32,
  kPEFRelocSmBySection = 0x33,
  kPEFRelocIncrPosition = 0x40,
  kPEFRelocSmRepeat = 0x48,
  kPEFRelocSetPosition = 0x50,
  kPEFRelocLgByImport = 0x52,
  kPEFRelocLgRepeat = 0x58,
  kPEFRelocLgSetOrBySection = 0x5A,
  kPEFRelocUndefinedOpcode = 0xFF
};
# 704 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocLgBySectionSubopcode = 0x00,
  kPEFRelocLgSetSectCSubopcode = 0x01,
  kPEFRelocLgSetSectDSubopcode = 0x02
};
# 788 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocWithSkipMaxSkipCount = 255,
  kPEFRelocWithSkipMaxRelocCount = 63
};
# 822 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocRunMaxRunLength = 512
};
# 861 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocSmIndexMaxIndex = 511
};
# 897 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocIncrPositionMaxOffset = 4096
};
# 927 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocSmRepeatMaxChunkCount = 16,
  kPEFRelocSmRepeatMaxRepeatCount = 256
};
# 958 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocSetPosMaxOffset = 0x03FFFFFF
};
# 992 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocLgByImportMaxIndex = 0x03FFFFFF
};
# 1027 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocLgRepeatMaxChunkCount = 16,
  kPEFRelocLgRepeatMaxRepeatCount = 0x003FFFFF
};
# 1065 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
enum {
  kPEFRelocLgSetOrBySectionMaxIndex = 0x003FFFFF
};
# 1147 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
struct XLibContainerHeader {



  OSType tag1;
  OSType tag2;
  UInt32 currentFormat;
  UInt32 containerStringsOffset;
  UInt32 exportHashOffset;
  UInt32 exportKeyOffset;
  UInt32 exportSymbolOffset;
  UInt32 exportNamesOffset;
  UInt32 exportHashTablePower;
  UInt32 exportedSymbolCount;



  UInt32 fragNameOffset;
  UInt32 fragNameLength;
  UInt32 dylibPathOffset;
  UInt32 dylibPathLength;
  OSType cpuFamily;
  OSType cpuModel;
  UInt32 dateTimeStamp;
  UInt32 currentVersion;
  UInt32 oldDefVersion;
  UInt32 oldImpVersion;

};
typedef struct XLibContainerHeader XLibContainerHeader;
enum {
  kXLibTag1 = (long)0xF04D6163 ,
  kVLibTag2 = 'VLib',
  kBLibTag2 = 'BLib',
  kXLibVersion = 0x00000001
};



typedef PEFExportedSymbolHashSlot XLibExportedSymbolHashSlot;
typedef PEFExportedSymbolKey XLibExportedSymbolKey;
struct XLibExportedSymbol {
  UInt32 classAndName;
  UInt32 bpOffset;
};
typedef struct XLibExportedSymbol XLibExportedSymbol;
# 1579 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/PEFBinaryFormat.h" 3
#pragma pack(pop)
# 203 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/HFSVolumes.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/HFSVolumes.h" 3
# 1 "/usr/include/hfs/hfs_format.h" 1 3 4
# 40 "/usr/include/hfs/hfs_format.h" 3 4
extern "C" {





enum {
 kHFSSigWord = 0x4244,
 kHFSPlusSigWord = 0x482B,
 kHFSXSigWord = 0x4858,

 kHFSPlusVersion = 0x0004,
 kHFSXVersion = 0x0005,

 kHFSPlusMountVersion = 0x31302E30,
 kHFSJMountVersion = 0x4846534a,
 kFSKMountVersion = 0x46534b21
};
# 108 "/usr/include/hfs/hfs_format.h" 3 4
enum {
 kHardLinkFileType = 0x686C6E6B,
 kHFSPlusCreator = 0x6866732B
};





enum {
      kSymLinkFileType = 0x736C6E6B,
      kSymLinkCreator = 0x72686170
};
# 134 "/usr/include/hfs/hfs_format.h" 3 4
enum {
 kHFSMaxVolumeNameChars = 27,
 kHFSMaxFileNameChars = 31,
 kHFSPlusMaxFileNameChars = 255
};





struct HFSExtentKey {
 u_int8_t keyLength;
 u_int8_t forkType;
 u_int32_t fileID;
 u_int16_t startBlock;
} __attribute__((aligned(2), packed));
typedef struct HFSExtentKey HFSExtentKey;


struct HFSPlusExtentKey {
 u_int16_t keyLength;
 u_int8_t forkType;
 u_int8_t pad;
 u_int32_t fileID;
 u_int32_t startBlock;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusExtentKey HFSPlusExtentKey;


enum {
 kHFSExtentDensity = 3,
 kHFSPlusExtentDensity = 8
};


struct HFSExtentDescriptor {
 u_int16_t startBlock;
 u_int16_t blockCount;
} __attribute__((aligned(2), packed));
typedef struct HFSExtentDescriptor HFSExtentDescriptor;


struct HFSPlusExtentDescriptor {
 u_int32_t startBlock;
 u_int32_t blockCount;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusExtentDescriptor HFSPlusExtentDescriptor;


typedef HFSExtentDescriptor HFSExtentRecord[3];


typedef HFSPlusExtentDescriptor HFSPlusExtentRecord[8];



struct FndrFileInfo {
 u_int32_t fdType;
 u_int32_t fdCreator;
 u_int16_t fdFlags;
 struct {
     int16_t v;
     int16_t h;
 } fdLocation;
 int16_t opaque;
} __attribute__((aligned(2), packed));
typedef struct FndrFileInfo FndrFileInfo;

struct FndrDirInfo {
 struct {
     int16_t top;
     int16_t left;
     int16_t bottom;
     int16_t right;
 } frRect;
 unsigned short frFlags;
 struct {
     u_int16_t v;
     u_int16_t h;
 } frLocation;
 int16_t opaque;
} __attribute__((aligned(2), packed));
typedef struct FndrDirInfo FndrDirInfo;

struct FndrOpaqueInfo {
 int8_t opaque[16];
} __attribute__((aligned(2), packed));
typedef struct FndrOpaqueInfo FndrOpaqueInfo;



struct HFSPlusForkData {
 u_int64_t logicalSize;
 u_int32_t clumpSize;
 u_int32_t totalBlocks;
 HFSPlusExtentRecord extents;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusForkData HFSPlusForkData;







struct HFSPlusBSDInfo {
 u_int32_t ownerID;
 u_int32_t groupID;
 u_int8_t adminFlags;
 u_int8_t ownerFlags;
 u_int16_t fileMode;
 union {
     u_int32_t iNodeNum;
     u_int32_t linkCount;
     u_int32_t rawDevice;
 } special;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusBSDInfo HFSPlusBSDInfo;
# 275 "/usr/include/hfs/hfs_format.h" 3 4
enum {
 kHFSRootParentID = 1,
 kHFSRootFolderID = 2,
 kHFSExtentsFileID = 3,
 kHFSCatalogFileID = 4,
 kHFSBadBlockFileID = 5,
 kHFSAllocationFileID = 6,
 kHFSStartupFileID = 7,
 kHFSAttributesFileID = 8,
 kHFSAttributeDataFileID = 13,

 kHFSRepairCatalogFileID = 14,
 kHFSBogusExtentFileID = 15,
 kHFSFirstUserCatalogNodeID = 16
};


struct HFSCatalogKey {
 u_int8_t keyLength;
 u_int8_t reserved;
 u_int32_t parentID;
 u_int8_t nodeName[kHFSMaxFileNameChars + 1];
} __attribute__((aligned(2), packed));
typedef struct HFSCatalogKey HFSCatalogKey;


struct HFSPlusCatalogKey {
 u_int16_t keyLength;
 u_int32_t parentID;
 HFSUniStr255 nodeName;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusCatalogKey HFSPlusCatalogKey;


enum {

 kHFSFolderRecord = 0x0100,
 kHFSFileRecord = 0x0200,
 kHFSFolderThreadRecord = 0x0300,
 kHFSFileThreadRecord = 0x0400,


 kHFSPlusFolderRecord = 1,
 kHFSPlusFileRecord = 2,
 kHFSPlusFolderThreadRecord = 3,
 kHFSPlusFileThreadRecord = 4
};



enum {
 kHFSFileLockedBit = 0x0000,
 kHFSFileLockedMask = 0x0001,

 kHFSThreadExistsBit = 0x0001,
 kHFSThreadExistsMask = 0x0002,

 kHFSHasAttributesBit = 0x0002,
 kHFSHasAttributesMask = 0x0004,

 kHFSHasSecurityBit = 0x0003,
 kHFSHasSecurityMask = 0x0008,

 kHFSHasFolderCountBit = 0x0004,
 kHFSHasFolderCountMask = 0x0010,

 kHFSHasLinkChainBit = 0x0005,
 kHFSHasLinkChainMask = 0x0020,

 kHFSHasChildLinkBit = 0x0006,
 kHFSHasChildLinkMask = 0x0040
};



struct HFSCatalogFolder {
 int16_t recordType;
 u_int16_t flags;
 u_int16_t valence;
 u_int32_t folderID;
 u_int32_t createDate;
 u_int32_t modifyDate;
 u_int32_t backupDate;
 FndrDirInfo userInfo;
 FndrOpaqueInfo finderInfo;
 u_int32_t reserved[4];
} __attribute__((aligned(2), packed));
typedef struct HFSCatalogFolder HFSCatalogFolder;


struct HFSPlusCatalogFolder {
 int16_t recordType;
 u_int16_t flags;
 u_int32_t valence;
 u_int32_t folderID;
 u_int32_t createDate;
 u_int32_t contentModDate;
 u_int32_t attributeModDate;
 u_int32_t accessDate;
 u_int32_t backupDate;
 HFSPlusBSDInfo bsdInfo;
 FndrDirInfo userInfo;
 FndrOpaqueInfo finderInfo;
 u_int32_t textEncoding;
 u_int32_t folderCount;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusCatalogFolder HFSPlusCatalogFolder;


struct HFSCatalogFile {
 int16_t recordType;
 u_int8_t flags;
 int8_t fileType;
 FndrFileInfo userInfo;
 u_int32_t fileID;
 u_int16_t dataStartBlock;
 int32_t dataLogicalSize;
 int32_t dataPhysicalSize;
 u_int16_t rsrcStartBlock;
 int32_t rsrcLogicalSize;
 int32_t rsrcPhysicalSize;
 u_int32_t createDate;
 u_int32_t modifyDate;
 u_int32_t backupDate;
 FndrOpaqueInfo finderInfo;
 u_int16_t clumpSize;
 HFSExtentRecord dataExtents;
 HFSExtentRecord rsrcExtents;
 u_int32_t reserved;
} __attribute__((aligned(2), packed));
typedef struct HFSCatalogFile HFSCatalogFile;


struct HFSPlusCatalogFile {
 int16_t recordType;
 u_int16_t flags;
 u_int32_t reserved1;
 u_int32_t fileID;
 u_int32_t createDate;
 u_int32_t contentModDate;
 u_int32_t attributeModDate;
 u_int32_t accessDate;
 u_int32_t backupDate;
 HFSPlusBSDInfo bsdInfo;
 FndrFileInfo userInfo;
 FndrOpaqueInfo finderInfo;
 u_int32_t textEncoding;
 u_int32_t reserved2;


 HFSPlusForkData dataFork;
 HFSPlusForkData resourceFork;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusCatalogFile HFSPlusCatalogFile;


struct HFSCatalogThread {
 int16_t recordType;
 int32_t reserved[2];
 u_int32_t parentID;
 u_int8_t nodeName[kHFSMaxFileNameChars + 1];
} __attribute__((aligned(2), packed));
typedef struct HFSCatalogThread HFSCatalogThread;


struct HFSPlusCatalogThread {
 int16_t recordType;
 int16_t reserved;
 u_int32_t parentID;
 HFSUniStr255 nodeName;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusCatalogThread HFSPlusCatalogThread;






enum {
 kHFSPlusAttrInlineData = 0x10,
 kHFSPlusAttrForkData = 0x20,
 kHFSPlusAttrExtents = 0x30
};
# 466 "/usr/include/hfs/hfs_format.h" 3 4
struct HFSPlusAttrForkData {
 u_int32_t recordType;
 u_int32_t reserved;
 HFSPlusForkData theFork;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusAttrForkData HFSPlusAttrForkData;






struct HFSPlusAttrExtents {
 u_int32_t recordType;
 u_int32_t reserved;
 HFSPlusExtentRecord extents;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusAttrExtents HFSPlusAttrExtents;







struct HFSPlusAttrData {
 u_int32_t recordType;
 u_int32_t reserved[2];
 u_int32_t attrSize;
 u_int8_t attrData[2];
} __attribute__((aligned(2), packed));
typedef struct HFSPlusAttrData HFSPlusAttrData;



struct HFSPlusAttrInlineData {
 u_int32_t recordType;
 u_int32_t reserved;
 u_int32_t logicalSize;
 u_int8_t userData[2];
} __attribute__((aligned(2), packed));
typedef struct HFSPlusAttrInlineData HFSPlusAttrInlineData;



union HFSPlusAttrRecord {
 u_int32_t recordType;
 HFSPlusAttrInlineData inlineData;
 HFSPlusAttrData attrData;
 HFSPlusAttrForkData forkData;
 HFSPlusAttrExtents overflowExtents;
};
typedef union HFSPlusAttrRecord HFSPlusAttrRecord;


enum { kHFSMaxAttrNameLen = 127 };
struct HFSPlusAttrKey {
 u_int16_t keyLength;
 u_int16_t pad;
 u_int32_t fileID;
 u_int32_t startBlock;
 u_int16_t attrNameLen;
 u_int16_t attrName[kHFSMaxAttrNameLen];
} __attribute__((aligned(2), packed));
typedef struct HFSPlusAttrKey HFSPlusAttrKey;
# 539 "/usr/include/hfs/hfs_format.h" 3 4
enum {
 kHFSPlusExtentKeyMaximumLength = sizeof(HFSPlusExtentKey) - sizeof(u_int16_t),
 kHFSExtentKeyMaximumLength = sizeof(HFSExtentKey) - sizeof(u_int8_t),
 kHFSPlusCatalogKeyMaximumLength = sizeof(HFSPlusCatalogKey) - sizeof(u_int16_t),
 kHFSPlusCatalogKeyMinimumLength = kHFSPlusCatalogKeyMaximumLength - sizeof(HFSUniStr255) + sizeof(u_int16_t),
 kHFSCatalogKeyMaximumLength = sizeof(HFSCatalogKey) - sizeof(u_int8_t),
 kHFSCatalogKeyMinimumLength = kHFSCatalogKeyMaximumLength - (kHFSMaxFileNameChars + 1) + sizeof(u_int8_t),
 kHFSPlusCatalogMinNodeSize = 4096,
 kHFSPlusExtentMinNodeSize = 512,
 kHFSPlusAttrMinNodeSize = 4096
};


enum {

 kHFSVolumeHardwareLockBit = 7,
 kHFSVolumeUnmountedBit = 8,
 kHFSVolumeSparedBlocksBit = 9,
 kHFSVolumeNoCacheRequiredBit = 10,
 kHFSBootVolumeInconsistentBit = 11,
 kHFSCatalogNodeIDsReusedBit = 12,
 kHFSVolumeJournaledBit = 13,
 kHFSVolumeInconsistentBit = 14,
 kHFSVolumeSoftwareLockBit = 15,

 kHFSVolumeHardwareLockMask = 1 << kHFSVolumeHardwareLockBit,
 kHFSVolumeUnmountedMask = 1 << kHFSVolumeUnmountedBit,
 kHFSVolumeSparedBlocksMask = 1 << kHFSVolumeSparedBlocksBit,
 kHFSVolumeNoCacheRequiredMask = 1 << kHFSVolumeNoCacheRequiredBit,
 kHFSBootVolumeInconsistentMask = 1 << kHFSBootVolumeInconsistentBit,
 kHFSCatalogNodeIDsReusedMask = 1 << kHFSCatalogNodeIDsReusedBit,
 kHFSVolumeJournaledMask = 1 << kHFSVolumeJournaledBit,
 kHFSVolumeInconsistentMask = 1 << kHFSVolumeInconsistentBit,
 kHFSVolumeSoftwareLockMask = 1 << kHFSVolumeSoftwareLockBit,
 kHFSMDBAttributesMask = 0x8380
};




struct HFSMasterDirectoryBlock {
 u_int16_t drSigWord;
 u_int32_t drCrDate;
 u_int32_t drLsMod;
 u_int16_t drAtrb;
 u_int16_t drNmFls;
 u_int16_t drVBMSt;
 u_int16_t drAllocPtr;
 u_int16_t drNmAlBlks;
 u_int32_t drAlBlkSiz;
 u_int32_t drClpSiz;
 u_int16_t drAlBlSt;
 u_int32_t drNxtCNID;
 u_int16_t drFreeBks;
 u_int8_t drVN[kHFSMaxVolumeNameChars + 1];
 u_int32_t drVolBkUp;
 u_int16_t drVSeqNum;
 u_int32_t drWrCnt;
 u_int32_t drXTClpSiz;
 u_int32_t drCTClpSiz;
 u_int16_t drNmRtDirs;
 u_int32_t drFilCnt;
 u_int32_t drDirCnt;
 u_int32_t drFndrInfo[8];
 u_int16_t drEmbedSigWord;
 HFSExtentDescriptor drEmbedExtent;
 u_int32_t drXTFlSize;
 HFSExtentRecord drXTExtRec;
 u_int32_t drCTFlSize;
 HFSExtentRecord drCTExtRec;
} __attribute__((aligned(2), packed));
typedef struct HFSMasterDirectoryBlock HFSMasterDirectoryBlock;
# 623 "/usr/include/hfs/hfs_format.h" 3 4
struct HFSPlusVolumeHeader {
 u_int16_t signature;
 u_int16_t version;
 u_int32_t attributes;
 u_int32_t lastMountedVersion;
 u_int32_t journalInfoBlock;

 u_int32_t createDate;
 u_int32_t modifyDate;
 u_int32_t backupDate;
 u_int32_t checkedDate;

 u_int32_t fileCount;
 u_int32_t folderCount;

 u_int32_t blockSize;
 u_int32_t totalBlocks;
 u_int32_t freeBlocks;

 u_int32_t nextAllocation;
 u_int32_t rsrcClumpSize;
 u_int32_t dataClumpSize;
 u_int32_t nextCatalogID;

 u_int32_t writeCount;
 u_int64_t encodingsBitmap;

 u_int8_t finderInfo[32];

 HFSPlusForkData allocationFile;
 HFSPlusForkData extentsFile;
 HFSPlusForkData catalogFile;
 HFSPlusForkData attributesFile;
 HFSPlusForkData startupFile;
} __attribute__((aligned(2), packed));
typedef struct HFSPlusVolumeHeader HFSPlusVolumeHeader;




enum BTreeKeyLimits{
 kMaxKeyLength = 520
};

union BTreeKey{
 u_int8_t length8;
 u_int16_t length16;
 u_int8_t rawData [kMaxKeyLength+2];
};
typedef union BTreeKey BTreeKey;


struct BTNodeDescriptor {
 u_int32_t fLink;
 u_int32_t bLink;
 int8_t kind;
 u_int8_t height;
 u_int16_t numRecords;
 u_int16_t reserved;
} __attribute__((aligned(2), packed));
typedef struct BTNodeDescriptor BTNodeDescriptor;


enum {
 kBTLeafNode = -1,
 kBTIndexNode = 0,
 kBTHeaderNode = 1,
 kBTMapNode = 2
};


struct BTHeaderRec {
 u_int16_t treeDepth;
 u_int32_t rootNode;
 u_int32_t leafRecords;
 u_int32_t firstLeafNode;
 u_int32_t lastLeafNode;
 u_int16_t nodeSize;
 u_int16_t maxKeyLength;
 u_int32_t totalNodes;
 u_int32_t freeNodes;
 u_int16_t reserved1;
 u_int32_t clumpSize;
 u_int8_t btreeType;
 u_int8_t keyCompareType;
 u_int32_t attributes;
 u_int32_t reserved3[16];
} __attribute__((aligned(2), packed));
typedef struct BTHeaderRec BTHeaderRec;


enum {
 kBTBadCloseMask = 0x00000001,
 kBTBigKeysMask = 0x00000002,
 kBTVariableIndexKeysMask = 0x00000004
};



enum {
 kHFSCaseFolding = 0xCF,
 kHFSBinaryCompare = 0xBC
};


struct JournalInfoBlock {
 u_int32_t flags;
     u_int32_t device_signature[8];
 u_int64_t offset;
 u_int64_t size;
 u_int32_t reserved[32];
} __attribute__((aligned(2), packed));
typedef struct JournalInfoBlock JournalInfoBlock;

enum {
    kJIJournalInFSMask = 0x00000001,
    kJIJournalOnOtherDeviceMask = 0x00000002,
    kJIJournalNeedInitMask = 0x00000004
};



}
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/HFSVolumes.h" 2 3
# 41 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/HFSVolumes.h" 3
typedef UInt32 HFSCatalogNodeID;
# 207 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AIFF.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/AIFF.h" 3
#pragma pack(push, 2)

enum {
  AIFFID = 'AIFF',
  AIFCID = 'AIFC',
  FormatVersionID = 'FVER',
  CommonID = 'COMM',
  FORMID = 'FORM',
  SoundDataID = 'SSND',
  MarkerID = 'MARK',
  InstrumentID = 'INST',
  MIDIDataID = 'MIDI',
  AudioRecordingID = 'AESD',
  ApplicationSpecificID = 'APPL',
  CommentID = 'COMT',
  NameID = 'NAME',
  AuthorID = 'AUTH',
  CopyrightID = '(c) ',
  AnnotationID = 'ANNO'
};

enum {
  NoLooping = 0,
  ForwardLooping = 1,
  ForwardBackwardLooping = 2
};

enum {

  AIFCVersion1 = (long)0xA2805140
};







enum {

  NoneType = 'NONE',
  ACE2Type = 'ACE2',
  ACE8Type = 'ACE8',
  MACE3Type = 'MAC3',
  MACE6Type = 'MAC6'
};

typedef UInt32 ID;
typedef SInt16 MarkerIdType;
struct ChunkHeader {
  ID ckID;
  SInt32 ckSize;
};
typedef struct ChunkHeader ChunkHeader;
struct ContainerChunk {
  ID ckID;
  SInt32 ckSize;
  ID formType;
};
typedef struct ContainerChunk ContainerChunk;
struct FormatVersionChunk {
  ID ckID;
  SInt32 ckSize;
  UInt32 timestamp;
};
typedef struct FormatVersionChunk FormatVersionChunk;
typedef FormatVersionChunk * FormatVersionChunkPtr;
struct CommonChunk {
  ID ckID;
  SInt32 ckSize;
  SInt16 numChannels;
  UInt32 numSampleFrames;
  SInt16 sampleSize;
  extended80 sampleRate;
};
typedef struct CommonChunk CommonChunk;
typedef CommonChunk * CommonChunkPtr;
struct ExtCommonChunk {
  ID ckID;
  SInt32 ckSize;
  SInt16 numChannels;
  UInt32 numSampleFrames;
  SInt16 sampleSize;
  extended80 sampleRate;
  ID compressionType;
  char compressionName[1];
};
typedef struct ExtCommonChunk ExtCommonChunk;
typedef ExtCommonChunk * ExtCommonChunkPtr;
struct SoundDataChunk {
  ID ckID;
  SInt32 ckSize;
  UInt32 offset;
  UInt32 blockSize;
};
typedef struct SoundDataChunk SoundDataChunk;
typedef SoundDataChunk * SoundDataChunkPtr;
struct Marker {
  MarkerIdType id;
  UInt32 position;
  Str255 markerName;
};
typedef struct Marker Marker;
struct MarkerChunk {
  ID ckID;
  SInt32 ckSize;
  UInt16 numMarkers;
  Marker Markers[1];
};
typedef struct MarkerChunk MarkerChunk;
typedef MarkerChunk * MarkerChunkPtr;
struct AIFFLoop {
  SInt16 playMode;
  MarkerIdType beginLoop;
  MarkerIdType endLoop;
};
typedef struct AIFFLoop AIFFLoop;
struct InstrumentChunk {
  ID ckID;
  SInt32 ckSize;
  UInt8 baseFrequency;
  UInt8 detune;
  UInt8 lowFrequency;
  UInt8 highFrequency;
  UInt8 lowVelocity;
  UInt8 highVelocity;
  SInt16 gain;
  AIFFLoop sustainLoop;
  AIFFLoop releaseLoop;
};
typedef struct InstrumentChunk InstrumentChunk;
typedef InstrumentChunk * InstrumentChunkPtr;
struct MIDIDataChunk {
  ID ckID;
  SInt32 ckSize;
  UInt8 MIDIdata[1];
};
typedef struct MIDIDataChunk MIDIDataChunk;
typedef MIDIDataChunk * MIDIDataChunkPtr;
struct AudioRecordingChunk {
  ID ckID;
  SInt32 ckSize;
  UInt8 AESChannelStatus[24];
};
typedef struct AudioRecordingChunk AudioRecordingChunk;
typedef AudioRecordingChunk * AudioRecordingChunkPtr;
struct ApplicationSpecificChunk {
  ID ckID;
  SInt32 ckSize;
  OSType applicationSignature;
  UInt8 data[1];
};
typedef struct ApplicationSpecificChunk ApplicationSpecificChunk;
typedef ApplicationSpecificChunk * ApplicationSpecificChunkPtr;
struct Comment {
  UInt32 timeStamp;
  MarkerIdType marker;
  UInt16 count;
  char text[1];
};
typedef struct Comment Comment;
struct CommentsChunk {
  ID ckID;
  SInt32 ckSize;
  UInt16 numComments;
  Comment comments[1];
};
typedef struct CommentsChunk CommentsChunk;
typedef CommentsChunk * CommentsChunkPtr;
struct TextChunk {
  ID ckID;
  SInt32 ckSize;
  char text[1];
};
typedef struct TextChunk TextChunk;
typedef TextChunk * TextChunkPtr;

#pragma pack(pop)
# 211 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingPlugin.h" 1 3
# 39 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingPlugin.h" 3
#pragma pack(push, 2)
# 52 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingPlugin.h" 3
enum {
  kTECAvailableEncodingsResType = 'cven',
  kTECAvailableSniffersResType = 'cvsf',
  kTECSubTextEncodingsResType = 'cvsb',
  kTECConversionInfoResType = 'cvif',
  kTECMailEncodingsResType = 'cvml',
  kTECWebEncodingsResType = 'cvwb',
  kTECInternetNamesResType = 'cvmm'
};

enum {
  kTECPluginType = 'ecpg',
  kTECPluginCreator = 'encv',
  kTECPluginOneToOne = 'otoo',
  kTECPluginOneToMany = 'otom',
  kTECPluginManyToOne = 'mtoo',
  kTECPluginSniffObj = 'snif'
};

enum {
  verUnspecified = 32767,
  kTECResourceID = 128
};
# 84 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingPlugin.h" 3
struct TextEncodingRec {
  UInt32 base;
  UInt32 variant;
  UInt32 format;
};
typedef struct TextEncodingRec TextEncodingRec;

struct TECEncodingsListRec {
  UInt32 count;
  TextEncodingRec encodings;
};
typedef struct TECEncodingsListRec TECEncodingsListRec;
typedef TECEncodingsListRec * TECEncodingsListPtr;
typedef TECEncodingsListPtr * TECEncodingsListHandle;

struct TECSubTextEncodingRec {
  UInt32 offset;
  TextEncodingRec searchEncoding;
  UInt32 count;
  TextEncodingRec subEncodings;
};
typedef struct TECSubTextEncodingRec TECSubTextEncodingRec;
struct TECSubTextEncodingsRec {
  UInt32 count;
  TECSubTextEncodingRec subTextEncodingRec;
};
typedef struct TECSubTextEncodingsRec TECSubTextEncodingsRec;
typedef TECSubTextEncodingsRec * TECSubTextEncodingsPtr;
typedef TECSubTextEncodingsPtr * TECSubTextEncodingsHandle;

struct TECEncodingPairRec {
  TextEncodingRec source;
  TextEncodingRec dest;
};
typedef struct TECEncodingPairRec TECEncodingPairRec;
struct TECEncodingPairs {
  TECEncodingPairRec encodingPair;
  UInt32 flags;
  UInt32 speed;
};
typedef struct TECEncodingPairs TECEncodingPairs;
struct TECEncodingPairsRec {
  UInt32 count;
  TECEncodingPairs encodingPairs;
};
typedef struct TECEncodingPairsRec TECEncodingPairsRec;
typedef TECEncodingPairsRec * TECEncodingPairsPtr;
typedef TECEncodingPairsPtr * TECEncodingPairsHandle;

struct TECLocaleListToEncodingListRec {
  UInt32 offset;
  UInt32 count;
  RegionCode locales;

};
typedef struct TECLocaleListToEncodingListRec TECLocaleListToEncodingListRec;
typedef TECLocaleListToEncodingListRec * TECLocaleListToEncodingListPtr;
struct TECLocaleToEncodingsListRec {
  UInt32 count;
  TECLocaleListToEncodingListRec localeListToEncodingList;
};
typedef struct TECLocaleToEncodingsListRec TECLocaleToEncodingsListRec;
typedef TECLocaleToEncodingsListRec * TECLocaleToEncodingsListPtr;
typedef TECLocaleToEncodingsListPtr * TECLocaleToEncodingsListHandle;

struct TECInternetNameRec {
  UInt32 offset;
  TextEncodingRec searchEncoding;
  UInt8 encodingNameLength;
  UInt8 encodingName[1];
};
typedef struct TECInternetNameRec TECInternetNameRec;
struct TECInternetNamesRec {
  UInt32 count;
  TECInternetNameRec InternetNames;
};
typedef struct TECInternetNamesRec TECInternetNamesRec;
typedef TECInternetNamesRec * TECInternetNamesPtr;
typedef TECInternetNamesPtr * TECInternetNamesHandle;

struct TECBufferContextRec {
  ConstTextPtr textInputBuffer;
  ConstTextPtr textInputBufferEnd;
  TextPtr textOutputBuffer;
  TextPtr textOutputBufferEnd;

  ConstTextEncodingRunPtr encodingInputBuffer;
  ConstTextEncodingRunPtr encodingInputBufferEnd;
  TextEncodingRunPtr encodingOutputBuffer;
  TextEncodingRunPtr encodingOutputBufferEnd;
};
typedef struct TECBufferContextRec TECBufferContextRec;
struct TECPluginStateRec {

  UInt8 state1;
  UInt8 state2;
  UInt8 state3;
  UInt8 state4;

  UInt32 longState1;
  UInt32 longState2;
  UInt32 longState3;
  UInt32 longState4;
};
typedef struct TECPluginStateRec TECPluginStateRec;
struct TECConverterContextRec {


  Ptr pluginRec;
  TextEncoding sourceEncoding;
  TextEncoding destEncoding;
  UInt32 reserved1;
  UInt32 reserved2;
  TECBufferContextRec bufferContext;

  URefCon contextRefCon;
  ProcPtr conversionProc;
  ProcPtr flushProc;
  ProcPtr clearContextInfoProc;
  UInt32 options1;
  UInt32 options2;
  TECPluginStateRec pluginState;
};
typedef struct TECConverterContextRec TECConverterContextRec;
struct TECSnifferContextRec {

  Ptr pluginRec;
  TextEncoding encoding;
  ItemCount maxErrors;
  ItemCount maxFeatures;
  ConstTextPtr textInputBuffer;
  ConstTextPtr textInputBufferEnd;
  ItemCount numFeatures;
  ItemCount numErrors;

  URefCon contextRefCon;
  ProcPtr sniffProc;
  ProcPtr clearContextInfoProc;
  TECPluginStateRec pluginState;
};
typedef struct TECSnifferContextRec TECSnifferContextRec;






typedef OSStatus ( * TECPluginNewEncodingConverterPtr)(TECObjectRef *newEncodingConverter, TECConverterContextRec *plugContext, TextEncoding inputEncoding, TextEncoding outputEncoding);
typedef OSStatus ( * TECPluginClearContextInfoPtr)(TECObjectRef encodingConverter, TECConverterContextRec *plugContext);
typedef OSStatus ( * TECPluginConvertTextEncodingPtr)(TECObjectRef encodingConverter, TECConverterContextRec *plugContext);
typedef OSStatus ( * TECPluginFlushConversionPtr)(TECObjectRef encodingConverter, TECConverterContextRec *plugContext);
typedef OSStatus ( * TECPluginDisposeEncodingConverterPtr)(TECObjectRef newEncodingConverter, TECConverterContextRec *plugContext);
typedef OSStatus ( * TECPluginNewEncodingSnifferPtr)(TECSnifferObjectRef *encodingSniffer, TECSnifferContextRec *snifContext, TextEncoding inputEncoding);
typedef OSStatus ( * TECPluginClearSnifferContextInfoPtr)(TECSnifferObjectRef encodingSniffer, TECSnifferContextRec *snifContext);
typedef OSStatus ( * TECPluginSniffTextEncodingPtr)(TECSnifferObjectRef encodingSniffer, TECSnifferContextRec *snifContext);
typedef OSStatus ( * TECPluginDisposeEncodingSnifferPtr)(TECSnifferObjectRef encodingSniffer, TECSnifferContextRec *snifContext);
typedef OSStatus ( * TECPluginGetCountAvailableTextEncodingsPtr)(TextEncoding *availableEncodings, ItemCount maxAvailableEncodings, ItemCount *actualAvailableEncodings);
typedef OSStatus ( * TECPluginGetCountAvailableTextEncodingPairsPtr)(TECConversionInfo *availableEncodings, ItemCount maxAvailableEncodings, ItemCount *actualAvailableEncodings);
typedef OSStatus ( * TECPluginGetCountDestinationTextEncodingsPtr)(TextEncoding inputEncoding, TextEncoding *destinationEncodings, ItemCount maxDestinationEncodings, ItemCount *actualDestinationEncodings);
typedef OSStatus ( * TECPluginGetCountSubTextEncodingsPtr)(TextEncoding inputEncoding, TextEncoding subEncodings[], ItemCount maxSubEncodings, ItemCount *actualSubEncodings);
typedef OSStatus ( * TECPluginGetCountAvailableSniffersPtr)(TextEncoding *availableEncodings, ItemCount maxAvailableEncodings, ItemCount *actualAvailableEncodings);
typedef OSStatus ( * TECPluginGetTextEncodingInternetNamePtr)(TextEncoding textEncoding, Str255 encodingName);
typedef OSStatus ( * TECPluginGetTextEncodingFromInternetNamePtr)(TextEncoding *textEncoding, ConstStr255Param encodingName);
typedef OSStatus ( * TECPluginGetCountWebEncodingsPtr)(TextEncoding *availableEncodings, ItemCount maxAvailableEncodings, ItemCount *actualAvailableEncodings);
typedef OSStatus ( * TECPluginGetCountMailEncodingsPtr)(TextEncoding *availableEncodings, ItemCount maxAvailableEncodings, ItemCount *actualAvailableEncodings);






enum {
  kTECPluginDispatchTableVersion1 = 0x00010000,
  kTECPluginDispatchTableVersion1_1 = 0x00010001,
  kTECPluginDispatchTableVersion1_2 = 0x00010002,
  kTECPluginDispatchTableCurrentVersion = kTECPluginDispatchTableVersion1_2
};

struct TECPluginDispatchTable {

  TECPluginVersion version;
  TECPluginVersion compatibleVersion;
  TECPluginSignature PluginID;

  TECPluginNewEncodingConverterPtr PluginNewEncodingConverter;
  TECPluginClearContextInfoPtr PluginClearContextInfo;
  TECPluginConvertTextEncodingPtr PluginConvertTextEncoding;
  TECPluginFlushConversionPtr PluginFlushConversion;
  TECPluginDisposeEncodingConverterPtr PluginDisposeEncodingConverter;

  TECPluginNewEncodingSnifferPtr PluginNewEncodingSniffer;
  TECPluginClearSnifferContextInfoPtr PluginClearSnifferContextInfo;
  TECPluginSniffTextEncodingPtr PluginSniffTextEncoding;
  TECPluginDisposeEncodingSnifferPtr PluginDisposeEncodingSniffer;

  TECPluginGetCountAvailableTextEncodingsPtr PluginGetCountAvailableTextEncodings;
  TECPluginGetCountAvailableTextEncodingPairsPtr PluginGetCountAvailableTextEncodingPairs;
  TECPluginGetCountDestinationTextEncodingsPtr PluginGetCountDestinationTextEncodings;
  TECPluginGetCountSubTextEncodingsPtr PluginGetCountSubTextEncodings;
  TECPluginGetCountAvailableSniffersPtr PluginGetCountAvailableSniffers;
  TECPluginGetCountWebEncodingsPtr PluginGetCountWebTextEncodings;
  TECPluginGetCountMailEncodingsPtr PluginGetCountMailTextEncodings;

  TECPluginGetTextEncodingInternetNamePtr PluginGetTextEncodingInternetName;
  TECPluginGetTextEncodingFromInternetNamePtr PluginGetTextEncodingFromInternetName;

};
typedef struct TECPluginDispatchTable TECPluginDispatchTable;
# 301 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/TextEncodingPlugin.h" 3
typedef TECPluginDispatchTable * ( * TECPluginGetPluginDispatchTablePtr)(void);






#pragma pack(pop)
# 215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h" 2 3
# 22 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 1 3
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/AppleDiskPartitions.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/AppleDiskPartitions.h" 3
#pragma pack(push, 2)


enum {
  sbSIGWord = 0x4552,
  sbMac = 1
};


enum {
  pMapSIG = 0x504D,
  pdSigWord = 0x5453,
  oldPMSigWord = pdSigWord,
  newPMSigWord = pMapSIG
};



struct Block0 {
  UInt16 sbSig;
  UInt16 sbBlkSize;
  UInt32 sbBlkCount;
  UInt16 sbDevType;
  UInt16 sbDevId;
  UInt32 sbData;
  UInt16 sbDrvrCount;
  UInt32 ddBlock;
  UInt16 ddSize;
  UInt16 ddType;
  UInt16 ddPad[243];
};
typedef struct Block0 Block0;

struct DDMap {
  UInt32 ddBlock;
  UInt16 ddSize;
  UInt16 ddType;
};
typedef struct DDMap DDMap;

enum {
  kDriverTypeMacSCSI = 0x0001,
  kDriverTypeMacATA = 0x0701,
  kDriverTypeMacSCSIChained = 0xFFFF,
  kDriverTypeMacATAChained = 0xF8FF
};


struct Partition {
  UInt16 pmSig;
  UInt16 pmSigPad;
  UInt32 pmMapBlkCnt;
  UInt32 pmPyPartStart;
  UInt32 pmPartBlkCnt;
  UInt8 pmPartName[32];
  UInt8 pmParType[32];
  UInt32 pmLgDataStart;
  UInt32 pmDataCnt;
  UInt32 pmPartStatus;
  UInt32 pmLgBootStart;
  UInt32 pmBootSize;
  UInt32 pmBootAddr;
  UInt32 pmBootAddr2;
  UInt32 pmBootEntry;
  UInt32 pmBootEntry2;
  UInt32 pmBootCksum;
  UInt8 pmProcessor[16];
  UInt16 pmPad[188];
};
typedef struct Partition Partition;


enum {
  kPartitionAUXIsValid = 0x00000001,
  kPartitionAUXIsAllocated = 0x00000002,
  kPartitionAUXIsInUse = 0x00000004,
  kPartitionAUXIsBootValid = 0x00000008,
  kPartitionAUXIsReadable = 0x00000010,
  kPartitionAUXIsWriteable = 0x00000020,
  kPartitionAUXIsBootCodePositionIndependent = 0x00000040,
  kPartitionIsWriteable = 0x00000020,
  kPartitionIsMountedAtStartup = 0x40000000,
  kPartitionIsStartup = (long)0x80000000,
  kPartitionIsChainCompatible = 0x00000100,
  kPartitionIsRealDeviceDriver = 0x00000200,
  kPartitionCanChainToNext = 0x00000400
};





enum {
  kPatchDriverSignature = 'ptDR',
  kSCSIDriverSignature = 0x00010600,
  kATADriverSignature = 'wiki',
  kSCSICDDriverSignature = 'CDvr',
  kATAPIDriverSignature = 'ATPI',
  kDriveSetupHFSSignature = 'DSU1'
};




#pragma pack(pop)
# 26 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
extern "C" {
# 43 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
typedef struct __CSIdentityAuthority* CSIdentityAuthorityRef;
# 61 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
extern CFTypeID
CSIdentityAuthorityGetTypeID(void) ;
# 89 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
extern CSIdentityAuthorityRef
CSGetDefaultIdentityAuthority(void) ;
# 112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
extern CSIdentityAuthorityRef
CSGetLocalIdentityAuthority(void) ;
# 140 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
extern CSIdentityAuthorityRef
CSGetManagedIdentityAuthority(void) ;
# 167 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityAuthority.h" 3
extern CFStringRef
CSIdentityAuthorityCopyLocalizedName(CSIdentityAuthorityRef authority) ;





}
# 30 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 1 3
# 24 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 1 3
# 35 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 3
extern "C" {
# 45 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 3
typedef struct OpaqueSecKeychainRef *SecKeychainRef;





typedef struct OpaqueSecKeychainItemRef *SecKeychainItemRef;





typedef struct OpaqueSecKeychainSearchRef *SecKeychainSearchRef;





typedef OSType SecKeychainAttrType;
# 72 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 3
struct SecKeychainAttribute
{
    SecKeychainAttrType tag;
    UInt32 length;
    void *data;
};
typedef struct SecKeychainAttribute SecKeychainAttribute;





typedef SecKeychainAttribute *SecKeychainAttributePtr;







struct SecKeychainAttributeList
{
    UInt32 count;
    SecKeychainAttribute *attr;
};
typedef struct SecKeychainAttributeList SecKeychainAttributeList;





typedef UInt32 SecKeychainStatus;






typedef struct OpaqueSecTrustedApplicationRef *SecTrustedApplicationRef;





typedef struct OpaqueSecPolicyRef *SecPolicyRef;





typedef struct OpaqueSecCertificateRef *SecCertificateRef;





typedef struct OpaqueSecAccessRef *SecAccessRef;





typedef struct OpaqueSecIdentityRef *SecIdentityRef;





typedef struct OpaqueSecKeyRef *SecKeyRef;





typedef struct OpaqueSecTrustRef *SecACLRef;





typedef struct OpaqueSecPasswordRef *SecPasswordRef;
# 162 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 3
struct SecKeychainAttributeInfo
{
    UInt32 count;
    UInt32 *tag;
 UInt32 *format;
};
typedef struct SecKeychainAttributeInfo SecKeychainAttributeInfo;
# 177 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 3
CFStringRef SecCopyErrorMessageString(OSStatus status, void *reserved);
# 236 "/System/Library/Frameworks/Security.framework/Headers/SecBase.h" 3
enum
{
    errSecNotAvailable = -25291,
    errSecReadOnly = -25292,
    errSecAuthFailed = -25293,
    errSecNoSuchKeychain = -25294,
    errSecInvalidKeychain = -25295,
    errSecDuplicateKeychain = -25296,
    errSecDuplicateCallback = -25297,
    errSecInvalidCallback = -25298,
    errSecDuplicateItem = -25299,
    errSecItemNotFound = -25300,
    errSecBufferTooSmall = -25301,
    errSecDataTooLarge = -25302,
    errSecNoSuchAttr = -25303,
    errSecInvalidItemRef = -25304,
    errSecInvalidSearchRef = -25305,
    errSecNoSuchClass = -25306,
    errSecNoDefaultKeychain = -25307,
    errSecInteractionNotAllowed = -25308,
    errSecReadOnlyAttr = -25309,
    errSecWrongSecVersion = -25310,
    errSecKeySizeNotAllowed = -25311,
    errSecNoStorageModule = -25312,
    errSecNoCertificateModule = -25313,
    errSecNoPolicyModule = -25314,
    errSecInteractionRequired = -25315,
    errSecDataNotAvailable = -25316,
    errSecDataNotModifiable = -25317,
    errSecCreateChainFailed = -25318,
 errSecInvalidPrefsDomain = -25319,

 errSecACLNotSimple = -25240,
 errSecPolicyNotFound = -25241,
 errSecInvalidTrustSetting = -25242,
 errSecNoAccessForItem = -25243,
 errSecInvalidOwnerEdit = -25244,
 errSecTrustNotAvailable = -25245,
 errSecUnsupportedFormat = -25256,
 errSecUnknownFormat = -25257,
 errSecKeyIsSensitive = -25258,
 errSecMultiplePrivKeys = -25259,
 errSecPassphraseRequired = -25260,
 errSecInvalidPasswordRef = -25261,
 errSecInvalidTrustSettings = -25262,
 errSecNoTrustSettings = -25263,
 errSecPkcs12VerifyFailure = -25264,
};


}
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 2 3



# 1 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 1 3
# 37 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
extern "C" {
# 78 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
enum {
 errAuthorizationSuccess = 0,
    errAuthorizationInvalidSet = -60001,
    errAuthorizationInvalidRef = -60002,
    errAuthorizationInvalidTag = -60003,
    errAuthorizationInvalidPointer = -60004,
 errAuthorizationDenied = -60005,
 errAuthorizationCanceled = -60006,
 errAuthorizationInteractionNotAllowed = -60007,
 errAuthorizationInternal = -60008,
 errAuthorizationExternalizeNotAllowed = -60009,
 errAuthorizationInternalizeNotAllowed = -60010,
 errAuthorizationInvalidFlags = -60011,
 errAuthorizationToolExecuteFailure = -60031,
 errAuthorizationToolEnvironmentError = -60032,
 errAuthorizationBadAddress = -60033,
};






enum {
 kAuthorizationFlagDefaults = 0,
 kAuthorizationFlagInteractionAllowed = (1 << 0),
 kAuthorizationFlagExtendRights = (1 << 1),
 kAuthorizationFlagPartialRights = (1 << 2),
 kAuthorizationFlagDestroyRights = (1 << 3),
 kAuthorizationFlagPreAuthorize = (1 << 4),


 kAuthorizationFlagNoData = (1 << 20)
};






typedef UInt32 AuthorizationFlags;






enum {
 kAuthorizationFlagCanNotPreAuthorize = (1 << 0)
};






typedef const struct AuthorizationOpaqueRef *AuthorizationRef;






typedef const char *AuthorizationString;
# 156 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
typedef struct {
 AuthorizationString name;
 size_t valueLength;
 void *value;
 UInt32 flags;
} AuthorizationItem;
# 171 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
typedef struct {
 UInt32 count;
 AuthorizationItem *items;
} AuthorizationItemSet;
# 189 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
enum {
 kAuthorizationExternalFormLength = 32
};

typedef struct {
 char bytes[kAuthorizationExternalFormLength];
} AuthorizationExternalForm;
# 204 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
typedef AuthorizationItemSet AuthorizationRights;







typedef AuthorizationItemSet AuthorizationEnvironment;
# 245 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationCreate(const AuthorizationRights *rights,
 const AuthorizationEnvironment *environment,
 AuthorizationFlags flags,
 AuthorizationRef *authorization);
# 267 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationFree(AuthorizationRef authorization, AuthorizationFlags flags);
# 303 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationCopyRights(AuthorizationRef authorization,
 const AuthorizationRights *rights,
 const AuthorizationEnvironment *environment,
 AuthorizationFlags flags,
 AuthorizationRights **authorizedRights);
# 327 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationCopyInfo(AuthorizationRef authorization,
 AuthorizationString tag,
 AuthorizationItemSet **info);
# 351 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationMakeExternalForm(AuthorizationRef authorization,
 AuthorizationExternalForm *extForm);
# 368 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationCreateFromExternalForm(const AuthorizationExternalForm *extForm,
 AuthorizationRef *authorization);
# 383 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationFreeItemSet(AuthorizationItemSet *set);
# 403 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationExecuteWithPrivileges(AuthorizationRef authorization,
 const char *pathToTool,
 AuthorizationFlags options,
 char * const *arguments,
 FILE **communicationsPipe);
# 418 "/System/Library/Frameworks/Security.framework/Headers/Authorization.h" 3
OSStatus AuthorizationCopyPrivilegedReference(AuthorizationRef *authorization,
 AuthorizationFlags flags);



}
# 29 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 2 3
# 45 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern "C" {


#pragma pack(push, 2)
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef kCSIdentityErrorDomain ;







enum {




  kCSIdentityUnknownAuthorityErr = -1,




  kCSIdentityAuthorityNotAccessibleErr = -2,




  kCSIdentityPermissionErr = -3,




  kCSIdentityDeletedErr = -4,




  kCSIdentityInvalidFullNameErr = -5,




  kCSIdentityDuplicateFullNameErr = -6,





  kCSIdentityInvalidPosixNameErr = -7,




  kCSIdentityDuplicatePosixNameErr = -8
};
# 168 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
typedef struct __CSIdentity* CSIdentityRef;
# 177 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
typedef struct __CSIdentityQuery* CSIdentityQueryRef;
# 192 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef kCSIdentityGeneratePosixName ;
# 201 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
enum {




  kCSIdentityClassUser = 1,




  kCSIdentityClassGroup = 2
};

typedef CFIndex CSIdentityClass;







enum {




  kCSIdentityFlagNone = 0,
# 236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
  kCSIdentityFlagHidden = 1
};

typedef CFOptionFlags CSIdentityFlags;
# 257 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFTypeID
CSIdentityGetTypeID(void) ;
# 319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CSIdentityRef
CSIdentityCreate(
  CFAllocatorRef allocator,
  CSIdentityClass identityClass,
  CFStringRef fullName,
  CFStringRef posixName,
  CSIdentityFlags flags,
  CSIdentityAuthorityRef authority) ;
# 356 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CSIdentityRef
CSIdentityCreateCopy(
  CFAllocatorRef allocator,
  CSIdentityRef identity) ;
# 390 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CSIdentityClass
CSIdentityGetClass(CSIdentityRef identity) ;
# 417 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CSIdentityAuthorityRef
CSIdentityGetAuthority(CSIdentityRef identity) ;
# 445 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFUUIDRef
CSIdentityGetUUID(CSIdentityRef identity) ;
# 477 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef
CSIdentityGetFullName(CSIdentityRef identity) ;
# 504 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern id_t
CSIdentityGetPosixID(CSIdentityRef identity) ;
# 537 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef
CSIdentityGetPosixName(CSIdentityRef identity) ;
# 566 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef
CSIdentityGetEmailAddress(CSIdentityRef identity) ;
# 596 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFURLRef
CSIdentityGetImageURL(CSIdentityRef identity) ;
# 625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFDataRef
CSIdentityGetImageData(CSIdentityRef identity) ;
# 654 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef
CSIdentityGetImageDataType(CSIdentityRef identity) ;
# 689 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFArrayRef
CSIdentityGetAliases(CSIdentityRef identity) ;
# 720 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityIsMemberOfGroup(
  CSIdentityRef identity,
  CSIdentityRef group) ;
# 749 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityIsHidden(CSIdentityRef identity) ;
# 792 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFDataRef
CSIdentityCreatePersistentReference(
  CFAllocatorRef allocator,
  CSIdentityRef identity) ;
# 833 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityIsEnabled(CSIdentityRef user) ;
# 863 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityAuthenticateUsingPassword(
  CSIdentityRef user,
  CFStringRef password) ;
# 898 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern SecCertificateRef
CSIdentityGetCertificate(CSIdentityRef user) ;
# 939 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CSIdentityQueryRef
CSIdentityCreateGroupMembershipQuery(
  CFAllocatorRef allocator,
  CSIdentityRef group) ;
# 977 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetFullName(
  CSIdentityRef identity,
  CFStringRef fullName) ;
# 1010 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetEmailAddress(
  CSIdentityRef identity,
  CFStringRef emailAddress) ;
# 1043 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetImageURL(
  CSIdentityRef identity,
  CFURLRef url) ;
# 1079 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetImageData(
  CSIdentityRef identity,
  CFDataRef imageData,
  CFStringRef imageDataType) ;
# 1112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentityAddAlias(
  CSIdentityRef identity,
  CFStringRef alias) ;
# 1144 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentityRemoveAlias(
  CSIdentityRef identity,
  CFStringRef alias) ;
# 1183 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentityAddMember(
  CSIdentityRef group,
  CSIdentityRef member) ;
# 1215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentityRemoveMember(
  CSIdentityRef group,
  CSIdentityRef member) ;
# 1257 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetIsEnabled(
  CSIdentityRef user,
  Boolean isEnabled) ;
# 1293 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetPassword(
  CSIdentityRef user,
  CFStringRef password) ;
# 1329 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentitySetCertificate(
  CSIdentityRef user,
  SecCertificateRef certificate) ;
# 1363 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentityDelete(CSIdentityRef identity) ;
# 1410 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityCommit(
  CSIdentityRef identity,
  AuthorizationRef authorization,
  CFErrorRef * error) ;
# 1423 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
enum {




  kCSIdentityCommitCompleted = 1
};


typedef void ( * CSIdentityStatusUpdatedCallback)(CSIdentityRef identity, CFIndex status, CFErrorRef error, void *info);
# 1441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
struct CSIdentityClientContext {





  CFIndex version;





  void * info;
# 1462 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
  CFAllocatorRetainCallBack retain;





  CFAllocatorReleaseCallBack release;






  CFAllocatorCopyDescriptionCallBack copyDescription;





  CSIdentityStatusUpdatedCallback statusUpdated;
};
typedef struct CSIdentityClientContext CSIdentityClientContext;
# 1528 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityCommitAsynchronously(
  CSIdentityRef identity,
  const CSIdentityClientContext * clientContext,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode,
  AuthorizationRef authorization) ;
# 1560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern Boolean
CSIdentityIsCommitting(CSIdentityRef identity) ;
# 1591 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern void
CSIdentityRemoveClient(CSIdentityRef identity) ;
# 1634 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef kCSIdentityAuthorityNameKey ;
# 1643 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef kCSIdentityClassKey ;
# 1652 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef kCSIdentityNameKey ;
# 1661 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFStringRef kCSIdentityUUIDKey ;
# 1693 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFDataRef
CSIdentityCreatePersistentReferenceFromInfoDictionary(
  CFAllocatorRef allocator,
  CFDictionaryRef infoDictionary) ;
# 1726 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h" 3
extern CFDictionaryRef
CSIdentityCreateInfoDictionaryFromPersistentReference(
  CFAllocatorRef allocator,
  CFDataRef persistentReference) ;



#pragma pack(pop)


}
# 34 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 1 3
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern "C" {


#pragma pack(push, 2)
# 53 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CFTypeID
CSIdentityQueryGetTypeID(void) ;
# 68 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
enum {





  kCSIdentityQueryGenerateUpdateEvents = 0x0001,





  kCSIdentityQueryIncludeHiddenIdentities = 0x0002
};

typedef CFOptionFlags CSIdentityQueryFlags;
# 95 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
enum {




  kCSIdentityQueryStringEquals = 1,




  kCSIdentityQueryStringBeginsWith = 2
};

typedef CFIndex CSIdentityQueryStringComparisonMethod;
# 142 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CSIdentityQueryRef
CSIdentityQueryCreate(
  CFAllocatorRef allocator,
  CSIdentityClass identityClass,
  CSIdentityAuthorityRef authority) ;
# 188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CSIdentityQueryRef
CSIdentityQueryCreateForName(
  CFAllocatorRef allocator,
  CFStringRef name,
  CSIdentityQueryStringComparisonMethod comparisonMethod,
  CSIdentityClass identityClass,
  CSIdentityAuthorityRef authority) ;
# 229 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CSIdentityQueryRef
CSIdentityQueryCreateForUUID(
  CFAllocatorRef allocator,
  CFUUIDRef uuid,
  CSIdentityAuthorityRef authority) ;
# 271 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CSIdentityQueryRef
CSIdentityQueryCreateForPosixID(
  CFAllocatorRef allocator,
  id_t posixID,
  CSIdentityClass identityClass,
  CSIdentityAuthorityRef authority) ;
# 310 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CSIdentityQueryRef
CSIdentityQueryCreateForPersistentReference(
  CFAllocatorRef allocator,
  CFDataRef referenceData) ;
# 339 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CSIdentityQueryRef
CSIdentityQueryCreateForCurrentUser(CFAllocatorRef allocator) ;
# 370 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern CFArrayRef
CSIdentityQueryCopyResults(CSIdentityQueryRef query) ;
# 405 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern Boolean
CSIdentityQueryExecute(
  CSIdentityQueryRef query,
  CSIdentityQueryFlags flags,
  CFErrorRef * error) ;
# 423 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
enum {






  kCSIdentityQueryEventSearchPhaseFinished = 1,




  kCSIdentityQueryEventResultsAdded = 2,





  kCSIdentityQueryEventResultsChanged = 3,




  kCSIdentityQueryEventResultsRemoved = 4,





  kCSIdentityQueryEventErrorOccurred = 5
};

typedef CFIndex CSIdentityQueryEvent;
# 481 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
typedef void ( * CSIdentityQueryReceiveEventCallback)(CSIdentityQueryRef query, CSIdentityQueryEvent event, CFArrayRef identities, CFErrorRef error, void *info);







struct CSIdentityQueryClientContext {
  CFIndex version;
  void * info;
  CFAllocatorRetainCallBack retainInfo;
  CFAllocatorReleaseCallBack releaseInfo;
  CFAllocatorCopyDescriptionCallBack copyInfoDescription;
  CSIdentityQueryReceiveEventCallback receiveEvent;
};
typedef struct CSIdentityQueryClientContext CSIdentityQueryClientContext;
# 533 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern Boolean
CSIdentityQueryExecuteAsynchronously(
  CSIdentityQueryRef query,
  CSIdentityQueryFlags flags,
  const CSIdentityQueryClientContext * clientContext,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 568 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentityQuery.h" 3
extern void
CSIdentityQueryStop(CSIdentityQueryRef query) ;




#pragma pack(pop)


}
# 38 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/IconStorage.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/IconStorage.h" 3
#pragma pack(push, 2)



enum {
  kIconServices16PixelDataARGB = 'ic04',
  kIconServices32PixelDataARGB = 'ic05',
  kIconServices48PixelDataARGB = 'ic06',
  kIconServices128PixelDataARGB = 'ic07'
};



enum {
  kIconServices256PixelDataARGB = 'ic08',
  kIconServices512PixelDataARGB = 'ic09',
  kThumbnail32BitData = 'it32',
  kThumbnail8BitMask = 't8mk'
};

enum {
  kHuge1BitMask = 'ich#',
  kHuge4BitData = 'ich4',
  kHuge8BitData = 'ich8',
  kHuge32BitData = 'ih32',
  kHuge8BitMask = 'h8mk'
};



enum {
  kLarge1BitMask = 'ICN#',
  kLarge4BitData = 'icl4',
  kLarge8BitData = 'icl8',
  kLarge32BitData = 'il32',
  kLarge8BitMask = 'l8mk',
  kSmall1BitMask = 'ics#',
  kSmall4BitData = 'ics4',
  kSmall8BitData = 'ics8',
  kSmall32BitData = 'is32',
  kSmall8BitMask = 's8mk',
  kMini1BitMask = 'icm#',
  kMini4BitData = 'icm4',
  kMini8BitData = 'icm8'
};


enum {
  large1BitMask = kLarge1BitMask,
  large4BitData = kLarge4BitData,
  large8BitData = kLarge8BitData,
  small1BitMask = kSmall1BitMask,
  small4BitData = kSmall4BitData,
  small8BitData = kSmall8BitData,
  mini1BitMask = kMini1BitMask,
  mini4BitData = kMini4BitData,
  mini8BitData = kMini8BitData
};
# 103 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/IconStorage.h" 3
enum {
  kIconFamilyType = 'icns'
};


struct IconFamilyElement {
  OSType elementType;
  SInt32 elementSize;
  unsigned char elementData[1];
};
typedef struct IconFamilyElement IconFamilyElement;
struct IconFamilyResource {
  OSType resourceType;
  SInt32 resourceSize;
  IconFamilyElement elements[1];

};
typedef struct IconFamilyResource IconFamilyResource;
typedef IconFamilyResource * IconFamilyPtr;
typedef IconFamilyPtr * IconFamilyHandle;



enum {
  kTileIconVariant = 'tile',
  kRolloverIconVariant = 'over',
  kDropIconVariant = 'drop',
  kOpenIconVariant = 'open',
  kOpenDropIconVariant = 'odrp'
};


#pragma pack(pop)
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern "C" {





enum {
  kSystemSoundNoError = 0,
  kSystemSoundUnspecifiedError = -1500,
  kSystemSoundClientTimedOutError = -1501
};




typedef UInt32 SystemSoundActionID;
typedef OSStatus ( * SystemSoundCompletionProcPtr)(SystemSoundActionID actionID, void *userData);
typedef SystemSoundCompletionProcPtr SystemSoundCompletionUPP;
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern SystemSoundCompletionUPP
NewSystemSoundCompletionUPP(SystemSoundCompletionProcPtr userRoutine) ;
# 73 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern void
DisposeSystemSoundCompletionUPP(SystemSoundCompletionUPP userUPP) ;
# 84 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern OSStatus
InvokeSystemSoundCompletionUPP(
  SystemSoundActionID actionID,
  void * userData,
  SystemSoundCompletionUPP userUPP) ;



    inline SystemSoundCompletionUPP NewSystemSoundCompletionUPP(SystemSoundCompletionProcPtr userRoutine) { return userRoutine; }
    inline void DisposeSystemSoundCompletionUPP(SystemSoundCompletionUPP) { }
    inline OSStatus InvokeSystemSoundCompletionUPP(SystemSoundActionID actionID, void * userData, SystemSoundCompletionUPP userUPP) { return (*userUPP)(actionID, userData); }
# 120 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern void
AlertSoundPlay(void) ;
# 145 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern void
AlertSoundPlayCustomSound(SystemSoundActionID inAction) ;
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern void
SystemSoundPlay(SystemSoundActionID inAction) ;
# 207 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern OSStatus
SystemSoundGetActionID(
  const FSRef * userFile,
  SystemSoundActionID * outAction) ;
# 236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern OSStatus
SystemSoundRemoveActionID(SystemSoundActionID inAction) ;
# 280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern OSStatus
SystemSoundSetCompletionRoutine(
  SystemSoundActionID inAction,
  CFRunLoopRef inRunLoop,
  CFStringRef inRunLoopMode,
  SystemSoundCompletionUPP inCompletionRoutine,
  void * inUserData) ;
# 312 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SystemSound.h" 3
extern void
SystemSoundRemoveCompletionRoutine(SystemSoundActionID inAction) ;




}
# 46 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3





# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 1 3
# 44 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern "C" {


#pragma pack(push, 2)

enum {

  kSleepRequest = 1,
  kSleepDemand = 2,
  kSleepWakeUp = 3,
  kSleepRevoke = 4,
  kSleepUnlock = 4,
  kSleepDeny = 5,
  kSleepNow = 6,
  kDozeDemand = 7,
  kDozeWakeUp = 8,
  kDozeRequest = 9,
  kEnterStandby = 10,
  kEnterRun = 11,
  kSuspendRequest = 12,
  kSuspendDemand = 13,
  kSuspendRevoke = 14,
  kSuspendWakeUp = 15,
  kGetPowerLevel = 16,
  kSetPowerLevel = 17,
  kDeviceInitiatedWake = 18,
  kWakeToDoze = 19,
  kDozeToFullWakeUp = 20,
  kGetPowerInfo = 21,
  kGetWakeOnNetInfo = 22,
  kSuspendWakeToDoze = 23,
  kEnterIdle = 24,
  kStillIdle = 25,
  kExitIdle = 26
};

enum {

  noCalls = 1,
  noRequest = 2,
  slpQType = 16,
  sleepQType = 16
};
# 95 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
enum {
  OverallAct = 0,
  UsrActivity = 1,
  NetActivity = 2,
  HDActivity = 3,
  IdleActivity = 4
};

typedef struct SleepQRec SleepQRec;
typedef SleepQRec * SleepQRecPtr;
typedef long ( * SleepQProcPtr)(long message, SleepQRecPtr qRecPtr);
typedef SleepQProcPtr SleepQUPP;
# 115 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern SleepQUPP
NewSleepQUPP(SleepQProcPtr userRoutine) ;
# 126 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
DisposeSleepQUPP(SleepQUPP userUPP) ;
# 137 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern long
InvokeSleepQUPP(
  long message,
  SleepQRecPtr qRecPtr,
  SleepQUPP userUPP) ;



    inline SleepQUPP NewSleepQUPP(SleepQProcPtr userRoutine) { return userRoutine; }
    inline void DisposeSleepQUPP(SleepQUPP) { }
    inline long InvokeSleepQUPP(long message, SleepQRecPtr qRecPtr, SleepQUPP userUPP) { return (*userUPP)(message, qRecPtr); }







struct SleepQRec {
  SleepQRecPtr sleepQLink;
  short sleepQType;
  SleepQUPP sleepQProc;
  short sleepQFlags;
};
# 177 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern long
GetCPUSpeed(void) ;
# 197 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SleepQInstall(SleepQRecPtr qRecPtr) ;
# 217 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SleepQRemove(SleepQRecPtr qRecPtr) ;
# 236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern short
MaximumProcessorSpeed(void) ;
# 256 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern short
MinimumProcessorSpeed(void) ;
# 278 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern short
CurrentProcessorSpeed(void) ;
# 296 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern short
BatteryCount(void) ;
# 343 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
UpdateSystemActivity(UInt8 activity) ;
# 356 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
enum {
  kMediaModeOn = 0,
  kMediaModeStandBy = 1,
  kMediaModeSuspend = 2,
  kMediaModeOff = 3
};

enum {
  kMediaPowerCSCode = 70
};


enum {
  kHDQueuePostBit = 0,
  kHDQueuePostMask = (1 << kHDQueuePostBit)
};

struct ActivityInfo {
  short ActivityType;
  unsigned long ActivityTime;
};
typedef struct ActivityInfo ActivityInfo;

struct BatteryInfo {
  UInt8 flags;
  UInt8 warningLevel;
  UInt8 reserved;
  UInt8 batteryLevel;
};
typedef struct BatteryInfo BatteryInfo;

typedef SInt8 ModemByte;
typedef SInt8 BatteryByte;
typedef SInt8 SoundMixerByte;
typedef long PMResultCode;
enum {

  sleepRequest = kSleepRequest,
  sleepDemand = kSleepDemand,
  sleepWakeUp = kSleepWakeUp,
  sleepRevoke = kSleepRevoke,
  sleepUnlock = kSleepUnlock,
  sleepDeny = kSleepDeny,
  sleepNow = kSleepNow,
  dozeDemand = kDozeDemand,
  dozeWakeUp = kDozeWakeUp,
  dozeRequest = kDozeRequest,
  enterStandby = kEnterStandby,
  enterRun = kEnterRun,
  suspendRequestMsg = kSuspendRequest,
  suspendDemandMsg = kSuspendDemand,
  suspendRevokeMsg = kSuspendRevoke,
  suspendWakeUpMsg = kSuspendWakeUp,
  getPowerLevel = kGetPowerLevel,
  setPowerLevel = kSetPowerLevel
};


typedef UInt32 PowerLevel;

enum {
  kPMDevicePowerLevel_On = 0,
  kPMDevicePowerLevel_D1 = 1,
  kPMDevicePowerLevel_D2 = 2,
  kPMDevicePowerLevel_Off = 3
};


typedef unsigned long RegEntryID;
typedef OSStatus ( * PowerHandlerProcPtr)(UInt32 message, void *param, UInt32 refCon, RegEntryID *regEntryID);
typedef PowerHandlerProcPtr PowerHandlerUPP;
# 455 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
enum {

  modemOnBit = 0,
  ringWakeUpBit = 2,
  modemInstalledBit = 3,
  ringDetectBit = 4,
  modemOnHookBit = 5
};

enum {

  modemOnMask = 0x01,
  ringWakeUpMask = 0x04,
  modemInstalledMask = 0x08,
  ringDetectMask = 0x10,
  modemOnHookMask = 0x20
};

enum {

  chargerConnBit = 0,
  hiChargeBit = 1,
  chargeOverFlowBit = 2,
  batteryDeadBit = 3,
  batteryLowBit = 4,
  connChangedBit = 5
};

enum {

  chargerConnMask = 0x01,
  hiChargeMask = 0x02,
  chargeOverFlowMask = 0x04,
  batteryDeadMask = 0x08,
  batteryLowMask = 0x10,
  connChangedMask = 0x20
};

enum {

  MediaBaySndEnBit = 0,
  PCISndEnBit = 1,
  ZVSndEnBit = 2,
  PCCardSndEnBit = 3
};

enum {

  MediaBaySndEnMask = 0x01,
  PCISndEnMask = 0x02,
  ZVSndEnMask = 0x04,
  PCCardSndEnMask = 0x08
};

enum {

  kAEMacPowerMgtEvt = 'pmgt',
  kAEMacToWake = 'wake',
  kAEMacLowPowerSaveData = 'pmsd',
  kAEMacEmergencySleep = 'emsl',
  kAEMacEmergencyShutdown = 'emsd'
};







enum {
  kDeviceDidNotWakeMachine = 0,
  kDeviceRequestsFullWake = 1,
  kDeviceRequestsWakeToDoze = 2
};


enum {
  hasWakeupTimer = 0,
  hasSharedModemPort = 1,
  hasProcessorCycling = 2,
  mustProcessorCycle = 3,
  hasReducedSpeed = 4,
  dynamicSpeedChange = 5,
  hasSCSIDiskMode = 6,
  canGetBatteryTime = 7,
  canWakeupOnRing = 8,
  hasDimmingSupport = 9,
  hasStartupTimer = 10,
  hasChargeNotification = 11,
  hasDimSuspendSupport = 12,
  hasWakeOnNetActivity = 13,
  hasWakeOnLid = 14,
  canPowerOffPCIBus = 15,
  hasDeepSleep = 16,
  hasSleep = 17,
  supportsServerModeAPIs = 18,
  supportsUPSIntegration = 19,
  hasAggressiveIdling = 20,
  supportsIdleQueue = 21
};


enum {
  hasInternalModem = 0,
  intModemRingDetect = 1,
  intModemOffHook = 2,
  intModemRingWakeEnb = 3,
  extModemSelected = 4,
  modemSetBit = 15
};



enum {
  batteryInstalled = 7,
  batteryCharging = 6,
  chargerConnected = 5,
  upsConnected = 4,
  upsIsPowerSource = 3
};

enum {
  HDPwrQType = 0x4844,
  PMgrStateQType = 0x504D
};


enum {
  pmSleepTimeoutChanged = 0,
  pmSleepEnableChanged = 1,
  pmHardDiskTimeoutChanged = 2,
  pmHardDiskSpindownChanged = 3,
  pmDimmingTimeoutChanged = 4,
  pmDimmingEnableChanged = 5,
  pmDiskModeAddressChanged = 6,
  pmProcessorCyclingChanged = 7,
  pmProcessorSpeedChanged = 8,
  pmWakeupTimerChanged = 9,
  pmStartupTimerChanged = 10,
  pmHardDiskPowerRemovedbyUser = 11,
  pmChargeStatusChanged = 12,
  pmPowerLevelChanged = 13,
  pmWakeOnNetActivityChanged = 14
};

enum {
  pmSleepTimeoutChangedMask = (1 << pmSleepTimeoutChanged),
  pmSleepEnableChangedMask = (1 << pmSleepEnableChanged),
  pmHardDiskTimeoutChangedMask = (1 << pmHardDiskTimeoutChanged),
  pmHardDiskSpindownChangedMask = (1 << pmHardDiskSpindownChanged),
  pmDimmingTimeoutChangedMask = (1 << pmDimmingTimeoutChanged),
  pmDimmingEnableChangedMask = (1 << pmDimmingEnableChanged),
  pmDiskModeAddressChangedMask = (1 << pmDiskModeAddressChanged),
  pmProcessorCyclingChangedMask = (1 << pmProcessorCyclingChanged),
  pmProcessorSpeedChangedMask = (1 << pmProcessorSpeedChanged),
  pmWakeupTimerChangedMask = (1 << pmWakeupTimerChanged),
  pmStartupTimerChangedMask = (1 << pmStartupTimerChanged),
  pmHardDiskPowerRemovedbyUserMask = (1 << pmHardDiskPowerRemovedbyUser),
  pmChargeStatusChangedMask = (1 << pmChargeStatusChanged),
  pmPowerLevelChangedMask = (1 << pmPowerLevelChanged),
  pmWakeOnNetActivityChangedMask = (1 << pmWakeOnNetActivityChanged)
};
# 626 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
enum {
  kUseDefaultMinimumWakeTime = 0,
  kPowerSummaryVersion = 1,
  kDevicePowerInfoVersion = 1
};

enum {

  kPCIPowerOffAllowed = (1L << 0)
};

enum {

  kDevicePCIPowerOffAllowed = (1L << 0),
  kDeviceSupportsPMIS = (1L << 1),
  kDeviceCanAssertPMEDuringSleep = (1L << 2),
  kDeviceUsesCommonLogicPower = (1L << 3),
  kDeviceDriverPresent = (1L << 4),
  kDeviceDriverSupportsPowerMgt = (1L << 5)
};

struct DevicePowerInfo {
  UInt32 version;
  RegEntryID regID;
  OptionBits flags;
  UInt32 minimumWakeTime;
  UInt32 sleepPowerNeeded;
};
typedef struct DevicePowerInfo DevicePowerInfo;
struct PowerSummary {
  UInt32 version;
  OptionBits flags;
  UInt32 sleepPowerAvailable;
  UInt32 sleepPowerNeeded;
  UInt32 minimumWakeTime;
  ItemCount deviceCount;
  DevicePowerInfo devices[1];
};
typedef struct PowerSummary PowerSummary;
typedef struct HDQueueElement HDQueueElement;
typedef struct PMgrQueueElement PMgrQueueElement;
typedef void ( * HDSpindownProcPtr)(HDQueueElement * theElement);
typedef void ( * PMgrStateChangeProcPtr)(PMgrQueueElement *theElement, long stateBits);
typedef HDSpindownProcPtr HDSpindownUPP;
typedef PMgrStateChangeProcPtr PMgrStateChangeUPP;
struct HDQueueElement {
  struct HDQueueElement * hdQLink;
  short hdQType;
  short hdFlags;
  HDSpindownUPP hdProc;
  long hdUser;
};

struct PMgrQueueElement {
  struct PMgrQueueElement * pmQLink;
  short pmQType;
  short pmFlags;
  long pmNotifyBits;
  PMgrStateChangeUPP pmProc;
  long pmUser;
};

struct BatteryTimeRec {
  unsigned long expectedBatteryTime;
  unsigned long minimumBatteryTime;
  unsigned long maximumBatteryTime;
  unsigned long timeUntilCharged;
};
typedef struct BatteryTimeRec BatteryTimeRec;
struct WakeupTime {
  unsigned long wakeTime;
  Boolean wakeEnabled;
  SInt8 filler;
};
typedef struct WakeupTime WakeupTime;
struct StartupTime {
  unsigned long startTime;
  Boolean startEnabled;
  SInt8 filler;
};
typedef struct StartupTime StartupTime;
# 716 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetSpindownDisable(Boolean setDisable) ;
# 728 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern short
PMSelectorCount(void) ;
# 740 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern UInt32
PMFeatures(void) ;
# 752 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
SetProcessorSpeed(Boolean fullSpeed) ;
# 764 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
FullProcessorSpeed(void) ;
# 777 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
DisableWUTime(void) __attribute__((deprecated));
# 789 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
SetWUTime(long wuTime) __attribute__((deprecated));
# 804 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
GetWUTime(
  long * wuTime,
  Byte * wuFlag) __attribute__((deprecated));
# 818 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
BatteryStatus(
  Byte * status,
  Byte * power) __attribute__((deprecated));
# 832 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
ModemStatus(Byte * status) __attribute__((deprecated));
# 852 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern long
IdleUpdate(void) __attribute__((deprecated));
# 869 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
EnableIdle(void) __attribute__((deprecated));
# 886 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
DisableIdle(void) __attribute__((deprecated));
# 903 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
AOn(void) __attribute__((deprecated));
# 920 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
AOnIgnoreModem(void) __attribute__((deprecated));
# 937 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
BOn(void) __attribute__((deprecated));
# 954 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
AOff(void) __attribute__((deprecated));
# 971 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
BOff(void) __attribute__((deprecated));
# 985 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern UInt8
GetSleepTimeout(void) __attribute__((deprecated));
# 997 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetSleepTimeout(UInt8 timeout) __attribute__((deprecated));
# 1009 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern UInt8
GetHardDiskTimeout(void) __attribute__((deprecated));
# 1021 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetHardDiskTimeout(UInt8 timeout) __attribute__((deprecated));
# 1033 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
HardDiskPowered(void) __attribute__((deprecated));
# 1045 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SpinDownHardDisk(void) __attribute__((deprecated));
# 1057 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
IsSpindownDisabled(void) __attribute__((deprecated));
# 1069 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
HardDiskQInstall(HDQueueElement * theElement) __attribute__((deprecated));
# 1081 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
HardDiskQRemove(HDQueueElement * theElement) __attribute__((deprecated));
# 1093 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
GetScaledBatteryInfo(
  short whichBattery,
  BatteryInfo * theInfo) __attribute__((deprecated));
# 1107 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
AutoSleepControl(Boolean enableSleep) __attribute__((deprecated));
# 1119 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern UInt32
GetIntModemInfo(void) __attribute__((deprecated));
# 1131 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetIntModemState(short theState) __attribute__((deprecated));
# 1143 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern short
GetSCSIDiskModeAddress(void) __attribute__((deprecated));
# 1155 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetSCSIDiskModeAddress(short scsiAddress) __attribute__((deprecated));
# 1167 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
GetWakeupTimer(WakeupTime * theTime) __attribute__((deprecated));
# 1179 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetWakeupTimer(WakeupTime * theTime) __attribute__((deprecated));
# 1191 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
IsProcessorCyclingEnabled(void) __attribute__((deprecated));
# 1203 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
EnableProcessorCycling(Boolean enable) __attribute__((deprecated));
# 1215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Fixed
GetBatteryVoltage(short whichBattery) __attribute__((deprecated));
# 1227 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
GetBatteryTimes(
  short whichBattery,
  BatteryTimeRec * theTimes) __attribute__((deprecated));
# 1241 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern UInt8
GetDimmingTimeout(void) __attribute__((deprecated));
# 1253 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetDimmingTimeout(UInt8 timeout) __attribute__((deprecated));
# 1265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
DimmingControl(Boolean enableSleep) __attribute__((deprecated));
# 1277 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
IsDimmingControlDisabled(void) __attribute__((deprecated));
# 1289 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
IsAutoSlpControlDisabled(void) __attribute__((deprecated));
# 1301 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
PMgrStateQInstall(PMgrQueueElement * theElement) __attribute__((deprecated));
# 1313 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
PMgrStateQRemove(PMgrQueueElement * theElement) __attribute__((deprecated));
# 1325 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
DelaySystemIdle(void) __attribute__((deprecated));
# 1337 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
GetStartupTimer(StartupTime * theTime) __attribute__((deprecated));
# 1349 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
SetStartupTimer(StartupTime * theTime) __attribute__((deprecated));
# 1361 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
GetLastActivity(ActivityInfo * theActivity) __attribute__((deprecated));
# 1373 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
GetSoundMixerState(SoundMixerByte * theSoundMixerByte) __attribute__((deprecated));
# 1385 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern OSErr
SetSoundMixerState(SoundMixerByte * theSoundMixerByte) __attribute__((deprecated));
# 1397 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern Boolean
GetDimSuspendState(void) __attribute__((deprecated));
# 1409 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
SetDimSuspendState(Boolean dimSuspendState) __attribute__((deprecated));
# 1423 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern HDSpindownUPP
NewHDSpindownUPP(HDSpindownProcPtr userRoutine) ;
# 1434 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern PMgrStateChangeUPP
NewPMgrStateChangeUPP(PMgrStateChangeProcPtr userRoutine) ;
# 1445 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
DisposeHDSpindownUPP(HDSpindownUPP userUPP) ;
# 1456 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
DisposePMgrStateChangeUPP(PMgrStateChangeUPP userUPP) ;
# 1467 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
InvokeHDSpindownUPP(
  HDQueueElement * theElement,
  HDSpindownUPP userUPP) ;
# 1480 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
extern void
InvokePMgrStateChangeUPP(
  PMgrQueueElement * theElement,
  long stateBits,
  PMgrStateChangeUPP userUPP) ;



    inline HDSpindownUPP NewHDSpindownUPP(HDSpindownProcPtr userRoutine) { return userRoutine; }
    inline PMgrStateChangeUPP NewPMgrStateChangeUPP(PMgrStateChangeProcPtr userRoutine) { return userRoutine; }
    inline void DisposeHDSpindownUPP(HDSpindownUPP) { }
    inline void DisposePMgrStateChangeUPP(PMgrStateChangeUPP) { }
    inline void InvokeHDSpindownUPP(HDQueueElement * theElement, HDSpindownUPP userUPP) { (*userUPP)(theElement); }
    inline void InvokePMgrStateChangeUPP(PMgrQueueElement * theElement, long stateBits, PMgrStateChangeUPP userUPP) { (*userUPP)(theElement, stateBits); }
# 1505 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/Power.h" 3
#pragma pack(pop)


}
# 52 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
extern "C" {


#pragma pack(push, 2)



enum {
  scInc = 1,
  scNoInc = 2,
  scAdd = 3,
  scMove = 4,
  scLoop = 5,
  scNop = 6,
  scStop = 7,
  scComp = 8
};


struct SCSIInstr {
  unsigned short scOpcode;
  long scParam1;
  long scParam2;
};
typedef struct SCSIInstr SCSIInstr;
# 192 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
enum {
  scsiVERSION = 43
};





typedef void ( * SCSICallbackProcPtr)(void * scsiPB);
typedef SCSICallbackProcPtr SCSICallbackUPP;
# 210 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
extern SCSICallbackUPP
NewSCSICallbackUPP(SCSICallbackProcPtr userRoutine) ;
# 221 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
extern void
DisposeSCSICallbackUPP(SCSICallbackUPP userUPP) ;
# 232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
extern void
InvokeSCSICallbackUPP(
  void * scsiPB,
  SCSICallbackUPP userUPP) ;



    inline SCSICallbackUPP NewSCSICallbackUPP(SCSICallbackProcPtr userRoutine) { return userRoutine; }
    inline void DisposeSCSICallbackUPP(SCSICallbackUPP) { }
    inline void InvokeSCSICallbackUPP(void * scsiPB, SCSICallbackUPP userUPP) { (*userUPP)(scsiPB); }
# 254 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
enum {
  SCSINop = 0x00,
  SCSIExecIO = 0x01,
  SCSIBusInquiry = 0x03,
  SCSIReleaseQ = 0x04,
  SCSIAbortCommand = 0x10,
  SCSIResetBus = 0x11,
  SCSIResetDevice = 0x12,
  SCSITerminateIO = 0x13
};

enum {
  vendorUnique = 0xC0
};



enum {
  handshakeDataLength = 8,
  maxCDBLength = 16,
  vendorIDLength = 16
};


struct DeviceIdent {
  UInt8 diReserved;
  UInt8 bus;
  UInt8 targetID;
  UInt8 LUN;
};
typedef struct DeviceIdent DeviceIdent;






enum {
  kBusTypeSCSI = 0,
  kBusTypeATA = 1,
  kBusTypePCMCIA = 2,
  kBusTypeMediaBay = 3
};




struct DeviceIdentATA {
  UInt8 diReserved;
  UInt8 busNum;
  UInt8 devNum;
  UInt8 diReserved2;
};
typedef struct DeviceIdentATA DeviceIdentATA;



union CDB {
  BytePtr cdbPtr;
  UInt8 cdbBytes[16];
};
typedef union CDB CDB;
typedef CDB * CDBPtr;

struct SGRecord {
  Ptr SGAddr;
  UInt32 SGCount;
};
typedef struct SGRecord SGRecord;
# 338 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
struct SCSIHdr {
  struct SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
};
typedef struct SCSIHdr SCSIHdr;
struct SCSI_PB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
};
typedef struct SCSI_PB SCSI_PB;
struct SCSI_IO {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;

  UInt16 scsiResultFlags;
  UInt16 scsiReserved3pt5;
  BytePtr scsiDataPtr;
  UInt32 scsiDataLength;
  BytePtr scsiSensePtr;
  UInt8 scsiSenseLength;
  UInt8 scsiCDBLength;
  UInt16 scsiSGListCount;
  UInt32 scsiReserved4;
  UInt8 scsiSCSIstatus;
  SInt8 scsiSenseResidual;
  UInt16 scsiReserved5;
  long scsiDataResidual;
  CDB scsiCDB;
  long scsiTimeout;
  BytePtr scsiReserved5pt5;
  UInt16 scsiReserved5pt6;
  UInt16 scsiIOFlags;
  UInt8 scsiTagAction;
  UInt8 scsiReserved6;
  UInt16 scsiReserved7;
  UInt16 scsiSelectTimeout;
  UInt8 scsiDataType;
  UInt8 scsiTransferType;
  UInt32 scsiReserved8;
  UInt32 scsiReserved9;
  UInt16 scsiHandshake[8];
  UInt32 scsiReserved10;
  UInt32 scsiReserved11;
  struct SCSI_IO * scsiCommandLink;

  UInt8 scsiSIMpublics[8];
  UInt8 scsiAppleReserved6[8];



  UInt16 scsiCurrentPhase;
  short scsiSelector;
  OSErr scsiOldCallResult;
  UInt8 scsiSCSImessage;
  UInt8 XPTprivateFlags;
  UInt8 XPTextras[12];
};
typedef struct SCSI_IO SCSI_IO;
typedef SCSI_IO SCSIExecIOPB;

struct SCSIBusInquiryPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;

  UInt16 scsiEngineCount;
  UInt16 scsiMaxTransferType;

  UInt32 scsiDataTypes;

  UInt16 scsiIOpbSize;
  UInt16 scsiMaxIOpbSize;

  UInt32 scsiFeatureFlags;

  UInt8 scsiVersionNumber;
  UInt8 scsiHBAInquiry;
  UInt8 scsiTargetModeFlags;
  UInt8 scsiScanFlags;

  UInt32 scsiSIMPrivatesPtr;
  UInt32 scsiSIMPrivatesSize;
  UInt32 scsiAsyncFlags;

  UInt8 scsiHiBusID;
  UInt8 scsiInitiatorID;
  UInt16 scsiBIReserved0;

  UInt32 scsiBIReserved1;
  UInt32 scsiFlagsSupported;

  UInt16 scsiIOFlagsSupported;
  UInt16 scsiWeirdStuff;
  UInt16 scsiMaxTarget;
  UInt16 scsiMaxLUN;

  char scsiSIMVendor[16];
  char scsiHBAVendor[16];
  char scsiControllerFamily[16];
  char scsiControllerType[16];

  char scsiXPTversion[4];
  char scsiSIMversion[4];
  char scsiHBAversion[4];

  UInt8 scsiHBAslotType;
  UInt8 scsiHBAslotNumber;
  UInt16 scsiSIMsRsrcID;

  UInt16 scsiBIReserved3;
  UInt16 scsiAdditionalLength;
};
typedef struct SCSIBusInquiryPB SCSIBusInquiryPB;

struct SCSIAbortCommandPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
  SCSI_IO * scsiIOptr;
};
typedef struct SCSIAbortCommandPB SCSIAbortCommandPB;

struct SCSITerminateIOPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
  SCSI_IO * scsiIOptr;
};
typedef struct SCSITerminateIOPB SCSITerminateIOPB;

struct SCSIResetBusPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
};
typedef struct SCSIResetBusPB SCSIResetBusPB;

struct SCSIResetDevicePB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
};
typedef struct SCSIResetDevicePB SCSIResetDevicePB;

struct SCSIReleaseQPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  BytePtr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
};
typedef struct SCSIReleaseQPB SCSIReleaseQPB;

struct SCSIGetVirtualIDInfoPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  Ptr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
  UInt16 scsiOldCallID;
  Boolean scsiExists;
  SInt8 filler;
};
typedef struct SCSIGetVirtualIDInfoPB SCSIGetVirtualIDInfoPB;

struct SCSIDriverPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  Ptr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
  short scsiDriver;
  UInt16 scsiDriverFlags;
  DeviceIdent scsiNextDevice;
};
typedef struct SCSIDriverPB SCSIDriverPB;

struct SCSILoadDriverPB {
  SCSIHdr * qLink;
  short scsiReserved1;
  UInt16 scsiPBLength;
  UInt8 scsiFunctionCode;
  UInt8 scsiReserved2;
  volatile OSErr scsiResult;
  DeviceIdent scsiDevice;
  SCSICallbackUPP scsiCompletion;
  UInt32 scsiFlags;
  Ptr scsiDriverStorage;
  Ptr scsiXPTprivate;
  long scsiReserved3;
  short scsiLoadedRefNum;
  Boolean scsiDiskLoadFailed;
  SInt8 filler;
};
typedef struct SCSILoadDriverPB SCSILoadDriverPB;


enum {
  scsiTransferBlind = 0,
  scsiTransferPolled = 1
};

enum {
  scsiErrorBase = -7936
};

enum {
  scsiRequestInProgress = 1,

  scsiRequestAborted = scsiErrorBase + 2,
  scsiUnableToAbort = scsiErrorBase + 3,
  scsiNonZeroStatus = scsiErrorBase + 4,
  scsiUnused05 = scsiErrorBase + 5,
  scsiUnused06 = scsiErrorBase + 6,
  scsiUnused07 = scsiErrorBase + 7,
  scsiUnused08 = scsiErrorBase + 8,
  scsiUnableToTerminate = scsiErrorBase + 9,
  scsiSelectTimeout = scsiErrorBase + 10,
  scsiCommandTimeout = scsiErrorBase + 11,
  scsiIdentifyMessageRejected = scsiErrorBase + 12,
  scsiMessageRejectReceived = scsiErrorBase + 13,
  scsiSCSIBusReset = scsiErrorBase + 14,
  scsiParityError = scsiErrorBase + 15,
  scsiAutosenseFailed = scsiErrorBase + 16,
  scsiUnused11 = scsiErrorBase + 17,
  scsiDataRunError = scsiErrorBase + 18,
  scsiUnexpectedBusFree = scsiErrorBase + 19,
  scsiSequenceFailed = scsiErrorBase + 20,
  scsiWrongDirection = scsiErrorBase + 21,
  scsiUnused16 = scsiErrorBase + 22,
  scsiBDRsent = scsiErrorBase + 23,
  scsiTerminated = scsiErrorBase + 24,
  scsiNoNexus = scsiErrorBase + 25,
  scsiCDBReceived = scsiErrorBase + 26,

  scsiTooManyBuses = scsiErrorBase + 48,
  scsiBusy = scsiErrorBase + 49,
  scsiProvideFail = scsiErrorBase + 50,
  scsiDeviceNotThere = scsiErrorBase + 51,
  scsiNoHBA = scsiErrorBase + 52,
  scsiDeviceConflict = scsiErrorBase + 53,
  scsiNoSuchXref = scsiErrorBase + 54,
  scsiQLinkInvalid = scsiErrorBase + 55,


  scsiPBLengthError = scsiErrorBase + 64,
  scsiFunctionNotAvailable = scsiErrorBase + 65,
  scsiRequestInvalid = scsiErrorBase + 66,
  scsiBusInvalid = scsiErrorBase + 67,
  scsiTIDInvalid = scsiErrorBase + 68,
  scsiLUNInvalid = scsiErrorBase + 69,
  scsiIDInvalid = scsiErrorBase + 70,
  scsiDataTypeInvalid = scsiErrorBase + 71,
  scsiTransferTypeInvalid = scsiErrorBase + 72,
  scsiCDBLengthInvalid = scsiErrorBase + 73
};


enum {
  scsiUnused74 = scsiErrorBase + 74,
  scsiUnused75 = scsiErrorBase + 75,
  scsiBadDataLength = scsiErrorBase + 76,
  scsiPartialPrepared = scsiErrorBase + 77,
  scsiInvalidMsgType = scsiErrorBase + 78,
  scsiUnused79 = scsiErrorBase + 79,
  scsiBadConnID = scsiErrorBase + 80,
  scsiUnused81 = scsiErrorBase + 81,
  scsiIOInProgress = scsiErrorBase + 82,
  scsiTargetReserved = scsiErrorBase + 83,
  scsiUnused84 = scsiErrorBase + 84,
  scsiUnused85 = scsiErrorBase + 85,
  scsiBadConnType = scsiErrorBase + 86,
  scsiCannotLoadPlugin = scsiErrorBase + 87
};
# 724 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
enum {
  scsiFamilyInternalError = scsiErrorBase + 87,
  scsiPluginInternalError = scsiErrorBase + 88,
  scsiVendorSpecificErrorBase = scsiErrorBase + 128,
  scsiVendorSpecificErrorCount = 16
};


enum {
  scsiExecutionErrors = scsiErrorBase,
  scsiNotExecutedErrors = scsiTooManyBuses,
  scsiParameterErrors = scsiPBLengthError
};


enum {
  scsiSIMQFrozen = 0x0001,
  scsiAutosenseValid = 0x0002,
  scsiBusNotFree = 0x0004
};


enum {
  kbSCSIDisableAutosense = 29,
  kbSCSIFlagReservedA = 28,
  kbSCSIFlagReserved0 = 27,
  kbSCSICDBLinked = 26,
  kbSCSIQEnable = 25,
  kbSCSICDBIsPointer = 24,
  kbSCSIFlagReserved1 = 23,
  kbSCSIInitiateSyncData = 22,
  kbSCSIDisableSyncData = 21,
  kbSCSISIMQHead = 20,
  kbSCSISIMQFreeze = 19,
  kbSCSISIMQNoFreeze = 18,
  kbSCSIDoDisconnect = 17,
  kbSCSIDontDisconnect = 16,
  kbSCSIDataReadyForDMA = 15,
  kbSCSIFlagReserved3 = 14,
  kbSCSIDataPhysical = 13,
  kbSCSISensePhysical = 12,
  kbSCSIFlagReserved5 = 11,
  kbSCSIFlagReserved6 = 10,
  kbSCSIFlagReserved7 = 9,
  kbSCSIFlagReserved8 = 8,
  kbSCSIDataBufferValid = 7,
  kbSCSIStatusBufferValid = 6,
  kbSCSIMessageBufferValid = 5,
  kbSCSIFlagReserved9 = 4
};


enum {
  scsiDirectionMask = (long)0xC0000000,
  scsiDirectionNone = (long)0xC0000000,
  scsiDirectionReserved = 0x00000000,
  scsiDirectionOut = (long)0x80000000,
  scsiDirectionIn = 0x40000000,
  scsiDisableAutosense = 0x20000000,
  scsiFlagReservedA = 0x10000000,
  scsiFlagReserved0 = 0x08000000,
  scsiCDBLinked = 0x04000000,
  scsiQEnable = 0x02000000,
  scsiCDBIsPointer = 0x01000000,
  scsiFlagReserved1 = 0x00800000,
  scsiInitiateSyncData = 0x00400000,
  scsiDisableSyncData = 0x00200000,
  scsiSIMQHead = 0x00100000,
  scsiSIMQFreeze = 0x00080000,
  scsiSIMQNoFreeze = 0x00040000,
  scsiDoDisconnect = 0x00020000,
  scsiDontDisconnect = 0x00010000,
  scsiDataReadyForDMA = 0x00008000,
  scsiFlagReserved3 = 0x00004000,
  scsiDataPhysical = 0x00002000,
  scsiSensePhysical = 0x00001000,
  scsiFlagReserved5 = 0x00000800,
  scsiFlagReserved6 = 0x00000400,
  scsiFlagReserved7 = 0x00000200,
  scsiFlagReserved8 = 0x00000100
};


enum {
  scsiNoParityCheck = 0x0002,
  scsiDisableSelectWAtn = 0x0004,
  scsiSavePtrOnDisconnect = 0x0008,
  scsiNoBucketIn = 0x0010,
  scsiNoBucketOut = 0x0020,
  scsiDisableWide = 0x0040,
  scsiInitiateWide = 0x0080,
  scsiRenegotiateSense = 0x0100,
  scsiDisableDiscipline = 0x0200,
  scsiIOFlagReserved0080 = 0x0080,
  scsiIOFlagReserved8000 = 0x8000
};



enum {
  scsiBusMDP = 0x80,
  scsiBusWide32 = 0x40,
  scsiBusWide16 = 0x20,
  scsiBusSDTR = 0x10,
  scsiBusLinkedCDB = 0x08,
  scsiBusTagQ = 0x02,
  scsiBusSoftReset = 0x01
};


enum {
  scsiDataBuffer = 0,
  scsiDataTIB = 1,
  scsiDataSG = 2,
  scsiDataIOTable = 3
};



enum {
  scsiBusDataTIB = (1 << scsiDataTIB),
  scsiBusDataBuffer = (1 << scsiDataBuffer),
  scsiBusDataSG = (1 << scsiDataSG),
  scsiBusDataIOTable = (1 << scsiDataIOTable),
  scsiBusDataReserved = (long)0x80000000
};


enum {
  scsiBusScansDevices = 0x80,
  scsiBusScansOnInit = 0x40,
  scsiBusLoadsROMDrivers = 0x20
};


enum {
  scsiBusLVD = 0x00000400,
  scsiBusUltra3SCSI = 0x00000200,
  scsiBusUltra2SCSI = 0x00000100,
  scsiBusInternalExternalMask = 0x000000C0,
  scsiBusInternalExternalUnknown = 0x00000000,
  scsiBusInternalExternal = 0x000000C0,
  scsiBusInternal = 0x00000080,
  scsiBusExternal = 0x00000040,
  scsiBusCacheCoherentDMA = 0x00000020,
  scsiBusOldCallCapable = 0x00000010,
  scsiBusUltraSCSI = 0x00000008,
  scsiBusDifferential = 0x00000004,
  scsiBusFastSCSI = 0x00000002,
  scsiBusDMAavailable = 0x00000001
};


enum {
  scsiOddDisconnectUnsafeRead1 = 0x0001,
  scsiOddDisconnectUnsafeWrite1 = 0x0002,
  scsiBusErrorsUnsafe = 0x0004,
  scsiRequiresHandshake = 0x0008,
  scsiTargetDrivenSDTRSafe = 0x0010,
  scsiOddCountForPhysicalUnsafe = 0x0020,
  scsiAbortCmdFixed = 0x0040,
  scsiMeshACKTimingFixed = 0x0080
};


enum {
  scsiMotherboardBus = 0x00,
  scsiNuBus = 0x01,
  scsiPDSBus = 0x03,
  scsiPCIBus = 0x04,
  scsiPCMCIABus = 0x05,
  scsiFireWireBridgeBus = 0x06,
  scsiUSBBus = 0x07
};


enum {
  scsiDeviceSensitive = 0x0001,
  scsiDeviceNoOldCallAccess = 0x0002
};






enum {
  scsiStatGood = 0x00,
  scsiStatCheckCondition = 0x02,
  scsiStatConditionMet = 0x04,
  scsiStatBusy = 0x08,
  scsiStatIntermediate = 0x10,
  scsiStatIntermedMet = 0x14,
  scsiStatResvConflict = 0x18,
  scsiStatTerminated = 0x22,
  scsiStatQFull = 0x28
};


enum {
  kCmdCompleteMsg = 0,
  kExtendedMsg = 1,
  kSaveDataPointerMsg = 2,
  kRestorePointersMsg = 3,
  kDisconnectMsg = 4,
  kInitiatorDetectedErrorMsg = 5,
  kAbortMsg = 6,
  kMsgRejectMsg = 7,
  kNoOperationMsg = 8,
  kMsgParityErrorMsg = 9,
  kLinkedCmdCompleteMsg = 10,
  kLinkedCmdCompleteWithFlagMsg = 11,
  kBusDeviceResetMsg = 12,
  kAbortTagMsg = 13,
  kClearQueueMsg = 14,
  kInitiateRecoveryMsg = 15,
  kReleaseRecoveryMsg = 16,
  kTerminateIOProcessMsg = 17,
  kSimpleQueueTag = 0x20,
  kHeadOfQueueTagMsg = 0x21,
  kOrderedQueueTagMsg = 0x22,
  kIgnoreWideResidueMsg = 0x23
};
# 965 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
extern OSErr
SCSIAction(SCSI_PB * parameterBlock) ;
# 1014 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SCSI.h" 3
#pragma pack(pop)


}
# 56 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3


# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 1 3
# 96 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern "C" {


#pragma pack(push, 2)
# 210 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt8 OTUInt8Param;
typedef UInt16 OTUInt16Param;
typedef SInt16 OTSInt16Param;
typedef SInt8 OTSInt8Param;
typedef Boolean OTBooleanParam;
typedef UInt8 uchar_p;
typedef UInt16 ushort_p;
typedef SInt16 short_p;
typedef SInt8 char_p;
typedef Boolean boolean_p;







    typedef unsigned int OTByteCount;
    typedef unsigned int OTItemCount;
    typedef int OTInt32;
    typedef unsigned int OTUInt32;


typedef long int_t;
typedef unsigned long uint_t;
# 262 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  kOTCFMClass = 'otan'
};




typedef UInt32 OTTimeout;

typedef SInt32 OTSequence;

typedef SInt32 OTNameID;




typedef SInt32 OTReason;

typedef UInt32 OTQLen;

typedef UInt8 * OTClientName;

typedef SInt32 OTCommand;

typedef void* OTClient;
# 345 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt32 OTOpenFlags;
enum {
  kO_ASYNC = 0x01,
  kO_NDELAY = 0x04,
  kO_NONBLOCK = 0x04
};
# 368 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt16 OTUnixErr;
# 469 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt16 OTXTIErr;
enum {
  TSUCCESS = 0,
  TBADADDR = 1,
  TBADOPT = 2,
  TACCES = 3,
  TBADF = 4,
  TNOADDR = 5,
  TOUTSTATE = 6,
  TBADSEQ = 7,
  TSYSERR = 8,
  TLOOK = 9,
  TBADDATA = 10,
  TBUFOVFLW = 11,
  TFLOW = 12,
  TNODATA = 13,
  TNODIS = 14,
  TNOUDERR = 15,
  TBADFLAG = 16,
  TNOREL = 17,
  TNOTSUPPORT = 18,
  TSTATECHNG = 19,
  TNOSTRUCTYPE = 20,
  TBADNAME = 21,
  TBADQLEN = 22,
  TADDRBUSY = 23,
  TINDOUT = 24,
  TPROVMISMATCH = 25,
  TRESQLEN = 26,
  TRESADDR = 27,
  TQFULL = 28,
  TPROTO = 29,
  TBADSYNC = 30,
  TCANCELED = 31,
  TLASTXTIERROR = 31
};
# 518 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef SInt32 OTResult;
# 545 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  kOTGenericName = 0
};

typedef UInt16 OTAddressType;
struct OTAddress {
  OTAddressType fAddressType;
  UInt8 fAddress[1];
};
typedef struct OTAddress OTAddress;
# 566 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  T_BIND = 1,
  T_OPTMGMT = 2,
  T_CALL = 3,
  T_DIS = 4,
  T_UNITDATA = 5,
  T_UDERROR = 6,
  T_INFO = 7,
  T_REPLYDATA = 8,
  T_REQUESTDATA = 9,
  T_UNITREQUEST = 10,
  T_UNITREPLY = 11
};


typedef UInt32 OTStructType;




enum {
  T_ADDR = 0x01,
  T_OPT = 0x02,
  T_UDATA = 0x04,
  T_ALL = 0xFFFF
};

typedef UInt32 OTFieldsType;







typedef UInt32 OTFlags;




enum {
  T_MORE = 0x0001,
  T_EXPEDITED = 0x0002,
  T_ACKNOWLEDGED = 0x0004,
  T_PARTIALDATA = 0x0008,
  T_NORECEIPT = 0x0010,
  T_TIMEDOUT = 0x0020
};



enum {
  T_NEGOTIATE = 0x0004,
  T_CHECK = 0x0008,
  T_DEFAULT = 0x0010,
  T_CURRENT = 0x0080
};






enum {
  T_SUCCESS = 0x0020,
  T_FAILURE = 0x0040,
  T_PARTSUCCESS = 0x0100,
  T_READONLY = 0x0200,
  T_NOTSUPPORT = 0x0400
};
# 655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt32 OTBand;
# 672 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
  typedef class TProvider* ProviderRef;
  typedef class TEndpoint* EndpointRef;
  typedef class TMapper* MapperRef;
# 690 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt32 OTEventCode;
# 720 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  T_LISTEN = 0x0001,
  T_CONNECT = 0x0002,
  T_DATA = 0x0004,
  T_EXDATA = 0x0008,
  T_DISCONNECT = 0x0010,
  T_ERROR = 0x0020,
  T_UDERR = 0x0040,
  T_ORDREL = 0x0080,
  T_GODATA = 0x0100,
  T_GOEXDATA = 0x0200,
  T_REQUEST = 0x0400,
  T_REPLY = 0x0800,
  T_PASSCON = 0x1000,
  T_RESET = 0x2000,
  kPRIVATEEVENT = 0x10000000,
  kCOMPLETEEVENT = 0x20000000,
  T_BINDCOMPLETE = 0x20000001,
  T_UNBINDCOMPLETE = 0x20000002,
  T_ACCEPTCOMPLETE = 0x20000003,
  T_REPLYCOMPLETE = 0x20000004,
  T_DISCONNECTCOMPLETE = 0x20000005,
  T_OPTMGMTCOMPLETE = 0x20000006,
  T_OPENCOMPLETE = 0x20000007,
  T_GETPROTADDRCOMPLETE = 0x20000008,
  T_RESOLVEADDRCOMPLETE = 0x20000009,
  T_GETINFOCOMPLETE = 0x2000000A,
  T_SYNCCOMPLETE = 0x2000000B,
  T_MEMORYRELEASED = 0x2000000C,
  T_REGNAMECOMPLETE = 0x2000000D,
  T_DELNAMECOMPLETE = 0x2000000E,
  T_LKUPNAMECOMPLETE = 0x2000000F,
  T_LKUPNAMERESULT = 0x20000010,
  kOTSyncIdleEvent = 0x20000011,
  kSTREAMEVENT = 0x21000000,
  kOTReservedEvent1 = 0x21000001,
  kGetmsgEvent = 0x21000002,
  kStreamReadEvent = 0x21000003,
  kStreamWriteEvent = 0x21000004,
  kStreamIoctlEvent = 0x21000005,
  kOTReservedEvent2 = 0x21000006,
  kStreamOpenEvent = 0x21000007,
  kPollEvent = 0x21000008,
  kOTReservedEvent3 = 0x21000009,
  kOTReservedEvent4 = 0x2100000A,
  kOTReservedEvent5 = 0x2100000B,
  kOTReservedEvent6 = 0x2100000C,
  kOTReservedEvent7 = 0x2100000D,
  kOTReservedEvent8 = 0x2100000E,
  kSIGNALEVENT = 0x22000000,
  kPROTOCOLEVENT = 0x23000000,
  kOTProviderIsDisconnected = 0x23000001,
  kOTProviderIsReconnected = 0x23000002,
  kOTProviderWillClose = 0x24000001,
  kOTProviderIsClosed = 0x24000002,
  kOTPortDisabled = 0x25000001,
  kOTPortEnabled = 0x25000002,
  kOTPortOffline = 0x25000003,
  kOTPortOnline = 0x25000004,
  kOTClosePortRequest = 0x25000005,
  kOTYieldPortRequest = 0x25000005,
  kOTNewPortRegistered = 0x25000006,
  kOTPortNetworkChange = 0x25000007,
  kOTConfigurationChanged = 0x26000001,
  kOTSystemSleep = 0x26000002,
  kOTSystemShutdown = 0x26000003,
  kOTSystemAwaken = 0x26000004,
  kOTSystemIdle = 0x26000005,
  kOTSystemSleepPrep = 0x26000006,
  kOTSystemShutdownPrep = 0x26000007,
  kOTSystemAwakenPrep = 0x26000008,
  kOTStackIsLoading = 0x27000001,
  kOTStackWasLoaded = 0x27000002,
  kOTStackIsUnloading = 0x27000003
};
# 804 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  kOTDisablePortEvent = 0x21000001,
  kStreamCloseEvent = 0x21000006,
  kBackgroundStreamEvent = 0x21000009,
  kIoctlRecvFdEvent = 0x2100000A,
  kOTTryShutdownEvent = 0x2100000B,
  kOTScheduleTerminationEvent = 0x2100000C,
  kOTEnablePortEvent = 0x2100000D,
  kOTNewPortRegisteredEvent = 0x2100000E,
  kOTPortOfflineEvent = 0x2100000F,
  kOTPortOnlineEvent = 0x21000010,
  kOTPortNetworkChangeEvent = 0x21000011
};
# 835 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  kSIGHUP = 1,
  kSIGURG = 16,
  kSIGPOLL = 30
};
# 851 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef void ( * OTNotifyProcPtr)(void *contextPtr, OTEventCode code, OTResult result, void *cookie);
typedef OTNotifyProcPtr OTNotifyUPP;
# 861 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTNotifyUPP
NewOTNotifyUPP(OTNotifyProcPtr userRoutine) ;
# 872 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
DisposeOTNotifyUPP(OTNotifyUPP userUPP) ;
# 883 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
InvokeOTNotifyUPP(
  void * contextPtr,
  OTEventCode code,
  OTResult result,
  void * cookie,
  OTNotifyUPP userUPP) ;



    inline OTNotifyUPP NewOTNotifyUPP(OTNotifyProcPtr userRoutine) { return userRoutine; }
    inline void DisposeOTNotifyUPP(OTNotifyUPP) { }
    inline void InvokeOTNotifyUPP(void * contextPtr, OTEventCode code, OTResult result, void * cookie, OTNotifyUPP userUPP) { (*userUPP)(contextPtr, code, result, cookie); }
# 905 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  XTI_GENERIC = 0xFFFF
};

typedef UInt32 OTXTILevel;

typedef UInt32 OTXTIName;

enum {
  XTI_DEBUG = 0x0001,
  XTI_LINGER = 0x0080,
  XTI_RCVBUF = 0x1002,
  XTI_RCVLOWAT = 0x1004,
  XTI_SNDBUF = 0x1001,
  XTI_SNDLOWAT = 0x1003,
  XTI_PROTOTYPE = 0x1005,
  OPT_CHECKSUM = 0x0600,
  OPT_RETRYCNT = 0x0601,
  OPT_INTERVAL = 0x0602,
  OPT_ENABLEEOM = 0x0603,
  OPT_SELFSEND = 0x0604,
  OPT_SERVERSTATUS = 0x0605,
  OPT_ALERTENABLE = 0x0606,
  OPT_KEEPALIVE = 0x0008
};
# 945 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  MIOC_STREAMIO = 'A',
  MIOC_TMOD = 'a',
  MIOC_STRLOG = 'b',
  MIOC_ND = 'c',
  MIOC_ECHO = 'd',
  MIOC_TLI = 'e',
  MIOC_RESERVEDf = 'f',
  MIOC_SAD = 'g',
  MIOC_ARP = 'h',
  MIOC_HAVOC = 'H',
  MIOC_RESERVEDi = 'i',
  MIOC_SIOC = 'j',
  MIOC_TCP = 'k',
  MIOC_DLPI = 'l',
  MIOC_SOCKETS = 'm',
  MIOC_IPX = 'o',
  MIOC_OT = 'O',
  MIOC_ATALK = 'T',
  MIOC_SRL = 'U',
  MIOC_RESERVEDp = 'p',
  MIOC_RESERVEDr = 'r',
  MIOC_RESERVEDs = 's',
  MIOC_CFIG = 'z'
};



enum {
  I_OTGetMiscellaneousEvents = ((MIOC_OT << 8) | 1),
  I_OTSetFramingType = ((MIOC_OT << 8) | 2),
  kOTGetFramingValue = (UInt32)0xFFFFFFFF,
  I_OTSetRawMode = ((MIOC_OT << 8) | 3),
  kOTSetRecvMode = 0x01,
  kOTSendErrorPacket = 0x02,
  I_OTConnect = ((MIOC_OT << 8) | 4),
  I_OTDisconnect = ((MIOC_OT << 8) | 5),
  I_OTScript = ((MIOC_OT << 8) | 6)
};



struct OTScriptInfo {
  UInt32 fScriptType;
  void * fTheScript;
  UInt32 fScriptLength;
};
typedef struct OTScriptInfo OTScriptInfo;





typedef UInt32 OTXTIStates;
enum {
  T_UNINIT = 0,
  T_UNBND = 1,
  T_IDLE = 2,
  T_OUTCON = 3,
  T_INCON = 4,
  T_DATAXFER = 5,
  T_OUTREL = 6,
  T_INREL = 7
};






enum {
  T_YES = 1,
  T_NO = 0,
  T_UNUSED = (unsigned long)(-1),
  kT_NULL = 0,
  T_ABSREQ = 0x8000
};

enum {
  kT_UNSPEC = (UInt32)0xFFFFFFFD,
  T_ALLOPT = 0
};
# 1042 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef class OTConfiguration* OTConfigurationRef;
# 1052 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct TOptionHeader {
  ByteCount len;


  OTXTILevel level;
  OTXTIName name;
  UInt32 status;
};
typedef struct TOptionHeader TOptionHeader;





struct TOption {
  ByteCount len;


  OTXTILevel level;
  OTXTIName name;
  UInt32 status;
  UInt32 value[1];
};
typedef struct TOption TOption;

enum {
  kOTOptionHeaderSize = sizeof(TOptionHeader),
  kOTBooleanOptionDataSize = sizeof(UInt32),
  kOTBooleanOptionSize = kOTOptionHeaderSize + kOTBooleanOptionDataSize,
  kOTOneByteOptionSize = kOTOptionHeaderSize + 1,
  kOTTwoByteOptionSize = kOTOptionHeaderSize + 2,
  kOTFourByteOptionSize = kOTOptionHeaderSize + sizeof(UInt32)
};
# 1110 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct t_kpalive {
  SInt32 kp_onoff;
  SInt32 kp_timeout;
};
typedef struct t_kpalive t_kpalive;

struct t_linger {
  SInt32 l_onoff;
  SInt32 l_linger;
};
typedef struct t_linger t_linger;







typedef UInt32 OTServiceType;
enum {
  T_COTS = 1,
  T_COTS_ORD = 2,
  T_CLTS = 3,
  T_TRANS = 5,
  T_TRANS_ORD = 6,
  T_TRANS_CLTS = 7
};



enum {
  T_SENDZERO = 0x0001,
  T_XPG4_1 = 0x0002,
  T_CAN_SUPPORT_MDATA = 0x10000000,
  T_CAN_RESOLVE_ADDR = 0x40000000,
  T_CAN_SUPPLY_MIB = 0x20000000
};






enum {
  T_INFINITE = -1,
  T_INVALID = -2
};


typedef SInt32 OTDataSize;

struct TEndpointInfo {
  OTDataSize addr;
  OTDataSize options;
  OTDataSize tsdu;
  OTDataSize etsdu;
  OTDataSize connect;
  OTDataSize discon;
  OTServiceType servtype;
  UInt32 flags;
};
typedef struct TEndpointInfo TEndpointInfo;
# 1182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt32 OTPortRef;
typedef OTPortRef * OTPortRefPtr;
enum {
  kOTInvalidPortRef = 0
};



typedef UInt8 OTBusType;
enum {
  kOTUnknownBusPort = 0,
  kOTMotherboardBus = 1,
  kOTNuBus = 2,
  kOTPCIBus = 3,
  kOTGeoPort = 4,
  kOTPCCardBus = 5,
  kOTFireWireBus = 6,
  kOTLastBusIndex = 15
};






typedef UInt16 OTDeviceType;
enum {
  kOTNoDeviceType = 0,
  kOTADEVDevice = 1,
  kOTMDEVDevice = 2,
  kOTLocalTalkDevice = 3,
  kOTIRTalkDevice = 4,
  kOTTokenRingDevice = 5,
  kOTISDNDevice = 6,
  kOTATMDevice = 7,
  kOTSMDSDevice = 8,
  kOTSerialDevice = 9,
  kOTEthernetDevice = 10,
  kOTSLIPDevice = 11,
  kOTPPPDevice = 12,
  kOTModemDevice = 13,
  kOTFastEthernetDevice = 14,
  kOTFDDIDevice = 15,
  kOTIrDADevice = 16,
  kOTATMSNAPDevice = 17,
  kOTFibreChannelDevice = 18,
  kOTFireWireDevice = 19,
  kOTPseudoDevice = 1023,
  kOTLastDeviceIndex = 1022
};



enum {
  kOTLastSlotNumber = 255,
  kOTLastOtherNumber = 255
};

typedef UInt16 OTSlotNumber;
# 1251 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTPortRef
OTCreatePortRef(
  OTBusType busType,
  OTDeviceType devType,
  OTSlotNumber slot,
  UInt16 other) ;
# 1267 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTDeviceType
OTGetDeviceTypeFromPortRef(OTPortRef ref) ;
# 1279 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern UInt16
OTGetBusTypeFromPortRef(OTPortRef ref) ;
# 1291 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTSlotNumber
OTGetSlotFromPortRef(
  OTPortRef ref,
  UInt16 * other) ;
# 1305 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTPortRef
OTSetDeviceTypeInPortRef(
  OTPortRef ref,
  OTDeviceType devType) ;
# 1319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTPortRef
OTSetBusTypeInPortRef(
  OTPortRef ref,
  OTBusType busType) ;
# 1343 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  kMaxModuleNameLength = 31,
  kMaxModuleNameSize = kMaxModuleNameLength + 1,
  kMaxProviderNameLength = kMaxModuleNameLength + 4,
  kMaxProviderNameSize = kMaxProviderNameLength + 1,
  kMaxSlotIDLength = 7,
  kMaxSlotIDSize = kMaxSlotIDLength + 1,
  kMaxResourceInfoLength = 31,
  kMaxResourceInfoSize = 32,
  kMaxPortNameLength = kMaxModuleNameLength + 4,
  kMaxPortNameSize = kMaxPortNameLength + 1
};






enum {
  kOTPortIsActive = 0x00000001,
  kOTPortIsDisabled = 0x00000002,
  kOTPortIsUnavailable = 0x00000004,
  kOTPortIsOffline = 0x00000008
};



enum {
  kOTPortIsDLPI = 0x00000001,
  kOTPortIsTPI = 0x00000002,
  kOTPortCanYield = 0x00000004,
  kOTPortCanArbitrate = 0x00000008,
  kOTPortIsTransitory = 0x00000010,
  kOTPortAutoConnects = 0x00000020,
  kOTPortIsSystemRegistered = 0x00004000,
  kOTPortIsPrivate = 0x00008000,
  kOTPortIsAlias = (UInt32)0x80000000
};
# 1390 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct OTPortRecord {
  OTPortRef fRef;
  UInt32 fPortFlags;
  UInt32 fInfoFlags;
  UInt32 fCapabilities;
  ItemCount fNumChildPorts;
  OTPortRef * fChildPorts;
  char fPortName[36];
  char fModuleName[32];
  char fSlotID[8];
  char fResourceInfo[32];
  char fReserved[164];
};
typedef struct OTPortRecord OTPortRecord;
# 1420 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTGetIndexedPort(
  OTPortRecord * portRecord,
  OTItemCount index) ;
# 1435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTFindPort(
  OTPortRecord * portRecord,
  const char * portName) ;
# 1450 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTFindPortByRef(
  OTPortRecord * portRecord,
  OTPortRef ref) ;
# 1509 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct TNetbuf {
  ByteCount maxlen;
  ByteCount len;
  UInt8 * buf;
};
typedef struct TNetbuf TNetbuf;
# 1524 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct strbuf {
  SInt32 maxlen;
  SInt32 len;
  char * buf;
};
typedef struct strbuf strbuf;







struct OTData {
  void * fNext;
  void * fData;
  ByteCount fLen;
};
typedef struct OTData OTData;
enum {
  kNetbufDataIsOTData = (UInt32)0xFFFFFFFE
};
# 1562 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct OTBuffer {
  void * fLink;
  void * fLink2;
  struct OTBuffer * fNext;
  UInt8 * fData;
  ByteCount fLen;
  void * fSave;
  UInt8 fBand;
  UInt8 fType;
  UInt8 fPad1;
  UInt8 fFlags;
};
typedef struct OTBuffer OTBuffer;
enum {
  kOTNetbufDataIsOTBufferStar = (UInt32)0xFFFFFFFD
};






struct OTBufferInfo {
  OTBuffer * fBuffer;
  ByteCount fOffset;
  UInt8 fPad;
};
typedef struct OTBufferInfo OTBufferInfo;
# 1604 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
enum {
  kOTNetbufIsRawMode = (UInt32)0xFFFFFFFF
};
# 1619 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct TBind {
  TNetbuf addr;
  OTQLen qlen;
};
typedef struct TBind TBind;




struct TDiscon {
  TNetbuf udata;
  OTReason reason;
  OTSequence sequence;
};
typedef struct TDiscon TDiscon;




struct TCall {
  TNetbuf addr;
  TNetbuf opt;
  TNetbuf udata;
  OTSequence sequence;
};
typedef struct TCall TCall;

struct TUnitData {
  TNetbuf addr;
  TNetbuf opt;
  TNetbuf udata;
};
typedef struct TUnitData TUnitData;




struct TUDErr {
  TNetbuf addr;
  TNetbuf opt;
  SInt32 error;
};
typedef struct TUDErr TUDErr;

struct TOptMgmt {
  TNetbuf opt;
  OTFlags flags;
};
typedef struct TOptMgmt TOptMgmt;
# 1678 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct TRequest {
  TNetbuf data;
  TNetbuf opt;
  OTSequence sequence;
};
typedef struct TRequest TRequest;

struct TReply {
  TNetbuf data;
  TNetbuf opt;
  OTSequence sequence;
};
typedef struct TReply TReply;




struct TUnitRequest {
  TNetbuf addr;
  TNetbuf opt;
  TNetbuf udata;
  OTSequence sequence;
};
typedef struct TUnitRequest TUnitRequest;

struct TUnitReply {
  TNetbuf opt;
  TNetbuf udata;
  OTSequence sequence;
};
typedef struct TUnitReply TUnitReply;







struct TRegisterRequest {
  TNetbuf name;
  TNetbuf addr;
  OTFlags flags;
};
typedef struct TRegisterRequest TRegisterRequest;




struct TRegisterReply {
  TNetbuf addr;
  OTNameID nameid;
};
typedef struct TRegisterReply TRegisterReply;

struct TLookupRequest {
  TNetbuf name;
  TNetbuf addr;
  UInt32 maxcnt;
  OTTimeout timeout;
  OTFlags flags;
};
typedef struct TLookupRequest TLookupRequest;




struct TLookupReply {
  TNetbuf names;
  UInt32 rspcount;
};
typedef struct TLookupReply TLookupReply;




struct TLookupBuffer {
  UInt16 fAddressLength;
  UInt16 fNameLength;
  UInt8 fAddressBuffer[1];
};
typedef struct TLookupBuffer TLookupBuffer;
# 1772 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef struct OpaqueOTClientContextPtr* OTClientContextPtr;
# 1781 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt32 OTInitializationFlags;
enum {
  kInitOTForApplicationMask = 1,
  kInitOTForExtensionMask = 2
};
# 1796 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
InitOpenTransportInContext(
  OTInitializationFlags flags,
  OTClientContextPtr * outClientContext) ;
# 1816 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
CloseOpenTransportInContext(OTClientContextPtr clientContext) ;
# 1887 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRegisterAsClientInContext(
  OTClientName name,
  OTNotifyUPP proc,
  OTClientContextPtr clientContext) ;
# 1902 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTUnregisterAsClientInContext(OTClientContextPtr clientContext) ;
# 1970 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef void ( * OTProcessProcPtr)(void * arg);
typedef OTProcessProcPtr OTProcessUPP;
# 1980 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTProcessUPP
NewOTProcessUPP(OTProcessProcPtr userRoutine) ;
# 1991 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
DisposeOTProcessUPP(OTProcessUPP userUPP) ;
# 2002 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
InvokeOTProcessUPP(
  void * arg,
  OTProcessUPP userUPP) ;



    inline OTProcessUPP NewOTProcessUPP(OTProcessProcPtr userRoutine) { return userRoutine; }
    inline void DisposeOTProcessUPP(OTProcessUPP) { }
    inline void InvokeOTProcessUPP(void * arg, OTProcessUPP userUPP) { (*userUPP)(arg); }
# 2034 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern long
OTCreateDeferredTaskInContext(
  OTProcessUPP upp,
  void * arg,
  OTClientContextPtr clientContext) ;
# 2051 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef long OTDeferredTaskRef;
# 2071 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTScheduleDeferredTask(OTDeferredTaskRef dtCookie) ;
# 2096 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTDestroyDeferredTask(OTDeferredTaskRef dtCookie) ;
# 2115 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef long OTSystemTaskRef;
# 2165 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTCanMakeSyncCall(void) ;
# 2204 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTCloseProvider(ProviderRef ref) ;
# 2249 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern SInt32
OTIoctl(
  ProviderRef ref,
  UInt32 cmd,
  void * data) ;
# 2307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSetAsynchronous(ProviderRef ref) ;
# 2319 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSetSynchronous(ProviderRef ref) ;
# 2331 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTIsSynchronous(ProviderRef ref) ;
# 2343 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSetBlocking(ProviderRef ref) ;
# 2355 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSetNonBlocking(ProviderRef ref) ;
# 2367 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTIsBlocking(ProviderRef ref) ;
# 2379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTInstallNotifier(
  ProviderRef ref,
  OTNotifyUPP proc,
  void * contextPtr) ;
# 2394 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTUseSyncIdleEvents(
  ProviderRef ref,
  Boolean useEvents) ;
# 2408 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTRemoveNotifier(ProviderRef ref) ;
# 2420 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTLeaveNotifier(ProviderRef ref) ;
# 2432 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTEnterNotifier(ProviderRef ref) ;
# 2444 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTAckSends(ProviderRef ref) ;
# 2456 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTDontAckSends(ProviderRef ref) ;
# 2468 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTIsAckingSends(ProviderRef ref) ;
# 2480 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTCancelSynchronousCalls(
  ProviderRef ref,
  OSStatus err) ;
# 2511 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern EndpointRef
OTOpenEndpointInContext(
  OTConfigurationRef config,
  OTOpenFlags oflag,
  TEndpointInfo * info,
  OSStatus * err,
  OTClientContextPtr clientContext) ;
# 2528 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTAsyncOpenEndpointInContext(
  OTConfigurationRef config,
  OTOpenFlags oflag,
  TEndpointInfo * info,
  OTNotifyUPP upp,
  void * contextPtr,
  OTClientContextPtr clientContext) ;
# 2579 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTGetEndpointInfo(
  EndpointRef ref,
  TEndpointInfo * info) ;
# 2593 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTResult
OTGetEndpointState(EndpointRef ref) ;
# 2605 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTResult
OTLook(EndpointRef ref) ;
# 2630 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTResult
OTCountDataBytes(
  EndpointRef ref,
  OTByteCount * countPtr) ;
# 2644 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTGetProtAddress(
  EndpointRef ref,
  TBind * boundAddr,
  TBind * peerAddr) ;
# 2659 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTResolveAddress(
  EndpointRef ref,
  TBind * reqAddr,
  TBind * retAddr,
  OTTimeout timeOut) ;
# 2689 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void *
OTAllocInContext(
  EndpointRef ref,
  OTStructType structType,
  UInt32 fields,
  OSStatus * err,
  OTClientContextPtr clientContext) ;
# 2724 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTResult
OTFree(
  void * ptr,
  OTStructType structType) ;
# 2742 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTOptionManagement(
  EndpointRef ref,
  TOptMgmt * req,
  TOptMgmt * ret) ;
# 2782 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTNextOption(
  UInt8 * buffer,
  UInt32 buflen,
  TOption ** prevOptPtr) ;
# 2797 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern TOption *
OTFindOption(
  UInt8 * buffer,
  UInt32 buflen,
  OTXTILevel level,
  OTXTIName name) ;
# 2815 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTBind(
  EndpointRef ref,
  TBind * reqAddr,
  TBind * retAddr) ;
# 2830 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTUnbind(EndpointRef ref) ;
# 2844 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTConnect(
  EndpointRef ref,
  TCall * sndCall,
  TCall * rcvCall) ;
# 2859 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRcvConnect(
  EndpointRef ref,
  TCall * call) ;
# 2873 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTListen(
  EndpointRef ref,
  TCall * call) ;
# 2887 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTAccept(
  EndpointRef listener,
  EndpointRef worker,
  TCall * call) ;
# 2902 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSndDisconnect(
  EndpointRef ref,
  TCall * call) ;
# 2916 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSndOrderlyDisconnect(EndpointRef ref) ;
# 2928 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRcvDisconnect(
  EndpointRef ref,
  TDiscon * discon) ;
# 2942 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRcvOrderlyDisconnect(EndpointRef ref) ;
# 2956 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTResult
OTRcv(
  EndpointRef ref,
  void * buf,
  OTByteCount nbytes,
  OTFlags * flags) ;
# 2972 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTResult
OTSnd(
  EndpointRef ref,
  void * buf,
  OTByteCount nbytes,
  OTFlags flags) ;
# 2990 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTSndUData(
  EndpointRef ref,
  TUnitData * udata) ;
# 3004 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRcvUData(
  EndpointRef ref,
  TUnitData * udata,
  OTFlags * flags) ;
# 3019 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRcvUDErr(
  EndpointRef ref,
  TUDErr * uderr) ;
# 3169 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTAsyncOpenMapperInContext(
  OTConfigurationRef config,
  OTOpenFlags oflag,
  OTNotifyUPP upp,
  void * contextPtr,
  OTClientContextPtr clientContext) ;
# 3186 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern MapperRef
OTOpenMapperInContext(
  OTConfigurationRef config,
  OTOpenFlags oflag,
  OSStatus * err,
  OTClientContextPtr clientContext) ;
# 3232 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTRegisterName(
  MapperRef ref,
  TRegisterRequest * req,
  TRegisterReply * reply) ;
# 3247 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTDeleteName(
  MapperRef ref,
  TNetbuf * name) ;
# 3261 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTDeleteNameByID(
  MapperRef ref,
  OTNameID nameID) ;
# 3275 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OSStatus
OTLookupName(
  MapperRef ref,
  TLookupRequest * req,
  TLookupReply * reply) ;
# 3292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTConfigurationRef
OTCreateConfiguration(const char * path) ;
# 3304 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTConfigurationRef
OTCloneConfiguration(OTConfigurationRef cfig) ;
# 3316 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTDestroyConfiguration(OTConfigurationRef cfig) ;
# 3342 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void *
OTAllocMemInContext(
  OTByteCount size,
  OTClientContextPtr clientContext) ;
# 3369 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTFreeMem(void * mem) ;
# 3396 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTDelay(UInt32 seconds) ;
# 3408 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTIdle(void) ;
# 3436 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTMemcpy(
  void * dest,
  const void * src,
  OTByteCount nBytes) ;
# 3451 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTMemcmp(
  const void * mem1,
  const void * mem2,
  OTByteCount nBytes) ;
# 3466 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTMemmove(
  void * dest,
  const void * src,
  OTByteCount nBytes) ;
# 3481 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTMemzero(
  void * dest,
  OTByteCount nBytes) ;
# 3495 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTMemset(
  void * dest,
  OTUInt8Param toSet,
  OTByteCount nBytes) ;
# 3510 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTByteCount
OTStrLength(const char * str) ;
# 3522 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTStrCopy(
  char * dest,
  const char * src) ;
# 3536 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTStrCat(
  char * dest,
  const char * src) ;
# 3550 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTStrEqual(
  const char * src1,
  const char * src2) ;
# 3570 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UnsignedWide OTTimeStamp;
# 3580 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTGetTimeStamp(OTTimeStamp * currentTime) ;
# 3592 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTTimeStamp *
OTSubtractTimeStamps(
  OTTimeStamp * result,
  OTTimeStamp * startTime,
  OTTimeStamp * endEnd) ;
# 3607 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern UInt32
OTTimeStampInMilliseconds(OTTimeStamp * delta) ;
# 3619 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern UInt32
OTTimeStampInMicroseconds(OTTimeStamp * delta) ;
# 3631 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern UInt32
OTElapsedMilliseconds(OTTimeStamp * startTime) ;
# 3643 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern UInt32
OTElapsedMicroseconds(OTTimeStamp * startTime) ;
# 3655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern UInt32
OTGetClockTimeInSecs(void) ;
# 3670 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct OTLink {
  struct OTLink * fNext;





   void Init() { fNext = __null; }



};
typedef struct OTLink OTLink;
# 3701 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
struct OTLIFO {
  OTLink * fHead;





  void Init();
    void Enqueue(OTLink* link);
 OTLink* Dequeue();
 OTLink* StealList();
   Boolean IsEmpty();



};
typedef struct OTLIFO OTLIFO;
# 3731 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTLIFOEnqueue(
  OTLIFO * list,
  OTLink * link) ;
# 3749 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTLIFODequeue(OTLIFO * list) ;
# 3765 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTLIFOStealList(OTLIFO * list) ;
# 3782 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTReverseList(OTLink * list) ;







  inline void OTLIFO::Init() { fHead = __null; }
  inline void OTLIFO::Enqueue(OTLink* link) { OTLIFOEnqueue(this, link); }
 inline OTLink* OTLIFO::Dequeue() { return OTLIFODequeue(this); }
    inline OTLink* OTLIFO::StealList() { return OTLIFOStealList(this); }
  inline Boolean OTLIFO::IsEmpty() { return fHead == __null; }
# 3814 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef Boolean ( * OTListSearchProcPtr)(const void *ref, OTLink *linkToCheck);
typedef OTListSearchProcPtr OTListSearchUPP;
# 3824 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTListSearchUPP
NewOTListSearchUPP(OTListSearchProcPtr userRoutine) ;
# 3835 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
DisposeOTListSearchUPP(OTListSearchUPP userUPP) ;
# 3846 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
InvokeOTListSearchUPP(
  const void * ref,
  OTLink * linkToCheck,
  OTListSearchUPP userUPP) ;



    inline OTListSearchUPP NewOTListSearchUPP(OTListSearchProcPtr userRoutine) { return userRoutine; }
    inline void DisposeOTListSearchUPP(OTListSearchUPP) { }
    inline Boolean InvokeOTListSearchUPP(const void * ref, OTLink * linkToCheck, OTListSearchUPP userUPP) { return (*userUPP)(ref, linkToCheck); }







struct OTList {
  OTLink * fHead;




  void Init();
    Boolean IsEmpty();
 void AddFirst(OTLink* link);
    void AddLast(OTLink* link);
 OTLink* GetFirst();
    OTLink* GetLast();
 OTLink* RemoveFirst();
 OTLink* RemoveLast();
  Boolean IsInList(OTLink* link);
    OTLink* FindLink(OTListSearchUPP proc, const void* ref);
   Boolean RemoveLink(OTLink* link);
  OTLink* FindAndRemoveLink(OTListSearchUPP proc, const void* ref);
  OTLink* GetIndexedLink(OTItemCount index);



};
typedef struct OTList OTList;
# 3898 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTAddFirst(
  OTList * list,
  OTLink * link) ;
# 3913 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTAddLast(
  OTList * list,
  OTLink * link) ;
# 3928 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTRemoveFirst(OTList * list) ;
# 3941 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTRemoveLast(OTList * list) ;
# 3954 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTGetFirst(OTList * list) ;
# 3967 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTGetLast(OTList * list) ;
# 3980 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTIsInList(
  OTList * list,
  OTLink * link) ;
# 4001 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTFindLink(
  OTList * list,
  OTListSearchUPP proc,
  const void * ref) ;
# 4017 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTRemoveLink(
  OTList * list,
  OTLink * link) ;
# 4032 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTFindAndRemoveLink(
  OTList * list,
  OTListSearchUPP proc,
  const void * ref) ;
# 4048 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern OTLink *
OTGetIndexedLink(
  OTList * list,
  OTItemCount index) ;
# 4075 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void
OTEnqueue(
  void ** listHead,
  void * object,
  OTByteCount linkOffset) ;
# 4094 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern void *
OTDequeue(
  void ** listHead,
  OTByteCount linkOffset) ;






  inline void OTList::Init() { fHead = __null; }
   inline Boolean OTList::IsEmpty() { return fHead == __null; }
  inline void OTList::AddFirst(OTLink* link) { OTAddFirst(this, link); }
    inline void OTList::AddLast(OTLink* link) { OTAddLast(this, link); }
 inline OTLink* OTList::GetFirst() { return OTGetFirst(this); }
   inline OTLink* OTList::GetLast() { return OTGetLast(this); }
    inline OTLink* OTList::RemoveFirst() { return OTRemoveFirst(this); }
    inline OTLink* OTList::RemoveLast() { return OTRemoveLast(this); }
 inline Boolean OTList::IsInList(OTLink* link) { return OTIsInList(this, link); }
 inline OTLink* OTList::FindLink(OTListSearchUPP proc, const void* ref)
                                                        { return OTFindLink(this, proc, ref); }
    inline Boolean OTList::RemoveLink(OTLink* link) { return OTRemoveLink(this, link); }
  inline OTLink* OTList::FindAndRemoveLink(OTListSearchUPP proc, const void* ref)
                                                       { return OTFindAndRemoveLink(this, proc, ref); }
   inline OTLink* OTList::GetIndexedLink(OTItemCount index)
                                                      { return OTGetIndexedLink(this, index); }
# 4145 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTAtomicSetBit(
  UInt8 * bytePtr,
  OTByteCount bitNumber) ;
# 4165 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTAtomicClearBit(
  UInt8 * bytePtr,
  OTByteCount bitNumber) ;
# 4185 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTAtomicTestBit(
  UInt8 * bytePtr,
  OTByteCount bitNumber) ;
# 4205 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTCompareAndSwapPtr(
  void * oldValue,
  void * newValue,
  void ** dest) ;
# 4225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTCompareAndSwap32(
  UInt32 oldValue,
  UInt32 newValue,
  UInt32 * dest) ;
# 4245 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTCompareAndSwap16(
  UInt32 oldValue,
  UInt32 newValue,
  UInt16 * dest) ;
# 4265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern Boolean
OTCompareAndSwap8(
  UInt32 oldValue,
  UInt32 newValue,
  UInt8 * dest) ;
# 4285 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern SInt32
OTAtomicAdd32(
  SInt32 toAdd,
  SInt32 * dest) ;
# 4307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern SInt16
OTAtomicAdd16(
  SInt32 toAdd,
  SInt16 * dest) ;
# 4322 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
extern SInt8
OTAtomicAdd8(
  SInt32 toAdd,
  SInt8 * dest) ;
# 4334 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
typedef UInt8 OTLock;
# 4346 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
}
# 4358 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
class TProvider
{
    private:
        void* operator new(size_t);
        void operator delete(void*) {}





    public:
        OSStatus Close() { return OTCloseProvider(this); }

        OSStatus SetNonBlocking() { return OTSetNonBlocking(this); }
        OSStatus SetBlocking() { return OTSetBlocking(this); }
        Boolean IsBlocking() { return OTIsBlocking(this); }
        Boolean IsNonBlocking() { return !OTIsBlocking(this); }
        OSStatus SetSynchronous() { return OTSetSynchronous(this); }
        OSStatus SetAsynchronous() { return OTSetAsynchronous(this); }
        Boolean IsSynchronous() { return OTIsSynchronous(this); }
        Boolean IsAsynchronous() { return !OTIsSynchronous(this); }

        OSStatus AckSends() { return OTAckSends(this); }
        OSStatus DontAckSends() { return OTDontAckSends(this); }
        Boolean IsAckingSends() { return OTIsAckingSends(this); }

        void CancelSynchronousCalls(OSStatus err)
                    { (void)OTCancelSynchronousCalls(this, err); }

        OSStatus InstallNotifier(OTNotifyUPP proc, void* ptr)
                    { return OTInstallNotifier(this, proc, ptr); }

        OSStatus UseSyncIdleEvents()
                    { return OTUseSyncIdleEvents(this, true); }

        OSStatus DontUseSyncIdleEvents()
                    { return OTUseSyncIdleEvents(this, false); }

        void RemoveNotifier()
                    { OTRemoveNotifier(this); }

        Boolean EnterNotifier()
                    { return OTEnterNotifier(this); }

        void LeaveNotifier()
                    { OTLeaveNotifier(this); }
# 4413 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
        SInt32 Ioctl(UInt32 cmd, void* data)
                    { return OTIoctl(this, cmd, data); }
        SInt32 Ioctl(UInt32 cmd, long data)
                    { return OTIoctl(this, cmd, (void*)data); }
# 4433 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
    public:
        void* fData;
};
# 4449 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
class TEndpoint : public TProvider
{
    public:



        OSStatus GetEndpointInfo(TEndpointInfo* info)
                    { return OTGetEndpointInfo(this, info); }

        OSStatus GetProtAddress(TBind* boundAddr, TBind* peerAddr)
                    { return OTGetProtAddress(this, boundAddr, peerAddr); }

        OSStatus ResolveAddress(TBind* reqAddr, TBind* retAddr, OTTimeout timeout)
                    { return OTResolveAddress(this, reqAddr, retAddr, timeout); }

        OTResult GetEndpointState()
                    { return OTGetEndpointState(this); }

        OTResult Look()
                    { return OTLook(this); }
# 4477 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
        void* AllocInContext(OTStructType structType, UInt32 fields, OSStatus* err = __null, OTClientContextPtr clientContext = __null)
                    { return OTAllocInContext(this, structType, fields, err, clientContext); }

        void* Alloc(OTStructType structType, UInt32 fields, OSStatus* err = __null)
                    {

                         return OTAllocInContext(this, structType, fields, err, __null);



                    };

        OTResult Free(void* ptr, OTStructType structType)
                    { return OTFree(ptr, structType); }



        OSStatus OptionManagement(TOptMgmt* req, TOptMgmt* ret)
                    { return OTOptionManagement(this, req, ret); }



        OSStatus Bind(TBind* reqAddr, TBind* retAddr)
                    { return OTBind(this, reqAddr, retAddr); }

        OSStatus Unbind()
                    { return OTUnbind(this); }



        OSStatus Connect(TCall* sndCall, TCall* rcvCall)
                    { return OTConnect(this, sndCall, rcvCall); }

        OSStatus RcvConnect(TCall* call)
                    { return OTRcvConnect(this, call); }

        OSStatus Listen(TCall* call)
                    { return OTListen(this, call); }

        OSStatus Accept(EndpointRef resRef, TCall* call)
                    { return OTAccept(this, resRef, call); }

        OSStatus SndDisconnect(TCall* call)
                    { return OTSndDisconnect(this, call); }

        OSStatus SndOrderlyDisconnect()
                    { return OTSndOrderlyDisconnect(this); }

        OSStatus RcvDisconnect(TDiscon* discon)
                    { return OTRcvDisconnect(this, discon); }

        OSStatus RcvOrderlyDisconnect()
                    { return OTRcvOrderlyDisconnect(this); }



        OTResult Snd(void* buf, OTByteCount nbytes, OTFlags flags)
                    { return OTSnd(this, buf, nbytes, flags); }

        OTResult Rcv(void* buf, OTByteCount nbytes, OTFlags* flagP)
                    { return OTRcv(this, buf, nbytes, flagP); }



        OSStatus SndUData(TUnitData* udata)
                    { return OTSndUData(this, udata); }

        OSStatus RcvUData(TUnitData* udata, OTFlags* flagP)
                    { return OTRcvUData(this, udata, flagP); }

        OSStatus RcvUDErr(TUDErr* uderr)
                    { return OTRcvUDErr(this, uderr); }
# 4595 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
        OTResult CountDataBytes(OTByteCount* countPtr)
                    { return OTCountDataBytes(this, countPtr); }
};







class TMapper : public TProvider
{
    public:
        OSStatus RegisterName(TRegisterRequest* req, TRegisterReply* reply)
                    { return OTRegisterName(this, req, reply); }

        OSStatus DeleteName(TNetbuf* name)
                    { return OTDeleteName(this, name); }

        OSStatus DeleteName(OTNameID theID)
                    { return OTDeleteNameByID(this, theID); }

        OSStatus LookupName(TLookupRequest* req, TLookupReply* reply)
                    { return OTLookupName(this, req, reply); }
};



extern "C" {
# 4632 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransport.h" 3
#pragma pack(pop)


}
# 59 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 1 3
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern "C" {


#pragma pack(push, 2)
# 50 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
typedef UInt16 InetPort;
typedef UInt32 InetHost;


enum {
  AF_DNS = 42
};







enum {
  kOTAnyInetAddress = 0
};
# 76 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
 typedef class TInternetServices* InetSvcRef;
# 99 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  INET_IP = 0x00,
  INET_TCP = 0x06,
  INET_UDP = 0x11
};



enum {
  TCP_NODELAY = 0x01,
  TCP_MAXSEG = 0x02,
  TCP_NOTIFY_THRESHOLD = 0x10,
  TCP_ABORT_THRESHOLD = 0x11,
  TCP_CONN_NOTIFY_THRESHOLD = 0x12,
  TCP_CONN_ABORT_THRESHOLD = 0x13,
  TCP_OOBINLINE = 0x14,
  TCP_URGENT_PTR_TYPE = 0x15,
  TCP_KEEPALIVE = 0x0008
};
# 133 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  T_GARBAGE = 2
};



enum {
  UDP_CHECKSUM = 0x0600,
  UDP_RX_ICMP = 0x02
};
# 152 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kIP_OPTIONS = 0x01,
  kIP_TOS = 0x02,
  kIP_TTL = 0x03,
  kIP_REUSEADDR = 0x04,
  kIP_DONTROUTE = 0x10,
  kIP_BROADCAST = 0x20,
  kIP_REUSEPORT = 0x0200,
  kIP_HDRINCL = 0x1002,
  kIP_RCVOPTS = 0x1005,
  kIP_RCVDSTADDR = 0x1007,
  kIP_MULTICAST_IF = 0x1010,
  kIP_MULTICAST_TTL = 0x1011,
  kIP_MULTICAST_LOOP = 0x1012,
  kIP_ADD_MEMBERSHIP = 0x1013,
  kIP_DROP_MEMBERSHIP = 0x1014,
  kIP_BROADCAST_IFNAME = 0x1015,
  kIP_RCVIFADDR = 0x1016
};







enum {
  DVMRP_INIT = 100,
  DVMRP_DONE = 101,
  DVMRP_ADD_VIF = 102,
  DVMRP_DEL_VIF = 103,
  DVMRP_ADD_LGRP = 104,
  DVMRP_DEL_LGRP = 105,
  DVMRP_ADD_MRT = 106,
  DVMRP_DEL_MRT = 107
};




enum {
  T_ROUTINE = 0,
  T_PRIORITY = 1,
  T_IMMEDIATE = 2,
  T_FLASH = 3,
  T_OVERRIDEFLASH = 4,
  T_CRITIC_ECP = 5,
  T_INETCONTROL = 6,
  T_NETCONTROL = 7
};



enum {
  T_NOTOS = 0x00,
  T_LDELAY = (1 << 4),
  T_HITHRPT = (1 << 3),
  T_HIREL = (1 << 2)
};




struct TIPAddMulticast {
  InetHost multicastGroupAddress;
  InetHost interfaceAddress;
};
typedef struct TIPAddMulticast TIPAddMulticast;

enum {
  T_DNRSTRINGTOADDRCOMPLETE = kPRIVATEEVENT + 1,
  T_DNRADDRTONAMECOMPLETE = kPRIVATEEVENT + 2,
  T_DNRSYSINFOCOMPLETE = kPRIVATEEVENT + 3,
  T_DNRMAILEXCHANGECOMPLETE = kPRIVATEEVENT + 4,
  T_DNRQUERYCOMPLETE = kPRIVATEEVENT + 5
};



struct InetAddress {
  OTAddressType fAddressType;
  InetPort fPort;
  InetHost fHost;
  UInt8 fUnused[8];
};
typedef struct InetAddress InetAddress;

enum {
  kMaxHostAddrs = 10,
  kMaxSysStringLen = 32,
  kMaxHostNameLen = 255
};


typedef char InetDomainName[256];
struct InetHostInfo {
  InetDomainName name;
  InetHost addrs[10];
};
typedef struct InetHostInfo InetHostInfo;
struct InetSysInfo {
  char cpuType[32];
  char osType[32];
};
typedef struct InetSysInfo InetSysInfo;
struct InetMailExchange {
  UInt16 preference;
  InetDomainName exchange;
};
typedef struct InetMailExchange InetMailExchange;
struct DNSQueryInfo {
  UInt16 qType;
  UInt16 qClass;
  UInt32 ttl;
  InetDomainName name;
  UInt16 responseType;
  UInt16 resourceLen;
  char resourceData[4];
};
typedef struct DNSQueryInfo DNSQueryInfo;
# 284 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
struct DNSAddress {
  OTAddressType fAddressType;
  InetDomainName fName;
};
typedef struct DNSAddress DNSAddress;

enum {
  kDefaultInetInterface = -1
};

enum {
  kInetInterfaceInfoVersion = 3
};

struct InetInterfaceInfo {
  InetHost fAddress;
  InetHost fNetmask;
  InetHost fBroadcastAddr;
  InetHost fDefaultGatewayAddr;
  InetHost fDNSAddr;
  UInt16 fVersion;
  UInt16 fHWAddrLen;
  UInt8 * fHWAddr;
  UInt32 fIfMTU;
  UInt8 * fReservedPtrs[2];
  InetDomainName fDomainName;
  UInt32 fIPSecondaryCount;
  UInt8 fReserved[252];
};
typedef struct InetInterfaceInfo InetInterfaceInfo;

enum {
  kAllDHCPOptions = -1,
  kDHCPLongOption = 126,
  kDHCPLongOptionReq = 127
};

struct InetDHCPOption {
  UInt8 fOptionTag;
  UInt8 fOptionLen;
  UInt8 fOptionValue;
};
typedef struct InetDHCPOption InetDHCPOption;
# 338 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTInitInetAddress(
  InetAddress * addr,
  InetPort port,
  InetHost host) ;
# 353 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OTByteCount
OTInitDNSAddress(
  DNSAddress * addr,
  char * str) ;
# 367 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetStringToHost(
  const char * str,
  InetHost * host) ;
# 381 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTInetHostToString(
  InetHost host,
  char * str) ;
# 395 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetGetInterfaceInfo(
  InetInterfaceInfo * info,
  SInt32 val) ;
# 409 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetGetSecondaryAddresses(
  InetHost * addr,
  UInt32 * count,
  SInt32 val) ;
# 445 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern InetSvcRef
OTOpenInternetServicesInContext(
  OTConfigurationRef cfig,
  OTOpenFlags oflag,
  OSStatus * err,
  OTClientContextPtr clientContext) ;
# 461 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTAsyncOpenInternetServicesInContext(
  OTConfigurationRef cfig,
  OTOpenFlags oflag,
  OTNotifyUPP upp,
  void * contextPtr,
  OTClientContextPtr clientContext) ;
# 507 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetStringToAddress(
  InetSvcRef ref,
  char * name,
  InetHostInfo * hinfo) ;
# 522 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetAddressToName(
  InetSvcRef ref,
  InetHost addr,
  InetDomainName name) ;
# 537 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetSysInfo(
  InetSvcRef ref,
  char * name,
  InetSysInfo * sysinfo) ;
# 552 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetMailExchange(
  InetSvcRef ref,
  char * name,
  UInt16 * num,
  InetMailExchange * mx) ;
# 568 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTInetQuery(
  InetSvcRef ref,
  char * name,
  UInt16 qClass,
  UInt16 qType,
  char * buf,
  OTByteCount buflen,
  void ** argv,
  OTByteCount argvlen,
  OTFlags flags) ;



}

class TInternetServices : public TProvider
{
    public:
            OSStatus StringToAddress(char* name, InetHostInfo* hinfo)
                        { return OTInetStringToAddress(this, name, hinfo); }

            OSStatus AddressToName(InetHost addr, InetDomainName name)
                        { return OTInetAddressToName(this, addr, name); }

            OSStatus SysInfo(char* name, InetSysInfo* sysinfo )
                        { return OTInetSysInfo(this, name, sysinfo); }

            OSStatus MailExchange(char* name, UInt16* num, InetMailExchange* mx)
                        { return OTInetMailExchange(this, name, num, mx); }

            OSStatus Query(char* name, UInt16 qClass, UInt16 qType,
                              char* buf, OTByteCount buflen,
                              void** argv, OTByteCount argvlen,
                              OTFlags flags)
                        { return OTInetQuery(this, name, qClass, qType, buf, buflen, argv, argvlen, flags); }
};

extern "C" {
# 625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  ATK_DDP = 'DDP ',
  ATK_AARP = 'AARP',
  ATK_ATP = 'ATP ',
  ATK_ADSP = 'ADSP',
  ATK_ASP = 'ASP ',
  ATK_PAP = 'PAP ',
  ATK_NBP = 'NBP ',
  ATK_ZIP = 'ZIP '
};
# 658 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  DDP_OPT_HOPCOUNT = 0x2100
};

enum {
  DDP_OPT_CHECKSUM = 0x0600,
  DDP_OPT_SRCADDR = 0x2101,
  ATP_OPT_REPLYCNT = 0x2110,
  ATP_OPT_DATALEN = 0x2111,
  ATP_OPT_RELTIMER = 0x2112,
  ATP_OPT_TRANID = 0x2113,
  PAP_OPT_OPENRETRY = 0x2120
};
# 680 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kAppleTalkEvent = kPROTOCOLEVENT | 0x00010000,
  T_GETMYZONECOMPLETE = kAppleTalkEvent + 1,
  T_GETLOCALZONESCOMPLETE = kAppleTalkEvent + 2,
  T_GETZONELISTCOMPLETE = kAppleTalkEvent + 3,
  T_GETATALKINFOCOMPLETE = kAppleTalkEvent + 4,
  T_ATALKROUTERDOWNEVENT = kAppleTalkEvent + 51,
  T_ATALKROUTERUPEVENT = kAppleTalkEvent + 52,
  T_ATALKZONENAMECHANGEDEVENT = kAppleTalkEvent + 53,
  T_ATALKCONNECTIVITYCHANGEDEVENT = kAppleTalkEvent + 54,
  T_ATALKINTERNETAVAILABLEEVENT = kAppleTalkEvent + 55,
  T_ATALKCABLERANGECHANGEDEVENT = kAppleTalkEvent + 56
};

enum {
  T_ATALKBADROUTEREVENT = kAppleTalkEvent + 70,
  T_ALLNODESTAKENEVENT = kAppleTalkEvent + 71,
  T_FIXEDNODETAKENEVENT = kAppleTalkEvent + 72,
  T_MPPCOMPATCFIGEVENT = kAppleTalkEvent + 73,
  T_FIXEDNODEBADEVENT = kAppleTalkEvent + 74
};

enum {
  kAllATalkRoutersDown = 0,
  kLocalATalkRoutersDown = -1L,
  kARARouterDisconnected = -2L
};

enum {
  kARARouterOnline = -1L,
  kATalkRouterOnline = 0,
  kLocalATalkRouterOnline = -2L
};




enum {
  ATALK_IOC_FULLSELFSEND = ((MIOC_ATALK << 8) | 47),
  ADSP_IOC_FORWARDRESET = ((MIOC_ATALK << 8) | 60)
};





enum {
  kECHO_TSDU = 585
};



enum {
  kNBPMaxNameLength = 32,
  kNBPMaxTypeLength = 32,
  kNBPMaxZoneLength = 32,
  kNBPSlushLength = 9,
  kNBPMaxEntityLength = (kNBPMaxNameLength + kNBPMaxTypeLength + kNBPMaxZoneLength + 3),
  kNBPEntityBufferSize = (kNBPMaxNameLength + kNBPMaxTypeLength + kNBPMaxZoneLength + kNBPSlushLength),
  kNBPWildCard = 0x3D,
  kNBPImbeddedWildCard = 0xC5,
  kNBPDefaultZone = 0x2A
};



enum {
  kZIPMaxZoneLength = kNBPMaxZoneLength
};

enum {
  kDDPAddressLength = 8,
  kNBPAddressLength = kNBPEntityBufferSize,
  kAppleTalkAddressLength = kDDPAddressLength + kNBPEntityBufferSize
};
# 774 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
    typedef class TAppleTalkServices* ATSvcRef;
# 793 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTAsyncOpenAppleTalkServicesInContext(
  OTConfigurationRef cfig,
  OTOpenFlags flags,
  OTNotifyUPP proc,
  void * contextPtr,
  OTClientContextPtr clientContext) ;
# 810 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern ATSvcRef
OTOpenAppleTalkServicesInContext(
  OTConfigurationRef cfig,
  OTOpenFlags flags,
  OSStatus * err,
  OTClientContextPtr clientContext) ;
# 856 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTATalkGetMyZone(
  ATSvcRef ref,
  TNetbuf * zone) ;
# 874 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTATalkGetLocalZones(
  ATSvcRef ref,
  TNetbuf * zones) ;
# 889 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTATalkGetZoneList(
  ATSvcRef ref,
  TNetbuf * zones) ;
# 904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OSStatus
OTATalkGetInfo(
  ATSvcRef ref,
  TNetbuf * info) ;



}

class TAppleTalkServices : public TProvider
{
    public:
            OSStatus GetMyZone(TNetbuf* zone) { return OTATalkGetMyZone(this, zone); }
            OSStatus GetLocalZones(TNetbuf* zones) { return OTATalkGetLocalZones(this, zones); }
            OSStatus GetZoneList(TNetbuf* zones) { return OTATalkGetZoneList(this, zones); }
            OSStatus GetInfo(TNetbuf* info) { return OTATalkGetInfo(this, info); }
};

extern "C" {
# 943 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  AF_ATALK_FAMILY = 0x0100,
  AF_ATALK_DDP = 0x0100,
  AF_ATALK_DDPNBP = AF_ATALK_FAMILY + 1,
  AF_ATALK_NBP = AF_ATALK_FAMILY + 2,
  AF_ATALK_MNODE = AF_ATALK_FAMILY + 3
};

struct NBPEntity {
  UInt8 fEntity[99];
};
typedef struct NBPEntity NBPEntity;
struct DDPAddress {
  OTAddressType fAddressType;
  UInt16 fNetwork;
  UInt8 fNodeID;
  UInt8 fSocket;
  UInt8 fDDPType;
  UInt8 fPad;




  void Init(const DDPAddress&);
   void Init(UInt16 net, UInt8 node, UInt8 socket);
    void Init(UInt16 net, UInt8 node, UInt8 socket, UInt8 type);

   void SetSocket(UInt8);
  void SetType(UInt8);
    void SetNode(UInt8);
    void SetNetwork(UInt16);

   OTByteCount GetAddressLength() const;
  OTAddressType GetAddressType() const;
    UInt8 GetSocket() const;
 UInt8 GetType() const;
   UInt8 GetNode() const;
   UInt16 GetNetwork() const;

   Boolean operator==(const DDPAddress&) const;
   Boolean operator!=(const DDPAddress&) const;
   void operator=(const DDPAddress&);



};
typedef struct DDPAddress DDPAddress;
struct NBPAddress {
  OTAddressType fAddressType;
  UInt8 fNBPNameBuffer[105];




  OTByteCount Init();
    OTByteCount Init(const NBPEntity&);
    OTByteCount Init(const char*);
 OTByteCount Init(const char*, OTByteCount len);
    Boolean ExtractEntity(NBPEntity&, OTByteCount len);

   OTAddressType GetAddressType() const;



};
typedef struct NBPAddress NBPAddress;
struct DDPNBPAddress {
  OTAddressType fAddressType;
  UInt16 fNetwork;
  UInt8 fNodeID;
  UInt8 fSocket;
  UInt8 fDDPType;
  UInt8 fPad;
  UInt8 fNBPNameBuffer[105];




  void Init(const DDPAddress&);
   void Init(UInt16 net, UInt8 node, UInt8 socket);
    void Init(UInt16 net, UInt8 node, UInt8 socket, UInt8 type);

   void SetSocket(UInt8);
  void SetType(UInt8);
    void SetNode(UInt8);
    void SetNetwork(UInt16);

   OTAddressType GetAddressType() const;
    UInt8 GetSocket() const;
 UInt8 GetType() const;
   UInt8 GetNode() const;
   UInt16 GetNetwork() const;

   Boolean ExtractEntity(NBPEntity&, OTByteCount len);
    OTByteCount SetNBPEntity(const NBPEntity&);
    OTByteCount SetNBPEntity(const char*);
 OTByteCount SetNBPEntity(const char*, OTByteCount len);

   Boolean operator==(const DDPAddress&) const;



};
typedef struct DDPNBPAddress DDPNBPAddress;
# 1059 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTInitDDPAddress(
  DDPAddress * addr,
  UInt16 net,
  UInt8 node,
  UInt8 socket,
  UInt8 ddpType) ;
# 1076 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OTByteCount
OTInitNBPAddress(
  NBPAddress * addr,
  const char * name) ;
# 1090 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OTByteCount
OTInitDDPNBPAddress(
  DDPNBPAddress * addr,
  const char * name,
  UInt16 net,
  UInt8 node,
  UInt8 socket,
  UInt8 ddpType) ;
# 1109 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern Boolean
OTCompareDDPAddresses(
  const DDPAddress * addr1,
  const DDPAddress * addr2) ;
# 1124 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTInitNBPEntity(NBPEntity * entity) ;
# 1137 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OTByteCount
OTGetNBPEntityLengthAsAddress(const NBPEntity * entity) ;
# 1150 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OTByteCount
OTSetAddressFromNBPEntity(
  UInt8 * nameBuf,
  const NBPEntity * entity) ;
# 1165 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern OTByteCount
OTSetAddressFromNBPString(
  UInt8 * addrBuf,
  const char * name,
  SInt32 len) ;
# 1184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern Boolean
OTSetNBPEntityFromAddress(
  NBPEntity * entity,
  const UInt8 * addrBuf,
  OTByteCount len) ;
# 1200 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern Boolean
OTSetNBPName(
  NBPEntity * entity,
  const char * name) ;
# 1214 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern Boolean
OTSetNBPType(
  NBPEntity * entity,
  const char * typeVal) ;
# 1228 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern Boolean
OTSetNBPZone(
  NBPEntity * entity,
  const char * zone) ;
# 1243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTExtractNBPName(
  const NBPEntity * entity,
  char * name) ;
# 1257 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTExtractNBPType(
  const NBPEntity * entity,
  char * typeVal) ;
# 1271 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
extern void
OTExtractNBPZone(
  const NBPEntity * entity,
  char * zone) ;






inline void DDPAddress::operator=(const DDPAddress& addr)
{
    *(UInt32*)&fAddressType = *(UInt32*)&addr.fAddressType;
    *(UInt32*)&fNodeID = *(UInt32*)&addr.fNodeID;
}

inline Boolean DDPAddress::operator==(const DDPAddress& addr) const
{
    return OTCompareDDPAddresses(&addr, this);
}

inline Boolean DDPAddress::operator!=(const DDPAddress& addr) const
{
    return !OTCompareDDPAddresses(&addr, this);
}

inline void DDPAddress::SetSocket(UInt8 socket)
{
    fSocket = socket;
}

inline void DDPAddress::SetNode(UInt8 node)
{
    fNodeID = node;
}

inline void DDPAddress::SetType(UInt8 type)
{
    fDDPType = type;
}

inline void DDPAddress::SetNetwork(UInt16 net)
{
    fNetwork = net;
}

inline OTByteCount DDPAddress::GetAddressLength() const
{
    return kDDPAddressLength;
}

inline OTAddressType DDPAddress::GetAddressType() const
{
    return fAddressType;
}

inline UInt8 DDPAddress::GetSocket() const
{
    return fSocket;
}

inline UInt8 DDPAddress::GetNode() const
{
    return fNodeID;
}

inline UInt8 DDPAddress::GetType() const
{
    return fDDPType;
}

inline UInt16 DDPAddress::GetNetwork() const
{
    return fNetwork;
}

inline void DDPAddress::Init(UInt16 net, UInt8 node,
                              UInt8 socket)
{
    fAddressType = AF_ATALK_DDP;
    SetNetwork(net);
    SetNode(node);
    SetSocket(socket);
    SetType(0);
}

inline void DDPAddress::Init(UInt16 net, UInt8 node,
                              UInt8 socket, UInt8 type)
{
    fAddressType = AF_ATALK_DDP;
    SetNetwork(net);
    SetNode(node);
    SetSocket(socket);
    SetType(type);
}

inline void DDPAddress::Init(const DDPAddress& addr)
{
    *(UInt32*)&fAddressType = *(UInt32*)&addr.fAddressType;
    *(UInt32*)&fNodeID = *(UInt32*)&addr.fNodeID;
}



inline OTByteCount NBPAddress::Init()
{
    fAddressType = AF_ATALK_NBP;
    return sizeof(OTAddressType);
}

inline OTByteCount NBPAddress::Init(const NBPEntity& addr)
{
    fAddressType = AF_ATALK_NBP;
    return sizeof(OTAddressType) + OTSetAddressFromNBPEntity(fNBPNameBuffer, &addr);
}

inline OTByteCount NBPAddress::Init(const char* name)
{
    fAddressType = AF_ATALK_NBP;
    return sizeof(OTAddressType) + OTSetAddressFromNBPString(fNBPNameBuffer, name, -1);
}

inline OTByteCount NBPAddress::Init(const char* name, OTByteCount len)
{
    fAddressType = AF_ATALK_NBP;
    return sizeof(OTAddressType) + OTSetAddressFromNBPString(fNBPNameBuffer, name, (SInt32)len);
}

inline Boolean NBPAddress::ExtractEntity(NBPEntity& entity, OTByteCount len)
{
    return OTSetNBPEntityFromAddress(&entity, fNBPNameBuffer, len);
}

inline OTAddressType NBPAddress::GetAddressType() const
{
    return fAddressType;
}



inline Boolean DDPNBPAddress::operator==(const DDPAddress& addr) const
{
    return OTCompareDDPAddresses((const DDPAddress*)this, &addr);
}

inline void DDPNBPAddress::SetSocket(UInt8 socket)
{
    fSocket = socket;
}

inline void DDPNBPAddress::SetNode(UInt8 node)
{
    fNodeID = node;
}

inline void DDPNBPAddress::SetType(UInt8 type)
{
    fDDPType = type;
}

inline void DDPNBPAddress::SetNetwork(UInt16 net)
{
    fNetwork = net;
}

inline OTAddressType DDPNBPAddress::GetAddressType() const
{
    return fAddressType;
}

inline UInt8 DDPNBPAddress::GetSocket() const
{
    return fSocket;
}

inline UInt8 DDPNBPAddress::GetNode() const
{
    return fNodeID;
}

inline UInt8 DDPNBPAddress::GetType() const
{
    return fDDPType;
}

inline UInt16 DDPNBPAddress::GetNetwork() const
{
    return fNetwork;
}

inline void DDPNBPAddress::Init(UInt16 net, UInt8 node,
                                UInt8 socket)
{
    fAddressType = AF_ATALK_DDPNBP;
    SetNetwork(net);
    SetNode(node);
    SetSocket(socket);
    SetType(0);
}

inline void DDPNBPAddress::Init(UInt16 net, UInt8 node,
                                UInt8 socket, UInt8 type)
{
    fAddressType = AF_ATALK_DDPNBP;
    SetNetwork(net);
    SetNode(node);
    SetSocket(socket);
    SetType(type);
}

inline void DDPNBPAddress::Init(const DDPAddress& addr)
{
    fAddressType = AF_ATALK_DDPNBP;
    SetNetwork(addr.GetNetwork());
    SetNode(addr.GetNode());
    SetSocket(addr.GetSocket());
    SetType(addr.GetType());
    fNBPNameBuffer[0] = 0;
}

inline OTByteCount DDPNBPAddress::SetNBPEntity(const NBPEntity& entity)
{
    return OTSetAddressFromNBPEntity(fNBPNameBuffer, &entity) + kDDPAddressLength;
}

inline OTByteCount DDPNBPAddress::SetNBPEntity(const char* name)
{
    return OTSetAddressFromNBPString(fNBPNameBuffer, name, -1) + kDDPAddressLength;
}

inline OTByteCount DDPNBPAddress::SetNBPEntity(const char* name, OTByteCount len)
{
    return OTSetAddressFromNBPString(fNBPNameBuffer, name, (SInt32)len) + kDDPAddressLength;
}

inline Boolean DDPNBPAddress::ExtractEntity(NBPEntity& entity, OTByteCount len)
{
    return OTSetNBPEntityFromAddress(&entity, fNBPNameBuffer, len);
}






struct AppleTalkInfo {
  DDPAddress fOurAddress;
  DDPAddress fRouterAddress;
  UInt16 fCableRange[2];
  UInt16 fFlags;
};
typedef struct AppleTalkInfo AppleTalkInfo;

enum {
  kATalkInfoIsExtended = 0x0001,
  kATalkInfoHasRouter = 0x0002,
  kATalkInfoOneZone = 0x0004
};







enum {
  kOTFramingEthernet = 0x01,
  kOTFramingEthernetIPX = 0x02,
  kOTFraming8023 = 0x04,
  kOTFraming8022 = 0x08
};
# 1551 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kOTRawRcvOn = 0,
  kOTRawRcvOff = 1,
  kOTRawRcvOnWithTimeStamp = 2
};

enum {
  DL_PROMISC_OFF = 0
};





enum {
  kT8022ModuleID = 7100,
  kEnetModuleID = 7101,
  kTokenRingModuleID = 7102,
  kFDDIModuleID = 7103
};
# 1590 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  AF_8022 = 8200
};



enum {
  LNK_ENET = 'ENET',
  LNK_TOKN = 'TOKN',
  LNK_FDDI = 'FDDI',
  LNK_TPI = 'LTPI'
};



enum {
  OPT_ADDMCAST = 0x1000,
  OPT_DELMCAST = 0x1001,
  OPT_RCVPACKETTYPE = 0x1002,
  OPT_RCVDESTADDR = 0x1003,
  OPT_SETRAWMODE = 0x1004,
  OPT_SETPROMISCUOUS = 0x1005
};

typedef UInt32 OTPacketType;
enum {
  kETypeStandard = 0,
  kETypeMulticast = 1,
  kETypeBroadcast = 2,
  kETRawPacketBit = (UInt32)0x80000000,
  kETTimeStampBit = 0x40000000
};



enum {
  kMulticastLength = 6,
  k48BitAddrLength = 6,
  k8022DLSAPLength = 2,
  k8022SNAPLength = 5,
  kEnetAddressLength = k48BitAddrLength + k8022DLSAPLength,

  kSNAPSAP = 0x00AA,
  kIPXSAP = 0x00FF,
  kMax8022SAP = 0x00FE,
  k8022GlobalSAP = 0x00FF,
  kMinDIXSAP = 1501,
  kMaxDIXSAP = 0xFFFF
};



struct T8022Address {
  OTAddressType fAddrFamily;
  UInt8 fHWAddr[6];
  UInt16 fSAP;
  UInt8 fSNAP[5];
};
typedef struct T8022Address T8022Address;
enum {
  k8022BasicAddressLength = sizeof(OTAddressType) + k48BitAddrLength + sizeof(UInt16),
  k8022SNAPAddressLength = sizeof(OTAddressType) + k48BitAddrLength + sizeof(UInt16) + k8022SNAPLength
};
# 1691 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kEnetPacketHeaderLength = (2 * k48BitAddrLength) + k8022DLSAPLength,
  kEnetTSDU = 1514,
  kTokenRingTSDU = 4458,
  kFDDITSDU = 4458,
  k8022SAPLength = 1,
  k8022BasicHeaderLength = 3,

  k8022SNAPHeaderLength = k8022SNAPLength + k8022BasicHeaderLength
};




typedef UInt32 EAddrType;
enum {
  keaStandardAddress = 0,
  keaMulticast = 1,
  keaBroadcast = 2,
  keaBadAddress = 3,
  keaRawPacketBit = (UInt32)0x80000000,
  keaTimeStampBit = 0x40000000
};



struct EnetPacketHeader {
  UInt8 fDestAddr[6];
  UInt8 fSourceAddr[6];
  UInt16 fProto;
};
typedef struct EnetPacketHeader EnetPacketHeader;
struct T8022Header {
  UInt8 fDSAP;
  UInt8 fSSAP;
  UInt8 fCtrl;
};
typedef struct T8022Header T8022Header;
struct T8022SNAPHeader {
  UInt8 fDSAP;
  UInt8 fSSAP;
  UInt8 fCtrl;
  UInt8 fSNAP[5];
};
typedef struct T8022SNAPHeader T8022SNAPHeader;
struct T8022FullPacketHeader {
  EnetPacketHeader fEnetPart;
  T8022SNAPHeader f8022Part;
};
typedef struct T8022FullPacketHeader T8022FullPacketHeader;

enum {
  kT8022HeaderLength = 3,
  kT8022SNAPHeaderLength = 3 + k8022SNAPLength,
  kT8022FullPacketHeaderLength = kEnetPacketHeaderLength + kT8022SNAPHeaderLength
};







enum {
  COM_SERIAL = 'SERL'
};
# 1771 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kSerialABModuleID = 7200
};

enum {
  kOTSerialFramingAsync = 0x01,
  kOTSerialFramingHDLC = 0x02,
  kOTSerialFramingSDLC = 0x04,
  kOTSerialFramingAsyncPackets = 0x08,
  kOTSerialFramingPPP = 0x10
};



enum {
  I_SetSerialDTR = ((MIOC_SRL << 8) | 0),
  kOTSerialSetDTROff = 0,
  kOTSerialSetDTROn = 1,
  I_SetSerialBreak = ((MIOC_SRL << 8) | 1),


  kOTSerialSetBreakOn = (UInt32)0xFFFFFFFF,
  kOTSerialSetBreakOff = 0,
  I_SetSerialXOffState = ((MIOC_SRL << 8) | 2),
  kOTSerialForceXOffTrue = 1,
  kOTSerialForceXOffFalse = 0,
  I_SetSerialXOn = ((MIOC_SRL << 8) | 3),
  kOTSerialSendXOnAlways = 1,
  kOTSerialSendXOnIfXOffTrue = 0,
  I_SetSerialXOff = ((MIOC_SRL << 8) | 4),
  kOTSerialSendXOffAlways = 1,
  kOTSerialSendXOffIfXOnTrue = 0
};
# 1815 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  SERIAL_OPT_BAUDRATE = 0x0100,
  SERIAL_OPT_DATABITS = 0x0101,
  SERIAL_OPT_STOPBITS = 0x0102,
  SERIAL_OPT_PARITY = 0x0103,
  SERIAL_OPT_STATUS = 0x0104,


  SERIAL_OPT_HANDSHAKE = 0x0105,





  SERIAL_OPT_RCVTIMEOUT = 0x0106,






  SERIAL_OPT_ERRORCHARACTER = 0x0107,
# 1845 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
  SERIAL_OPT_EXTCLOCK = 0x0108,



  SERIAL_OPT_BURSTMODE = 0x0109,


  SERIAL_OPT_DUMMY = 0x010A
};

typedef UInt32 ParityOptionValues;
enum {
  kOTSerialNoParity = 0,
  kOTSerialOddParity = 1,
  kOTSerialEvenParity = 2
};

enum {
  kOTSerialSwOverRunErr = 0x01,
  kOTSerialBreakOn = 0x08,
  kOTSerialParityErr = 0x10,
  kOTSerialOverrunErr = 0x20,
  kOTSerialFramingErr = 0x40,
  kOTSerialXOffSent = 0x00010000,
  kOTSerialDTRNegated = 0x00020000,
  kOTSerialCTLHold = 0x00040000,
  kOTSerialXOffHold = 0x00080000,
  kOTSerialOutputBreakOn = 0x01000000
};

enum {
  kOTSerialXOnOffInputHandshake = 1,
  kOTSerialXOnOffOutputHandshake = 2,
  kOTSerialCTSInputHandshake = 4,
  kOTSerialDTROutputHandshake = 8
};




   inline UInt32 OTSerialHandshakeData(UInt16 type, UInt8 onChar, UInt8 offChar)
  {
      return (((UInt32)type) << 16) | (((UInt32)onChar) << 8) | offChar;
 }
# 1900 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
inline UInt32 OTSerialSetErrorCharacter(UInt8 rep)
{
  return (UInt32)rep & 0x000000ff;
}

inline UInt32 OTSerialSetErrorCharacterWithAlternate(UInt8 rep, UInt8 alternate)
{
 return (((rep & 0xff) | ((alternate & 0xff) << 8)) | 0x80000000L);
}
# 1922 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kOTSerialDefaultBaudRate = 19200,
  kOTSerialDefaultDataBits = 8,
  kOTSerialDefaultStopBits = 10,
  kOTSerialDefaultParity = kOTSerialNoParity,
  kOTSerialDefaultHandshake = 0,
  kOTSerialDefaultOnChar = ('Q' & 0xFFFFFFBF),
  kOTSerialDefaultOffChar = ('S' & 0xFFFFFFBF),
  kOTSerialDefaultSndBufSize = 1024,
  kOTSerialDefaultRcvBufSize = 1024,
  kOTSerialDefaultSndLoWat = 96,
  kOTSerialDefaultRcvLoWat = 1,
  kOTSerialDefaultRcvTimeout = 10
};







enum {
  COM_ISDN = 'ISDN'
};




enum {
  kISDNModuleID = 7300
};




enum {
  kOTISDNFramingTransparentSupported = 0x0010,
  kOTISDNFramingHDLCSupported = 0x0020,
  kOTISDNFramingV110Supported = 0x0040,
  kOTISDNFramingV14ESupported = 0x0080
};





enum {
  kOTISDNUnallocatedNumber = 1,
  kOTISDNNoRouteToSpecifiedTransitNetwork = 2,
  kOTISDNNoRouteToDestination = 3,
  kOTISDNChannelUnacceptable = 6,
  kOTISDNNormal = 16,
  kOTISDNUserBusy = 17,
  kOTISDNNoUserResponding = 18,
  kOTISDNNoAnswerFromUser = 19,
  kOTISDNCallRejected = 21,
  kOTISDNNumberChanged = 22,
  kOTISDNNonSelectedUserClearing = 26,
  kOTISDNDestinationOutOfOrder = 27,
  kOTISDNInvalidNumberFormat = 28,
  kOTISDNFacilityRejected = 29,
  kOTISDNNormalUnspecified = 31,
  kOTISDNNoCircuitChannelAvailable = 34,
  kOTISDNNetworkOutOfOrder = 41,
  kOTISDNSwitchingEquipmentCongestion = 42,
  kOTISDNAccessInformationDiscarded = 43,
  kOTISDNRequestedCircuitChannelNotAvailable = 44,
  kOTISDNResourceUnavailableUnspecified = 45,
  kOTISDNQualityOfServiceUnvailable = 49,
  kOTISDNRequestedFacilityNotSubscribed = 50,
  kOTISDNBearerCapabilityNotAuthorized = 57,
  kOTISDNBearerCapabilityNotPresentlyAvailable = 58,
  kOTISDNCallRestricted = 59,
  kOTISDNServiceOrOptionNotAvilableUnspecified = 63,
  kOTISDNBearerCapabilityNotImplemented = 65,
  kOTISDNRequestedFacilityNotImplemented = 69,
  kOTISDNOnlyRestrictedDigitalBearer = 70,
  kOTISDNServiceOrOptionNotImplementedUnspecified = 79,
  kOTISDNCallIdentityNotUsed = 83,
  kOTISDNCallIdentityInUse = 84,
  kOTISDNNoCallSuspended = 85,
  kOTISDNCallIdentityCleared = 86,
  kOTISDNIncompatibleDestination = 88,
  kOTISDNInvalidTransitNetworkSelection = 91,
  kOTISDNInvalidMessageUnspecified = 95,
  kOTISDNMandatoryInformationElementIsMissing = 96,
  kOTISDNMessageTypeNonExistentOrNotImplemented = 97,
  kOTISDNInterworkingUnspecified = 127
};
# 2026 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  kAF_ISDN = 0x2000
};


enum {
  kOTISDNMaxPhoneSize = 32,
  kOTISDNMaxSubSize = 4
};

struct OTISDNAddress {
  OTAddressType fAddressType;
  UInt16 fPhoneLength;
  char fPhoneNumber[37];
};
typedef struct OTISDNAddress OTISDNAddress;



enum {
  MIOC_ISDN = 'U'
};

enum {
  I_OTISDNAlerting = ((MIOC_ISDN << 8) | 100),
  I_OTISDNSuspend = ((MIOC_ISDN << 8) | 101),

  I_OTISDNSuspendAcknowledge = ((MIOC_ISDN << 8) | 102),
  I_OTISDNSuspendReject = ((MIOC_ISDN << 8) | 103),
  I_OTISDNResume = ((MIOC_ISDN << 8) | 104),

  I_OTISDNResumeAcknowledge = ((MIOC_ISDN << 8) | 105),
  I_OTISDNResumeReject = ((MIOC_ISDN << 8) | 106),
  I_OTISDNFaciltity = ((MIOC_ISDN << 8) | 107)
};



enum {
  kOTISDNMaxUserDataSize = 32
};



enum {
  ISDN_OPT_COMMTYPE = 0x0200,
  ISDN_OPT_FRAMINGTYPE = 0x0201,
  ISDN_OPT_56KADAPTATION = 0x0202
};



enum {
  kOTISDNTelephoneALaw = 1,
  kOTISDNTelephoneMuLaw = 26,
  kOTISDNDigital64k = 13,
  kOTISDNDigital56k = 37,
  kOTISDNVideo64k = 41,
  kOTISDNVideo56k = 42
};



enum {
  kOTISDNFramingTransparent = 0x0010,
  kOTISDNFramingHDLC = 0x0020,
  kOTISDNFramingV110 = 0x0040,
  kOTISDNFramingV14E = 0x0080
};



enum {
  kOTISDNNot56KAdaptation = false,
  kOTISDN56KAdaptation = true
};



enum {
  kOTISDNDefaultCommType = kOTISDNDigital64k,
  kOTISDNDefaultFramingType = kOTISDNFramingHDLC,
  kOTISDNDefault56KAdaptation = kOTISDNNot56KAdaptation
};
# 2122 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
enum {
  COM_PPP = 'PPPC'
};



enum {
  kPPPMaxIDLength = 255,
  kPPPMaxPasswordLength = 255,
  kPPPMaxDTEAddressLength = 127,
  kPPPMaxCallInfoLength = 255
};




enum {
  kPPPStateInitial = 1,
  kPPPStateClosed = 2,
  kPPPStateClosing = 3,
  kPPPStateOpening = 4,
  kPPPStateOpened = 5
};

enum {
  kPPPConnectionStatusIdle = 1,
  kPPPConnectionStatusConnecting = 2,
  kPPPConnectionStatusConnected = 3,
  kPPPConnectionStatusDisconnecting = 4
};

enum {
  kPPPMinMRU = 0,
  kPPPMaxMRU = 4500
};

enum {
  kIPCPTCPHdrCompressionDisabled = 0,
  kIPCPTCPHdrCompressionEnabled = 1
};

enum {
  kPPPCompressionDisabled = 0x00000000,
  kPPPProtoCompression = 0x00000001,
  kPPPAddrCompression = 0x00000002
};

enum {
  kPPPNoOutAuthentication = 0,
  kPPPCHAPOrPAPOutAuthentication = 1
};

enum {
  kCCReminderTimerDisabled = 0,
  kCCIPIdleTimerDisabled = 0
};

enum {
  kPPPScriptTypeModem = 1,
  kPPPScriptTypeConnect = 2,
  kPPPMaxScriptSize = 32000
};

enum {
  kE164Address = 1,
  kPhoneAddress = 1,
  kCompoundPhoneAddress = 2,
  kX121Address = 3
};

enum {
  kPPPConnectionStatusDialogsFlag = 0x00000001,
  kPPPConnectionRemindersFlag = 0x00000002,
  kPPPConnectionFlashingIconFlag = 0x00000004,
  kPPPOutPasswordDialogsFlag = 0x00000008,
  kPPPAllAlertsDisabledFlag = 0x00000000,
  kPPPAllAlertsEnabledFlag = 0x0000000F
};

enum {
  kPPPAsyncMapCharsNone = 0x00000000,
  kPPPAsyncMapCharsXOnXOff = 0x000A0000,
  kPPPAsyncMapCharsAll = (UInt32)0xFFFFFFFF
};




enum {
  IPCP_OPT_GETREMOTEPROTOADDR = 0x00007000,
  IPCP_OPT_GETLOCALPROTOADDR = 0x00007001,
  IPCP_OPT_TCPHDRCOMPRESSION = 0x00007002,
  LCP_OPT_PPPCOMPRESSION = 0x00007003,
  LCP_OPT_MRU = 0x00007004,
  LCP_OPT_RCACCMAP = 0x00007005,
  LCP_OPT_TXACCMAP = 0x00007006,
  SEC_OPT_OUTAUTHENTICATION = 0x00007007,
  SEC_OPT_ID = 0x00007008,
  SEC_OPT_PASSWORD = 0x00007009,
  CC_OPT_REMINDERTIMER = 0x00007010,
  CC_OPT_IPIDLETIMER = 0x00007011,
  CC_OPT_DTEADDRESSTYPE = 0x00007012,
  CC_OPT_DTEADDRESS = 0x00007013,
  CC_OPT_CALLINFO = 0x00007014,
  CC_OPT_GETMISCINFO = 0x00007015,
  PPP_OPT_GETCURRENTSTATE = 0x00007016,
  LCP_OPT_ECHO = 0x00007017,
  CC_OPT_SERIALPORTNAME = 0x00007200
};



enum {
  kPPPEvent = kPROTOCOLEVENT | 0x000F0000,
  kPPPConnectCompleteEvent = kPPPEvent + 1,
  kPPPSetScriptCompleteEvent = kPPPEvent + 2,
  kPPPDisconnectCompleteEvent = kPPPEvent + 3,
  kPPPDisconnectEvent = kPPPEvent + 4,
  kPPPIPCPUpEvent = kPPPEvent + 5,
  kPPPIPCPDownEvent = kPPPEvent + 6,
  kPPPLCPUpEvent = kPPPEvent + 7,
  kPPPLCPDownEvent = kPPPEvent + 8,
  kPPPLowerLayerUpEvent = kPPPEvent + 9,
  kPPPLowerLayerDownEvent = kPPPEvent + 10,
  kPPPAuthenticationStartedEvent = kPPPEvent + 11,
  kPPPAuthenticationFinishedEvent = kPPPEvent + 12,
  kPPPDCEInitStartedEvent = kPPPEvent + 13,
  kPPPDCEInitFinishedEvent = kPPPEvent + 14,
  kPPPDCECallStartedEvent = kPPPEvent + 15,
  kPPPDCECallFinishedEvent = kPPPEvent + 16
};
# 2340 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProviders.h" 3
struct PPPMRULimits {
  UInt32 mruSize;
  UInt32 upperMRULimit;
  UInt32 lowerMRULimit;
};
typedef struct PPPMRULimits PPPMRULimits;




struct CCMiscInfo {
  UInt32 connectionStatus;
  UInt32 connectionTimeElapsed;
  UInt32 connectionTimeRemaining;
  UInt32 bytesTransmitted;
  UInt32 bytesReceived;
  UInt32 reserved;
};
typedef struct CCMiscInfo CCMiscInfo;






struct LCPEcho {
  UInt32 retryCount;
  UInt32 retryPeriod;
};
typedef struct LCPEcho LCPEcho;




enum {
  kRAProductClientOnly = 2,
  kRAProductOnePortServer = 3,
  kRAProductManyPortServer = 4
};







#pragma pack(pop)


}
# 60 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 1 3
# 51 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern "C" {


#pragma pack(push, 2)
# 600 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
enum {
  I_NREAD = ((MIOC_STREAMIO << 8) | 1),
  I_PUSH = ((MIOC_STREAMIO << 8) | 2),
  I_POP = ((MIOC_STREAMIO << 8) | 3),
  I_LOOK = ((MIOC_STREAMIO << 8) | 4),
  I_FLUSH = ((MIOC_STREAMIO << 8) | 5),
  I_SRDOPT = ((MIOC_STREAMIO << 8) | 6),
  I_GRDOPT = ((MIOC_STREAMIO << 8) | 7),
  I_STR = ((MIOC_STREAMIO << 8) | 8),
  I_SETSIG = ((MIOC_STREAMIO << 8) | 9),
  I_GETSIG = ((MIOC_STREAMIO << 8) | 10),
  I_FIND = ((MIOC_STREAMIO << 8) | 11),
  I_LINK = ((MIOC_STREAMIO << 8) | 12),
  I_UNLINK = ((MIOC_STREAMIO << 8) | 13),
  I_PEEK = ((MIOC_STREAMIO << 8) | 15),
  I_FDINSERT = ((MIOC_STREAMIO << 8) | 16),
  I_SENDFD = ((MIOC_STREAMIO << 8) | 17),
  I_RECVFD = ((MIOC_STREAMIO << 8) | 18),
  I_FLUSHBAND = ((MIOC_STREAMIO << 8) | 19),
  I_SWROPT = ((MIOC_STREAMIO << 8) | 20),
  I_GWROPT = ((MIOC_STREAMIO << 8) | 21),
  I_LIST = ((MIOC_STREAMIO << 8) | 22),
  I_ATMARK = ((MIOC_STREAMIO << 8) | 23),
  I_CKBAND = ((MIOC_STREAMIO << 8) | 24),
  I_GETBAND = ((MIOC_STREAMIO << 8) | 25),
  I_CANPUT = ((MIOC_STREAMIO << 8) | 26),
  I_SETCLTIME = ((MIOC_STREAMIO << 8) | 27),
  I_GETCLTIME = ((MIOC_STREAMIO << 8) | 28),
  I_PLINK = ((MIOC_STREAMIO << 8) | 29),
  I_PUNLINK = ((MIOC_STREAMIO << 8) | 30),
  I_GETMSG = ((MIOC_STREAMIO << 8) | 40),
  I_PUTMSG = ((MIOC_STREAMIO << 8) | 41),
  I_POLL = ((MIOC_STREAMIO << 8) | 42),
  I_SETDELAY = ((MIOC_STREAMIO << 8) | 43),
  I_GETDELAY = ((MIOC_STREAMIO << 8) | 44),
  I_RUN_QUEUES = ((MIOC_STREAMIO << 8) | 45),
  I_GETPMSG = ((MIOC_STREAMIO << 8) | 46),
  I_PUTPMSG = ((MIOC_STREAMIO << 8) | 47),
  I_AUTOPUSH = ((MIOC_STREAMIO << 8) | 48),
  I_PIPE = ((MIOC_STREAMIO << 8) | 49),
  I_HEAP_REPORT = ((MIOC_STREAMIO << 8) | 50),
  I_FIFO = ((MIOC_STREAMIO << 8) | 51)
};
# 652 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
enum {
  RS_HIPRI = 0x01
};


enum {
  MSG_HIPRI = 0x01,
  MSG_BAND = 0x02,
  MSG_ANY = 0x04
};


enum {
  MORECTL = 0x01,
  MOREDATA = 0x02
};


enum {
  FMNAMESZ = 31
};



enum {
  INFTIM = (UInt32)0xFFFFFFFF
};


enum {
  FLUSHR = 0x01,
  FLUSHW = 0x02,
  FLUSHRW = (FLUSHW | FLUSHR)
};

enum {
  FLUSHBAND = 0x40
};
# 698 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
struct bandinfo {
  unsigned char bi_pri;
  char pad1;
  SInt32 bi_flag;
};
typedef struct bandinfo bandinfo;

enum {
  ANYMARK = 0x01,
  LASTMARK = 0x02
};


enum {
  S_INPUT = 0x01,
  S_HIPRI = 0x02,
  S_OUTPUT = 0x04,
  S_MSG = 0x08,
  S_RDNORM = 0x10,
  S_RDBAND = 0x20,
  S_WRNORM = 0x40,
  S_WRBAND = 0x80,
  S_ERROR = 0x0100,
  S_HANGUP = 0x0200,
  S_BANDURG = 0x0400
};


enum {
  RNORM = 0x01,
  RMSGD = 0x02,
  RMSGN = 0x04,
  RFILL = 0x08
};


enum {
  RPROTNORM = 0x10,
  RPROTDIS = 0x20,
  RPROTDAT = 0x40
};


enum {
  SNDZERO = 0x01
};

enum {
  MUXID_ALL = -1
};







struct strfdinsert {
  strbuf ctlbuf;
  strbuf databuf;
  long flags;
  long fildes;
  SInt32 offset;
};
typedef struct strfdinsert strfdinsert;

struct str_mlist {
  char l_name[32];
};
typedef struct str_mlist str_mlist;
struct str_list {
  SInt32 sl_nmods;
  str_mlist * sl_modlist;
};
typedef struct str_list str_list;

struct strpeek {
  strbuf ctlbuf;
  strbuf databuf;
  long flags;
};
typedef struct strpeek strpeek;

struct strpmsg {
  strbuf ctlbuf;
  strbuf databuf;
  SInt32 band;
  long flags;
};
typedef struct strpmsg strpmsg;

struct strrecvfd {
  long fd;
  unsigned short uid;
  unsigned short gid;
  char fill[8];
};
typedef struct strrecvfd strrecvfd;

struct strioctl {
  SInt32 ic_cmd;
  SInt32 ic_timout;
  SInt32 ic_len;
  char * ic_dp;
};
typedef struct strioctl strioctl;


struct log_ctl {
  short mid;
  short sid;
  char level;
  char pad1;
  short flags;
  long ltime;
  long ttime;
  SInt32 seq_no;
};
typedef struct log_ctl log_ctl;
enum {
  SL_FATAL = 0x01,
  SL_NOTIFY = 0x02,
  SL_ERROR = 0x04,
  SL_TRACE = 0x08,
  SL_CONSOLE = 0x00,
  SL_WARN = 0x20,
  SL_NOTE = 0x40
};

struct trace_ids {
  short ti_mid;
  short ti_sid;
  char ti_level;
};
typedef struct trace_ids trace_ids;
enum {
  I_TRCLOG = ((MIOC_STRLOG << 8) | 1),
  I_ERRLOG = ((MIOC_STRLOG << 8) | 2)
};

enum {
  LOGMSGSZ = 128
};
# 3117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
struct OTPortCloseStruct {
  OTPortRef fPortRef;
  ProviderRef fTheProvider;
  OSStatus fDenyReason;
};
typedef struct OTPortCloseStruct OTPortCloseStruct;

struct OTClientList {
  ItemCount fNumClients;
  UInt8 fBuffer[4];
};
typedef struct OTClientList OTClientList;
# 3175 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
typedef long OTTimerTask;
# 3190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern long
OTCreateTimerTaskInContext(
  OTProcessUPP upp,
  void * arg,
  OTClientContextPtr clientContext) ;
# 3218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern Boolean
OTCancelTimerTask(OTTimerTask timerTask) ;
# 3230 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern void
OTDestroyTimerTask(OTTimerTask timerTask) ;
# 3242 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern Boolean
OTScheduleTimerTask(
  OTTimerTask timerTask,
  OTTimeout milliSeconds) ;
# 3275 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern OTByteCount
OTBufferDataSize(OTBuffer * buffer) ;
# 3287 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern Boolean
OTReadBuffer(
  OTBufferInfo * buffer,
  void * dest,
  OTByteCount * len) ;
# 3302 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern void
OTReleaseBuffer(OTBuffer * buffer) ;
# 4291 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern OTResult
OTSetFirstClearBit(
  UInt8 * bitMap,
  OTByteCount startBit,
  OTByteCount numBits) ;
# 4307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern Boolean
OTClearBit(
  UInt8 * bitMap,
  OTByteCount bitNo) ;
# 4321 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern Boolean
OTSetBit(
  UInt8 * bitMap,
  OTByteCount bitNo) ;
# 4335 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
extern Boolean
OTTestBit(
  UInt8 * bitMap,
  OTByteCount bitNo) ;
# 4350 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
typedef UInt32 ( * OTHashProcPtr)(OTLink * linkToHash);
typedef Boolean ( * OTHashSearchProcPtr)(const void *ref, OTLink *linkToCheck);
struct OTHashList {
  OTHashProcPtr fHashProc;
  ByteCount fHashTableSize;
  OTLink ** fHashBuckets;






    void Add(OTLink* toAdd);

    Boolean RemoveLink(OTLink* toRemove);

    OTLink* Remove(OTHashSearchProcPtr proc, const void* refPtr, UInt32 hashValue);

    Boolean IsInList(OTLink* toFind);

    OTLink* FindLink(OTHashSearchProcPtr proc, const void* refPtr, UInt32 hash);



};
typedef struct OTHashList OTHashList;
# 4491 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
typedef Boolean ( * OTGateProcPtr)(OTLink * thisLink);
struct OTGate {
  OTLIFO fLIFO;
  OTList fList;
  OTGateProcPtr fProc;
  SInt32 fNumQueued;
  SInt32 fInside;
};
typedef struct OTGate OTGate;
# 4832 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OpenTransportProtocol.h" 3
#pragma pack(pop)


}
# 61 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3

# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 1 3
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern "C" {


#pragma pack(push, 2)


enum {
  kNSLMinSystemVersion = 0x0900,
  kNSLMinOTVersion = 0x0130
};

enum {
  kNSLDefaultListSize = 256
};

enum {
  kNSLURLDelimiter = ','
};




enum {
  kNSLNoContext = 0
};

struct NSLError {
  OSStatus theErr;
  UInt32 theContext;
};
typedef struct NSLError NSLError;
typedef NSLError * NSLErrorPtr;
enum {




  kNSLDuplicateSearchInProgress = 100,
  kNSLUserCanceled = userCanceledErr,

  kNSLInvalidEnumeratorRef = 0
};

typedef UInt16 NSLSearchState;
enum {

  kNSLSearchStateBufferFull = 1,
  kNSLSearchStateOnGoing = 2,
  kNSLSearchStateComplete = 3,
  kNSLSearchStateStalled = 4,
  kNSLWaitingForContinue = 5
};

typedef UInt32 NSLEventCode;
enum {

  kNSLServicesLookupDataEvent = 6,
  kNSLNeighborhoodLookupDataEvent = 7,
  kNSLNewDataEvent = 8,
  kNSLContinueLookupEvent = 9
};


typedef UInt32 NSLClientRef;
typedef UInt32 NSLRequestRef;
typedef UInt32 NSLOneBasedIndex;
typedef char * NSLPath;
typedef char * NSLServiceType;
typedef Handle NSLServicesList;
typedef unsigned char * NSLNeighborhood;






struct NSLClientAsyncInfo {
  void * clientContextPtr;
  void * mgrContextPtr;
  char * resultBuffer;
  long bufferLen;
  long maxBufferSize;
  UInt32 startTime;
  UInt32 intStartTime;
  UInt32 maxSearchTime;
  UInt32 alertInterval;
  UInt32 totalItems;
  UInt32 alertThreshold;
  NSLSearchState searchState;
  NSLError searchResult;
  NSLEventCode searchDataType;

};
typedef struct NSLClientAsyncInfo NSLClientAsyncInfo;
typedef NSLClientAsyncInfo * NSLClientAsyncInfoPtr;


struct NSLPluginAsyncInfo {
  void * mgrContextPtr;
  void * pluginContextPtr;
  void * pluginPtr;
  char * resultBuffer;
  long bufferLen;
  long maxBufferSize;
  UInt32 maxSearchTime;
  UInt32 reserved1;
  UInt32 reserved2;
  UInt32 reserved3;
  NSLClientRef clientRef;
  NSLRequestRef requestRef;
  NSLSearchState searchState;
  OSStatus searchResult;
};
typedef struct NSLPluginAsyncInfo NSLPluginAsyncInfo;
typedef NSLPluginAsyncInfo * NSLPluginAsyncInfoPtr;


typedef void ( * NSLMgrNotifyProcPtr)(NSLPluginAsyncInfo * thePluginAsyncInfo);


typedef void ( * NSLClientNotifyProcPtr)(NSLClientAsyncInfo * theClientAsyncInfo);
typedef NSLMgrNotifyProcPtr NSLMgrNotifyUPP;
typedef NSLClientNotifyProcPtr NSLClientNotifyUPP;
# 162 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLMgrNotifyUPP
NewNSLMgrNotifyUPP(NSLMgrNotifyProcPtr userRoutine) ;
# 173 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLClientNotifyUPP
NewNSLClientNotifyUPP(NSLClientNotifyProcPtr userRoutine) ;
# 184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
DisposeNSLMgrNotifyUPP(NSLMgrNotifyUPP userUPP) ;
# 195 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
DisposeNSLClientNotifyUPP(NSLClientNotifyUPP userUPP) ;
# 206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
InvokeNSLMgrNotifyUPP(
  NSLPluginAsyncInfo * thePluginAsyncInfo,
  NSLMgrNotifyUPP userUPP) ;
# 219 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
InvokeNSLClientNotifyUPP(
  NSLClientAsyncInfo * theClientAsyncInfo,
  NSLClientNotifyUPP userUPP) ;



    inline NSLMgrNotifyUPP NewNSLMgrNotifyUPP(NSLMgrNotifyProcPtr userRoutine) { return userRoutine; }
    inline NSLClientNotifyUPP NewNSLClientNotifyUPP(NSLClientNotifyProcPtr userRoutine) { return userRoutine; }
    inline void DisposeNSLMgrNotifyUPP(NSLMgrNotifyUPP) { }
    inline void DisposeNSLClientNotifyUPP(NSLClientNotifyUPP) { }
    inline void InvokeNSLMgrNotifyUPP(NSLPluginAsyncInfo * thePluginAsyncInfo, NSLMgrNotifyUPP userUPP) { (*userUPP)(thePluginAsyncInfo); }
    inline void InvokeNSLClientNotifyUPP(NSLClientAsyncInfo * theClientAsyncInfo, NSLClientNotifyUPP userUPP) { (*userUPP)(theClientAsyncInfo); }
# 247 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
struct NSLTypedData {
  unsigned long dataType;
  unsigned long lengthOfData;


};
typedef struct NSLTypedData NSLTypedData;
typedef NSLTypedData * NSLTypedDataPtr;







struct NSLServicesListHeader {
  unsigned long numServices;
  unsigned long logicalLen;


};
typedef struct NSLServicesListHeader NSLServicesListHeader;
typedef NSLServicesListHeader * NSLServicesListHeaderPtr;
# 285 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
struct NSLPluginData {
  long reserved1;
  long reserved2;
  long reserved3;
  Boolean supportsRegistration;
  Boolean isPurgeable;
  UInt16 totalLen;
  UInt16 dataTypeOffset;
  UInt16 serviceListOffset;
  UInt16 protocolListOffset;
  UInt16 commentStringOffset;


};
typedef struct NSLPluginData NSLPluginData;
typedef NSLPluginData * NSLPluginDataPtr;
# 317 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern UInt32
NSLLibraryVersion(void) ;
# 351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLStandardRegisterURL(
  NSLPath urlToRegister,
  NSLNeighborhood neighborhoodToRegisterIn) ;
# 370 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLStandardDeregisterURL(
  NSLPath urlToDeregister,
  NSLNeighborhood neighborhoodToDeregisterIn) ;
# 387 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLHexEncodeText(
  const char * rawText,
  UInt16 rawTextLen,
  char * newTextBuffer,
  UInt16 * newTextBufferLen,
  Boolean * textChanged) ;
# 404 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLHexDecodeText(
  const char * encodedText,
  UInt16 encodedTextLen,
  char * decodedTextBuffer,
  UInt16 * decodedTextBufferLen,
  Boolean * textChanged) ;
# 427 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLServicesList
NSLMakeNewServicesList(const char * initialServiceList) ;
# 439 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLAddServiceToServicesList(
  NSLServicesList serviceList,
  NSLServiceType serviceType) ;
# 453 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
NSLDisposeServicesList(NSLServicesList theList) ;
# 471 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLNeighborhood
NSLMakeNewNeighborhood(
  const char * name,
  const char * protocolList) ;
# 486 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLNeighborhood
NSLCopyNeighborhood(NSLNeighborhood neighborhood) ;
# 498 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLNeighborhood
NSLFreeNeighborhood(NSLNeighborhood neighborhood) ;
# 510 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
NSLGetNameFromNeighborhood(
  NSLNeighborhood neighborhood,
  char ** name,
  long * length) ;
# 529 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLMakeServicesRequestPB(
  NSLServicesList serviceList,
  NSLTypedDataPtr * newDataPtr) ;
# 544 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLTypedDataPtr
NSLFreeTypedDataPtr(NSLTypedDataPtr nslTypeData) ;
# 560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern Boolean
NSLGetNextUrl(
  NSLClientAsyncInfoPtr infoPtr,
  char ** urlPtr,
  long * urlLength) ;
# 579 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern Boolean
NSLGetNextNeighborhood(
  NSLClientAsyncInfoPtr infoPtr,
  NSLNeighborhood * neighborhood,
  long * neighborhoodLength) ;
# 603 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLErrorToString(
  NSLError theErr,
  char * errorString,
  char * solutionString) ;
# 625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLOpenNavigationAPI(NSLClientRef * newRef) ;
# 637 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern void
NSLCloseNavigationAPI(NSLClientRef theClient) ;
# 665 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLPrepareRequest(
  NSLClientNotifyUPP notifier,
  void * contextPtr,
  NSLClientRef theClient,
  NSLRequestRef * ref,
  char * bufPtr,
  unsigned long bufLen,
  NSLClientAsyncInfoPtr * infoPtr) ;
# 691 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLStartNeighborhoodLookup(
  NSLRequestRef ref,
  NSLNeighborhood neighborhood,
  NSLClientAsyncInfo * asyncInfo) ;
# 711 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLStartServicesLookup(
  NSLRequestRef ref,
  NSLNeighborhood neighborhood,
  NSLTypedDataPtr requestData,
  NSLClientAsyncInfo * asyncInfo) ;
# 730 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLContinueLookup(NSLClientAsyncInfo * asyncInfo) ;
# 745 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLCancelRequest(NSLRequestRef ref) ;
# 762 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern NSLError
NSLDeleteRequest(NSLRequestRef ref) ;
# 786 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLParseServicesRequestPB(
  NSLTypedDataPtr newDataPtr,
  char ** serviceListPtr,
  UInt16 * serviceListLen) ;
# 809 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLParseServiceRegistrationPB(
  NSLTypedDataPtr newDataPtr,
  NSLNeighborhood * neighborhoodPtr,
  UInt16 * neighborhoodLen,
  char ** urlPtr,
  UInt16 * urlLen) ;
# 836 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLGetErrorStringsFromResource(
  OSStatus theErr,
  const FSSpec * fileSpecPtr,
  SInt16 errorResID,
  char * errorString,
  char * solutionString) ;
# 856 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern Boolean
NSLServiceIsInServiceList(
  NSLServicesList serviceList,
  NSLServiceType svcToFind) ;
# 873 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSStatus
NSLGetServiceFromURL(
  char * theURL,
  char ** svcString,
  UInt16 * svcLen) ;
# 890 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern long
NSLGetNeighborhoodLength(NSLNeighborhood neighborhood) ;
# 910 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSErr
NSLNewThread(
  ThreadStyle threadStyle,
  ThreadEntryProcPtr threadEntry,
  void * threadParam,
  Size stackSize,
  ThreadOptions options,
  void ** threadResult,
  ThreadID * threadMade) ;
# 931 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
extern OSErr
NSLDisposeThread(
  ThreadID threadToDump,
  void * threadResult,
  Boolean recycleThread) ;
# 954 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/NSLCore.h" 3
#pragma pack(pop)


}
# 63 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SecurityCore.h" 1 3
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SecurityCore.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 1 3
# 48 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern "C" {


#pragma pack(push, 2)
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
typedef SecKeychainRef KCRef;
typedef SecKeychainItemRef KCItemRef;
typedef SecKeychainSearchRef KCSearchRef;
typedef SecKeychainAttribute KCAttribute;
typedef SecKeychainAttributeList KCAttributeList;
typedef SecKeychainAttrType KCAttrType;
typedef SecKeychainStatus KCStatus;
typedef UInt16 KCEvent;
enum {
  kIdleKCEvent = 0,
  kLockKCEvent = 1,
  kUnlockKCEvent = 2,
  kAddKCEvent = 3,
  kDeleteKCEvent = 4,
  kUpdateKCEvent = 5,
  kPasswordChangedKCEvent = 6,
  kSystemKCEvent = 8,
  kDefaultChangedKCEvent = 9,
  kDataAccessKCEvent = 10,
  kKeychainListChangedKCEvent = 11
};

typedef UInt16 KCEventMask;
enum {
  kIdleKCEventMask = 1 << kIdleKCEvent,
  kLockKCEventMask = 1 << kLockKCEvent,
  kUnlockKCEventMask = 1 << kUnlockKCEvent,
  kAddKCEventMask = 1 << kAddKCEvent,
  kDeleteKCEventMask = 1 << kDeleteKCEvent,
  kUpdateKCEventMask = 1 << kUpdateKCEvent,
  kPasswordChangedKCEventMask = 1 << kPasswordChangedKCEvent,
  kSystemEventKCEventMask = 1 << kSystemKCEvent,
  kDefaultChangedKCEventMask = 1 << kDefaultChangedKCEvent,
  kDataAccessKCEventMask = 1 << kDataAccessKCEvent,
  kEveryKCEventMask = 0xFFFF
};

typedef UInt8 AFPServerSignature[16];
typedef UInt8 KCPublicKeyHash[20];
struct KCCallbackInfo {
  UInt32 version;
  KCItemRef item;
  SInt32 processID[2];
  SInt32 event[4];
  KCRef keychain;
};
typedef struct KCCallbackInfo KCCallbackInfo;
enum {
  kUnlockStateKCStatus = 1,
  kRdPermKCStatus = 2,
  kWrPermKCStatus = 4
};


enum {
  kCertificateKCItemClass = 'cert',
  kAppleSharePasswordKCItemClass = 'ashp',
  kInternetPasswordKCItemClass = 'inet',
  kGenericPasswordKCItemClass = 'genp'
};


typedef FourCharCode KCItemClass;
enum {

  kClassKCItemAttr = 'clas',
  kCreationDateKCItemAttr = 'cdat',
  kModDateKCItemAttr = 'mdat',
  kDescriptionKCItemAttr = 'desc',
  kCommentKCItemAttr = 'icmt',
  kCreatorKCItemAttr = 'crtr',
  kTypeKCItemAttr = 'type',
  kScriptCodeKCItemAttr = 'scrp',
  kLabelKCItemAttr = 'labl',
  kInvisibleKCItemAttr = 'invi',
  kNegativeKCItemAttr = 'nega',
  kCustomIconKCItemAttr = 'cusi',
  kAccountKCItemAttr = 'acct',

  kServiceKCItemAttr = 'svce',
  kGenericKCItemAttr = 'gena',

  kSecurityDomainKCItemAttr = 'sdmn',
  kServerKCItemAttr = 'srvr',
  kAuthTypeKCItemAttr = 'atyp',
  kPortKCItemAttr = 'port',
  kPathKCItemAttr = 'path',

  kVolumeKCItemAttr = 'vlme',
  kAddressKCItemAttr = 'addr',
  kSignatureKCItemAttr = 'ssig',

  kProtocolKCItemAttr = 'ptcl',

  kSubjectKCItemAttr = 'subj',
  kCommonNameKCItemAttr = 'cn  ',
  kIssuerKCItemAttr = 'issu',
  kSerialNumberKCItemAttr = 'snbr',
  kEMailKCItemAttr = 'mail',
  kPublicKeyHashKCItemAttr = 'hpky',
  kIssuerURLKCItemAttr = 'iurl',

  kEncryptKCItemAttr = 'encr',
  kDecryptKCItemAttr = 'decr',
  kSignKCItemAttr = 'sign',
  kVerifyKCItemAttr = 'veri',
  kWrapKCItemAttr = 'wrap',
  kUnwrapKCItemAttr = 'unwr',
  kStartDateKCItemAttr = 'sdat',
  kEndDateKCItemAttr = 'edat'
};

typedef FourCharCode KCItemAttr;
enum {
  kKCAuthTypeNTLM = 'ntlm',
  kKCAuthTypeMSN = 'msna',
  kKCAuthTypeDPA = 'dpaa',
  kKCAuthTypeRPA = 'rpaa',
  kKCAuthTypeHTTPDigest = 'httd',
  kKCAuthTypeDefault = 'dflt'
};

typedef FourCharCode KCAuthType;
enum {
  kKCProtocolTypeFTP = 'ftp ',
  kKCProtocolTypeFTPAccount = 'ftpa',
  kKCProtocolTypeHTTP = 'http',
  kKCProtocolTypeIRC = 'irc ',
  kKCProtocolTypeNNTP = 'nntp',
  kKCProtocolTypePOP3 = 'pop3',
  kKCProtocolTypeSMTP = 'smtp',
  kKCProtocolTypeSOCKS = 'sox ',
  kKCProtocolTypeIMAP = 'imap',
  kKCProtocolTypeLDAP = 'ldap',
  kKCProtocolTypeAppleTalk = 'atlk',
  kKCProtocolTypeAFP = 'afp ',
  kKCProtocolTypeTelnet = 'teln'
};

typedef FourCharCode KCProtocolType;
typedef UInt32 KCCertAddOptions;
enum {
  kSecOptionReserved = 0x000000FF,
  kCertUsageShift = 8,
  kCertUsageSigningAdd = 1 << (kCertUsageShift + 0),
  kCertUsageSigningAskAndAdd = 1 << (kCertUsageShift + 1),
  kCertUsageVerifyAdd = 1 << (kCertUsageShift + 2),
  kCertUsageVerifyAskAndAdd = 1 << (kCertUsageShift + 3),
  kCertUsageEncryptAdd = 1 << (kCertUsageShift + 4),
  kCertUsageEncryptAskAndAdd = 1 << (kCertUsageShift + 5),
  kCertUsageDecryptAdd = 1 << (kCertUsageShift + 6),
  kCertUsageDecryptAskAndAdd = 1 << (kCertUsageShift + 7),
  kCertUsageKeyExchAdd = 1 << (kCertUsageShift + 8),
  kCertUsageKeyExchAskAndAdd = 1 << (kCertUsageShift + 9),
  kCertUsageRootAdd = 1 << (kCertUsageShift + 10),
  kCertUsageRootAskAndAdd = 1 << (kCertUsageShift + 11),
  kCertUsageSSLAdd = 1 << (kCertUsageShift + 12),
  kCertUsageSSLAskAndAdd = 1 << (kCertUsageShift + 13),
  kCertUsageAllAdd = 0x7FFFFF00
};

typedef UInt16 KCVerifyStopOn;
enum {
  kPolicyKCStopOn = 0,
  kNoneKCStopOn = 1,
  kFirstPassKCStopOn = 2,
  kFirstFailKCStopOn = 3
};

typedef UInt32 KCCertSearchOptions;
enum {
  kCertSearchShift = 0,
  kCertSearchSigningIgnored = 0,
  kCertSearchSigningAllowed = 1 << (kCertSearchShift + 0),
  kCertSearchSigningDisallowed = 1 << (kCertSearchShift + 1),
  kCertSearchSigningMask = ((kCertSearchSigningAllowed) | (kCertSearchSigningDisallowed)),
  kCertSearchVerifyIgnored = 0,
  kCertSearchVerifyAllowed = 1 << (kCertSearchShift + 2),
  kCertSearchVerifyDisallowed = 1 << (kCertSearchShift + 3),
  kCertSearchVerifyMask = ((kCertSearchVerifyAllowed) | (kCertSearchVerifyDisallowed)),
  kCertSearchEncryptIgnored = 0,
  kCertSearchEncryptAllowed = 1 << (kCertSearchShift + 4),
  kCertSearchEncryptDisallowed = 1 << (kCertSearchShift + 5),
  kCertSearchEncryptMask = ((kCertSearchEncryptAllowed) | (kCertSearchEncryptDisallowed)),
  kCertSearchDecryptIgnored = 0,
  kCertSearchDecryptAllowed = 1 << (kCertSearchShift + 6),
  kCertSearchDecryptDisallowed = 1 << (kCertSearchShift + 7),
  kCertSearchDecryptMask = ((kCertSearchDecryptAllowed) | (kCertSearchDecryptDisallowed)),
  kCertSearchWrapIgnored = 0,
  kCertSearchWrapAllowed = 1 << (kCertSearchShift + 8),
  kCertSearchWrapDisallowed = 1 << (kCertSearchShift + 9),
  kCertSearchWrapMask = ((kCertSearchWrapAllowed) | (kCertSearchWrapDisallowed)),
  kCertSearchUnwrapIgnored = 0,
  kCertSearchUnwrapAllowed = 1 << (kCertSearchShift + 10),
  kCertSearchUnwrapDisallowed = 1 << (kCertSearchShift + 11),
  kCertSearchUnwrapMask = ((kCertSearchUnwrapAllowed) | (kCertSearchUnwrapDisallowed)),
  kCertSearchPrivKeyRequired = 1 << (kCertSearchShift + 12),
  kCertSearchAny = 0
};


enum {
  kAnyPort = 0
};

enum {
  kAnyProtocol = 0,
  kAnyAuthType = 0
};
# 294 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetKeychainManagerVersion(UInt32 * returnVers);
# 307 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
    inline Boolean KeychainManagerAvailable() { return true; }
# 322 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCSetInteractionAllowed(Boolean state) ;
# 334 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern Boolean
KCIsInteractionAllowed(void) ;
# 349 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCMakeKCRefFromFSSpec(
  FSSpec * keychainFSSpec,
  KCRef * keychain) ;
# 365 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCMakeKCRefFromFSRef(
  FSRef * keychainFSRef,
  KCRef * keychain) ;
# 379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCMakeKCRefFromAlias(
  AliasHandle keychainAlias,
  KCRef * keychain) ;
# 393 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCMakeAliasFromKCRef(
  KCRef keychain,
  AliasHandle * keychainAlias) ;
# 407 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCReleaseKeychain(KCRef * keychain) ;
# 420 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetDefaultKeychain(KCRef * keychain) ;
# 432 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCSetDefaultKeychain(KCRef keychain) ;
# 445 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetStatus(
  KCRef keychain,
  UInt32 * keychainStatus) ;
# 459 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetKeychain(
  KCItemRef item,
  KCRef * keychain) ;
# 473 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetKeychainName(
  KCRef keychain,
  StringPtr keychainName) ;
# 488 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern UInt16
KCCountKeychains(void) ;
# 500 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetIndKeychain(
  UInt16 index,
  KCRef * keychain) ;


typedef OSStatus ( * KCCallbackProcPtr)(KCEvent keychainEvent, KCCallbackInfo *info, void *userContext);
typedef KCCallbackProcPtr KCCallbackUPP;
# 516 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern KCCallbackUPP
NewKCCallbackUPP(KCCallbackProcPtr userRoutine) ;
# 527 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern void
DisposeKCCallbackUPP(KCCallbackUPP userUPP) ;
# 538 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
InvokeKCCallbackUPP(
  KCEvent keychainEvent,
  KCCallbackInfo * info,
  void * userContext,
  KCCallbackUPP userUPP) ;



    inline KCCallbackUPP NewKCCallbackUPP(KCCallbackProcPtr userRoutine) { return userRoutine; }
    inline void DisposeKCCallbackUPP(KCCallbackUPP) { }
    inline OSStatus InvokeKCCallbackUPP(KCEvent keychainEvent, KCCallbackInfo * info, void * userContext, KCCallbackUPP userUPP) { return (*userUPP)(keychainEvent, info, userContext); }
# 566 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCFindAppleSharePassword(
  AFPServerSignature * serverSignature,
  ConstStringPtr serverAddress,
  ConstStringPtr serverName,
  ConstStringPtr volumeName,
  ConstStringPtr accountName,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 587 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCFindInternetPassword(
  ConstStringPtr serverName,
  ConstStringPtr securityDomain,
  ConstStringPtr accountName,
  UInt16 port,
  OSType protocol,
  OSType authType,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 609 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCFindInternetPasswordWithPath(
  ConstStringPtr serverName,
  ConstStringPtr securityDomain,
  ConstStringPtr accountName,
  ConstStringPtr path,
  UInt16 port,
  OSType protocol,
  OSType authType,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 632 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCFindGenericPassword(
  ConstStringPtr serviceName,
  ConstStringPtr accountName,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 651 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCAddCallback(
  KCCallbackUPP callbackProc,
  KCEventMask eventMask,
  void * userContext) ;
# 666 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCRemoveCallback(KCCallbackUPP callbackProc) ;
# 679 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCNewItem(
  KCItemClass itemClass,
  OSType itemCreator,
  UInt32 length,
  const void * data,
  KCItemRef * item) ;
# 696 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCSetAttribute(
  KCItemRef item,
  KCAttribute * attr) ;
# 710 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetAttribute(
  KCItemRef item,
  KCAttribute * attr,
  UInt32 * actualLength) ;
# 725 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCSetData(
  KCItemRef item,
  UInt32 length,
  const void * data) ;
# 741 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCUpdateItem(KCItemRef item) ;
# 753 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCReleaseItem(KCItemRef * item) ;
# 765 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCCopyItem(
  KCItemRef item,
  KCRef destKeychain,
  KCItemRef * copy) ;
# 781 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCFindFirstItem(
  KCRef keychain,
  const KCAttributeList * attrList,
  KCSearchRef * search,
  KCItemRef * item) ;
# 797 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCFindNextItem(
  KCSearchRef search,
  KCItemRef * item) ;
# 811 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCReleaseSearch(KCSearchRef * search) ;
# 824 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCDeleteItem(KCItemRef item) ;
# 836 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCGetData(
  KCItemRef item,
  UInt32 maxLength,
  void * data,
  UInt32 * actualLength) ;
# 853 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
KCLock(KCRef keychain) ;
# 866 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
kcgetkeychainname(
  KCRef keychain,
  char * keychainName) ;
# 880 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
kcfindapplesharepassword(
  AFPServerSignature * serverSignature,
  const char * serverAddress,
  const char * serverName,
  const char * volumeName,
  const char * accountName,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 901 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
kcfindinternetpassword(
  const char * serverName,
  const char * securityDomain,
  const char * accountName,
  UInt16 port,
  OSType protocol,
  OSType authType,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 923 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
kcfindinternetpasswordwithpath(
  const char * serverName,
  const char * securityDomain,
  const char * accountName,
  const char * path,
  UInt16 port,
  OSType protocol,
  OSType authType,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;
# 946 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/KeychainCore.h" 3
extern OSStatus
kcfindgenericpassword(
  const char * serviceName,
  const char * accountName,
  UInt32 maxLength,
  void * passwordData,
  UInt32 * actualLength,
  KCItemRef * item) ;



#pragma pack(pop)


}
# 26 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/SecurityCore.h" 2 3
# 64 "/System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h" 2 3
# 26 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 2 3







# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 1 3
# 25 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 26 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 2 3







# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 2 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern "C" {


#pragma pack(push, 2)
# 56 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
typedef struct __CFHost* CFHostRef;
# 69 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern const SInt32 kCFStreamErrorDomainNetDB ;
# 83 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern const SInt32 kCFStreamErrorDomainSystemConfiguration ;
# 93 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
enum CFHostInfoType {





  kCFHostAddresses = 0,




  kCFHostNames = 1,





  kCFHostReachability = 2
};
typedef enum CFHostInfoType CFHostInfoType;
# 122 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
struct CFHostClientContext {






  CFIndex version;





  void * info;
# 144 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
  CFAllocatorRetainCallBack retain;





  CFAllocatorReleaseCallBack release;







  CFAllocatorCopyDescriptionCallBack copyDescription;
};
typedef struct CFHostClientContext CFHostClientContext;
# 184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
typedef void ( * CFHostClientCallBack)(CFHostRef theHost, CFHostInfoType typeInfo, const CFStreamError *error, void *info);
# 201 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFTypeID
CFHostGetTypeID(void) ;
# 235 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFHostRef
CFHostCreateWithName(
  CFAllocatorRef allocator,
  CFStringRef hostname) ;
# 271 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFHostRef
CFHostCreateWithAddress(
  CFAllocatorRef allocator,
  CFDataRef addr) ;
# 308 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFHostRef
CFHostCreateCopy(
  CFAllocatorRef alloc,
  CFHostRef host) ;
# 352 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern Boolean
CFHostStartInfoResolution(
  CFHostRef theHost,
  CFHostInfoType info,
  CFStreamError * error) ;
# 392 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFArrayRef
CFHostGetAddressing(
  CFHostRef theHost,
  Boolean * hasBeenResolved) ;
# 430 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFArrayRef
CFHostGetNames(
  CFHostRef theHost,
  Boolean * hasBeenResolved) ;
# 472 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern CFDataRef
CFHostGetReachability(
  CFHostRef theHost,
  Boolean * hasBeenResolved) ;
# 503 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern void
CFHostCancelInfoResolution(
  CFHostRef theHost,
  CFHostInfoType info) ;
# 547 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern Boolean
CFHostSetClient(
  CFHostRef theHost,
  CFHostClientCallBack clientCB,
  CFHostClientContext * clientContext) ;
# 586 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern void
CFHostScheduleWithRunLoop(
  CFHostRef theHost,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 625 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHost.h" 3
extern void
CFHostUnscheduleFromRunLoop(
  CFHostRef theHost,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;







#pragma pack(pop)


}
# 29 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 2 3
# 41 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern "C" {


#pragma pack(push, 2)
# 58 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
typedef struct __CFNetService* CFNetServiceRef;
# 67 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
typedef struct __CFNetServiceMonitor* CFNetServiceMonitorRef;
# 76 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
typedef struct __CFNetServiceBrowser* CFNetServiceBrowserRef;
# 89 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern const SInt32 kCFStreamErrorDomainMach ;
# 106 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern const SInt32 kCFStreamErrorDomainNetServices ;
# 116 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
enum CFNetServicesError {




  kCFNetServicesErrorUnknown = -72000L,






  kCFNetServicesErrorCollision = -72001L,




  kCFNetServicesErrorNotFound = -72002L,





  kCFNetServicesErrorInProgress = -72003L,




  kCFNetServicesErrorBadArgument = -72004L,




  kCFNetServicesErrorCancel = -72005L,





  kCFNetServicesErrorInvalid = -72006L,





  kCFNetServicesErrorTimeout = -72007L
};
typedef enum CFNetServicesError CFNetServicesError;
# 174 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
enum CFNetServiceMonitorType {




  kCFNetServiceMonitorTXT = 1
};
typedef enum CFNetServiceMonitorType CFNetServiceMonitorType;
# 190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
enum {
  kCFNetServiceFlagNoAutoRename = 1
};
# 201 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
enum {
  kCFNetServiceFlagMoreComing = 1,
  kCFNetServiceFlagIsDomain = 2,
  kCFNetServiceFlagIsDefault = 4,
  kCFNetServiceFlagIsRegistrationDomain = 4,
  kCFNetServiceFlagRemove = 8
};
# 218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
struct CFNetServiceClientContext {






  CFIndex version;





  void * info;
# 241 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
  CFAllocatorRetainCallBack retain;





  CFAllocatorReleaseCallBack release;







  CFAllocatorCopyDescriptionCallBack copyDescription;
};
typedef struct CFNetServiceClientContext CFNetServiceClientContext;
# 280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
typedef void ( * CFNetServiceClientCallBack)(CFNetServiceRef theService, CFStreamError *error, void *info);
# 309 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
typedef void ( * CFNetServiceMonitorClientCallBack)(CFNetServiceMonitorRef theMonitor, CFNetServiceRef theService, CFNetServiceMonitorType typeInfo, CFDataRef rdata, CFStreamError *error, void *info);
# 339 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
typedef void ( * CFNetServiceBrowserClientCallBack)(CFNetServiceBrowserRef browser, CFOptionFlags flags, CFTypeRef domainOrService, CFStreamError *error, void *info);
# 354 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFTypeID
CFNetServiceGetTypeID(void) ;
# 372 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFTypeID
CFNetServiceMonitorGetTypeID(void) ;
# 390 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFTypeID
CFNetServiceBrowserGetTypeID(void) ;
# 444 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFNetServiceRef
CFNetServiceCreate(
  CFAllocatorRef alloc,
  CFStringRef domain,
  CFStringRef serviceType,
  CFStringRef name,
  SInt32 port) ;
# 485 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFNetServiceRef
CFNetServiceCreateCopy(
  CFAllocatorRef alloc,
  CFNetServiceRef service) ;
# 518 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFStringRef
CFNetServiceGetDomain(CFNetServiceRef theService) ;
# 549 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFStringRef
CFNetServiceGetType(CFNetServiceRef theService) ;
# 580 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFStringRef
CFNetServiceGetName(CFNetServiceRef theService) ;
# 627 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceRegisterWithOptions(
  CFNetServiceRef theService,
  CFOptionFlags options,
  CFStreamError * error) ;
# 676 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceResolveWithTimeout(
  CFNetServiceRef theService,
  CFTimeInterval timeout,
  CFStreamError * error) ;
# 703 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceCancel(CFNetServiceRef theService) ;
# 736 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFStringRef
CFNetServiceGetTargetHost(CFNetServiceRef theService) ;
# 766 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern SInt32
CFNetServiceGetPortNumber(CFNetServiceRef theService) ;
# 800 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFArrayRef
CFNetServiceGetAddressing(CFNetServiceRef theService) ;
# 834 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFDataRef
CFNetServiceGetTXTData(CFNetServiceRef theService) ;
# 865 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceSetTXTData(
  CFNetServiceRef theService,
  CFDataRef txtRecord) ;
# 904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFDictionaryRef
CFNetServiceCreateDictionaryWithTXTData(
  CFAllocatorRef alloc,
  CFDataRef txtRecord) ;
# 951 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFDataRef
CFNetServiceCreateTXTDataWithDictionary(
  CFAllocatorRef alloc,
  CFDictionaryRef keyValuePairs) ;
# 1001 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceSetClient(
  CFNetServiceRef theService,
  CFNetServiceClientCallBack clientCB,
  CFNetServiceClientContext * clientContext) ;
# 1036 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceScheduleWithRunLoop(
  CFNetServiceRef theService,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 1072 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceUnscheduleFromRunLoop(
  CFNetServiceRef theService,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 1117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFNetServiceMonitorRef
CFNetServiceMonitorCreate(
  CFAllocatorRef alloc,
  CFNetServiceRef theService,
  CFNetServiceMonitorClientCallBack clientCB,
  CFNetServiceClientContext * clientContext) ;
# 1147 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceMonitorInvalidate(CFNetServiceMonitorRef monitor) ;
# 1190 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceMonitorStart(
  CFNetServiceMonitorRef monitor,
  CFNetServiceMonitorType recordType,
  CFStreamError * error) ;
# 1225 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceMonitorStop(
  CFNetServiceMonitorRef monitor,
  CFStreamError * error) ;
# 1262 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceMonitorScheduleWithRunLoop(
  CFNetServiceMonitorRef monitor,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 1297 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceMonitorUnscheduleFromRunLoop(
  CFNetServiceMonitorRef monitor,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 1338 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFNetServiceBrowserRef
CFNetServiceBrowserCreate(
  CFAllocatorRef alloc,
  CFNetServiceBrowserClientCallBack clientCB,
  CFNetServiceClientContext * clientContext) ;
# 1364 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceBrowserInvalidate(CFNetServiceBrowserRef browser) ;
# 1409 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceBrowserSearchForDomains(
  CFNetServiceBrowserRef browser,
  Boolean registrationDomains,
  CFStreamError * error) ;
# 1459 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceBrowserSearchForServices(
  CFNetServiceBrowserRef browser,
  CFStringRef domain,
  CFStringRef serviceType,
  CFStreamError * error) ;
# 1497 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceBrowserStopSearch(
  CFNetServiceBrowserRef browser,
  CFStreamError * error) ;
# 1534 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceBrowserScheduleWithRunLoop(
  CFNetServiceBrowserRef browser,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 1569 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceBrowserUnscheduleFromRunLoop(
  CFNetServiceBrowserRef browser,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 1620 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceRegister(
  CFNetServiceRef theService,
  CFStreamError * error) ;
# 1672 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern Boolean
CFNetServiceResolve(
  CFNetServiceRef theService,
  CFStreamError * error) ;
# 1715 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern CFStringRef
CFNetServiceGetProtocolSpecificInformation(CFNetServiceRef theService) ;
# 1748 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
extern void
CFNetServiceSetProtocolSpecificInformation(
  CFNetServiceRef theService,
  CFStringRef theInfo) ;
# 1761 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetServices.h" 3
#pragma pack(pop)


}
# 33 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 2 3
# 54 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern "C" {
# 74 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySSLPeerCertificates ;
# 89 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySSLSettings ;
# 104 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLLevel ;
# 120 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLAllowsExpiredCertificates ;
# 136 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLAllowsExpiredRoots ;
# 152 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLAllowsAnyRoot ;
# 168 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLValidatesCertificateChain ;
# 185 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLPeerName ;
# 201 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLCertificates ;
# 218 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSSLIsServer ;
# 233 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const int kCFStreamErrorDomainWinSock ;
# 245 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const int kCFStreamErrorDomainSOCKS;



static __inline__ __attribute__((always_inline))
SInt32 CFSocketStreamSOCKSGetErrorSubdomain(CFStreamError* error) {
    return ((error->error >> 16) & 0x0000FFFF);
}

static __inline__ __attribute__((always_inline))
SInt32 CFSocketStreamSOCKSGetError(CFStreamError* error) {
    return (error->error & 0x0000FFFF);
}

enum {
  kCFStreamErrorSOCKSSubDomainNone = 0,
  kCFStreamErrorSOCKSSubDomainVersionCode = 1,
  kCFStreamErrorSOCKS4SubDomainResponse = 2,
  kCFStreamErrorSOCKS5SubDomainUserPass = 3,
  kCFStreamErrorSOCKS5SubDomainMethod = 4,
  kCFStreamErrorSOCKS5SubDomainResponse = 5
};



enum {
  kCFStreamErrorSOCKS5BadResponseAddr = 1,
  kCFStreamErrorSOCKS5BadState = 2,
  kCFStreamErrorSOCKSUnknownClientVersion = 3
};


enum {
  kCFStreamErrorSOCKS4RequestFailed = 91,
  kCFStreamErrorSOCKS4IdentdFailed = 92,
  kCFStreamErrorSOCKS4IdConflict = 93
};


enum {
  kSOCKS5NoAcceptableMethod = 0xFF
};
# 308 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySOCKSProxy;
# 324 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySOCKSProxyHost;
# 341 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySOCKSProxyPort;
# 358 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySOCKSVersion;
# 372 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSOCKSVersion4;
# 386 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSOCKSVersion5;
# 404 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySOCKSUser;
# 422 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySOCKSPassword;
# 435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const int kCFStreamErrorDomainSSL;
# 453 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySocketSecurityLevel;
# 467 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSecurityLevelNone;
# 481 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSecurityLevelSSLv2;
# 495 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSecurityLevelSSLv3;
# 509 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSecurityLevelTLSv1;
# 524 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamSocketSecurityLevelNegotiatedSSL;
# 545 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertyShouldCloseNativeSocket;
# 560 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySocketRemoteHost ;
# 575 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertySocketRemoteNetService ;
# 616 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern void
CFStreamCreatePairWithSocketToCFHost(
  CFAllocatorRef alloc,
  CFHostRef host,
  SInt32 port,
  CFReadStreamRef * readStream,
  CFWriteStreamRef * writeStream) ;
# 661 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern void
CFStreamCreatePairWithSocketToNetService(
  CFAllocatorRef alloc,
  CFNetServiceRef service,
  CFReadStreamRef * readStream,
  CFWriteStreamRef * writeStream) ;
# 680 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
enum CFStreamSocketSecurityProtocol {




  kCFStreamSocketSecurityNone = 0,




  kCFStreamSocketSecuritySSLv2 = 1,




  kCFStreamSocketSecuritySSLv3 = 2,




  kCFStreamSocketSecuritySSLv23 = 3,




  kCFStreamSocketSecurityTLSv1 = 4
};
typedef enum CFStreamSocketSecurityProtocol CFStreamSocketSecurityProtocol;
# 744 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern Boolean
CFSocketStreamPairSetSecurityProtocol(
  CFReadStreamRef socketReadStream,
  CFWriteStreamRef socketWriteStream,
  CFStreamSocketSecurityProtocol securityProtocol) ;
# 767 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFSocketStream.h" 3
extern const CFStringRef kCFStreamPropertyProxyLocalBypass ;






}
# 30 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 2 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern "C" {
# 50 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const SInt32 kCFStreamErrorDomainFTP ;
# 75 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPUserName ;
# 91 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPPassword ;
# 107 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPUsePassiveMode ;
# 122 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPResourceSize ;
# 140 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPFetchResourceInfo ;
# 155 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPFileTransferOffset ;
# 171 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPAttemptPersistentConnection ;
# 188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPProxy ;
# 206 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPProxyHost ;
# 224 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPProxyPort ;
# 234 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPProxyUser ;
# 243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFStreamPropertyFTPProxyPassword ;
# 265 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceMode ;
# 280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceName ;
# 295 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceOwner ;
# 310 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceGroup ;
# 326 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceLink ;
# 341 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceSize ;
# 356 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceType ;
# 371 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern const CFStringRef kCFFTPResourceModDate ;
# 410 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern CFReadStreamRef
CFReadStreamCreateWithFTPURL(
  CFAllocatorRef alloc,
  CFURLRef ftpURL) ;
# 458 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern CFIndex
CFFTPCreateParsedResourceListing(
  CFAllocatorRef alloc,
  const UInt8 * buffer,
  CFIndex bufferLength,
  CFDictionaryRef * parsed) ;
# 502 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFFTPStream.h" 3
extern CFWriteStreamRef
CFWriteStreamCreateWithFTPURL(
  CFAllocatorRef alloc,
  CFURLRef ftpURL) ;




}
# 34 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3







# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 2 3
# 40 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern "C" {
# 54 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern const CFStringRef kCFHTTPVersion1_0 ;
# 68 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern const CFStringRef kCFHTTPVersion1_1 ;
# 82 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern const CFStringRef kCFHTTPAuthenticationSchemeBasic ;
# 96 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern const CFStringRef kCFHTTPAuthenticationSchemeDigest ;
# 106 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
typedef struct __CFHTTPMessage* CFHTTPMessageRef;
# 125 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFTypeID
CFHTTPMessageGetTypeID(void) ;
# 168 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFHTTPMessageRef
CFHTTPMessageCreateRequest(
  CFAllocatorRef alloc,
  CFStringRef requestMethod,
  CFURLRef url,
  CFStringRef httpVersion) ;
# 215 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFHTTPMessageRef
CFHTTPMessageCreateResponse(
  CFAllocatorRef alloc,
  CFIndex statusCode,
  CFStringRef statusDescription,
  CFStringRef httpVersion) ;
# 255 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFHTTPMessageRef
CFHTTPMessageCreateEmpty(
  CFAllocatorRef alloc,
  Boolean isRequest) ;
# 292 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFHTTPMessageRef
CFHTTPMessageCreateCopy(
  CFAllocatorRef alloc,
  CFHTTPMessageRef message) ;
# 323 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern Boolean
CFHTTPMessageIsRequest(CFHTTPMessageRef message) ;
# 351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFStringRef
CFHTTPMessageCopyVersion(CFHTTPMessageRef message) ;
# 379 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFDataRef
CFHTTPMessageCopyBody(CFHTTPMessageRef message) ;
# 407 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern void
CFHTTPMessageSetBody(
  CFHTTPMessageRef message,
  CFDataRef bodyData) ;
# 441 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFStringRef
CFHTTPMessageCopyHeaderFieldValue(
  CFHTTPMessageRef message,
  CFStringRef headerField) ;
# 471 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFDictionaryRef
CFHTTPMessageCopyAllHeaderFields(CFHTTPMessageRef message) ;
# 503 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern void
CFHTTPMessageSetHeaderFieldValue(
  CFHTTPMessageRef message,
  CFStringRef headerField,
  CFStringRef value) ;
# 542 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern Boolean
CFHTTPMessageAppendBytes(
  CFHTTPMessageRef message,
  const UInt8 * newBytes,
  CFIndex numBytes) ;
# 573 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern Boolean
CFHTTPMessageIsHeaderComplete(CFHTTPMessageRef message) ;
# 602 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFDataRef
CFHTTPMessageCopySerializedMessage(CFHTTPMessageRef request) ;
# 633 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFURLRef
CFHTTPMessageCopyRequestURL(CFHTTPMessageRef request) ;
# 660 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFStringRef
CFHTTPMessageCopyRequestMethod(CFHTTPMessageRef request) ;
# 709 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern Boolean
CFHTTPMessageAddAuthentication(
  CFHTTPMessageRef request,
  CFHTTPMessageRef authenticationFailureResponse,
  CFStringRef username,
  CFStringRef password,
  CFStringRef authenticationScheme,
  Boolean forProxy) ;
# 746 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFIndex
CFHTTPMessageGetResponseStatusCode(CFHTTPMessageRef response) ;
# 775 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPMessage.h" 3
extern CFStringRef
CFHTTPMessageCopyResponseStatusLine(CFHTTPMessageRef response) ;




}
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 2 3
# 42 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern "C" {
# 60 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const SInt32 kCFStreamErrorDomainHTTP ;







enum CFStreamErrorHTTP {




  kCFStreamErrorHTTPParseFailure = -1,




  kCFStreamErrorHTTPRedirectionLoop = -2,




  kCFStreamErrorHTTPBadURL = -3
};
typedef enum CFStreamErrorHTTP CFStreamErrorHTTP;
# 99 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPResponseHeader ;
# 116 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPFinalURL ;
# 132 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPFinalRequest ;
# 152 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPProxy ;
# 167 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPProxyHost ;
# 181 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPProxyPort ;
# 196 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPSProxyHost ;
# 211 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPSProxyPort ;
# 227 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPShouldAutoredirect ;
# 245 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPAttemptPersistentConnection ;
# 262 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern const CFStringRef kCFStreamPropertyHTTPRequestBytesWrittenCount ;
# 304 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern CFReadStreamRef
CFReadStreamCreateForHTTPRequest(
  CFAllocatorRef alloc,
  CFHTTPMessageRef request) ;
# 354 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern CFReadStreamRef
CFReadStreamCreateForStreamedHTTPRequest(
  CFAllocatorRef alloc,
  CFHTTPMessageRef requestHeaders,
  CFReadStreamRef requestBody) ;
# 384 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern void
CFHTTPReadStreamSetRedirectsAutomatically(
  CFReadStreamRef httpStream,
  Boolean shouldAutoRedirect) ;
# 415 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
extern void
CFHTTPReadStreamSetProxy(
  CFReadStreamRef httpStream,
  CFStringRef proxyHost,
  CFIndex proxyPort) ;
# 428 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPStream.h" 3
}
# 46 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 2 3
# 41 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern "C" {
# 56 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
typedef struct _CFHTTPAuthentication* CFHTTPAuthenticationRef;
# 66 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
enum CFStreamErrorHTTPAuthentication {





  kCFStreamErrorHTTPAuthenticationTypeUnsupported = -1000,





  kCFStreamErrorHTTPAuthenticationBadUserName = -1001,





  kCFStreamErrorHTTPAuthenticationBadPassword = -1002
};
typedef enum CFStreamErrorHTTPAuthentication CFStreamErrorHTTPAuthentication;
# 102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern const CFStringRef kCFHTTPAuthenticationUsername ;
# 117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern const CFStringRef kCFHTTPAuthenticationPassword ;
# 132 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern const CFStringRef kCFHTTPAuthenticationAccountDomain ;
# 148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern CFTypeID
CFHTTPAuthenticationGetTypeID(void) ;
# 184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern CFHTTPAuthenticationRef
CFHTTPAuthenticationCreateFromResponse(
  CFAllocatorRef alloc,
  CFHTTPMessageRef response) ;
# 230 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPAuthenticationIsValid(
  CFHTTPAuthenticationRef auth,
  CFStreamError * error) ;
# 267 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPAuthenticationAppliesToRequest(
  CFHTTPAuthenticationRef auth,
  CFHTTPMessageRef request) ;
# 302 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPAuthenticationRequiresOrderedRequests(CFHTTPAuthenticationRef auth) ;
# 351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPMessageApplyCredentials(
  CFHTTPMessageRef request,
  CFHTTPAuthenticationRef auth,
  CFStringRef username,
  CFStringRef password,
  CFStreamError * error) ;
# 403 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPMessageApplyCredentialDictionary(
  CFHTTPMessageRef request,
  CFHTTPAuthenticationRef auth,
  CFDictionaryRef dict,
  CFStreamError * error) ;
# 442 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern CFStringRef
CFHTTPAuthenticationCopyRealm(CFHTTPAuthenticationRef auth) ;
# 477 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern CFArrayRef
CFHTTPAuthenticationCopyDomains(CFHTTPAuthenticationRef auth) ;
# 510 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern CFStringRef
CFHTTPAuthenticationCopyMethod(CFHTTPAuthenticationRef auth) ;
# 542 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPAuthenticationRequiresUserNameAndPassword(CFHTTPAuthenticationRef auth) ;
# 575 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
extern Boolean
CFHTTPAuthenticationRequiresAccountDomain(CFHTTPAuthenticationRef auth) ;
# 585 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFHTTPAuthentication.h" 3
}
# 50 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 1 3
# 34 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
extern "C" {
# 49 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
typedef struct __CFNetDiagnostic* CFNetDiagnosticRef;







enum CFNetDiagnosticStatusValues {




  kCFNetDiagnosticNoErr = 0,




  kCFNetDiagnosticErr = -66560L,




  kCFNetDiagnosticConnectionUp = -66559L,
  kCFNetDiagnosticConnectionIndeterminate = -66558L,




  kCFNetDiagnosticConnectionDown = -66557L
};
typedef enum CFNetDiagnosticStatusValues CFNetDiagnosticStatusValues;
# 89 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
typedef CFIndex CFNetDiagnosticStatus;
# 118 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
extern CFNetDiagnosticRef
CFNetDiagnosticCreateWithStreams(
  CFAllocatorRef alloc,
  CFReadStreamRef readStream,
  CFWriteStreamRef writeStream) ;
# 148 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
extern CFNetDiagnosticRef
CFNetDiagnosticCreateWithURL(
  CFAllocatorRef alloc,
  CFURLRef url) ;
# 179 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
extern void
CFNetDiagnosticSetName(
  CFNetDiagnosticRef details,
  CFStringRef name) ;
# 209 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
extern CFNetDiagnosticStatus
CFNetDiagnosticDiagnoseProblemInteractively(CFNetDiagnosticRef details) ;
# 243 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
extern CFNetDiagnosticStatus
CFNetDiagnosticCopyNetworkStatusPassively(
  CFNetDiagnosticRef details,
  CFStringRef * description) ;
# 255 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetDiagnostics.h" 3
}
# 54 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3







# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetworkDefs.h" 1 3
# 21 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 2 3
# 72 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern "C" {
# 102 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern CFArrayRef
CFProxyCopyProxiesForURL(
  CFURLRef url,
  CFDictionaryRef proxySettings) ;
# 136 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
typedef void ( * CFProxyAutoConfigurationResultCallback)(void *client, CFArrayRef proxyList, CFErrorRef error);
# 176 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern CFRunLoopSourceRef
CFNetworkExecuteProxyAutoConfigurationScript(
  CFStringRef proxyAutoConfigurationScript,
  CFURLRef targetURL,
  CFProxyAutoConfigurationResultCallback cb,
  CFStreamClientContext * clientContext) ;
# 198 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern CFRunLoopSourceRef
CFNetworkExecuteProxyAutoConfigurationURL(
  CFURLRef proxyAutoConfigURL,
  CFURLRef targetURL,
  CFProxyAutoConfigurationResultCallback cb,
  CFStreamClientContext * clientContext) ;
# 220 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeKey ;
# 234 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyHostNameKey ;
# 248 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyPortNumberKey ;
# 264 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyAutoConfigurationURLKey ;
# 280 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyUsernameKey ;
# 296 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyPasswordKey ;
# 315 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeNone ;
# 324 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeHTTP ;
# 333 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeHTTPS ;
# 342 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeSOCKS ;
# 351 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeFTP ;
# 360 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFProxySupport.h" 3
extern const CFStringRef kCFProxyTypeAutoConfigurationURL ;


}
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/Headers/CFNetwork.h" 2 3
# 34 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WebServicesCore.h" 1 3
# 11 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WebServicesCore.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSTypes.h" 1 3
# 38 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSTypes.h" 3
extern "C" {


#pragma pack(push, 2)





enum {
  errWSInternalError = -65793L,
  errWSTransportError = -65794L,
  errWSParseError = -65795L,
  errWSTimeoutError = -65796L
};
# 66 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSTypes.h" 3
enum WSTypeID {




  eWSUnknownType = 0,




  eWSNullType = 1,




  eWSBooleanType = 2,




  eWSIntegerType = 3,




  eWSDoubleType = 4,




  eWSStringType = 5,




  eWSDateType = 6,




  eWSDataType = 7,




  eWSArrayType = 8,




  eWSDictionaryType = 9
};
typedef enum WSTypeID WSTypeID;

typedef void * ( * WSClientContextRetainCallBackProcPtr)(void * info);
typedef void ( * WSClientContextReleaseCallBackProcPtr)(void * info);
typedef CFStringRef ( * WSClientContextCopyDescriptionCallBackProcPtr)(void * info);
# 133 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSTypes.h" 3
struct WSClientContext {




  CFIndex version;




  void * info;




  WSClientContextRetainCallBackProcPtr retain;




  WSClientContextReleaseCallBackProcPtr release;




  WSClientContextCopyDescriptionCallBackProcPtr copyDescription;
};
typedef struct WSClientContext WSClientContext;
# 172 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSTypes.h" 3
extern CFStringRef kWSXMLRPCProtocol;
extern CFStringRef kWSSOAP1999Protocol;
extern CFStringRef kWSSOAP2001Protocol;
# 202 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSTypes.h" 3
extern WSTypeID
WSGetWSTypeIDFromCFType(CFTypeRef ref) ;
# 230 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSTypes.h" 3
extern CFTypeID
WSGetCFTypeIDFromWSTypeID(WSTypeID typeID) ;







#pragma pack(pop)


}
# 12 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WebServicesCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 1 3
# 43 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern CFStringRef kWSMethodInvocationResult;



extern CFStringRef kWSFaultString;
extern CFStringRef kWSFaultCode;
extern CFStringRef kWSFaultExtra;
# 59 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern CFStringRef kWSNetworkStreamFaultString;
extern CFStringRef kWSStreamErrorMessage;
extern CFStringRef kWSStreamErrorDomain;
extern CFStringRef kWSStreamErrorError;
# 79 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern CFStringRef kWSHTTPMessage;
extern CFStringRef kWSHTTPResponseMessage;





extern CFStringRef kWSHTTPVersion;
extern CFStringRef kWSHTTPExtraHeaders;
extern CFStringRef kWSHTTPProxy;
extern CFStringRef kWSHTTPFollowsRedirects;
# 103 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern CFStringRef kWSDebugOutgoingHeaders;
extern CFStringRef kWSDebugOutgoingBody;
extern CFStringRef kWSDebugIncomingHeaders;
extern CFStringRef kWSDebugIncomingBody;





extern CFStringRef kWSSOAPMethodNamespaceURI;
extern CFStringRef kWSSOAPBodyEncodingStyle;
extern CFStringRef kWSSOAPStyleDoc;
extern CFStringRef kWSSOAPStyleRPC;







extern CFStringRef kWSSOAPMessageHeaders;





extern CFStringRef kWSRecordParameterOrder;
extern CFStringRef kWSRecordNamespaceURI;
extern CFStringRef kWSRecordType;





extern CFStringRef kWSMethodInvocationResultParameterName;






extern CFStringRef kWSMethodInvocationTimeoutValue;
# 153 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern "C" {
# 170 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
typedef struct OpaqueWSMethodInvocationRef* WSMethodInvocationRef;
# 182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern CFTypeID
WSMethodInvocationGetTypeID(void) ;
# 219 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern WSMethodInvocationRef
WSMethodInvocationCreate(
  CFURLRef url,
  CFStringRef methodName,
  CFStringRef protocol) ;
# 251 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern WSMethodInvocationRef
WSMethodInvocationCreateFromSerialization(CFDataRef contract) ;
# 279 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern CFDataRef
WSMethodInvocationCopySerialization(WSMethodInvocationRef invocation) ;
# 315 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationSetParameters(
  WSMethodInvocationRef invocation,
  CFDictionaryRef parameters,
  CFArrayRef parameterOrder) ;
# 352 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern CFDictionaryRef
WSMethodInvocationCopyParameters(
  WSMethodInvocationRef invocation,
  CFArrayRef * parameterOrder) ;
# 392 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationSetProperty(
  WSMethodInvocationRef invocation,
  CFStringRef propertyName,
  CFTypeRef propertyValue) ;
# 428 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern CFTypeRef
WSMethodInvocationCopyProperty(
  WSMethodInvocationRef invocation,
  CFStringRef propertyName) ;
# 462 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern CFDictionaryRef
WSMethodInvocationInvoke(WSMethodInvocationRef invocation) ;
# 512 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
typedef void ( * WSMethodInvocationCallBackProcPtr)(WSMethodInvocationRef invocation, void *info, CFDictionaryRef outRef);
# 540 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationSetCallBack(
  WSMethodInvocationRef invocation,
  WSMethodInvocationCallBackProcPtr clientCB,
  WSClientContext * context) ;
# 573 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationScheduleWithRunLoop(
  WSMethodInvocationRef invocation,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 609 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationUnscheduleFromRunLoop(
  WSMethodInvocationRef invocation,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode) ;
# 648 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern Boolean
WSMethodResultIsFault(CFDictionaryRef methodResult) ;
# 687 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
typedef CFStringRef ( * WSMethodInvocationSerializationProcPtr)(WSMethodInvocationRef invocation, CFTypeRef obj, void *info);
# 720 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationAddSerializationOverride(
  WSMethodInvocationRef invocation,
  CFTypeID objType,
  WSMethodInvocationSerializationProcPtr serializationProc,
  WSClientContext * context) ;
# 759 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
typedef CFTypeRef ( * WSMethodInvocationDeserializationProcPtr)(WSMethodInvocationRef invocation, CFXMLTreeRef msgRoot, CFXMLTreeRef deserializeRoot, void *info);
# 796 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
extern void
WSMethodInvocationAddDeserializationOverride(
  WSMethodInvocationRef invocation,
  CFStringRef typeNamespace,
  CFStringRef typeName,
  WSMethodInvocationDeserializationProcPtr deserializationProc,
  WSClientContext * context) ;
# 812 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSMethodInvocation.h" 3
}
# 16 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WebServicesCore.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 1 3
# 34 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
extern "C" {
# 55 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
typedef struct OpaqueWSProtocolHandlerRef* WSProtocolHandlerRef;
# 67 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
extern CFTypeID
WSProtocolHandlerGetTypeID(void) ;
# 99 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
extern WSProtocolHandlerRef
WSProtocolHandlerCreate(
  CFAllocatorRef allocator,
  CFStringRef protocol) ;
# 141 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
extern CFDictionaryRef
WSProtocolHandlerCopyRequestDictionary(
  WSProtocolHandlerRef ref,
  CFDataRef data) ;
# 181 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
extern CFDictionaryRef
WSProtocolHandlerCopyReplyDictionary(
  WSProtocolHandlerRef ref,
  CFStringRef methodName,
  CFDataRef data) ;
# 219 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
extern CFDataRef
WSProtocolHandlerCopyReplyDocument(
  WSProtocolHandlerRef ref,
  CFDictionaryRef methodContext,
  CFTypeRef resultValue) ;
# 257 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
extern CFDataRef
WSProtocolHandlerCopyFaultDocument(
  WSProtocolHandlerRef ref,
  CFDictionaryRef methodContext,
  CFDictionaryRef faultDict) ;
# 301 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
extern CFDataRef
WSProtocolHandlerCopyRequestDocument(
  WSProtocolHandlerRef ref,
  CFStringRef methodName,
  CFDictionaryRef methodParams,
  CFArrayRef methodParamOrder,
  CFDictionaryRef methodExtras) ;
# 339 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
extern CFTypeRef
WSProtocolHandlerCopyProperty(
  WSProtocolHandlerRef ref,
  CFStringRef propertyName) ;
# 370 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
extern void
WSProtocolHandlerSetProperty(
  WSProtocolHandlerRef ref,
  CFStringRef propertyName,
  CFTypeRef propertyValue) ;
# 413 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
typedef CFStringRef ( * WSProtocolHandlerSerializationProcPtr)(WSProtocolHandlerRef protocol, CFTypeRef obj, void *info);
# 446 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
extern void
WSProtocolHandlerSetSerializationOverride(
  WSProtocolHandlerRef protocol,
  CFTypeID objType,
  WSProtocolHandlerSerializationProcPtr serializationProc,
  WSClientContext * context) ;
# 486 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
typedef CFTypeRef ( * WSProtocolHandlerDeserializationProcPtr)(WSProtocolHandlerRef protocol, CFXMLTreeRef msgRoot, CFXMLTreeRef deserializeRoot, void *info);
# 523 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
extern void
WSProtocolHandlerSetDeserializationOverride(
  WSProtocolHandlerRef protocol,
  CFStringRef typeNamespace,
  CFStringRef typeName,
  WSProtocolHandlerDeserializationProcPtr deserializationProc,
  WSClientContext * context) ;
# 546 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WSProtocolHandler.h" 3
}
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/WebServicesCore.framework/Headers/WebServicesCore.h" 2 3
# 38 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 1 3
# 30 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 1 3
# 36 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern "C" {
# 51 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
typedef CFTypeRef SKDocumentRef;
# 66 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern CFTypeID
SKDocumentGetTypeID(void) ;
# 97 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern SKDocumentRef
SKDocumentCreateWithURL(CFURLRef inURL) ;
# 115 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern CFURLRef
SKDocumentCopyURL(SKDocumentRef inDocument) ;
# 156 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern SKDocumentRef
SKDocumentCreate(
  CFStringRef inScheme,
  SKDocumentRef inParent,
  CFStringRef inName) ;
# 182 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern CFStringRef
SKDocumentGetSchemeName(SKDocumentRef inDocument) ;
# 205 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern CFStringRef
SKDocumentGetName(SKDocumentRef inDocument) ;
# 229 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKDocument.h" 3
extern SKDocumentRef
SKDocumentGetParent(SKDocumentRef inDocument) ;




}
# 31 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 1 3
# 58 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKLanguageTypes ;
# 77 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKMinTermLength ;
# 94 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKSubstitutions ;
# 111 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKStopWords ;
# 130 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKProximityIndexing ;
# 150 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKMaximumTerms ;
# 169 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKTermChars ;
# 188 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKStartTermChars ;
# 207 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKAnalysis.h" 3
extern const CFStringRef kSKEndTermChars ;
# 35 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 1 3
# 48 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern "C" {
# 62 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
typedef struct __SKIndex* SKIndexRef;
# 74 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFTypeID
SKIndexGetTypeID(void) ;
# 86 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
typedef struct __SKIndexDocumentIterator* SKIndexDocumentIteratorRef;
# 98 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFTypeID
SKIndexDocumentIteratorGetTypeID(void) ;
# 112 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
enum SKIndexType {




  kSKIndexUnknown = 0,




  kSKIndexInverted = 1,




  kSKIndexVector = 2,





  kSKIndexInvertedVector = 3
};
typedef enum SKIndexType SKIndexType;
# 144 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
enum SKDocumentIndexState {




  kSKDocumentStateNotIndexed = 0,




  kSKDocumentStateIndexed = 1,





  kSKDocumentStateAddPending = 2,





  kSKDocumentStateDeletePending = 3
};
typedef enum SKDocumentIndexState SKDocumentIndexState;
# 213 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexRef
SKIndexCreateWithURL(
  CFURLRef inURL,
  CFStringRef inIndexName,
  SKIndexType inIndexType,
  CFDictionaryRef inAnalysisProperties) ;
# 254 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexRef
SKIndexOpenWithURL(
  CFURLRef inURL,
  CFStringRef inIndexName,
  Boolean inWriteAccess) ;
# 293 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexRef
SKIndexCreateWithMutableData(
  CFMutableDataRef inData,
  CFStringRef inIndexName,
  SKIndexType inIndexType,
  CFDictionaryRef inAnalysisProperties) ;
# 330 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexRef
SKIndexOpenWithData(
  CFDataRef inData,
  CFStringRef inIndexName) ;
# 366 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexRef
SKIndexOpenWithMutableData(
  CFMutableDataRef inData,
  CFStringRef inIndexName) ;
# 393 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexFlush(SKIndexRef inIndex) ;
# 408 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern void
SKIndexSetMaximumBytesBeforeFlush(
  SKIndexRef inIndex,
  CFIndex inBytesForUpdate) ;
# 429 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetMaximumBytesBeforeFlush(SKIndexRef inIndex) ;
# 455 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexCompact(SKIndexRef inIndex) ;
# 478 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexType
SKIndexGetIndexType(SKIndexRef inIndex) ;
# 497 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFDictionaryRef
SKIndexGetAnalysisProperties(SKIndexRef inIndex) ;
# 521 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetDocumentCount(SKIndexRef inIndex) ;
# 536 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern void
SKIndexClose(SKIndexRef inIndex) ;





typedef CFIndex SKDocumentID;
# 574 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexAddDocumentWithText(
  SKIndexRef inIndex,
  SKDocumentRef inDocument,
  CFStringRef inDocumentText,
  Boolean inCanReplace) ;
# 623 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexAddDocument(
  SKIndexRef inIndex,
  SKDocumentRef inDocument,
  CFStringRef inMIMETypeHint,
  Boolean inCanReplace) ;
# 655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexRemoveDocument(
  SKIndexRef inIndex,
  SKDocumentRef inDocument) ;
# 676 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFDictionaryRef
SKIndexCopyDocumentProperties(
  SKIndexRef inIndex,
  SKDocumentRef inDocument) ;
# 695 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern void
SKIndexSetDocumentProperties(
  SKIndexRef inIndex,
  SKDocumentRef inDocument,
  CFDictionaryRef inProperties) ;
# 720 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKDocumentIndexState
SKIndexGetDocumentState(
  SKIndexRef inIndex,
  SKDocumentRef inDocument) ;
# 741 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKDocumentID
SKIndexGetDocumentID(
  SKIndexRef inIndex,
  SKDocumentRef inDocument) ;
# 758 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKDocumentRef
SKIndexCopyDocumentForDocumentID(
  SKIndexRef inIndex,
  SKDocumentID inDocumentID) ;
# 775 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexRenameDocument(
  SKIndexRef inIndex,
  SKDocumentRef inDocument,
  CFStringRef inNewName) ;
# 793 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern Boolean
SKIndexMoveDocument(
  SKIndexRef inIndex,
  SKDocumentRef inDocument,
  SKDocumentRef inNewParent) ;
# 812 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKIndexDocumentIteratorRef
SKIndexDocumentIteratorCreate(
  SKIndexRef inIndex,
  SKDocumentRef inParentDocument) ;
# 834 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKDocumentRef
SKIndexDocumentIteratorCopyNext(SKIndexDocumentIteratorRef inIterator) ;
# 852 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern SKDocumentID
SKIndexGetMaximumDocumentID(SKIndexRef inIndex) ;
# 867 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetDocumentTermCount(
  SKIndexRef inIndex,
  SKDocumentID inDocumentID) ;
# 887 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFArrayRef
SKIndexCopyTermIDArrayForDocumentID(
  SKIndexRef inIndex,
  SKDocumentID inDocumentID) ;
# 904 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetDocumentTermFrequency(
  SKIndexRef inIndex,
  SKDocumentID inDocumentID,
  CFIndex inTermID) ;
# 927 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetMaximumTermID(SKIndexRef inIndex) ;
# 942 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetTermDocumentCount(
  SKIndexRef inIndex,
  CFIndex inTermID) ;
# 962 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFArrayRef
SKIndexCopyDocumentIDArrayForTermID(
  SKIndexRef inIndex,
  CFIndex inTermID) ;
# 979 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFStringRef
SKIndexCopyTermStringForTermID(
  SKIndexRef inIndex,
  CFIndex inTermID) ;
# 999 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern CFIndex
SKIndexGetTermIDForTermString(
  SKIndexRef inIndex,
  CFStringRef inTermString) ;
# 1025 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
extern void
SKLoadDefaultExtractorPlugIns(void) ;
# 1035 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKIndex.h" 3
}
# 39 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 1 3
# 52 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern "C" {
# 69 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
typedef struct __SKSearchGroup* SKSearchGroupRef;
# 81 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFTypeID
SKSearchGroupGetTypeID(void) ;
# 92 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
typedef struct __SKSearchResults* SKSearchResultsRef;
# 104 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFTypeID
SKSearchResultsGetTypeID(void) ;
# 120 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
enum SKSearchType {




  kSKSearchRanked = 0,





  kSKSearchBooleanRanked = 1,




  kSKSearchRequiredRanked = 2,




  kSKSearchPrefixRanked = 3
};
typedef enum SKSearchType SKSearchType;
# 157 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
typedef Boolean ( * SKSearchResultsFilterCallBack)(SKIndexRef inIndex, SKDocumentRef inDocument, void *inContext);
# 180 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern SKSearchGroupRef
SKSearchGroupCreate(CFArrayRef inArrayOfInIndexes) ;
# 198 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFArrayRef
SKSearchGroupCopyIndexes(SKSearchGroupRef inSearchGroup) ;
# 244 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern SKSearchResultsRef
SKSearchResultsCreateWithQuery(
  SKSearchGroupRef inSearchGroup,
  CFStringRef inQuery,
  SKSearchType inSearchType,
  CFIndex inMaxFoundDocuments,
  void * inContext,
  SKSearchResultsFilterCallBack inFilterCallBack) ;
# 294 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern SKSearchResultsRef
SKSearchResultsCreateWithDocuments(
  SKSearchGroupRef inSearchGroup,
  CFArrayRef inExampleDocuments,
  CFIndex inMaxFoundDocuments,
  void * inContext,
  SKSearchResultsFilterCallBack inFilterCallBack) ;
# 314 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFIndex
SKSearchResultsGetCount(SKSearchResultsRef inSearchResults) ;
# 363 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFIndex
SKSearchResultsGetInfoInRange(
  SKSearchResultsRef inSearchResults,
  CFRange inRange,
  SKDocumentRef * outDocumentsArray,
  SKIndexRef * outIndexesArray,
  float * outScoresArray) ;
# 395 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFArrayRef
SKSearchResultsCopyMatchingTerms(
  SKSearchResultsRef inSearchResults,
  CFIndex inItem) ;
# 411 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
typedef struct __SKSearch* SKSearchRef;
# 423 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern CFTypeID
SKSearchGetTypeID(void) ;
# 435 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
typedef UInt32 SKSearchOptions;
enum {
  kSKSearchOptionDefault = 0,
  kSKSearchOptionNoRelevanceScores = 1L << 0,
  kSKSearchOptionSpaceMeansOR = 1L << 1,
  kSKSearchOptionFindSimilar = 1L << 2
};
# 473 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern SKSearchRef
SKSearchCreate(
  SKIndexRef inIndex,
  CFStringRef inQuery,
  SKSearchOptions inSearchOptions) ;
# 491 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern void
SKSearchCancel(SKSearchRef inSearch) ;
# 539 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern Boolean
SKSearchFindMatches(
  SKSearchRef inSearch,
  CFIndex inMaximumCount,
  SKDocumentID * outDocumentIDsArray,
  float * outScoresArray,
  CFTimeInterval maximumTime,
  CFIndex * outFoundCount) ;
# 580 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern void
SKIndexCopyInfoForDocumentIDs(
  SKIndexRef inIndex,
  CFIndex inCount,
  SKDocumentID * inDocumentIDsArray,
  CFStringRef * outNamesArray,
  SKDocumentID * outParentIDsArray) ;
# 614 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern void
SKIndexCopyDocumentRefsForDocumentIDs(
  SKIndexRef inIndex,
  CFIndex inCount,
  SKDocumentID * inDocumentIDsArray,
  SKDocumentRef * outDocumentRefsArray) ;
# 647 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
extern void
SKIndexCopyDocumentURLsForDocumentIDs(
  SKIndexRef inIndex,
  CFIndex inCount,
  SKDocumentID * inDocumentIDsArray,
  CFURLRef * outDocumentURLsArray) ;
# 661 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSearch.h" 3
}
# 43 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 2 3



# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 1 3
# 39 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern "C" {
# 53 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
typedef struct __SKSummary* SKSummaryRef;
# 68 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFTypeID
SKSummaryGetTypeID(void) ;
# 96 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern SKSummaryRef
SKSummaryCreateWithString(CFStringRef inString) ;
# 116 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFIndex
SKSummaryGetSentenceCount(SKSummaryRef summary) ;
# 136 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFIndex
SKSummaryGetParagraphCount(SKSummaryRef summary) ;
# 159 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFStringRef
SKSummaryCopySentenceAtIndex(
  SKSummaryRef summary,
  CFIndex i) ;
# 184 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFStringRef
SKSummaryCopyParagraphAtIndex(
  SKSummaryRef summary,
  CFIndex i) ;
# 210 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFStringRef
SKSummaryCopySentenceSummaryString(
  SKSummaryRef summary,
  CFIndex numSentences) ;
# 236 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFStringRef
SKSummaryCopyParagraphSummaryString(
  SKSummaryRef summary,
  CFIndex numParagraphs) ;
# 277 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFIndex
SKSummaryGetSentenceSummaryInfo(
  SKSummaryRef summary,
  CFIndex numSentencesInSummary,
  CFIndex * outRankOrderOfSentences,
  CFIndex * outSentenceIndexOfSentences,
  CFIndex * outParagraphIndexOfSentences) ;
# 317 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SKSummary.h" 3
extern CFIndex
SKSummaryGetParagraphSummaryInfo(
  SKSummaryRef summary,
  CFIndex numParagraphsInSummary,
  CFIndex * outRankOrderOfParagraphs,
  CFIndex * outParagraphIndexOfParagraphs) ;




}
# 47 "/System/Library/Frameworks/CoreServices.framework/Frameworks/SearchKit.framework/Headers/SearchKit.h" 2 3
# 42 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 2 3


# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 1 3
# 10 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 1 3
# 61 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern "C" {






typedef struct __MDItem *MDItemRef;





extern CFTypeID MDItemGetTypeID(void) ;
# 88 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern MDItemRef MDItemCreate(CFAllocatorRef allocator, CFStringRef path) ;
# 98 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern CFTypeRef MDItemCopyAttribute(MDItemRef item, CFStringRef name) ;
# 111 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern CFDictionaryRef MDItemCopyAttributes(MDItemRef item, CFArrayRef names) ;
# 125 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern CFDictionaryRef MDItemCopyAttributeList(MDItemRef item, ... ) ;
# 134 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern CFArrayRef MDItemCopyAttributeNames(MDItemRef item) ;
# 361 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemAttributeChangeDate ;
extern const CFStringRef kMDItemContentType ;
extern const CFStringRef kMDItemContentTypeTree ;
extern const CFStringRef kMDItemKeywords ;
extern const CFStringRef kMDItemTitle ;
extern const CFStringRef kMDItemAuthors ;
extern const CFStringRef kMDItemProjects ;
extern const CFStringRef kMDItemWhereFroms ;
extern const CFStringRef kMDItemComment ;
extern const CFStringRef kMDItemCopyright ;
extern const CFStringRef kMDItemLastUsedDate ;
extern const CFStringRef kMDItemContentCreationDate ;
extern const CFStringRef kMDItemContentModificationDate ;
extern const CFStringRef kMDItemDurationSeconds ;
extern const CFStringRef kMDItemContactKeywords ;
extern const CFStringRef kMDItemVersion ;

extern const CFStringRef kMDItemPixelHeight ;
extern const CFStringRef kMDItemPixelWidth ;
extern const CFStringRef kMDItemColorSpace ;
extern const CFStringRef kMDItemBitsPerSample ;
extern const CFStringRef kMDItemFlashOnOff ;
extern const CFStringRef kMDItemFocalLength ;
extern const CFStringRef kMDItemAcquisitionMake ;
extern const CFStringRef kMDItemAcquisitionModel ;
extern const CFStringRef kMDItemISOSpeed ;
extern const CFStringRef kMDItemOrientation ;
extern const CFStringRef kMDItemLayerNames ;
extern const CFStringRef kMDItemWhiteBalance ;
extern const CFStringRef kMDItemAperture ;
extern const CFStringRef kMDItemProfileName ;
extern const CFStringRef kMDItemResolutionWidthDPI ;
extern const CFStringRef kMDItemResolutionHeightDPI ;
extern const CFStringRef kMDItemExposureMode ;
extern const CFStringRef kMDItemExposureTimeSeconds ;
extern const CFStringRef kMDItemEXIFVersion ;

extern const CFStringRef kMDItemCodecs ;
extern const CFStringRef kMDItemMediaTypes ;
extern const CFStringRef kMDItemStreamable ;
extern const CFStringRef kMDItemTotalBitRate ;
extern const CFStringRef kMDItemVideoBitRate ;
extern const CFStringRef kMDItemAudioBitRate ;
extern const CFStringRef kMDItemDeliveryType ;

extern const CFStringRef kMDItemAlbum ;
extern const CFStringRef kMDItemHasAlphaChannel ;
extern const CFStringRef kMDItemRedEyeOnOff ;
extern const CFStringRef kMDItemMeteringMode ;
extern const CFStringRef kMDItemMaxAperture ;
extern const CFStringRef kMDItemFNumber ;
extern const CFStringRef kMDItemExposureProgram ;
extern const CFStringRef kMDItemExposureTimeString ;


extern const CFStringRef kMDItemHeadline ;
extern const CFStringRef kMDItemInstructions ;
extern const CFStringRef kMDItemCity ;
extern const CFStringRef kMDItemStateOrProvince ;
extern const CFStringRef kMDItemCountry ;
# 482 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemFSName ;
extern const CFStringRef kMDItemDisplayName ;
extern const CFStringRef kMDItemPath ;
extern const CFStringRef kMDItemFSSize ;
extern const CFStringRef kMDItemFSCreationDate ;
extern const CFStringRef kMDItemFSContentChangeDate ;
extern const CFStringRef kMDItemFSOwnerUserID ;
extern const CFStringRef kMDItemFSOwnerGroupID ;
extern const CFStringRef kMDItemFSExists ;
extern const CFStringRef kMDItemFSIsReadable ;
extern const CFStringRef kMDItemFSIsWriteable ;
extern const CFStringRef kMDItemFSHasCustomIcon ;
extern const CFStringRef kMDItemFSIsExtensionHidden ;
extern const CFStringRef kMDItemFSIsStationery ;
extern const CFStringRef kMDItemFSInvisible ;
extern const CFStringRef kMDItemFSLabel ;
extern const CFStringRef kMDItemFSNodeCount ;

extern const CFStringRef kMDItemTextContent ;
# 562 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemAudioSampleRate ;
extern const CFStringRef kMDItemAudioChannelCount ;
extern const CFStringRef kMDItemTempo ;
extern const CFStringRef kMDItemKeySignature ;
extern const CFStringRef kMDItemTimeSignature ;
extern const CFStringRef kMDItemAudioEncodingApplication ;
extern const CFStringRef kMDItemComposer ;
extern const CFStringRef kMDItemLyricist ;
extern const CFStringRef kMDItemAudioTrackNumber ;
extern const CFStringRef kMDItemRecordingDate ;
extern const CFStringRef kMDItemMusicalGenre ;
extern const CFStringRef kMDItemIsGeneralMIDISequence ;
extern const CFStringRef kMDItemRecordingYear ;
# 642 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemOrganizations ;
extern const CFStringRef kMDItemLanguages ;
extern const CFStringRef kMDItemRights ;
extern const CFStringRef kMDItemPublishers ;
extern const CFStringRef kMDItemContributors ;
extern const CFStringRef kMDItemCoverage ;
extern const CFStringRef kMDItemSubject ;
extern const CFStringRef kMDItemDescription ;
extern const CFStringRef kMDItemIdentifier ;
extern const CFStringRef kMDItemAudiences ;
# 710 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemNumberOfPages ;
extern const CFStringRef kMDItemPageWidth ;
extern const CFStringRef kMDItemPageHeight ;
extern const CFStringRef kMDItemSecurityMethod ;
extern const CFStringRef kMDItemCreator ;
extern const CFStringRef kMDItemEncodingApplications ;
extern const CFStringRef kMDItemDueDate ;
extern const CFStringRef kMDItemStarRating ;
extern const CFStringRef kMDItemPhoneNumbers ;
extern const CFStringRef kMDItemEmailAddresses ;
extern const CFStringRef kMDItemInstantMessageAddresses ;
extern const CFStringRef kMDItemKind ;
extern const CFStringRef kMDItemRecipients ;
extern const CFStringRef kMDItemFinderComment ;
extern const CFStringRef kMDItemFonts ;
# 783 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemAppleLoopsRootKey ;
extern const CFStringRef kMDItemAppleLoopsKeyFilterType ;
extern const CFStringRef kMDItemAppleLoopsLoopMode ;
extern const CFStringRef kMDItemAppleLoopDescriptors ;
extern const CFStringRef kMDItemMusicalInstrumentCategory ;
extern const CFStringRef kMDItemMusicalInstrumentName ;

extern const CFStringRef kMDItemCFBundleIdentifier ;
extern const CFStringRef kMDItemSupportFileType ;
# 827 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 3
extern const CFStringRef kMDItemInformation ;
extern const CFStringRef kMDItemDirector ;
extern const CFStringRef kMDItemProducer ;
extern const CFStringRef kMDItemGenre ;
extern const CFStringRef kMDItemPerformers ;
extern const CFStringRef kMDItemOriginalFormat ;
extern const CFStringRef kMDItemOriginalSource ;
extern const CFStringRef kMDItemAuthorEmailAddresses ;
extern const CFStringRef kMDItemRecipientEmailAddresses ;
extern const CFStringRef kMDItemURL ;
}





extern "C" {
extern CFDictionaryRef __MDItemCopyAttributesEllipsis1(MDItemRef item, ...) ;

}
# 11 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 1 3
# 72 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 1 3
# 73 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 2 3


extern "C" {






typedef struct __MDQuery *MDQueryRef;

typedef enum {
    kMDQuerySynchronous = 1,
    kMDQueryWantsUpdates = 4
} MDQueryOptionFlags;
# 117 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFTypeID MDQueryGetTypeID(void) ;
# 153 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern MDQueryRef MDQueryCreate(CFAllocatorRef allocator, CFStringRef queryString, CFArrayRef valueListAttrs, CFArrayRef sortingAttrs) ;
# 193 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern MDQueryRef MDQueryCreateSubset(CFAllocatorRef allocator, MDQueryRef query, CFStringRef queryString, CFArrayRef valueListAttrs, CFArrayRef sortingAttrs) ;







extern CFStringRef MDQueryCopyQueryString(MDQueryRef query) ;
# 210 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFArrayRef MDQueryCopyValueListAttributes(MDQueryRef query) ;
# 219 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFArrayRef MDQueryCopySortingAttributes(MDQueryRef query) ;
# 264 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
typedef struct {
    size_t first_max_num;
    size_t first_max_ms;
    size_t progress_max_num;
    size_t progress_max_ms;
    size_t update_max_num;
    size_t update_max_ms;
} MDQueryBatchingParams;
# 281 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern MDQueryBatchingParams MDQueryGetBatchingParameters(MDQueryRef query) ;







extern void MDQuerySetBatchingParameters(MDQueryRef query, MDQueryBatchingParams params) ;
# 320 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
typedef const void *(*MDQueryCreateResultFunction)(MDQueryRef query, MDItemRef item, void *context);
# 387 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQuerySetCreateResultFunction(MDQueryRef query, MDQueryCreateResultFunction func, void *context, const CFArrayCallBacks *cb) ;
# 411 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
typedef const void *(*MDQueryCreateValueFunction)(MDQueryRef query, CFStringRef attrName, CFTypeRef attrValue, void *context);
# 476 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQuerySetCreateValueFunction(MDQueryRef query, MDQueryCreateValueFunction func, void *context, const CFArrayCallBacks *cb) ;
# 512 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern Boolean MDQueryExecute(MDQueryRef query, CFOptionFlags optionFlags) ;
# 537 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQueryStop(MDQueryRef query) ;
# 548 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQueryDisableUpdates(MDQueryRef query) ;
# 559 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQueryEnableUpdates(MDQueryRef query) ;
# 569 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern Boolean MDQueryIsGatheringComplete(MDQueryRef query) ;
# 579 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFIndex MDQueryGetResultCount(MDQueryRef query) ;
# 600 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const void *MDQueryGetResultAtIndex(MDQueryRef query, CFIndex idx) ;
# 622 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFIndex MDQueryGetIndexOfResult(MDQueryRef query, const void *result) ;
# 639 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void *MDQueryGetAttributeValueOfResultAtIndex(MDQueryRef query, CFStringRef name, CFIndex idx) ;
# 655 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFArrayRef MDQueryCopyValuesOfAttribute(MDQueryRef query, CFStringRef name) ;
# 674 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern CFIndex MDQueryGetCountOfResultsWithAttributeValue(MDQueryRef query, CFStringRef name, CFTypeRef value) ;
# 705 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
typedef CFComparisonResult (*MDQuerySortComparatorFunction)(const CFTypeRef attrs1[], const CFTypeRef attrs2[], void *context);
# 736 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQuerySetSortComparator(MDQueryRef query, MDQuerySortComparatorFunction comparator, void *context) ;
# 755 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryProgressNotification ;
# 768 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryDidFinishNotification ;
# 783 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryDidUpdateNotification ;
# 794 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryUpdateAddedItems ;
# 811 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryUpdateChangedItems ;
# 826 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryUpdateRemovedItems ;
# 854 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern const CFStringRef kMDQueryResultContentRelevance ;
# 874 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQuerySetSearchScope(MDQueryRef query, CFArrayRef scopeDirectories, OptionBits scopeOptions) ;







extern const CFStringRef kMDQueryScopeHome ;







extern const CFStringRef kMDQueryScopeComputer ;






extern const CFStringRef kMDQueryScopeNetwork ;
# 906 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDQuery.h" 3
extern void MDQuerySetMaxCount(MDQueryRef query, CFIndex size) ;

}
# 12 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDSchema.h" 1 3
# 19 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDSchema.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 1 3
# 20 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDSchema.h" 2 3

extern "C" {
# 32 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDSchema.h" 3
extern CFDictionaryRef MDSchemaCopyAttributesForContentType(CFStringRef contentTypeUTI) ;







extern CFDictionaryRef MDSchemaCopyMetaAttributesForAttribute(CFStringRef name) ;






extern CFArrayRef MDSchemaCopyAllAttributes(void) ;
# 56 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDSchema.h" 3
extern CFStringRef MDSchemaCopyDisplayNameForAttribute(CFStringRef name) ;
# 65 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDSchema.h" 3
extern CFStringRef MDSchemaCopyDisplayDescriptionForAttribute(CFStringRef name) ;


extern const CFStringRef kMDAttributeDisplayValues ;



extern const CFStringRef kMDAttributeAllValues ;



extern const CFStringRef kMDAttributeReadOnlyValues ;




extern const CFStringRef kMDExporterAvaliable ;






extern const CFStringRef kMDAttributeName ;
extern const CFStringRef kMDAttributeType ;
extern const CFStringRef kMDAttributeMultiValued ;

}
# 13 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDImporter.h" 1 3
# 22 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDImporter.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDItem.h" 1 3
# 23 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDImporter.h" 2 3


extern "C" {
# 101 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDImporter.h" 3
}
# 14 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 2 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 1 3
# 45 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern "C" {







extern CFDictionaryRef MDLineageCreate(CFAllocatorRef allocator) ;
# 63 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFDictionaryRef MDLineageCreateFromFile(CFAllocatorRef allocator, CFURLRef fileURL) ;
# 73 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFDictionaryRef MDLineageCreateBranch(CFAllocatorRef allocator, CFDictionaryRef originalLineage) ;
# 82 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFDictionaryRef MDLineageCreateBranchFromFile(CFAllocatorRef allocator, CFURLRef fileURL) ;
# 93 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern Boolean MDLineageSetOnFile(CFDictionaryRef lineage, CFURLRef fileURL) ;







extern Boolean MDLineageRemoveFromFile(CFURLRef fileURL) ;
# 110 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFStringRef MDLineageCreateQueryString(MDItemRef item) ;
# 121 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFArrayRef MDLineageCreateParentsArray(CFAllocatorRef allocator, MDItemRef item, CFArrayRef family) ;
# 132 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFArrayRef MDLineageCreateRootAncestorsArray(CFAllocatorRef allocator, MDItemRef item, CFArrayRef family) ;
# 142 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFArrayRef MDLineageCreateChildrenArray(CFAllocatorRef allocator, MDItemRef item, CFArrayRef family) ;
# 152 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/MDLineage.h" 3
extern CFArrayRef MDLineageCreateLeafDescendantsArray(CFAllocatorRef allocator, MDItemRef item, CFArrayRef family) ;

}
# 15 "/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Headers/Metadata.h" 2 3
# 45 "/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h" 2 3
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3





# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATS.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATS.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 1 3
# 24 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTLayoutTypes.h" 1 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTLayoutTypes.h" 3
#pragma pack(push, 2)
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTLayoutTypes.h" 3
enum {
  kAllTypographicFeaturesType = 0,
  kLigaturesType = 1,
  kCursiveConnectionType = 2,
  kLetterCaseType = 3,
  kVerticalSubstitutionType = 4,
  kLinguisticRearrangementType = 5,
  kNumberSpacingType = 6,
  kSmartSwashType = 8,
  kDiacriticsType = 9,
  kVerticalPositionType = 10,
  kFractionsType = 11,
  kOverlappingCharactersType = 13,
  kTypographicExtrasType = 14,
  kMathematicalExtrasType = 15,
  kOrnamentSetsType = 16,
  kCharacterAlternativesType = 17,
  kDesignComplexityType = 18,
  kStyleOptionsType = 19,
  kCharacterShapeType = 20,
  kNumberCaseType = 21,
  kTextSpacingType = 22,
  kTransliterationType = 23,
  kAnnotationType = 24,
  kKanaSpacingType = 25,
  kIdeographicSpacingType = 26,
  kUnicodeDecompositionType = 27,
  kRubyKanaType = 28,
  kCJKSymbolAlternativesType = 29,
  kIdeographicAlternativesType = 30,
  kCJKVerticalRomanPlacementType = 31,
  kItalicCJKRomanType = 32,
  kCJKRomanSpacingType = 103,
  kLastFeatureType = -1
};






enum {
  kAllTypeFeaturesOnSelector = 0,
  kAllTypeFeaturesOffSelector = 1
};







enum {
  kRequiredLigaturesOnSelector = 0,
  kRequiredLigaturesOffSelector = 1,
  kCommonLigaturesOnSelector = 2,
  kCommonLigaturesOffSelector = 3,
  kRareLigaturesOnSelector = 4,
  kRareLigaturesOffSelector = 5,
  kLogosOnSelector = 6,
  kLogosOffSelector = 7,
  kRebusPicturesOnSelector = 8,
  kRebusPicturesOffSelector = 9,
  kDiphthongLigaturesOnSelector = 10,
  kDiphthongLigaturesOffSelector = 11,
  kSquaredLigaturesOnSelector = 12,
  kSquaredLigaturesOffSelector = 13,
  kAbbrevSquaredLigaturesOnSelector = 14,
  kAbbrevSquaredLigaturesOffSelector = 15,
  kSymbolLigaturesOnSelector = 16,
  kSymbolLigaturesOffSelector = 17
};






enum {
  kUnconnectedSelector = 0,
  kPartiallyConnectedSelector = 1,
  kCursiveSelector = 2
};






enum {
  kUpperAndLowerCaseSelector = 0,
  kAllCapsSelector = 1,
  kAllLowerCaseSelector = 2,
  kSmallCapsSelector = 3,
  kInitialCapsSelector = 4,
  kInitialCapsAndSmallCapsSelector = 5
};






enum {
  kSubstituteVerticalFormsOnSelector = 0,
  kSubstituteVerticalFormsOffSelector = 1
};






enum {
  kLinguisticRearrangementOnSelector = 0,
  kLinguisticRearrangementOffSelector = 1
};






enum {
  kMonospacedNumbersSelector = 0,
  kProportionalNumbersSelector = 1,
  kThirdWidthNumbersSelector = 2,
  kQuarterWidthNumbersSelector = 3
};






enum {
  kWordInitialSwashesOnSelector = 0,
  kWordInitialSwashesOffSelector = 1,
  kWordFinalSwashesOnSelector = 2,
  kWordFinalSwashesOffSelector = 3,
  kLineInitialSwashesOnSelector = 4,
  kLineInitialSwashesOffSelector = 5,
  kLineFinalSwashesOnSelector = 6,
  kLineFinalSwashesOffSelector = 7,
  kNonFinalSwashesOnSelector = 8,
  kNonFinalSwashesOffSelector = 9
};






enum {
  kShowDiacriticsSelector = 0,
  kHideDiacriticsSelector = 1,
  kDecomposeDiacriticsSelector = 2
};






enum {
  kNormalPositionSelector = 0,
  kSuperiorsSelector = 1,
  kInferiorsSelector = 2,
  kOrdinalsSelector = 3
};






enum {
  kNoFractionsSelector = 0,
  kVerticalFractionsSelector = 1,
  kDiagonalFractionsSelector = 2
};






enum {
  kPreventOverlapOnSelector = 0,
  kPreventOverlapOffSelector = 1
};






enum {
  kHyphensToEmDashOnSelector = 0,
  kHyphensToEmDashOffSelector = 1,
  kHyphenToEnDashOnSelector = 2,
  kHyphenToEnDashOffSelector = 3,
  kSlashedZeroOnSelector = 4,
  kSlashedZeroOffSelector = 5,
  kFormInterrobangOnSelector = 6,
  kFormInterrobangOffSelector = 7,
  kSmartQuotesOnSelector = 8,
  kSmartQuotesOffSelector = 9,
  kPeriodsToEllipsisOnSelector = 10,
  kPeriodsToEllipsisOffSelector = 11
};






enum {
  kHyphenToMinusOnSelector = 0,
  kHyphenToMinusOffSelector = 1,
  kAsteriskToMultiplyOnSelector = 2,
  kAsteriskToMultiplyOffSelector = 3,
  kSlashToDivideOnSelector = 4,
  kSlashToDivideOffSelector = 5,
  kInequalityLigaturesOnSelector = 6,
  kInequalityLigaturesOffSelector = 7,
  kExponentsOnSelector = 8,
  kExponentsOffSelector = 9
};






enum {
  kNoOrnamentsSelector = 0,
  kDingbatsSelector = 1,
  kPiCharactersSelector = 2,
  kFleuronsSelector = 3,
  kDecorativeBordersSelector = 4,
  kInternationalSymbolsSelector = 5,
  kMathSymbolsSelector = 6
};






enum {
  kNoAlternatesSelector = 0
};






enum {
  kDesignLevel1Selector = 0,
  kDesignLevel2Selector = 1,
  kDesignLevel3Selector = 2,
  kDesignLevel4Selector = 3,
  kDesignLevel5Selector = 4
};






enum {
  kNoStyleOptionsSelector = 0,
  kDisplayTextSelector = 1,
  kEngravedTextSelector = 2,
  kIlluminatedCapsSelector = 3,
  kTitlingCapsSelector = 4,
  kTallCapsSelector = 5
};






enum {
  kTraditionalCharactersSelector = 0,
  kSimplifiedCharactersSelector = 1,
  kJIS1978CharactersSelector = 2,
  kJIS1983CharactersSelector = 3,
  kJIS1990CharactersSelector = 4,
  kTraditionalAltOneSelector = 5,
  kTraditionalAltTwoSelector = 6,
  kTraditionalAltThreeSelector = 7,
  kTraditionalAltFourSelector = 8,
  kTraditionalAltFiveSelector = 9,
  kExpertCharactersSelector = 10
};






enum {
  kLowerCaseNumbersSelector = 0,
  kUpperCaseNumbersSelector = 1
};






enum {
  kProportionalTextSelector = 0,
  kMonospacedTextSelector = 1,
  kHalfWidthTextSelector = 2
};






enum {
  kNoTransliterationSelector = 0,
  kHanjaToHangulSelector = 1,
  kHiraganaToKatakanaSelector = 2,
  kKatakanaToHiraganaSelector = 3,
  kKanaToRomanizationSelector = 4,
  kRomanizationToHiraganaSelector = 5,
  kRomanizationToKatakanaSelector = 6,
  kHanjaToHangulAltOneSelector = 7,
  kHanjaToHangulAltTwoSelector = 8,
  kHanjaToHangulAltThreeSelector = 9
};






enum {
  kNoAnnotationSelector = 0,
  kBoxAnnotationSelector = 1,
  kRoundedBoxAnnotationSelector = 2,
  kCircleAnnotationSelector = 3,
  kInvertedCircleAnnotationSelector = 4,
  kParenthesisAnnotationSelector = 5,
  kPeriodAnnotationSelector = 6,
  kRomanNumeralAnnotationSelector = 7,
  kDiamondAnnotationSelector = 8,
  kInvertedBoxAnnotationSelector = 9,
  kInvertedRoundedBoxAnnotationSelector = 10
};






enum {
  kFullWidthKanaSelector = 0,
  kProportionalKanaSelector = 1
};






enum {
  kFullWidthIdeographsSelector = 0,
  kProportionalIdeographsSelector = 1,
  kHalfWidthIdeographsSelector = 2
};






enum {
  kCanonicalCompositionOnSelector = 0,
  kCanonicalCompositionOffSelector = 1,
  kCompatibilityCompositionOnSelector = 2,
  kCompatibilityCompositionOffSelector = 3,
  kTranscodingCompositionOnSelector = 4,
  kTranscodingCompositionOffSelector = 5
};






enum {
  kNoRubyKanaSelector = 0,
  kRubyKanaSelector = 1,
  kRubyKanaOnSelector = 2,
  kRubyKanaOffSelector = 3
};






enum {
  kNoCJKSymbolAlternativesSelector = 0,
  kCJKSymbolAltOneSelector = 1,
  kCJKSymbolAltTwoSelector = 2,
  kCJKSymbolAltThreeSelector = 3,
  kCJKSymbolAltFourSelector = 4,
  kCJKSymbolAltFiveSelector = 5
};






enum {
  kNoIdeographicAlternativesSelector = 0,
  kIdeographicAltOneSelector = 1,
  kIdeographicAltTwoSelector = 2,
  kIdeographicAltThreeSelector = 3,
  kIdeographicAltFourSelector = 4,
  kIdeographicAltFiveSelector = 5
};






enum {
  kCJKVerticalRomanCenteredSelector = 0,
  kCJKVerticalRomanHBaselineSelector = 1
};






enum {
  kNoCJKItalicRomanSelector = 0,
  kCJKItalicRomanSelector = 1,
  kCJKItalicRomanOnSelector = 2,
  kCJKItalicRomanOffSelector = 3
};






enum {
  kHalfWidthCJKRomanSelector = 0,
  kProportionalCJKRomanSelector = 1,
  kDefaultCJKRomanSelector = 2,
  kFullWidthCJKRomanSelector = 3
};





enum {
  kSFNTLookupSimpleArray = 0,
  kSFNTLookupSegmentSingle = 2,
  kSFNTLookupSegmentArray = 4,
  kSFNTLookupSingleTable = 6,
  kSFNTLookupTrimmedArray = 8
};

typedef UInt16 SFNTLookupTableFormat;
typedef UInt16 SFNTLookupValue;
typedef UInt16 SFNTLookupOffset;
typedef UInt32 SFNTLookupKind;






struct SFNTLookupBinarySearchHeader {
  UInt16 unitSize;
  UInt16 nUnits;
  UInt16 searchRange;
  UInt16 entrySelector;
  UInt16 rangeShift;
};
typedef struct SFNTLookupBinarySearchHeader SFNTLookupBinarySearchHeader;

struct SFNTLookupArrayHeader {
  SFNTLookupValue lookupValues[1];
};
typedef struct SFNTLookupArrayHeader SFNTLookupArrayHeader;

struct SFNTLookupTrimmedArrayHeader {
  UInt16 firstGlyph;
  UInt16 count;
  SFNTLookupValue valueArray[1];
};
typedef struct SFNTLookupTrimmedArrayHeader SFNTLookupTrimmedArrayHeader;






struct SFNTLookupSegment {
  UInt16 lastGlyph;
  UInt16 firstGlyph;
  UInt16 value[1];
};
typedef struct SFNTLookupSegment SFNTLookupSegment;
struct SFNTLookupSegmentHeader {
  SFNTLookupBinarySearchHeader binSearch;
  SFNTLookupSegment segments[1];
};
typedef struct SFNTLookupSegmentHeader SFNTLookupSegmentHeader;

struct SFNTLookupSingle {
  UInt16 glyph;
  UInt16 value[1];
};
typedef struct SFNTLookupSingle SFNTLookupSingle;
struct SFNTLookupSingleHeader {
  SFNTLookupBinarySearchHeader binSearch;
  SFNTLookupSingle entries[1];
};
typedef struct SFNTLookupSingleHeader SFNTLookupSingleHeader;

union SFNTLookupFormatSpecificHeader {
  SFNTLookupArrayHeader theArray;
  SFNTLookupSegmentHeader segment;
  SFNTLookupSingleHeader single;
  SFNTLookupTrimmedArrayHeader trimmedArray;
};
typedef union SFNTLookupFormatSpecificHeader SFNTLookupFormatSpecificHeader;

struct SFNTLookupTable {
  SFNTLookupTableFormat format;
  SFNTLookupFormatSpecificHeader fsHeader;
};
typedef struct SFNTLookupTable SFNTLookupTable;
typedef SFNTLookupTable * SFNTLookupTablePtr;
typedef SFNTLookupTablePtr * SFNTLookupTableHandle;


enum {
  kSTClassEndOfText = 0,
  kSTClassOutOfBounds = 1,
  kSTClassDeletedGlyph = 2,
  kSTClassEndOfLine = 3,
  kSTSetMark = 0x8000,
  kSTNoAdvance = 0x4000,
  kSTMarkEnd = 0x2000,
  kSTLigActionMask = 0x3FFF,
  kSTRearrVerbMask = 0x000F
};

typedef UInt8 STClass;
typedef UInt8 STEntryIndex;
struct STHeader {
  UInt8 filler;
  STClass nClasses;
  UInt16 classTableOffset;
  UInt16 stateArrayOffset;
  UInt16 entryTableOffset;
};
typedef struct STHeader STHeader;
struct STClassTable {
  UInt16 firstGlyph;
  UInt16 nGlyphs;
  STClass classes[1];
};
typedef struct STClassTable STClassTable;
struct STEntryZero {
  UInt16 newState;
  UInt16 flags;
};
typedef struct STEntryZero STEntryZero;
struct STEntryOne {
  UInt16 newState;
  UInt16 flags;
  UInt16 offset1;
};
typedef struct STEntryOne STEntryOne;
struct STEntryTwo {
  UInt16 newState;
  UInt16 flags;
  UInt16 offset1;
  UInt16 offset2;
};
typedef struct STEntryTwo STEntryTwo;


enum {
  kSTXHasLigAction = 0x2000
};


typedef UInt16 STXClass;
typedef UInt16 STXStateIndex;
typedef UInt16 STXEntryIndex;
struct STXHeader {
  UInt32 nClasses;
  UInt32 classTableOffset;
  UInt32 stateArrayOffset;
  UInt32 entryTableOffset;
};
typedef struct STXHeader STXHeader;

typedef SFNTLookupTable STXClassTable;
struct STXEntryZero {
  STXStateIndex newState;
  UInt16 flags;
};
typedef struct STXEntryZero STXEntryZero;
struct STXEntryOne {
  STXStateIndex newState;
  UInt16 flags;
  UInt16 index1;
};
typedef struct STXEntryOne STXEntryOne;
struct STXEntryTwo {
  STXStateIndex newState;
  UInt16 flags;
  UInt16 index1;
  UInt16 index2;
};
typedef struct STXEntryTwo STXEntryTwo;



enum {
  kLCARTag = 0x6C636172,
  kLCARCurrentVersion = 0x00010000,
  kLCARLinearFormat = 0,
  kLCARCtlPointFormat = 1
};


struct LcarCaretClassEntry {
  UInt16 count;
  UInt16 partials[1];
};
typedef struct LcarCaretClassEntry LcarCaretClassEntry;
struct LcarCaretTable {
  Fixed version;
  UInt16 format;
  SFNTLookupTable lookup;
};
typedef struct LcarCaretTable LcarCaretTable;
typedef LcarCaretTable * LcarCaretTablePtr;



enum {
  kJUSTTag = 0x6A757374,
  kJUSTCurrentVersion = 0x00010000,
  kJUSTStandardFormat = 0,
  kJUSTnoGlyphcode = 0xFFFF,
  kJUSTpcDecompositionAction = 0,
  kJUSTpcUnconditionalAddAction = 1,
  kJUSTpcConditionalAddAction = 2,
  kJUSTpcGlyphStretchAction = 3,
  kJUSTpcDuctilityAction = 4,
  kJUSTpcGlyphRepeatAddAction = 5
};


enum {
  kJUSTKashidaPriority = 0,
  kJUSTSpacePriority = 1,
  kJUSTLetterPriority = 2,
  kJUSTNullPriority = 3,
  kJUSTPriorityCount = 4
};


enum {
  kJUSTOverridePriority = 0x8000,
  kJUSTOverrideLimits = 0x4000,
  kJUSTOverrideUnlimited = 0x2000,
  kJUSTUnlimited = 0x1000,
  kJUSTPriorityMask = 0x0003
};


typedef UInt16 JustPCActionType;
typedef UInt16 JustificationFlags;

struct JustPCDecompositionAction {
  Fixed lowerLimit;
  Fixed upperLimit;
  UInt16 order;
  UInt16 count;
  UInt16 glyphs[1];
};
typedef struct JustPCDecompositionAction JustPCDecompositionAction;


typedef UInt16 JustPCUnconditionalAddAction;





struct JustPCConditionalAddAction {
  Fixed substThreshhold;
  UInt16 addGlyph;
  UInt16 substGlyph;
};
typedef struct JustPCConditionalAddAction JustPCConditionalAddAction;

struct JustPCDuctilityAction {
  UInt32 ductilityAxis;
  Fixed minimumLimit;
  Fixed noStretchValue;
  Fixed maximumLimit;
};
typedef struct JustPCDuctilityAction JustPCDuctilityAction;





struct JustPCGlyphRepeatAddAction {
  UInt16 flags;
  UInt16 glyph;
};
typedef struct JustPCGlyphRepeatAddAction JustPCGlyphRepeatAddAction;

struct JustPCActionSubrecord {
  UInt16 theClass;
  JustPCActionType theType;
  UInt32 length;
  UInt32 data;
};
typedef struct JustPCActionSubrecord JustPCActionSubrecord;

struct JustPCAction {
  UInt32 actionCount;
  JustPCActionSubrecord actions[1];
};
typedef struct JustPCAction JustPCAction;




struct JustWidthDeltaEntry {
  UInt32 justClass;
  Fixed beforeGrowLimit;
  Fixed beforeShrinkLimit;
  Fixed afterGrowLimit;
  Fixed afterShrinkLimit;
  JustificationFlags growFlags;
  JustificationFlags shrinkFlags;
};
typedef struct JustWidthDeltaEntry JustWidthDeltaEntry;
struct JustWidthDeltaGroup {
  UInt32 count;
  JustWidthDeltaEntry entries[1];
};
typedef struct JustWidthDeltaGroup JustWidthDeltaGroup;

struct JustPostcompTable {
  SFNTLookupTable lookupTable;

};
typedef struct JustPostcompTable JustPostcompTable;
struct JustDirectionTable {
  UInt16 justClass;
  UInt16 widthDeltaClusters;
  UInt16 postcomp;
  SFNTLookupTable lookup;
};
typedef struct JustDirectionTable JustDirectionTable;
struct JustTable {
  Fixed version;
  UInt16 format;
  UInt16 horizHeaderOffset;
  UInt16 vertHeaderOffset;
};
typedef struct JustTable JustTable;



enum {
  kOPBDTag = 0x6F706264,
  kOPBDCurrentVersion = 0x00010000,
  kOPBDDistanceFormat = 0,
  kOPBDControlPointFormat = 1
};



typedef UInt16 OpbdTableFormat;





struct OpbdSideValues {
  SInt16 leftSideShift;
  SInt16 topSideShift;
  SInt16 rightSideShift;
  SInt16 bottomSideShift;
};
typedef struct OpbdSideValues OpbdSideValues;
struct OpbdTable {
  Fixed version;
  OpbdTableFormat format;
  SFNTLookupTable lookupTable;
};
typedef struct OpbdTable OpbdTable;



enum {
  kMORTTag = 0x6D6F7274,
  kMORTCurrentVersion = 0x00010000,

  kMORTCoverVertical = 0x8000,
  kMORTCoverDescending = 0x4000,
  kMORTCoverIgnoreVertical = 0x2000,
  kMORTCoverTypeMask = 0x000F,
  kMORTRearrangementType = 0,
  kMORTContextualType = 1,
  kMORTLigatureType = 2,
  kMORTSwashType = 4,
  kMORTInsertionType = 5,
  kMORTLigLastAction = (long)0x80000000,
  kMORTLigStoreLigature = 0x40000000,
  kMORTLigFormOffsetMask = 0x3FFFFFFF,
  kMORTLigFormOffsetShift = 2,
  kMORTraNoAction = 0,
  kMORTraxA = 1,
  kMORTraDx = 2,
  kMORTraDxA = 3,
  kMORTraxAB = 4,
  kMORTraxBA = 5,
  kMORTraCDx = 6,
  kMORTraDCx = 7,
  kMORTraCDxA = 8,
  kMORTraDCxA = 9,
  kMORTraDxAB = 10,
  kMORTraDxBA = 11,
  kMORTraCDxAB = 12,
  kMORTraCDxBA = 13,
  kMORTraDCxAB = 14,
  kMORTraDCxBA = 15,

  kMORTDoInsertionsBefore = 0x80,
  kMORTIsSplitVowelPiece = 0x40,
  kMORTInsertionsCountMask = 0x3F,
  kMORTCurrInsertKashidaLike = 0x2000,
  kMORTMarkInsertKashidaLike = 0x1000,
  kMORTCurrInsertBefore = 0x0800,
  kMORTMarkInsertBefore = 0x0400,
  kMORTMarkJustTableCountMask = 0x3F80,
  kMORTMarkJustTableCountShift = 7,
  kMORTCurrJustTableCountMask = 0x007F,
  kMORTCurrJustTableCountShift = 0,
  kMORTCurrInsertCountMask = 0x03E0,
  kMORTCurrInsertCountShift = 5,
  kMORTMarkInsertCountMask = 0x001F,
  kMORTMarkInsertCountShift = 0
};



typedef UInt32 MortSubtableMaskFlags;
typedef UInt32 MortLigatureActionEntry;
struct MortRearrangementSubtable {
  STHeader header;
};
typedef struct MortRearrangementSubtable MortRearrangementSubtable;
struct MortContextualSubtable {
  STHeader header;
  UInt16 substitutionTableOffset;
};
typedef struct MortContextualSubtable MortContextualSubtable;
struct MortLigatureSubtable {
  STHeader header;
  UInt16 ligatureActionTableOffset;
  UInt16 componentTableOffset;
  UInt16 ligatureTableOffset;
};
typedef struct MortLigatureSubtable MortLigatureSubtable;
struct MortSwashSubtable {
  SFNTLookupTable lookup;
};
typedef struct MortSwashSubtable MortSwashSubtable;
struct MortInsertionSubtable {
  STHeader header;
};
typedef struct MortInsertionSubtable MortInsertionSubtable;
union MortSpecificSubtable {
  MortRearrangementSubtable rearrangement;
  MortContextualSubtable contextual;
  MortLigatureSubtable ligature;
  MortSwashSubtable swash;
  MortInsertionSubtable insertion;
};
typedef union MortSpecificSubtable MortSpecificSubtable;
struct MortSubtable {
  UInt16 length;
  UInt16 coverage;
  MortSubtableMaskFlags flags;
  MortSpecificSubtable u;
};
typedef struct MortSubtable MortSubtable;
struct MortFeatureEntry {
  UInt16 featureType;
  UInt16 featureSelector;
  MortSubtableMaskFlags enableFlags;
  MortSubtableMaskFlags disableFlags;
};
typedef struct MortFeatureEntry MortFeatureEntry;
struct MortChain {
  MortSubtableMaskFlags defaultFlags;
  UInt32 length;
  UInt16 nFeatures;
  UInt16 nSubtables;
  MortFeatureEntry featureEntries[1];

};
typedef struct MortChain MortChain;
struct MortTable {
  Fixed version;
  UInt32 nChains;
  MortChain chains[1];
};
typedef struct MortTable MortTable;



enum {
  kMORXTag = 0x6D6F7278,
  kMORXCurrentVersion = 0x00020000,

  kMORXCoverVertical = (long)0x80000000,
  kMORXCoverDescending = 0x40000000,
  kMORXCoverIgnoreVertical = 0x20000000,
  kMORXCoverTypeMask = 0x000000FF
};


struct MorxRearrangementSubtable {
  STXHeader header;
};
typedef struct MorxRearrangementSubtable MorxRearrangementSubtable;
struct MorxContextualSubtable {
  STXHeader header;
  UInt32 substitutionTableOffset;
};
typedef struct MorxContextualSubtable MorxContextualSubtable;
struct MorxLigatureSubtable {
  STXHeader header;
  UInt32 ligatureActionTableOffset;
  UInt32 componentTableOffset;
  UInt32 ligatureTableOffset;
};
typedef struct MorxLigatureSubtable MorxLigatureSubtable;
struct MorxInsertionSubtable {
  STXHeader header;
  UInt32 insertionGlyphTableOffset;
};
typedef struct MorxInsertionSubtable MorxInsertionSubtable;
union MorxSpecificSubtable {
  MorxRearrangementSubtable rearrangement;
  MorxContextualSubtable contextual;
  MorxLigatureSubtable ligature;
  MortSwashSubtable swash;
  MorxInsertionSubtable insertion;
};
typedef union MorxSpecificSubtable MorxSpecificSubtable;
struct MorxSubtable {
  UInt32 length;
  UInt32 coverage;
  MortSubtableMaskFlags flags;
  MorxSpecificSubtable u;
};
typedef struct MorxSubtable MorxSubtable;
struct MorxChain {
  MortSubtableMaskFlags defaultFlags;
  UInt32 length;
  UInt32 nFeatures;
  UInt32 nSubtables;
  MortFeatureEntry featureEntries[1];

};
typedef struct MorxChain MorxChain;
struct MorxTable {
  Fixed version;
  UInt32 nChains;
  MorxChain chains[1];
};
typedef struct MorxTable MorxTable;



enum {
  kPROPTag = 0x70726F70,
  kPROPCurrentVersion = 0x00030000,
  kPROPPairOffsetShift = 8,
  kPROPPairOffsetSign = 7,
  kPROPIsFloaterMask = 0x8000,
  kPROPCanHangLTMask = 0x4000,
  kPROPCanHangRBMask = 0x2000,
  kPROPUseRLPairMask = 0x1000,
  kPROPPairOffsetMask = 0x0F00,
  kPROPRightConnectMask = 0x0080,
  kPROPZeroReserved = 0x0060,
  kPROPDirectionMask = 0x001F
};


enum {
  kPROPLDirectionClass = 0,
  kPROPRDirectionClass = 1,
  kPROPALDirectionClass = 2,
  kPROPENDirectionClass = 3,
  kPROPESDirectionClass = 4,
  kPROPETDirectionClass = 5,
  kPROPANDirectionClass = 6,
  kPROPCSDirectionClass = 7,
  kPROPPSDirectionClass = 8,
  kPROPSDirectionClass = 9,
  kPROPWSDirectionClass = 10,
  kPROPONDirectionClass = 11,
  kPROPSENDirectionClass = 12,
  kPROPLREDirectionClass = 13,
  kPROPLRODirectionClass = 14,
  kPROPRLEDirectionClass = 15,
  kPROPRLODirectionClass = 16,
  kPROPPDFDirectionClass = 17,
  kPROPNSMDirectionClass = 18,
  kPROPBNDirectionClass = 19,
  kPROPNumDirectionClasses = 20
};



typedef UInt16 PropCharProperties;
struct PropTable {
  Fixed version;
  UInt16 format;
  PropCharProperties defaultProps;
  SFNTLookupTable lookup;
};
typedef struct PropTable PropTable;
struct PropLookupSegment {
  UInt16 lastGlyph;
  UInt16 firstGlyph;
  UInt16 value;
};
typedef struct PropLookupSegment PropLookupSegment;
struct PropLookupSingle {
  UInt16 glyph;
  PropCharProperties props;
};
typedef struct PropLookupSingle PropLookupSingle;



enum {
  kTRAKTag = 0x7472616B,
  kTRAKCurrentVersion = 0x00010000,
  kTRAKUniformFormat = 0
};



typedef SInt16 TrakValue;
struct TrakTableEntry {
  Fixed track;
  UInt16 nameTableIndex;
  UInt16 sizesOffset;
};
typedef struct TrakTableEntry TrakTableEntry;
struct TrakTableData {
  UInt16 nTracks;
  UInt16 nSizes;
  UInt32 sizeTableOffset;
  TrakTableEntry trakTable[1];
};
typedef struct TrakTableData TrakTableData;
struct TrakTable {
  Fixed version;
  UInt16 format;
  UInt16 horizOffset;
  UInt16 vertOffset;
};
typedef struct TrakTable TrakTable;



enum {
  kKERNTag = 0x6B65726E,
  kKERNCurrentVersion = 0x00010000,
  kKERNVertical = 0x8000,
  kKERNResetCrossStream = 0x8000,
  kKERNCrossStream = 0x4000,
  kKERNVariation = 0x2000,
  kKERNUnusedBits = 0x1F00,
  kKERNFormatMask = 0x00FF
};

enum {
  kKERNOrderedList = 0,
  kKERNStateTable = 1,
  kKERNSimpleArray = 2,
  kKERNIndexArray = 3
};


enum {
  kKERNLineStart = 0x00000001,
  kKERNLineEndKerning = 0x00000002,
  kKERNNoCrossKerning = 0x00000004,
  kKERNNotesRequested = 0x00000008,
  kKERNNoStakeNote = 1,
  kKERNCrossStreamResetNote = 2,
  kKERNNotApplied = 0x00000001
};



typedef UInt8 KernTableFormat;
typedef UInt16 KernSubtableInfo;
typedef SInt16 KernKerningValue;
typedef UInt16 KernArrayOffset;

struct KernVersion0Header {
  UInt16 version;
  UInt16 nTables;
  UInt16 firstSubtable[1];
};
typedef struct KernVersion0Header KernVersion0Header;

struct KernTableHeader {
  Fixed version;
  SInt32 nTables;
  UInt16 firstSubtable[1];
};
typedef struct KernTableHeader KernTableHeader;
typedef KernTableHeader * KernTableHeaderPtr;
typedef KernTableHeaderPtr * KernTableHeaderHandle;
# 1213 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTLayoutTypes.h" 3
struct KernKerningPair {
  UInt16 left;
  UInt16 right;
};
typedef struct KernKerningPair KernKerningPair;

struct KernOrderedListEntry {
  KernKerningPair pair;
  KernKerningValue value;
};
typedef struct KernOrderedListEntry KernOrderedListEntry;
typedef KernOrderedListEntry * KernOrderedListEntryPtr;

struct KernOrderedListHeader {
  UInt16 nPairs;
  UInt16 searchRange;
  UInt16 entrySelector;
  UInt16 rangeShift;
  UInt16 table[1];
};
typedef struct KernOrderedListHeader KernOrderedListHeader;

struct KernStateHeader {
  STHeader header;
  UInt16 valueTable;
  UInt8 firstTable[1];
};
typedef struct KernStateHeader KernStateHeader;
struct KernStateEntry {
  UInt16 newState;
  UInt16 flags;
};
typedef struct KernStateEntry KernStateEntry;






struct KernOffsetTable {
  UInt16 firstGlyph;
  UInt16 nGlyphs;
  KernArrayOffset offsetTable[1];
};
typedef struct KernOffsetTable KernOffsetTable;
typedef KernOffsetTable * KernOffsetTablePtr;
# 1278 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTLayoutTypes.h" 3
struct KernSimpleArrayHeader {
  UInt16 rowWidth;
  UInt16 leftOffsetTable;
  UInt16 rightOffsetTable;
  KernArrayOffset theArray;
  UInt16 firstTable[1];
};
typedef struct KernSimpleArrayHeader KernSimpleArrayHeader;

struct KernIndexArrayHeader {
  UInt16 glyphCount;
  UInt8 kernValueCount;
  UInt8 leftClassCount;
  UInt8 rightClassCount;
  UInt8 flags;
  SInt16 kernValue[1];
  UInt8 leftClass[1];
  UInt8 rightClass[1];
  UInt8 kernIndex[1];
};
typedef struct KernIndexArrayHeader KernIndexArrayHeader;

union KernFormatSpecificHeader {
  KernOrderedListHeader orderedList;
  KernStateHeader stateTable;
  KernSimpleArrayHeader simpleArray;
  KernIndexArrayHeader indexArray;
};
typedef union KernFormatSpecificHeader KernFormatSpecificHeader;

struct KernVersion0SubtableHeader {
  UInt16 version;
  UInt16 length;
  KernSubtableInfo stInfo;
  KernFormatSpecificHeader fsHeader;
};
typedef struct KernVersion0SubtableHeader KernVersion0SubtableHeader;

struct KernSubtableHeader {
  SInt32 length;
  KernSubtableInfo stInfo;
  SInt16 tupleIndex;
  KernFormatSpecificHeader fsHeader;
};
typedef struct KernSubtableHeader KernSubtableHeader;
typedef KernSubtableHeader * KernSubtableHeaderPtr;



enum {
  kBSLNTag = 0x62736C6E,
  kBSLNCurrentVersion = 0x00010000,
  kBSLNDistanceFormatNoMap = 0,
  kBSLNDistanceFormatWithMap = 1,
  kBSLNControlPointFormatNoMap = 2,
  kBSLNControlPointFormatWithMap = 3
};


enum {
  kBSLNRomanBaseline = 0,
  kBSLNIdeographicCenterBaseline = 1,
  kBSLNIdeographicLowBaseline = 2,
  kBSLNHangingBaseline = 3,
  kBSLNMathBaseline = 4,
  kBSLNLastBaseline = 31,
  kBSLNNumBaselineClasses = kBSLNLastBaseline + 1,
  kBSLNNoBaselineOverride = 255
};


typedef UInt32 BslnBaselineClass;

typedef Fixed BslnBaselineRecord[32];




struct BslnFormat0Part {
  SInt16 deltas[32];
};
typedef struct BslnFormat0Part BslnFormat0Part;

struct BslnFormat1Part {
  SInt16 deltas[32];
  SFNTLookupTable mappingData;
};
typedef struct BslnFormat1Part BslnFormat1Part;






struct BslnFormat2Part {
  UInt16 stdGlyph;
  SInt16 ctlPoints[32];
};
typedef struct BslnFormat2Part BslnFormat2Part;





struct BslnFormat3Part {
  UInt16 stdGlyph;
  SInt16 ctlPoints[32];
  SFNTLookupTable mappingData;
};
typedef struct BslnFormat3Part BslnFormat3Part;

union BslnFormatUnion {
  BslnFormat0Part fmt0Part;
  BslnFormat1Part fmt1Part;
  BslnFormat2Part fmt2Part;
  BslnFormat3Part fmt3Part;
};
typedef union BslnFormatUnion BslnFormatUnion;


typedef UInt16 BslnTableFormat;

struct BslnTable {
  Fixed version;
  BslnTableFormat format;
  UInt16 defaultBaseline;
  BslnFormatUnion parts;
};
typedef struct BslnTable BslnTable;
typedef BslnTable * BslnTablePtr;


#pragma pack(pop)
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern "C" {


#pragma pack(push, 2)
# 63 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
typedef Float32Point ATSPoint;
# 78 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
typedef FSSpec ATSFSSpec;



typedef UInt32 FMGeneration;







typedef SInt16 FMFontFamily;
typedef SInt16 FMFontStyle;
typedef SInt16 FMFontSize;







typedef UInt32 FMFont;
struct FMFontFamilyInstance {
  FMFontFamily fontFamily;
  FMFontStyle fontStyle;
};
typedef struct FMFontFamilyInstance FMFontFamilyInstance;
struct FMFontFamilyIterator {
  UInt32 reserved[16];
};
typedef struct FMFontFamilyIterator FMFontFamilyIterator;
struct FMFontIterator {
  UInt32 reserved[16];
};
typedef struct FMFontIterator FMFontIterator;
struct FMFontFamilyInstanceIterator {
  UInt32 reserved[16];
};
typedef struct FMFontFamilyInstanceIterator FMFontFamilyInstanceIterator;
enum {
  kInvalidGeneration = 0L,
  kInvalidFontFamily = -1,
  kInvalidFont = 0L
};

enum {
  kFMCurrentFilterFormat = 0L
};

typedef UInt32 FMFilterSelector;
enum {
  kFMFontTechnologyFilterSelector = 1L,
  kFMFontContainerFilterSelector = 2L,
  kFMGenerationFilterSelector = 3L,
  kFMFontFamilyCallbackFilterSelector = 4L,
  kFMFontCallbackFilterSelector = 5L,
  kFMFontDirectoryFilterSelector = 6L,
  kFMFontFileRefFilterSelector = 7L
};

enum {
  kFMTrueTypeFontTechnology = 'true',
  kFMPostScriptFontTechnology = 'typ1'
};

typedef OSStatus ( * FMFontFamilyCallbackFilterProcPtr)(FMFontFamily iFontFamily, void *iRefCon);
typedef OSStatus ( * FMFontCallbackFilterProcPtr)(FMFont iFont, void *iRefCon);
typedef FMFontFamilyCallbackFilterProcPtr FMFontFamilyCallbackFilterUPP;
typedef FMFontCallbackFilterProcPtr FMFontCallbackFilterUPP;
# 156 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern FMFontFamilyCallbackFilterUPP
NewFMFontFamilyCallbackFilterUPP(FMFontFamilyCallbackFilterProcPtr userRoutine) ;
# 167 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern FMFontCallbackFilterUPP
NewFMFontCallbackFilterUPP(FMFontCallbackFilterProcPtr userRoutine) ;
# 178 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern void
DisposeFMFontFamilyCallbackFilterUPP(FMFontFamilyCallbackFilterUPP userUPP) ;
# 189 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern void
DisposeFMFontCallbackFilterUPP(FMFontCallbackFilterUPP userUPP) ;
# 200 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern OSStatus
InvokeFMFontFamilyCallbackFilterUPP(
  FMFontFamily iFontFamily,
  void * iRefCon,
  FMFontFamilyCallbackFilterUPP userUPP) ;
# 214 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
extern OSStatus
InvokeFMFontCallbackFilterUPP(
  FMFont iFont,
  void * iRefCon,
  FMFontCallbackFilterUPP userUPP) ;



    inline FMFontFamilyCallbackFilterUPP NewFMFontFamilyCallbackFilterUPP(FMFontFamilyCallbackFilterProcPtr userRoutine) { return userRoutine; }
    inline FMFontCallbackFilterUPP NewFMFontCallbackFilterUPP(FMFontCallbackFilterProcPtr userRoutine) { return userRoutine; }
    inline void DisposeFMFontFamilyCallbackFilterUPP(FMFontFamilyCallbackFilterUPP) { }
    inline void DisposeFMFontCallbackFilterUPP(FMFontCallbackFilterUPP) { }
    inline OSStatus InvokeFMFontFamilyCallbackFilterUPP(FMFontFamily iFontFamily, void * iRefCon, FMFontFamilyCallbackFilterUPP userUPP) { return (*userUPP)(iFontFamily, iRefCon); }
    inline OSStatus InvokeFMFontCallbackFilterUPP(FMFont iFont, void * iRefCon, FMFontCallbackFilterUPP userUPP) { return (*userUPP)(iFont, iRefCon); }
# 238 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 3
struct FMFontDirectoryFilter {
  SInt16 fontFolderDomain;
  UInt32 reserved[2];
};
typedef struct FMFontDirectoryFilter FMFontDirectoryFilter;




struct FMFilter {
  UInt32 format;
  FMFilterSelector selector;
  union {
    FourCharCode fontTechnologyFilter;
    ATSFSSpec fontContainerFilter;
    FMGeneration generationFilter;
    FMFontFamilyCallbackFilterUPP fontFamilyCallbackFilter;
    FMFontCallbackFilterUPP fontCallbackFilter;
    FMFontDirectoryFilter fontDirectoryFilter;
    FSRef fontFileRefFilter;
  } filter;
};
typedef struct FMFilter FMFilter;

typedef OptionBits ATSOptionFlags;
typedef UInt32 ATSGeneration;
typedef UInt32 ATSFontContainerRef;
typedef UInt32 ATSFontFamilyRef;
typedef UInt32 ATSFontRef;
typedef UInt16 ATSGlyphRef;
typedef CGFloat ATSFontSize;
typedef UInt32 ATSFontFormat;
enum {
  kATSFontFormatUnspecified = 0
};

enum {
  kATSGenerationUnspecified = 0L,
  kATSFontContainerRefUnspecified = 0L,
  kATSFontFamilyRefUnspecified = 0L,
  kATSFontRefUnspecified = 0L
};

struct ATSFontMetrics {
  UInt32 version;
  CGFloat ascent;

  CGFloat descent;

  CGFloat leading;
  CGFloat avgAdvanceWidth;
  CGFloat maxAdvanceWidth;
  CGFloat minLeftSideBearing;
  CGFloat minRightSideBearing;
  CGFloat stemWidth;
  CGFloat stemHeight;
  CGFloat capHeight;
  CGFloat xHeight;
  CGFloat italicAngle;
  CGFloat underlinePosition;
  CGFloat underlineThickness;
};
typedef struct ATSFontMetrics ATSFontMetrics;
enum {
  kATSItalicQDSkew = (1 << 16) / 4,
  kATSBoldQDStretch = (1 << 16) * 3 / 2,
  kATSRadiansFactor = 1144
};


typedef UInt16 ATSCurveType;
enum {
  kATSCubicCurveType = 0x0001,
  kATSQuadCurveType = 0x0002,
  kATSOtherCurveType = 0x0003
};






enum {
  kATSDeletedGlyphcode = 0xFFFF
};

struct ATSUCurvePath {
  UInt32 vectors;
  UInt32 controlBits[1];
  ATSPoint vector[1];
};
typedef struct ATSUCurvePath ATSUCurvePath;
struct ATSUCurvePaths {
  UInt32 contours;
  ATSUCurvePath contour[1];
};
typedef struct ATSUCurvePaths ATSUCurvePaths;

struct ATSGlyphIdealMetrics {
  ATSPoint advance;
  ATSPoint sideBearing;
  ATSPoint otherSideBearing;
};
typedef struct ATSGlyphIdealMetrics ATSGlyphIdealMetrics;

struct ATSGlyphScreenMetrics {
  ATSPoint deviceAdvance;
  ATSPoint topLeft;
  UInt32 height;
  UInt32 width;
  ATSPoint sideBearing;
  ATSPoint otherSideBearing;
};
typedef struct ATSGlyphScreenMetrics ATSGlyphScreenMetrics;


typedef ATSGlyphRef GlyphID;

#pragma pack(pop)


}
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 2 3
# 39 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
extern "C" {


#pragma pack(push, 2)







enum {
  kATSUseGlyphAdvance = 0x7FFFFFFF,
  kATSUseLineHeight = 0x7FFFFFFF,
  kATSNoTracking = (long)0x80000000
};
# 65 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
enum {






  kATSUseCaretOrigins = 0,






  kATSUseDeviceOrigins = 1,
# 89 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
  kATSUseFractionalOrigins = 2,
  kATSUseOriginFlags = 3
};
# 102 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef UInt32 ATSULayoutOperationSelector;
enum {




  kATSULayoutOperationNone = 0x00000000,




  kATSULayoutOperationJustification = 0x00000001,




  kATSULayoutOperationMorph = 0x00000002,




  kATSULayoutOperationKerningAdjustment = 0x00000004,




  kATSULayoutOperationBaselineAdjustment = 0x00000008,




  kATSULayoutOperationTrackingAdjustment = 0x00000010,





  kATSULayoutOperationPostLayoutAdjustment = 0x00000020,
  kATSULayoutOperationAppleReserved = (UInt32)0xFFFFFFC0
};
# 153 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef UInt32 ATSULayoutOperationCallbackStatus;
enum {






  kATSULayoutOperationCallbackStatusHandled = 0x00000000,






  kATSULayoutOperationCallbackStatusContinue = 0x00000001
};
# 181 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef UInt32 ATSLineLayoutOptions;
enum {




  kATSLineNoLayoutOptions = 0x00000000,




  kATSLineIsDisplayOnly = 0x00000001,




  kATSLineHasNoHangers = 0x00000002,




  kATSLineHasNoOpticalAlignment = 0x00000004,




  kATSLineKeepSpacesOutOfMargin = 0x00000008,




  kATSLineNoSpecialJustification = 0x00000010,





  kATSLineLastNoJustification = 0x00000020,





  kATSLineFractDisable = 0x00000040,





  kATSLineImposeNoAngleForEnds = 0x00000080,





  kATSLineFillOutToWidth = 0x00000100,





  kATSLineTabAdjustEnabled = 0x00000200,





  kATSLineIgnoreFontLeading = 0x00000400,





  kATSLineApplyAntiAliasing = 0x00000800,





  kATSLineNoAntiAliasing = 0x00001000,






  kATSLineDisableNegativeJustification = 0x00002000,







  kATSLineDisableAutoAdjustDisplayPos = 0x00004000,





  kATSLineUseQDRendering = 0x00008000,




  kATSLineDisableAllJustification = 0x00010000,




  kATSLineDisableAllGlyphMorphing = 0x00020000,




  kATSLineDisableAllKerningAdjustments = 0x00040000,




  kATSLineDisableAllBaselineAdjustments = 0x00080000,




  kATSLineDisableAllTrackingAdjustments = 0x00100000,




  kATSLineDisableAllLayoutOperations = kATSLineDisableAllJustification | kATSLineDisableAllGlyphMorphing | kATSLineDisableAllKerningAdjustments | kATSLineDisableAllBaselineAdjustments | kATSLineDisableAllTrackingAdjustments,





  kATSLineUseDeviceMetrics = 0x01000000,






  kATSLineBreakToNearestCharacter = 0x02000000,





  kATSLineAppleReserved = (UInt32)0xFCE00000
};
# 343 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef UInt32 ATSStyleRenderingOptions;
enum {




  kATSStyleNoOptions = 0x00000000,





  kATSStyleNoHinting = 0x00000001,






  kATSStyleApplyAntiAliasing = 0x00000002,






  kATSStyleNoAntiAliasing = 0x00000004,





  kATSStyleAppleReserved = (UInt32)0xFFFFFFF8,






  kATSStyleApplyHints = kATSStyleNoOptions
};
# 398 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef UInt32 ATSGlyphInfoFlags;
enum {





  kATSGlyphInfoAppleReserved = 0x1FFBFFE8,




  kATSGlyphInfoIsAttachment = (UInt32)0x80000000,




  kATSGlyphInfoIsLTHanger = 0x40000000,




  kATSGlyphInfoIsRBHanger = 0x20000000,





  kATSGlyphInfoTerminatorGlyph = 0x00080000,




  kATSGlyphInfoIsWhiteSpace = 0x00040000,




  kATSGlyphInfoHasImposedWidth = 0x00000010,







  kATSGlyphInfoByteSizeMask = 0x00000007
};
# 460 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
struct ATSLayoutRecord {




  ATSGlyphRef glyphID;




  ATSGlyphInfoFlags flags;




  ByteCount originalOffset;




  Fixed realPos;
};
typedef struct ATSLayoutRecord ATSLayoutRecord;
# 492 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
struct ATSTrapezoid {
  FixedPoint upperLeft;
  FixedPoint upperRight;
  FixedPoint lowerRight;
  FixedPoint lowerLeft;
};
typedef struct ATSTrapezoid ATSTrapezoid;
# 512 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
struct ATSJustWidthDeltaEntryOverride {




  Fixed beforeGrowLimit;




  Fixed beforeShrinkLimit;




  Fixed afterGrowLimit;




  Fixed afterShrinkLimit;




  JustificationFlags growFlags;




  JustificationFlags shrinkFlags;
};
typedef struct ATSJustWidthDeltaEntryOverride ATSJustWidthDeltaEntryOverride;

typedef ATSJustWidthDeltaEntryOverride ATSJustPriorityWidthDeltaOverrides[4];
# 559 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef struct ATSGlyphVector* ATSULineRef;
# 598 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
typedef OSStatus ( * ATSUDirectLayoutOperationOverrideProcPtr)(ATSULayoutOperationSelector iCurrentOperation, ATSULineRef iLineRef, URefCon iRefCon, void *iOperationCallbackParameterPtr, ATSULayoutOperationCallbackStatus *oCallbackStatus);
typedef ATSUDirectLayoutOperationOverrideProcPtr ATSUDirectLayoutOperationOverrideUPP;
# 608 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
extern ATSUDirectLayoutOperationOverrideUPP
NewATSUDirectLayoutOperationOverrideUPP(ATSUDirectLayoutOperationOverrideProcPtr userRoutine) ;
# 619 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
extern void
DisposeATSUDirectLayoutOperationOverrideUPP(ATSUDirectLayoutOperationOverrideUPP userUPP) ;
# 630 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
extern OSStatus
InvokeATSUDirectLayoutOperationOverrideUPP(
  ATSULayoutOperationSelector iCurrentOperation,
  ATSULineRef iLineRef,
  URefCon iRefCon,
  void * iOperationCallbackParameterPtr,
  ATSULayoutOperationCallbackStatus * oCallbackStatus,
  ATSUDirectLayoutOperationOverrideUPP userUPP) ;



    inline ATSUDirectLayoutOperationOverrideUPP NewATSUDirectLayoutOperationOverrideUPP(ATSUDirectLayoutOperationOverrideProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSUDirectLayoutOperationOverrideUPP(ATSUDirectLayoutOperationOverrideUPP) { }
    inline OSStatus InvokeATSUDirectLayoutOperationOverrideUPP(ATSULayoutOperationSelector iCurrentOperation, ATSULineRef iLineRef, URefCon iRefCon, void * iOperationCallbackParameterPtr, ATSULayoutOperationCallbackStatus * oCallbackStatus, ATSUDirectLayoutOperationOverrideUPP userUPP) { return (*userUPP)(iCurrentOperation, iLineRef, iRefCon, iOperationCallbackParameterPtr, oCallbackStatus); }
# 662 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSLayoutTypes.h" 3
struct ATSULayoutOperationOverrideSpecifier {






  ATSULayoutOperationSelector operationSelector;
  ATSUDirectLayoutOperationOverrideUPP overrideUPP;

};
typedef struct ATSULayoutOperationOverrideSpecifier ATSULayoutOperationOverrideSpecifier;

#pragma pack(pop)


}
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATS.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 1 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTTypes.h" 1 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/SFNTTypes.h" 3
#pragma pack(push, 2)

struct sfntDirectoryEntry {
  FourCharCode tableTag;
  UInt32 checkSum;
  UInt32 offset;
  UInt32 length;
};
typedef struct sfntDirectoryEntry sfntDirectoryEntry;

struct sfntDirectory {
  FourCharCode format;
  UInt16 numOffsets;
  UInt16 searchRange;
  UInt16 entrySelector;
  UInt16 rangeShift;
  sfntDirectoryEntry table[1];
};
typedef struct sfntDirectory sfntDirectory;
enum {
  sizeof_sfntDirectory = 12
};


enum {
  cmapFontTableTag = 'cmap'
};

enum {
  kFontUnicodePlatform = 0,
  kFontMacintoshPlatform = 1,
  kFontReservedPlatform = 2,
  kFontMicrosoftPlatform = 3,
  kFontCustomPlatform = 4
};

enum {
  kFontUnicodeDefaultSemantics = 0,
  kFontUnicodeV1_1Semantics = 1,
  kFontISO10646_1993Semantics = 2
};

enum {
  kFontRomanScript = 0,
  kFontJapaneseScript = 1,
  kFontTraditionalChineseScript = 2,
  kFontChineseScript = kFontTraditionalChineseScript,
  kFontKoreanScript = 3,
  kFontArabicScript = 4,
  kFontHebrewScript = 5,
  kFontGreekScript = 6,
  kFontCyrillicScript = 7,
  kFontRussian = kFontCyrillicScript,
  kFontRSymbolScript = 8,
  kFontDevanagariScript = 9,
  kFontGurmukhiScript = 10,
  kFontGujaratiScript = 11,
  kFontOriyaScript = 12,
  kFontBengaliScript = 13,
  kFontTamilScript = 14,
  kFontTeluguScript = 15,
  kFontKannadaScript = 16,
  kFontMalayalamScript = 17,
  kFontSinhaleseScript = 18,
  kFontBurmeseScript = 19,
  kFontKhmerScript = 20,
  kFontThaiScript = 21,
  kFontLaotianScript = 22,
  kFontGeorgianScript = 23,
  kFontArmenianScript = 24,
  kFontSimpleChineseScript = 25,
  kFontTibetanScript = 26,
  kFontMongolianScript = 27,
  kFontGeezScript = 28,
  kFontEthiopicScript = kFontGeezScript,
  kFontAmharicScript = kFontGeezScript,
  kFontSlavicScript = 29,
  kFontEastEuropeanRomanScript = kFontSlavicScript,
  kFontVietnameseScript = 30,
  kFontExtendedArabicScript = 31,
  kFontSindhiScript = kFontExtendedArabicScript,
  kFontUninterpretedScript = 32
};

enum {
  kFontMicrosoftSymbolScript = 0,
  kFontMicrosoftStandardScript = 1,
  kFontMicrosoftUCS4Script = 10
};


enum {
  kFontCustom8BitScript = 0,
  kFontCustom816BitScript = 1,
  kFontCustom16BitScript = 2
};


enum {
  kFontEnglishLanguage = 0,
  kFontFrenchLanguage = 1,
  kFontGermanLanguage = 2,
  kFontItalianLanguage = 3,
  kFontDutchLanguage = 4,
  kFontSwedishLanguage = 5,
  kFontSpanishLanguage = 6,
  kFontDanishLanguage = 7,
  kFontPortugueseLanguage = 8,
  kFontNorwegianLanguage = 9,
  kFontHebrewLanguage = 10,
  kFontJapaneseLanguage = 11,
  kFontArabicLanguage = 12,
  kFontFinnishLanguage = 13,
  kFontGreekLanguage = 14,
  kFontIcelandicLanguage = 15,
  kFontMalteseLanguage = 16,
  kFontTurkishLanguage = 17,
  kFontCroatianLanguage = 18,
  kFontTradChineseLanguage = 19,
  kFontUrduLanguage = 20,
  kFontHindiLanguage = 21,
  kFontThaiLanguage = 22,
  kFontKoreanLanguage = 23,
  kFontLithuanianLanguage = 24,
  kFontPolishLanguage = 25,
  kFontHungarianLanguage = 26,
  kFontEstonianLanguage = 27,
  kFontLettishLanguage = 28,
  kFontLatvianLanguage = kFontLettishLanguage,
  kFontSaamiskLanguage = 29,
  kFontLappishLanguage = kFontSaamiskLanguage,
  kFontFaeroeseLanguage = 30,
  kFontFarsiLanguage = 31,
  kFontPersianLanguage = kFontFarsiLanguage,
  kFontRussianLanguage = 32,
  kFontSimpChineseLanguage = 33,
  kFontFlemishLanguage = 34,
  kFontIrishLanguage = 35,
  kFontAlbanianLanguage = 36,
  kFontRomanianLanguage = 37,
  kFontCzechLanguage = 38,
  kFontSlovakLanguage = 39,
  kFontSlovenianLanguage = 40,
  kFontYiddishLanguage = 41,
  kFontSerbianLanguage = 42,
  kFontMacedonianLanguage = 43,
  kFontBulgarianLanguage = 44,
  kFontUkrainianLanguage = 45,
  kFontByelorussianLanguage = 46,
  kFontUzbekLanguage = 47,
  kFontKazakhLanguage = 48,
  kFontAzerbaijaniLanguage = 49,
  kFontAzerbaijanArLanguage = 50,
  kFontArmenianLanguage = 51,
  kFontGeorgianLanguage = 52,
  kFontMoldavianLanguage = 53,
  kFontKirghizLanguage = 54,
  kFontTajikiLanguage = 55,
  kFontTurkmenLanguage = 56,
  kFontMongolianLanguage = 57,
  kFontMongolianCyrLanguage = 58,
  kFontPashtoLanguage = 59,
  kFontKurdishLanguage = 60,
  kFontKashmiriLanguage = 61,
  kFontSindhiLanguage = 62,
  kFontTibetanLanguage = 63,
  kFontNepaliLanguage = 64,
  kFontSanskritLanguage = 65,
  kFontMarathiLanguage = 66,
  kFontBengaliLanguage = 67,
  kFontAssameseLanguage = 68,
  kFontGujaratiLanguage = 69,
  kFontPunjabiLanguage = 70,
  kFontOriyaLanguage = 71,
  kFontMalayalamLanguage = 72,
  kFontKannadaLanguage = 73,
  kFontTamilLanguage = 74,
  kFontTeluguLanguage = 75,
  kFontSinhaleseLanguage = 76,
  kFontBurmeseLanguage = 77,
  kFontKhmerLanguage = 78,
  kFontLaoLanguage = 79,
  kFontVietnameseLanguage = 80,
  kFontIndonesianLanguage = 81,
  kFontTagalogLanguage = 82,
  kFontMalayRomanLanguage = 83,
  kFontMalayArabicLanguage = 84,
  kFontAmharicLanguage = 85,
  kFontTigrinyaLanguage = 86,
  kFontGallaLanguage = 87,
  kFontOromoLanguage = kFontGallaLanguage,
  kFontSomaliLanguage = 88,
  kFontSwahiliLanguage = 89,
  kFontRuandaLanguage = 90,
  kFontRundiLanguage = 91,
  kFontChewaLanguage = 92,
  kFontMalagasyLanguage = 93,
  kFontEsperantoLanguage = 94,
  kFontWelshLanguage = 128,
  kFontBasqueLanguage = 129,
  kFontCatalanLanguage = 130,
  kFontLatinLanguage = 131,
  kFontQuechuaLanguage = 132,
  kFontGuaraniLanguage = 133,
  kFontAymaraLanguage = 134,
  kFontTatarLanguage = 135,
  kFontUighurLanguage = 136,
  kFontDzongkhaLanguage = 137,
  kFontJavaneseRomLanguage = 138,
  kFontSundaneseRomLanguage = 139
};



enum {
    kFontNoPlatformCode = (unsigned int)(~0),
  kFontNoScriptCode = (unsigned int)(~0),
  kFontNoLanguageCode = (unsigned int)(~0)
};

struct sfntCMapSubHeader {
  UInt16 format;
  UInt16 length;
  UInt16 languageID;
};
typedef struct sfntCMapSubHeader sfntCMapSubHeader;
enum {
  sizeof_sfntCMapSubHeader = 6
};

struct sfntCMapExtendedSubHeader {
  UInt16 format;
  UInt16 reserved;
  UInt32 length;
  UInt32 language;
};
typedef struct sfntCMapExtendedSubHeader sfntCMapExtendedSubHeader;
enum {
  sizeof_sfntCMapExtendedSubHeader = 12
};

struct sfntCMapEncoding {
  UInt16 platformID;
  UInt16 scriptID;
  UInt32 offset;
};
typedef struct sfntCMapEncoding sfntCMapEncoding;
enum {
  sizeof_sfntCMapEncoding = 8
};

struct sfntCMapHeader {
  UInt16 version;
  UInt16 numTables;
  sfntCMapEncoding encoding[1];
};
typedef struct sfntCMapHeader sfntCMapHeader;
enum {
  sizeof_sfntCMapHeader = 4
};


enum {
  nameFontTableTag = 'name'
};

enum {
  kFontCopyrightName = 0,
  kFontFamilyName = 1,
  kFontStyleName = 2,
  kFontUniqueName = 3,
  kFontFullName = 4,
  kFontVersionName = 5,
  kFontPostscriptName = 6,
  kFontTrademarkName = 7,
  kFontManufacturerName = 8,
  kFontDesignerName = 9,
  kFontDescriptionName = 10,
  kFontVendorURLName = 11,
  kFontDesignerURLName = 12,
  kFontLicenseDescriptionName = 13,
  kFontLicenseInfoURLName = 14,
  kFontPreferredFamilyName = 16,
  kFontPreferredSubfamilyName = 17,
  kFontMacCompatibleFullName = 18,
  kFontSampleTextName = 19,
  kFontPostScriptCIDName = 20,
  kFontLastReservedName = 255
};



enum {
    kFontNoNameCode = (unsigned int)(~0)
};

struct sfntNameRecord {
  UInt16 platformID;
  UInt16 scriptID;
  UInt16 languageID;
  UInt16 nameID;
  UInt16 length;
  UInt16 offset;
};
typedef struct sfntNameRecord sfntNameRecord;
enum {
  sizeof_sfntNameRecord = 12
};

struct sfntNameHeader {
  UInt16 format;
  UInt16 count;
  UInt16 stringOffset;
  sfntNameRecord rec[1];
};
typedef struct sfntNameHeader sfntNameHeader;
enum {
  sizeof_sfntNameHeader = 6
};


enum {
  variationFontTableTag = 'fvar'
};


struct sfntVariationAxis {
  FourCharCode axisTag;
  Fixed minValue;
  Fixed defaultValue;
  Fixed maxValue;
  SInt16 flags;
  SInt16 nameID;
};
typedef struct sfntVariationAxis sfntVariationAxis;
enum {
  sizeof_sfntVariationAxis = 20
};


struct sfntInstance {
  SInt16 nameID;
  SInt16 flags;
  Fixed coord[1];

};
typedef struct sfntInstance sfntInstance;
enum {
  sizeof_sfntInstance = 4
};

struct sfntVariationHeader {
  Fixed version;
  UInt16 offsetToData;
  UInt16 countSizePairs;
  UInt16 axisCount;
  UInt16 axisSize;
  UInt16 instanceCount;
  UInt16 instanceSize;

  sfntVariationAxis axis[1];
  sfntInstance instance[1];
};
typedef struct sfntVariationHeader sfntVariationHeader;
enum {
  sizeof_sfntVariationHeader = 16
};


enum {
  descriptorFontTableTag = 'fdsc'
};

struct sfntFontDescriptor {
  FourCharCode name;
  Fixed value;
};
typedef struct sfntFontDescriptor sfntFontDescriptor;
struct sfntDescriptorHeader {
  Fixed version;
  SInt32 descriptorCount;
  sfntFontDescriptor descriptor[1];
};
typedef struct sfntDescriptorHeader sfntDescriptorHeader;
enum {
  sizeof_sfntDescriptorHeader = 8
};


enum {
  featureFontTableTag = 'feat'
};

struct sfntFeatureName {
  UInt16 featureType;
  UInt16 settingCount;
  SInt32 offsetToSettings;
  UInt16 featureFlags;
  UInt16 nameID;
};
typedef struct sfntFeatureName sfntFeatureName;
struct sfntFontFeatureSetting {
  UInt16 setting;
  UInt16 nameID;
};
typedef struct sfntFontFeatureSetting sfntFontFeatureSetting;
struct sfntFontRunFeature {
  UInt16 featureType;
  UInt16 setting;
};
typedef struct sfntFontRunFeature sfntFontRunFeature;
struct sfntFeatureHeader {
  SInt32 version;
  UInt16 featureNameCount;
  UInt16 featureSetCount;
  SInt32 reserved;
  sfntFeatureName names[1];
  sfntFontFeatureSetting settings[1];
  sfntFontRunFeature runs[1];
};
typedef struct sfntFeatureHeader sfntFeatureHeader;

enum {
  os2FontTableTag = 'OS/2'
};


enum {
  nonGlyphID = 65535L
};






enum {
    kFontNoPlatform = (unsigned int)(~0),
  kFontNoScript = (unsigned int)(~0),
  kFontNoLanguage = (unsigned int)(~0),
  kFontNoName = (unsigned int)(~0)
};



typedef UInt32 FontNameCode;

typedef UInt32 FontPlatformCode;
typedef UInt32 FontScriptCode;
typedef UInt32 FontLanguageCode;




struct FontVariation {
  FourCharCode name;
  Fixed value;
};
typedef struct FontVariation FontVariation;

#pragma pack(pop)
# 33 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 2 3
# 44 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern "C" {


#pragma pack(push, 2)





enum {
  kATSOptionFlagsDefault = kNilOptions,
  kATSOptionFlagsComposeFontPostScriptName = 1 << 0,
  kATSOptionFlagsUseDataForkAsResourceFork = 1 << 8,
  kATSOptionFlagsUseResourceFork = 2 << 8,
  kATSOptionFlagsUseDataFork = 3 << 8
};

enum {
  kATSIterationCompleted = -980L,
  kATSInvalidFontFamilyAccess = -981L,
  kATSInvalidFontAccess = -982L,
  kATSIterationScopeModified = -983L,
  kATSInvalidFontTableAccess = -984L,
  kATSInvalidFontContainerAccess = -985L,
  kATSInvalidGlyphAccess = -986L
};


typedef UInt32 ATSFontContext;
enum {
  kATSFontContextUnspecified = 0,
  kATSFontContextGlobal = 1,
  kATSFontContextLocal = 2
};

enum {
  kATSOptionFlagsActivateDisabled = 0x00000001 << 5,
  kATSOptionFlagsProcessSubdirectories = 0x00000001 << 6,
  kATSOptionFlagsDoNotNotify = 0x00000001 << 7,
  kATSOptionFlagsRecordPersistently = 0x00000001 << 18
};


enum {
  kATSOptionFlagsIterateByPrecedenceMask = 0x00000001 << 5,
  kATSOptionFlagsIncludeDisabledMask = 0x00000001 << 7,
  kATSOptionFlagsIterationScopeMask = 0x00000007 << 12,
  kATSOptionFlagsDefaultScope = 0x00000000 << 12,
  kATSOptionFlagsUnRestrictedScope = 0x00000001 << 12,
  kATSOptionFlagsRestrictedScope = 0x00000002 << 12
};

typedef OSStatus ( * ATSFontFamilyApplierFunction)(ATSFontFamilyRef iFamily, void *iRefCon);
typedef OSStatus ( * ATSFontApplierFunction)(ATSFontRef iFont, void *iRefCon);
typedef struct ATSFontFamilyIterator_* ATSFontFamilyIterator;
typedef struct ATSFontIterator_* ATSFontIterator;
enum {
  kATSFontFilterCurrentVersion = 0
};

enum ATSFontFilterSelector {
  kATSFontFilterSelectorUnspecified = 0,
  kATSFontFilterSelectorGeneration = 3,
  kATSFontFilterSelectorFontFamily = 7,
  kATSFontFilterSelectorFontFamilyApplierFunction = 8,
  kATSFontFilterSelectorFontApplierFunction = 9
};
typedef enum ATSFontFilterSelector ATSFontFilterSelector;

struct ATSFontFilter {
  UInt32 version;
  ATSFontFilterSelector filterSelector;
  union {
    ATSGeneration generationFilter;
    ATSFontFamilyRef fontFamilyFilter;
    ATSFontFamilyApplierFunction fontFamilyApplierFunctionFilter;
    ATSFontApplierFunction fontApplierFunctionFilter;
  } filter;
};
typedef struct ATSFontFilter ATSFontFilter;

typedef struct ATSFontNotificationRef_* ATSFontNotificationRef;
typedef struct ATSFontNotificationInfoRef_* ATSFontNotificationInfoRef;
# 136 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
enum ATSFontNotifyOption {




  kATSFontNotifyOptionDefault = 0,
# 151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
  kATSFontNotifyOptionReceiveWhileSuspended = 1L << 0
};
typedef enum ATSFontNotifyOption ATSFontNotifyOption;
# 166 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
enum ATSFontNotifyAction {
# 175 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
  kATSFontNotifyActionFontsChanged = 1,
# 185 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
  kATSFontNotifyActionDirectoriesChanged = 2
};
typedef enum ATSFontNotifyAction ATSFontNotifyAction;
# 206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
typedef void ( * ATSNotificationCallback)(ATSFontNotificationInfoRef info, void *refCon);
# 221 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSGeneration
ATSGetGeneration(void) ;
# 274 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontActivateFromFileSpecification(
  const FSSpec * iFile,
  ATSFontContext iContext,
  ATSFontFormat iFormat,
  void * iReserved,
  ATSOptionFlags iOptions,
  ATSFontContainerRef * oContainer) ;
# 331 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontActivateFromFileReference(
  const FSRef * iFile,
  ATSFontContext iContext,
  ATSFontFormat iFormat,
  void * iRefCon,
  ATSOptionFlags iOptions,
  ATSFontContainerRef * oContainer) ;
# 352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontActivateFromMemory(
  LogicalAddress iData,
  ByteCount iLength,
  ATSFontContext iContext,
  ATSFontFormat iFormat,
  void * iReserved,
  ATSOptionFlags iOptions,
  ATSFontContainerRef * oContainer) ;
# 374 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontDeactivate(
  ATSFontContainerRef iContainer,
  void * iRefCon,
  ATSOptionFlags iOptions) ;
# 425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetContainerFromFileReference(
  const FSRef * iFile,
  ATSFontContext iContext,
  ATSOptionFlags iOptions,
  ATSFontContainerRef * oContainer) ;
# 464 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetContainer(
  ATSFontRef iFont,
  ATSOptionFlags iOptions,
  ATSFontContainerRef * oContainer) ;
# 502 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontSetEnabled(
  ATSFontRef iFont,
  ATSOptionFlags iOptions,
  Boolean iEnabled) ;
# 531 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern Boolean
ATSFontIsEnabled(ATSFontRef iFont) ;
# 549 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyApplyFunction(
  ATSFontFamilyApplierFunction iFunction,
  void * iRefCon) ;
# 566 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyIteratorCreate(
  ATSFontContext iContext,
  const ATSFontFilter * iFilter,
  void * iRefCon,
  ATSOptionFlags iOptions,
  ATSFontFamilyIterator * ioIterator) ;
# 586 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyIteratorRelease(ATSFontFamilyIterator * ioIterator) ;
# 601 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyIteratorReset(
  ATSFontContext iContext,
  const ATSFontFilter * iFilter,
  void * iRefCon,
  ATSOptionFlags iOptions,
  ATSFontFamilyIterator * ioIterator) ;
# 621 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyIteratorNext(
  ATSFontFamilyIterator iIterator,
  ATSFontFamilyRef * oFamily) ;
# 638 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSFontFamilyRef
ATSFontFamilyFindFromName(
  CFStringRef iName,
  ATSOptionFlags iOptions) ;
# 655 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSGeneration
ATSFontFamilyGetGeneration(ATSFontFamilyRef iFamily) ;
# 670 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyGetName(
  ATSFontFamilyRef iFamily,
  ATSOptionFlags iOptions,
  CFStringRef * oName) ;
# 688 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern TextEncoding
ATSFontFamilyGetEncoding(ATSFontFamilyRef iFamily) ;
# 706 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontApplyFunction(
  ATSFontApplierFunction iFunction,
  void * iRefCon) ;
# 723 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontIteratorCreate(
  ATSFontContext iContext,
  const ATSFontFilter * iFilter,
  void * iRefCon,
  ATSOptionFlags iOptions,
  ATSFontIterator * ioIterator) ;
# 743 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontIteratorRelease(ATSFontIterator * ioIterator) ;
# 758 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontIteratorReset(
  ATSFontContext iContext,
  const ATSFontFilter * iFilter,
  void * iRefCon,
  ATSOptionFlags iOptions,
  ATSFontIterator * ioIterator) ;
# 778 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontIteratorNext(
  ATSFontIterator iIterator,
  ATSFontRef * oFont) ;
# 795 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSFontRef
ATSFontFindFromName(
  CFStringRef iName,
  ATSOptionFlags iOptions) ;
# 812 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSFontRef
ATSFontFindFromPostScriptName(
  CFStringRef iName,
  ATSOptionFlags iOptions) ;
# 829 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFindFromContainer(
  ATSFontContainerRef iContainer,
  ATSOptionFlags iOptions,
  ItemCount iCount,
  ATSFontRef ioArray[],
  ItemCount * oCount) ;
# 849 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSGeneration
ATSFontGetGeneration(ATSFontRef iFont) ;
# 864 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetName(
  ATSFontRef iFont,
  ATSOptionFlags iOptions,
  CFStringRef * oName) ;
# 882 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetPostScriptName(
  ATSFontRef iFont,
  ATSOptionFlags iOptions,
  CFStringRef * oName) ;
# 900 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetTableDirectory(
  ATSFontRef iFont,
  ByteCount iBufferSize,
  void * ioBuffer,
  ByteCount * oSize) ;
# 919 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetTable(
  ATSFontRef iFont,
  FourCharCode iTag,
  ByteOffset iOffset,
  ByteCount iBufferSize,
  void * ioBuffer,
  ByteCount * oSize) ;
# 940 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetHorizontalMetrics(
  ATSFontRef iFont,
  ATSOptionFlags iOptions,
  ATSFontMetrics * oMetrics) ;
# 958 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetVerticalMetrics(
  ATSFontRef iFont,
  ATSOptionFlags iOptions,
  ATSFontMetrics * oMetrics) ;
# 979 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSFontFamilyRef
ATSFontFamilyFindFromQuickDrawName(ConstStr255Param iName) ;
# 994 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontFamilyGetQuickDrawName(
  ATSFontFamilyRef iFamily,
  Str255 oName) ;
# 1032 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetFileSpecification(
  ATSFontRef iFont,
  ATSFSSpec * oFile) ;
# 1068 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetFileReference(
  ATSFontRef iFont,
  FSRef * oFile) ;
# 1086 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontGetFontFamilyResource(
  ATSFontRef iFont,
  ByteCount iBufferSize,
  void * ioBuffer,
  ByteCount * oSize) ;
# 1126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontNotify(
  ATSFontNotifyAction action,
  void * info) ;
# 1171 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontNotificationSubscribe(
  ATSNotificationCallback callback,
  ATSFontNotifyOption options,
  void * iRefcon,
  ATSFontNotificationRef * oNotificationRef) ;
# 1207 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontNotificationUnsubscribe(ATSFontNotificationRef notificationRef) ;
# 1223 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
struct ATSFontQuerySourceContext {





  UInt32 version;





  void * refCon;




  CFAllocatorRetainCallBack retain;




  CFAllocatorReleaseCallBack release;
};
typedef struct ATSFontQuerySourceContext ATSFontQuerySourceContext;







enum ATSFontQueryMessageID {







  kATSQueryActivateFontMessage = 'atsa'
};
typedef enum ATSFontQueryMessageID ATSFontQueryMessageID;
# 1291 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
typedef CFPropertyListRef ( * ATSFontQueryCallback)(ATSFontQueryMessageID msgid, CFPropertyListRef data, void *refCon);
# 1331 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern CFRunLoopSourceRef
ATSCreateFontQueryRunLoopSource(
  CFIndex queryOrder,
  CFIndex sourceOrder,
  ATSFontQueryCallback callout,
  const ATSFontQuerySourceContext * context) ;
# 1452 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
enum {






  kATSFontAutoActivationDefault = 0,
  kATSFontAutoActivationDisabled = 1,
  kATSFontAutoActivationEnabled = 2,





  kATSFontAutoActivationAsk = 4
};


typedef UInt32 ATSFontAutoActivationSetting;
# 1496 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontSetGlobalAutoActivationSetting(ATSFontAutoActivationSetting iSetting) ;
# 1518 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSFontAutoActivationSetting
ATSFontGetGlobalAutoActivationSetting(void) ;
# 1559 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern OSStatus
ATSFontSetAutoActivationSettingForApplication(
  ATSFontAutoActivationSetting iSetting,
  CFURLRef iApplicationFileURL) ;
# 1596 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSFont.h" 3
extern ATSFontAutoActivationSetting
ATSFontGetAutoActivationSettingForApplication(CFURLRef iApplicationFileURL) ;







#pragma pack(pop)


}
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATS.h" 2 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ScalerStreamTypes.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ScalerStreamTypes.h" 3
#pragma pack(push, 2)


enum {
  cexec68K = 0x00000001,
  truetypeStreamType = 0x00000001,
  type1StreamType = 0x00000002,
  type3StreamType = 0x00000004,
  type42StreamType = 0x00000008,
  type42GXStreamType = 0x00000010,
  portableStreamType = 0x00000020,
  flattenedStreamType = 0x00000040,
  cidType2StreamType = 0x00000080,
  cidType0StreamType = 0x00000100,
  type1CFFStreamType = 0x00000200,
  evenOddModifierStreamType = 0x00008000,
  eexecBinaryModifierStreamType = 0x00010000,
  unicodeMappingModifierStreamType = 0x00020000,
  scalerSpecifcModifierMask = 0x0000F000,
  streamTypeModifierMask = (long)0xFFFFF000
};


typedef UInt32 scalerStreamTypeFlag;
enum {
  downloadStreamAction = 0,
  asciiDownloadStreamAction = 1,
  fontSizeQueryStreamAction = 2,
  encodingOnlyStreamAction = 3,
  prerequisiteQueryStreamAction = 4,
  prerequisiteItemStreamAction = 5,
  variationQueryStreamAction = 6,
  variationPSOperatorStreamAction = 7
};

typedef SInt32 scalerStreamAction;
enum {
  selectAllVariations = -1
};

struct scalerPrerequisiteItem {
  SInt32 enumeration;
  SInt32 size;
  unsigned char name[1];
};
typedef struct scalerPrerequisiteItem scalerPrerequisiteItem;
struct scalerStream {
  const void * streamRefCon;
  const char * targetVersion;
  scalerStreamTypeFlag types;
  scalerStreamAction action;
  UInt32 memorySize;
  SInt32 variationCount;
  const void * variations;
  union {

    struct {
      const unsigned short * encoding;
      SInt32 * glyphBits;
      char * name;
    } font;


    struct {
      SInt32 size;
      void * list;
    } prerequisiteQuery;

    SInt32 prerequisiteItem;

    SInt32 variationQueryResult;
  } info;
};
typedef struct scalerStream scalerStream;
struct scalerStreamData {
  SInt32 hexFlag;
  SInt32 byteCount;
  const void * data;
};
typedef struct scalerStreamData scalerStreamData;

#pragma pack(pop)
# 38 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATS.h" 2 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
typedef struct CGContext *CGContextRef;



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 3
typedef struct CGColor *CGColorRef;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 3
typedef struct CGColorSpace *CGColorSpaceRef;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 3
typedef struct CGDataProvider *CGDataProviderRef;




# 1 "/usr/include/unistd.h" 1 3 4
# 72 "/usr/include/unistd.h" 3 4
# 1 "/usr/include/sys/unistd.h" 1 3 4
# 133 "/usr/include/sys/unistd.h" 3 4
struct accessx_descriptor {
 unsigned ad_name_offset;
 int ad_flags;
 int ad_pad[2];
};
# 73 "/usr/include/unistd.h" 2 3 4
# 133 "/usr/include/unistd.h" 3 4
typedef __darwin_uuid_t uuid_t;
# 414 "/usr/include/unistd.h" 3 4
extern "C" {

void _exit(int) __attribute__((__noreturn__));
int access(const char *, int);
unsigned int
  alarm(unsigned int);
int chdir(const char *);
int chown(const char *, uid_t, gid_t);
int close(int) __asm("_" "close" "$UNIX2003");
size_t confstr(int, char *, size_t);
char *crypt(const char *, const char *);
char *ctermid(char *);
int dup(int);
int dup2(int, int);

void encrypt(char *, int) __asm("_" "encrypt" "$UNIX2003");



int execl(const char *, const char *, ...);
int execle(const char *, const char *, ...);
int execlp(const char *, const char *, ...);
int execv(const char *, char * const *);
int execve(const char *, char * const *, char * const *);
int execvp(const char *, char * const *);
int fchown(int, uid_t, gid_t);
int fchdir(int);
pid_t fork(void);
long fpathconf(int, int);
int fsync(int) __asm("_" "fsync" "$UNIX2003");
int ftruncate(int, off_t);
char *getcwd(char *, size_t);
gid_t getegid(void);
uid_t geteuid(void);
gid_t getgid(void);
int getgroups(int, gid_t []);
long gethostid(void);
int gethostname(char *, size_t);
char *getlogin(void);
int getlogin_r(char *, size_t);
int getopt(int, char * const [], const char *) __asm("_" "getopt" "$UNIX2003");
pid_t getpgid(pid_t);
pid_t getpgrp(void);
pid_t getpid(void);
pid_t getppid(void);
pid_t getsid(pid_t);
uid_t getuid(void);
char *getwd(char *);
int isatty(int);
int lchown(const char *, uid_t, gid_t) __asm("_" "lchown" "$UNIX2003");
int link(const char *, const char *);
int lockf(int, int, off_t) __asm("_" "lockf" "$UNIX2003");
off_t lseek(int, off_t, int);
int nice(int) __asm("_" "nice" "$UNIX2003");
long pathconf(const char *, int);
int pause(void) __asm("_" "pause" "$UNIX2003");
int pipe(int [2]);
ssize_t pread(int, void *, size_t, off_t) __asm("_" "pread" "$UNIX2003");
ssize_t pwrite(int, const void *, size_t, off_t) __asm("_" "pwrite" "$UNIX2003");
ssize_t read(int, void *, size_t) __asm("_" "read" "$UNIX2003");
ssize_t readlink(const char * , char * , size_t);
int rmdir(const char *);
int setegid(gid_t);
int seteuid(uid_t);
int setgid(gid_t);
int setpgid(pid_t, pid_t);

pid_t setpgrp(void) __asm("_" "setpgrp" "$UNIX2003");



int setregid(gid_t, gid_t) __asm("_" "setregid" "$UNIX2003");
int setreuid(uid_t, uid_t) __asm("_" "setreuid" "$UNIX2003");
pid_t setsid(void);
int setuid(uid_t);
unsigned int
  sleep(unsigned int) __asm("_" "sleep" "$UNIX2003");
void swab(const void * , void * , ssize_t);
int symlink(const char *, const char *);
void sync(void);
long sysconf(int);
pid_t tcgetpgrp(int);
int tcsetpgrp(int, pid_t);
int truncate(const char *, off_t);
char *ttyname(int);

int ttyname_r(int, char *, size_t) __asm("_" "ttyname_r" "$UNIX2003");



useconds_t
  ualarm(useconds_t, useconds_t);
int unlink(const char *);
int usleep(useconds_t) __asm("_" "usleep" "$UNIX2003");
pid_t vfork(void);
ssize_t write(int, const void *, size_t) __asm("_" "write" "$UNIX2003");

extern char *optarg;
extern int optind, opterr, optopt;


# 1 "/usr/include/sys/select.h" 1 3 4
# 73 "/usr/include/sys/select.h" 3 4
# 1 "/usr/include/sys/_structs.h" 1 3 4
# 74 "/usr/include/sys/select.h" 2 3 4
# 129 "/usr/include/sys/select.h" 3 4
extern "C" {


int pselect(int, fd_set * , fd_set * ,
  fd_set * , const struct timespec * ,
  const sigset_t * );


# 1 "/usr/include/sys/_select.h" 1 3 4
# 39 "/usr/include/sys/_select.h" 3 4
int select(int, fd_set * , fd_set * ,
  fd_set * , struct timeval * )
  __asm("_" "select" "$UNIX2003");
# 138 "/usr/include/sys/select.h" 2 3 4

}
# 516 "/usr/include/unistd.h" 2 3 4

void _Exit(int) __attribute__((__noreturn__));
int accessx_np(const struct accessx_descriptor *, size_t, int *, uid_t);
int acct(const char *);
int add_profil(char *, size_t, unsigned long, unsigned int);
void *brk(const void *);
int chroot(const char *);
void endusershell(void);
int execvP(const char *, const char *, char * const *);
char *fflagstostr(unsigned long);
int getdtablesize(void);
int getdomainname(char *, int);
int getgrouplist(const char *, int, int *, int *);
mode_t getmode(const void *, mode_t);
int getpagesize(void) __attribute__((__const__));
char *getpass(const char *);
int getpeereid(int, uid_t *, gid_t *);
int getpgid(pid_t _pid);
int getsgroups_np(int *, uuid_t);
int getsid(pid_t _pid);
char *getusershell(void);
int getwgroups_np(int *, uuid_t);
int initgroups(const char *, int);
int iruserok(unsigned long, int, const char *, const char *);
int iruserok_sa(const void *, int, int, const char *, const char *);
int issetugid(void);
char *mkdtemp(char *);
int mknod(const char *, mode_t, dev_t);
int mkstemp(char *);
int mkstemps(char *, int);
char *mktemp(char *);
int nfssvc(int, void *);
int profil(char *, size_t, unsigned long, unsigned int);
int pthread_setugid_np(uid_t, gid_t);
int pthread_getugid_np( uid_t *, gid_t *);
int rcmd(char **, int, const char *, const char *, const char *, int *);
int rcmd_af(char **, int, const char *, const char *, const char *, int *,
  int);
int reboot(int);
int revoke(const char *);
int rresvport(int *);
int rresvport_af(int *, int);
int ruserok(const char *, int, const char *, const char *);
void *sbrk(int);
int setdomainname(const char *, int);
int setgroups(int, const gid_t *);
void sethostid(long);
int sethostname(const char *, int);

void setkey(const char *) __asm("_" "setkey" "$UNIX2003");



int setlogin(const char *);
void *setmode(const char *);
int setrgid(gid_t);
int setruid(uid_t);
int setsgroups_np(int, const uuid_t);
void setusershell(void);
int setwgroups_np(int, const uuid_t);
int strtofflags(char **, unsigned long *, unsigned long *);
int swapon(const char *);
int syscall(int, ...);
int ttyslot(void);
int undelete(const char *);
int unwhiteout(const char *);
void *valloc(size_t);

extern char *suboptarg;
int getsubopt(char **, char * const *, char **);
# 597 "/usr/include/unistd.h" 3 4
int getattrlist(const char*,void*,void*,size_t,unsigned long) __asm("_" "getattrlist" "$UNIX2003");
int setattrlist(const char*,void*,void*,size_t,unsigned long) __asm("_" "setattrlist" "$UNIX2003");
int exchangedata(const char*,const char*,unsigned long);
int getdirentriesattr(int,void*,void*,size_t,unsigned long*,unsigned long*,unsigned long*,unsigned long);
int searchfs(const char*,void*,void*,unsigned long,unsigned long,void*);

int fsctl(const char *,unsigned long,void*,unsigned long);


extern int optreset;


}
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 2 3

extern "C" {




typedef size_t (*CGDataProviderGetBytesCallback)(void *info, void *buffer, size_t count);





typedef off_t (*CGDataProviderSkipForwardCallback)(void *info, off_t count);




typedef void (*CGDataProviderRewindCallback)(void *info);




typedef void (*CGDataProviderReleaseInfoCallback)(void *info);
# 51 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 3
struct CGDataProviderSequentialCallbacks {
    unsigned int version;
    CGDataProviderGetBytesCallback getBytes;
    CGDataProviderSkipForwardCallback skipForward;
    CGDataProviderRewindCallback rewind;
    CGDataProviderReleaseInfoCallback releaseInfo;
};
typedef struct CGDataProviderSequentialCallbacks CGDataProviderSequentialCallbacks;



typedef const void *(*CGDataProviderGetBytePointerCallback)(void *info);




typedef void (*CGDataProviderReleaseBytePointerCallback)(void *info, const void *pointer);




typedef size_t (*CGDataProviderGetBytesAtPositionCallback)(void *info, void *buffer, off_t position, size_t count);
# 89 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 3
struct CGDataProviderDirectCallbacks {
    unsigned int version;
    CGDataProviderGetBytePointerCallback getBytePointer;
    CGDataProviderReleaseBytePointerCallback releaseBytePointer;
    CGDataProviderGetBytesAtPositionCallback getBytesAtPosition;
    CGDataProviderReleaseInfoCallback releaseInfo;
};
typedef struct CGDataProviderDirectCallbacks CGDataProviderDirectCallbacks;



extern CFTypeID CGDataProviderGetTypeID(void) ;




extern CGDataProviderRef CGDataProviderCreateSequential(void *info, const CGDataProviderSequentialCallbacks *callbacks) ;




extern CGDataProviderRef CGDataProviderCreateDirect(void *info, off_t size, const CGDataProviderDirectCallbacks *callbacks) ;



typedef void (*CGDataProviderReleaseDataCallback)(void *info, const void *data, size_t size);





extern CGDataProviderRef CGDataProviderCreateWithData(void *info, const void *data, size_t size, CGDataProviderReleaseDataCallback releaseData);



extern CGDataProviderRef CGDataProviderCreateWithCFData(CFDataRef data) ;



extern CGDataProviderRef CGDataProviderCreateWithURL(CFURLRef url);



extern CGDataProviderRef CGDataProviderCreateWithFilename(const char *filename);




extern CGDataProviderRef CGDataProviderRetain(CGDataProviderRef provider);




extern void CGDataProviderRelease(CGDataProviderRef provider);






typedef void (*CGDataProviderSkipBytesCallback)(void *info, size_t count);
# 162 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 3
struct CGDataProviderCallbacks {
    CGDataProviderGetBytesCallback getBytes;
    CGDataProviderSkipBytesCallback skipBytes;
    CGDataProviderRewindCallback rewind;
    CGDataProviderReleaseInfoCallback releaseProvider;
};
typedef struct CGDataProviderCallbacks CGDataProviderCallbacks;




typedef size_t (*CGDataProviderGetBytesAtOffsetCallback)(void *info, void *buffer, size_t offset, size_t count);
# 187 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 3
struct CGDataProviderDirectAccessCallbacks {
    CGDataProviderGetBytePointerCallback getBytePointer;
    CGDataProviderReleaseBytePointerCallback releaseBytePointer;
    CGDataProviderGetBytesAtOffsetCallback getBytes;
    CGDataProviderReleaseInfoCallback releaseProvider;
};
typedef struct CGDataProviderDirectAccessCallbacks CGDataProviderDirectAccessCallbacks;




extern CGDataProviderRef CGDataProviderCreate(void *info, const CGDataProviderCallbacks *callbacks) ;




extern CGDataProviderRef CGDataProviderCreateDirectAccess(void *info, size_t size, const CGDataProviderDirectAccessCallbacks *callbacks) ;

}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 2 3

enum CGColorRenderingIntent {
    kCGRenderingIntentDefault,
    kCGRenderingIntentAbsoluteColorimetric,
    kCGRenderingIntentRelativeColorimetric,
    kCGRenderingIntentPerceptual,
    kCGRenderingIntentSaturation
};
typedef enum CGColorRenderingIntent CGColorRenderingIntent;

extern "C" {



extern const CFStringRef kCGColorSpaceGenericGray ;



extern const CFStringRef kCGColorSpaceGenericRGB ;



extern const CFStringRef kCGColorSpaceGenericCMYK ;



extern const CFStringRef kCGColorSpaceGenericRGBHDR ;



extern const CFStringRef kCGColorSpaceAdobeRGB ;




extern const CFStringRef kCGColorSpaceSRGB ;



extern CGColorSpaceRef CGColorSpaceCreateDeviceGray(void);



extern CGColorSpaceRef CGColorSpaceCreateDeviceRGB(void);



extern CGColorSpaceRef CGColorSpaceCreateDeviceCMYK(void);







extern CGColorSpaceRef CGColorSpaceCreateCalibratedGray(const CGFloat whitePoint[3], const CGFloat blackPoint[3], CGFloat gamma);
# 80 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 3
extern CGColorSpaceRef CGColorSpaceCreateCalibratedRGB(const CGFloat whitePoint[3], const CGFloat blackPoint[3], const CGFloat gamma[3], const CGFloat matrix[9]);
# 89 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 3
extern CGColorSpaceRef CGColorSpaceCreateLab(const CGFloat whitePoint[3], const CGFloat blackPoint[3], const CGFloat range[4]);
# 105 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 3
extern CGColorSpaceRef CGColorSpaceCreateICCBased(size_t nComponents, const CGFloat *range, CGDataProviderRef profile, CGColorSpaceRef alternate);
# 117 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 3
extern CGColorSpaceRef CGColorSpaceCreateIndexed(CGColorSpaceRef baseSpace, size_t lastIndex, const unsigned char *colorTable);






extern CGColorSpaceRef CGColorSpaceCreatePattern(CGColorSpaceRef baseSpace);




extern CGColorSpaceRef CGColorSpaceCreateWithPlatformColorSpace(void *ref);




extern CGColorSpaceRef CGColorSpaceCreateWithName(CFStringRef name) ;




extern CGColorSpaceRef CGColorSpaceRetain(CGColorSpaceRef space);




extern void CGColorSpaceRelease(CGColorSpaceRef space);



extern CFTypeID CGColorSpaceGetTypeID(void) ;



extern size_t CGColorSpaceGetNumberOfComponents(CGColorSpaceRef space);




extern CFDataRef CGColorSpaceCopyICCProfile(CGColorSpaceRef space) ;

}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 3
typedef struct CGPattern *CGPatternRef;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 2 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 3
enum CGPatternTiling {
    kCGPatternTilingNoDistortion,
    kCGPatternTilingConstantSpacingMinimalDistortion,
    kCGPatternTilingConstantSpacing
};
typedef enum CGPatternTiling CGPatternTiling;

extern "C" {
# 49 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 3
typedef void (*CGPatternDrawPatternCallback)(void *info, CGContextRef c);
typedef void (*CGPatternReleaseInfoCallback)(void *info);

struct CGPatternCallbacks {
    unsigned int version;
    CGPatternDrawPatternCallback drawPattern;
    CGPatternReleaseInfoCallback releaseInfo;
};
typedef struct CGPatternCallbacks CGPatternCallbacks;



extern CFTypeID CGPatternGetTypeID(void) ;



extern CGPatternRef CGPatternCreate(void *info, CGRect bounds, CGAffineTransform matrix, CGFloat xStep, CGFloat yStep, CGPatternTiling tiling, bool isColored, const CGPatternCallbacks *callbacks);




extern CGPatternRef CGPatternRetain(CGPatternRef pattern);




extern void CGPatternRelease(CGPatternRef pattern);

}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 2 3

extern "C" {





extern CGColorRef CGColorCreate(CGColorSpaceRef space, const CGFloat components[]) ;



extern CGColorRef CGColorCreateGenericGray(CGFloat gray, CGFloat alpha) ;



extern CGColorRef CGColorCreateGenericRGB(CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha) ;



extern CGColorRef CGColorCreateGenericCMYK(CGFloat cyan, CGFloat magenta, CGFloat yellow, CGFloat black, CGFloat alpha) ;
# 42 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 3
extern CGColorRef CGColorGetConstantColor(CFStringRef colorName) ;




extern CGColorRef CGColorCreateWithPattern(CGColorSpaceRef space, CGPatternRef pattern, const CGFloat components[]) ;



extern CGColorRef CGColorCreateCopy(CGColorRef color) ;



extern CGColorRef CGColorCreateCopyWithAlpha(CGColorRef color, CGFloat alpha) ;




extern CGColorRef CGColorRetain(CGColorRef color) ;




extern void CGColorRelease(CGColorRef color) ;



extern bool CGColorEqualToColor(CGColorRef color1, CGColorRef color2) ;




extern size_t CGColorGetNumberOfComponents(CGColorRef color) ;




extern const CGFloat *CGColorGetComponents(CGColorRef color) ;



extern CGFloat CGColorGetAlpha(CGColorRef color) ;



extern CGColorSpaceRef CGColorGetColorSpace(CGColorRef color) ;




extern CGPatternRef CGColorGetPattern(CGColorRef color) ;



extern CFTypeID CGColorGetTypeID(void) ;





extern const CFStringRef kCGColorWhite ;
extern const CFStringRef kCGColorBlack ;
extern const CFStringRef kCGColorClear ;

}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 3
typedef struct CGFont *CGFontRef;



typedef unsigned short CGFontIndex;



typedef CGFontIndex CGGlyph;






enum CGFontPostScriptFormat {
    kCGFontPostScriptFormatType1 = 1,
    kCGFontPostScriptFormatType3 = 3,
    kCGFontPostScriptFormatType42 = 42
};
typedef enum CGFontPostScriptFormat CGFontPostScriptFormat;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 2 3





enum {

    kCGFontIndexMax = ((1 << 16) - 2),


    kCGFontIndexInvalid = ((1 << 16) - 1),


    kCGGlyphMax = kCGFontIndexMax
};

extern "C" {



extern CFTypeID CGFontGetTypeID(void) ;





extern CGFontRef CGFontCreateWithPlatformFont(void *platformFontReference);




extern CGFontRef CGFontCreateWithDataProvider(CGDataProviderRef provider) ;





extern CGFontRef CGFontCreateWithFontName(CFStringRef name) ;
# 82 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 3
extern CGFontRef CGFontCreateCopyWithVariations(CGFontRef font, CFDictionaryRef variations) ;




extern CGFontRef CGFontRetain(CGFontRef font);




extern void CGFontRelease(CGFontRef font);



extern size_t CGFontGetNumberOfGlyphs(CGFontRef font);



extern int CGFontGetUnitsPerEm(CGFontRef font);



extern CFStringRef CGFontCopyPostScriptName(CGFontRef font) ;



extern CFStringRef CGFontCopyFullName(CGFontRef font) ;





extern int CGFontGetAscent(CGFontRef font) ;





extern int CGFontGetDescent(CGFontRef font) ;





extern int CGFontGetLeading(CGFontRef font) ;





extern int CGFontGetCapHeight(CGFontRef font) ;






extern int CGFontGetXHeight(CGFontRef font) ;





extern CGRect CGFontGetFontBBox(CGFontRef font) ;




extern CGFloat CGFontGetItalicAngle(CGFontRef font) ;




extern CGFloat CGFontGetStemV(CGFontRef font) ;






extern CFArrayRef CGFontCopyVariationAxes(CGFontRef font) ;
# 171 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 3
extern CFDictionaryRef CGFontCopyVariations(CGFontRef font) ;






extern bool CGFontGetGlyphAdvances(CGFontRef font, const CGGlyph glyphs[], size_t count, int advances[]);







extern bool CGFontGetGlyphBBoxes(CGFontRef font, const CGGlyph glyphs[], size_t count, CGRect bboxes[]) ;




extern CGGlyph CGFontGetGlyphWithGlyphName(CGFontRef font, CFStringRef name) ;




extern CFStringRef CGFontCopyGlyphNameForGlyph(CGFontRef font, CGGlyph glyph) ;




extern bool CGFontCanCreatePostScriptSubset(CGFontRef font, CGFontPostScriptFormat format) ;






extern CFDataRef CGFontCreatePostScriptSubset(CGFontRef font, CFStringRef subsetName, CGFontPostScriptFormat format, const CGGlyph glyphs[], size_t count, const CGGlyph encoding[256]) ;




extern CFDataRef CGFontCreatePostScriptEncoding(CGFontRef font, const CGGlyph encoding[256]) ;





extern CFArrayRef CGFontCopyTableTags(CGFontRef font) ;




extern CFDataRef CGFontCopyTableForTag(CGFontRef font, uint32_t tag) ;







extern const CFStringRef kCGFontVariationAxisName ;





extern const CFStringRef kCGFontVariationAxisMinValue ;





extern const CFStringRef kCGFontVariationAxisMaxValue ;





extern const CFStringRef kCGFontVariationAxisDefaultValue ;

}



enum {
    CGGlyphMin = 0,
    CGGlyphMax = kCGGlyphMax
};
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 3
typedef struct CGImage *CGImageRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 2 3


extern "C" {

enum CGImageAlphaInfo {
    kCGImageAlphaNone,
    kCGImageAlphaPremultipliedLast,
    kCGImageAlphaPremultipliedFirst,
    kCGImageAlphaLast,
    kCGImageAlphaFirst,
    kCGImageAlphaNoneSkipLast,
    kCGImageAlphaNoneSkipFirst,
    kCGImageAlphaOnly
};
typedef enum CGImageAlphaInfo CGImageAlphaInfo;

enum {
    kCGBitmapAlphaInfoMask = 0x1F,
    kCGBitmapFloatComponents = (1 << 8),

    kCGBitmapByteOrderMask = 0x7000,
    kCGBitmapByteOrderDefault = (0 << 12),
    kCGBitmapByteOrder16Little = (1 << 12),
    kCGBitmapByteOrder32Little = (2 << 12),
    kCGBitmapByteOrder16Big = (3 << 12),
    kCGBitmapByteOrder32Big = (4 << 12)
};
typedef uint32_t CGBitmapInfo;
# 52 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 3
extern CFTypeID CGImageGetTypeID(void) ;



extern CGImageRef CGImageCreate(size_t width, size_t height, size_t bitsPerComponent, size_t bitsPerPixel, size_t bytesPerRow, CGColorSpaceRef colorspace, CGBitmapInfo bitmapInfo, CGDataProviderRef provider, const CGFloat decode[], bool shouldInterpolate, CGColorRenderingIntent intent);



extern CGImageRef CGImageMaskCreate(size_t width, size_t height, size_t bitsPerComponent, size_t bitsPerPixel, size_t bytesPerRow, CGDataProviderRef provider, const CGFloat decode[], bool shouldInterpolate);




extern CGImageRef CGImageCreateCopy(CGImageRef image) ;



extern CGImageRef CGImageCreateWithJPEGDataProvider(CGDataProviderRef source, const CGFloat decode[], bool shouldInterpolate, CGColorRenderingIntent intent) ;



extern CGImageRef CGImageCreateWithPNGDataProvider(CGDataProviderRef source, const CGFloat decode[], bool shouldInterpolate, CGColorRenderingIntent intent) ;
# 96 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 3
extern CGImageRef CGImageCreateWithImageInRect(CGImageRef image, CGRect rect) ;
# 124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 3
extern CGImageRef CGImageCreateWithMask(CGImageRef image, CGImageRef mask) ;
# 142 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 3
extern CGImageRef CGImageCreateWithMaskingColors(CGImageRef image, const CGFloat components[]) ;






extern CGImageRef CGImageCreateCopyWithColorSpace(CGImageRef image, CGColorSpaceRef colorspace) ;



extern CGImageRef CGImageRetain(CGImageRef image);



extern void CGImageRelease(CGImageRef image);



extern bool CGImageIsMask(CGImageRef image);



extern size_t CGImageGetWidth(CGImageRef image);



extern size_t CGImageGetHeight(CGImageRef image);



extern size_t CGImageGetBitsPerComponent(CGImageRef image);



extern size_t CGImageGetBitsPerPixel(CGImageRef image);



extern size_t CGImageGetBytesPerRow(CGImageRef image);




extern CGColorSpaceRef CGImageGetColorSpace(CGImageRef image);



extern CGImageAlphaInfo CGImageGetAlphaInfo(CGImageRef image);



extern CGDataProviderRef CGImageGetDataProvider(CGImageRef image);



extern const CGFloat *CGImageGetDecode(CGImageRef image);



extern bool CGImageGetShouldInterpolate(CGImageRef image);



extern CGColorRenderingIntent CGImageGetRenderingIntent(CGImageRef image);



extern CGBitmapInfo CGImageGetBitmapInfo(CGImageRef image) ;

}
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 3
typedef struct CGPath *CGMutablePathRef;
typedef const struct CGPath *CGPathRef;





extern "C" {



extern CFTypeID CGPathGetTypeID(void) ;



extern CGMutablePathRef CGPathCreateMutable(void) ;



extern CGPathRef CGPathCreateCopy(CGPathRef path) ;



extern CGMutablePathRef CGPathCreateMutableCopy(CGPathRef path) ;




extern CGPathRef CGPathRetain(CGPathRef path) ;




extern void CGPathRelease(CGPathRef path) ;



extern bool CGPathEqualToPath(CGPathRef path1, CGPathRef path2) ;






extern void CGPathMoveToPoint(CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y) ;





extern void CGPathAddLineToPoint(CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y) ;





extern void CGPathAddQuadCurveToPoint(CGMutablePathRef path, const CGAffineTransform *m, CGFloat cpx, CGFloat cpy, CGFloat x, CGFloat y) ;






extern void CGPathAddCurveToPoint(CGMutablePathRef path, const CGAffineTransform *m, CGFloat cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y) ;




extern void CGPathCloseSubpath(CGMutablePathRef path) ;






extern void CGPathAddRect(CGMutablePathRef path, const CGAffineTransform *m, CGRect rect) ;





extern void CGPathAddRects(CGMutablePathRef path, const CGAffineTransform *m, const CGRect rects[], size_t count) ;





extern void CGPathAddLines(CGMutablePathRef path, const CGAffineTransform *m, const CGPoint points[], size_t count) ;
# 109 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 3
extern void CGPathAddEllipseInRect(CGMutablePathRef path, const CGAffineTransform *m, CGRect rect) ;
# 121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 3
extern void CGPathAddArc(CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, bool clockwise) ;
# 131 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 3
extern void CGPathAddArcToPoint(CGMutablePathRef path, const CGAffineTransform *m, CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2, CGFloat radius) ;




extern void CGPathAddPath(CGMutablePathRef path1, const CGAffineTransform *m, CGPathRef path2) ;





extern bool CGPathIsEmpty(CGPathRef path) ;



extern bool CGPathIsRect(CGPathRef path, CGRect *rect) ;




extern CGPoint CGPathGetCurrentPoint(CGPathRef path) ;






extern CGRect CGPathGetBoundingBox(CGPathRef path) ;
# 167 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 3
extern bool CGPathContainsPoint(CGPathRef path, const CGAffineTransform *m, CGPoint point, bool eoFill) ;

enum CGPathElementType {
    kCGPathElementMoveToPoint,
    kCGPathElementAddLineToPoint,
    kCGPathElementAddQuadCurveToPoint,
    kCGPathElementAddCurveToPoint,
    kCGPathElementCloseSubpath
};
typedef enum CGPathElementType CGPathElementType;

struct CGPathElement {
    CGPathElementType type;
    CGPoint *points;
};
typedef struct CGPathElement CGPathElement;

typedef void (*CGPathApplierFunction)(void *info, const CGPathElement *element);

extern void CGPathApply(CGPathRef path, void *info, CGPathApplierFunction function) ;

}
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h" 3
typedef struct CGPDFDocument *CGPDFDocumentRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h" 2 3

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 3
typedef struct CGPDFPage *CGPDFPageRef;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 3
typedef struct CGPDFDictionary *CGPDFDictionaryRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 3
typedef struct CGPDFArray *CGPDFArrayRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFObject.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFObject.h" 3
typedef unsigned char CGPDFBoolean;



typedef long int CGPDFInteger;



typedef CGFloat CGPDFReal;



typedef union CGPDFObject *CGPDFObjectRef;



enum CGPDFObjectType {
    kCGPDFObjectTypeNull = 1,
    kCGPDFObjectTypeBoolean,
    kCGPDFObjectTypeInteger,
    kCGPDFObjectTypeReal,
    kCGPDFObjectTypeName,
    kCGPDFObjectTypeString,
    kCGPDFObjectTypeArray,
    kCGPDFObjectTypeDictionary,
    kCGPDFObjectTypeStream
};
typedef enum CGPDFObjectType CGPDFObjectType;

extern "C" {



extern CGPDFObjectType CGPDFObjectGetType(CGPDFObjectRef object) ;
# 55 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFObject.h" 3
extern bool CGPDFObjectGetValue(CGPDFObjectRef object, CGPDFObjectType type, void *value) ;

}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 3
typedef struct CGPDFStream *CGPDFStreamRef;

enum CGPDFDataFormat {
    CGPDFDataFormatRaw, CGPDFDataFormatJPEGEncoded, CGPDFDataFormatJPEG2000
};
typedef enum CGPDFDataFormat CGPDFDataFormat;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 2 3


extern "C" {



extern CGPDFDictionaryRef CGPDFStreamGetDictionary(CGPDFStreamRef stream) ;



extern CFDataRef CGPDFStreamCopyData(CGPDFStreamRef stream, CGPDFDataFormat *format) ;

}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFString.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFString.h" 3
typedef struct CGPDFString *CGPDFStringRef;





extern "C" {



extern size_t CGPDFStringGetLength(CGPDFStringRef string) ;



extern const unsigned char *CGPDFStringGetBytePtr(CGPDFStringRef string) ;





extern CFStringRef CGPDFStringCopyTextString(CGPDFStringRef string) ;




extern CFDateRef CGPDFStringCopyDate(CGPDFStringRef string) ;

}
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 2 3

extern "C" {



extern size_t CGPDFArrayGetCount(CGPDFArrayRef array) ;




extern bool CGPDFArrayGetObject(CGPDFArrayRef array, size_t index, CGPDFObjectRef *value) ;




extern bool CGPDFArrayGetNull(CGPDFArrayRef array, size_t index) ;




extern bool CGPDFArrayGetBoolean(CGPDFArrayRef array, size_t index, CGPDFBoolean *value) ;




extern bool CGPDFArrayGetInteger(CGPDFArrayRef array, size_t index, CGPDFInteger *value) ;





extern bool CGPDFArrayGetNumber(CGPDFArrayRef array, size_t index, CGPDFReal *value) ;




extern bool CGPDFArrayGetName(CGPDFArrayRef array, size_t index, const char **value) ;




extern bool CGPDFArrayGetString(CGPDFArrayRef array, size_t index, CGPDFStringRef *value) ;




extern bool CGPDFArrayGetArray(CGPDFArrayRef array, size_t index, CGPDFArrayRef *value) ;




extern bool CGPDFArrayGetDictionary(CGPDFArrayRef array, size_t index, CGPDFDictionaryRef *value) ;




extern bool CGPDFArrayGetStream(CGPDFArrayRef array, size_t index, CGPDFStreamRef *value) ;

}
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFObject.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFString.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 2 3

extern "C" {



extern size_t CGPDFDictionaryGetCount(CGPDFDictionaryRef dict) ;




extern bool CGPDFDictionaryGetObject(CGPDFDictionaryRef dict, const char *key, CGPDFObjectRef *value) ;





extern bool CGPDFDictionaryGetBoolean(CGPDFDictionaryRef dict, const char *key, CGPDFBoolean *value) ;





extern bool CGPDFDictionaryGetInteger(CGPDFDictionaryRef dict, const char *key, CGPDFInteger *value) ;





extern bool CGPDFDictionaryGetNumber(CGPDFDictionaryRef dict, const char *key, CGPDFReal *value) ;





extern bool CGPDFDictionaryGetName(CGPDFDictionaryRef dict, const char *key, const char **value) ;





extern bool CGPDFDictionaryGetString(CGPDFDictionaryRef dict, const char *key, CGPDFStringRef *value) ;





extern bool CGPDFDictionaryGetArray(CGPDFDictionaryRef dict, const char *key, CGPDFArrayRef *value) ;





extern bool CGPDFDictionaryGetDictionary(CGPDFDictionaryRef dict, const char *key, CGPDFDictionaryRef *value) ;





extern bool CGPDFDictionaryGetStream(CGPDFDictionaryRef dict, const char *key, CGPDFStreamRef *value) ;





typedef void (*CGPDFDictionaryApplierFunction)(const char *key, CGPDFObjectRef value, void *info);





extern void CGPDFDictionaryApplyFunction(CGPDFDictionaryRef dict, CGPDFDictionaryApplierFunction function, void *info) ;

}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 2 3

enum CGPDFBox {
    kCGPDFMediaBox = 0,
    kCGPDFCropBox = 1,
    kCGPDFBleedBox = 2,
    kCGPDFTrimBox = 3,
    kCGPDFArtBox = 4
};
typedef enum CGPDFBox CGPDFBox;

extern "C" {




extern CGPDFPageRef CGPDFPageRetain(CGPDFPageRef page) ;




extern void CGPDFPageRelease(CGPDFPageRef page) ;



extern CGPDFDocumentRef CGPDFPageGetDocument(CGPDFPageRef page) ;



extern size_t CGPDFPageGetPageNumber(CGPDFPageRef page) ;





extern CGRect CGPDFPageGetBoxRect(CGPDFPageRef page, CGPDFBox box) ;




extern int CGPDFPageGetRotationAngle(CGPDFPageRef page) ;
# 68 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 3
extern CGAffineTransform CGPDFPageGetDrawingTransform(CGPDFPageRef page, CGPDFBox box, CGRect rect, int rotate, bool preserveAspectRatio) ;



extern CGPDFDictionaryRef CGPDFPageGetDictionary(CGPDFPageRef page) ;



extern CFTypeID CGPDFPageGetTypeID(void) ;

}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h" 2 3


extern "C" {




extern CGPDFDocumentRef CGPDFDocumentCreateWithProvider(CGDataProviderRef provider);



extern CGPDFDocumentRef CGPDFDocumentCreateWithURL(CFURLRef url);




extern CGPDFDocumentRef CGPDFDocumentRetain(CGPDFDocumentRef document);




extern void CGPDFDocumentRelease(CGPDFDocumentRef document);



extern void CGPDFDocumentGetVersion(CGPDFDocumentRef document, int *majorVersion, int *minorVersion) ;






extern bool CGPDFDocumentIsEncrypted(CGPDFDocumentRef document) ;





extern bool CGPDFDocumentUnlockWithPassword(CGPDFDocumentRef document, const char *password) ;





extern bool CGPDFDocumentIsUnlocked(CGPDFDocumentRef document) ;






extern bool CGPDFDocumentAllowsPrinting(CGPDFDocumentRef document) ;






extern bool CGPDFDocumentAllowsCopying(CGPDFDocumentRef document) ;



extern size_t CGPDFDocumentGetNumberOfPages(CGPDFDocumentRef document);




extern CGPDFPageRef CGPDFDocumentGetPage(CGPDFDocumentRef document, size_t pageNumber) ;



extern CGPDFDictionaryRef CGPDFDocumentGetCatalog(CGPDFDocumentRef document) ;



extern CGPDFDictionaryRef CGPDFDocumentGetInfo(CGPDFDocumentRef document) ;



extern CGPDFArrayRef CGPDFDocumentGetID(CGPDFDocumentRef document) ;



extern CFTypeID CGPDFDocumentGetTypeID(void) ;





extern CGRect CGPDFDocumentGetMediaBox(CGPDFDocumentRef document, int page);



extern CGRect CGPDFDocumentGetCropBox(CGPDFDocumentRef document, int page);



extern CGRect CGPDFDocumentGetBleedBox(CGPDFDocumentRef document, int page);



extern CGRect CGPDFDocumentGetTrimBox(CGPDFDocumentRef document, int page);



extern CGRect CGPDFDocumentGetArtBox(CGPDFDocumentRef document, int page);




extern int CGPDFDocumentGetRotationAngle(CGPDFDocumentRef document, int page);

}
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFunction.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFunction.h" 3
typedef struct CGFunction *CGFunctionRef;
# 22 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFunction.h" 3
typedef void (*CGFunctionEvaluateCallback)(void *info, const CGFloat *in, CGFloat *out);




typedef void (*CGFunctionReleaseInfoCallback)(void *info);
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFunction.h" 3
struct CGFunctionCallbacks {
    unsigned int version;
    CGFunctionEvaluateCallback evaluate;
    CGFunctionReleaseInfoCallback releaseInfo;
};
typedef struct CGFunctionCallbacks CGFunctionCallbacks;

extern "C" {



extern CFTypeID CGFunctionGetTypeID(void) ;
# 79 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFunction.h" 3
extern CGFunctionRef CGFunctionCreate(void *info, size_t domainDimension, const CGFloat *domain, size_t rangeDimension, const CGFloat *range, const CGFunctionCallbacks *callbacks) ;




extern CGFunctionRef CGFunctionRetain(CGFunctionRef function) ;




extern void CGFunctionRelease(CGFunctionRef function) ;

}
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 2 3



typedef struct CGShading *CGShadingRef;

extern "C" {





extern CFTypeID CGShadingGetTypeID(void) ;
# 52 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 3
extern CGShadingRef CGShadingCreateAxial(CGColorSpaceRef colorspace, CGPoint start, CGPoint end, CGFunctionRef function, bool extendStart, bool extendEnd) ;
# 87 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 3
extern CGShadingRef CGShadingCreateRadial(CGColorSpaceRef colorspace, CGPoint start, CGFloat startRadius, CGPoint end, CGFloat endRadius, CGFunctionRef function, bool extendStart, bool extendEnd) ;






extern CGShadingRef CGShadingRetain(CGShadingRef shading) ;






extern void CGShadingRelease(CGShadingRef shading) ;

}
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 2 3



enum CGLineJoin {
    kCGLineJoinMiter,
    kCGLineJoinRound,
    kCGLineJoinBevel
};
typedef enum CGLineJoin CGLineJoin;



enum CGLineCap {
    kCGLineCapButt,
    kCGLineCapRound,
    kCGLineCapSquare
};
typedef enum CGLineCap CGLineCap;



enum CGPathDrawingMode {
    kCGPathFill,
    kCGPathEOFill,
    kCGPathStroke,
    kCGPathFillStroke,
    kCGPathEOFillStroke
};
typedef enum CGPathDrawingMode CGPathDrawingMode;



enum CGTextDrawingMode {
    kCGTextFill,
    kCGTextStroke,
    kCGTextFillStroke,
    kCGTextInvisible,
    kCGTextFillClip,
    kCGTextStrokeClip,
    kCGTextFillStrokeClip,
    kCGTextClip
};
typedef enum CGTextDrawingMode CGTextDrawingMode;



enum CGTextEncoding {
    kCGEncodingFontSpecific,
    kCGEncodingMacRoman
};
typedef enum CGTextEncoding CGTextEncoding;



enum CGInterpolationQuality {
    kCGInterpolationDefault,
    kCGInterpolationNone,
    kCGInterpolationLow,
    kCGInterpolationHigh
};
typedef enum CGInterpolationQuality CGInterpolationQuality;
# 96 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
enum CGBlendMode {

    kCGBlendModeNormal,
    kCGBlendModeMultiply,
    kCGBlendModeScreen,
    kCGBlendModeOverlay,
    kCGBlendModeDarken,
    kCGBlendModeLighten,
    kCGBlendModeColorDodge,
    kCGBlendModeColorBurn,
    kCGBlendModeSoftLight,
    kCGBlendModeHardLight,
    kCGBlendModeDifference,
    kCGBlendModeExclusion,
    kCGBlendModeHue,
    kCGBlendModeSaturation,
    kCGBlendModeColor,
    kCGBlendModeLuminosity,
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
    kCGBlendModeClear,
    kCGBlendModeCopy,
    kCGBlendModeSourceIn,
    kCGBlendModeSourceOut,
    kCGBlendModeSourceAtop,
    kCGBlendModeDestinationOver,
    kCGBlendModeDestinationIn,
    kCGBlendModeDestinationOut,
    kCGBlendModeDestinationAtop,
    kCGBlendModeXOR,
    kCGBlendModePlusDarker,
    kCGBlendModePlusLighter
};
typedef enum CGBlendMode CGBlendMode;

extern "C" {



extern CFTypeID CGContextGetTypeID(void) ;







extern void CGContextSaveGState(CGContextRef c);





extern void CGContextRestoreGState(CGContextRef c);






extern void CGContextScaleCTM(CGContextRef c, CGFloat sx, CGFloat sy);




extern void CGContextTranslateCTM(CGContextRef c, CGFloat tx, CGFloat ty);




extern void CGContextRotateCTM(CGContextRef c, CGFloat angle);




extern void CGContextConcatCTM(CGContextRef c, CGAffineTransform transform);



extern CGAffineTransform CGContextGetCTM(CGContextRef c);





extern void CGContextSetLineWidth(CGContextRef c, CGFloat width);



extern void CGContextSetLineCap(CGContextRef c, CGLineCap cap);



extern void CGContextSetLineJoin(CGContextRef c, CGLineJoin join);



extern void CGContextSetMiterLimit(CGContextRef c, CGFloat limit);



extern void CGContextSetLineDash(CGContextRef c, CGFloat phase, const CGFloat lengths[], size_t count);




extern void CGContextSetFlatness(CGContextRef c, CGFloat flatness);



extern void CGContextSetAlpha(CGContextRef c, CGFloat alpha);



extern void CGContextSetBlendMode(CGContextRef context, CGBlendMode mode) ;
# 229 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextBeginPath(CGContextRef c);



extern void CGContextMoveToPoint(CGContextRef c, CGFloat x, CGFloat y);



extern void CGContextAddLineToPoint(CGContextRef c, CGFloat x, CGFloat y);




extern void CGContextAddCurveToPoint(CGContextRef c, CGFloat cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y);




extern void CGContextAddQuadCurveToPoint(CGContextRef c, CGFloat cpx, CGFloat cpy, CGFloat x, CGFloat y);



extern void CGContextClosePath(CGContextRef c);





extern void CGContextAddRect(CGContextRef c, CGRect rect);



extern void CGContextAddRects(CGContextRef c, const CGRect rects[], size_t count);



extern void CGContextAddLines(CGContextRef c, const CGPoint points[], size_t count);





extern void CGContextAddEllipseInRect(CGContextRef context, CGRect rect) ;
# 280 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise);






extern void CGContextAddArcToPoint(CGContextRef c, CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2, CGFloat radius);




extern void CGContextAddPath(CGContextRef context, CGPathRef path) ;
# 304 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextReplacePathWithStrokedPath(CGContextRef c) ;






extern bool CGContextIsPathEmpty(CGContextRef c);




extern CGPoint CGContextGetPathCurrentPoint(CGContextRef c);





extern CGRect CGContextGetPathBoundingBox(CGContextRef c);






extern bool CGContextPathContainsPoint(CGContextRef context, CGPoint point, CGPathDrawingMode mode) ;





extern void CGContextDrawPath(CGContextRef c, CGPathDrawingMode mode);






extern void CGContextFillPath(CGContextRef c);




extern void CGContextEOFillPath(CGContextRef c);



extern void CGContextStrokePath(CGContextRef c);



extern void CGContextFillRect(CGContextRef c, CGRect rect);




extern void CGContextFillRects(CGContextRef c, const CGRect rects[], size_t count);




extern void CGContextStrokeRect(CGContextRef c, CGRect rect);




extern void CGContextStrokeRectWithWidth(CGContextRef c, CGRect rect, CGFloat width);




extern void CGContextClearRect(CGContextRef c, CGRect rect);



extern void CGContextFillEllipseInRect(CGContextRef context, CGRect rect) ;



extern void CGContextStrokeEllipseInRect(CGContextRef context, CGRect rect) ;
# 393 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextStrokeLineSegments(CGContextRef c, const CGPoint points[], size_t count) ;







extern void CGContextClip(CGContextRef c);





extern void CGContextEOClip(CGContextRef c);
# 436 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextClipToMask(CGContextRef c, CGRect rect, CGImageRef mask) ;





extern CGRect CGContextGetClipBoundingBox(CGContextRef c) ;






extern void CGContextClipToRect(CGContextRef c, CGRect rect);





extern void CGContextClipToRects(CGContextRef c, const CGRect rects[], size_t count);





extern void CGContextSetFillColorWithColor(CGContextRef c, CGColorRef color) ;



extern void CGContextSetStrokeColorWithColor(CGContextRef c, CGColorRef color) ;







extern void CGContextSetFillColorSpace(CGContextRef c, CGColorSpaceRef colorspace);





extern void CGContextSetStrokeColorSpace(CGContextRef c, CGColorSpaceRef colorspace);
# 489 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextSetFillColor(CGContextRef c, const CGFloat components[]);







extern void CGContextSetStrokeColor(CGContextRef c, const CGFloat components[]);
# 508 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextSetFillPattern(CGContextRef c, CGPatternRef pattern, const CGFloat components[]);
# 517 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextSetStrokePattern(CGContextRef c, CGPatternRef pattern, const CGFloat components[]);




extern void CGContextSetPatternPhase(CGContextRef c, CGSize phase);






extern void CGContextSetGrayFillColor(CGContextRef c, CGFloat gray, CGFloat alpha);




extern void CGContextSetGrayStrokeColor(CGContextRef c, CGFloat gray, CGFloat alpha);





extern void CGContextSetRGBFillColor(CGContextRef c, CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha);





extern void CGContextSetRGBStrokeColor(CGContextRef c, CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha);





extern void CGContextSetCMYKFillColor(CGContextRef c, CGFloat cyan, CGFloat magenta, CGFloat yellow, CGFloat black, CGFloat alpha);





extern void CGContextSetCMYKStrokeColor(CGContextRef c, CGFloat cyan, CGFloat magenta, CGFloat yellow, CGFloat black, CGFloat alpha);






extern void CGContextSetRenderingIntent(CGContextRef c, CGColorRenderingIntent intent);






extern void CGContextDrawImage(CGContextRef c, CGRect rect, CGImageRef image);
# 581 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextDrawTiledImage(CGContextRef c, CGRect rect, CGImageRef image) ;







extern CGInterpolationQuality CGContextGetInterpolationQuality(CGContextRef c);



extern void CGContextSetInterpolationQuality(CGContextRef c, CGInterpolationQuality quality);
# 607 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextSetShadowWithColor(CGContextRef context, CGSize offset, CGFloat blur, CGColorRef color) ;






extern void CGContextSetShadow(CGContextRef context, CGSize offset, CGFloat blur) ;





extern void CGContextDrawShading(CGContextRef c, CGShadingRef shading) ;







extern void CGContextSetCharacterSpacing(CGContextRef c, CGFloat spacing);




extern void CGContextSetTextPosition(CGContextRef c, CGFloat x, CGFloat y);




extern CGPoint CGContextGetTextPosition(CGContextRef c);



extern void CGContextSetTextMatrix(CGContextRef c, CGAffineTransform t);



extern CGAffineTransform CGContextGetTextMatrix(CGContextRef c);




extern void CGContextSetTextDrawingMode(CGContextRef c, CGTextDrawingMode mode);




extern void CGContextSetFont(CGContextRef c, CGFontRef font);




extern void CGContextSetFontSize(CGContextRef c, CGFloat size);






extern void CGContextSelectFont(CGContextRef c, const char *name, CGFloat size, CGTextEncoding textEncoding);





extern void CGContextShowGlyphsAtPositions(CGContextRef context, const CGGlyph glyphs[], const CGPoint positions[], size_t count) ;
# 683 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextShowText(CGContextRef c, const char *string, size_t length);






extern void CGContextShowTextAtPoint(CGContextRef c, CGFloat x, CGFloat y, const char *string, size_t length);




extern void CGContextShowGlyphs(CGContextRef c, const CGGlyph g[], size_t count);





extern void CGContextShowGlyphsAtPoint(CGContextRef c, CGFloat x, CGFloat y, const CGGlyph glyphs[], size_t count);






extern void CGContextShowGlyphsWithAdvances(CGContextRef c, const CGGlyph glyphs[], const CGSize advances[], size_t count) ;





extern void CGContextDrawPDFPage(CGContextRef c, CGPDFPageRef page) ;







extern void CGContextDrawPDFDocument(CGContextRef c, CGRect rect, CGPDFDocumentRef document, int page);





extern void CGContextBeginPage(CGContextRef c, const CGRect *mediaBox);



extern void CGContextEndPage(CGContextRef c);





extern CGContextRef CGContextRetain(CGContextRef c);



extern void CGContextRelease(CGContextRef c);



extern void CGContextFlush(CGContextRef c);



extern void CGContextSynchronize(CGContextRef c);






extern void CGContextSetShouldAntialias(CGContextRef c, bool shouldAntialias);






extern void CGContextSetAllowsAntialiasing(CGContextRef context, bool allowsAntialiasing) ;
# 773 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextSetShouldSmoothFonts(CGContextRef c, bool shouldSmoothFonts) ;
# 791 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern void CGContextBeginTransparencyLayer(CGContextRef context, CFDictionaryRef auxiliaryInfo) ;
# 803 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 3
extern const CFStringRef kCGTransparencyLayerContentBounds ;



extern void CGContextEndTransparencyLayer(CGContextRef context) ;






extern CGAffineTransform CGContextGetUserSpaceToDeviceSpaceTransform(CGContextRef c) ;



extern CGPoint CGContextConvertPointToDeviceSpace(CGContextRef c, CGPoint point) ;



extern CGPoint CGContextConvertPointToUserSpace(CGContextRef c, CGPoint point) ;



extern CGSize CGContextConvertSizeToDeviceSpace(CGContextRef c, CGSize size) ;



extern CGSize CGContextConvertSizeToUserSpace(CGContextRef c, CGSize size) ;






extern CGRect CGContextConvertRectToDeviceSpace(CGContextRef c, CGRect rect) ;






extern CGRect CGContextConvertRectToUserSpace(CGContextRef c, CGRect rect) ;

}
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h" 2 3

extern "C" {
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h" 3
extern CGContextRef CGBitmapContextCreate(void *data, size_t width, size_t height, size_t bitsPerComponent, size_t bytesPerRow, CGColorSpaceRef colorspace, CGBitmapInfo bitmapInfo);




extern void *CGBitmapContextGetData(CGContextRef c) ;




extern size_t CGBitmapContextGetWidth(CGContextRef c) ;




extern size_t CGBitmapContextGetHeight(CGContextRef c) ;




extern size_t CGBitmapContextGetBitsPerComponent(CGContextRef c) ;




extern size_t CGBitmapContextGetBitsPerPixel(CGContextRef c) ;




extern size_t CGBitmapContextGetBytesPerRow(CGContextRef c) ;




extern CGColorSpaceRef CGBitmapContextGetColorSpace(CGContextRef c) ;




extern CGImageAlphaInfo CGBitmapContextGetAlphaInfo(CGContextRef c) ;




extern CGBitmapInfo CGBitmapContextGetBitmapInfo(CGContextRef c) ;
# 86 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h" 3
extern CGImageRef CGBitmapContextCreateImage(CGContextRef c) ;

}
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 1 3
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColorSpace.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataConsumer.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataConsumer.h" 3
typedef struct CGDataConsumer *CGDataConsumerRef;





extern "C" {




typedef size_t (*CGDataConsumerPutBytesCallback)(void *info, const void *buffer, size_t count);




typedef void (*CGDataConsumerReleaseInfoCallback)(void *info);







struct CGDataConsumerCallbacks {
    CGDataConsumerPutBytesCallback putBytes;
    CGDataConsumerReleaseInfoCallback releaseConsumer;
};
typedef struct CGDataConsumerCallbacks CGDataConsumerCallbacks;



extern CFTypeID CGDataConsumerGetTypeID(void) ;




extern CGDataConsumerRef CGDataConsumerCreate(void *info, const CGDataConsumerCallbacks *callbacks);



extern CGDataConsumerRef CGDataConsumerCreateWithURL(CFURLRef url);



extern CGDataConsumerRef CGDataConsumerCreateWithCFData(CFMutableDataRef data) ;



extern CGDataConsumerRef CGDataConsumerRetain(CGDataConsumerRef consumer);



extern void CGDataConsumerRelease(CGDataConsumerRef consumer);

}
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 1 3
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGError.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGError.h" 3
extern "C" {


enum _CGError {
    kCGErrorSuccess = 0,
    kCGErrorFirst = 1000,
    kCGErrorFailure = kCGErrorFirst,
    kCGErrorIllegalArgument = 1001,
    kCGErrorInvalidConnection = 1002,
    kCGErrorInvalidContext = 1003,
    kCGErrorCannotComplete = 1004,
    kCGErrorNameTooLong = 1005,
    kCGErrorNotImplemented = 1006,
    kCGErrorRangeCheck = 1007,
    kCGErrorTypeCheck = 1008,
    kCGErrorNoCurrentPoint = 1009,
    kCGErrorInvalidOperation = 1010,
    kCGErrorNoneAvailable = 1011,


 kCGErrorApplicationRequiresNewerSystem = 1015,



 kCGErrorApplicationNotPermittedToExecute = 1016,


 kCGErrorApplicationIncorrectExecutableFormatFound = 1023,



 kCGErrorApplicationIsLaunching = 1024,




 kCGErrorApplicationAlreadyRunning = 1025,



 kCGErrorApplicationCanOnlyBeRunInOneSessionAtATime = 1026,



 kCGErrorClassicApplicationsMustBeLaunchedByClassic = 1027,




 kCGErrorForkFailed = 1028,


    kCGErrorLast = kCGErrorForkFailed
};
typedef int32_t CGError;

}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 2 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern "C" {

typedef uint32_t CGDirectDisplayID;
typedef struct _CGDirectPaletteRef * CGDirectPaletteRef;
typedef uint32_t CGDisplayCount;
typedef uint32_t CGTableCount;
typedef int32_t CGDisplayCoord;
typedef uint8_t CGByteValue;
typedef uint32_t CGOpenGLDisplayMask;
typedef uint32_t CGBeamPosition;
typedef int32_t CGMouseDelta;
typedef double CGRefreshRate;
typedef uint32_t CGCaptureOptions;

typedef CGError CGDisplayErr;






CGDirectDisplayID CGMainDisplayID(void) ;
# 63 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern CGDisplayErr CGGetDisplaysWithPoint(CGPoint point,
                             CGDisplayCount maxDisplays,
                             CGDirectDisplayID * dspys,
                             CGDisplayCount * dspyCnt) ;

extern CGDisplayErr CGGetDisplaysWithRect(CGRect rect,
                            CGDisplayCount maxDisplays,
                            CGDirectDisplayID * dspys,
                            CGDisplayCount * dspyCnt) ;

extern CGDisplayErr CGGetDisplaysWithOpenGLDisplayMask(CGOpenGLDisplayMask mask,
                            CGDisplayCount maxDisplays,
                            CGDirectDisplayID * dspys,
                            CGDisplayCount * dspyCnt) ;
# 89 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern CGDisplayErr CGGetActiveDisplayList(CGDisplayCount maxDisplays,
                             CGDirectDisplayID * activeDspys,
                             CGDisplayCount * dspyCnt) ;
# 100 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern CGDisplayErr CGGetOnlineDisplayList(CGDisplayCount maxDisplays,
                                    CGDirectDisplayID * onlineDspys,
                                    CGDisplayCount * dspyCnt) ;


extern CGOpenGLDisplayMask CGDisplayIDToOpenGLDisplayMask(CGDirectDisplayID display) ;







extern CGDirectDisplayID CGOpenGLDisplayMaskToDisplayID(CGOpenGLDisplayMask mask) ;


extern CGRect CGDisplayBounds(CGDirectDisplayID display) ;

extern size_t CGDisplayPixelsWide(CGDirectDisplayID display) ;
extern size_t CGDisplayPixelsHigh(CGDirectDisplayID display) ;
# 177 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern CFArrayRef CGDisplayAvailableModes(CGDirectDisplayID display) ;
# 196 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern CFDictionaryRef CGDisplayBestModeForParameters(CGDirectDisplayID display, size_t bitsPerPixel, size_t width, size_t height, boolean_t * exactMatch) ;

extern CFDictionaryRef CGDisplayBestModeForParametersAndRefreshRate(CGDirectDisplayID display, size_t bitsPerPixel, size_t width, size_t height, CGRefreshRate refresh, boolean_t * exactMatch) ;

extern CFDictionaryRef CGDisplayBestModeForParametersAndRefreshRateWithProperty(CGDirectDisplayID display, size_t bitsPerPixel, size_t width, size_t height, CGRefreshRate refresh, CFStringRef property, boolean_t * exactMatch) ;





extern CFDictionaryRef CGDisplayCurrentMode(CGDirectDisplayID display) ;
# 222 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern CGDisplayErr CGDisplaySwitchToMode(CGDirectDisplayID display, CFDictionaryRef mode) ;


extern size_t CGDisplayBitsPerPixel(CGDirectDisplayID display) ;
extern size_t CGDisplayBitsPerSample(CGDirectDisplayID display) ;
extern size_t CGDisplaySamplesPerPixel(CGDirectDisplayID display) ;
extern size_t CGDisplayBytesPerRow(CGDirectDisplayID display) ;
# 245 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
typedef float CGGammaValue;

extern CGDisplayErr CGSetDisplayTransferByFormula(CGDirectDisplayID display,
                                    CGGammaValue redMin,
                                    CGGammaValue redMax,
                                    CGGammaValue redGamma,
                                    CGGammaValue greenMin,
                                    CGGammaValue greenMax,
                                    CGGammaValue greenGamma,
                                    CGGammaValue blueMin,
                                    CGGammaValue blueMax,
                                    CGGammaValue blueGamma) ;

extern CGDisplayErr CGGetDisplayTransferByFormula(CGDirectDisplayID display,
                                    CGGammaValue *redMin,
                                    CGGammaValue *redMax,
                                    CGGammaValue *redGamma,
                                    CGGammaValue *greenMin,
                                    CGGammaValue *greenMax,
                                    CGGammaValue *greenGamma,
                                    CGGammaValue *blueMin,
                                    CGGammaValue *blueMax,
                                    CGGammaValue *blueGamma) ;




extern CGTableCount CGDisplayGammaTableCapacity(CGDirectDisplayID display) ;
# 282 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern CGDisplayErr CGSetDisplayTransferByTable(CGDirectDisplayID display,
                                  CGTableCount tableSize,
                                  const CGGammaValue *redTable,
                                  const CGGammaValue *greenTable,
                                  const CGGammaValue *blueTable) ;






extern CGDisplayErr CGGetDisplayTransferByTable(CGDirectDisplayID display,
                                  CGTableCount capacity,
                                  CGGammaValue *redTable,
                                  CGGammaValue *greenTable,
                                  CGGammaValue *blueTable,
                                  CGTableCount *sampleCount) ;


extern CGDisplayErr CGSetDisplayTransferByByteTable(CGDirectDisplayID display,
                                      CGTableCount tableSize,
                                      const CGByteValue *redTable,
                                      const CGByteValue *greenTable,
                                      const CGByteValue *blueTable) ;


extern void CGDisplayRestoreColorSyncSettings(void) ;




enum {
    kCGCaptureNoOptions = 0,
    kCGCaptureNoFill = (1 << 0)
};


extern boolean_t CGDisplayIsCaptured(CGDirectDisplayID display) ;
extern CGDisplayErr CGDisplayCapture(CGDirectDisplayID display) ;
extern CGDisplayErr CGDisplayCaptureWithOptions(CGDirectDisplayID display, CGCaptureOptions options) ;
extern CGDisplayErr CGDisplayRelease(CGDirectDisplayID display) ;






extern CGDisplayErr CGCaptureAllDisplays(void) ;
extern CGDisplayErr CGCaptureAllDisplaysWithOptions(CGCaptureOptions options) ;






extern CGDisplayErr CGReleaseAllDisplays(void) ;





extern uint32_t CGShieldingWindowID(CGDirectDisplayID display) ;






extern int32_t CGShieldingWindowLevel(void) ;






extern void * CGDisplayBaseAddress(CGDirectDisplayID display) ;







extern void * CGDisplayAddressForPosition(CGDirectDisplayID display, CGDisplayCoord x, CGDisplayCoord y) ;



extern CGDisplayErr CGDisplayHideCursor(CGDirectDisplayID display) ;
extern CGDisplayErr CGDisplayShowCursor(CGDirectDisplayID display) ;







extern CGDisplayErr CGDisplayMoveCursorToPoint(CGDirectDisplayID display, CGPoint point) ;





extern void CGGetLastMouseDelta( CGMouseDelta * deltaX, CGMouseDelta * deltaY ) ;
# 394 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern boolean_t CGDisplayCanSetPalette(CGDirectDisplayID display) ;
# 403 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern CGDisplayErr CGDisplaySetPalette(CGDirectDisplayID display, const CGDirectPaletteRef palette) ;
# 435 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern CGDisplayErr CGDisplayWaitForBeamPositionOutsideLines( CGDirectDisplayID display,
                                                       CGBeamPosition upperScanLine,
                                                       CGBeamPosition lowerScanLine ) ;






extern CGBeamPosition CGDisplayBeamPosition( CGDirectDisplayID display ) ;
# 465 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 3
extern CGContextRef CGDisplayGetDrawingContext(CGDirectDisplayID display) ;

}
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectPalette.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectPalette.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectPalette.h" 2 3

extern "C" {

typedef float CGPaletteBlendFraction;







struct _CGDeviceColor
{
    float red;
    float green;
    float blue;
};
typedef struct _CGDeviceColor CGDeviceColor;

struct _CGDeviceByteColor
{
    CGByteValue red;
    CGByteValue green;
    CGByteValue blue;
};
typedef struct _CGDeviceByteColor CGDeviceByteColor;





extern CGDirectPaletteRef CGPaletteCreateDefaultColorPalette(void) ;






extern CGDirectPaletteRef CGPaletteCreateWithDisplay(CGDirectDisplayID display) ;





extern CGDirectPaletteRef CGPaletteCreateWithCapacity( CGTableCount capacity ) ;





extern CGDirectPaletteRef CGPaletteCreateWithSamples(CGDeviceColor * sampleTable, CGTableCount sampleCount) ;






extern CGDirectPaletteRef CGPaletteCreateWithByteSamples(CGDeviceByteColor * sampleTable, CGTableCount sampleCount) ;




extern void CGPaletteRelease( CGDirectPaletteRef palette ) ;




extern CGDeviceColor CGPaletteGetColorAtIndex(CGDirectPaletteRef palette, CGTableCount index) ;






extern CGTableCount CGPaletteGetIndexForColor(CGDirectPaletteRef palette, CGDeviceColor color) ;




extern CGTableCount CGPaletteGetNumberOfSamples(CGDirectPaletteRef palette) ;





extern void CGPaletteSetColorAtIndex(CGDirectPaletteRef palette, CGDeviceColor color, CGTableCount index) ;




extern CGDirectPaletteRef CGPaletteCreateCopy(CGDirectPaletteRef palette) ;




extern Boolean CGPaletteIsEqualToPalette(CGDirectPaletteRef palette1, CGDirectPaletteRef palette2) ;





extern CGDirectPaletteRef CGPaletteCreateFromPaletteBlendedWithColor(
                                          CGDirectPaletteRef palette,
                                          CGPaletteBlendFraction fraction,
                                          CGDeviceColor color) ;

}
# 22 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 2 3


extern "C" {
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
typedef struct _CGDisplayConfigRef * CGDisplayConfigRef;


extern CGError CGBeginDisplayConfiguration(CGDisplayConfigRef *pConfigRef) ;
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern CGError CGConfigureDisplayOrigin(CGDisplayConfigRef configRef,
                                 CGDirectDisplayID display,
                                 CGDisplayCoord x,
                                 CGDisplayCoord y) ;
# 60 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern CGError CGConfigureDisplayMode(CGDisplayConfigRef configRef,
                                CGDirectDisplayID display,
                                CFDictionaryRef mode) ;
# 89 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern CGError CGConfigureDisplayStereoOperation(CGDisplayConfigRef configRef, CGDirectDisplayID display, boolean_t stereo, boolean_t forceBlueLine);
# 113 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern CGError CGConfigureDisplayMirrorOfDisplay(CGDisplayConfigRef configRef,
                                                     CGDirectDisplayID display,
                                                     CGDirectDisplayID masterDisplay) ;


extern CGError CGCancelDisplayConfiguration(CGDisplayConfigRef configRef) ;
# 142 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
enum {
    kCGConfigureForAppOnly = 0,
    kCGConfigureForSession = 1,
    kCGConfigurePermanently = 2
};
typedef u_int32_t CGConfigureOption;

extern CGError CGCompleteDisplayConfiguration( CGDisplayConfigRef configRef, CGConfigureOption option ) ;


extern void CGRestorePermanentDisplayConfiguration(void) ;
# 185 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
enum {
    kCGDisplayBeginConfigurationFlag = (1 << 0),
    kCGDisplayMovedFlag = (1 << 1),
    kCGDisplaySetMainFlag = (1 << 2),
    kCGDisplaySetModeFlag = (1 << 3),
    kCGDisplayAddFlag = (1 << 4),
    kCGDisplayRemoveFlag = (1 << 5),
    kCGDisplayEnabledFlag = (1 << 8),
    kCGDisplayDisabledFlag = (1 << 9),
    kCGDisplayMirrorFlag = (1 << 10),
    kCGDisplayUnMirrorFlag = (1 << 11),
    kCGDisplayDesktopShapeChangedFlag = (1 << 12)
};
typedef u_int32_t CGDisplayChangeSummaryFlags;

typedef void(*CGDisplayReconfigurationCallBack)(CGDirectDisplayID display,
                                                CGDisplayChangeSummaryFlags flags,
                                                void *userInfo);






extern CGError CGDisplayRegisterReconfigurationCallback(CGDisplayReconfigurationCallBack proc, void *userInfo) ;
extern CGError CGDisplayRemoveReconfigurationCallback(CGDisplayReconfigurationCallBack proc, void *userInfo) ;
# 257 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern CGError CGDisplaySetStereoOperation(CGDirectDisplayID display, boolean_t stereo, boolean_t forceBlueLine, CGConfigureOption option);
# 277 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern boolean_t CGDisplayIsActive(CGDirectDisplayID display) ;


extern boolean_t CGDisplayIsAsleep(CGDirectDisplayID display) ;





extern boolean_t CGDisplayIsOnline(CGDirectDisplayID display) ;


extern boolean_t CGDisplayIsMain(CGDirectDisplayID display) ;


extern boolean_t CGDisplayIsBuiltin(CGDirectDisplayID display) ;


extern boolean_t CGDisplayIsInMirrorSet(CGDirectDisplayID display) ;


extern boolean_t CGDisplayIsAlwaysInMirrorSet(CGDirectDisplayID display) ;


extern boolean_t CGDisplayIsInHWMirrorSet(CGDirectDisplayID display) ;


extern CGDirectDisplayID CGDisplayMirrorsDisplay(CGDirectDisplayID display) ;


extern boolean_t CGDisplayUsesOpenGLAcceleration(CGDirectDisplayID display) ;


extern boolean_t CGDisplayIsStereo(CGDirectDisplayID display);





extern CGDirectDisplayID CGDisplayPrimaryDisplay(CGDirectDisplayID display) ;





extern uint32_t CGDisplayUnitNumber(CGDirectDisplayID display) ;
extern uint32_t CGDisplayVendorNumber(CGDirectDisplayID display) ;
extern uint32_t CGDisplayModelNumber(CGDirectDisplayID display) ;
extern uint32_t CGDisplaySerialNumber(CGDirectDisplayID display) ;


extern io_service_t CGDisplayIOServicePort(CGDirectDisplayID display) ;
# 339 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern CGSize CGDisplayScreenSize(CGDirectDisplayID display) ;
# 352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 3
extern double CGDisplayRotation(CGDirectDisplayID display) ;

}
# 23 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayConfiguration.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 2 3

extern "C" {

typedef uint32_t CGDisplayFadeReservationToken;


typedef float CGDisplayBlendFraction;
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 3
typedef float CGDisplayFadeInterval;
# 59 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 3
extern CGError CGConfigureDisplayFadeEffect(CGDisplayConfigRef configRef,
                                     CGDisplayFadeInterval fadeOutSeconds,
                                     CGDisplayFadeInterval fadeInSeconds,
                                     float fadeRed,
                                     float fadeGreen,
                                     float fadeBlue) ;







typedef float CGDisplayReservationInterval;
# 88 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 3
extern CGError CGAcquireDisplayFadeReservation(CGDisplayReservationInterval seconds,
                                        CGDisplayFadeReservationToken * pNewToken) ;
# 103 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 3
extern CGError CGReleaseDisplayFadeReservation(CGDisplayFadeReservationToken myToken) ;
# 154 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDisplayFade.h" 3
extern CGError CGDisplayFade(CGDisplayFadeReservationToken myToken,
                      CGDisplayFadeInterval seconds,
                      CGDisplayBlendFraction startBlend,
                      CGDisplayBlendFraction endBlend,
                      float redBlend, float greenBlend, float blueBlend,
                      boolean_t synchronous ) ;




extern boolean_t CGDisplayFadeOperationInProgress(void) ;

}
# 24 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGError.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGError.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGError.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDirectDisplay.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 2 3


extern "C" {

typedef CGError CGEventErr;
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
typedef u_int32_t CGRectCount;
typedef void (*CGScreenRefreshCallback)(CGRectCount count, const CGRect * rectArray, void * userParameter);
# 56 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern CGError CGRegisterScreenRefreshCallback( CGScreenRefreshCallback function, void * userParameter ) ;





extern void CGUnregisterScreenRefreshCallback( CGScreenRefreshCallback function, void * userParameter ) ;
# 75 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern CGError CGWaitForScreenRefreshRects( CGRect ** pRectArray, CGRectCount * pCount ) ;
# 84 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
enum _CGScreenUpdateOperation
{
        kCGScreenUpdateOperationRefresh = 0,
        kCGScreenUpdateOperationMove = (1 << 0),
        kCGScreenUpdateOperationReducedDirtyRectangleCount = (1 << 31)
};
typedef uint32_t CGScreenUpdateOperation;
# 102 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
 struct _CGScreenUpdateMoveDelta {
      int32_t dX, dY;
};
typedef struct _CGScreenUpdateMoveDelta CGScreenUpdateMoveDelta;
# 133 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
typedef void (*CGScreenUpdateMoveCallback)(CGScreenUpdateMoveDelta delta,
                                           size_t count,
                                           const CGRect * rectArray,
                                           void * userParameter);







extern CGError CGScreenRegisterMoveCallback( CGScreenUpdateMoveCallback function, void * userParameter ) ;




extern void CGScreenUnregisterMoveCallback( CGScreenUpdateMoveCallback function, void * userParameter ) ;
# 172 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern CGError CGWaitForScreenUpdateRects( CGScreenUpdateOperation requestedOperations,
                                              CGScreenUpdateOperation * currentOperation,
                                              CGRect ** pRectArray,
                                              size_t * pCount,
                                              CGScreenUpdateMoveDelta *pDelta ) ;




extern void CGReleaseScreenRefreshRects( CGRect * rectArray ) ;
# 190 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern boolean_t CGCursorIsVisible(void) ;
extern boolean_t CGCursorIsDrawnInFramebuffer(void) ;
# 219 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
typedef u_int32_t CGButtonCount;
extern CGError CGPostMouseEvent( CGPoint mouseCursorPosition,
                                        boolean_t updateMouseCursorPosition,
                                        CGButtonCount buttonCount,
                                        boolean_t mouseButtonDown, ... ) ;
# 239 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
typedef u_int32_t CGWheelCount;
extern CGError CGPostScrollWheelEvent( CGWheelCount wheelCount,
                                            int32_t wheel1, ... ) ;
# 258 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
typedef u_int16_t CGCharCode;
typedef u_int16_t CGKeyCode;

extern CGError CGPostKeyboardEvent( CGCharCode keyChar,
                                          CGKeyCode virtualKey,
                                          boolean_t keyDown ) ;





extern CGError CGWarpMouseCursorPosition( CGPoint newCursorPosition ) ;
# 283 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern CGError CGInhibitLocalEvents( boolean_t doInhibit) ;





extern CGError CGSetLocalEventsSuppressionInterval(CFTimeInterval seconds) ;
# 307 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern CGError CGEnableEventStateCombining(boolean_t doCombineState) ;
# 323 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
enum
{
    kCGEventFilterMaskPermitLocalMouseEvents = 0x00000001,
    kCGEventFilterMaskPermitLocalKeyboardEvents = 0x00000002,
    kCGEventFilterMaskPermitSystemDefinedEvents = 0x00000004
};
typedef uint32_t CGEventFilterMask;

enum
{
    kCGEventSuppressionStateSuppressionInterval = 0,
    kCGEventSuppressionStateRemoteMouseDrag,
    kCGNumberOfEventSuppressionStates
};
typedef uint32_t CGEventSuppressionState;





extern CGError CGSetLocalEventsFilterDuringSuppressionState(CGEventFilterMask filter,
CGEventSuppressionState state) ;
# 376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern CGError CGAssociateMouseAndMouseCursorPosition(boolean_t connected) ;
# 416 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
extern CFMachPortRef CGWindowServerCFMachPort(void) ;
# 431 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 3
}
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 2 3

# 1 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 1 3
# 48 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 3
# 1 "/usr/include/libkern/OSTypes.h" 1 3 4
# 33 "/usr/include/libkern/OSTypes.h" 3 4
typedef unsigned int UInt;
typedef signed int SInt;
# 49 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 2 3
# 1 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 1 3
# 39 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 3
# 1 "/System/Library/Frameworks/IOKit.framework/Headers/IOSharedLock.h" 1 3
# 52 "/System/Library/Frameworks/IOKit.framework/Headers/IOSharedLock.h" 3
extern "C" {



typedef volatile int IOSharedLockData;
typedef IOSharedLockData * IOSharedLock;



extern void IOSpinLock(IOSharedLock l);

extern void IOSpinUnlock(IOSharedLock l);
extern boolean_t IOTrySpinLock(IOSharedLock l);



typedef IOSharedLockData ev_lock_data_t;
typedef ev_lock_data_t * ev_lock_t;





extern void ev_lock(ev_lock_t l);

extern void ev_unlock(ev_lock_t l);
extern boolean_t ev_try_lock(ev_lock_t l);


}
# 40 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 2 3
# 1 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 1 3
# 30 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
extern "C" {




typedef SInt32 IOIndex;
typedef UInt32 IOSelect;
typedef UInt32 IOFixed1616;
typedef UInt32 IODisplayVendorID;
typedef UInt32 IODisplayProductID;

typedef SInt32 IODisplayModeID;
enum {

    kIODisplayModeIDBootProgrammable = (long)0xFFFFFFFB,

    kIODisplayModeIDReservedBase = (long)0x80000000
};

enum {
    kIOMaxPixelBits = 64
};
typedef char IOPixelEncoding[ kIOMaxPixelBits ];
# 74 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
enum {
    kIOCLUTPixels = 0,
    kIOFixedCLUTPixels = 1,
    kIORGBDirectPixels = 2,
    kIOMonoDirectPixels = 3,
    kIOMonoInverseDirectPixels = 4
};
# 100 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IOPixelInformation {
    IOByteCount bytesPerRow;
    IOByteCount bytesPerPlane;
    UInt32 bitsPerPixel;
    UInt32 pixelType;
    UInt32 componentCount;
    UInt32 bitsPerComponent;
    UInt32 componentMasks[ 8 * 2 ];
    IOPixelEncoding pixelFormat;
    UInt32 flags;
    UInt32 activeWidth;
    UInt32 activeHeight;
    UInt32 reserved[ 2 ];
};
typedef struct IOPixelInformation IOPixelInformation;


typedef UInt32 IOAppleTimingID;
# 135 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IODisplayModeInformation {
    UInt32 nominalWidth;
    UInt32 nominalHeight;
    IOFixed1616 refreshRate;
    IOIndex maxDepthIndex;
    UInt32 flags;
    UInt32 reserved[ 4 ];
};
typedef struct IODisplayModeInformation IODisplayModeInformation;


enum {
    kDisplayModeSafetyFlags = 0x00000007,

    kDisplayModeAlwaysShowFlag = 0x00000008,
    kDisplayModeNeverShowFlag = 0x00000080,
    kDisplayModeNotResizeFlag = 0x00000010,
    kDisplayModeRequiresPanFlag = 0x00000020,

    kDisplayModeInterlacedFlag = 0x00000040,

    kDisplayModeSimulscanFlag = 0x00000100,
    kDisplayModeBuiltInFlag = 0x00000400,
    kDisplayModeNotPresetFlag = 0x00000200,
    kDisplayModeStretchedFlag = 0x00000800,
    kDisplayModeNotGraphicsQualityFlag = 0x00001000,
    kDisplayModeTelevisionFlag = 0x00100000,
    kDisplayModeValidForMirroringFlag = 0x00200000
};
enum {
    kDisplayModeValidFlag = 0x00000001,
    kDisplayModeSafeFlag = 0x00000002,
    kDisplayModeDefaultFlag = 0x00000004
};



struct IOFramebufferInformation {
    IOPhysicalAddress baseAddress;
    UInt32 activeWidth;
    UInt32 activeHeight;
    IOByteCount bytesPerRow;
    IOByteCount bytesPerPlane;
    UInt32 bitsPerPixel;
    UInt32 pixelType;
    UInt32 flags;
    UInt32 reserved[ 4 ];
};
typedef struct IOFramebufferInformation IOFramebufferInformation;


enum {
    kFramebufferSupportsCopybackCache = 0x00010000,
    kFramebufferSupportsWritethruCache = 0x00020000,
    kFramebufferSupportsGammaCorrection = 0x00040000,
    kFramebufferDisableAltivecAccess = 0x00080000
};


typedef IOIndex IOPixelAperture;
enum {
    kIOFBSystemAperture = 0
};



typedef UInt16 IOColorComponent;
# 213 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IOColorEntry {
    UInt16 index;
    IOColorComponent red;
    IOColorComponent green;
    IOColorComponent blue;
};
typedef struct IOColorEntry IOColorEntry;


enum {
    kSetCLUTByValue = 0x00000001,
    kSetCLUTImmediately = 0x00000002,
    kSetCLUTWithLuminance = 0x00000004
};



enum {
    kIOPowerAttribute = 'powr',
    kIOHardwareCursorAttribute = 'crsr',

    kIOMirrorAttribute = 'mirr',
    kIOMirrorDefaultAttribute = 'mrdf',

    kIOCapturedAttribute = 'capd',

    kIOCursorControlAttribute = 'crsc',

    kIOSystemPowerAttribute = 'spwr',
    kIOVRAMSaveAttribute = 'vrsv',
    kIODeferCLUTSetAttribute = 'vclt',

    kIOClamshellStateAttribute = 'clam'
};


enum {
    kIOMirrorIsPrimary = 0x80000000,
    kIOMirrorHWClipped = 0x40000000
};


enum {
    kIOMirrorDefault = 0x00000001,
    kIOMirrorForced = 0x00000002
};



struct IODetailedTimingInformationV1 {

    UInt32 pixelClock;
    UInt32 horizontalActive;
    UInt32 horizontalBlanking;
    UInt32 horizontalBorder;
    UInt32 horizontalSyncOffset;
    UInt32 horizontalSyncWidth;
    UInt32 verticalActive;
    UInt32 verticalBlanking;
    UInt32 verticalBorder;
    UInt32 verticalSyncOffset;
    UInt32 verticalSyncWidth;
};
typedef struct IODetailedTimingInformationV1 IODetailedTimingInformationV1;
# 325 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IODetailedTimingInformationV2 {

    UInt32 __reservedA[3];
    UInt32 horizontalScaledInset;
    UInt32 verticalScaledInset;

    UInt32 scalerFlags;
    UInt32 horizontalScaled;
    UInt32 verticalScaled;

    UInt32 signalConfig;
    UInt32 signalLevels;

    UInt64 pixelClock;

    UInt64 minPixelClock;
    UInt64 maxPixelClock;

    UInt32 horizontalActive;
    UInt32 horizontalBlanking;
    UInt32 horizontalSyncOffset;
    UInt32 horizontalSyncPulseWidth;

    UInt32 verticalActive;
    UInt32 verticalBlanking;
    UInt32 verticalSyncOffset;
    UInt32 verticalSyncPulseWidth;

    UInt32 horizontalBorderLeft;
    UInt32 horizontalBorderRight;
    UInt32 verticalBorderTop;
    UInt32 verticalBorderBottom;

    UInt32 horizontalSyncConfig;
    UInt32 horizontalSyncLevel;
    UInt32 verticalSyncConfig;
    UInt32 verticalSyncLevel;
    UInt32 numLinks;

    UInt32 __reservedB[7];
};
typedef struct IODetailedTimingInformationV2 IODetailedTimingInformationV2;
typedef struct IODetailedTimingInformationV2 IODetailedTimingInformation;

struct IOTimingInformation {
    IOAppleTimingID appleTimingID;
    UInt32 flags;
    union {
      IODetailedTimingInformationV1 v1;
      IODetailedTimingInformationV2 v2;
    } detailedInfo;
};
typedef struct IOTimingInformation IOTimingInformation;

enum {

    kIODetailedTimingValid = 0x80000000,
    kIOScalingInfoValid = 0x40000000
};

enum {

    kIOScaleStretchToFit = 0x00000001,

    kIOScaleRotateFlags = 0x000000f0,

    kIOScaleSwapAxes = 0x00000010,
    kIOScaleInvertX = 0x00000020,
    kIOScaleInvertY = 0x00000040,

    kIOScaleRotate0 = 0x00000000,
    kIOScaleRotate90 = kIOScaleSwapAxes | kIOScaleInvertX,
    kIOScaleRotate180 = kIOScaleInvertX | kIOScaleInvertY,
    kIOScaleRotate270 = kIOScaleSwapAxes | kIOScaleInvertY
};


struct IOFBDisplayModeDescription {
    IODisplayModeInformation info;
    IOTimingInformation timingInfo;
};
typedef struct IOFBDisplayModeDescription IOFBDisplayModeDescription;
# 489 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IODisplayTimingRange
{
    UInt32 __reservedA[2];
    UInt32 version;
    UInt32 __reservedB[5];

    UInt64 minPixelClock;
    UInt64 maxPixelClock;

    UInt32 maxPixelError;
    UInt32 supportedSyncFlags;
    UInt32 supportedSignalLevels;
    UInt32 supportedSignalConfigs;

    UInt32 minFrameRate;
    UInt32 maxFrameRate;
    UInt32 minLineRate;
    UInt32 maxLineRate;

    UInt32 maxHorizontalTotal;
    UInt32 maxVerticalTotal;
    UInt32 __reservedD[2];

    UInt8 charSizeHorizontalActive;
    UInt8 charSizeHorizontalBlanking;
    UInt8 charSizeHorizontalSyncOffset;
    UInt8 charSizeHorizontalSyncPulse;

    UInt8 charSizeVerticalActive;
    UInt8 charSizeVerticalBlanking;
    UInt8 charSizeVerticalSyncOffset;
    UInt8 charSizeVerticalSyncPulse;

    UInt8 charSizeHorizontalBorderLeft;
    UInt8 charSizeHorizontalBorderRight;
    UInt8 charSizeVerticalBorderTop;
    UInt8 charSizeVerticalBorderBottom;

    UInt8 charSizeHorizontalTotal;
    UInt8 charSizeVerticalTotal;
    UInt16 __reservedE;

    UInt32 minHorizontalActiveClocks;
    UInt32 maxHorizontalActiveClocks;
    UInt32 minHorizontalBlankingClocks;
    UInt32 maxHorizontalBlankingClocks;

    UInt32 minHorizontalSyncOffsetClocks;
    UInt32 maxHorizontalSyncOffsetClocks;
    UInt32 minHorizontalPulseWidthClocks;
    UInt32 maxHorizontalPulseWidthClocks;

    UInt32 minVerticalActiveClocks;
    UInt32 maxVerticalActiveClocks;
    UInt32 minVerticalBlankingClocks;
    UInt32 maxVerticalBlankingClocks;

    UInt32 minVerticalSyncOffsetClocks;
    UInt32 maxVerticalSyncOffsetClocks;
    UInt32 minVerticalPulseWidthClocks;
    UInt32 maxVerticalPulseWidthClocks;

    UInt32 minHorizontalBorderLeft;
    UInt32 maxHorizontalBorderLeft;
    UInt32 minHorizontalBorderRight;
    UInt32 maxHorizontalBorderRight;

    UInt32 minVerticalBorderTop;
    UInt32 maxVerticalBorderTop;
    UInt32 minVerticalBorderBottom;
    UInt32 maxVerticalBorderBottom;
    UInt32 maxNumLinks;
    UInt32 minLink0PixelClock;
    UInt32 maxLink0PixelClock;
    UInt32 minLink1PixelClock;
    UInt32 maxLink1PixelClock;

    UInt32 __reservedF[3];
};
typedef struct IODisplayTimingRange IODisplayTimingRange;

enum {

    kIORangeSupportsSignal_0700_0300 = 0x00000001,
    kIORangeSupportsSignal_0714_0286 = 0x00000002,
    kIORangeSupportsSignal_1000_0400 = 0x00000004,
    kIORangeSupportsSignal_0700_0000 = 0x00000008
};
enum {

    kIORangeSupportsSeparateSyncs = 0x00000001,
    kIORangeSupportsSyncOnGreen = 0x00000002,
    kIORangeSupportsCompositeSync = 0x00000004,
    kIORangeSupportsVSyncSerration = 0x00000008
};
enum {

    kIORangeSupportsInterlacedCEATiming = 0x00000004,
    kIORangeSupportsInterlacedCEATimingWithConfirm = 0x00000008
};

enum {

    kIODigitalSignal = 0x00000001,
    kIOAnalogSetupExpected = 0x00000002,
    kIOInterlacedCEATiming = 0x00000004,
    kIONTSCTiming = 0x00000008,
    kIOPALTiming = 0x00000010
};

enum {

    kIOAnalogSignalLevel_0700_0300 = 0,
    kIOAnalogSignalLevel_0714_0286 = 1,
    kIOAnalogSignalLevel_1000_0400 = 2,
    kIOAnalogSignalLevel_0700_0000 = 3
};

enum {

    kIOSyncPositivePolarity = 0x00000001
};
# 632 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IODisplayScalerInformation {
    UInt32 __reservedA[1];
    UInt32 version;
    UInt32 __reservedB[2];

    IOOptionBits scalerFeatures;
    UInt32 maxHorizontalPixels;
    UInt32 maxVerticalPixels;
    UInt32 __reservedC[5];
};
typedef struct IODisplayScalerInformation IODisplayScalerInformation;

enum {

    kIOScaleStretchOnly = 0x00000001,
    kIOScaleCanUpSamplePixels = 0x00000002,
    kIOScaleCanDownSamplePixels = 0x00000004,
    kIOScaleCanScaleInterlaced = 0x00000008,
    kIOScaleCanSupportInset = 0x00000010,
    kIOScaleCanRotate = 0x00000020,
    kIOScaleCanBorderInsetOnly = 0x00000040
};



enum {
    kOrConnections = 0xffffffe,
    kAndConnections = 0xffffffd
};

enum {
    kConnectionFlags = 'flgs',
    kConnectionSyncEnable = 'sync',
    kConnectionSyncFlags = 'sycf',
    kConnectionSupportsAppleSense = 'asns',
    kConnectionSupportsLLDDCSense = 'lddc',
    kConnectionSupportsHLDDCSense = 'hddc',
    kConnectionEnable = 'enab',
    kConnectionProbe = 'prob',
    kConnectionChanged = 'chng',
    kConnectionPower = 'powr',
    kConnectionPostWake = 'pwak',
    kConnectionDisplayParameterCount = 'pcnt',
    kConnectionDisplayParameters = 'parm',
    kConnectionOverscan = 'oscn',
    kConnectionVideoBest = 'vbst'
};


enum {
    kIOConnectionBuiltIn = 0x00000800,
    kIOConnectionStereoSync = 0x00008000
};


enum {
    kIOHSyncDisable = 0x00000001,
    kIOVSyncDisable = 0x00000002,
    kIOCSyncDisable = 0x00000004,
    kIONoSeparateSyncControl = 0x00000040,
    kIOTriStateSyncs = 0x00000080,
    kIOSyncOnBlue = 0x00000008,
    kIOSyncOnGreen = 0x00000010,
    kIOSyncOnRed = 0x00000020
};
# 716 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
enum {

    kIOFBServerConnectType = 0,
    kIOFBSharedConnectType = 1
};

enum {

    kIOFBUserRequestProbe = 0x00000001
};

struct IOGPoint {
    SInt16 x;
    SInt16 y;
};
typedef struct IOGPoint IOGPoint;

struct IOGSize {
    SInt16 width;
    SInt16 height;
};
typedef struct IOGSize IOGSize;

struct IOGBounds {
    SInt16 minx;
    SInt16 maxx;
    SInt16 miny;
    SInt16 maxy;
};
typedef struct IOGBounds IOGBounds;



enum {
   kTransparentEncoding = 0,
   kInvertingEncoding
};

enum {
   kTransparentEncodingShift = (kTransparentEncoding << 1),
   kTransparentEncodedPixel = (0x01 << kTransparentEncodingShift),

   kInvertingEncodingShift = (kInvertingEncoding << 1),
   kInvertingEncodedPixel = (0x01 << kInvertingEncodingShift)
};

enum {
   kHardwareCursorDescriptorMajorVersion = 0x0001,
   kHardwareCursorDescriptorMinorVersion = 0x0000
};
# 784 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
struct IOHardwareCursorDescriptor {
   UInt16 majorVersion;
   UInt16 minorVersion;
   UInt32 height;
   UInt32 width;
   UInt32 bitDepth;
   UInt32 maskBitDepth;
   UInt32 numColors;
   UInt32 * colorEncodings;
   UInt32 flags;
   UInt32 supportedSpecialEncodings;
   UInt32 specialEncodings[16];
};
typedef struct IOHardwareCursorDescriptor IOHardwareCursorDescriptor;



enum {
    kIOFBVBLInterruptType = 'vbl ',
    kIOFBHBLInterruptType = 'hbl ',
    kIOFBFrameInterruptType = 'fram',

    kIOFBConnectInterruptType = 'dci ',

    kIOFBChangedInterruptType = 'chng',

    kIOFBOfflineInterruptType = 'remv',

    kIOFBOnlineInterruptType = 'add '
};


enum {
    kIOTimingIDInvalid = 0,
    kIOTimingIDApple_FixedRateLCD = 42,
    kIOTimingIDApple_512x384_60hz = 130,
    kIOTimingIDApple_560x384_60hz = 135,
    kIOTimingIDApple_640x480_67hz = 140,
    kIOTimingIDApple_640x400_67hz = 145,
    kIOTimingIDVESA_640x480_60hz = 150,
    kIOTimingIDVESA_640x480_72hz = 152,
    kIOTimingIDVESA_640x480_75hz = 154,
    kIOTimingIDVESA_640x480_85hz = 158,
    kIOTimingIDGTF_640x480_120hz = 159,
    kIOTimingIDApple_640x870_75hz = 160,
    kIOTimingIDApple_640x818_75hz = 165,
    kIOTimingIDApple_832x624_75hz = 170,
    kIOTimingIDVESA_800x600_56hz = 180,
    kIOTimingIDVESA_800x600_60hz = 182,
    kIOTimingIDVESA_800x600_72hz = 184,
    kIOTimingIDVESA_800x600_75hz = 186,
    kIOTimingIDVESA_800x600_85hz = 188,
    kIOTimingIDVESA_1024x768_60hz = 190,
    kIOTimingIDVESA_1024x768_70hz = 200,
    kIOTimingIDVESA_1024x768_75hz = 204,
    kIOTimingIDVESA_1024x768_85hz = 208,
    kIOTimingIDApple_1024x768_75hz = 210,
    kIOTimingIDApple_1152x870_75hz = 220,
    kIOTimingIDAppleNTSC_ST = 230,
    kIOTimingIDAppleNTSC_FF = 232,
    kIOTimingIDAppleNTSC_STconv = 234,
    kIOTimingIDAppleNTSC_FFconv = 236,
    kIOTimingIDApplePAL_ST = 238,
    kIOTimingIDApplePAL_FF = 240,
    kIOTimingIDApplePAL_STconv = 242,
    kIOTimingIDApplePAL_FFconv = 244,
    kIOTimingIDVESA_1280x960_75hz = 250,
    kIOTimingIDVESA_1280x960_60hz = 252,
    kIOTimingIDVESA_1280x960_85hz = 254,
    kIOTimingIDVESA_1280x1024_60hz = 260,
    kIOTimingIDVESA_1280x1024_75hz = 262,
    kIOTimingIDVESA_1280x1024_85hz = 268,
    kIOTimingIDVESA_1600x1200_60hz = 280,
    kIOTimingIDVESA_1600x1200_65hz = 282,
    kIOTimingIDVESA_1600x1200_70hz = 284,
    kIOTimingIDVESA_1600x1200_75hz = 286,
    kIOTimingIDVESA_1600x1200_80hz = 288,
    kIOTimingIDVESA_1600x1200_85hz = 289,
    kIOTimingIDVESA_1792x1344_60hz = 296,
    kIOTimingIDVESA_1792x1344_75hz = 298,
    kIOTimingIDVESA_1856x1392_60hz = 300,
    kIOTimingIDVESA_1856x1392_75hz = 302,
    kIOTimingIDVESA_1920x1440_60hz = 304,
    kIOTimingIDVESA_1920x1440_75hz = 306,
    kIOTimingIDSMPTE240M_60hz = 400,
    kIOTimingIDFilmRate_48hz = 410,
    kIOTimingIDSony_1600x1024_76hz = 500,
    kIOTimingIDSony_1920x1080_60hz = 510,
    kIOTimingIDSony_1920x1080_72hz = 520,
    kIOTimingIDSony_1920x1200_76hz = 540,
    kIOTimingIDApple_0x0_0hz_Offline = 550,
    kIOTimingIDVESA_848x480_60hz = 570,
    kIOTimingIDVESA_1360x768_60hz = 590
};
# 931 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
enum {
    kDisplayVendorIDUnknown = 'unkn',
    kDisplayProductIDGeneric = 0x717
};
# 983 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
enum {
    kDisplaySubPixelLayoutUndefined = 0x00000000,
    kDisplaySubPixelLayoutRGB = 0x00000001,
    kDisplaySubPixelLayoutBGR = 0x00000002,
    kDisplaySubPixelLayoutQuadGBL = 0x00000003,
    kDisplaySubPixelLayoutQuadGBR = 0x00000004,

    kDisplaySubPixelConfigurationUndefined = 0x00000000,
    kDisplaySubPixelConfigurationDelta = 0x00000001,
    kDisplaySubPixelConfigurationStripe = 0x00000002,
    kDisplaySubPixelConfigurationStripeOffset = 0x00000003,
    kDisplaySubPixelConfigurationQuad = 0x00000004,

    kDisplaySubPixelShapeUndefined = 0x00000000,
    kDisplaySubPixelShapeRound = 0x00000001,
    kDisplaySubPixelShapeSquare = 0x00000002,
    kDisplaySubPixelShapeRectangular = 0x00000003,
    kDisplaySubPixelShapeOval = 0x00000004,
    kDisplaySubPixelShapeElliptical = 0x00000005
};
# 1039 "/System/Library/Frameworks/IOKit.framework/Headers/graphics/IOGraphicsTypes.h" 3
}
# 41 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 2 3







typedef struct evsioKeymapping
{
    int size;
    char *mapping;
} NXKeyMapping;

typedef struct evsioMouseScaling
{
    int numScaleLevels;
    short scaleThresholds[20];
    short scaleFactors[20];
} NXMouseScaling;

typedef enum {
    NX_OneButton,
    NX_LeftButton,
    NX_RightButton
} NXMouseButton;
# 83 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 3
typedef int *NXEventSystemInfoType;

typedef int NXEventSystemInfoData[(1024)];
# 117 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 3
typedef struct {
 int interface;
 int interface_addr;
 int dev_type;
 int id;
} NXEventSystemDevice;

typedef struct {
 NXEventSystemDevice dev[16];
} NXEventSystemDeviceList;
# 137 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOHIDTypes.h" 3
typedef enum {EVNOP, EVHIDE, EVSHOW, EVMOVE, EVLEVEL} EvCmd;
# 50 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 2 3
# 64 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 3
typedef float NXCoord;

typedef struct _NXPoint {
    NXCoord x, y;
} NXPoint;

typedef struct _NXSize {
    NXCoord width, height;
} NXSize;
# 333 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 3
typedef struct _NXTabletPointData {
 SInt32 x;
    SInt32 y;
 SInt32 z;
    UInt16 buttons;
    UInt16 pressure;
    struct {
        SInt16 x;
        SInt16 y;
 } tilt;
 UInt16 rotation;
 SInt16 tangentialPressure;
 UInt16 deviceID;
 SInt16 vendor1;
 SInt16 vendor2;
 SInt16 vendor3;
} NXTabletPointData, *NXTabletPointDataPtr;





typedef struct _NXTabletProximityData {
    UInt16 vendorID;
 UInt16 tabletID;
 UInt16 pointerID;
 UInt16 deviceID;
 UInt16 systemTabletID;
 UInt16 vendorPointerType;
 UInt32 pointerSerialNumber;
 UInt64 uniqueID;
 UInt32 capabilityMask;
 UInt8 pointerType;
 UInt8 enterProximity;
 SInt16 reserved1;
} NXTabletProximityData, *NXTabletProximityDataPtr;



typedef union {
    struct {
        UInt8 subx;
        UInt8 suby;
        SInt16 eventNum;
        SInt32 click;
        UInt8 pressure;
        UInt8 buttonNumber;
        UInt8 subType;
        UInt8 reserved2;
        SInt32 reserved3;
        union {
            NXTabletPointData point;
            NXTabletProximityData proximity;
        } tablet;
    } mouse;
    struct {
        SInt32 dx;
        SInt32 dy;
        UInt8 subx;
        UInt8 suby;
        UInt8 subType;
        UInt8 reserved1;
        SInt32 reserved2;
        union {
            NXTabletPointData point;
            NXTabletProximityData proximity;
        } tablet;
    } mouseMove;
    struct {
        UInt16 origCharSet;
        SInt16 repeat;
        UInt16 charSet;
        UInt16 charCode;
        UInt16 keyCode;
        UInt16 origCharCode;
        SInt32 reserved1;
        UInt32 keyboardType;
        SInt32 reserved2;
        SInt32 reserved3;
        SInt32 reserved4;
        SInt32 reserved5[4];
    } key;
    struct {
        SInt16 reserved;
        SInt16 eventNum;
        SInt32 trackingNum;
        SInt32 userData;
        SInt32 reserved1;
        SInt32 reserved2;
        SInt32 reserved3;
        SInt32 reserved4;
        SInt32 reserved5;
        SInt32 reserved6[4];
    } tracking;
    struct {
        SInt16 deltaAxis1;
        SInt16 deltaAxis2;
        SInt16 deltaAxis3;
        SInt16 reserved1;
        SInt32 fixedDeltaAxis1;
        SInt32 fixedDeltaAxis2;
        SInt32 fixedDeltaAxis3;
        SInt32 pointDeltaAxis1;
        SInt32 pointDeltaAxis2;
        SInt32 pointDeltaAxis3;
        SInt32 reserved8[4];
    } scrollWheel;
    struct {
        SInt16 reserved;
        SInt16 subType;
        union {
            float F[11];
            SInt32 L[11];
            SInt16 S[22];
            char C[44];
        } misc;
    } compound;
    struct {
        SInt32 x;
        SInt32 y;
        SInt32 z;
        UInt16 buttons;
        UInt16 pressure;
        struct {
            SInt16 x;
            SInt16 y;
        } tilt;
        UInt16 rotation;
        SInt16 tangentialPressure;
        UInt16 deviceID;
        SInt16 vendor1;
        SInt16 vendor2;
        SInt16 vendor3;
        SInt32 reserved[4];
    } tablet;
    struct {
        UInt16 vendorID;
        UInt16 tabletID;
        UInt16 pointerID;
        UInt16 deviceID;
        UInt16 systemTabletID;
        UInt16 vendorPointerType;
        UInt32 pointerSerialNumber;
        UInt64 uniqueID;
        UInt32 capabilityMask;
        UInt8 pointerType;
        UInt8 enterProximity;
        SInt16 reserved1;
        SInt32 reserved2[4];
    } proximity;
} NXEventData;
# 506 "/System/Library/Frameworks/IOKit.framework/Headers/hidsystem/IOLLEvent.h" 3
typedef struct _NXEvent {
 SInt32 type;
    struct {
        SInt32 x, y;
    } location;
    UInt64 time;
    SInt32 flags;
    UInt32 window;
    NXEventData data;
    UInt64 service_id;
    SInt32 ext_pid;
} NXEvent, *NXEventPtr;
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 2 3


extern "C" {






typedef struct __CGEvent *CGEventRef;




enum _CGMouseButton
{
    kCGMouseButtonLeft = 0,
    kCGMouseButtonRight = 1,
    kCGMouseButtonCenter = 2
};
typedef uint32_t CGMouseButton;


enum {
    kCGScrollEventUnitPixel = 0,
    kCGScrollEventUnitLine = 1,
};
typedef uint32_t CGScrollEventUnit;







enum _CGEventFlags
{

    kCGEventFlagMaskAlphaShift = 0x00010000,
    kCGEventFlagMaskShift = 0x00020000,
    kCGEventFlagMaskControl = 0x00040000,
    kCGEventFlagMaskAlternate = 0x00080000,
    kCGEventFlagMaskCommand = 0x00100000,


    kCGEventFlagMaskHelp = 0x00400000,
    kCGEventFlagMaskSecondaryFn = 0x00800000,


    kCGEventFlagMaskNumericPad = 0x00200000,


    kCGEventFlagMaskNonCoalesced = 0x00000100
};
typedef uint64_t CGEventFlags;
# 85 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
enum _CGEventType {
    kCGEventNull = 0,

    kCGEventLeftMouseDown = 1,
    kCGEventLeftMouseUp = 2,
    kCGEventRightMouseDown = 3,
    kCGEventRightMouseUp = 4,
    kCGEventMouseMoved = 5,
    kCGEventLeftMouseDragged = 6,
    kCGEventRightMouseDragged = 7,


    kCGEventKeyDown = 10,
    kCGEventKeyUp = 11,
    kCGEventFlagsChanged = 12,


    kCGEventScrollWheel = 22,
    kCGEventTabletPointer = 23,
    kCGEventTabletProximity = 24,
    kCGEventOtherMouseDown = 25,
    kCGEventOtherMouseUp = 26,
    kCGEventOtherMouseDragged = 27,






    kCGEventTapDisabledByTimeout = 0xFFFFFFFE,
    kCGEventTapDisabledByUserInput = 0xFFFFFFFF
};
typedef uint32_t CGEventType;


typedef uint64_t CGEventTimestamp;





enum _CGEventField {


    kCGMouseEventNumber = 0,


    kCGMouseEventClickState = 1,


    kCGMouseEventPressure = 2,


    kCGMouseEventButtonNumber = 3,


    kCGMouseEventDeltaX = 4,
    kCGMouseEventDeltaY = 5,


    kCGMouseEventInstantMouser = 6,


    kCGMouseEventSubtype = 7,
# 161 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
    kCGKeyboardEventAutorepeat = 8,


    kCGKeyboardEventKeycode = 9,


    kCGKeyboardEventKeyboardType = 10,





    kCGScrollWheelEventDeltaAxis1 = 11,
    kCGScrollWheelEventDeltaAxis2 = 12,
    kCGScrollWheelEventDeltaAxis3 = 13,


    kCGScrollWheelEventFixedPtDeltaAxis1 = 93,
    kCGScrollWheelEventFixedPtDeltaAxis2 = 94,
    kCGScrollWheelEventFixedPtDeltaAxis3 = 95,

    kCGScrollWheelEventPointDeltaAxis1 = 96,
    kCGScrollWheelEventPointDeltaAxis2 = 97,
    kCGScrollWheelEventPointDeltaAxis3 = 98,



    kCGScrollWheelEventInstantMouser = 14,
# 197 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
    kCGTabletEventPointX = 15,
    kCGTabletEventPointY = 16,
    kCGTabletEventPointZ = 17,


    kCGTabletEventPointButtons = 18,


    kCGTabletEventPointPressure = 19,


    kCGTabletEventTiltX = 20,
    kCGTabletEventTiltY = 21,


    kCGTabletEventRotation = 22,


    kCGTabletEventTangentialPressure = 23,


    kCGTabletEventDeviceID = 24,


    kCGTabletEventVendor1 = 25,
    kCGTabletEventVendor2 = 26,
    kCGTabletEventVendor3 = 27,
# 232 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
    kCGTabletProximityEventVendorID = 28,


    kCGTabletProximityEventTabletID = 29,


    kCGTabletProximityEventPointerID = 30,


    kCGTabletProximityEventDeviceID = 31,


    kCGTabletProximityEventSystemTabletID = 32,


    kCGTabletProximityEventVendorPointerType = 33,


    kCGTabletProximityEventVendorPointerSerialNumber = 34,


    kCGTabletProximityEventVendorUniqueID = 35,


    kCGTabletProximityEventCapabilityMask = 36,


    kCGTabletProximityEventPointerType = 37,


    kCGTabletProximityEventEnterProximity = 38,


    kCGEventTargetProcessSerialNumber = 39,


    kCGEventTargetUnixProcessID = 40,


    kCGEventSourceUnixProcessID = 41,


    kCGEventSourceUserData = 42,


    kCGEventSourceUserID = 43,


    kCGEventSourceGroupID = 44,


    kCGEventSourceStateID = 45,




    kCGScrollWheelEventIsContinuous = 88

};
typedef uint32_t CGEventField;


enum _CGEventMouseSubtype {
    kCGEventMouseSubtypeDefault = 0,
    kCGEventMouseSubtypeTabletPoint = 1,
    kCGEventMouseSubtypeTabletProximity = 2
};
typedef uint32_t CGEventMouseSubtype;
# 338 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
enum _CGEventTapLocation {
    kCGHIDEventTap = 0,
    kCGSessionEventTap,
    kCGAnnotatedSessionEventTap
};
typedef uint32_t CGEventTapLocation;







enum _CGEventTapPlacement {
    kCGHeadInsertEventTap = 0,
    kCGTailAppendEventTap
};
typedef uint32_t CGEventTapPlacement;
# 365 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
enum _CGEventTapOptions {
    kCGEventTapOptionDefault = 0x00000000,
    kCGEventTapOptionListenOnly = 0x00000001
};
typedef uint32_t CGEventTapOptions;



typedef uint64_t CGEventMask;



typedef struct __CGEventTapProxy * CGEventTapProxy;
# 391 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
typedef CGEventRef (*CGEventTapCallBack)(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon);
# 405 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
typedef struct CGEventTapInformation
{
    uint32_t eventTapID;
    CGEventTapLocation tapPoint;
    CGEventTapOptions options;
    CGEventMask eventsOfInterest;
    pid_t tappingProcess;
    pid_t processBeingTapped;
    bool enabled;
    float minUsecLatency;
    float avgUsecLatency;
    float maxUsecLatency;
} CGEventTapInformation;
# 426 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 3
typedef struct __CGEventSource * CGEventSourceRef;

typedef uint32_t CGEventSourceStateID;
enum {
    kCGEventSourceStatePrivate = -1,
    kCGEventSourceStateCombinedSessionState = 0,
    kCGEventSourceStateHIDSystemState = 1
};

typedef uint32_t CGEventSourceKeyboardType;



}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 2 3


extern "C" {


extern CFTypeID CGEventSourceGetTypeID(void) ;
# 75 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern CGEventSourceRef CGEventSourceCreate(CGEventSourceStateID sourceState) ;





extern CGEventSourceKeyboardType CGEventSourceGetKeyboardType(CGEventSourceRef source) ;
extern void CGEventSourceSetKeyboardType(CGEventSourceRef source, CGEventSourceKeyboardType keyboardType) ;
# 92 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern void CGEventSourceSetPixelsPerLine( CGEventSourceRef source, double pixelsPerLine );
extern double CGEventSourceGetPixelsPerLine( CGEventSourceRef source );
# 112 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern CGEventSourceStateID CGEventSourceGetSourceStateID(CGEventSourceRef source) ;





extern bool CGEventSourceButtonState( CGEventSourceStateID sourceState, CGMouseButton button ) ;
extern bool CGEventSourceKeyState( CGEventSourceStateID sourceState, CGKeyCode key ) ;
extern CGEventFlags CGEventSourceFlagsState( CGEventSourceStateID sourceState ) ;
# 136 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern CFTimeInterval CGEventSourceSecondsSinceLastEventType( CGEventSourceStateID source, CGEventType eventType ) ;
# 163 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern uint32_t CGEventSourceCounterForEventType(CGEventSourceStateID source, CGEventType evType) ;
# 172 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern void CGEventSourceSetUserData(CGEventSourceRef source, int64_t userData) ;
extern int64_t CGEventSourceGetUserData(CGEventSourceRef source) ;
# 215 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern void CGEventSourceSetLocalEventsFilterDuringSuppressionState(CGEventSourceRef source,
                                                                       CGEventFilterMask filter,
                                                                       CGEventSuppressionState state);

extern CGEventFilterMask CGEventSourceGetLocalEventsFilterDuringSuppressionState(CGEventSourceRef source,
                                                                                    CGEventSuppressionState state);
# 229 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 3
extern void CGEventSourceSetLocalEventsSuppressionInterval(CGEventSourceRef source, CFTimeInterval seconds);
extern CFTimeInterval CGEventSourceGetLocalEventsSuppressionInterval(CGEventSourceRef source);


}
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 2 3


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 2 3

extern "C" {


extern CFTypeID CGEventGetTypeID(void) ;







extern CGEventRef CGEventCreate(CGEventSourceRef source) ;
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern CGEventRef CGEventCreateFromData(CFAllocatorRef allocator, CFDataRef eventData) ;





extern CFDataRef CGEventCreateData(CFAllocatorRef allocator, CGEventRef event) ;
# 63 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern CGEventRef CGEventCreateMouseEvent( CGEventSourceRef source,
                                              CGEventType mouseType,
                                              CGPoint mouseCursorPosition,
                                              CGMouseButton mouseButton) ;
# 85 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern CGEventRef CGEventCreateKeyboardEvent( CGEventSourceRef source,
                                                 CGKeyCode virtualKey,
                                                 bool keyDown ) ;
# 106 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern CGEventRef CGEventCreateScrollWheelEvent (CGEventSourceRef source,
                                                   CGScrollEventUnit units,
                                                   CGWheelCount wheelCount,
                                                   int32_t wheel1,
                                                   ... ) ;

extern CGEventRef CGEventCreateCopy(CGEventRef event) ;
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern CGEventSourceRef CGEventCreateSourceFromEvent(CGEventRef event) ;
extern void CGEventSetSource(CGEventRef event, CGEventSourceRef source) ;




extern CGEventType CGEventGetType(CGEventRef event) ;
extern void CGEventSetType(CGEventRef event, CGEventType type) ;

extern CGEventTimestamp CGEventGetTimestamp(CGEventRef event) ;
extern void CGEventSetTimestamp(CGEventRef event, CGEventTimestamp timestamp) ;

extern CGPoint CGEventGetLocation(CGEventRef event) ;
extern CGPoint CGEventGetUnflippedLocation(CGEventRef event) ;
extern void CGEventSetLocation(CGEventRef event, CGPoint location) ;

extern CGEventFlags CGEventGetFlags(CGEventRef event) ;
extern void CGEventSetFlags(CGEventRef event, CGEventFlags flags) ;
# 159 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern void CGEventKeyboardGetUnicodeString(CGEventRef event,
                                               UniCharCount maxStringLength,
                                               UniCharCount * actualStringLength,
                                               UniChar unicodeString[]) ;

extern void CGEventKeyboardSetUnicodeString(CGEventRef event,
                                               UniCharCount stringLength,
                                               const UniChar unicodeString[]) ;
# 189 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern int64_t CGEventGetIntegerValueField(CGEventRef event, CGEventField field) ;
extern double CGEventGetDoubleValueField(CGEventRef event, CGEventField field) ;
# 205 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern void CGEventSetIntegerValueField(CGEventRef event, CGEventField field, int64_t value) ;
extern void CGEventSetDoubleValueField(CGEventRef event, CGEventField field, double value) ;
# 259 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern CFMachPortRef CGEventTapCreate(CGEventTapLocation tap,
                                         CGEventTapPlacement place,
                                         CGEventTapOptions options,
                                         CGEventMask eventsOfInterest,
                                         CGEventTapCallBack callback,
                                         void * refcon ) ;
# 273 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern CFMachPortRef CGEventTapCreateForPSN(void *processSerialNumber,
                                               CGEventTapPlacement place,
                                               CGEventTapOptions options,
                                               CGEventMask eventsOfInterest,
                                               CGEventTapCallBack callback,
                                               void * refcon ) ;
# 290 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern void CGEventTapEnable(CFMachPortRef myTap, bool enable) ;
extern bool CGEventTapIsEnabled(CFMachPortRef myTap) ;
# 308 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern void CGEventTapPostEvent( CGEventTapProxy proxy,
                                    CGEventRef event ) ;
# 325 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern void CGEventPost( CGEventTapLocation tap,
                            CGEventRef event ) ;


extern void CGEventPostToPSN( void *processSerialNumber,
                                 CGEventRef event ) ;
# 346 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEvent.h" 3
extern CGError CGGetEventTapList( CGTableCount maxNumberOfTaps,
                                     CGEventTapInformation tapList[],
                                     CGTableCount *eventTapCount ) ;


}
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventSource.h" 1 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGEventTypes.h" 1 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 1 3
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFunction.h" 1 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGGLContext.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGGLContext.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGGLContext.h" 2 3

extern "C" {







extern CGContextRef CGGLContextCreate(void *glContext, CGSize size, CGColorSpaceRef colorspace) ;







extern void CGGLContextUpdateViewportSize(CGContextRef c, CGSize size) ;

}
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 1 3
# 33 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGLayer.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGLayer.h" 3
typedef struct CGLayer *CGLayerRef;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGLayer.h" 2 3

extern "C" {






extern CGLayerRef CGLayerCreateWithContext(CGContextRef context, CGSize size, CFDictionaryRef auxiliaryInfo) ;




extern CGLayerRef CGLayerRetain(CGLayerRef layer) ;




extern void CGLayerRelease(CGLayerRef layer) ;



extern CGSize CGLayerGetSize(CGLayerRef layer) ;



extern CGContextRef CGLayerGetContext(CGLayerRef layer) ;





extern void CGContextDrawLayerInRect(CGContextRef context, CGRect rect, CGLayerRef layer) ;





extern void CGContextDrawLayerAtPoint(CGContextRef context, CGPoint point, CGLayerRef layer) ;



extern CFTypeID CGLayerGetTypeID(void) ;

}
# 34 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFArray.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContentStream.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContentStream.h" 3
typedef struct CGPDFContentStream *CGPDFContentStreamRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContentStream.h" 2 3

extern "C" {



extern CGPDFContentStreamRef CGPDFContentStreamCreateWithPage(CGPDFPageRef page) ;



extern CGPDFContentStreamRef CGPDFContentStreamCreateWithStream(CGPDFStreamRef stream, CGPDFDictionaryRef streamResources, CGPDFContentStreamRef parent) ;



extern CGPDFContentStreamRef CGPDFContentStreamRetain(CGPDFContentStreamRef cs) ;



extern void CGPDFContentStreamRelease(CGPDFContentStreamRef cs) ;




extern CFArrayRef CGPDFContentStreamGetStreams(CGPDFContentStreamRef cs) ;




extern CGPDFObjectRef CGPDFContentStreamGetResource(CGPDFContentStreamRef cs, const char *category, const char *name) ;

}
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataConsumer.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 2 3


extern "C" {
# 24 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern CGContextRef CGPDFContextCreate(CGDataConsumerRef consumer, const CGRect *mediaBox, CFDictionaryRef auxiliaryInfo);





extern CGContextRef CGPDFContextCreateWithURL(CFURLRef url, const CGRect *mediaBox, CFDictionaryRef auxiliaryInfo);






extern void CGPDFContextClose(CGContextRef context) ;



extern void CGPDFContextBeginPage(CGContextRef context, CFDictionaryRef pageInfo) ;



extern void CGPDFContextEndPage(CGContextRef context) ;




extern void CGPDFContextSetURLForRect(CGContextRef context, CFURLRef url, CGRect rect) ;




extern void CGPDFContextAddDestinationAtPoint(CGContextRef context, CFStringRef name, CGPoint point) ;




extern void CGPDFContextSetDestinationForRect(CGContextRef context, CFStringRef name, CGRect rect) ;







extern const CFStringRef kCGPDFContextMediaBox ;





extern const CFStringRef kCGPDFContextCropBox ;





extern const CFStringRef kCGPDFContextBleedBox ;





extern const CFStringRef kCGPDFContextTrimBox ;





extern const CFStringRef kCGPDFContextArtBox ;






extern const CFStringRef kCGPDFContextTitle ;




extern const CFStringRef kCGPDFContextAuthor ;




extern const CFStringRef kCGPDFContextSubject ;
# 121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern const CFStringRef kCGPDFContextKeywords ;





extern const CFStringRef kCGPDFContextCreator ;
# 139 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern const CFStringRef kCGPDFContextOwnerPassword ;
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern const CFStringRef kCGPDFContextUserPassword ;
# 159 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern const CFStringRef kCGPDFContextEncryptionKeyLength ;





extern const CFStringRef kCGPDFContextAllowsPrinting ;





extern const CFStringRef kCGPDFContextAllowsCopying ;
# 180 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern const CFStringRef kCGPDFContextOutputIntent ;







extern const CFStringRef kCGPDFXOutputIntentSubtype ;







extern const CFStringRef kCGPDFXOutputConditionIdentifier ;






extern const CFStringRef kCGPDFXOutputCondition ;







extern const CFStringRef kCGPDFXRegistryName ;
# 220 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern const CFStringRef kCGPDFXInfo ;
# 229 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern const CFStringRef kCGPDFXDestinationOutputProfile ;
# 241 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContext.h" 3
extern const CFStringRef kCGPDFContextOutputIntents ;

}
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDictionary.h" 1 3
# 38 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFDocument.h" 1 3
# 39 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFObject.h" 1 3
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFOperatorTable.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFOperatorTable.h" 3
typedef struct CGPDFOperatorTable *CGPDFOperatorTableRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFScanner.h" 1 3
# 9 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFScanner.h" 3
typedef struct CGPDFScanner *CGPDFScannerRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFContentStream.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFScanner.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFOperatorTable.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFScanner.h" 2 3

extern "C" {



extern CGPDFScannerRef CGPDFScannerCreate(CGPDFContentStreamRef cs, CGPDFOperatorTableRef table, void *info) ;



extern CGPDFScannerRef CGPDFScannerRetain(CGPDFScannerRef scanner) ;



extern void CGPDFScannerRelease(CGPDFScannerRef scanner) ;





extern bool CGPDFScannerScan(CGPDFScannerRef scanner) ;



extern CGPDFContentStreamRef CGPDFScannerGetContentStream(CGPDFScannerRef scanner) ;



extern bool CGPDFScannerPopObject(CGPDFScannerRef scanner, CGPDFObjectRef *value) ;




extern bool CGPDFScannerPopBoolean(CGPDFScannerRef scanner, CGPDFBoolean *value) ;





extern bool CGPDFScannerPopInteger(CGPDFScannerRef scanner, CGPDFInteger *value) ;




extern bool CGPDFScannerPopNumber(CGPDFScannerRef scanner, CGPDFReal *value) ;




extern bool CGPDFScannerPopName(CGPDFScannerRef scanner, const char **value) ;




extern bool CGPDFScannerPopString(CGPDFScannerRef scanner, CGPDFStringRef *value) ;




extern bool CGPDFScannerPopArray(CGPDFScannerRef scanner, CGPDFArrayRef *value) ;





extern bool CGPDFScannerPopDictionary(CGPDFScannerRef scanner, CGPDFDictionaryRef *value) ;




extern bool CGPDFScannerPopStream(CGPDFScannerRef scanner, CGPDFStreamRef *value) ;

}
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFOperatorTable.h" 2 3

typedef void (*CGPDFOperatorCallback)(CGPDFScannerRef scanner, void *info);

extern "C" {



extern CGPDFOperatorTableRef CGPDFOperatorTableCreate(void) ;



extern CGPDFOperatorTableRef CGPDFOperatorTableRetain(CGPDFOperatorTableRef table) ;



extern void CGPDFOperatorTableRelease(CGPDFOperatorTableRef table) ;



extern void CGPDFOperatorTableSetCallback(CGPDFOperatorTableRef table, const char *name, CGPDFOperatorCallback callback) ;

}
# 41 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFPage.h" 1 3
# 42 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFScanner.h" 1 3
# 43 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFStream.h" 1 3
# 44 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPDFString.h" 1 3
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPSConverter.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPSConverter.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataConsumer.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPSConverter.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGDataProvider.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPSConverter.h" 2 3



typedef struct CGPSConverter *CGPSConverterRef;

extern "C" {
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPSConverter.h" 3
typedef void (*CGPSConverterBeginDocumentCallback)(void *info);

typedef void (*CGPSConverterEndDocumentCallback)(void *info, bool success);

typedef void (*CGPSConverterBeginPageCallback)(void *info, size_t pageNumber, CFDictionaryRef pageInfo);

typedef void (*CGPSConverterEndPageCallback)(void *info, size_t pageNumber, CFDictionaryRef pageInfo);

typedef void (*CGPSConverterProgressCallback)(void *info);

typedef void (*CGPSConverterMessageCallback)(void *info, CFStringRef message);

typedef void (*CGPSConverterReleaseInfoCallback)(void *info);

struct CGPSConverterCallbacks {
    unsigned int version;
    CGPSConverterBeginDocumentCallback beginDocument;
    CGPSConverterEndDocumentCallback endDocument;
    CGPSConverterBeginPageCallback beginPage;
    CGPSConverterEndPageCallback endPage;
    CGPSConverterProgressCallback noteProgress;
    CGPSConverterMessageCallback noteMessage;
    CGPSConverterReleaseInfoCallback releaseInfo;
};
typedef struct CGPSConverterCallbacks CGPSConverterCallbacks;




extern CGPSConverterRef CGPSConverterCreate(void *info, const CGPSConverterCallbacks *callbacks, CFDictionaryRef options) ;






extern bool CGPSConverterConvert(CGPSConverterRef converter, CGDataProviderRef provider, CGDataConsumerRef consumer, CFDictionaryRef options) ;




extern bool CGPSConverterAbort(CGPSConverterRef converter) ;



extern bool CGPSConverterIsConverting(CGPSConverterRef converter) ;



extern CFTypeID CGPSConverterGetTypeID(void) ;

}
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPath.h" 1 3
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGPattern.h" 1 3
# 48 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGRemoteOperation.h" 1 3
# 49 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGSession.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGSession.h" 3
extern "C" {






extern CFDictionaryRef CGSessionCopyCurrentDictionary(void) ;
# 58 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGSession.h" 3
}
# 50 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGShading.h" 1 3
# 51 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindowLevel.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindowLevel.h" 3
extern "C" {
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindowLevel.h" 3
typedef int32_t CGWindowLevel;
typedef int32_t CGWindowLevelKey;

enum _CGCommonWindowLevelKey {
    kCGBaseWindowLevelKey = 0,
    kCGMinimumWindowLevelKey,
    kCGDesktopWindowLevelKey,
    kCGBackstopMenuLevelKey,
    kCGNormalWindowLevelKey,
    kCGFloatingWindowLevelKey,
    kCGTornOffMenuWindowLevelKey,
    kCGDockWindowLevelKey,
    kCGMainMenuWindowLevelKey,
    kCGStatusWindowLevelKey,
    kCGModalPanelWindowLevelKey,
    kCGPopUpMenuWindowLevelKey,
    kCGDraggingWindowLevelKey,
    kCGScreenSaverWindowLevelKey,
    kCGMaximumWindowLevelKey,
    kCGOverlayWindowLevelKey,
    kCGHelpWindowLevelKey,
    kCGUtilityWindowLevelKey,
    kCGDesktopIconWindowLevelKey,
    kCGCursorWindowLevelKey,
    kCGAssistiveTechHighWindowLevelKey,
    kCGNumberOfWindowLevelKeys
};

extern CGWindowLevel CGWindowLevelForKey( CGWindowLevelKey key ) ;
# 86 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindowLevel.h" 3
}
# 52 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 3
typedef uint32_t CGWindowID;


typedef uint32_t CGWindowListOption;
typedef uint32_t CGWindowImageOption;


typedef uint32_t CGWindowSharingType;
typedef uint32_t CGWindowBackingType;


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGImage.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 2 3



extern "C" {
# 39 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 3
enum {
    kCGWindowSharingNone = 0,
    kCGWindowSharingReadOnly = 1,
    kCGWindowSharingReadWrite = 2
};




enum {
    kCGBackingStoreRetained = 0,
    kCGBackingStoreNonretained = 1,
    kCGBackingStoreBuffered = 2
};







extern const CFStringRef kCGWindowNumber ;



extern const CFStringRef kCGWindowStoreType ;



extern const CFStringRef kCGWindowLayer ;




extern const CFStringRef kCGWindowBounds ;



extern const CFStringRef kCGWindowSharingState ;



extern const CFStringRef kCGWindowAlpha ;



extern const CFStringRef kCGWindowOwnerPID ;



extern const CFStringRef kCGWindowMemoryUsage ;







extern const CFStringRef kCGWindowWorkspace ;


extern const CFStringRef kCGWindowOwnerName ;



extern const CFStringRef kCGWindowName ;



extern const CFStringRef kCGWindowIsOnscreen ;



extern const CFStringRef kCGWindowBackingLocationVideoMemory ;




enum
{


 kCGWindowListOptionAll = 0,



 kCGWindowListOptionOnScreenOnly = (1 << 0),



 kCGWindowListOptionOnScreenAboveWindow = (1 << 1),



 kCGWindowListOptionOnScreenBelowWindow = (1 << 2),



 kCGWindowListOptionIncludingWindow = (1 << 3),



    kCGWindowListExcludeDesktopElements = (1 << 4)
};






extern CFArrayRef CGWindowListCopyWindowInfo( CGWindowListOption option, CGWindowID relativeToWindow ) ;







extern CFArrayRef CGWindowListCreate( CGWindowListOption option, CGWindowID relativeToWindow ) ;
# 171 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 3
extern CFArrayRef CGWindowListCreateDescriptionFromArray(CFArrayRef windowArray) ;
# 223 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 3
enum {
    kCGWindowImageDefault = 0,

    kCGWindowImageBoundsIgnoreFraming = (1 << 0)

};

extern CGImageRef CGWindowListCreateImage( CGRect screenBounds,
                                              CGWindowListOption windowOption, CGWindowID windowID,
                                              CGWindowImageOption imageOption ) ;
# 266 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h" 3
extern CGImageRef CGWindowListCreateImageFromArray( CGRect screenBounds,
                                                       CFArrayRef windowArray,
                                                       CGWindowImageOption imageOption ) ;


}
# 53 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 2 3
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 1 3
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 1 3
# 23 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 3
extern "C" {
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 3
}
# 24 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 2 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
extern "C" {




typedef OSStatus CMError;


typedef struct OpaqueCMProfileRef* CMProfileRef;



typedef struct OpaqueCMProfileSearchRef* CMProfileSearchRef;


typedef struct OpaqueCMMatchRef* CMMatchRef;



typedef struct OpaqueCMWorldRef* CMWorldRef;




typedef UInt32 CMDisplayIDType;
typedef UInt32 CMChromaticAdaptation;
enum {
  cmUseDefaultChromaticAdaptation = 0,
  cmLinearChromaticAdaptation = 1,
  cmVonKriesChromaticAdaptation = 2,
  cmBradfordChromaticAdaptation = 3
};




typedef OSErr ( * CMFlattenProcPtr)(SInt32 command, long *size, void *data, void *refCon);

typedef CMFlattenProcPtr CMFlattenUPP;
# 87 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
  static __inline__ __attribute__((always_inline)) CMFlattenUPP NewCMFlattenUPP(CMFlattenProcPtr userRoutine)
    { return (CMFlattenUPP)userRoutine; }

  static __inline__ __attribute__((always_inline)) OSErr InvokeCMFlattenUPP(SInt32 command, long * size, void * data, void * refCon, CMFlattenUPP userUPP)
    { return (*((CMFlattenProcPtr)userUPP))(command, size, data, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMFlattenUPP(CMFlattenUPP userUPP)
  {
#pragma unused (userUPP)
  }





typedef Boolean ( * CMBitmapCallBackProcPtr)(SInt32 progress, void *refCon);

typedef CMBitmapCallBackProcPtr CMBitmapCallBackUPP;
# 119 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
  static __inline__ __attribute__((always_inline)) CMBitmapCallBackUPP NewCMBitmapCallBackUPP(CMBitmapCallBackProcPtr userRoutine)
    { return (CMBitmapCallBackUPP)userRoutine; }

  static __inline__ __attribute__((always_inline)) Boolean InvokeCMBitmapCallBackUPP(SInt32 progress, void * refCon, CMBitmapCallBackUPP userUPP)
    { return (*((CMBitmapCallBackProcPtr)userUPP))(progress, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMBitmapCallBackUPP(CMBitmapCallBackUPP userUPP)
  {
#pragma unused (userUPP)
  }




typedef Boolean ( * CMConcatCallBackProcPtr)(SInt32 progress, void *refCon);

typedef CMConcatCallBackProcPtr CMConcatCallBackUPP;
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
  static __inline__ __attribute__((always_inline)) CMConcatCallBackUPP NewCMConcatCallBackUPP(CMConcatCallBackProcPtr userRoutine)
    { return (CMConcatCallBackUPP)userRoutine; }

  static __inline__ __attribute__((always_inline))
  Boolean InvokeCMConcatCallBackUPP(SInt32 progress, void * refCon, CMConcatCallBackUPP userUPP)
    { return (*((CMConcatCallBackProcPtr)userUPP))(progress, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMConcatCallBackUPP(CMConcatCallBackUPP userUPP)
  {
#pragma unused (userUPP)
  }






typedef Boolean ( * CMProfileFilterProcPtr)(CMProfileRef prof, void *refCon);

typedef CMProfileFilterProcPtr CMProfileFilterUPP;
# 184 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
  static __inline__ __attribute__((always_inline)) CMProfileFilterUPP NewCMProfileFilterUPP(CMProfileFilterProcPtr userRoutine)
    { return (CMProfileFilterUPP)userRoutine; }

  static __inline__ __attribute__((always_inline)) Boolean InvokeCMProfileFilterUPP(CMProfileRef prof, void * refCon, CMProfileFilterUPP userUPP)
    { return (*((CMProfileFilterProcPtr)userUPP))(prof, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMProfileFilterUPP(CMProfileFilterUPP userUPP)
  {
#pragma unused (userUPP)
  }




typedef OSErr ( * CMProfileAccessProcPtr)(SInt32 command, SInt32 offset, SInt32 *size, void *data, void *refCon);

typedef CMProfileAccessProcPtr CMProfileAccessUPP;
# 218 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
  static __inline__ __attribute__((always_inline)) CMProfileAccessUPP NewCMProfileAccessUPP(CMProfileAccessProcPtr userRoutine)
    { return (CMProfileAccessUPP)userRoutine; }

  static __inline__ __attribute__((always_inline)) OSErr InvokeCMProfileAccessUPP(SInt32 command, SInt32 offset, SInt32 * size, void * data, void * refCon, CMProfileAccessUPP userUPP)
    { return (*((CMProfileAccessProcPtr)userUPP))(command, offset, size, data, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMProfileAccessUPP(CMProfileAccessUPP userUPP)
  {
#pragma unused (userUPP)
  }
# 236 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMTypes.h" 3
}
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 2 3







#pragma pack(push, 2)


enum {
  cmICCProfileVersion4 = 0x04000000,
  cmICCProfileVersion2 = 0x02000000,
  cmICCProfileVersion21 = 0x02100000,
  cmCS2ProfileVersion = cmICCProfileVersion2,
  cmCS1ProfileVersion = 0x00000100
};


enum {
  cmProfileMajorVersionMask = (int)0xFF000000,
  cmCurrentProfileMajorVersion = 0x02000000
};


enum {
  cmMagicNumber = 'acsp'
};






enum {
  cmICCReservedFlagsMask = 0x0000FFFF,
  cmEmbeddedMask = 0x00000001,
  cmEmbeddedUseMask = 0x00000002,
  cmBlackPointCompensationMask = 0x00000004,
  cmCMSReservedFlagsMask = (int)0xFFFF0000,
  cmQualityMask = 0x00030000,
  cmInterpolationMask = 0x00040000,
  cmGamutCheckingMask = 0x00080000
};


enum {
  cmEmbeddedProfile = 0,
  cmEmbeddedUse = 1
};


enum {
  cmNormalMode = 0,
  cmDraftMode = 1,
  cmBestMode = 2
};


enum {
  cmBlackPointCompensation = 1
};






enum {
  cmReflectiveTransparentMask = 0x00000001,
  cmGlossyMatteMask = 0x00000002
};


enum {
  cmReflective = 0,
  cmGlossy = 1
};



enum {
  cmPerceptual = 0,
  cmRelativeColorimetric = 1,
  cmSaturation = 2,
  cmAbsoluteColorimetric = 3
};




enum {
  cmAsciiData = 0,
  cmBinaryData = 1
};


enum {
  cmPrtrDefaultScreens = 0,
  cmLinesPer = 1
};


enum {
  cmNumHeaderElements = 10
};


enum {
  cmAToB0Tag = 'A2B0',
  cmAToB1Tag = 'A2B1',
  cmAToB2Tag = 'A2B2',
  cmBlueColorantTag = 'bXYZ',
  cmBlueTRCTag = 'bTRC',
  cmBToA0Tag = 'B2A0',
  cmBToA1Tag = 'B2A1',
  cmBToA2Tag = 'B2A2',
  cmCalibrationDateTimeTag = 'calt',
  cmChromaticAdaptationTag = 'chad',
  cmCharTargetTag = 'targ',
  cmCopyrightTag = 'cprt',
  cmDeviceMfgDescTag = 'dmnd',
  cmDeviceModelDescTag = 'dmdd',
  cmGamutTag = 'gamt',
  cmGrayTRCTag = 'kTRC',
  cmGreenColorantTag = 'gXYZ',
  cmGreenTRCTag = 'gTRC',
  cmLuminanceTag = 'lumi',
  cmMeasurementTag = 'meas',
  cmMediaBlackPointTag = 'bkpt',
  cmMediaWhitePointTag = 'wtpt',
  cmNamedColorTag = 'ncol',
  cmNamedColor2Tag = 'ncl2',
  cmPreview0Tag = 'pre0',
  cmPreview1Tag = 'pre1',
  cmPreview2Tag = 'pre2',
  cmProfileDescriptionTag = 'desc',
  cmProfileSequenceDescTag = 'pseq',
  cmPS2CRD0Tag = 'psd0',
  cmPS2CRD1Tag = 'psd1',
  cmPS2CRD2Tag = 'psd2',
  cmPS2CRD3Tag = 'psd3',
  cmPS2CSATag = 'ps2s',
  cmPS2RenderingIntentTag = 'ps2i',
  cmRedColorantTag = 'rXYZ',
  cmRedTRCTag = 'rTRC',
  cmScreeningDescTag = 'scrd',
  cmScreeningTag = 'scrn',
  cmTechnologyTag = 'tech',
  cmUcrBgTag = 'bfd ',
  cmViewingConditionsDescTag = 'vued',
  cmViewingConditionsTag = 'view'
};


enum {
  cmPS2CRDVMSizeTag = 'psvm',
  cmVideoCardGammaTag = 'vcgt',
  cmMakeAndModelTag = 'mmod',
  cmProfileDescriptionMLTag = 'dscm',
  cmNativeDisplayInfoTag = 'ndin'
};


enum {
  cmSigCrdInfoType = 'crdi',
  cmSigCurveType = 'curv',
  cmSigDataType = 'data',
  cmSigDateTimeType = 'dtim',
  cmSigLut16Type = 'mft2',
  cmSigLut8Type = 'mft1',
  cmSigMeasurementType = 'meas',
  cmSigMultiFunctA2BType = 'mAB ',
  cmSigMultiFunctB2AType = 'mBA ',
  cmSigNamedColorType = 'ncol',
  cmSigNamedColor2Type = 'ncl2',
  cmSigParametricCurveType = 'para',
  cmSigProfileDescriptionType = 'desc',
  cmSigProfileSequenceDescType = 'pseq',
  cmSigScreeningType = 'scrn',
  cmSigS15Fixed16Type = 'sf32',
  cmSigSignatureType = 'sig ',
  cmSigTextType = 'text',
  cmSigU16Fixed16Type = 'uf32',
  cmSigU1Fixed15Type = 'uf16',
  cmSigUInt8Type = 'ui08',
  cmSigUInt16Type = 'ui16',
  cmSigUInt32Type = 'ui32',
  cmSigUInt64Type = 'ui64',
  cmSigUcrBgType = 'bfd ',
  cmSigUnicodeTextType = 'utxt',
  cmSigViewingConditionsType = 'view',
  cmSigXYZType = 'XYZ '
};


enum {
  cmSigPS2CRDVMSizeType = 'psvm',
  cmSigVideoCardGammaType = 'vcgt',
  cmSigMakeAndModelType = 'mmod',
  cmSigNativeDisplayInfoType = 'ndin',
  cmSigMultiLocalizedUniCodeType = 'mluc'
};



enum {
  cmTechnologyDigitalCamera = 'dcam',
  cmTechnologyFilmScanner = 'fscn',
  cmTechnologyReflectiveScanner = 'rscn',
  cmTechnologyInkJetPrinter = 'ijet',
  cmTechnologyThermalWaxPrinter = 'twax',
  cmTechnologyElectrophotographicPrinter = 'epho',
  cmTechnologyElectrostaticPrinter = 'esta',
  cmTechnologyDyeSublimationPrinter = 'dsub',
  cmTechnologyPhotographicPaperPrinter = 'rpho',
  cmTechnologyFilmWriter = 'fprn',
  cmTechnologyVideoMonitor = 'vidm',
  cmTechnologyVideoCamera = 'vidc',
  cmTechnologyProjectionTelevision = 'pjtv',
  cmTechnologyCRTDisplay = 'CRT ',
  cmTechnologyPMDisplay = 'PMD ',
  cmTechnologyAMDisplay = 'AMD ',
  cmTechnologyPhotoCD = 'KPCD',
  cmTechnologyPhotoImageSetter = 'imgs',
  cmTechnologyGravure = 'grav',
  cmTechnologyOffsetLithography = 'offs',
  cmTechnologySilkscreen = 'silk',
  cmTechnologyFlexography = 'flex'
};




enum {
  cmFlare0 = 0x00000000,
  cmFlare100 = 0x00000001
};


enum {
  cmGeometryUnknown = 0x00000000,
  cmGeometry045or450 = 0x00000001,
  cmGeometry0dord0 = 0x00000002
};


enum {
  cmStdobsUnknown = 0x00000000,
  cmStdobs1931TwoDegrees = 0x00000001,
  cmStdobs1964TenDegrees = 0x00000002
};


enum {
  cmIlluminantUnknown = 0x00000000,
  cmIlluminantD50 = 0x00000001,
  cmIlluminantD65 = 0x00000002,
  cmIlluminantD93 = 0x00000003,
  cmIlluminantF2 = 0x00000004,
  cmIlluminantD55 = 0x00000005,
  cmIlluminantA = 0x00000006,
  cmIlluminantEquiPower = 0x00000007,
  cmIlluminantF8 = 0x00000008
};


enum {
  cmSpotFunctionUnknown = 0,
  cmSpotFunctionDefault = 1,
  cmSpotFunctionRound = 2,
  cmSpotFunctionDiamond = 3,
  cmSpotFunctionEllipse = 4,
  cmSpotFunctionLine = 5,
  cmSpotFunctionSquare = 6,
  cmSpotFunctionCross = 7
};


enum {
  cmXYZData = 'XYZ ',
  cmLabData = 'Lab ',
  cmLuvData = 'Luv ',
  cmYCbCrData = 'YCbr',
  cmYxyData = 'Yxy ',
  cmRGBData = 'RGB ',
  cmSRGBData = 'sRGB',
  cmGrayData = 'GRAY',
  cmHSVData = 'HSV ',
  cmHLSData = 'HLS ',
  cmCMYKData = 'CMYK',
  cmCMYData = 'CMY ',
  cmMCH5Data = 'MCH5',
  cmMCH6Data = 'MCH6',
  cmMCH7Data = 'MCH7',
  cmMCH8Data = 'MCH8',
  cm3CLRData = '3CLR',
  cm4CLRData = '4CLR',
  cm5CLRData = '5CLR',
  cm6CLRData = '6CLR',
  cm7CLRData = '7CLR',
  cm8CLRData = '8CLR',
  cm9CLRData = '9CLR',
  cm10CLRData = 'ACLR',
  cm11CLRData = 'BCLR',
  cm12CLRData = 'CCLR',
  cm13CLRData = 'DCLR',
  cm14CLRData = 'ECLR',
  cm15CLRData = 'FCLR',
  cmNamedData = 'NAME'
};


enum {
  cmInputClass = 'scnr',
  cmDisplayClass = 'mntr',
  cmOutputClass = 'prtr',
  cmLinkClass = 'link',
  cmAbstractClass = 'abst',
  cmColorSpaceClass = 'spac',
  cmNamedColorClass = 'nmcl'
};


enum {
  cmMacintosh = 'APPL',
  cmMicrosoft = 'MSFT',
  cmSolaris = 'SUNW',
  cmSiliconGraphics = 'SGI ',
  cmTaligent = 'TGNT'
};


enum {
  cmParametricType0 = 0,
  cmParametricType1 = 1,
  cmParametricType2 = 2,
  cmParametricType3 = 3,
  cmParametricType4 = 4
};



enum {
  cmCS1ChromTag = 'chrm',
  cmCS1TRCTag = 'trc ',
  cmCS1NameTag = 'name',
  cmCS1CustTag = 'cust'
};


typedef struct CMDateTime {
  UInt16 year;
  UInt16 month;
  UInt16 dayOfTheMonth;
  UInt16 hours;
  UInt16 minutes;
  UInt16 seconds;
} CMDateTime;

typedef struct CMFixedXYColor {
  Fixed x;
  Fixed y;
} CMFixedXYColor;

typedef struct CMFixedXYZColor {
  Fixed X;
  Fixed Y;
  Fixed Z;
} CMFixedXYZColor;

typedef UInt16 CMXYZComponent;

typedef struct CMXYZColor {
  CMXYZComponent X;
  CMXYZComponent Y;
  CMXYZComponent Z;
} CMXYZColor;




typedef unsigned char CMProfileMD5[16];
typedef CMProfileMD5 * CMProfileMD5Ptr;







  inline Boolean CMProfileMD5AreEqual(CMProfileMD5 a, CMProfileMD5 b)
  {
    return ((UInt32*)a)[0]==((UInt32*)b)[0] && ((UInt32*)a)[1]==((UInt32*)b)[1] &&
            ((UInt32*)a)[2]==((UInt32*)b)[2] && ((UInt32*)a)[3]==((UInt32*)b)[3];
  }






typedef struct CM2Header {
  UInt32 size;
  OSType CMMType;
  UInt32 profileVersion;
  OSType profileClass;
  OSType dataColorSpace;
  OSType profileConnectionSpace;
  CMDateTime dateTime;
  OSType CS2profileSignature;
  OSType platform;
  UInt32 flags;
  OSType deviceManufacturer;
  UInt32 deviceModel;
  UInt32 deviceAttributes[2];
  UInt32 renderingIntent;
  CMFixedXYZColor white;
  OSType creator;
  char reserved[44];
} CM2Header;

typedef struct CM4Header {
  UInt32 size;
  OSType CMMType;
  UInt32 profileVersion;
  OSType profileClass;
  OSType dataColorSpace;
  OSType profileConnectionSpace;
  CMDateTime dateTime;
  OSType CS2profileSignature;
  OSType platform;
  UInt32 flags;
  OSType deviceManufacturer;
  UInt32 deviceModel;
  UInt32 deviceAttributes[2];
  UInt32 renderingIntent;
  CMFixedXYZColor white;
  OSType creator;
  CMProfileMD5 digest;
  char reserved[28];
} CM4Header;

typedef struct CMTagRecord {
  OSType tag;
  UInt32 elementOffset;
  UInt32 elementSize;
} CMTagRecord;

typedef struct CMTagElemTable {
  UInt32 count;
  CMTagRecord tagList[1];
} CMTagElemTable;

typedef struct CM2Profile {
  CM2Header header;
  CMTagElemTable tagTable;
  char elemData[1];
} CM2Profile, *CM2ProfilePtr, **CM2ProfileHandle;


typedef struct CMAdaptationMatrixType {
  OSType typeDescriptor;
  UInt32 reserved;
  Fixed adaptationMatrix[9];
} CMAdaptationMatrixType;

typedef struct CMCurveType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 countValue;
  UInt16 data[1];
} CMCurveType;

typedef struct CMDataType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 dataFlag;
  char data[1];
} CMDataType;

typedef struct CMDateTimeType {
  OSType typeDescriptor;
  UInt32 reserved;
  CMDateTime dateTime;
} CMDateTimeType;

typedef struct CMLut16Type {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt8 inputChannels;
  UInt8 outputChannels;
  UInt8 gridPoints;
  UInt8 reserved2;
  Fixed matrix[3][3];
  UInt16 inputTableEntries;
  UInt16 outputTableEntries;
  UInt16 inputTable[1];
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 3
} CMLut16Type;

typedef struct CMLut8Type {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt8 inputChannels;
  UInt8 outputChannels;
  UInt8 gridPoints;
  UInt8 reserved2;
  Fixed matrix[3][3];
  UInt8 inputTable[1];
# 544 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 3
} CMLut8Type;

typedef struct CMMultiFunctLutType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt8 inputChannels;
  UInt8 outputChannels;
  UInt16 reserved2;
  UInt32 offsetBcurves;
  UInt32 offsetMatrix;
  UInt32 offsetMcurves;
  UInt32 offsetCLUT;
  UInt32 offsetAcurves;
  UInt8 data[1];
} CMMultiFunctLutType, CMMultiFunctLutA2BType, CMMultiFunctLutB2AType;

typedef struct CMMultiFunctCLUTType {
  UInt8 gridPoints[16];
  UInt8 entrySize;
  UInt8 reserved[3];
  UInt8 data[2];
} CMMultiFunctCLUTType;

typedef struct CMMeasurementType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 standardObserver;
  CMFixedXYZColor backingXYZ;
  UInt32 geometry;
  UInt32 flare;
  UInt32 illuminant;
} CMMeasurementType;

typedef struct CMNamedColorType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 vendorFlag;
  UInt32 count;
  UInt8 prefixName[1];
# 594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 3
} CMNamedColorType;

typedef struct CMNamedColor2EntryType {
  UInt8 rootName[32];
  UInt16 PCSColorCoords[3];
  UInt16 DeviceColorCoords[1];
} CMNamedColor2EntryType;

typedef struct CMNamedColor2Type {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 vendorFlag;
  UInt32 count;
  UInt32 deviceChannelCount;
  UInt8 prefixName[32];
  UInt8 suffixName[32];
  char data[1];
} CMNamedColor2Type;

typedef struct CMNativeDisplayInfo {
  UInt32 dataSize;
  CMFixedXYColor redPhosphor;
  CMFixedXYColor greenPhosphor;
  CMFixedXYColor bluePhosphor;
  CMFixedXYColor whitePoint;
  Fixed redGammaValue;
  Fixed greenGammaValue;
  Fixed blueGammaValue;



  UInt16 gammaChannels;
  UInt16 gammaEntryCount;
  UInt16 gammaEntrySize;
  char gammaData[1];
} CMNativeDisplayInfo;

typedef struct CMNativeDisplayInfoType {
  OSType typeDescriptor;
  UInt32 reserved;
  CMNativeDisplayInfo nativeDisplayInfo;
} CMNativeDisplayInfoType;

typedef struct CMParametricCurveType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt16 functionType;
  UInt16 reserved2;
  Fixed value[1];
} CMParametricCurveType;

typedef struct CMTextDescriptionType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 ASCIICount;
  UInt8 ASCIIName[2];
# 662 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 3
} CMTextDescriptionType;

typedef struct CMTextType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt8 text[1];
} CMTextType;

typedef struct CMUnicodeTextType {
  OSType typeDescriptor;
  UInt32 reserved;
  UniChar text[1];
} CMUnicodeTextType;

typedef struct CMScreeningChannelRec {
  Fixed frequency;
  Fixed angle;
  UInt32 spotFunction;
} CMScreeningChannelRec;

typedef struct CMScreeningType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 screeningFlag;
  UInt32 channelCount;
  CMScreeningChannelRec channelInfo[1];
} CMScreeningType;

typedef struct CMSignatureType {
  OSType typeDescriptor;
  UInt32 reserved;
  OSType signature;
} CMSignatureType;

typedef struct CMS15Fixed16ArrayType {
  OSType typeDescriptor;
  UInt32 reserved;
  Fixed value[1];
} CMS15Fixed16ArrayType;

typedef struct CMU16Fixed16ArrayType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 value[1];
} CMU16Fixed16ArrayType;

typedef struct CMUInt8ArrayType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt8 value[1];
} CMUInt8ArrayType;

typedef struct CMUInt16ArrayType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt16 value[1];
} CMUInt16ArrayType;

typedef struct CMUInt32ArrayType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 value[1];
} CMUInt32ArrayType;

typedef struct CMUInt64ArrayType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 value[1];
} CMUInt64ArrayType;

typedef struct CMViewingConditionsType {
  OSType typeDescriptor;
  UInt32 reserved;
  CMFixedXYZColor illuminant;
  CMFixedXYZColor surround;
  UInt32 stdIlluminant;
} CMViewingConditionsType;

typedef struct CMXYZType {
  OSType typeDescriptor;
  UInt32 reserved;
  CMFixedXYZColor XYZ[1];
} CMXYZType;

typedef struct CMProfileSequenceDescType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 count;
  char data[1];
} CMProfileSequenceDescType;

typedef struct CMUcrBgType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 ucrCount;
  UInt16 ucrValues[1];
# 767 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMICCProfile.h" 3
} CMUcrBgType;





typedef struct CMIntentCRDVMSize {
  UInt32 renderingIntent;
  UInt32 VMSize;
} CMIntentCRDVMSize;

typedef struct CMPS2CRDVMSizeType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 count;
  CMIntentCRDVMSize intentCRD[1];
} CMPS2CRDVMSizeType;


enum {
  cmVideoCardGammaTableType = 0,
  cmVideoCardGammaFormulaType = 1
};

typedef struct CMVideoCardGammaTable {
  UInt16 channels;
  UInt16 entryCount;
  UInt16 entrySize;
  char data[1];
} CMVideoCardGammaTable;

typedef struct CMVideoCardGammaFormula {
  Fixed redGamma;
  Fixed redMin;
  Fixed redMax;
  Fixed greenGamma;
  Fixed greenMin;
  Fixed greenMax;
  Fixed blueGamma;
  Fixed blueMin;
  Fixed blueMax;
} CMVideoCardGammaFormula;

typedef struct CMVideoCardGamma {
  UInt32 tagType;
  union {
    CMVideoCardGammaTable table;
    CMVideoCardGammaFormula formula;
  } u;
} CMVideoCardGamma;

typedef struct CMVideoCardGammaType {
  OSType typeDescriptor;
  UInt32 reserved;
  CMVideoCardGamma gamma;
} CMVideoCardGammaType;

typedef struct CMMakeAndModel {
  OSType manufacturer;
  UInt32 model;
  UInt32 serialNumber;
  UInt32 manufactureDate;
  UInt32 reserved1;
  UInt32 reserved2;
  UInt32 reserved3;
  UInt32 reserved4;
} CMMakeAndModel;

typedef struct CMMakeAndModelType {
  OSType typeDescriptor;
  UInt32 reserved;
  CMMakeAndModel makeAndModel;
} CMMakeAndModelType;

typedef struct CMMultiLocalizedUniCodeEntryRec {
  char languageCode[2];
  char regionCode[2];
  UInt32 textLength;
  UInt32 textOffset;
} CMMultiLocalizedUniCodeEntryRec;

typedef struct CMMultiLocalizedUniCodeType {
  OSType typeDescriptor;
  UInt32 reserved;
  UInt32 entryCount;
  UInt32 entrySize;


} CMMultiLocalizedUniCodeType;






enum {
  cmGrayResponse = 0,
  cmRedResponse = 1,
  cmGreenResponse = 2,
  cmBlueResponse = 3,
  cmCyanResponse = 4,
  cmMagentaResponse = 5,
  cmYellowResponse = 6,
  cmUcrResponse = 7,
  cmBgResponse = 8,
  cmOnePlusLastResponse = 9
};



enum {
  cmMonitorDevice = 'mntr',
  cmScannerDevice = 'scnr',
  cmPrinterDevice = 'prtr'
};


typedef struct CMIString {
  ScriptCode theScript;
  Str63 theString;
} CMIString;


enum {
  cmPerceptualMatch = 0x0000,
  cmColorimetricMatch = 0x0001,
  cmSaturationMatch = 0x0002
};


enum {
  cmNativeMatchingPreferred = 0x00000001,
  cmTurnOffCache = 0x00000002
};


typedef UInt32 CMMatchOption;
typedef UInt32 CMMatchFlag;

typedef struct CMHeader {
  UInt32 size;
  OSType CMMType;
  UInt32 applProfileVersion;
  OSType dataType;
  OSType deviceType;
  OSType deviceManufacturer;
  UInt32 deviceModel;
  UInt32 deviceAttributes[2];
  UInt32 profileNameOffset;
  UInt32 customDataOffset;
  CMMatchFlag flags;
  CMMatchOption options;
  CMXYZColor white;
  CMXYZColor black;
} CMHeader;

typedef struct CMProfileChromaticities {
  CMXYZColor red;
  CMXYZColor green;
  CMXYZColor blue;
  CMXYZColor cyan;
  CMXYZColor magenta;
  CMXYZColor yellow;
} CMProfileChromaticities;

typedef struct CMProfileResponse {
  UInt16 counts[9];
  UInt16 data[1];
} CMProfileResponse;

typedef struct CMProfile {
  CMHeader header;
  CMProfileChromaticities profile;
  CMProfileResponse response;
  CMIString profileName;
  char customData[1];
} CMProfile, *CMProfilePtr, **CMProfileHandle;




#pragma pack(pop)
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 2 3






# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 1 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 2 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
extern "C" {






#pragma options align=mac68k



enum {
  kDefaultCMMSignature = 'appl'
};



enum {
  cmBeginProfile = 220,
  cmEndProfile = 221,
  cmEnableMatching = 222,
  cmDisableMatching = 223,
  cmComment = 224
};


enum {
  cmBeginProfileSel = 0,
  cmContinueProfileSel = 1,
  cmEndProfileSel = 2,
  cmProfileIdentifierSel = 3
};


enum {
  cmMatchCMMType = 0x00000001,
  cmMatchApplProfileVersion = 0x00000002,
  cmMatchDataType = 0x00000004,
  cmMatchDeviceType = 0x00000008,
  cmMatchDeviceManufacturer = 0x00000010,
  cmMatchDeviceModel = 0x00000020,
  cmMatchDeviceAttributes = 0x00000040,
  cmMatchFlags = 0x00000080,
  cmMatchOptions = 0x00000100,
  cmMatchWhite = 0x00000200,
  cmMatchBlack = 0x00000400
};


enum {
  cmMatchAnyProfile = 0x00000000,
  cmMatchProfileCMMType = 0x00000001,
  cmMatchProfileClass = 0x00000002,
  cmMatchDataColorSpace = 0x00000004,
  cmMatchProfileConnectionSpace = 0x00000008,
  cmMatchManufacturer = 0x00000010,
  cmMatchModel = 0x00000020,
  cmMatchAttributes = 0x00000040,
  cmMatchProfileFlags = 0x00000080
};




enum {
  cmPS7bit = 1,
  cmPS8bit = 2
};



enum {
  cmEmbedWholeProfile = 0x00000000,
  cmEmbedProfileIdentifier = 0x00000001
};



enum {
  cmOpenReadSpool = 1,
  cmOpenWriteSpool = 2,
  cmReadSpool = 3,
  cmWriteSpool = 4,
  cmCloseSpool = 5
};


enum {
  cmOpenReadAccess = 1,
  cmOpenWriteAccess = 2,
  cmReadAccess = 3,
  cmWriteAccess = 4,
  cmCloseAccess = 5,
  cmCreateNewAccess = 6,
  cmAbortWriteAccess = 7,
  cmBeginAccess = 8,
  cmEndAccess = 9
};


enum {
  cmInputUse = 'inpt',
  cmOutputUse = 'outp',
  cmDisplayUse = 'dply',
  cmProofUse = 'pruf'
};



union CMAppleProfileHeader {

  CMHeader cm1;

  CM2Header cm2;
  CM4Header cm4;
};
typedef union CMAppleProfileHeader CMAppleProfileHeader;


typedef struct CMConcatProfileSet {
  UInt16 keyIndex;
  UInt16 count;
  CMProfileRef profileSet[1];
} CMConcatProfileSet;


typedef struct NCMConcatProfileSpec {
  UInt32 renderingIntent;
  UInt32 transformTag;
  CMProfileRef profile;
} NCMConcatProfileSpec;

typedef struct NCMConcatProfileSet {
  OSType cmm;
  UInt32 flags;
  UInt32 flagsMask;
  UInt32 profileCount;
  NCMConcatProfileSpec profileSpecs[1];
} NCMConcatProfileSet;

enum {
  kNoTransform = 0,
  kUseAtoB = 1,
  kUseBtoA = 2,
  kUseBtoB = 3,

  kDeviceToPCS = kUseAtoB,
  kPCSToDevice = kUseBtoA,
  kPCSToPCS = kUseBtoB,
  kUseProfileIntent = (int)0xFFFFFFFF
};



typedef struct CMRGBColor {
  UInt16 red;
  UInt16 green;
  UInt16 blue;
} CMRGBColor;

typedef struct CMCMYKColor {
  UInt16 cyan;
  UInt16 magenta;
  UInt16 yellow;
  UInt16 black;
} CMCMYKColor;

typedef struct CMCMYColor {
  UInt16 cyan;
  UInt16 magenta;
  UInt16 yellow;
} CMCMYColor;

typedef struct CMHLSColor {
  UInt16 hue;
  UInt16 lightness;
  UInt16 saturation;
} CMHLSColor;

typedef struct CMHSVColor {
  UInt16 hue;
  UInt16 saturation;
  UInt16 value;
} CMHSVColor;

typedef struct CMLabColor {
  UInt16 L;
  UInt16 a;
  UInt16 b;
} CMLabColor;

typedef struct CMLuvColor {
  UInt16 L;
  UInt16 u;
  UInt16 v;
} CMLuvColor;

typedef struct CMYxyColor {
  UInt16 capY;
  UInt16 x;
  UInt16 y;
} CMYxyColor;

typedef struct CMGrayColor {
  UInt16 gray;
} CMGrayColor;

typedef struct CMMultichannel5Color {
  UInt8 components[5];
} CMMultichannel5Color;

typedef struct CMMultichannel6Color {
  UInt8 components[6];
} CMMultichannel6Color;

typedef struct CMMultichannel7Color {
  UInt8 components[7];
} CMMultichannel7Color;

typedef struct CMMultichannel8Color {
  UInt8 components[8];
} CMMultichannel8Color;

typedef struct CMNamedColor {
  UInt32 namedColorIndex;
} CMNamedColor;

typedef union CMColor {
  CMRGBColor rgb;
  CMHSVColor hsv;
  CMHLSColor hls;
  CMXYZColor XYZ;
  CMLabColor Lab;
  CMLuvColor Luv;
  CMYxyColor Yxy;
  CMCMYKColor cmyk;
  CMCMYColor cmy;
  CMGrayColor gray;
  CMMultichannel5Color mc5;
  CMMultichannel6Color mc6;
  CMMultichannel7Color mc7;
  CMMultichannel8Color mc8;
  CMNamedColor namedColor;
} CMColor;



typedef struct CMProfileSearchRecord {
  CMHeader header;
  UInt32 fieldMask;
  UInt32 reserved[2];
} CMProfileSearchRecord, *CMProfileSearchRecordPtr, **CMProfileSearchRecordHandle;


typedef struct CMSearchRecord {
  OSType CMMType;
  OSType profileClass;
  OSType dataColorSpace;
  OSType profileConnectionSpace;
  UInt32 deviceManufacturer;
  UInt32 deviceModel;
  UInt32 deviceAttributes[2];
  UInt32 profileFlags;
  UInt32 searchMask;
  CMProfileFilterUPP filter;
} CMSearchRecord;



typedef struct CMMInfo {
  size_t dataSize;
  OSType CMMType;
  OSType CMMMfr;
  UInt32 CMMVersion;
  unsigned char ASCIIName[32];
  unsigned char ASCIIDesc[256];
  UniCharCount UniCodeNameCount;
  UniChar UniCodeName[32];
  UniCharCount UniCodeDescCount;
  UniChar UniCodeDesc[256];
} CMMInfo;





typedef struct CMMInfoRecord {
  OSType CMMType;
  long CMMVersion;
} CMMInfoRecord;

typedef struct CMCWInfoRecord {
  UInt32 cmmCount;
  CMMInfoRecord cmmInfo[2];
} CMCWInfoRecord;


typedef struct CMProfileIdentifier {
  CM2Header profileHeader;
  CMDateTime calibrationDate;
  UInt32 ASCIIProfileDescriptionLen;
  char ASCIIProfileDescription[1];
} CMProfileIdentifier, *CMProfileIdentifierPtr;



enum {
  cmColorSpaceSpaceMask = 0x0000003F,
  cmColorSpacePremulAlphaMask = 0x00000040,
  cmColorSpaceAlphaMask = 0x00000080,
  cmColorSpaceSpaceAndAlphaMask = 0x000000FF,
  cmColorSpacePackingMask = 0x0000FF00,
  cmColorSpaceEncodingMask = 0x000F0000,
  cmColorSpaceReservedMask = (int)0xFFF00000
};


enum {
  cmNoColorPacking = 0x0000,
  cmWord5ColorPacking = 0x0500,
  cmWord565ColorPacking = 0x0600,
  cmLong8ColorPacking = 0x0800,
  cmLong10ColorPacking = 0x0A00,
  cmAlphaFirstPacking = 0x1000,
  cmOneBitDirectPacking = 0x0B00,
  cmAlphaLastPacking = 0x0000,
  cm8_8ColorPacking = 0x2800,
  cm16_8ColorPacking = 0x2000,
  cm24_8ColorPacking = 0x2100,
  cm32_8ColorPacking = cmLong8ColorPacking,
  cm40_8ColorPacking = 0x2200,
  cm48_8ColorPacking = 0x2300,
  cm56_8ColorPacking = 0x2400,
  cm64_8ColorPacking = 0x2500,
  cm32_16ColorPacking = 0x2600,
  cm48_16ColorPacking = 0x2900,
  cm64_16ColorPacking = 0x2A00,
  cm32_32ColorPacking = 0x2700,
  cmLittleEndianPacking = 0x4000,
  cmReverseChannelPacking = 0x8000
};


enum {
  cmSRGB16ChannelEncoding = 0x00010000
};


enum {
  cmNoSpace = 0x0000,
  cmRGBSpace = 0x0001,
  cmCMYKSpace = 0x0002,
  cmHSVSpace = 0x0003,
  cmHLSSpace = 0x0004,
  cmYXYSpace = 0x0005,
  cmXYZSpace = 0x0006,
  cmLUVSpace = 0x0007,
  cmLABSpace = 0x0008,
  cmReservedSpace1 = 0x0009,
  cmGraySpace = 0x000A,
  cmReservedSpace2 = 0x000B,
  cmGamutResultSpace = 0x000C,
  cmNamedIndexedSpace = 0x0010,
  cmMCFiveSpace = 0x0011,
  cmMCSixSpace = 0x0012,
  cmMCSevenSpace = 0x0013,
  cmMCEightSpace = 0x0014,
  cmAlphaPmulSpace = 0x0040,
  cmAlphaSpace = 0x0080,
  cmRGBASpace = cmRGBSpace + cmAlphaSpace,
  cmGrayASpace = cmGraySpace + cmAlphaSpace,
  cmRGBAPmulSpace = cmRGBASpace + cmAlphaPmulSpace,
  cmGrayAPmulSpace = cmGrayASpace + cmAlphaPmulSpace
};




enum {
  cmGray8Space = cmGraySpace + cm8_8ColorPacking,
  cmGray16Space = cmGraySpace,
  cmGray16LSpace = cmGraySpace + cmLittleEndianPacking,
  cmGrayA16Space = cmGrayASpace + cm16_8ColorPacking,
  cmGrayA32Space = cmGrayASpace,
  cmGrayA32LSpace = cmGrayASpace + cmLittleEndianPacking,
  cmGrayA16PmulSpace = cmGrayAPmulSpace + cm16_8ColorPacking,
  cmGrayA32PmulSpace = cmGrayAPmulSpace,
  cmGrayA32LPmulSpace = cmGrayAPmulSpace + cmLittleEndianPacking,
  cmRGB16Space = cmRGBSpace + cmWord5ColorPacking,
  cmRGB16LSpace = cmRGBSpace + cmWord5ColorPacking + cmLittleEndianPacking,
  cmRGB565Space = cmRGBSpace + cmWord565ColorPacking,
  cmRGB565LSpace = cmRGBSpace + cmWord565ColorPacking + cmLittleEndianPacking,
  cmRGB24Space = cmRGBSpace + cm24_8ColorPacking,
  cmRGB32Space = cmRGBSpace + cm32_8ColorPacking,
  cmRGB48Space = cmRGBSpace + cm48_16ColorPacking,
  cmRGB48LSpace = cmRGBSpace + cm48_16ColorPacking + cmLittleEndianPacking,
  cmARGB32Space = cmRGBASpace + cm32_8ColorPacking + cmAlphaFirstPacking,
  cmARGB64Space = cmRGBASpace + cm64_16ColorPacking + cmAlphaFirstPacking,
  cmARGB64LSpace = cmRGBASpace + cm64_16ColorPacking + cmAlphaFirstPacking + cmLittleEndianPacking,
  cmRGBA32Space = cmRGBASpace + cm32_8ColorPacking + cmAlphaLastPacking,
  cmRGBA64Space = cmRGBASpace + cm64_16ColorPacking + cmAlphaLastPacking,
  cmRGBA64LSpace = cmRGBASpace + cm64_16ColorPacking + cmAlphaLastPacking + cmLittleEndianPacking,
  cmARGB32PmulSpace = cmRGBAPmulSpace + cm32_8ColorPacking + cmAlphaFirstPacking,
  cmARGB64PmulSpace = cmRGBAPmulSpace + cm64_16ColorPacking + cmAlphaFirstPacking,
  cmARGB64LPmulSpace = cmRGBAPmulSpace + cm64_16ColorPacking + cmAlphaFirstPacking + cmLittleEndianPacking,
  cmRGBA32PmulSpace = cmRGBAPmulSpace + cm32_8ColorPacking + cmAlphaLastPacking,
  cmRGBA64PmulSpace = cmRGBAPmulSpace + cm64_16ColorPacking + cmAlphaLastPacking,
  cmRGBA64LPmulSpace = cmRGBAPmulSpace + cm64_16ColorPacking + cmAlphaLastPacking + cmLittleEndianPacking,
  cmCMYK32Space = cmCMYKSpace + cm32_8ColorPacking,
  cmCMYK64Space = cmCMYKSpace + cm64_16ColorPacking,
  cmCMYK64LSpace = cmCMYKSpace + cm64_16ColorPacking + cmLittleEndianPacking,
  cmHSV32Space = cmHSVSpace + cmLong10ColorPacking,
  cmHLS32Space = cmHLSSpace + cmLong10ColorPacking,
  cmYXY32Space = cmYXYSpace + cmLong10ColorPacking,
  cmXYZ24Space = cmXYZSpace + cm24_8ColorPacking,
  cmXYZ32Space = cmXYZSpace + cmLong10ColorPacking,
  cmXYZ48Space = cmXYZSpace + cm48_16ColorPacking,
  cmXYZ48LSpace = cmXYZSpace + cm48_16ColorPacking + cmLittleEndianPacking,
  cmLUV32Space = cmLUVSpace + cmLong10ColorPacking,
  cmLAB24Space = cmLABSpace + cm24_8ColorPacking,
  cmLAB32Space = cmLABSpace + cmLong10ColorPacking,
  cmLAB48Space = cmLABSpace + cm48_16ColorPacking,
  cmLAB48LSpace = cmLABSpace + cm48_16ColorPacking + cmLittleEndianPacking,
  cmGamutResult1Space = cmOneBitDirectPacking + cmGamutResultSpace,
  cmNamedIndexed32Space = cm32_32ColorPacking + cmNamedIndexedSpace,
  cmNamedIndexed32LSpace = cm32_32ColorPacking + cmNamedIndexedSpace + cmLittleEndianPacking,
  cmMCFive8Space = cm40_8ColorPacking + cmMCFiveSpace,
  cmMCSix8Space = cm48_8ColorPacking + cmMCSixSpace,
  cmMCSeven8Space = cm56_8ColorPacking + cmMCSevenSpace,
  cmMCEight8Space = cm64_8ColorPacking + cmMCEightSpace
};


typedef UInt32 CMBitmapColorSpace;

typedef struct CMBitmap {
  char * image;
  size_t width;
  size_t height;
  size_t rowBytes;
  size_t pixelSize;
  CMBitmapColorSpace space;
  UInt32 user1;
  UInt32 user2;
} CMBitmap;




enum {

  CS_MAX_PATH = 256



};


enum {
  cmNoProfileBase = 0,

  cmFileBasedProfile = 1,
  cmHandleBasedProfile = 2,
  cmPtrBasedProfile = 3,
  cmProcedureBasedProfile = 4,

  cmPathBasedProfile = 5,
  cmBufferBasedProfile = 6
};




typedef struct CMFileLocation {
  FSSpec spec;
} CMFileLocation;


typedef struct CMHandleLocation {
  Handle h;
} CMHandleLocation;



typedef struct CMPtrLocation {
  Ptr p;
} CMPtrLocation;


typedef struct CMProcedureLocation {
  CMProfileAccessUPP proc;
  void * refCon;
} CMProcedureLocation;


typedef struct CMPathLocation {
  char path[CS_MAX_PATH];
} CMPathLocation;

typedef struct CMBufferLocation {
  void * buffer;
  UInt32 size;
} CMBufferLocation;

typedef union CMProfLoc {

  CMFileLocation fileLoc;

  CMHandleLocation handleLoc;

  CMPtrLocation ptrLoc;
  CMProcedureLocation procLoc;

  CMPathLocation pathLoc;
  CMBufferLocation bufferLoc;
} CMProfLoc;

typedef struct CMProfileLocation {
  short locType;
  CMProfLoc u;
} CMProfileLocation;

enum {
  cmOriginalProfileLocationSize = 72,
  cmCurrentProfileLocationSize = sizeof(CMProfileLocation)
};




enum {
  cmProfileIterateDataVersion1 = 0x00010000,
  cmProfileIterateDataVersion2 = 0x00020000,
  cmProfileIterateDataVersion3 = 0x00030000
};

typedef struct CMProfileIterateData {
  UInt32 dataVersion;
  CM2Header header;
  ScriptCode code;
  Str255 name;
  CMProfileLocation location;
  UniCharCount uniCodeNameCount;
  UniChar * uniCodeName;
  unsigned char * asciiName;
  CMMakeAndModel * makeAndModel;
  CMProfileMD5 * digest;
} CMProfileIterateData;




typedef OSErr ( * CMProfileIterateProcPtr)(CMProfileIterateData *iterateData, void *refCon);

typedef CMProfileIterateProcPtr CMProfileIterateUPP;
# 604 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
  static __inline__ __attribute__((always_inline)) CMProfileIterateUPP NewCMProfileIterateUPP(CMProfileIterateProcPtr userRoutine)
    { return (CMProfileIterateUPP)userRoutine; }

  static __inline__ __attribute__((always_inline)) OSErr InvokeCMProfileIterateUPP(CMProfileIterateData * iterateData, void * refCon, CMProfileIterateUPP userUPP)
    { return (*((CMProfileIterateProcPtr)userUPP))(iterateData, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMProfileIterateUPP(CMProfileIterateUPP userUPP) {}





typedef OSErr ( * CMMIterateProcPtr)(CMMInfo *iterateData, void *refCon);

typedef CMMIterateProcPtr CMMIterateUPP;
# 633 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
  static __inline__ __attribute__((always_inline)) CMMIterateUPP NewCMMIterateUPP(CMMIterateProcPtr userRoutine)
    { return (CMMIterateUPP)userRoutine; }

  static __inline__ __attribute__((always_inline)) OSErr InvokeCMMIterateUPP(CMMInfo * iterateData, void * refCon, CMMIterateUPP userUPP)
    { return (*((CMMIterateProcPtr)userUPP))(iterateData, refCon); }

  static __inline__ __attribute__((always_inline)) void DisposeCMMIterateUPP(CMMIterateUPP userUPP) {}



typedef void ( * CMLabToLabProcPtr)(float *L, float *a, float *b, void *refcon);




__attribute__((visibility("default"))) extern CMError
CMNewProfile(
  CMProfileRef * prof,
  const CMProfileLocation * theProfile) ;




__attribute__((visibility("default"))) extern CMError
CWNewLinkProfile(
  CMProfileRef * prof,
  const CMProfileLocation * targetLocation,
  CMConcatProfileSet * profileSet) ;



__attribute__((visibility("default"))) extern CMError
NCWNewLinkProfile(
  CMProfileRef * prof,
  const CMProfileLocation * targetLocation,
  NCMConcatProfileSet * profileSet,
  CMConcatCallBackUPP proc,
  void * refCon) ;
# 734 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
__attribute__((visibility("default"))) extern CMError
CMMakeProfile(
  CMProfileRef prof,
  CFDictionaryRef spec) ;




__attribute__((visibility("default"))) extern CMError
CMOpenProfile(
  CMProfileRef * prof,
  const CMProfileLocation * theProfile) ;


__attribute__((visibility("default"))) extern CMError
CMCloseProfile(CMProfileRef prof) ;


__attribute__((visibility("default"))) extern CMError
CMUpdateProfile(CMProfileRef prof) ;


__attribute__((visibility("default"))) extern CMError
CMCopyProfile(
  CMProfileRef * targetProf,
  const CMProfileLocation * targetLocation,
  CMProfileRef srcProf) ;


__attribute__((visibility("default"))) extern CMError
CMValidateProfile(
  CMProfileRef prof,
  Boolean * valid,
  Boolean * preferredCMMnotfound) ;




__attribute__((visibility("default"))) extern CMError
CMGetProfileLocation(
  CMProfileRef prof,
  CMProfileLocation * location) ;



__attribute__((visibility("default"))) extern CMError
NCMGetProfileLocation(
  CMProfileRef prof,
  CMProfileLocation * theProfile,
  UInt32 * locationSize) ;
# 792 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
__attribute__((visibility("default"))) extern CFDataRef
CMProfileCopyICCData(
  CFAllocatorRef allocator,
  CMProfileRef prof) ;




__attribute__((visibility("default"))) extern CMError
CMFlattenProfile(
  CMProfileRef prof,
  UInt32 flags,
  CMFlattenUPP proc,
  void * refCon,
  Boolean * preferredCMMnotfound) ;





__attribute__((visibility("default"))) extern CMError
NCMUnflattenProfile(
  CMProfileLocation * targetLocation,
  CMFlattenUPP proc,
  void * refCon,
  Boolean * preferredCMMnotfound) ;



__attribute__((visibility("default"))) extern CMError
CMGetProfileHeader(
  CMProfileRef prof,
  CMAppleProfileHeader * header) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileHeader(
  CMProfileRef prof,
  const CMAppleProfileHeader * header) ;


__attribute__((visibility("default"))) extern CMError
CMCloneProfileRef(CMProfileRef prof) ;


__attribute__((visibility("default"))) extern CMError
CMGetProfileRefCount(
  CMProfileRef prof,
  long * count) ;


__attribute__((visibility("default"))) extern CMError
CMProfileModified(
  CMProfileRef prof,
  Boolean * modified) ;


__attribute__((visibility("default"))) extern CMError
CMGetProfileMD5(
  CMProfileRef prof,
  CMProfileMD5 digest) ;




__attribute__((visibility("default"))) extern CMError
CMCountProfileElements(
  CMProfileRef prof,
  UInt32 * elementCount) ;


__attribute__((visibility("default"))) extern CMError
CMProfileElementExists(
  CMProfileRef prof,
  OSType tag,
  Boolean * found) ;


__attribute__((visibility("default"))) extern CMError
CMGetProfileElement(
  CMProfileRef prof,
  OSType tag,
  UInt32 * elementSize,
  void * elementData) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileElement(
  CMProfileRef prof,
  OSType tag,
  UInt32 elementSize,
  const void * elementData) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileElementSize(
  CMProfileRef prof,
  OSType tag,
  UInt32 elementSize) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileElementReference(
  CMProfileRef prof,
  OSType elementTag,
  OSType referenceTag) ;


__attribute__((visibility("default"))) extern CMError
CMGetPartialProfileElement(
  CMProfileRef prof,
  OSType tag,
  UInt32 offset,
  UInt32 * byteCount,
  void * elementData) ;


__attribute__((visibility("default"))) extern CMError
CMSetPartialProfileElement(
  CMProfileRef prof,
  OSType tag,
  UInt32 offset,
  UInt32 byteCount,
  const void * elementData) ;


__attribute__((visibility("default"))) extern CMError
CMGetIndProfileElementInfo(
  CMProfileRef prof,
  UInt32 index,
  OSType * tag,
  UInt32 * elementSize,
  Boolean * refs) ;


__attribute__((visibility("default"))) extern CMError
CMGetIndProfileElement(
  CMProfileRef prof,
  UInt32 index,
  UInt32 * elementSize,
  void * elementData) ;


__attribute__((visibility("default"))) extern CMError
CMRemoveProfileElement(
  CMProfileRef prof,
  OSType tag) ;






__attribute__((visibility("default"))) extern CMError
CMGetScriptProfileDescription(
  CMProfileRef prof,
  Str255 name,
  ScriptCode * code) ;



__attribute__((visibility("default"))) extern CMError
CMGetProfileDescriptions(
  CMProfileRef prof,
  char * aName,
  UInt32 * aCount,
  Str255 mName,
  ScriptCode * mCode,
  UniChar * uName,
  UniCharCount * uCount) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileDescriptions(
  CMProfileRef prof,
  const char * aName,
  UInt32 aCount,
  ConstStr255Param mName,
  ScriptCode mCode,
  const UniChar * uName,
  UniCharCount uCount) ;


__attribute__((visibility("default"))) extern CMError
CMCopyProfileLocalizedStringDictionary(
  CMProfileRef prof,
  OSType tag,
  CFDictionaryRef * theDict) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileLocalizedStringDictionary(
  CMProfileRef prof,
  OSType tag,
  CFDictionaryRef theDict) ;


__attribute__((visibility("default"))) extern CMError
CMCopyProfileLocalizedString(
  CMProfileRef prof,
  OSType tag,
  CFStringRef reqLocale,
  CFStringRef * locale,
  CFStringRef * str) ;
# 1005 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
__attribute__((visibility("default"))) extern CMError
CMCopyProfileDescriptionString(
  CMProfileRef prof,
  CFStringRef * str) ;




__attribute__((visibility("default"))) extern CMError
CMGetNamedColorInfo(
  CMProfileRef prof,
  UInt32 * deviceChannels,
  OSType * deviceColorSpace,
  OSType * PCSColorSpace,
  UInt32 * count,
  StringPtr prefix,
  StringPtr suffix) ;


__attribute__((visibility("default"))) extern CMError
CMGetNamedColorValue(
  CMProfileRef prof,
  StringPtr name,
  CMColor * deviceColor,
  CMColor * PCSColor) ;


__attribute__((visibility("default"))) extern CMError
CMGetIndNamedColorValue(
  CMProfileRef prof,
  UInt32 index,
  CMColor * deviceColor,
  CMColor * PCSColor) ;


__attribute__((visibility("default"))) extern CMError
CMGetNamedColorIndex(
  CMProfileRef prof,
  StringPtr name,
  UInt32 * index) ;


__attribute__((visibility("default"))) extern CMError
CMGetNamedColorName(
  CMProfileRef prof,
  UInt32 index,
  StringPtr name) ;




__attribute__((visibility("default"))) extern CMError
NCWNewColorWorld(
  CMWorldRef * cw,
  CMProfileRef src,
  CMProfileRef dst) ;



__attribute__((visibility("default"))) extern CMError
CWConcatColorWorld(
  CMWorldRef * cw,
  CMConcatProfileSet * profileSet) ;



__attribute__((visibility("default"))) extern CMError
NCWConcatColorWorld(
  CMWorldRef * cw,
  NCMConcatProfileSet * profileSet,
  CMConcatCallBackUPP proc,
  void * refCon) ;




__attribute__((visibility("default"))) extern CMError
CMGetCWInfo(
  CMWorldRef cw,
  CMCWInfoRecord * info) ;



__attribute__((visibility("default"))) extern void
CWDisposeColorWorld(CMWorldRef cw) ;


__attribute__((visibility("default"))) extern CMError
CWMatchColors(
  CMWorldRef cw,
  CMColor * myColors,
  size_t count) ;


__attribute__((visibility("default"))) extern CMError
CWCheckColors(
  CMWorldRef cw,
  CMColor * myColors,
  size_t count,
  UInt8 * result) ;


__attribute__((visibility("default"))) extern CMError
CWMatchBitmap(
  CMWorldRef cw,
  CMBitmap * bitmap,
  CMBitmapCallBackUPP progressProc,
  void * refCon,
  CMBitmap * matchedBitmap) ;


__attribute__((visibility("default"))) extern CMError
CWCheckBitmap(
  CMWorldRef cw,
  const CMBitmap * bitmap,
  CMBitmapCallBackUPP progressProc,
  void * refCon,
  CMBitmap * resultBitmap) ;

__attribute__((visibility("default"))) extern UInt32
CWGetCMMSignature(
  CMWorldRef cw) ;


enum {
  cmTextureRGBtoRGBX8 = 0
};
# 1144 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
__attribute__((visibility("default"))) extern CMError
CWFillLookupTexture(
  CMWorldRef cw,
  UInt32 gridPoints,
  UInt32 format,
  UInt32 dataSize,
  void * data) ;




__attribute__((visibility("default"))) extern CMError
CMGetSystemProfile(CMProfileRef * prof) ;




__attribute__((visibility("default"))) extern CMError
CMSetSystemProfile(const FSSpec * profileFileSpec) ;





__attribute__((visibility("default"))) extern CMError
NCMSetSystemProfile(const CMProfileLocation * profLoc) ;



__attribute__((visibility("default"))) extern CMError
CMGetDefaultProfileBySpace(
  OSType dataColorSpace,
  CMProfileRef * prof) ;




__attribute__((visibility("default"))) extern CMError
CMSetDefaultProfileBySpace(
  OSType dataColorSpace,
  CMProfileRef prof) ;



__attribute__((visibility("default"))) extern CMError
CMGetDefaultProfileByUse(
  OSType use,
  CMProfileRef * prof) ;




__attribute__((visibility("default"))) extern CMError
CMSetDefaultProfileByUse(
  OSType use,
  CMProfileRef prof) ;



__attribute__((visibility("default"))) extern CMError
CMGetProfileByAVID(
  CMDisplayIDType theID,
  CMProfileRef * prof) ;


__attribute__((visibility("default"))) extern CMError
CMSetProfileByAVID(
  CMDisplayIDType theID,
  CMProfileRef prof) ;


__attribute__((visibility("default"))) extern CMError
CMGetGammaByAVID(
  CMDisplayIDType theID,
  CMVideoCardGamma * gamma,
  UInt32 * size) ;


__attribute__((visibility("default"))) extern CMError
CMSetGammaByAVID(
  CMDisplayIDType theID,
  CMVideoCardGamma * gamma) ;




__attribute__((visibility("default"))) extern CMError
CMIterateColorSyncFolder(
  CMProfileIterateUPP proc,
  UInt32 * seed,
  UInt32 * count,
  void * refCon) ;





__attribute__((visibility("default"))) extern CMError
CMGetColorSyncFolderSpec(
  short vRefNum,
  Boolean createFolder,
  short * foundVRefNum,
  long * foundDirID) ;



__attribute__((visibility("default"))) extern CMError
CMNewProfileSearch(
  CMSearchRecord * searchSpec,
  void * refCon,
  UInt32 * count,
  CMProfileSearchRef * searchResult) ;



__attribute__((visibility("default"))) extern CMError
CMUpdateProfileSearch(
  CMProfileSearchRef search,
  void * refCon,
  UInt32 * count) ;



__attribute__((visibility("default"))) extern void
CMDisposeProfileSearch(
  CMProfileSearchRef search) ;



__attribute__((visibility("default"))) extern CMError
CMSearchGetIndProfile(
  CMProfileSearchRef search,
  UInt32 index,
  CMProfileRef * prof) ;



__attribute__((visibility("default"))) extern CMError
CMSearchGetIndProfileFileSpec(
  CMProfileSearchRef search,
  UInt32 index,
  FSSpec * spec) ;



__attribute__((visibility("default"))) extern CMError
CMCreateProfileIdentifier(
  CMProfileRef prof,
  CMProfileIdentifierPtr ident,
  UInt32 * size) ;



__attribute__((visibility("default"))) extern CMError
CMProfileIdentifierFolderSearch(
  CMProfileIdentifierPtr ident,
  UInt32 * matchedCount,
  CMProfileSearchRef * searchResult) ;



__attribute__((visibility("default"))) extern CMError
CMProfileIdentifierListSearch(
  CMProfileIdentifierPtr ident,
  CMProfileRef * profileList,
  UInt32 listSize,
  UInt32 * matchedCount,
  CMProfileRef * matchedList) ;
# 1320 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetPreferredCMM(
  OSType * cmmType,
  Boolean * prefCMMnotfound) ;


__attribute__((visibility("default"))) extern CMError
CMSetPreferredCMM(
  OSType cmmType) ;



__attribute__((visibility("default"))) extern CMError
CMIterateCMMInfo(
  CMMIterateUPP proc,
  UInt32 * count,
  void * refCon) ;


__attribute__((visibility("default"))) extern CMError
CMGetColorSyncVersion(UInt32 * version) ;


__attribute__((visibility("default"))) extern CMError
CMLaunchControlPanel(UInt32 flags) ;







__attribute__((visibility("default"))) extern CMError
CMConvertXYZToLab(
  const CMColor * src,
  const CMXYZColor * white,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertLabToXYZ(
  const CMColor * src,
  const CMXYZColor * white,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertXYZToLuv(
  const CMColor * src,
  const CMXYZColor * white,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertLuvToXYZ(
  const CMColor * src,
  const CMXYZColor * white,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertXYZToYxy(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertYxyToXYZ(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertRGBToHLS(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertHLSToRGB(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertRGBToHSV(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertHSVToRGB(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertRGBToGray(
  const CMColor * src,
  CMColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertXYZToFixedXYZ(
  const CMXYZColor * src,
  CMFixedXYZColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertFixedXYZToXYZ(
  const CMFixedXYZColor * src,
  CMXYZColor * dst,
  size_t count) ;



__attribute__((visibility("default"))) extern CMError
CMConvertXYZToXYZ(
  const CMColor * src,
  const CMXYZColor * srcIlluminant,
  CMColor * dst,
  const CMXYZColor * dstIlluminant,
  CMChromaticAdaptation method,
  size_t count) ;






__attribute__((visibility("default"))) extern CMError
CMGetPS2ColorSpace(
  CMProfileRef srcProf,
  UInt32 flags,
  CMFlattenUPP proc,
  void * refCon,
  Boolean * preferredCMMnotfound) ;


__attribute__((visibility("default"))) extern CMError
CMGetPS2ColorRenderingIntent(
  CMProfileRef srcProf,
  UInt32 flags,
  CMFlattenUPP proc,
  void * refCon,
  Boolean * preferredCMMnotfound) ;


__attribute__((visibility("default"))) extern CMError
CMGetPS2ColorRendering(
  CMProfileRef srcProf,
  CMProfileRef dstProf,
  UInt32 flags,
  CMFlattenUPP proc,
  void * refCon,
  Boolean * preferredCMMnotfound) ;


__attribute__((visibility("default"))) extern CMError
CMGetPS2ColorRenderingVMSize(
  CMProfileRef srcProf,
  CMProfileRef dstProf,
  UInt32 * vmSize,
  Boolean * preferredCMMnotfound) ;
# 1530 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMApplication.h" 3
#pragma options align=reset




}
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 2 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
extern "C" {







enum CMFloatBitmapFlags {
  kCMFloatBitmapFlagsNone = 0,
  kCMFloatBitmapFlagsAlpha = 1,
  kCMFloatBitmapFlagsAlphaPremul = 2,
  kCMFloatBitmapFlagsRangeClipped = 4
};
typedef enum CMFloatBitmapFlags CMFloatBitmapFlags;
# 106 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
typedef struct CMFloatBitmap {
  unsigned long version;
  float * buffers[16];
  size_t height;
  size_t width;
  ptrdiff_t rowStride;
  ptrdiff_t colStride;
  OSType space;
  CMFloatBitmapFlags flags;
} CMFloatBitmap;




__attribute__((visibility("default"))) extern const float kCMIlluminantD50[3] ;



__attribute__((visibility("default"))) extern const float kCMIlluminantD65[3] ;
# 138 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
__attribute__((visibility("default"))) extern CMFloatBitmap
CMFloatBitmapMakeChunky(
  float * buffer,
  size_t height,
  size_t width,
  OSType space) ;
# 157 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
__attribute__((visibility("default"))) extern CMError
CMConvertXYZFloatBitmap(
  const CMFloatBitmap * src,
  const float srcIlluminantXYZ[3],
  CMFloatBitmap * dst,
  const float dstIlluminantXYZ[3],
  CMChromaticAdaptation method) ;
# 174 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
__attribute__((visibility("default"))) extern CMError
CMConvertRGBFloatBitmap(
  const CMFloatBitmap * src,
  CMFloatBitmap * dst) ;
# 190 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
__attribute__((visibility("default"))) extern CMError
CMMatchFloatBitmap(
  CMWorldRef cw,
  const CMFloatBitmap * src,
  CMFloatBitmap * dst) ;
# 205 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMFloatBitmap.h" 3
}
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 2 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 1 3
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 1 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 2 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
extern "C" {






#pragma options align=mac68k







enum {
  cmDeviceInfoVersion1 = 0x00010000,
  cmDeviceProfileInfoVersion1 = 0x00010000,
  cmDeviceProfileInfoVersion2 = 0x00020000
};

enum {
  cmCurrentDeviceInfoVersion = cmDeviceInfoVersion1,
  cmCurrentProfileInfoVersion = cmDeviceProfileInfoVersion1
};





enum {
  cmDefaultDeviceID = 0,
  cmDefaultProfileID = 0
};





enum {
  cmDeviceStateDefault = 0x00000000,
  cmDeviceStateOffline = 0x00000001,
  cmDeviceStateBusy = 0x00000002,
  cmDeviceStateForceNotify = (int)0x80000000,
  cmDeviceStateDeviceRsvdBits = 0x00FF0000,
  cmDeviceStateAppleRsvdBits = (int)0xFF00FFFF
};
# 111 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
enum {
  cmIterateFactoryDeviceProfiles = 0x00000001,
  cmIterateCustomDeviceProfiles = 0x00000002,
  cmIterateCurrentDeviceProfiles = 0x00000003,
  cmIterateAllDeviceProfiles = 0x00000004,
  cmIterateDeviceProfilesMask = 0x0000000F
};




enum {
  cmDeviceDBNotFoundErr = -4227,
  cmDeviceAlreadyRegistered = -4228,
  cmDeviceNotRegistered = -4229,
  cmDeviceProfilesNotFound = -4230,
  cmInternalCFErr = -4231
};
# 158 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
typedef UInt32 CMDeviceState;





typedef UInt32 CMDeviceID;




typedef UInt32 CMDeviceProfileID;



enum {
  cmScannerDeviceClass = 'scnr',
  cmCameraDeviceClass = 'cmra',
  cmDisplayDeviceClass = 'mntr',
  cmPrinterDeviceClass = 'prtr',
  cmProofDeviceClass = 'pruf'
};

typedef OSType CMDeviceClass;





typedef struct CMDeviceScope {
  CFStringRef deviceUser;
  CFStringRef deviceHost;
} CMDeviceScope, CMDeviceProfileScope;





typedef struct CMDeviceInfo {
  UInt32 dataVersion;
  CMDeviceClass deviceClass;
  CMDeviceID deviceID;
  CMDeviceScope deviceScope;
  CMDeviceState deviceState;
  CMDeviceProfileID defaultProfileID;
  CFDictionaryRef * deviceName;

  UInt32 profileCount;
  UInt32 reserved;
} CMDeviceInfo, *CMDeviceInfoPtr;





typedef struct CMDeviceProfileInfo {
  UInt32 dataVersion;
  CMDeviceProfileID profileID;
  CMProfileLocation profileLoc;
  CFDictionaryRef profileName;
  UInt32 reserved;
} CMDeviceProfileInfo;

typedef struct NCMDeviceProfileInfo {
  UInt32 dataVersion;
  CMDeviceProfileID profileID;
  CMProfileLocation profileLoc;
  CFDictionaryRef profileName;
  CMDeviceProfileScope profileScope;
  UInt32 reserved;
} NCMDeviceProfileInfo;







typedef struct CMDeviceProfileArray {
  UInt32 profileCount;
  CMDeviceProfileInfo profiles[1];
} CMDeviceProfileArray, *CMDeviceProfileArrayPtr;






typedef OSErr ( * CMIterateDeviceInfoProcPtr)(const CMDeviceInfo *deviceInfo, void *refCon);
typedef OSErr ( * CMIterateDeviceProfileProcPtr)(const CMDeviceInfo *deviceInfo, const NCMDeviceProfileInfo *profileInfo, void *refCon);
# 266 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMRegisterColorDevice(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CFDictionaryRef deviceName,
  const CMDeviceScope * deviceScope) ;
# 285 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMUnregisterColorDevice(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID) ;
# 301 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMSetDefaultDevice(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID) ;
# 313 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDefaultDevice(
  CMDeviceClass deviceClass,
  CMDeviceID * deviceID) ;
# 334 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMSetDeviceFactoryProfiles(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceProfileID defaultProfID,
  const CMDeviceProfileArray * deviceProfiles) ;
# 354 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDeviceFactoryProfiles(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceProfileID * defaultProfID,
  UInt32 * arraySize,
  CMDeviceProfileArray * deviceProfiles) ;
# 376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMSetDeviceProfiles(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  const CMDeviceProfileScope * profileScope,
  const CMDeviceProfileArray * deviceProfiles) ;
# 395 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDeviceProfiles(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  UInt32 * arraySize,
  CMDeviceProfileArray * deviceProfiles) ;
# 413 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMSetDeviceDefaultProfileID(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceProfileID defaultProfID) ;
# 427 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDeviceDefaultProfileID(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceProfileID * defaultProfID) ;
# 447 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMSetDeviceProfile(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  const CMDeviceProfileScope * profileScope,
  CMDeviceProfileID profileID,
  const CMProfileLocation * profileLoc) ;
# 465 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDeviceProfile(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceProfileID profileID,
  CMProfileLocation * profileLoc) ;
# 488 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMSetDeviceState(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceState deviceState) ;
# 502 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDeviceState(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceState * deviceState) ;
# 522 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMGetDeviceInfo(
  CMDeviceClass deviceClass,
  CMDeviceID deviceID,
  CMDeviceInfo * deviceInfo) ;
# 547 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMIterateColorDevices(
  CMIterateDeviceInfoProcPtr proc,
  UInt32 * seed,
  UInt32 * count,
  void * refCon) ;
# 574 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMDeviceIntegration.h" 3
__attribute__((visibility("default"))) extern CMError
CMIterateDeviceProfiles(
  CMIterateDeviceProfileProcPtr proc,
  UInt32 * seed,
  UInt32 * count,
  UInt32 flags,
  void * refCon) ;







#pragma options align=reset




}
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMMComponent.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMMComponent.h" 3
extern "C" {






extern CMError
CMM_ConcatColorWorld(
  CMWorldRef cw,
  NCMConcatProfileSet * profileSet,
  CMConcatCallBackUPP proc,
  void * refCon);

extern CMError
CMM_MatchColors(
  CMWorldRef cw,
  CMColor * colors,
  UInt32 count);

extern CMError
CMM_CheckColors(
  CMWorldRef cw,
  CMColor * colors,
  UInt32 count,
  UInt8 * result);

extern CMError
CMM_ValidateProfile(
  CMProfileRef prof,
  Boolean * valid);

extern CMError
CMM_MatchBitmap(
  CMWorldRef cw,
  CMBitmap * bitmap,
  CMBitmapCallBackUPP progressProc,
  void * refCon,
  CMBitmap * matchedBitmap);

extern CMError
CMM_CheckBitmap(
  CMWorldRef cw,
  const CMBitmap * bitmap,
  CMBitmapCallBackUPP progressProc,
  void * refCon,
  CMBitmap * resultBitmap);

extern CMError
CMM_MatchFloatBitmap(
  CMWorldRef cw,
  const CMFloatBitmap * bitmap,
  CMFloatBitmap * resultBitmap);

extern CMError
CMM_CreateLinkProfile(
  CMProfileRef prof,
  NCMConcatProfileSet * profileSet,
  CMConcatCallBackUPP proc,
  void * refCon);

extern CFTypeRef
CMM_GetProperty(
  CMWorldRef cw,
  CFStringRef requestedKey);




}
# 41 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMScriptingPlugin.h" 1 3
# 23 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMScriptingPlugin.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMBase.h" 1 3
# 24 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMScriptingPlugin.h" 2 3
# 34 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/CMScriptingPlugin.h" 3
extern "C" {


enum {

  cmspInvalidImageFile = -4220,
  cmspInvalidImageSpace = -4221,
  cmspInvalidProfileEmbed = -4222,
  cmspInvalidProfileSource = -4223,
  cmspInvalidProfileDest = -4224,
  cmspInvalidProfileProof = -4225,
  cmspInvalidProfileLink = -4226
};






enum {
  cmspFavorEmbeddedMask = 0x00000001
};


__attribute__((visibility("default"))) extern CMError
CMValidImage(const FSSpec * spec) ;


__attribute__((visibility("default"))) extern CMError
CMGetImageSpace(
  const FSSpec * spec,
  OSType * space) ;


__attribute__((visibility("default"))) extern CMError
CMEmbedImage(
  const FSSpec * specFrom,
  const FSSpec * specInto,
  Boolean repl,
  CMProfileRef embProf) ;


__attribute__((visibility("default"))) extern CMError
CMUnembedImage(
  const FSSpec * specFrom,
  const FSSpec * specInto,
  Boolean repl) ;


__attribute__((visibility("default"))) extern CMError
CMMatchImage(
  const FSSpec * specFrom,
  const FSSpec * specInto,
  Boolean repl,
  UInt32 qual,
  CMProfileRef srcProf,
  UInt32 srcIntent,
  CMProfileRef dstProf) ;


__attribute__((visibility("default"))) extern CMError
CMProofImage(
  const FSSpec * specFrom,
  const FSSpec * specInto,
  Boolean repl,
  UInt32 qual,
  CMProfileRef srcProf,
  UInt32 srcIntent,
  CMProfileRef dstProf,
  CMProfileRef prfProf) ;


__attribute__((visibility("default"))) extern CMError
CMLinkImage(
  const FSSpec * specFrom,
  const FSSpec * specInto,
  Boolean repl,
  UInt32 qual,
  CMProfileRef lnkProf,
  UInt32 lnkIntent) ;


__attribute__((visibility("default"))) extern CMError
CMCountImageProfiles(
  const FSSpec * spec,
  UInt32 * count) ;


__attribute__((visibility("default"))) extern CMError
CMGetIndImageProfile(
  const FSSpec * spec,
  UInt32 index,
  CMProfileRef * prof) ;


__attribute__((visibility("default"))) extern CMError
CMSetIndImageProfile(
  const FSSpec * specFrom,
  const FSSpec * specInto,
  Boolean repl,
  UInt32 index,
  CMProfileRef prof) ;




}
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 2 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern "C" {


#pragma pack(push, 2)


enum {
  typeBoolean = 'bool',
  typeChar = 'TEXT'
};





enum {
  typeStyledUnicodeText = 'sutx',
  typeEncodedString = 'encs',
  typeUnicodeText = 'utxt',
  typeCString = 'cstr',
  typePString = 'pstr'
};




enum {
  typeUTF16ExternalRepresentation = 'ut16',
  typeUTF8Text = 'utf8'
};


enum {
  typeSInt16 = 'shor',
  typeUInt16 = 'ushr',
  typeSInt32 = 'long',
  typeUInt32 = 'magn',
  typeSInt64 = 'comp',
  typeUInt64 = 'ucom',
  typeIEEE32BitFloatingPoint = 'sing',
  typeIEEE64BitFloatingPoint = 'doub',
  type128BitFloatingPoint = 'ldbl',
  typeDecimalStruct = 'decm'
};
# 101 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
enum {
  typeSMInt = typeSInt16,
  typeShortInteger = typeSInt16,
  typeInteger = typeSInt32,
  typeLongInteger = typeSInt32,
  typeMagnitude = typeUInt32,
  typeComp = typeSInt64,
  typeSMFloat = typeIEEE32BitFloatingPoint,
  typeShortFloat = typeIEEE32BitFloatingPoint,
  typeFloat = typeIEEE64BitFloatingPoint,
  typeLongFloat = typeIEEE64BitFloatingPoint,
  typeExtended = 'exte'
};




enum {
  typeAEList = 'list',
  typeAERecord = 'reco',
  typeAppleEvent = 'aevt',
  typeEventRecord = 'evrc',
  typeTrue = 'true',
  typeFalse = 'fals',
  typeAlias = 'alis',
  typeEnumerated = 'enum',
  typeType = 'type',
  typeAppParameters = 'appa',
  typeProperty = 'prop',
  typeFSRef = 'fsrf',
  typeFileURL = 'furl',
  typeKeyword = 'keyw',
  typeSectionH = 'sect',
  typeWildCard = '****',
  typeApplSignature = 'sign',
  typeQDRectangle = 'qdrt',
  typeFixed = 'fixd',
  typeProcessSerialNumber = 'psn ',
  typeApplicationURL = 'aprl',
  typeNull = 'null'
};







enum {
  typeFSS = 'fss '
};



enum {
  typeCFAttributedStringRef = 'cfas',
  typeCFMutableAttributedStringRef = 'cfaa',
  typeCFStringRef = 'cfst',
  typeCFMutableStringRef = 'cfms',
  typeCFArrayRef = 'cfar',
  typeCFMutableArrayRef = 'cfma',
  typeCFDictionaryRef = 'cfdc',
  typeCFMutableDictionaryRef = 'cfmd',
  typeCFNumberRef = 'cfnb',
  typeCFBooleanRef = 'cftf',
  typeCFTypeRef = 'cfty'
};


enum {
  typeKernelProcessID = 'kpid',
  typeMachPort = 'port'
};


enum {
  typeApplicationBundleID = 'bund'
};


enum {
  keyTransactionIDAttr = 'tran',
  keyReturnIDAttr = 'rtid',
  keyEventClassAttr = 'evcl',
  keyEventIDAttr = 'evid',
  keyAddressAttr = 'addr',
  keyOptionalKeywordAttr = 'optk',
  keyTimeoutAttr = 'timo',
  keyInteractLevelAttr = 'inte',
  keyEventSourceAttr = 'esrc',
  keyMissedKeywordAttr = 'miss',
  keyOriginalAddressAttr = 'from',
  keyAcceptTimeoutAttr = 'actm',
  keyReplyRequestedAttr = 'repq'
};


enum {
  kAEDebugPOSTHeader = (1 << 0),
  kAEDebugReplyHeader = (1 << 1),
  kAEDebugXMLRequest = (1 << 2),
  kAEDebugXMLResponse = (1 << 3),
  kAEDebugXMLDebugAll = (long)0xFFFFFFFF
};





enum {
  kSOAP1999Schema = 'ss99',
  kSOAP2001Schema = 'ss01'
};

enum {

  keyUserNameAttr = 'unam',
  keyUserPasswordAttr = 'pass',
  keyDisableAuthenticationAttr = 'auth',


  keyXMLDebuggingAttr = 'xdbg',

  kAERPCClass = 'rpc ',
  kAEXMLRPCScheme = 'RPC2',
  kAESOAPScheme = 'SOAP',
  kAESharedScriptHandler = 'wscp',

  keyRPCMethodName = 'meth',
  keyRPCMethodParam = 'parm',
  keyRPCMethodParamOrder = '/ord',

  keyAEPOSTHeaderData = 'phed',
  keyAEReplyHeaderData = 'rhed',
  keyAEXMLRequestData = 'xreq',
  keyAEXMLReplyData = 'xrep',

  keyAdditionalHTTPHeaders = 'ahed',
  keySOAPAction = 'sact',
  keySOAPMethodNameSpace = 'mspc',
  keySOAPMethodNameSpaceURI = 'mspu',
  keySOAPSchemaVersion = 'ssch'
};
# 260 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
enum {
  keySOAPStructureMetaData = '/smd',
  keySOAPSMDNamespace = 'ssns',
  keySOAPSMDNamespaceURI = 'ssnu',
  keySOAPSMDType = 'sstp'
};






enum {

  kAEUseHTTPProxyAttr = 'xupr',

  kAEHTTPProxyPortAttr = 'xhtp',
  kAEHTTPProxyHostAttr = 'xhth'
};






enum {
  kAESocks4Protocol = 4,
  kAESocks5Protocol = 5
};

enum {
  kAEUseSocksAttr = 'xscs',

  kAESocksProxyAttr = 'xsok',

  kAESocksHostAttr = 'xshs',
  kAESocksPortAttr = 'xshp',
  kAESocksUserAttr = 'xshu',

  kAESocksPasswordAttr = 'xshw'
};



enum {
  kAEDescListFactorNone = 0,
  kAEDescListFactorType = 4,
  kAEDescListFactorTypeAndSize = 8
};


enum {

  kAutoGenerateReturnID = -1,

  kAnyTransactionID = 0
};


typedef ResType DescType;
typedef FourCharCode AEKeyword;

typedef struct OpaqueAEDataStorageType* AEDataStorageType;




typedef AEDataStorageType * AEDataStorage;
struct AEDesc {
  DescType descriptorType;
  AEDataStorage dataHandle;
};
typedef struct AEDesc AEDesc;
typedef AEDesc * AEDescPtr;
struct AEKeyDesc {
  AEKeyword descKey;
  AEDesc descContent;
};
typedef struct AEKeyDesc AEKeyDesc;


typedef AEDesc AEDescList;

typedef AEDescList AERecord;

typedef AEDesc AEAddressDesc;

typedef AERecord AppleEvent;
typedef AppleEvent * AppleEventPtr;
typedef SInt16 AEReturnID;
typedef SInt32 AETransactionID;
typedef FourCharCode AEEventClass;
typedef FourCharCode AEEventID;
typedef SInt8 AEArrayType;
enum {
  kAEDataArray = 0,
  kAEPackedArray = 1,
  kAEDescArray = 3,
  kAEKeyDescArray = 4
};


enum {
  kAEHandleArray = 2
};

union AEArrayData {
  SInt16 kAEDataArray[1];
  char kAEPackedArray[1];
  Handle kAEHandleArray[1];
  AEDesc kAEDescArray[1];
  AEKeyDesc kAEKeyDescArray[1];
};
typedef union AEArrayData AEArrayData;
typedef AEArrayData * AEArrayDataPointer;




typedef SInt16 AESendPriority;
enum {
  kAENormalPriority = 0x00000000,
  kAEHighPriority = 0x00000001
};


typedef SInt32 AESendMode;
enum {
  kAENoReply = 0x00000001,
  kAEQueueReply = 0x00000002,
  kAEWaitReply = 0x00000003,
  kAEDontReconnect = 0x00000080,
  kAEWantReceipt = 0x00000200,
  kAENeverInteract = 0x00000010,
  kAECanInteract = 0x00000020,
  kAEAlwaysInteract = 0x00000030,
  kAECanSwitchLayer = 0x00000040,
  kAEDontRecord = 0x00001000,
  kAEDontExecute = 0x00002000,
  kAEProcessNonReplyEvents = 0x00008000
};



enum {
  kAEDefaultTimeout = -1,
  kNoTimeOut = -2
};





typedef OSErr ( * AECoerceDescProcPtr)(const AEDesc *fromDesc, DescType toType, SRefCon handlerRefcon, AEDesc *toDesc);
typedef OSErr ( * AECoercePtrProcPtr)(DescType typeCode, const void *dataPtr, Size dataSize, DescType toType, SRefCon handlerRefcon, AEDesc *result);
typedef AECoerceDescProcPtr AECoerceDescUPP;
typedef AECoercePtrProcPtr AECoercePtrUPP;
# 425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern AECoerceDescUPP
NewAECoerceDescUPP(AECoerceDescProcPtr userRoutine) ;
# 436 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern AECoercePtrUPP
NewAECoercePtrUPP(AECoercePtrProcPtr userRoutine) ;
# 447 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern void
DisposeAECoerceDescUPP(AECoerceDescUPP userUPP) ;
# 458 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern void
DisposeAECoercePtrUPP(AECoercePtrUPP userUPP) ;
# 469 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
InvokeAECoerceDescUPP(
  const AEDesc * fromDesc,
  DescType toType,
  SRefCon handlerRefcon,
  AEDesc * toDesc,
  AECoerceDescUPP userUPP) ;
# 485 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
InvokeAECoercePtrUPP(
  DescType typeCode,
  const void * dataPtr,
  Size dataSize,
  DescType toType,
  SRefCon handlerRefcon,
  AEDesc * result,
  AECoercePtrUPP userUPP) ;



    inline AECoerceDescUPP NewAECoerceDescUPP(AECoerceDescProcPtr userRoutine) { return userRoutine; }
    inline AECoercePtrUPP NewAECoercePtrUPP(AECoercePtrProcPtr userRoutine) { return userRoutine; }
    inline void DisposeAECoerceDescUPP(AECoerceDescUPP) { }
    inline void DisposeAECoercePtrUPP(AECoercePtrUPP) { }
    inline OSErr InvokeAECoerceDescUPP(const AEDesc * fromDesc, DescType toType, SRefCon handlerRefcon, AEDesc * toDesc, AECoerceDescUPP userUPP) { return (*userUPP)(fromDesc, toType, handlerRefcon, toDesc); }
    inline OSErr InvokeAECoercePtrUPP(DescType typeCode, const void * dataPtr, Size dataSize, DescType toType, SRefCon handlerRefcon, AEDesc * result, AECoercePtrUPP userUPP) { return (*userUPP)(typeCode, dataPtr, dataSize, toType, handlerRefcon, result); }
# 517 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
typedef AECoerceDescUPP AECoercionHandlerUPP;
# 583 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEInstallCoercionHandler(
  DescType fromType,
  DescType toType,
  AECoercionHandlerUPP handler,
  SRefCon handlerRefcon,
  Boolean fromTypeIsDesc,
  Boolean isSysHandler) ;
# 629 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AERemoveCoercionHandler(
  DescType fromType,
  DescType toType,
  AECoercionHandlerUPP handler,
  Boolean isSysHandler) ;
# 684 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetCoercionHandler(
  DescType fromType,
  DescType toType,
  AECoercionHandlerUPP * handler,
  SRefCon * handlerRefcon,
  Boolean * fromTypeIsDesc,
  Boolean isSysHandler) ;
# 734 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AECoercePtr(
  DescType typeCode,
  const void * dataPtr,
  Size dataSize,
  DescType toType,
  AEDesc * result) ;
# 774 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AECoerceDesc(
  const AEDesc * theAEDesc,
  DescType toType,
  AEDesc * result) ;
# 810 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern void
AEInitializeDesc(AEDesc * desc) ;




    inline void AEInitializeDescInline(AEDesc* d) { d->descriptorType = typeNull; d->dataHandle = __null; }
# 865 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AECreateDesc(
  DescType typeCode,
  const void * dataPtr,
  Size dataSize,
  AEDesc * result) ;
# 907 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEDisposeDesc(AEDesc * theAEDesc) ;
# 951 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEDuplicateDesc(
  const AEDesc * theAEDesc,
  AEDesc * result) ;



typedef void ( * AEDisposeExternalProcPtr)(const void *dataPtr, Size dataLength, SRefCon refcon);
typedef AEDisposeExternalProcPtr AEDisposeExternalUPP;
# 1032 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSStatus
AECreateDescFromExternalPtr(
  OSType descriptorType,
  const void * dataPtr,
  Size dataLength,
  AEDisposeExternalUPP disposeCallback,
  SRefCon disposeRefcon,
  AEDesc * theDesc) ;
# 1088 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AECreateList(
  const void * factoringPtr,
  Size factoredSize,
  Boolean isRecord,
  AEDescList * resultList) ;
# 1120 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AECountItems(
  const AEDescList * theAEDescList,
  long * theCount) ;
# 1165 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutPtr(
  AEDescList * theAEDescList,
  long index,
  DescType typeCode,
  const void * dataPtr,
  Size dataSize) ;
# 1207 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutDesc(
  AEDescList * theAEDescList,
  long index,
  const AEDesc * theAEDesc) ;
# 1266 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetNthPtr(
  const AEDescList * theAEDescList,
  long index,
  DescType desiredType,
  AEKeyword * theAEKeyword,
  DescType * typeCode,
  void * dataPtr,
  Size maximumSize,
  Size * actualSize) ;
# 1317 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetNthDesc(
  const AEDescList * theAEDescList,
  long index,
  DescType desiredType,
  AEKeyword * theAEKeyword,
  AEDesc * result) ;
# 1352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AESizeOfNthItem(
  const AEDescList * theAEDescList,
  long index,
  DescType * typeCode,
  Size * dataSize) ;
# 1401 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetArray(
  const AEDescList * theAEDescList,
  AEArrayType arrayType,
  AEArrayDataPointer arrayPtr,
  Size maximumSize,
  DescType * itemType,
  Size * itemSize,
  long * itemCount) ;
# 1449 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutArray(
  AEDescList * theAEDescList,
  AEArrayType arrayType,
  const AEArrayData * arrayPtr,
  DescType itemType,
  Size itemSize,
  long itemCount) ;
# 1481 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEDeleteItem(
  AEDescList * theAEDescList,
  long index) ;
# 1508 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern Boolean
AECheckIsRecord(const AEDesc * theDesc) ;
# 1608 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AECreateAppleEvent(
  AEEventClass theAEEventClass,
  AEEventID theAEEventID,
  const AEAddressDesc * target,
  AEReturnID returnID,
  AETransactionID transactionID,
  AppleEvent * result) ;
# 1660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutParamPtr(
  AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType typeCode,
  const void * dataPtr,
  Size dataSize) ;
# 1698 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutParamDesc(
  AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  const AEDesc * theAEDesc) ;
# 1793 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetParamPtr(
  const AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType desiredType,
  DescType * actualType,
  void * dataPtr,
  Size maximumSize,
  Size * actualSize) ;
# 1858 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetParamDesc(
  const AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType desiredType,
  AEDesc * result) ;
# 1898 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AESizeOfParam(
  const AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType * typeCode,
  Size * dataSize) ;
# 1930 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEDeleteParam(
  AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword) ;
# 2020 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetAttributePtr(
  const AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType desiredType,
  DescType * typeCode,
  void * dataPtr,
  Size maximumSize,
  Size * actualSize) ;
# 2081 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetAttributeDesc(
  const AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType desiredType,
  AEDesc * result) ;
# 2120 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AESizeOfAttribute(
  const AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType * typeCode,
  Size * dataSize) ;
# 2164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutAttributePtr(
  AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  DescType typeCode,
  const void * dataPtr,
  Size dataSize) ;
# 2213 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEPutAttributeDesc(
  AppleEvent * theAppleEvent,
  AEKeyword theAEKeyword,
  const AEDesc * theAEDesc) ;
# 2253 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern Size
AESizeOfFlattenedDesc(const AEDesc * theAEDesc) ;
# 2300 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSStatus
AEFlattenDesc(
  const AEDesc * theAEDesc,
  Ptr buffer,
  Size bufferSize,
  Size * actualSize) ;
# 2337 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSStatus
AEUnflattenDesc(
  const void * buffer,
  AEDesc * result) ;
# 2382 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEGetDescData(
  const AEDesc * theAEDesc,
  void * dataPtr,
  Size maximumSize) ;
# 2409 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern Size
AEGetDescDataSize(const AEDesc * theAEDesc) ;
# 2443 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
AEReplaceDescData(
  DescType typeCode,
  const void * dataPtr,
  Size dataSize,
  AEDesc * theAEDesc) ;
# 2488 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSStatus
AEGetDescDataRange(
  const AEDesc * dataDesc,
  void * buffer,
  Size offset,
  Size length) ;





typedef OSErr ( * AEEventHandlerProcPtr)(const AppleEvent *theAppleEvent, AppleEvent *reply, SRefCon handlerRefcon);
typedef AEEventHandlerProcPtr AEEventHandlerUPP;
# 2509 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern AEDisposeExternalUPP
NewAEDisposeExternalUPP(AEDisposeExternalProcPtr userRoutine) ;
# 2520 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern AEEventHandlerUPP
NewAEEventHandlerUPP(AEEventHandlerProcPtr userRoutine) ;
# 2531 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern void
DisposeAEDisposeExternalUPP(AEDisposeExternalUPP userUPP) ;
# 2542 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern void
DisposeAEEventHandlerUPP(AEEventHandlerUPP userUPP) ;
# 2553 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern void
InvokeAEDisposeExternalUPP(
  const void * dataPtr,
  Size dataLength,
  SRefCon refcon,
  AEDisposeExternalUPP userUPP) ;
# 2568 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
extern OSErr
InvokeAEEventHandlerUPP(
  const AppleEvent * theAppleEvent,
  AppleEvent * reply,
  SRefCon handlerRefcon,
  AEEventHandlerUPP userUPP) ;



    inline AEDisposeExternalUPP NewAEDisposeExternalUPP(AEDisposeExternalProcPtr userRoutine) { return userRoutine; }
    inline AEEventHandlerUPP NewAEEventHandlerUPP(AEEventHandlerProcPtr userRoutine) { return userRoutine; }
    inline void DisposeAEDisposeExternalUPP(AEDisposeExternalUPP) { }
    inline void DisposeAEEventHandlerUPP(AEEventHandlerUPP) { }
    inline void InvokeAEDisposeExternalUPP(const void * dataPtr, Size dataLength, SRefCon refcon, AEDisposeExternalUPP userUPP) { (*userUPP)(dataPtr, dataLength, refcon); }
    inline OSErr InvokeAEEventHandlerUPP(const AppleEvent * theAppleEvent, AppleEvent * reply, SRefCon handlerRefcon, AEEventHandlerUPP userUPP) { return (*userUPP)(theAppleEvent, reply, handlerRefcon); }
# 2595 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEDataModel.h" 3
#pragma pack(pop)


}
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 1 3
# 44 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern "C" {


#pragma pack(push, 2)

enum {

  keyDirectObject = '----',
  keyErrorNumber = 'errn',
  keyErrorString = 'errs',
  keyProcessSerialNumber = 'psn ',
  keyPreDispatch = 'phac',
  keySelectProc = 'selh',

  keyAERecorderCount = 'recr',

  keyAEVersion = 'vers'
};


enum {
  kCoreEventClass = 'aevt'
};


enum {
  kAEOpenApplication = 'oapp',
  kAEOpenDocuments = 'odoc',
  kAEPrintDocuments = 'pdoc',
  kAEOpenContents = 'ocon',
  kAEQuitApplication = 'quit',
  kAEAnswer = 'ansr',
  kAEApplicationDied = 'obit',
  kAEShowPreferences = 'pref',
  kAESetupForHelpAnalysis = 'sfha',
  kAECompletedHelpAnalysis = 'coha'
};


enum {
  kAEStartRecording = 'reca',
  kAEStopRecording = 'recc',
  kAENotifyStartRecording = 'rec1',
  kAENotifyStopRecording = 'rec0',
  kAENotifyRecording = 'recr'
};
# 101 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
typedef SInt8 AEEventSource;
enum {
  kAEUnknownSource = 0,
  kAEDirectCall = 1,
  kAESameProcess = 2,
  kAELocalProcess = 3,
  kAERemoteProcess = 4
};
# 124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AEInstallEventHandler(
  AEEventClass theAEEventClass,
  AEEventID theAEEventID,
  AEEventHandlerUPP handler,
  SRefCon handlerRefcon,
  Boolean isSysHandler) ;
# 144 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AERemoveEventHandler(
  AEEventClass theAEEventClass,
  AEEventID theAEEventID,
  AEEventHandlerUPP handler,
  Boolean isSysHandler) ;
# 163 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AEGetEventHandler(
  AEEventClass theAEEventClass,
  AEEventID theAEEventID,
  AEEventHandlerUPP * handler,
  SRefCon * handlerRefcon,
  Boolean isSysHandler) ;
# 189 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AEInstallSpecialHandler(
  AEKeyword functionClass,
  AEEventHandlerUPP handler,
  Boolean isSysHandler) ;
# 207 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AERemoveSpecialHandler(
  AEKeyword functionClass,
  AEEventHandlerUPP handler,
  Boolean isSysHandler) ;
# 225 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AEGetSpecialHandler(
  AEKeyword functionClass,
  AEEventHandlerUPP * handler,
  Boolean isSysHandler) ;
# 250 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern OSErr
AEManagerInfo(
  AEKeyword keyWord,
  long * result) ;
# 290 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern const CFStringRef kAERemoteProcessURLKey ;
# 303 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern const CFStringRef kAERemoteProcessNameKey ;
# 316 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern const CFStringRef kAERemoteProcessUserIDKey ;
# 329 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern const CFStringRef kAERemoteProcessProcessIDKey ;
# 339 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
struct AERemoteProcessResolverContext {




  CFIndex version;




  void * info;




  CFAllocatorRetainCallBack retain;




  CFAllocatorReleaseCallBack release;




  CFAllocatorCopyDescriptionCallBack copyDescription;
};
typedef struct AERemoteProcessResolverContext AERemoteProcessResolverContext;
# 378 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
typedef struct AERemoteProcessResolver* AERemoteProcessResolverRef;
# 411 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern AERemoteProcessResolverRef
AECreateRemoteProcessResolver(
  CFAllocatorRef allocator,
  CFURLRef url) ;
# 438 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern void
AEDisposeRemoteProcessResolver(AERemoteProcessResolverRef ref) ;
# 479 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern CFArrayRef
AERemoteProcessResolverGetProcesses(
  AERemoteProcessResolverRef ref,
  CFStreamError * outError) ;
# 494 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
typedef void ( * AERemoteProcessResolverCallback)(AERemoteProcessResolverRef ref, void *info);
# 534 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AppleEvents.h" 3
extern void
AERemoteProcessResolverScheduleWithRunLoop(
  AERemoteProcessResolverRef ref,
  CFRunLoopRef runLoop,
  CFStringRef runLoopMode,
  AERemoteProcessResolverCallback callback,
  const AERemoteProcessResolverContext * ctx) ;






#pragma pack(pop)


}
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 1 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 3
extern "C" {
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 3
extern OSErr
CreateOffsetDescriptor(
  long theOffset,
  AEDesc * theDescriptor) ;
# 64 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 3
extern OSErr
CreateCompDescriptor(
  DescType comparisonOperator,
  AEDesc * operand1,
  AEDesc * operand2,
  Boolean disposeInputs,
  AEDesc * theDescriptor) ;
# 84 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 3
extern OSErr
CreateLogicalDescriptor(
  AEDescList * theLogicalTerms,
  DescType theLogicOperator,
  Boolean disposeInputs,
  AEDesc * theDescriptor) ;
# 104 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 3
extern OSErr
CreateObjSpecifier(
  DescType desiredClass,
  AEDesc * theContainer,
  DescType keyForm,
  AEDesc * keyData,
  Boolean disposeInputs,
  AEDesc * objSpecifier) ;
# 125 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEPackObject.h" 3
extern OSErr
CreateRangeDescriptor(
  AEDesc * rangeStart,
  AEDesc * rangeStop,
  Boolean disposeInputs,
  AEDesc * theDescriptor) ;




}
# 34 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern "C" {


#pragma pack(push, 2)

enum {

  kAEAND = 'AND ',
  kAEOR = 'OR  ',
  kAENOT = 'NOT ',

  kAEFirst = 'firs',
  kAELast = 'last',
  kAEMiddle = 'midd',
  kAEAny = 'any ',
  kAEAll = 'all ',

  kAENext = 'next',
  kAEPrevious = 'prev',

  keyAECompOperator = 'relo',
  keyAELogicalTerms = 'term',
  keyAELogicalOperator = 'logc',
  keyAEObject1 = 'obj1',
  keyAEObject2 = 'obj2',

  keyAEDesiredClass = 'want',
  keyAEContainer = 'from',
  keyAEKeyForm = 'form',
  keyAEKeyData = 'seld'
};

enum {

  keyAERangeStart = 'star',
  keyAERangeStop = 'stop',

  keyDisposeTokenProc = 'xtok',
  keyAECompareProc = 'cmpr',
  keyAECountProc = 'cont',
  keyAEMarkTokenProc = 'mkid',
  keyAEMarkProc = 'mark',
  keyAEAdjustMarksProc = 'adjm',
  keyAEGetErrDescProc = 'indc'
};


enum {

  formAbsolutePosition = 'indx',
  formRelativePosition = 'rele',
  formTest = 'test',
  formRange = 'rang',
  formPropertyID = 'prop',
  formName = 'name',
  formUniqueID = 'ID  ',

  typeObjectSpecifier = 'obj ',
  typeObjectBeingExamined = 'exmn',
  typeCurrentContainer = 'ccnt',
  typeToken = 'toke',
  typeRelativeDescriptor = 'rel ',
  typeAbsoluteOrdinal = 'abso',
  typeIndexDescriptor = 'inde',
  typeRangeDescriptor = 'rang',
  typeLogicalDescriptor = 'logi',
  typeCompDescriptor = 'cmpd',
  typeOSLTokenList = 'ostl'
};


enum {
  kAEIDoMinimum = 0x0000,
  kAEIDoWhose = 0x0001,
  kAEIDoMarking = 0x0004,
  kAEPassSubDescs = 0x0008,
  kAEResolveNestedLists = 0x0010,
  kAEHandleSimpleRanges = 0x0020,
  kAEUseRelativeIterators = 0x0040
};


enum {
  typeWhoseDescriptor = 'whos',
  formWhose = 'whos',
  typeWhoseRange = 'wrng',
  keyAEWhoseRangeStart = 'wstr',
  keyAEWhoseRangeStop = 'wstp',
  keyAEIndex = 'kidx',
  keyAETest = 'ktst'
};







struct ccntTokenRecord {
  DescType tokenClass;
  AEDesc token;
};
typedef struct ccntTokenRecord ccntTokenRecord;
typedef ccntTokenRecord * ccntTokenRecPtr;
typedef ccntTokenRecPtr * ccntTokenRecHandle;






typedef OSErr ( * OSLAccessorProcPtr)(DescType desiredClass, const AEDesc *container, DescType containerClass, DescType form, const AEDesc *selectionData, AEDesc *value, SRefCon accessorRefcon);
typedef OSErr ( * OSLCompareProcPtr)(DescType oper, const AEDesc *obj1, const AEDesc *obj2, Boolean *result);
typedef OSErr ( * OSLCountProcPtr)(DescType desiredType, DescType containerClass, const AEDesc *container, long *result);
typedef OSErr ( * OSLDisposeTokenProcPtr)(AEDesc * unneededToken);
typedef OSErr ( * OSLGetMarkTokenProcPtr)(const AEDesc *dContainerToken, DescType containerClass, AEDesc *result);
typedef OSErr ( * OSLGetErrDescProcPtr)(AEDesc ** appDescPtr);
typedef OSErr ( * OSLMarkProcPtr)(const AEDesc *dToken, const AEDesc *markToken, long index);
typedef OSErr ( * OSLAdjustMarksProcPtr)(long newStart, long newStop, const AEDesc *markToken);
typedef OSLAccessorProcPtr OSLAccessorUPP;
typedef OSLCompareProcPtr OSLCompareUPP;
typedef OSLCountProcPtr OSLCountUPP;
typedef OSLDisposeTokenProcPtr OSLDisposeTokenUPP;
typedef OSLGetMarkTokenProcPtr OSLGetMarkTokenUPP;
typedef OSLGetErrDescProcPtr OSLGetErrDescUPP;
typedef OSLMarkProcPtr OSLMarkUPP;
typedef OSLAdjustMarksProcPtr OSLAdjustMarksUPP;
# 171 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLAccessorUPP
NewOSLAccessorUPP(OSLAccessorProcPtr userRoutine) ;
# 182 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLCompareUPP
NewOSLCompareUPP(OSLCompareProcPtr userRoutine) ;
# 193 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLCountUPP
NewOSLCountUPP(OSLCountProcPtr userRoutine) ;
# 204 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLDisposeTokenUPP
NewOSLDisposeTokenUPP(OSLDisposeTokenProcPtr userRoutine) ;
# 215 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLGetMarkTokenUPP
NewOSLGetMarkTokenUPP(OSLGetMarkTokenProcPtr userRoutine) ;
# 226 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLGetErrDescUPP
NewOSLGetErrDescUPP(OSLGetErrDescProcPtr userRoutine) ;
# 237 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLMarkUPP
NewOSLMarkUPP(OSLMarkProcPtr userRoutine) ;
# 248 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSLAdjustMarksUPP
NewOSLAdjustMarksUPP(OSLAdjustMarksProcPtr userRoutine) ;
# 259 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLAccessorUPP(OSLAccessorUPP userUPP) ;
# 270 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLCompareUPP(OSLCompareUPP userUPP) ;
# 281 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLCountUPP(OSLCountUPP userUPP) ;
# 292 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLDisposeTokenUPP(OSLDisposeTokenUPP userUPP) ;
# 303 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLGetMarkTokenUPP(OSLGetMarkTokenUPP userUPP) ;
# 314 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLGetErrDescUPP(OSLGetErrDescUPP userUPP) ;
# 325 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLMarkUPP(OSLMarkUPP userUPP) ;
# 336 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern void
DisposeOSLAdjustMarksUPP(OSLAdjustMarksUPP userUPP) ;
# 347 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLAccessorUPP(
  DescType desiredClass,
  const AEDesc * container,
  DescType containerClass,
  DescType form,
  const AEDesc * selectionData,
  AEDesc * value,
  SRefCon accessorRefcon,
  OSLAccessorUPP userUPP) ;
# 366 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLCompareUPP(
  DescType oper,
  const AEDesc * obj1,
  const AEDesc * obj2,
  Boolean * result,
  OSLCompareUPP userUPP) ;
# 382 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLCountUPP(
  DescType desiredType,
  DescType containerClass,
  const AEDesc * container,
  long * result,
  OSLCountUPP userUPP) ;
# 398 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLDisposeTokenUPP(
  AEDesc * unneededToken,
  OSLDisposeTokenUPP userUPP) ;
# 411 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLGetMarkTokenUPP(
  const AEDesc * dContainerToken,
  DescType containerClass,
  AEDesc * result,
  OSLGetMarkTokenUPP userUPP) ;
# 426 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLGetErrDescUPP(
  AEDesc ** appDescPtr,
  OSLGetErrDescUPP userUPP) ;
# 439 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLMarkUPP(
  const AEDesc * dToken,
  const AEDesc * markToken,
  long index,
  OSLMarkUPP userUPP) ;
# 454 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
InvokeOSLAdjustMarksUPP(
  long newStart,
  long newStop,
  const AEDesc * markToken,
  OSLAdjustMarksUPP userUPP) ;



    inline OSLAccessorUPP NewOSLAccessorUPP(OSLAccessorProcPtr userRoutine) { return userRoutine; }
    inline OSLCompareUPP NewOSLCompareUPP(OSLCompareProcPtr userRoutine) { return userRoutine; }
    inline OSLCountUPP NewOSLCountUPP(OSLCountProcPtr userRoutine) { return userRoutine; }
    inline OSLDisposeTokenUPP NewOSLDisposeTokenUPP(OSLDisposeTokenProcPtr userRoutine) { return userRoutine; }
    inline OSLGetMarkTokenUPP NewOSLGetMarkTokenUPP(OSLGetMarkTokenProcPtr userRoutine) { return userRoutine; }
    inline OSLGetErrDescUPP NewOSLGetErrDescUPP(OSLGetErrDescProcPtr userRoutine) { return userRoutine; }
    inline OSLMarkUPP NewOSLMarkUPP(OSLMarkProcPtr userRoutine) { return userRoutine; }
    inline OSLAdjustMarksUPP NewOSLAdjustMarksUPP(OSLAdjustMarksProcPtr userRoutine) { return userRoutine; }
    inline void DisposeOSLAccessorUPP(OSLAccessorUPP) { }
    inline void DisposeOSLCompareUPP(OSLCompareUPP) { }
    inline void DisposeOSLCountUPP(OSLCountUPP) { }
    inline void DisposeOSLDisposeTokenUPP(OSLDisposeTokenUPP) { }
    inline void DisposeOSLGetMarkTokenUPP(OSLGetMarkTokenUPP) { }
    inline void DisposeOSLGetErrDescUPP(OSLGetErrDescUPP) { }
    inline void DisposeOSLMarkUPP(OSLMarkUPP) { }
    inline void DisposeOSLAdjustMarksUPP(OSLAdjustMarksUPP) { }
    inline OSErr InvokeOSLAccessorUPP(DescType desiredClass, const AEDesc * container, DescType containerClass, DescType form, const AEDesc * selectionData, AEDesc * value, SRefCon accessorRefcon, OSLAccessorUPP userUPP) { return (*userUPP)(desiredClass, container, containerClass, form, selectionData, value, accessorRefcon); }
    inline OSErr InvokeOSLCompareUPP(DescType oper, const AEDesc * obj1, const AEDesc * obj2, Boolean * result, OSLCompareUPP userUPP) { return (*userUPP)(oper, obj1, obj2, result); }
    inline OSErr InvokeOSLCountUPP(DescType desiredType, DescType containerClass, const AEDesc * container, long * result, OSLCountUPP userUPP) { return (*userUPP)(desiredType, containerClass, container, result); }
    inline OSErr InvokeOSLDisposeTokenUPP(AEDesc * unneededToken, OSLDisposeTokenUPP userUPP) { return (*userUPP)(unneededToken); }
    inline OSErr InvokeOSLGetMarkTokenUPP(const AEDesc * dContainerToken, DescType containerClass, AEDesc * result, OSLGetMarkTokenUPP userUPP) { return (*userUPP)(dContainerToken, containerClass, result); }
    inline OSErr InvokeOSLGetErrDescUPP(AEDesc ** appDescPtr, OSLGetErrDescUPP userUPP) { return (*userUPP)(appDescPtr); }
    inline OSErr InvokeOSLMarkUPP(const AEDesc * dToken, const AEDesc * markToken, long index, OSLMarkUPP userUPP) { return (*userUPP)(dToken, markToken, index); }
    inline OSErr InvokeOSLAdjustMarksUPP(long newStart, long newStop, const AEDesc * markToken, OSLAdjustMarksUPP userUPP) { return (*userUPP)(newStart, newStop, markToken); }
# 529 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AEObjectInit(void) ;
# 546 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AESetObjectCallbacks(
  OSLCompareUPP myCompareProc,
  OSLCountUPP myCountProc,
  OSLDisposeTokenUPP myDisposeTokenProc,
  OSLGetMarkTokenUPP myGetMarkTokenProc,
  OSLMarkUPP myMarkProc,
  OSLAdjustMarksUPP myAdjustMarksProc,
  OSLGetErrDescUPP myGetErrDescProcPtr) ;
# 568 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AEResolve(
  const AEDesc * objectSpecifier,
  short callbackFlags,
  AEDesc * theToken) ;
# 586 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AEInstallObjectAccessor(
  DescType desiredClass,
  DescType containerType,
  OSLAccessorUPP theAccessor,
  SRefCon accessorRefcon,
  Boolean isSysHandler) ;
# 606 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AERemoveObjectAccessor(
  DescType desiredClass,
  DescType containerType,
  OSLAccessorUPP theAccessor,
  Boolean isSysHandler) ;
# 625 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AEGetObjectAccessor(
  DescType desiredClass,
  DescType containerType,
  OSLAccessorUPP * accessor,
  SRefCon * accessorRefcon,
  Boolean isSysHandler) ;
# 645 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AEDisposeToken(AEDesc * theToken) ;
# 660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEObjects.h" 3
extern OSErr
AECallObjectAccessor(
  DescType desiredClass,
  const AEDesc * containerToken,
  DescType containerClass,
  DescType keyForm,
  const AEDesc * keyData,
  AEDesc * token) ;



#pragma pack(pop)


}
# 38 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AERegistry.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AERegistry.h" 3
#pragma pack(push, 2)

enum {
  cAEList = 'list',
  cApplication = 'capp',
  cArc = 'carc',
  cBoolean = 'bool',
  cCell = 'ccel',
  cChar = 'cha ',
  cColorTable = 'clrt',
  cColumn = 'ccol',
  cDocument = 'docu',
  cDrawingArea = 'cdrw',
  cEnumeration = 'enum',
  cFile = 'file',
  cFixed = 'fixd',
  cFixedPoint = 'fpnt',
  cFixedRectangle = 'frct',
  cGraphicLine = 'glin',
  cGraphicObject = 'cgob',
  cGraphicShape = 'cgsh',
  cGraphicText = 'cgtx',
  cGroupedGraphic = 'cpic'
};

enum {
  cInsertionLoc = 'insl',
  cInsertionPoint = 'cins',
  cIntlText = 'itxt',
  cIntlWritingCode = 'intl',
  cItem = 'citm',
  cLine = 'clin',
  cLongDateTime = 'ldt ',
  cLongFixed = 'lfxd',
  cLongFixedPoint = 'lfpt',
  cLongFixedRectangle = 'lfrc',
  cLongInteger = 'long',
  cLongPoint = 'lpnt',
  cLongRectangle = 'lrct',
  cMachineLoc = 'mLoc',
  cMenu = 'cmnu',
  cMenuItem = 'cmen',
  cObject = 'cobj',
  cObjectSpecifier = 'obj ',
  cOpenableObject = 'coob',
  cOval = 'covl'
};

enum {
  cParagraph = 'cpar',
  cPICT = 'PICT',
  cPixel = 'cpxl',
  cPixelMap = 'cpix',
  cPolygon = 'cpgn',
  cProperty = 'prop',
  cQDPoint = 'QDpt',
  cQDRectangle = 'qdrt',
  cRectangle = 'crec',
  cRGBColor = 'cRGB',
  cRotation = 'trot',
  cRoundedRectangle = 'crrc',
  cRow = 'crow',
  cSelection = 'csel',
  cShortInteger = 'shor',
  cTable = 'ctbl',
  cText = 'ctxt',
  cTextFlow = 'cflo',
  cTextStyles = 'tsty',
  cType = 'type'
};

enum {
  cVersion = 'vers',
  cWindow = 'cwin',
  cWord = 'cwor',
  enumArrows = 'arro',
  enumJustification = 'just',
  enumKeyForm = 'kfrm',
  enumPosition = 'posi',
  enumProtection = 'prtn',
  enumQuality = 'qual',
  enumSaveOptions = 'savo',
  enumStyle = 'styl',
  enumTransferMode = 'tran',
  kAEAbout = 'abou',
  kAEAfter = 'afte',
  kAEAliasSelection = 'sali',
  kAEAllCaps = 'alcp',
  kAEArrowAtEnd = 'aren',
  kAEArrowAtStart = 'arst',
  kAEArrowBothEnds = 'arbo'
};

enum {
  kAEAsk = 'ask ',
  kAEBefore = 'befo',
  kAEBeginning = 'bgng',
  kAEBeginsWith = 'bgwt',
  kAEBeginTransaction = 'begi',
  kAEBold = 'bold',
  kAECaseSensEquals = 'cseq',
  kAECentered = 'cent',
  kAEChangeView = 'view',
  kAEClone = 'clon',
  kAEClose = 'clos',
  kAECondensed = 'cond',
  kAEContains = 'cont',
  kAECopy = 'copy',
  kAECoreSuite = 'core',
  kAECountElements = 'cnte',
  kAECreateElement = 'crel',
  kAECreatePublisher = 'cpub',
  kAECut = 'cut ',
  kAEDelete = 'delo'
};

enum {
  kAEDoObjectsExist = 'doex',
  kAEDoScript = 'dosc',
  kAEDrag = 'drag',
  kAEDuplicateSelection = 'sdup',
  kAEEditGraphic = 'edit',
  kAEEmptyTrash = 'empt',
  kAEEnd = 'end ',
  kAEEndsWith = 'ends',
  kAEEndTransaction = 'endt',
  kAEEquals = '=   ',
  kAEExpanded = 'pexp',
  kAEFast = 'fast',
  kAEFinderEvents = 'FNDR',
  kAEFormulaProtect = 'fpro',
  kAEFullyJustified = 'full',
  kAEGetClassInfo = 'qobj',
  kAEGetData = 'getd',
  kAEGetDataSize = 'dsiz',
  kAEGetEventInfo = 'gtei',
  kAEGetInfoSelection = 'sinf'
};

enum {
  kAEGetPrivilegeSelection = 'sprv',
  kAEGetSuiteInfo = 'gtsi',
  kAEGreaterThan = '>   ',
  kAEGreaterThanEquals = '>=  ',
  kAEGrow = 'grow',
  kAEHidden = 'hidn',
  kAEHiQuality = 'hiqu',
  kAEImageGraphic = 'imgr',
  kAEIsUniform = 'isun',
  kAEItalic = 'ital',
  kAELeftJustified = 'left',
  kAELessThan = '<   ',
  kAELessThanEquals = '<=  ',
  kAELowercase = 'lowc',
  kAEMakeObjectsVisible = 'mvis',
  kAEMiscStandards = 'misc',
  kAEModifiable = 'modf',
  kAEMove = 'move',
  kAENo = 'no  ',
  kAENoArrow = 'arno'
};

enum {
  kAENonmodifiable = 'nmod',
  kAEOpen = 'odoc',
  kAEOpenSelection = 'sope',
  kAEOutline = 'outl',
  kAEPageSetup = 'pgsu',
  kAEPaste = 'past',
  kAEPlain = 'plan',
  kAEPrint = 'pdoc',
  kAEPrintSelection = 'spri',
  kAEPrintWindow = 'pwin',
  kAEPutAwaySelection = 'sput',
  kAEQDAddOver = 'addo',
  kAEQDAddPin = 'addp',
  kAEQDAdMax = 'admx',
  kAEQDAdMin = 'admn',
  kAEQDBic = 'bic ',
  kAEQDBlend = 'blnd',
  kAEQDCopy = 'cpy ',
  kAEQDNotBic = 'nbic',
  kAEQDNotCopy = 'ncpy'
};

enum {
  kAEQDNotOr = 'ntor',
  kAEQDNotXor = 'nxor',
  kAEQDOr = 'or  ',
  kAEQDSubOver = 'subo',
  kAEQDSubPin = 'subp',
  kAEQDSupplementalSuite = 'qdsp',
  kAEQDXor = 'xor ',
  kAEQuickdrawSuite = 'qdrw',
  kAEQuitAll = 'quia',
  kAERedo = 'redo',
  kAERegular = 'regl',
  kAEReopenApplication = 'rapp',
  kAEReplace = 'rplc',
  kAERequiredSuite = 'reqd',
  kAERestart = 'rest',
  kAERevealSelection = 'srev',
  kAERevert = 'rvrt',
  kAERightJustified = 'rght',
  kAESave = 'save',
  kAESelect = 'slct',
  kAESetData = 'setd'
};

enum {
  kAESetPosition = 'posn',
  kAEShadow = 'shad',
  kAEShowClipboard = 'shcl',
  kAEShutDown = 'shut',
  kAESleep = 'slep',
  kAESmallCaps = 'smcp',
  kAESpecialClassProperties = 'c@#!',
  kAEStrikethrough = 'strk',
  kAESubscript = 'sbsc',
  kAESuperscript = 'spsc',
  kAETableSuite = 'tbls',
  kAETextSuite = 'TEXT',
  kAETransactionTerminated = 'ttrm',
  kAEUnderline = 'undl',
  kAEUndo = 'undo',
  kAEWholeWordEquals = 'wweq',
  kAEYes = 'yes ',
  kAEZoom = 'zoom'
};


enum {
  kAELogOut = 'logo',
  kAEReallyLogOut = 'rlgo',
  kAEShowRestartDialog = 'rrst',
  kAEShowShutdownDialog = 'rsdn'
};


enum {
  kAEMouseClass = 'mous',
  kAEDown = 'down',
  kAEUp = 'up  ',
  kAEMoved = 'move',
  kAEStoppedMoving = 'stop',
  kAEWindowClass = 'wind',
  kAEUpdate = 'updt',
  kAEActivate = 'actv',
  kAEDeactivate = 'dact',
  kAECommandClass = 'cmnd',
  kAEKeyClass = 'keyc',
  kAERawKey = 'rkey',
  kAEVirtualKey = 'keyc',
  kAENavigationKey = 'nave',
  kAEAutoDown = 'auto',
  kAEApplicationClass = 'appl',
  kAESuspend = 'susp',
  kAEResume = 'rsme',
  kAEDiskEvent = 'disk',
  kAENullEvent = 'null',
  kAEWakeUpEvent = 'wake',
  kAEScrapEvent = 'scrp',
  kAEHighLevel = 'high'
};

enum {
  keyAEAngle = 'kang',
  keyAEArcAngle = 'parc'
};

enum {
  keyAEBaseAddr = 'badd',
  keyAEBestType = 'pbst',
  keyAEBgndColor = 'kbcl',
  keyAEBgndPattern = 'kbpt',
  keyAEBounds = 'pbnd',
  keyAECellList = 'kclt',
  keyAEClassID = 'clID',
  keyAEColor = 'colr',
  keyAEColorTable = 'cltb',
  keyAECurveHeight = 'kchd',
  keyAECurveWidth = 'kcwd',
  keyAEDashStyle = 'pdst',
  keyAEData = 'data',
  keyAEDefaultType = 'deft',
  keyAEDefinitionRect = 'pdrt',
  keyAEDescType = 'dstp',
  keyAEDestination = 'dest',
  keyAEDoAntiAlias = 'anta',
  keyAEDoDithered = 'gdit',
  keyAEDoRotate = 'kdrt'
};

enum {
  keyAEDoScale = 'ksca',
  keyAEDoTranslate = 'ktra',
  keyAEEditionFileLoc = 'eloc',
  keyAEElements = 'elms',
  keyAEEndPoint = 'pend',
  keyAEEventClass = 'evcl',
  keyAEEventID = 'evti',
  keyAEFile = 'kfil',
  keyAEFileType = 'fltp',
  keyAEFillColor = 'flcl',
  keyAEFillPattern = 'flpt',
  keyAEFlipHorizontal = 'kfho',
  keyAEFlipVertical = 'kfvt',
  keyAEFont = 'font',
  keyAEFormula = 'pfor',
  keyAEGraphicObjects = 'gobs',
  keyAEID = 'ID  ',
  keyAEImageQuality = 'gqua',
  keyAEInsertHere = 'insh',
  keyAEKeyForms = 'keyf'
};

enum {
  keyAEKeyword = 'kywd',
  keyAELevel = 'levl',
  keyAELineArrow = 'arro',
  keyAEName = 'pnam',
  keyAENewElementLoc = 'pnel',
  keyAEObject = 'kobj',
  keyAEObjectClass = 'kocl',
  keyAEOffStyles = 'ofst',
  keyAEOnStyles = 'onst',
  keyAEParameters = 'prms',
  keyAEParamFlags = 'pmfg',
  keyAEPenColor = 'ppcl',
  keyAEPenPattern = 'pppa',
  keyAEPenWidth = 'ppwd',
  keyAEPixelDepth = 'pdpt',
  keyAEPixMapMinus = 'kpmm',
  keyAEPMTable = 'kpmt',
  keyAEPointList = 'ptlt',
  keyAEPointSize = 'ptsz',
  keyAEPosition = 'kpos'
};

enum {
  keyAEPropData = 'prdt',
  keyAEProperties = 'qpro',
  keyAEProperty = 'kprp',
  keyAEPropFlags = 'prfg',
  keyAEPropID = 'prop',
  keyAEProtection = 'ppro',
  keyAERenderAs = 'kren',
  keyAERequestedType = 'rtyp',
  keyAEResult = '----',
  keyAEResultInfo = 'rsin',
  keyAERotation = 'prot',
  keyAERotPoint = 'krtp',
  keyAERowList = 'krls',
  keyAESaveOptions = 'savo',
  keyAEScale = 'pscl',
  keyAEScriptTag = 'psct',
  keyAESearchText = 'stxt',
  keyAEShowWhere = 'show',
  keyAEStartAngle = 'pang',
  keyAEStartPoint = 'pstp',
  keyAEStyles = 'ksty'
};

enum {
  keyAESuiteID = 'suit',
  keyAEText = 'ktxt',
  keyAETextColor = 'ptxc',
  keyAETextFont = 'ptxf',
  keyAETextPointSize = 'ptps',
  keyAETextStyles = 'txst',
  keyAETextLineHeight = 'ktlh',
  keyAETextLineAscent = 'ktas',
  keyAETheText = 'thtx',
  keyAETransferMode = 'pptm',
  keyAETranslation = 'ptrs',
  keyAETryAsStructGraf = 'toog',
  keyAEUniformStyles = 'ustl',
  keyAEUpdateOn = 'pupd',
  keyAEUserTerm = 'utrm',
  keyAEWindow = 'wndw',
  keyAEWritingCode = 'wrcd'
};

enum {
  keyMiscellaneous = 'fmsc',
  keySelection = 'fsel',
  keyWindow = 'kwnd',

  keyWhen = 'when',
  keyWhere = 'wher',
  keyModifiers = 'mods',
  keyKey = 'key ',
  keyKeyCode = 'code',
  keyKeyboard = 'keyb',
  keyDriveNumber = 'drv#',
  keyErrorCode = 'err#',
  keyHighLevelClass = 'hcls',
  keyHighLevelID = 'hid '
};

enum {
  pArcAngle = 'parc',
  pBackgroundColor = 'pbcl',
  pBackgroundPattern = 'pbpt',
  pBestType = 'pbst',
  pBounds = 'pbnd',
  pClass = 'pcls',
  pClipboard = 'pcli',
  pColor = 'colr',
  pColorTable = 'cltb',
  pContents = 'pcnt',
  pCornerCurveHeight = 'pchd',
  pCornerCurveWidth = 'pcwd',
  pDashStyle = 'pdst',
  pDefaultType = 'deft',
  pDefinitionRect = 'pdrt',
  pEnabled = 'enbl',
  pEndPoint = 'pend',
  pFillColor = 'flcl',
  pFillPattern = 'flpt',
  pFont = 'font'
};

enum {
  pFormula = 'pfor',
  pGraphicObjects = 'gobs',
  pHasCloseBox = 'hclb',
  pHasTitleBar = 'ptit',
  pID = 'ID  ',
  pIndex = 'pidx',
  pInsertionLoc = 'pins',
  pIsFloating = 'isfl',
  pIsFrontProcess = 'pisf',
  pIsModal = 'pmod',
  pIsModified = 'imod',
  pIsResizable = 'prsz',
  pIsStationeryPad = 'pspd',
  pIsZoomable = 'iszm',
  pIsZoomed = 'pzum',
  pItemNumber = 'itmn',
  pJustification = 'pjst',
  pLineArrow = 'arro',
  pMenuID = 'mnid',
  pName = 'pnam'
};

enum {
  pNewElementLoc = 'pnel',
  pPenColor = 'ppcl',
  pPenPattern = 'pppa',
  pPenWidth = 'ppwd',
  pPixelDepth = 'pdpt',
  pPointList = 'ptlt',
  pPointSize = 'ptsz',
  pProtection = 'ppro',
  pRotation = 'prot',
  pScale = 'pscl',
  pScript = 'scpt',
  pScriptTag = 'psct',
  pSelected = 'selc',
  pSelection = 'sele',
  pStartAngle = 'pang',
  pStartPoint = 'pstp',
  pTextColor = 'ptxc',
  pTextFont = 'ptxf',
  pTextItemDelimiters = 'txdl',
  pTextPointSize = 'ptps'
};

enum {
  pTextStyles = 'txst',
  pTransferMode = 'pptm',
  pTranslation = 'ptrs',
  pUniformStyles = 'ustl',
  pUpdateOn = 'pupd',
  pUserSelection = 'pusl',
  pVersion = 'vers',
  pVisible = 'pvis'
};

enum {
  typeAEText = 'tTXT',
  typeArc = 'carc',
  typeBest = 'best',
  typeCell = 'ccel',
  typeClassInfo = 'gcli',
  typeColorTable = 'clrt',
  typeColumn = 'ccol',
  typeDashStyle = 'tdas',
  typeData = 'tdta',
  typeDrawingArea = 'cdrw',
  typeElemInfo = 'elin',
  typeEnumeration = 'enum',
  typeEPS = 'EPS ',
  typeEventInfo = 'evin'
};

enum {
  typeFinderWindow = 'fwin',
  typeFixedPoint = 'fpnt',
  typeFixedRectangle = 'frct',
  typeGraphicLine = 'glin',
  typeGraphicText = 'cgtx',
  typeGroupedGraphic = 'cpic',
  typeInsertionLoc = 'insl',
  typeIntlText = 'itxt',
  typeIntlWritingCode = 'intl',
  typeLongDateTime = 'ldt ',
  typeISO8601DateTime = 'isot',
  typeLongFixed = 'lfxd',
  typeLongFixedPoint = 'lfpt',
  typeLongFixedRectangle = 'lfrc',
  typeLongPoint = 'lpnt',
  typeLongRectangle = 'lrct',
  typeMachineLoc = 'mLoc',
  typeOval = 'covl',
  typeParamInfo = 'pmin',
  typePict = 'PICT'
};

enum {
  typePixelMap = 'cpix',
  typePixMapMinus = 'tpmm',
  typePolygon = 'cpgn',
  typePropInfo = 'pinf',
  typePtr = 'ptr ',
  typeQDPoint = 'QDpt',
  typeQDRegion = 'Qrgn',
  typeRectangle = 'crec',
  typeRGB16 = 'tr16',
  typeRGB96 = 'tr96',
  typeRGBColor = 'cRGB',
  typeRotation = 'trot',
  typeRoundedRectangle = 'crrc',
  typeRow = 'crow',
  typeScrapStyles = 'styl',
  typeScript = 'scpt',
  typeStyledText = 'STXT',
  typeSuiteInfo = 'suin',
  typeTable = 'ctbl',
  typeTextStyles = 'tsty'
};

enum {
  typeTIFF = 'TIFF',
  typeJPEG = 'JPEG',
  typeGIF = 'GIFf',
  typeVersion = 'vers'
};

enum {
  kAEMenuClass = 'menu',
  kAEMenuSelect = 'mhit',
  kAEMouseDown = 'mdwn',
  kAEMouseDownInBack = 'mdbk',
  kAEKeyDown = 'kdwn',
  kAEResized = 'rsiz',
  kAEPromise = 'prom'
};

enum {
  keyMenuID = 'mid ',
  keyMenuItem = 'mitm',
  keyCloseAllWindows = 'caw ',
  keyOriginalBounds = 'obnd',
  keyNewBounds = 'nbnd',
  keyLocalWhere = 'lwhr'
};

enum {
  typeHIMenu = 'mobj',
  typeHIWindow = 'wobj'
};

enum {
  kBySmallIcon = 0,
  kByIconView = 1,
  kByNameView = 2,
  kByDateView = 3,
  kBySizeView = 4,
  kByKindView = 5,
  kByCommentView = 6,
  kByLabelView = 7,
  kByVersionView = 8
};

enum {
  kAEInfo = 11,
  kAEMain = 0,
  kAESharing = 13
};

enum {
  kAEZoomIn = 7,
  kAEZoomOut = 8
};

enum {
  kTextServiceClass = 'tsvc',
  kUpdateActiveInputArea = 'updt',
  kShowHideInputWindow = 'shiw',
  kPos2Offset = 'p2st',
  kOffset2Pos = 'st2p',
  kUnicodeNotFromInputMethod = 'unim',
  kGetSelectedText = 'gtxt',
  keyAETSMDocumentRefcon = 'refc',
  keyAEServerInstance = 'srvi',
  keyAETheData = 'kdat',
  keyAEFixLength = 'fixl',
  keyAEUpdateRange = 'udng',
  keyAECurrentPoint = 'cpos',
  keyAEBufferSize = 'buff',
  keyAEMoveView = 'mvvw',
  keyAENextBody = 'nxbd',
  keyAETSMScriptTag = 'sclg',
  keyAETSMTextFont = 'ktxf',
  keyAETSMTextFMFont = 'ktxm',
  keyAETSMTextPointSize = 'ktps',
  keyAETSMEventRecord = 'tevt',
  keyAETSMEventRef = 'tevr',
  keyAETextServiceEncoding = 'tsen',
  keyAETextServiceMacEncoding = 'tmen',
  keyAETSMGlyphInfoArray = 'tgia',
  typeTextRange = 'txrn',
  typeComponentInstance = 'cmpi',
  typeOffsetArray = 'ofay',
  typeTextRangeArray = 'tray',
  typeLowLevelEventRecord = 'evtr',
  typeGlyphInfoArray = 'glia',
  typeEventRef = 'evrf',
  typeText = typeChar
};



enum {
  kTSMOutsideOfBody = 1,
  kTSMInsideOfBody = 2,
  kTSMInsideOfActiveInputArea = 3
};

enum {
  kNextBody = 1,
  kPreviousBody = 2
};

struct TextRange {
  SInt32 fStart;
  SInt32 fEnd;
  SInt16 fHiliteStyle;
};
typedef struct TextRange TextRange;
typedef TextRange * TextRangePtr;
typedef TextRangePtr * TextRangeHandle;
struct TextRangeArray {
  SInt16 fNumOfRanges;
  TextRange fRange[1];
};
typedef struct TextRangeArray TextRangeArray;
typedef TextRangeArray * TextRangeArrayPtr;
typedef TextRangeArrayPtr * TextRangeArrayHandle;
struct OffsetArray {
  SInt16 fNumOfOffsets;
  SInt32 fOffset[1];
};
typedef struct OffsetArray OffsetArray;
typedef OffsetArray * OffsetArrayPtr;
typedef OffsetArrayPtr * OffsetArrayHandle;
struct WritingCode {
  ScriptCode theScriptCode;
  LangCode theLangCode;
};
typedef struct WritingCode WritingCode;
struct IntlText {
  ScriptCode theScriptCode;
  LangCode theLangCode;
  char theText[1];
};
typedef struct IntlText IntlText;


enum {
  kTSMHiliteCaretPosition = 1,
  kTSMHiliteRawText = 2,
  kTSMHiliteSelectedRawText = 3,
  kTSMHiliteConvertedText = 4,
  kTSMHiliteSelectedConvertedText = 5,
  kTSMHiliteBlockFillText = 6,
  kTSMHiliteOutlineText = 7,
  kTSMHiliteSelectedText = 8,
  kTSMHiliteNoHilite = 9
};
# 743 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AERegistry.h" 3
enum {
  keyAEHiliteRange = 'hrng',
  keyAEPinRange = 'pnrg',
  keyAEClauseOffsets = 'clau',
  keyAEOffset = 'ofst',
  keyAEPoint = 'gpos',
  keyAELeftSide = 'klef',
  keyAERegionClass = 'rgnc',
  keyAEDragging = 'bool'
};
# 762 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AERegistry.h" 3
enum {

  typeMeters = 'metr',
  typeInches = 'inch',
  typeFeet = 'feet',
  typeYards = 'yard',
  typeMiles = 'mile',
  typeKilometers = 'kmtr',
  typeCentimeters = 'cmtr',
  typeSquareMeters = 'sqrm',
  typeSquareFeet = 'sqft',
  typeSquareYards = 'sqyd',
  typeSquareMiles = 'sqmi',
  typeSquareKilometers = 'sqkm',
  typeLiters = 'litr',
  typeQuarts = 'qrts',
  typeGallons = 'galn',
  typeCubicMeters = 'cmet',
  typeCubicFeet = 'cfet',
  typeCubicInches = 'cuin',
  typeCubicCentimeter = 'ccmt',
  typeCubicYards = 'cyrd',
  typeKilograms = 'kgrm',
  typeGrams = 'gram',
  typeOunces = 'ozs ',
  typePounds = 'lbs ',
  typeDegreesC = 'degc',
  typeDegreesF = 'degf',
  typeDegreesK = 'degk'
};

enum {

  kFAServerApp = 'ssrv',
  kDoFolderActionEvent = 'fola',
  kFolderActionCode = 'actn',
  kFolderOpenedEvent = 'fopn',
  kFolderClosedEvent = 'fclo',
  kFolderWindowMovedEvent = 'fsiz',
  kFolderItemsAddedEvent = 'fget',
  kFolderItemsRemovedEvent = 'flos',
  kItemList = 'flst',
  kNewSizeParameter = 'fnsz',
  kFASuiteCode = 'faco',
  kFAAttachCommand = 'atfa',
  kFARemoveCommand = 'rmfa',
  kFAEditCommand = 'edfa',
  kFAFileParam = 'faal',
  kFAIndexParam = 'indx'
};


enum {

  kAEInternetSuite = 'gurl',
  kAEISWebStarSuite = 0x575757BD
};

enum {

  kAEISGetURL = 'gurl',
  KAEISHandleCGI = 'sdoc'
};

enum {

  cURL = 'url ',
  cInternetAddress = 'IPAD',
  cHTML = 'html',
  cFTPItem = 'ftp '
};

enum {

  kAEISHTTPSearchArgs = 'kfor',
  kAEISPostArgs = 'post',
  kAEISMethod = 'meth',
  kAEISClientAddress = 'addr',
  kAEISUserName = 'user',
  kAEISPassword = 'pass',
  kAEISFromUser = 'frmu',
  kAEISServerName = 'svnm',
  kAEISServerPort = 'svpt',
  kAEISScriptName = 'scnm',
  kAEISContentType = 'ctyp',
  kAEISReferrer = 'refr',
  kAEISUserAgent = 'Agnt',
  kAEISAction = 'Kact',
  kAEISActionPath = 'Kapt',
  kAEISClientIP = 'Kcip',
  kAEISFullRequest = 'Kfrq'
};

enum {

  pScheme = 'pusc',
  pHost = 'HOST',
  pPath = 'FTPc',
  pUserName = 'RAun',
  pUserPassword = 'RApw',
  pDNSForm = 'pDNS',
  pURL = 'pURL',
  pTextEncoding = 'ptxe',
  pFTPKind = 'kind'
};

enum {

  eScheme = 'esch',
  eurlHTTP = 'http',
  eurlHTTPS = 'htps',
  eurlFTP = 'ftp ',
  eurlMail = 'mail',
  eurlFile = 'file',
  eurlGopher = 'gphr',
  eurlTelnet = 'tlnt',
  eurlNews = 'news',
  eurlSNews = 'snws',
  eurlNNTP = 'nntp',
  eurlMessage = 'mess',
  eurlMailbox = 'mbox',
  eurlMulti = 'mult',
  eurlLaunch = 'laun',
  eurlAFP = 'afp ',
  eurlAT = 'at  ',
  eurlEPPC = 'eppc',
  eurlRTSP = 'rtsp',
  eurlIMAP = 'imap',
  eurlNFS = 'unfs',
  eurlPOP = 'upop',
  eurlLDAP = 'uldp',
  eurlUnknown = 'url?'
};

enum {

  kConnSuite = 'macc',
  cDevSpec = 'cdev',
  cAddressSpec = 'cadr',
  cADBAddress = 'cadb',
  cAppleTalkAddress = 'cat ',
  cBusAddress = 'cbus',
  cEthernetAddress = 'cen ',
  cFireWireAddress = 'cfw ',
  cIPAddress = 'cip ',
  cLocalTalkAddress = 'clt ',
  cSCSIAddress = 'cscs',
  cTokenRingAddress = 'ctok',
  cUSBAddress = 'cusb',

  pDeviceType = 'pdvt',
  pDeviceAddress = 'pdva',
  pConduit = 'pcon',
  pProtocol = 'pprt',
  pATMachine = 'patm',
  pATZone = 'patz',
  pATType = 'patt',
  pDottedDecimal = 'pipd',
  pDNS = 'pdns',
  pPort = 'ppor',
  pNetwork = 'pnet',
  pNode = 'pnod',
  pSocket = 'psoc',
  pSCSIBus = 'pscb',
  pSCSILUN = 'pslu',

  eDeviceType = 'edvt',
  eAddressSpec = 'eads',
  eConduit = 'econ',
  eProtocol = 'epro',
  eADB = 'eadb',
  eAnalogAudio = 'epau',
  eAppleTalk = 'epat',
  eAudioLineIn = 'ecai',
  eAudioLineOut = 'ecal',
  eAudioOut = 'ecao',
  eBus = 'ebus',
  eCDROM = 'ecd ',
  eCommSlot = 'eccm',
  eDigitalAudio = 'epda',
  eDisplay = 'edds',
  eDVD = 'edvd',
  eEthernet = 'ecen',
  eFireWire = 'ecfw',
  eFloppy = 'efd ',
  eHD = 'ehd ',
  eInfrared = 'ecir',
  eIP = 'epip',
  eIrDA = 'epir',
  eIRTalk = 'epit',
  eKeyboard = 'ekbd',
  eLCD = 'edlc',
  eLocalTalk = 'eclt',
  eMacIP = 'epmi',
  eMacVideo = 'epmv',
  eMicrophone = 'ecmi',
  eModemPort = 'ecmp',
  eModemPrinterPort = 'empp',
  eModem = 'edmm',
  eMonitorOut = 'ecmn',
  eMouse = 'emou',
  eNuBusCard = 'ednb',
  eNuBus = 'enub',
  ePCcard = 'ecpc',
  ePCIbus = 'ecpi',
  ePCIcard = 'edpi',
  ePDSslot = 'ecpd',
  ePDScard = 'epds',
  ePointingDevice = 'edpd',
  ePostScript = 'epps',
  ePPP = 'eppp',
  ePrinterPort = 'ecpp',
  ePrinter = 'edpr',
  eSvideo = 'epsv',
  eSCSI = 'ecsc',
  eSerial = 'epsr',
  eSpeakers = 'edsp',
  eStorageDevice = 'edst',
  eSVGA = 'epsg',
  eTokenRing = 'etok',
  eTrackball = 'etrk',
  eTrackpad = 'edtp',
  eUSB = 'ecus',
  eVideoIn = 'ecvi',
  eVideoMonitor = 'edvm',
  eVideoOut = 'ecvo'
};

enum {

  cKeystroke = 'kprs',
  pKeystrokeKey = 'kMsg',
  pModifiers = 'kMod',
  pKeyKind = 'kknd',
  eModifiers = 'eMds',
  eOptionDown = 'Kopt',
  eCommandDown = 'Kcmd',
  eControlDown = 'Kctl',
  eShiftDown = 'Ksft',
  eCapsLockDown = 'Kclk',
  eKeyKind = 'ekst',

  eEscapeKey = 0x6B733500,
  eDeleteKey = 0x6B733300,
  eTabKey = 0x6B733000,
  eReturnKey = 0x6B732400,
  eClearKey = 0x6B734700,
  eEnterKey = 0x6B734C00,
  eUpArrowKey = 0x6B737E00,
  eDownArrowKey = 0x6B737D00,
  eLeftArrowKey = 0x6B737B00,
  eRightArrowKey = 0x6B737C00,
  eHelpKey = 0x6B737200,
  eHomeKey = 0x6B737300,
  ePageUpKey = 0x6B737400,
  ePageDownKey = 0x6B737900,
  eForwardDelKey = 0x6B737500,
  eEndKey = 0x6B737700,
  eF1Key = 0x6B737A00,
  eF2Key = 0x6B737800,
  eF3Key = 0x6B736300,
  eF4Key = 0x6B737600,
  eF5Key = 0x6B736000,
  eF6Key = 0x6B736100,
  eF7Key = 0x6B736200,
  eF8Key = 0x6B736400,
  eF9Key = 0x6B736500,
  eF10Key = 0x6B736D00,
  eF11Key = 0x6B736700,
  eF12Key = 0x6B736F00,
  eF13Key = 0x6B736900,
  eF14Key = 0x6B736B00,
  eF15Key = 0x6B737100
};

enum {
  keyAELaunchedAsLogInItem = 'lgit',
  keyAELaunchedAsServiceItem = 'svit',
  keyAEQuitWithoutUI = 'noui'
};


#pragma pack(pop)
# 42 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEUserTermTypes.h" 1 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEUserTermTypes.h" 3
#pragma pack(push, 2)

enum {
  kAEUserTerminology = 'aeut',
  kAETerminologyExtension = 'aete',
  kAEScriptingSizeResource = 'scsz',
  kAEOSAXSizeResource = 'osiz'
};

enum {
  kAEUTHasReturningParam = 31,
  kAEUTOptional = 15,
  kAEUTlistOfItems = 14,
  kAEUTEnumerated = 13,
  kAEUTReadWrite = 12,
  kAEUTChangesState = 12,
  kAEUTTightBindingFunction = 12,

  kAEUTEnumsAreTypes = 11,
  kAEUTEnumListIsExclusive = 10,
  kAEUTReplyIsReference = 9,
  kAEUTDirectParamIsReference = 9,
  kAEUTParamIsReference = 9,
  kAEUTPropertyIsReference = 9,
  kAEUTNotDirectParamIsTarget = 8,
  kAEUTParamIsTarget = 8,
  kAEUTApostrophe = 3,
  kAEUTFeminine = 2,
  kAEUTMasculine = 1,
  kAEUTPlural = 0
};

struct TScriptingSizeResource {
  SInt16 scriptingSizeFlags;
  UInt32 minStackSize;
  UInt32 preferredStackSize;
  UInt32 maxStackSize;
  UInt32 minHeapSize;
  UInt32 preferredHeapSize;
  UInt32 maxHeapSize;
};
typedef struct TScriptingSizeResource TScriptingSizeResource;
enum {
  kLaunchToGetTerminology = (1 << 15),
  kDontFindAppBySignature = (1 << 14),
  kAlwaysSendSubject = (1 << 13)
};


enum {
  kReadExtensionTermsMask = (1 << 15)
};

enum {


  kOSIZDontOpenResourceFile = 15,
  kOSIZdontAcceptRemoteEvents = 14,
  kOSIZOpenWithReadPermission = 13,
  kOSIZCodeInSharedLibraries = 11
};


#pragma pack(pop)
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 1 3
# 44 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern "C" {


#pragma pack(push, 2)
# 63 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
typedef UInt32 AEBuildErrorCode;
enum {
  aeBuildSyntaxNoErr = 0,
  aeBuildSyntaxBadToken = 1,
  aeBuildSyntaxBadEOF = 2,
  aeBuildSyntaxNoEOF = 3,
  aeBuildSyntaxBadNegative = 4,
  aeBuildSyntaxMissingQuote = 5,
  aeBuildSyntaxBadHex = 6,
  aeBuildSyntaxOddHex = 7,
  aeBuildSyntaxNoCloseHex = 8,
  aeBuildSyntaxUncoercedHex = 9,
  aeBuildSyntaxNoCloseString = 10,
  aeBuildSyntaxBadDesc = 11,
  aeBuildSyntaxBadData = 12,
  aeBuildSyntaxNoCloseParen = 13,
  aeBuildSyntaxNoCloseBracket = 14,
  aeBuildSyntaxNoCloseBrace = 15,
  aeBuildSyntaxNoKey = 16,
  aeBuildSyntaxNoColon = 17,
  aeBuildSyntaxCoercedList = 18,
  aeBuildSyntaxUncoercedDoubleAt = 19
};



struct AEBuildError {
  AEBuildErrorCode fError;
  UInt32 fErrorPos;
};
typedef struct AEBuildError AEBuildError;
# 109 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEBuildDesc(
  AEDesc * dst,
  AEBuildError * error,
  const char * src,
  ...) ;
# 129 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
vAEBuildDesc(
  AEDesc * dst,
  AEBuildError * error,
  const char * src,
  va_list args) ;
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEBuildParameters(
  AppleEvent * event,
  AEBuildError * error,
  const char * format,
  ...) ;
# 170 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
vAEBuildParameters(
  AppleEvent * event,
  AEBuildError * error,
  const char * format,
  va_list args) ;
# 190 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEBuildAppleEvent(
  AEEventClass theClass,
  AEEventID theID,
  DescType addressType,
  const void * addressData,
  Size addressLength,
  SInt16 returnID,
  SInt32 transactionID,
  AppleEvent * result,
  AEBuildError * error,
  const char * paramsFmt,
  ...) ;
# 217 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
vAEBuildAppleEvent(
  AEEventClass theClass,
  AEEventID theID,
  DescType addressType,
  const void * addressData,
  Size addressLength,
  SInt16 returnID,
  SInt32 transactionID,
  AppleEvent * resultEvt,
  AEBuildError * error,
  const char * paramsFmt,
  va_list args) ;
# 252 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEPrintDescToHandle(
  const AEDesc * desc,
  Handle * result) ;
# 268 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
typedef struct OpaqueAEStreamRef* AEStreamRef;
# 284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern AEStreamRef
AEStreamOpen(void) ;
# 304 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamClose(
  AEStreamRef ref,
  AEDesc * desc) ;
# 325 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamOpenDesc(
  AEStreamRef ref,
  DescType newType) ;
# 343 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamWriteData(
  AEStreamRef ref,
  const void * data,
  Size length) ;
# 365 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamCloseDesc(AEStreamRef ref) ;
# 381 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamWriteDesc(
  AEStreamRef ref,
  DescType newType,
  const void * data,
  Size length) ;
# 401 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamWriteAEDesc(
  AEStreamRef ref,
  const AEDesc * desc) ;
# 422 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamOpenList(AEStreamRef ref) ;
# 438 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamCloseList(AEStreamRef ref) ;
# 457 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamOpenRecord(
  AEStreamRef ref,
  DescType newType) ;
# 475 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamSetRecordType(
  AEStreamRef ref,
  DescType newType) ;
# 493 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamCloseRecord(AEStreamRef ref) ;
# 512 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamWriteKeyDesc(
  AEStreamRef ref,
  AEKeyword key,
  DescType newType,
  const void * data,
  Size length) ;
# 536 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamOpenKeyDesc(
  AEStreamRef ref,
  AEKeyword key,
  DescType newType) ;
# 555 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamWriteKey(
  AEStreamRef ref,
  AEKeyword key) ;
# 577 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern AEStreamRef
AEStreamCreateEvent(
  AEEventClass clazz,
  AEEventID id,
  DescType targetType,
  const void * targetData,
  Size targetLength,
  SInt16 returnID,
  SInt32 transactionID) ;
# 607 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern AEStreamRef
AEStreamOpenEvent(AppleEvent * event) ;
# 623 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEHelpers.h" 3
extern OSStatus
AEStreamOptionalParam(
  AEStreamRef ref,
  AEKeyword key) ;



#pragma pack(pop)


}
# 50 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 1 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
extern "C" {



}
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
extern "C" {
# 83 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
enum {
  keyReplyPortAttr = 'repp'
};


enum {
  typeReplyPortAttr = keyReplyPortAttr
};
# 112 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
extern mach_port_t
AEGetRegisteredMachPort(void) ;
# 151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
extern OSStatus
AEDecodeMessage(
  mach_msg_header_t * header,
  AppleEvent * event,
  AppleEvent * reply) ;
# 179 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
extern OSStatus
AEProcessMessage(mach_msg_header_t * header) ;
# 215 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AEMach.h" 3
extern OSStatus
AESendMessage(
  const AppleEvent * event,
  AppleEvent * reply,
  AESendMode sendMode,
  long timeOutInTicks) ;





}
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/AE.framework/Headers/AE.h" 2 3
# 38 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3




# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 1 3
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern "C" {


#pragma pack(push, 2)
# 52 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
enum {

  leftCaret = 0,
  rightCaret = -1,
  kHilite = 1
};

enum {
  smLeftCaret = 0,
  smRightCaret = -1,
  smHilite = 1
};


enum {
  onlyStyleRun = 0,
  leftStyleRun = 1,
  rightStyleRun = 2,
  middleStyleRun = 3,
  smOnlyStyleRun = 0,
  smLeftStyleRun = 1,
  smRightStyleRun = 2,
  smMiddleStyleRun = 3
};


typedef short JustStyleCode;

typedef short TruncCode;

enum {
  truncEnd = 0,
  truncMiddle = 0x4000,
  smTruncEnd = 0,
  smTruncMiddle = 0x4000
};


enum {
  notTruncated = 0,
  truncated = 1,
  truncErr = -1,
  smNotTruncated = 0,
  smTruncated = 1,
  smTruncErr = -1
};

typedef SInt8 StyledLineBreakCode;
enum {
  smBreakWord = 0,
  smBreakChar = 1,
  smBreakOverflow = 2
};


enum {
  tfAntiAlias = 1 << 0,
  tfUnicode = 1 << 1
};

struct FontInfo {
  short ascent;
  short descent;
  short widMax;
  short leading;
};
typedef struct FontInfo FontInfo;

typedef short FormatOrder[1];
typedef FormatOrder * FormatOrderPtr;
# 138 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern OSStatus
StandardGlyphs(
  void * dataStream,
  ByteCount size) ;




typedef Boolean ( * StyleRunDirectionProcPtr)(short styleRunIndex, void *dirParam);
typedef StyleRunDirectionProcPtr StyleRunDirectionUPP;
# 156 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern StyleRunDirectionUPP
NewStyleRunDirectionUPP(StyleRunDirectionProcPtr userRoutine) ;
# 167 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
DisposeStyleRunDirectionUPP(StyleRunDirectionUPP userUPP) ;
# 178 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern Boolean
InvokeStyleRunDirectionUPP(
  short styleRunIndex,
  void * dirParam,
  StyleRunDirectionUPP userUPP) ;



    inline StyleRunDirectionUPP NewStyleRunDirectionUPP(StyleRunDirectionProcPtr userRoutine) { return userRoutine; }
    inline void DisposeStyleRunDirectionUPP(StyleRunDirectionUPP) { }
    inline Boolean InvokeStyleRunDirectionUPP(short styleRunIndex, void * dirParam, StyleRunDirectionUPP userUPP) { return (*userUPP)(styleRunIndex, dirParam); }
# 225 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
PixelToChar(
  Ptr textBuf,
  long textLength,
  Fixed slop,
  Fixed pixelWidth,
  Boolean * leadingEdge,
  Fixed * widthRemaining,
  JustStyleCode styleRunPosition,
  Point numer,
  Point denom) ;
# 246 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
CharToPixel(
  Ptr textBuf,
  long textLength,
  Fixed slop,
  long offset,
  short direction,
  JustStyleCode styleRunPosition,
  Point numer,
  Point denom) ;
# 266 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
DrawJustified(
  Ptr textPtr,
  long textLength,
  Fixed slop,
  JustStyleCode styleRunPosition,
  Point numer,
  Point denom) ;
# 284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
MeasureJustified(
  Ptr textPtr,
  long textLength,
  Fixed slop,
  Ptr charLocs,
  JustStyleCode styleRunPosition,
  Point numer,
  Point denom) ;
# 303 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern Fixed
PortionLine(
  Ptr textPtr,
  long textLen,
  JustStyleCode styleRunPosition,
  Point numer,
  Point denom) ;
# 320 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
HiliteText(
  Ptr textPtr,
  short textLength,
  short firstOffset,
  short secondOffset,
  OffsetTable offsets) ;
# 370 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern long
VisibleLength(
  Ptr textPtr,
  long textLength) ;
# 384 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
GetFormatOrder(
  FormatOrderPtr ordering,
  short firstFormat,
  short lastFormat,
  Boolean lineRight,
  StyleRunDirectionUPP rlDirProc,
  Ptr dirParam) ;
# 402 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
TextFont(short font) ;
# 414 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
TextFace(StyleParameter face) ;
# 426 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
TextMode(short mode) ;
# 438 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
TextSize(short size) ;
# 450 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
SpaceExtra(Fixed extra) ;
# 462 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
DrawChar(CharParameter ch) ;
# 474 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
DrawString(ConstStr255Param s) ;
# 489 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
DrawText(
  const void * textBuf,
  short firstByte,
  short byteCount) ;
# 504 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
CharWidth(CharParameter ch) ;
# 516 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
StringWidth(ConstStr255Param s) ;
# 528 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
TextWidth(
  const void * textBuf,
  short firstByte,
  short byteCount) ;
# 543 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
MeasureText(
  short count,
  const void * textAddr,
  void * charLocs) ;
# 558 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
GetFontInfo(FontInfo * info) ;
# 570 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
CharExtra(Fixed extra) ;
# 582 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
StdText(
  short count,
  const void * textAddr,
  Point numer,
  Point denom) ;
# 598 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
StdTxMeas(
  short byteCount,
  const void * textAddr,
  Point * numer,
  Point * denom,
  FontInfo * info) ;
# 615 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern StyledLineBreakCode
StyledLineBreak(
  Ptr textPtr,
  SInt32 textLen,
  SInt32 textStart,
  SInt32 textEnd,
  SInt32 flags,
  Fixed * textWidth,
  SInt32 * textOffset) ;
# 634 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
TruncString(
  short width,
  Str255 theString,
  TruncCode truncWhere) ;
# 649 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern short
TruncText(
  short width,
  Ptr textPtr,
  short * length,
  TruncCode truncWhere) ;
# 689 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern void
stdtext(
  short count,
  const void * textAddr,
  const Point * numer,
  const Point * denom) ;
# 711 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
extern UInt32
SwapQDTextFlags(UInt32 newFlags) ;
# 731 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawText.h" 3
#pragma pack(pop)


}
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 2 3
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern "C" {


#pragma pack(push, 2)

enum {
  invalColReq = -1
};

enum {

  srcCopy = 0,
  srcOr = 1,
  srcXor = 2,
  srcBic = 3,
  notSrcCopy = 4,
  notSrcOr = 5,
  notSrcXor = 6,
  notSrcBic = 7,
  patCopy = 8,
  patOr = 9,
  patXor = 10,
  patBic = 11,
  notPatCopy = 12,
  notPatOr = 13,
  notPatXor = 14,
  notPatBic = 15,
  grayishTextOr = 49,
  hilitetransfermode = 50,
  hilite = 50,
  blend = 32,
  addPin = 33,
  addOver = 34,
  subPin = 35,
  addMax = 37,
  adMax = 37,
  subOver = 38,
  adMin = 39,
  ditherCopy = 64,
  transparent = 36
};

enum {
  italicBit = 1,
  ulineBit = 2,
  outlineBit = 3,
  shadowBit = 4,
  condenseBit = 5,
  extendBit = 6
};

enum {

  normalBit = 0,
  inverseBit = 1,
  redBit = 4,
  greenBit = 3,
  blueBit = 2,
  cyanBit = 8,
  magentaBit = 7,
  yellowBit = 6,
  blackBit = 5
};

enum {
  blackColor = 33,
  whiteColor = 30,
  redColor = 205,
  greenColor = 341,
  blueColor = 409,
  cyanColor = 273,
  magentaColor = 137,
  yellowColor = 69
};

enum {
  picLParen = 0,
  picRParen = 1
};


enum {
  clutType = 0,
  fixedType = 1,
  directType = 2
};


enum {
  gdDevType = 0,
  interlacedDevice = 2,
  hwMirroredDevice = 4,
  roundedDevice = 5,
  hasAuxMenuBar = 6,
  burstDevice = 7,
  ext32Device = 8,
  ramInit = 10,
  mainScreen = 11,
  allInit = 12,
  screenDevice = 13,
  noDriver = 14,
  screenActive = 15
};

enum {
  hiliteBit = 7,
  pHiliteBit = 0
};


enum {
  defQDColors = 127,
  RGBDirect = 16,
  baseAddr32 = 4
};

enum {
  sysPatListID = 0,
  iBeamCursor = 1,
  crossCursor = 2,
  plusCursor = 3,
  watchCursor = 4
};

enum {
  kQDGrafVerbFrame = 0,
  kQDGrafVerbPaint = 1,
  kQDGrafVerbErase = 2,
  kQDGrafVerbInvert = 3,
  kQDGrafVerbFill = 4
};
# 188 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
typedef SInt8 GrafVerb;
enum {
  chunky = 0,
  chunkyPlanar = 1,
  planar = 2
};

typedef SInt8 PixelType;
typedef short Bits16[16];
# 208 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
struct Pattern {
  UInt8 pat[8];
};
typedef struct Pattern Pattern;





typedef const Pattern * ConstPatternParam;
typedef Pattern * PatPtr;
typedef PatPtr * PatHandle;
typedef SignedByte QDByte;
typedef QDByte * QDPtr;
typedef QDPtr * QDHandle;
typedef short QDErr;
enum {
  singleDevicesBit = 0,
  dontMatchSeedsBit = 1,
  allDevicesBit = 2
};

enum {
  singleDevices = 1 << singleDevicesBit,
  dontMatchSeeds = 1 << dontMatchSeedsBit,
  allDevices = 1 << allDevicesBit
};

typedef unsigned long DeviceLoopFlags;



typedef SInt32 PrinterStatusOpcode;
enum {
  kPrinterFontStatus = 0,
  kPrinterScalingStatus = 1
};

struct PrinterFontStatus {
  SInt32 oResult;
  SInt16 iFondID;
  Style iStyle;
};
typedef struct PrinterFontStatus PrinterFontStatus;
struct PrinterScalingStatus {
  Point oScalingFactors;
};
typedef struct PrinterScalingStatus PrinterScalingStatus;
struct BitMap {
  Ptr baseAddr;
  short rowBytes;
  Rect bounds;
};
typedef struct BitMap BitMap;
typedef BitMap * BitMapPtr;
typedef BitMapPtr * BitMapHandle;
struct Cursor {
  Bits16 data;
  Bits16 mask;
  Point hotSpot;
};
typedef struct Cursor Cursor;
typedef Cursor * CursPtr;
typedef CursPtr * CursHandle;
struct PenState {
  Point pnLoc;
  Point pnSize;
  short pnMode;
  Pattern pnPat;
};
typedef struct PenState PenState;
# 293 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
typedef struct OpaqueRgnHandle* RgnHandle;


struct Picture {
  short picSize;
  Rect picFrame;
};
typedef struct Picture Picture;
typedef Picture * PicPtr;
typedef PicPtr * PicHandle;
struct MacPolygon {
  short polySize;
  Rect polyBBox;
  Point polyPoints[1];
};
typedef struct MacPolygon MacPolygon;




typedef MacPolygon Polygon;
typedef MacPolygon * PolyPtr;
typedef PolyPtr * PolyHandle;
typedef void ( * QDTextProcPtr)(short byteCount, const void *textBuf, Point numer, Point denom);
typedef void ( * QDLineProcPtr)(Point newPt);
typedef void ( * QDRectProcPtr)(GrafVerb verb, const Rect *r);
typedef void ( * QDRRectProcPtr)(GrafVerb verb, const Rect *r, short ovalWidth, short ovalHeight);
typedef void ( * QDOvalProcPtr)(GrafVerb verb, const Rect *r);
typedef void ( * QDArcProcPtr)(GrafVerb verb, const Rect *r, short startAngle, short arcAngle);
typedef void ( * QDPolyProcPtr)(GrafVerb verb, PolyHandle poly);
typedef void ( * QDRgnProcPtr)(GrafVerb verb, RgnHandle rgn);
typedef void ( * QDBitsProcPtr)(const BitMap *srcBits, const Rect *srcRect, const Rect *dstRect, short mode, RgnHandle maskRgn);
typedef void ( * QDCommentProcPtr)(short kind, short dataSize, Handle dataHandle);
typedef short ( * QDTxMeasProcPtr)(short byteCount, const void *textAddr, Point *numer, Point *denom, FontInfo *info);
typedef void ( * QDGetPicProcPtr)(void *dataPtr, short byteCount);
typedef void ( * QDPutPicProcPtr)(const void *dataPtr, short byteCount);
typedef void ( * QDOpcodeProcPtr)(const Rect *fromRect, const Rect *toRect, UInt16 opcode, SInt16 version);

typedef OSStatus ( * QDStdGlyphsProcPtr)(void *dataStream, ByteCount size);
typedef void ( * QDJShieldCursorProcPtr)(short left, short top, short right, short bottom);
typedef QDTextProcPtr QDTextUPP;
typedef QDLineProcPtr QDLineUPP;
typedef QDRectProcPtr QDRectUPP;
typedef QDRRectProcPtr QDRRectUPP;
typedef QDOvalProcPtr QDOvalUPP;
typedef QDArcProcPtr QDArcUPP;
typedef QDPolyProcPtr QDPolyUPP;
typedef QDRgnProcPtr QDRgnUPP;
typedef QDBitsProcPtr QDBitsUPP;
typedef QDCommentProcPtr QDCommentUPP;
typedef QDTxMeasProcPtr QDTxMeasUPP;
typedef QDGetPicProcPtr QDGetPicUPP;
typedef QDPutPicProcPtr QDPutPicUPP;
typedef QDOpcodeProcPtr QDOpcodeUPP;
typedef QDStdGlyphsProcPtr QDStdGlyphsUPP;
typedef QDJShieldCursorProcPtr QDJShieldCursorUPP;
struct QDProcs {
  QDTextUPP textProc;
  QDLineUPP lineProc;
  QDRectUPP rectProc;
  QDRRectUPP rRectProc;
  QDOvalUPP ovalProc;
  QDArcUPP arcProc;
  QDPolyUPP polyProc;
  QDRgnUPP rgnProc;
  QDBitsUPP bitsProc;
  QDCommentUPP commentProc;
  QDTxMeasUPP txMeasProc;
  QDGetPicUPP getPicProc;
  QDPutPicUPP putPicProc;
};
typedef struct QDProcs QDProcs;
typedef QDProcs * QDProcsPtr;
# 374 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDTextUPP
NewQDTextUPP(QDTextProcPtr userRoutine) ;
# 385 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDLineUPP
NewQDLineUPP(QDLineProcPtr userRoutine) ;
# 396 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDRectUPP
NewQDRectUPP(QDRectProcPtr userRoutine) ;
# 407 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDRRectUPP
NewQDRRectUPP(QDRRectProcPtr userRoutine) ;
# 418 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDOvalUPP
NewQDOvalUPP(QDOvalProcPtr userRoutine) ;
# 429 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDArcUPP
NewQDArcUPP(QDArcProcPtr userRoutine) ;
# 440 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDPolyUPP
NewQDPolyUPP(QDPolyProcPtr userRoutine) ;
# 451 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDRgnUPP
NewQDRgnUPP(QDRgnProcPtr userRoutine) ;
# 462 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDBitsUPP
NewQDBitsUPP(QDBitsProcPtr userRoutine) ;
# 473 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDCommentUPP
NewQDCommentUPP(QDCommentProcPtr userRoutine) ;
# 484 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDTxMeasUPP
NewQDTxMeasUPP(QDTxMeasProcPtr userRoutine) ;
# 495 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDGetPicUPP
NewQDGetPicUPP(QDGetPicProcPtr userRoutine) ;
# 506 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDPutPicUPP
NewQDPutPicUPP(QDPutPicProcPtr userRoutine) ;
# 517 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDOpcodeUPP
NewQDOpcodeUPP(QDOpcodeProcPtr userRoutine) ;
# 528 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDStdGlyphsUPP
NewQDStdGlyphsUPP(QDStdGlyphsProcPtr userRoutine) ;
# 539 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern QDJShieldCursorUPP
NewQDJShieldCursorUPP(QDJShieldCursorProcPtr userRoutine) ;
# 550 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDTextUPP(QDTextUPP userUPP) ;
# 561 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDLineUPP(QDLineUPP userUPP) ;
# 572 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDRectUPP(QDRectUPP userUPP) ;
# 583 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDRRectUPP(QDRRectUPP userUPP) ;
# 594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDOvalUPP(QDOvalUPP userUPP) ;
# 605 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDArcUPP(QDArcUPP userUPP) ;
# 616 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDPolyUPP(QDPolyUPP userUPP) ;
# 627 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDRgnUPP(QDRgnUPP userUPP) ;
# 638 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDBitsUPP(QDBitsUPP userUPP) ;
# 649 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDCommentUPP(QDCommentUPP userUPP) ;
# 660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDTxMeasUPP(QDTxMeasUPP userUPP) ;
# 671 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDGetPicUPP(QDGetPicUPP userUPP) ;
# 682 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDPutPicUPP(QDPutPicUPP userUPP) ;
# 693 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDOpcodeUPP(QDOpcodeUPP userUPP) ;
# 704 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDStdGlyphsUPP(QDStdGlyphsUPP userUPP) ;
# 715 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeQDJShieldCursorUPP(QDJShieldCursorUPP userUPP) ;
# 726 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDTextUPP(
  short byteCount,
  const void * textBuf,
  Point numer,
  Point denom,
  QDTextUPP userUPP) ;
# 742 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDLineUPP(
  Point newPt,
  QDLineUPP userUPP) ;
# 755 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDRectUPP(
  GrafVerb verb,
  const Rect * r,
  QDRectUPP userUPP) ;
# 769 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDRRectUPP(
  GrafVerb verb,
  const Rect * r,
  short ovalWidth,
  short ovalHeight,
  QDRRectUPP userUPP) ;
# 785 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDOvalUPP(
  GrafVerb verb,
  const Rect * r,
  QDOvalUPP userUPP) ;
# 799 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDArcUPP(
  GrafVerb verb,
  const Rect * r,
  short startAngle,
  short arcAngle,
  QDArcUPP userUPP) ;
# 815 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDPolyUPP(
  GrafVerb verb,
  PolyHandle poly,
  QDPolyUPP userUPP) ;
# 829 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDRgnUPP(
  GrafVerb verb,
  RgnHandle rgn,
  QDRgnUPP userUPP) ;
# 843 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDBitsUPP(
  const BitMap * srcBits,
  const Rect * srcRect,
  const Rect * dstRect,
  short mode,
  RgnHandle maskRgn,
  QDBitsUPP userUPP) ;
# 860 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDCommentUPP(
  short kind,
  short dataSize,
  Handle dataHandle,
  QDCommentUPP userUPP) ;
# 875 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern short
InvokeQDTxMeasUPP(
  short byteCount,
  const void * textAddr,
  Point * numer,
  Point * denom,
  FontInfo * info,
  QDTxMeasUPP userUPP) ;
# 892 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDGetPicUPP(
  void * dataPtr,
  short byteCount,
  QDGetPicUPP userUPP) ;
# 906 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDPutPicUPP(
  const void * dataPtr,
  short byteCount,
  QDPutPicUPP userUPP) ;
# 920 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDOpcodeUPP(
  const Rect * fromRect,
  const Rect * toRect,
  UInt16 opcode,
  SInt16 version,
  QDOpcodeUPP userUPP) ;
# 936 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern OSStatus
InvokeQDStdGlyphsUPP(
  void * dataStream,
  ByteCount size,
  QDStdGlyphsUPP userUPP) ;
# 950 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeQDJShieldCursorUPP(
  short left,
  short top,
  short right,
  short bottom,
  QDJShieldCursorUPP userUPP) ;



    inline QDTextUPP NewQDTextUPP(QDTextProcPtr userRoutine) { return userRoutine; }
    inline QDLineUPP NewQDLineUPP(QDLineProcPtr userRoutine) { return userRoutine; }
    inline QDRectUPP NewQDRectUPP(QDRectProcPtr userRoutine) { return userRoutine; }
    inline QDRRectUPP NewQDRRectUPP(QDRRectProcPtr userRoutine) { return userRoutine; }
    inline QDOvalUPP NewQDOvalUPP(QDOvalProcPtr userRoutine) { return userRoutine; }
    inline QDArcUPP NewQDArcUPP(QDArcProcPtr userRoutine) { return userRoutine; }
    inline QDPolyUPP NewQDPolyUPP(QDPolyProcPtr userRoutine) { return userRoutine; }
    inline QDRgnUPP NewQDRgnUPP(QDRgnProcPtr userRoutine) { return userRoutine; }
    inline QDBitsUPP NewQDBitsUPP(QDBitsProcPtr userRoutine) { return userRoutine; }
    inline QDCommentUPP NewQDCommentUPP(QDCommentProcPtr userRoutine) { return userRoutine; }
    inline QDTxMeasUPP NewQDTxMeasUPP(QDTxMeasProcPtr userRoutine) { return userRoutine; }
    inline QDGetPicUPP NewQDGetPicUPP(QDGetPicProcPtr userRoutine) { return userRoutine; }
    inline QDPutPicUPP NewQDPutPicUPP(QDPutPicProcPtr userRoutine) { return userRoutine; }
    inline QDOpcodeUPP NewQDOpcodeUPP(QDOpcodeProcPtr userRoutine) { return userRoutine; }
    inline QDStdGlyphsUPP NewQDStdGlyphsUPP(QDStdGlyphsProcPtr userRoutine) { return userRoutine; }
    inline QDJShieldCursorUPP NewQDJShieldCursorUPP(QDJShieldCursorProcPtr userRoutine) { return userRoutine; }
    inline void DisposeQDTextUPP(QDTextUPP) { }
    inline void DisposeQDLineUPP(QDLineUPP) { }
    inline void DisposeQDRectUPP(QDRectUPP) { }
    inline void DisposeQDRRectUPP(QDRRectUPP) { }
    inline void DisposeQDOvalUPP(QDOvalUPP) { }
    inline void DisposeQDArcUPP(QDArcUPP) { }
    inline void DisposeQDPolyUPP(QDPolyUPP) { }
    inline void DisposeQDRgnUPP(QDRgnUPP) { }
    inline void DisposeQDBitsUPP(QDBitsUPP) { }
    inline void DisposeQDCommentUPP(QDCommentUPP) { }
    inline void DisposeQDTxMeasUPP(QDTxMeasUPP) { }
    inline void DisposeQDGetPicUPP(QDGetPicUPP) { }
    inline void DisposeQDPutPicUPP(QDPutPicUPP) { }
    inline void DisposeQDOpcodeUPP(QDOpcodeUPP) { }
    inline void DisposeQDStdGlyphsUPP(QDStdGlyphsUPP) { }
    inline void DisposeQDJShieldCursorUPP(QDJShieldCursorUPP) { }
    inline void InvokeQDTextUPP(short byteCount, const void * textBuf, Point numer, Point denom, QDTextUPP userUPP) { (*userUPP)(byteCount, textBuf, numer, denom); }
    inline void InvokeQDLineUPP(Point newPt, QDLineUPP userUPP) { (*userUPP)(newPt); }
    inline void InvokeQDRectUPP(GrafVerb verb, const Rect * r, QDRectUPP userUPP) { (*userUPP)(verb, r); }
    inline void InvokeQDRRectUPP(GrafVerb verb, const Rect * r, short ovalWidth, short ovalHeight, QDRRectUPP userUPP) { (*userUPP)(verb, r, ovalWidth, ovalHeight); }
    inline void InvokeQDOvalUPP(GrafVerb verb, const Rect * r, QDOvalUPP userUPP) { (*userUPP)(verb, r); }
    inline void InvokeQDArcUPP(GrafVerb verb, const Rect * r, short startAngle, short arcAngle, QDArcUPP userUPP) { (*userUPP)(verb, r, startAngle, arcAngle); }
    inline void InvokeQDPolyUPP(GrafVerb verb, PolyHandle poly, QDPolyUPP userUPP) { (*userUPP)(verb, poly); }
    inline void InvokeQDRgnUPP(GrafVerb verb, RgnHandle rgn, QDRgnUPP userUPP) { (*userUPP)(verb, rgn); }
    inline void InvokeQDBitsUPP(const BitMap * srcBits, const Rect * srcRect, const Rect * dstRect, short mode, RgnHandle maskRgn, QDBitsUPP userUPP) { (*userUPP)(srcBits, srcRect, dstRect, mode, maskRgn); }
    inline void InvokeQDCommentUPP(short kind, short dataSize, Handle dataHandle, QDCommentUPP userUPP) { (*userUPP)(kind, dataSize, dataHandle); }
    inline short InvokeQDTxMeasUPP(short byteCount, const void * textAddr, Point * numer, Point * denom, FontInfo * info, QDTxMeasUPP userUPP) { return (*userUPP)(byteCount, textAddr, numer, denom, info); }
    inline void InvokeQDGetPicUPP(void * dataPtr, short byteCount, QDGetPicUPP userUPP) { (*userUPP)(dataPtr, byteCount); }
    inline void InvokeQDPutPicUPP(const void * dataPtr, short byteCount, QDPutPicUPP userUPP) { (*userUPP)(dataPtr, byteCount); }
    inline void InvokeQDOpcodeUPP(const Rect * fromRect, const Rect * toRect, UInt16 opcode, SInt16 version, QDOpcodeUPP userUPP) { (*userUPP)(fromRect, toRect, opcode, version); }
    inline OSStatus InvokeQDStdGlyphsUPP(void * dataStream, ByteCount size, QDStdGlyphsUPP userUPP) { return (*userUPP)(dataStream, size); }
    inline void InvokeQDJShieldCursorUPP(short left, short top, short right, short bottom, QDJShieldCursorUPP userUPP) { (*userUPP)(left, top, right, bottom); }
# 1100 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
typedef struct OpaqueWindowPtr* WindowPtr;
typedef struct OpaqueDialogPtr* DialogPtr;
typedef struct OpaqueGrafPtr* GrafPtr;


typedef WindowPtr WindowRef;

typedef UInt16 DragConstraint;
enum {
  kNoConstraint = 0,
  kVerticalConstraint = 1,
  kHorizontalConstraint = 2
};


typedef void ( * DragGrayRgnProcPtr)(void);





struct RGBColor {
  unsigned short red;
  unsigned short green;
  unsigned short blue;
};
typedef struct RGBColor RGBColor;
typedef RGBColor * RGBColorPtr;
typedef RGBColorPtr * RGBColorHdl;
typedef Boolean ( * ColorSearchProcPtr)(RGBColor *rgb, long *position);
typedef Boolean ( * ColorComplementProcPtr)(RGBColor * rgb);
typedef DragGrayRgnProcPtr DragGrayRgnUPP;
typedef ColorSearchProcPtr ColorSearchUPP;
typedef ColorComplementProcPtr ColorComplementUPP;
# 1142 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern DragGrayRgnUPP
NewDragGrayRgnUPP(DragGrayRgnProcPtr userRoutine) ;
# 1153 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern ColorSearchUPP
NewColorSearchUPP(ColorSearchProcPtr userRoutine) ;
# 1164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern ColorComplementUPP
NewColorComplementUPP(ColorComplementProcPtr userRoutine) ;
# 1175 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeDragGrayRgnUPP(DragGrayRgnUPP userUPP) ;
# 1186 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeColorSearchUPP(ColorSearchUPP userUPP) ;
# 1197 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeColorComplementUPP(ColorComplementUPP userUPP) ;
# 1208 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeDragGrayRgnUPP(DragGrayRgnUPP userUPP) ;
# 1219 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern Boolean
InvokeColorSearchUPP(
  RGBColor * rgb,
  long * position,
  ColorSearchUPP userUPP) ;
# 1233 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern Boolean
InvokeColorComplementUPP(
  RGBColor * rgb,
  ColorComplementUPP userUPP) ;



    inline DragGrayRgnUPP NewDragGrayRgnUPP(DragGrayRgnProcPtr userRoutine) { return userRoutine; }
    inline ColorSearchUPP NewColorSearchUPP(ColorSearchProcPtr userRoutine) { return userRoutine; }
    inline ColorComplementUPP NewColorComplementUPP(ColorComplementProcPtr userRoutine) { return userRoutine; }
    inline void DisposeDragGrayRgnUPP(DragGrayRgnUPP) { }
    inline void DisposeColorSearchUPP(ColorSearchUPP) { }
    inline void DisposeColorComplementUPP(ColorComplementUPP) { }
    inline void InvokeDragGrayRgnUPP(DragGrayRgnUPP userUPP) { (*userUPP)(); }
    inline Boolean InvokeColorSearchUPP(RGBColor * rgb, long * position, ColorSearchUPP userUPP) { return (*userUPP)(rgb, position); }
    inline Boolean InvokeColorComplementUPP(RGBColor * rgb, ColorComplementUPP userUPP) { return (*userUPP)(rgb); }
# 1262 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
struct ColorSpec {
  short value;
  RGBColor rgb;
};
typedef struct ColorSpec ColorSpec;
typedef ColorSpec * ColorSpecPtr;
typedef ColorSpec CSpecArray[1];
struct ColorTable {
  SInt32 ctSeed;
  short ctFlags;
  short ctSize;
  CSpecArray ctTable;
};
typedef struct ColorTable ColorTable;
typedef ColorTable * CTabPtr;
typedef CTabPtr * CTabHandle;
struct xColorSpec {
  short value;
  RGBColor rgb;
  short xalpha;
};
typedef struct xColorSpec xColorSpec;
typedef xColorSpec * xColorSpecPtr;
typedef xColorSpec xCSpecArray[1];
struct MatchRec {
  unsigned short red;
  unsigned short green;
  unsigned short blue;
  long matchData;
};
typedef struct MatchRec MatchRec;
# 1310 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
enum {

  k1MonochromePixelFormat = 0x00000001,
  k2IndexedPixelFormat = 0x00000002,
  k4IndexedPixelFormat = 0x00000004,
  k8IndexedPixelFormat = 0x00000008,
  k16BE555PixelFormat = 0x00000010,
  k24RGBPixelFormat = 0x00000018,
  k32ARGBPixelFormat = 0x00000020,

  k1IndexedGrayPixelFormat = 0x00000021,
  k2IndexedGrayPixelFormat = 0x00000022,
  k4IndexedGrayPixelFormat = 0x00000024,
  k8IndexedGrayPixelFormat = 0x00000028,
  k16LE555PixelFormat = 'L555',
  k16LE5551PixelFormat = '5551',
  k16BE565PixelFormat = 'B565',
  k16LE565PixelFormat = 'L565',
  k24BGRPixelFormat = '24BG',
  k32BGRAPixelFormat = 'BGRA',
  k32ABGRPixelFormat = 'ABGR',
  k32RGBAPixelFormat = 'RGBA',
  kYUVSPixelFormat = 'yuvs',
  kYUVUPixelFormat = 'yuvu',
  kYVU9PixelFormat = 'YVU9',
  kYUV411PixelFormat = 'Y411',
  kYVYU422PixelFormat = 'YVYU',
  kUYVY422PixelFormat = 'UYVY',
  kYUV211PixelFormat = 'Y211',
  k2vuyPixelFormat = '2vuy'
};


struct PixMap {
  Ptr baseAddr;
  short rowBytes;
  Rect bounds;
  short pmVersion;
  short packType;
  SInt32 packSize;
  Fixed hRes;
  Fixed vRes;
  short pixelType;
  short pixelSize;
  short cmpCount;
  short cmpSize;
  OSType pixelFormat;
  CTabHandle pmTable;
  void * pmExt;
};
typedef struct PixMap PixMap;
typedef PixMap * PixMapPtr;
typedef PixMapPtr * PixMapHandle;
struct PixPat {
  short patType;
  PixMapHandle patMap;
  Handle patData;
  Handle patXData;
  short patXValid;
  Handle patXMap;
  Pattern pat1Data;
};
typedef struct PixPat PixPat;
typedef PixPat * PixPatPtr;
typedef PixPatPtr * PixPatHandle;
struct CCrsr {
  short crsrType;
  PixMapHandle crsrMap;
  Handle crsrData;
  Handle crsrXData;
  short crsrXValid;
  Handle crsrXHandle;
  Bits16 crsr1Data;
  Bits16 crsrMask;
  Point crsrHotSpot;
  SInt32 crsrXTable;
  SInt32 crsrID;
};
typedef struct CCrsr CCrsr;
typedef CCrsr * CCrsrPtr;
typedef CCrsrPtr * CCrsrHandle;
struct GammaTbl {
  short gVersion;
  short gType;
  short gFormulaSize;
  short gChanCnt;
  short gDataCnt;
  short gDataWidth;
  short gFormulaData[1];
};
typedef struct GammaTbl GammaTbl;
typedef GammaTbl * GammaTblPtr;
typedef GammaTblPtr * GammaTblHandle;
struct ITab {
  SInt32 iTabSeed;
  short iTabRes;
  Byte iTTable[1];
};
typedef struct ITab ITab;
typedef ITab * ITabPtr;
typedef ITabPtr * ITabHandle;
struct SProcRec {
  Handle nxtSrch;
  ColorSearchUPP srchProc;
};
typedef struct SProcRec SProcRec;
typedef SProcRec * SProcPtr;
typedef SProcPtr * SProcHndl;
struct CProcRec {
  Handle nxtComp;
  ColorComplementUPP compProc;
};
typedef struct CProcRec CProcRec;
typedef CProcRec * CProcPtr;
typedef CProcPtr * CProcHndl;


typedef struct GDevice GDevice;
typedef GDevice * GDPtr;
typedef GDPtr * GDHandle;
struct GDevice {
  short gdRefNum;
  short gdID;
  short gdType;
  ITabHandle gdITable;
  short gdResPref;
  SProcHndl gdSearchProc;
  CProcHndl gdCompProc;
  short gdFlags;
  PixMapHandle gdPMap;
  SInt32 gdRefCon;
  GDHandle gdNextGD;
  Rect gdRect;
  SInt32 gdMode;
  short gdCCBytes;
  short gdCCDepth;
  Handle gdCCXData;
  Handle gdCCXMask;
  Handle gdExt;
};

struct GrafVars {
  RGBColor rgbOpColor;
  RGBColor rgbHiliteColor;
  Handle pmFgColor;
  short pmFgIndex;
  Handle pmBkColor;
  short pmBkIndex;
  short pmFlags;
};
typedef struct GrafVars GrafVars;
typedef GrafVars * GVarPtr;
typedef GVarPtr * GVarHandle;





typedef GrafPtr CGrafPtr;


typedef OSStatus ( * QDPrinterStatusProcPtr)(PrinterStatusOpcode opcode, CGrafPtr currentPort, void *printerStatus);
typedef QDPrinterStatusProcPtr QDPrinterStatusUPP;

struct CQDProcs {
  QDTextUPP textProc;
  QDLineUPP lineProc;
  QDRectUPP rectProc;
  QDRRectUPP rRectProc;
  QDOvalUPP ovalProc;
  QDArcUPP arcProc;
  QDPolyUPP polyProc;
  QDRgnUPP rgnProc;
  QDBitsUPP bitsProc;
  QDCommentUPP commentProc;
  QDTxMeasUPP txMeasProc;
  QDGetPicUPP getPicProc;
  QDPutPicUPP putPicProc;
  QDOpcodeUPP opcodeProc;
  UniversalProcPtr newProc1;
  QDStdGlyphsUPP glyphsProc;
  QDPrinterStatusUPP printerStatusProc;
  UniversalProcPtr newProc4;
  UniversalProcPtr newProc5;
  UniversalProcPtr newProc6;
};
typedef struct CQDProcs CQDProcs;
typedef CQDProcs * CQDProcsPtr;
# 1537 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
typedef WindowPtr CWindowPtr;




struct ReqListRec {
  short reqLSize;
  short reqLData[1];
};
typedef struct ReqListRec ReqListRec;
struct OpenCPicParams {
  Rect srcRect;
  Fixed hRes;
  Fixed vRes;
  short version;
  short reserved1;
  SInt32 reserved2;
};
typedef struct OpenCPicParams OpenCPicParams;
typedef void ( * DeviceLoopDrawingProcPtr)(short depth, short deviceFlags, GDHandle targetDevice, SRefCon userData);
typedef DeviceLoopDrawingProcPtr DeviceLoopDrawingUPP;
# 1575 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern DeviceLoopDrawingUPP
NewDeviceLoopDrawingUPP(DeviceLoopDrawingProcPtr userRoutine) ;
# 1595 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
DisposeDeviceLoopDrawingUPP(DeviceLoopDrawingUPP userUPP) ;
# 1615 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
extern void
InvokeDeviceLoopDrawingUPP(
  short depth,
  short deviceFlags,
  GDHandle targetDevice,
  SRefCon userData,
  DeviceLoopDrawingUPP userUPP) ;



    inline DeviceLoopDrawingUPP NewDeviceLoopDrawingUPP(DeviceLoopDrawingProcPtr userRoutine) { return userRoutine; }
    inline void DisposeDeviceLoopDrawingUPP(DeviceLoopDrawingUPP) { }
    inline void InvokeDeviceLoopDrawingUPP(short depth, short deviceFlags, GDHandle targetDevice, SRefCon userData, DeviceLoopDrawingUPP userUPP) { (*userUPP)(depth, deviceFlags, targetDevice, userData); }
# 1667 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawTypes.h" 3
#pragma pack(pop)


}
# 43 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 1 3
# 48 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern "C" {


#pragma pack(push, 2)
# 70 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
enum {
  kQDRegionToRectsMsgInit = 1,
  kQDRegionToRectsMsgParse = 2,
  kQDRegionToRectsMsgTerminate = 3
};

enum {
  kQDParseRegionFromTop = (1 << 0),
  kQDParseRegionFromBottom = (1 << 1),
  kQDParseRegionFromLeft = (1 << 2),
  kQDParseRegionFromRight = (1 << 3),
  kQDParseRegionFromTopLeft = kQDParseRegionFromTop | kQDParseRegionFromLeft,
  kQDParseRegionFromBottomRight = kQDParseRegionFromBottom | kQDParseRegionFromRight
};

typedef SInt32 QDRegionParseDirection;
typedef OSStatus ( * RegionToRectsProcPtr)(UInt16 message, RgnHandle rgn, const Rect *rect, void *refCon);
typedef RegionToRectsProcPtr RegionToRectsUPP;
# 96 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RegionToRectsUPP
NewRegionToRectsUPP(RegionToRectsProcPtr userRoutine) ;
# 107 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposeRegionToRectsUPP(RegionToRectsUPP userUPP) ;
# 118 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
InvokeRegionToRectsUPP(
  UInt16 message,
  RgnHandle rgn,
  const Rect * rect,
  void * refCon,
  RegionToRectsUPP userUPP) ;



    inline RegionToRectsUPP NewRegionToRectsUPP(RegionToRectsProcPtr userRoutine) { return userRoutine; }
    inline void DisposeRegionToRectsUPP(RegionToRectsUPP) { }
    inline OSStatus InvokeRegionToRectsUPP(UInt16 message, RgnHandle rgn, const Rect * rect, void * refCon, RegionToRectsUPP userUPP) { return (*userUPP)(message, rgn, rect, refCon); }
# 149 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDRegionToRects(
  RgnHandle rgn,
  QDRegionParseDirection dir,
  RegionToRectsUPP proc,
  void * userData) ;
# 170 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
LockPortBits(GrafPtr port) ;
# 185 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
UnlockPortBits(GrafPtr port) ;
# 291 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPort(GrafPtr port) ;
# 306 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetPort(GrafPtr * port) ;
# 345 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
QDSwapPort(
  CGrafPtr inNewPort,
  CGrafPtr * outOldPort) ;
# 362 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GrafDevice(short device) ;
# 377 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortBits(const BitMap * bm) ;
# 392 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PortSize(
  short width,
  short height) ;
# 409 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MovePortTo(
  short leftGlobal,
  short topGlobal) ;
# 426 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetOrigin(
  short h,
  short v) ;
# 443 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetClip(RgnHandle rgn) ;
# 458 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetClip(RgnHandle rgn) ;
# 473 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ClipRect(const Rect * r) ;
# 488 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
BackPat(const Pattern * pat) ;
# 505 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InitCursor(void) ;
# 528 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetCursor(const Cursor * crsr) ;
# 545 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
HideCursor(void) ;
# 563 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ShowCursor(void) ;
# 578 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ObscureCursor(void) ;
# 594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
HidePen(void) ;
# 609 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ShowPen(void) ;
# 624 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetPen(Point * pt) ;
# 639 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetPenState(PenState * pnState) ;
# 654 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPenState(const PenState * pnState) ;
# 669 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PenSize(
  short width,
  short height) ;
# 686 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PenMode(short mode) ;
# 701 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PenPat(const Pattern * pat) ;
# 716 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PenNormal(void) ;
# 731 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MoveTo(
  short h,
  short v) ;
# 748 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
Move(
  short dh,
  short dv) ;
# 768 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LineTo(
  short h,
  short v) ;
# 785 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
Line(
  short dh,
  short dv) ;
# 802 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ForeColor(long color) ;
# 817 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
BackColor(long color) ;
# 832 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ColorBit(short whichBit) ;
# 852 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetRect(
  Rect * r,
  short left,
  short top,
  short right,
  short bottom) ;
# 875 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
OffsetRect(
  Rect * r,
  short dh,
  short dv) ;
# 896 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InsetRect(
  Rect * r,
  short dh,
  short dv) ;
# 914 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
SectRect(
  const Rect * src1,
  const Rect * src2,
  Rect * dstRect) ;
# 935 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
UnionRect(
  const Rect * src1,
  const Rect * src2,
  Rect * dstRect) ;
# 956 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
EqualRect(
  const Rect * rect1,
  const Rect * rect2) ;
# 973 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
EmptyRect(const Rect * r) ;
# 992 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FrameRect(const Rect * r) ;
# 1007 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PaintRect(const Rect * r) ;
# 1022 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
EraseRect(const Rect * r) ;
# 1040 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertRect(const Rect * r) ;
# 1058 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillRect(
  const Rect * r,
  const Pattern * pat) ;
# 1075 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FrameOval(const Rect * r) ;
# 1090 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PaintOval(const Rect * r) ;
# 1105 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
EraseOval(const Rect * r) ;
# 1120 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertOval(const Rect * r) ;
# 1135 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillOval(
  const Rect * r,
  const Pattern * pat) ;
# 1152 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FrameRoundRect(
  const Rect * r,
  short ovalWidth,
  short ovalHeight) ;
# 1170 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PaintRoundRect(
  const Rect * r,
  short ovalWidth,
  short ovalHeight) ;
# 1188 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
EraseRoundRect(
  const Rect * r,
  short ovalWidth,
  short ovalHeight) ;
# 1206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertRoundRect(
  const Rect * r,
  short ovalWidth,
  short ovalHeight) ;
# 1224 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillRoundRect(
  const Rect * r,
  short ovalWidth,
  short ovalHeight,
  const Pattern * pat) ;
# 1243 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FrameArc(
  const Rect * r,
  short startAngle,
  short arcAngle) ;
# 1261 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PaintArc(
  const Rect * r,
  short startAngle,
  short arcAngle) ;
# 1279 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
EraseArc(
  const Rect * r,
  short startAngle,
  short arcAngle) ;
# 1297 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertArc(
  const Rect * r,
  short startAngle,
  short arcAngle) ;
# 1315 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillArc(
  const Rect * r,
  short startAngle,
  short arcAngle,
  const Pattern * pat) ;
# 1336 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RgnHandle
NewRgn(void) ;
# 1352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
OpenRgn(void) ;
# 1367 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CloseRgn(RgnHandle dstRgn) ;
# 1384 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
BitMapToRegion(
  RgnHandle region,
  const BitMap * bMap) ;
# 1425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
RgnToHandle(
  RgnHandle region,
  Handle flattenedRgnDataHdl) ;
# 1442 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
HandleToRgn(
  Handle oldRegion,
  RgnHandle region) ;
# 1459 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposeRgn(RgnHandle rgn) ;
# 1477 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CopyRgn(
  RgnHandle srcRgn,
  RgnHandle dstRgn) ;
# 1494 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetEmptyRgn(RgnHandle rgn) ;
# 1512 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetRectRgn(
  RgnHandle rgn,
  short left,
  short top,
  short right,
  short bottom) ;
# 1532 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
RectRgn(
  RgnHandle rgn,
  const Rect * r) ;
# 1552 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
OffsetRgn(
  RgnHandle rgn,
  short dh,
  short dv) ;
# 1570 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InsetRgn(
  RgnHandle rgn,
  short dh,
  short dv) ;
# 1588 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SectRgn(
  RgnHandle srcRgnA,
  RgnHandle srcRgnB,
  RgnHandle dstRgn) ;
# 1609 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
UnionRgn(
  RgnHandle srcRgnA,
  RgnHandle srcRgnB,
  RgnHandle dstRgn) ;
# 1627 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DiffRgn(
  RgnHandle srcRgnA,
  RgnHandle srcRgnB,
  RgnHandle dstRgn) ;
# 1648 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
XorRgn(
  RgnHandle srcRgnA,
  RgnHandle srcRgnB,
  RgnHandle dstRgn) ;
# 1666 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
RectInRgn(
  const Rect * r,
  RgnHandle rgn) ;
# 1686 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
EqualRgn(
  RgnHandle rgnA,
  RgnHandle rgnB) ;
# 1703 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
EmptyRgn(RgnHandle rgn) ;
# 1722 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FrameRgn(RgnHandle rgn) ;
# 1740 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PaintRgn(RgnHandle rgn) ;
# 1755 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
EraseRgn(RgnHandle rgn) ;
# 1773 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertRgn(RgnHandle rgn) ;
# 1791 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillRgn(
  RgnHandle rgn,
  const Pattern * pat) ;
# 1808 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ScrollRect(
  const Rect * r,
  short dh,
  short dv,
  RgnHandle updateRgn) ;
# 1827 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CopyBits(
  const BitMap * srcBits,
  const BitMap * dstBits,
  const Rect * srcRect,
  const Rect * dstRect,
  short mode,
  RgnHandle maskRgn) ;
# 1851 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SeedFill(
  const void * srcPtr,
  void * dstPtr,
  short srcRow,
  short dstRow,
  short height,
  short words,
  short seedH,
  short seedV) ;
# 1874 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CalcMask(
  const void * srcPtr,
  void * dstPtr,
  short srcRow,
  short dstRow,
  short height,
  short words) ;
# 1895 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CopyMask(
  const BitMap * srcBits,
  const BitMap * maskBits,
  const BitMap * dstBits,
  const Rect * srcRect,
  const Rect * maskRect,
  const Rect * dstRect) ;
# 1919 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PicHandle
OpenPicture(const Rect * picFrame) ;
# 1934 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PicComment(
  short kind,
  short dataSize,
  Handle dataHandle) ;
# 1952 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ClosePicture(void) ;
# 1967 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Rect *
QDGetPictureBounds(
  PicHandle picH,
  Rect * outRect) ;
# 1984 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DrawPicture(
  PicHandle myPicture,
  const Rect * dstRect) ;
# 2001 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
KillPicture(PicHandle myPicture) ;
# 2016 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PolyHandle
OpenPoly(void) ;
# 2031 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ClosePoly(void) ;
# 2046 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
KillPoly(PolyHandle poly) ;
# 2061 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
OffsetPoly(
  PolyHandle poly,
  short dh,
  short dv) ;
# 2079 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FramePoly(PolyHandle poly) ;
# 2094 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PaintPoly(PolyHandle poly) ;
# 2109 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ErasePoly(PolyHandle poly) ;
# 2124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertPoly(PolyHandle poly) ;
# 2139 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillPoly(
  PolyHandle poly,
  const Pattern * pat) ;
# 2158 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPt(
  Point * pt,
  short h,
  short v) ;
# 2177 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LocalToGlobal(Point * pt) ;
# 2192 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GlobalToLocal(Point * pt) ;
# 2207 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
Random(void) ;
# 2222 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StuffHex(
  void * thingPtr,
  ConstStr255Param s) ;
# 2242 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
GetPixel(
  short h,
  short v) ;
# 2261 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ScalePt(
  Point * pt,
  const Rect * srcRect,
  const Rect * dstRect) ;
# 2279 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MapPt(
  Point * pt,
  const Rect * srcRect,
  const Rect * dstRect) ;
# 2297 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MapRect(
  Rect * r,
  const Rect * srcRect,
  const Rect * dstRect) ;
# 2315 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MapRgn(
  RgnHandle rgn,
  const Rect * srcRect,
  const Rect * dstRect) ;
# 2334 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MapPoly(
  PolyHandle poly,
  const Rect * srcRect,
  const Rect * dstRect) ;
# 2352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetStdProcs(QDProcs * procs) ;
# 2367 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdRect(
  GrafVerb verb,
  const Rect * r) ;
# 2384 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdRRect(
  GrafVerb verb,
  const Rect * r,
  short ovalWidth,
  short ovalHeight) ;
# 2403 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdOval(
  GrafVerb verb,
  const Rect * r) ;
# 2420 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdArc(
  GrafVerb verb,
  const Rect * r,
  short startAngle,
  short arcAngle) ;
# 2439 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdPoly(
  GrafVerb verb,
  PolyHandle poly) ;
# 2456 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdRgn(
  GrafVerb verb,
  RgnHandle rgn) ;
# 2473 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdBits(
  const BitMap * srcBits,
  const Rect * srcRect,
  const Rect * dstRect,
  short mode,
  RgnHandle maskRgn) ;
# 2493 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdComment(
  short kind,
  short dataSize,
  Handle dataHandle) ;
# 2511 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdGetPic(
  void * dataPtr,
  short byteCount) ;
# 2528 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdPutPic(
  const void * dataPtr,
  short byteCount) ;
# 2545 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdOpcode(
  const Rect * fromRect,
  const Rect * toRect,
  UInt16 opcode,
  SInt16 version) ;
# 2566 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
AddPt(
  Point src,
  Point * dst) ;
# 2583 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
EqualPt(
  Point pt1,
  Point pt2) ;
# 2603 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
PtInRect(
  Point pt,
  const Rect * r) ;
# 2620 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
Pt2Rect(
  Point pt1,
  Point pt2,
  Rect * dstRect) ;
# 2638 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PtToAngle(
  const Rect * r,
  Point pt,
  short * angle) ;
# 2656 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SubPt(
  Point src,
  Point * dst) ;
# 2673 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
PtInRgn(
  Point pt,
  RgnHandle rgn) ;
# 2691 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
StdLine(Point newPt) ;
# 2706 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixMapHandle
NewPixMap(void) ;
# 2721 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposePixMap(PixMapHandle pm) ;
# 2736 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CopyPixMap(
  PixMapHandle srcPM,
  PixMapHandle dstPM) ;
# 2753 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixPatHandle
NewPixPat(void) ;
# 2768 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposePixPat(PixPatHandle pp) ;
# 2783 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CopyPixPat(
  PixPatHandle srcPP,
  PixPatHandle dstPP) ;
# 2800 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PenPixPat(PixPatHandle pp) ;
# 2815 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
BackPixPat(PixPatHandle pp) ;
# 2830 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixPatHandle
GetPixPat(short patID) ;
# 2845 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MakeRGBPat(
  PixPatHandle pp,
  const RGBColor * myColor) ;
# 2862 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillCRect(
  const Rect * r,
  PixPatHandle pp) ;
# 2879 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillCOval(
  const Rect * r,
  PixPatHandle pp) ;
# 2896 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillCRoundRect(
  const Rect * r,
  short ovalWidth,
  short ovalHeight,
  PixPatHandle pp) ;
# 2915 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillCArc(
  const Rect * r,
  short startAngle,
  short arcAngle,
  PixPatHandle pp) ;
# 2934 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillCRgn(
  RgnHandle rgn,
  PixPatHandle pp) ;
# 2951 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
FillCPoly(
  PolyHandle poly,
  PixPatHandle pp) ;
# 2968 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
RGBForeColor(const RGBColor * color) ;
# 2983 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
RGBBackColor(const RGBColor * color) ;
# 2998 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetCPixel(
  short h,
  short v,
  const RGBColor * cPix) ;
# 3016 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortPix(PixMapHandle pm) ;
# 3031 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetCPixel(
  short h,
  short v,
  RGBColor * cPix) ;
# 3049 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetForeColor(RGBColor * color) ;
# 3064 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetBackColor(RGBColor * color) ;
# 3079 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SeedCFill(
  const BitMap * srcBits,
  const BitMap * dstBits,
  const Rect * srcRect,
  const Rect * dstRect,
  short seedH,
  short seedV,
  ColorSearchUPP matchProc,
  long matchData) ;
# 3102 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CalcCMask(
  const BitMap * srcBits,
  const BitMap * dstBits,
  const Rect * srcRect,
  const Rect * dstRect,
  const RGBColor * seedRGB,
  ColorSearchUPP matchProc,
  long matchData) ;
# 3124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PicHandle
OpenCPicture(const OpenCPicParams * newHeader) ;
# 3139 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
OpColor(const RGBColor * color) ;
# 3154 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
HiliteColor(const RGBColor * color) ;
# 3169 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposeCTable(CTabHandle cTable) ;
# 3184 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CTabHandle
GetCTable(short ctID) ;
# 3199 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CCrsrHandle
GetCCursor(short crsrID) ;
# 3214 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetCCursor(CCrsrHandle cCrsr) ;
# 3229 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
AllocCursor(void) ;
# 3244 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposeCCursor(CCrsrHandle cCrsr) ;
# 3261 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetStdCProcs(CQDProcs * procs) ;
# 3276 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
GetMaxDevice(const Rect * globalRect) ;
# 3291 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern long
GetCTSeed(void) ;
# 3310 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
GetDeviceList(void) ;
# 3325 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
GetMainDevice(void) ;
# 3340 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
GetNextDevice(GDHandle curDevice) ;
# 3355 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
TestDeviceAttribute(
  GDHandle gdh,
  short attribute) ;
# 3372 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetDeviceAttribute(
  GDHandle gdh,
  short attribute,
  Boolean value) ;
# 3390 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InitGDevice(
  short qdRefNum,
  long mode,
  GDHandle gdh) ;
# 3408 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
NewGDevice(
  short refNum,
  long mode) ;
# 3425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposeGDevice(GDHandle gdh) ;
# 3440 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetGDevice(GDHandle gd) ;
# 3455 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
GetGDevice(void) ;
# 3470 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern long
Color2Index(const RGBColor * myColor) ;
# 3485 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
Index2Color(
  long index,
  RGBColor * aColor) ;
# 3502 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
InvertColor(RGBColor * myColor) ;
# 3517 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
RealColor(const RGBColor * color) ;
# 3532 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetSubTable(
  CTabHandle myColors,
  short iTabRes,
  CTabHandle targetTbl) ;
# 3550 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
MakeITable(
  CTabHandle cTabH,
  ITabHandle iTabH,
  short res) ;
# 3568 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
AddSearch(ColorSearchUPP searchProc) ;
# 3583 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
AddComp(ColorComplementUPP compProc) ;
# 3598 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DelSearch(ColorSearchUPP searchProc) ;
# 3613 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DelComp(ColorComplementUPP compProc) ;
# 3628 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetClientID(short id) ;
# 3643 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ProtectEntry(
  short index,
  Boolean protect) ;
# 3660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ReserveEntry(
  short index,
  Boolean reserve) ;
# 3677 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetEntries(
  short start,
  short count,
  CSpecArray aTable) ;
# 3695 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SaveEntries(
  CTabHandle srcTable,
  CTabHandle resultTable,
  ReqListRec * selection) ;
# 3713 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
RestoreEntries(
  CTabHandle srcTable,
  CTabHandle dstTable,
  ReqListRec * selection) ;
# 3731 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
QDError(void) ;
# 3746 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CopyDeepMask(
  const BitMap * srcBits,
  const BitMap * maskBits,
  const BitMap * dstBits,
  const Rect * srcRect,
  const Rect * maskRect,
  const Rect * dstRect,
  short mode,
  RgnHandle maskRgn) ;
# 3772 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DeviceLoop(
  RgnHandle drawingRgn,
  DeviceLoopDrawingUPP drawingProc,
  long userData,
  DeviceLoopFlags flags) ;
# 3793 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Ptr
GetMaskTable(void) ;
# 3809 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PatHandle
GetPattern(short patternID) ;
# 3827 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CursHandle
GetCursor(short cursorID) ;
# 3842 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PicHandle
GetPicture(short pictureID) ;
# 3857 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern long
DeltaPoint(
  Point ptA,
  Point ptB) ;
# 3876 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ShieldCursor(
  const Rect * shieldRect,
  Point offsetPt) ;
# 3894 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
ScreenRes(
  short * scrnHRes,
  short * scrnVRes) ;
# 3911 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
GetIndPattern(
  Pattern * thePat,
  short patternListID,
  short index) ;
# 3932 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern long
deltapoint(
  Point * ptA,
  Point * ptB) ;
# 3963 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
PackBits(
  Ptr * srcPtr,
  Ptr * dstPtr,
  short srcBytes) ;
# 3981 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
UnpackBits(
  Ptr * srcPtr,
  Ptr * dstPtr,
  short dstBytes) ;
# 4001 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Fixed
SlopeFromAngle(short angle) ;
# 4016 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
AngleFromSlope(Fixed slope) ;



enum {
  colorXorXFer = 52,
  noiseXFer = 53,
  customXFer = 54
};


enum {
  kXFer1PixelAtATime = 0x00000001,
  kXFerConvertPixelToRGB32 = 0x00000002
};

struct CustomXFerRec {
  UInt32 version;
  void * srcPixels;
  void * destPixels;
  void * resultPixels;
  UInt32 refCon;
  UInt32 pixelSize;
  UInt32 pixelCount;
  Point firstPixelHV;
  Rect destBounds;
};
typedef struct CustomXFerRec CustomXFerRec;
typedef CustomXFerRec * CustomXFerRecPtr;
typedef void ( * CustomXFerProcPtr)(CustomXFerRecPtr info);
# 4059 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
GetPortCustomXFerProc(
  CGrafPtr port,
  CustomXFerProcPtr * proc,
  UInt32 * flags,
  UInt32 * refCon) ;
# 4078 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
SetPortCustomXFerProc(
  CGrafPtr port,
  CustomXFerProcPtr proc,
  UInt32 flags,
  UInt32 refCon) ;





enum {
  kCursorComponentsVersion = 0x00010001
};

enum {
  kCursorComponentType = 'curs'
};


enum {
  cursorDoesAnimate = 1L << 0,
  cursorDoesHardware = 1L << 1,
  cursorDoesUnreadableScreenBits = 1L << 2
};


enum {
  kRenderCursorInHardware = 1L << 0,
  kRenderCursorInSoftware = 1L << 1
};


struct CursorInfo {
  long version;
  long capabilities;
  long animateDuration;
  Rect bounds;
  Point hotspot;
  long reserved;

};
typedef struct CursorInfo CursorInfo;

enum {
  kCursorComponentInit = 0x0001,
  kCursorComponentGetInfo = 0x0002,
  kCursorComponentSetOutputMode = 0x0003,
  kCursorComponentSetData = 0x0004,
  kCursorComponentReconfigure = 0x0005,
  kCursorComponentDraw = 0x0006,
  kCursorComponentErase = 0x0007,
  kCursorComponentMove = 0x0008,
  kCursorComponentAnimate = 0x0009,
  kCursorComponentLastReserved = 0x0050
};
# 4147 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
OpenCursorComponent(
  Component c,
  ComponentInstance * ci) ;
# 4164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
CloseCursorComponent(ComponentInstance ci) ;
# 4179 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
SetCursorComponent(ComponentInstance ci) ;
# 4194 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
CursorComponentChanged(ComponentInstance ci) ;
# 4209 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSErr
CursorComponentSetData(
  ComponentInstance ci,
  long data) ;
# 4230 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CMError
CWMatchPixMap(
  CMWorldRef cw,
  PixMap * myPixMap,
  CMBitmapCallBackUPP progressProc,
  void * refCon) ;
# 4249 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CMError
CWCheckPixMap(
  CMWorldRef cw,
  PixMap * myPixMap,
  CMBitmapCallBackUPP progressProc,
  void * refCon,
  BitMap * resultBitMap) ;
# 4269 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CMError
NCMBeginMatching(
  CMProfileRef src,
  CMProfileRef dst,
  CMMatchRef * myRef) ;
# 4287 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CMEndMatching(CMMatchRef myRef) ;
# 4302 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
NCMDrawMatchedPicture(
  PicHandle myPicture,
  CMProfileRef dst,
  Rect * myRect) ;
# 4320 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
CMEnableMatchingComment(Boolean enableIt) ;
# 4335 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CMError
NCMUseProfileComment(
  CMProfileRef prof,
  UInt32 flags) ;
# 4376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsValidPort(CGrafPtr port) ;
# 4410 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsValidRgnHandle(RgnHandle rgn) ;
# 4428 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixMapHandle
GetPortPixMap(CGrafPtr port) ;
# 4454 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern const BitMap *
GetPortBitMapForCopyBits(CGrafPtr port) ;
# 4469 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Rect *
GetPortBounds(
  CGrafPtr port,
  Rect * rect) ;
# 4486 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RGBColor *
GetPortForeColor(
  CGrafPtr port,
  RGBColor * foreColor) ;
# 4503 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RGBColor *
GetPortBackColor(
  CGrafPtr port,
  RGBColor * backColor) ;
# 4520 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RGBColor *
GetPortOpColor(
  CGrafPtr port,
  RGBColor * opColor) ;
# 4537 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RGBColor *
GetPortHiliteColor(
  CGrafPtr port,
  RGBColor * hiliteColor) ;
# 4554 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CQDProcsPtr
GetPortGrafProcs(CGrafPtr port) ;
# 4569 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPortTextFont(CGrafPtr port) ;
# 4584 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Style
GetPortTextFace(CGrafPtr port) ;
# 4599 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPortTextMode(CGrafPtr port) ;
# 4614 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPortTextSize(CGrafPtr port) ;
# 4629 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPortChExtra(CGrafPtr port) ;
# 4644 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPortFracHPenLocation(CGrafPtr port) ;
# 4659 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Fixed
GetPortSpExtra(CGrafPtr port) ;
# 4674 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPortPenVisibility(CGrafPtr port) ;
# 4689 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RgnHandle
GetPortVisibleRegion(
  CGrafPtr port,
  RgnHandle visRgn) ;
# 4706 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RgnHandle
GetPortClipRegion(
  CGrafPtr port,
  RgnHandle clipRgn) ;
# 4723 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixPatHandle
GetPortBackPixPat(
  CGrafPtr port,
  PixPatHandle backPattern) ;
# 4740 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixPatHandle
GetPortPenPixPat(
  CGrafPtr port,
  PixPatHandle penPattern) ;
# 4757 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern PixPatHandle
GetPortFillPixPat(
  CGrafPtr port,
  PixPatHandle fillPattern) ;
# 4774 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Point *
GetPortPenSize(
  CGrafPtr port,
  Point * penSize) ;
# 4791 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern SInt32
GetPortPenMode(CGrafPtr port) ;
# 4806 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Point *
GetPortPenLocation(
  CGrafPtr port,
  Point * penLocation) ;
# 4823 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortRegionBeingDefined(CGrafPtr port) ;
# 4838 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortPictureBeingDefined(CGrafPtr port) ;
# 4853 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortPolyBeingDefined(CGrafPtr port) ;
# 4868 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortOffscreen(CGrafPtr port) ;
# 4883 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortColor(CGrafPtr port) ;
# 4898 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortVisibleRegionEmpty(CGrafPtr port) ;
# 4913 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsPortClipRegionEmpty(CGrafPtr port) ;
# 4928 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SectRegionWithPortClipRegion(
  CGrafPtr port,
  RgnHandle ioRegion) ;
# 4945 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SectRegionWithPortVisibleRegion(
  CGrafPtr port,
  RgnHandle ioRegion) ;
# 4985 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
SwapPortPicSaveHandle(
  CGrafPtr port,
  Handle inPicSaveHdl) ;
# 5003 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
SwapPortPolySaveHandle(
  CGrafPtr port,
  Handle inPolySaveHdl) ;
# 5020 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
SwapPortRegionSaveHandle(
  CGrafPtr port,
  Handle inRegionSaveHdl) ;
# 5039 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortBounds(
  CGrafPtr port,
  const Rect * rect) ;
# 5056 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortOpColor(
  CGrafPtr port,
  const RGBColor * opColor) ;
# 5073 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortGrafProcs(
  CGrafPtr port,
  CQDProcsPtr procs) ;
# 5090 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortTextFont(
  CGrafPtr port,
  short txFont) ;
# 5107 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortTextSize(
  CGrafPtr port,
  short txSize) ;
# 5124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortTextFace(
  CGrafPtr port,
  StyleParameter face) ;
# 5141 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortTextMode(
  CGrafPtr port,
  short mode) ;
# 5158 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortVisibleRegion(
  CGrafPtr port,
  RgnHandle visRgn) ;
# 5175 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortClipRegion(
  CGrafPtr port,
  RgnHandle clipRgn) ;
# 5192 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortPenPixPat(
  CGrafPtr port,
  PixPatHandle penPattern) ;
# 5209 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortFillPixPat(
  CGrafPtr port,
  PixPatHandle penPattern) ;
# 5226 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortBackPixPat(
  CGrafPtr port,
  PixPatHandle backPattern) ;
# 5243 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortPenSize(
  CGrafPtr port,
  Point penSize) ;
# 5260 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortPenMode(
  CGrafPtr port,
  SInt32 penMode) ;
# 5277 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetPortFracHPenLocation(
  CGrafPtr port,
  short pnLocHFrac) ;
# 5295 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Rect *
GetPixBounds(
  PixMapHandle pixMap,
  Rect * bounds) ;
# 5312 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern short
GetPixDepth(PixMapHandle pixMap) ;
# 5329 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern long
GetQDGlobalsRandomSeed(void) ;
# 5344 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern BitMap *
GetQDGlobalsScreenBits(BitMap * screenBits) ;
# 5359 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Cursor *
GetQDGlobalsArrow(Cursor * arrow) ;
# 5374 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Pattern *
GetQDGlobalsDarkGray(Pattern * dkGray) ;
# 5389 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Pattern *
GetQDGlobalsLightGray(Pattern * ltGray) ;
# 5404 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Pattern *
GetQDGlobalsGray(Pattern * gray) ;
# 5419 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Pattern *
GetQDGlobalsBlack(Pattern * black) ;
# 5434 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Pattern *
GetQDGlobalsWhite(Pattern * white) ;
# 5449 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CGrafPtr
GetQDGlobalsThePort(void) ;
# 5465 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetQDGlobalsRandomSeed(long randomSeed) ;
# 5480 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetQDGlobalsArrow(const Cursor * arrow) ;
# 5498 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Rect *
GetRegionBounds(
  RgnHandle region,
  Rect * bounds) ;
# 5515 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
IsRegionRectangular(RgnHandle region) ;
# 5535 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CGrafPtr
CreateNewPort(void) ;
# 5550 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
DisposePort(CGrafPtr port) ;
# 5566 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
SetQDError(OSErr err) ;
# 5586 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Point *
QDLocalToGlobalPoint(
  CGrafPtr port,
  Point * point) ;
# 5603 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Point *
QDGlobalToLocalPoint(
  CGrafPtr port,
  Point * point) ;
# 5620 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Rect *
QDLocalToGlobalRect(
  CGrafPtr port,
  Rect * bounds) ;
# 5637 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Rect *
QDGlobalToLocalRect(
  CGrafPtr port,
  Rect * bounds) ;
# 5654 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RgnHandle
QDLocalToGlobalRegion(
  CGrafPtr port,
  RgnHandle region) ;
# 5671 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern RgnHandle
QDGlobalToLocalRegion(
  CGrafPtr port,
  RgnHandle region) ;
# 5694 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
QDIsPortBuffered(CGrafPtr port) ;
# 5709 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
QDIsPortBufferDirty(CGrafPtr port) ;
# 5724 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
QDFlushPortBuffer(
  CGrafPtr port,
  RgnHandle region) ;
# 5741 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDGetDirtyRegion(
  CGrafPtr port,
  RgnHandle rgn) ;
# 5758 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDSetDirtyRegion(
  CGrafPtr port,
  RgnHandle rgn) ;
# 5775 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDAddRectToDirtyRegion(
  CGrafPtr inPort,
  const Rect * inBounds) ;
# 5792 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDAddRegionToDirtyRegion(
  CGrafPtr inPort,
  RgnHandle inRegion) ;
# 5810 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
CreateCGContextForPort(
  CGrafPtr inPort,
  CGContextRef * outContext) ;
# 5856 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
ClipCGContextToRegion(
  CGContextRef gc,
  const Rect * portRect,
  RgnHandle region) ;
# 5874 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
SyncCGContextOriginWithPort(
  CGContextRef inContext,
  CGrafPtr port) ;
# 5919 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDBeginCGContext(
  CGrafPtr inPort,
  CGContextRef * outContext) ;
# 5936 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDEndCGContext(
  CGrafPtr inPort,
  CGContextRef * inoutContext) ;
# 5948 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
typedef struct OpaqueQDRegionBitsRef* QDRegionBitsRef;
# 5978 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern QDRegionBitsRef
QDSaveRegionBits(RgnHandle region) ;
# 6015 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDRestoreRegionBits(
  RgnHandle region,
  QDRegionBitsRef regionBits) ;
# 6052 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDDisposeRegionBits(QDRegionBitsRef regionBits) ;
# 6075 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CGrafPtr
CreateNewPortForCGDisplayID(UInt32 inCGDisplayID) ;
# 6096 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
QDDisplayWaitCursor(Boolean forceWaitCursor) ;
# 6137 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
QDSetPatternOrigin(Point origin) ;
# 6160 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
QDGetPatternOrigin(Point * origin) ;
# 6191 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
QDIsNamedPixMapCursorRegistered(const char name[128]) ;
# 6249 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDRegisterNamedPixMapCursor(
  PixMapHandle crsrData,
  PixMapHandle crsrMask,
  Point hotSpot,
  const char name[128]) ;
# 6268 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDUnregisterNamedPixMapCursur(const char name[128]) ;
# 6283 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDUnregisterNamedPixMapCursor(const char name[128]) ;
# 6298 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDSetNamedPixMapCursor(const char name[128]) ;




enum {
  kQDXArrowCursor = 0,
  kQDXIBeamCursor = 1,
  kQDXIBeamXORCursor = 2,
  kQDXAliasCursor = 3,
  kQDXCopyCursor = 4,
  kQDXMoveCursor = 5,
  kQDXNumberOfSystemCursors = 6
};


typedef UInt32 QDXSystemCursorID;
# 6340 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern const char *
QDGetCursorNameForSystemCursor(QDXSystemCursorID cursorID) ;
# 6370 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDSetCursorScale(float scale) ;
# 6385 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDGetCursorScale(float * outScale) ;
# 6428 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern OSStatus
QDGetCursorData(
  Boolean contextCursor,
  PixMapHandle * crsrData,
  Point * hotSpot) ;






enum {
  kQDUseDefaultTextRendering = 0,

  kQDUseTrueTypeScalerGlyphs = (1 << 0),
  kQDUseCGTextRendering = (1 << 1),
  kQDUseCGTextMetrics = (1 << 2),
  kQDSupportedFlags = kQDUseTrueTypeScalerGlyphs | kQDUseCGTextRendering | kQDUseCGTextMetrics,
  kQDDontChangeFlags = (long)0xFFFFFFFF
};
# 6479 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern UInt32
QDSwapTextFlags(UInt32 newFlags) ;
# 6506 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern UInt32
QDSwapPortTextFlags(
  CGrafPtr port,
  UInt32 newFlags) ;
# 6539 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern CGDirectDisplayID
QDGetCGDirectDisplayID(GDHandle inGDevice) ;
# 6558 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern SInt16
LMGetScrVRes(void) ;
# 6573 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetScrVRes(SInt16 value) ;
# 6588 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern SInt16
LMGetScrHRes(void) ;
# 6603 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetScrHRes(SInt16 value) ;
# 6618 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
LMGetMainDevice(void) ;
# 6633 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetMainDevice(GDHandle value) ;
# 6648 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
LMGetDeviceList(void) ;
# 6663 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetDeviceList(GDHandle value) ;
# 6678 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
LMGetQDColors(void) ;
# 6693 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetQDColors(Handle value) ;
# 6708 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
LMGetWidthListHand(void) ;
# 6723 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetWidthListHand(Handle value) ;
# 6738 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern UInt8
LMGetHiliteMode(void) ;
# 6753 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetHiliteMode(UInt8 value) ;
# 6768 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Ptr
LMGetWidthPtr(void) ;
# 6783 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetWidthPtr(Ptr value) ;
# 6798 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
LMGetWidthTabHandle(void) ;
# 6813 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetWidthTabHandle(Handle value) ;
# 6828 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern SInt32
LMGetLastSPExtra(void) ;
# 6843 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetLastSPExtra(SInt32 value) ;
# 6858 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Handle
LMGetLastFOND(void) ;
# 6873 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetLastFOND(Handle value) ;
# 6888 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern UInt8
LMGetFractEnable(void) ;
# 6903 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetFractEnable(UInt8 value) ;
# 6918 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern GDHandle
LMGetTheGDevice(void) ;
# 6933 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetTheGDevice(GDHandle value) ;
# 6952 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMGetHiliteRGB(RGBColor * hiliteRGBValue) ;
# 6967 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetHiliteRGB(const RGBColor * hiliteRGBValue) ;
# 6985 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern Boolean
LMGetCursorNew(void) ;
# 7000 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QuickdrawAPI.h" 3
extern void
LMSetCursorNew(Boolean value) ;





#pragma pack(pop)


}
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Quickdraw.h" 1 3
# 51 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern "C" {







enum {
  pixPurgeBit = 0,
  noNewDeviceBit = 1,
  useTempMemBit = 2,
  keepLocalBit = 3,
  useDistantHdwrMemBit = 4,
  useLocalHdwrMemBit = 5,
  pixelsPurgeableBit = 6,
  pixelsLockedBit = 7,
  nativeEndianPixMapBit = 8,
  mapPixBit = 16,
  newDepthBit = 17,
  alignPixBit = 18,
  newRowBytesBit = 19,
  reallocPixBit = 20,
  clipPixBit = 28,
  stretchPixBit = 29,
  ditherPixBit = 30,
  gwFlagErrBit = 31
};

enum {
  pixPurge = 1L << pixPurgeBit,
  noNewDevice = 1L << noNewDeviceBit,
  useTempMem = 1L << useTempMemBit,
  keepLocal = 1L << keepLocalBit,
  useDistantHdwrMem = 1L << useDistantHdwrMemBit,
  useLocalHdwrMem = 1L << useLocalHdwrMemBit,
  pixelsPurgeable = 1L << pixelsPurgeableBit,
  pixelsLocked = 1L << pixelsLockedBit,
  kNativeEndianPixMap = 1L << nativeEndianPixMapBit,
  kAllocDirectDrawSurface = 1L << 14,
  mapPix = 1L << mapPixBit,
  newDepth = 1L << newDepthBit,
  alignPix = 1L << alignPixBit,
  newRowBytes = 1L << newRowBytesBit,
  reallocPix = 1L << reallocPixBit,
  clipPix = 1L << clipPixBit,
  stretchPix = 1L << stretchPixBit,
  ditherPix = 1L << ditherPixBit,
  gwFlagErr = 1L << gwFlagErrBit
};

typedef unsigned long GWorldFlags;

typedef CGrafPtr GWorldPtr;
# 99 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern QDErr
NewGWorld(
  GWorldPtr * offscreenGWorld,
  short PixelDepth,
  const Rect * boundsRect,
  CTabHandle cTable,
  GDHandle aGDevice,
  GWorldFlags flags) ;





enum {
  deviceIsIndirect = (1L << 0),
  deviceNeedsLock = (1L << 1),
  deviceIsStatic = (1L << 2),
  deviceIsExternalBuffer = (1L << 3),
  deviceIsDDSurface = (1L << 4),
  deviceIsDCISurface = (1L << 5),
  deviceIsGDISurface = (1L << 6),
  deviceIsAScreen = (1L << 7),
  deviceIsOverlaySurface = (1L << 8)
};
# 167 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern QDErr
NewGWorldFromPtr(
  GWorldPtr * offscreenGWorld,
  UInt32 PixelFormat,
  const Rect * boundsRect,
  CTabHandle cTable,
  GDHandle aGDevice,
  GWorldFlags flags,
  Ptr newBuffer,
  SInt32 rowBytes) ;
# 187 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern Boolean
LockPixels(PixMapHandle pm) ;
# 199 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
UnlockPixels(PixMapHandle pm) ;
# 211 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern GWorldFlags
UpdateGWorld(
  GWorldPtr * offscreenGWorld,
  short pixelDepth,
  const Rect * boundsRect,
  CTabHandle cTable,
  GDHandle aGDevice,
  GWorldFlags flags) ;
# 229 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
DisposeGWorld(GWorldPtr offscreenGWorld) ;
# 241 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
GetGWorld(
  CGrafPtr * port,
  GDHandle * gdh) ;
# 255 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
SetGWorld(
  CGrafPtr port,
  GDHandle gdh) ;
# 269 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
CTabChanged(CTabHandle ctab) ;
# 281 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
PixPatChanged(PixPatHandle ppat) ;
# 293 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
PortChanged(GrafPtr port) ;
# 305 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
GDeviceChanged(GDHandle gdh) ;
# 317 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
AllowPurgePixels(PixMapHandle pm) ;
# 329 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
NoPurgePixels(PixMapHandle pm) ;
# 341 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern GWorldFlags
GetPixelsState(PixMapHandle pm) ;
# 353 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
SetPixelsState(
  PixMapHandle pm,
  GWorldFlags state) ;
# 369 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern Ptr
GetPixBaseAddr(PixMapHandle pm) ;
# 382 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern SInt32
GetPixRowBytes(PixMapHandle pm) ;
# 394 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern QDErr
NewScreenBuffer(
  const Rect * globalRect,
  Boolean purgeable,
  GDHandle * gdh,
  PixMapHandle * offscreenPixMap) ;
# 410 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern void
DisposeScreenBuffer(PixMapHandle offscreenPixMap) ;
# 422 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern GDHandle
GetGWorldDevice(GWorldPtr offscreenGWorld) ;
# 434 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern Boolean
QDDone(GrafPtr port) ;
# 446 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern SInt32
OffscreenVersion(void) ;
# 458 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern QDErr
NewTempScreenBuffer(
  const Rect * globalRect,
  Boolean purgeable,
  GDHandle * gdh,
  PixMapHandle * offscreenPixMap) ;
# 474 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern Boolean
PixMap32Bit(PixMapHandle pmHandle) ;
# 486 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDOffscreen.h" 3
extern PixMapHandle
GetGWorldPixMap(GWorldPtr offscreenGWorld) ;






}
# 55 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 1 3
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 2 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern "C" {


typedef struct QDPict* QDPictRef;
# 61 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern QDPictRef
QDPictCreateWithProvider(CGDataProviderRef provider) ;
# 79 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern QDPictRef
QDPictCreateWithURL(CFURLRef url) ;
# 93 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern QDPictRef
QDPictRetain(QDPictRef pictRef) ;
# 107 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern void
QDPictRelease(QDPictRef pictRef) ;
# 122 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern CGRect
QDPictGetBounds(QDPictRef pictRef) ;
# 139 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern void
QDPictGetResolution(
  QDPictRef pictRef,
  float * xRes,
  float * yRes) ;
# 159 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QDPictToCGContext.h" 3
extern OSStatus
QDPictDrawToCGContext(
  CGContextRef ctx,
  CGRect rect,
  QDPictRef pictRef) ;






}
# 59 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 1 3
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern "C" {


#pragma pack(push, 2)
# 66 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern ATSFontRef
FMGetATSFontRefFromFont(FMFont iFont) ;
# 91 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern FMFont
FMGetFontFromATSFontRef(ATSFontRef iFont) ;
# 130 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMFontGetCGFontRefFromFontFamilyInstance(
  FMFontFamily iFontFamily,
  FMFontStyle iStyle,
  CGFontRef * oFont,
  FMFontStyle * oStyle) ;
# 154 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
enum {
  systemFont = 0,
  applFont = 1
};

enum {
  kFMDefaultOptions = kNilOptions
};


enum {
  kFMDefaultActivationContext = kFMDefaultOptions,
  kFMGlobalActivationContext = 0x00000001,
  kFMLocalActivationContext = kFMDefaultActivationContext
};


enum {
  kFMDefaultIterationScope = kFMDefaultOptions,
  kFMGlobalIterationScope = 0x00000001,
  kFMLocalIterationScope = kFMDefaultIterationScope
};


enum {
  kPlatformDefaultGuiFontID = applFont
};

enum {
  commandMark = 17,
  checkMark = 18,
  diamondMark = 19,
  appleMark = 20
};

enum {
  propFont = 36864L,
  prpFntH = 36865L,
  prpFntW = 36866L,
  prpFntHW = 36867L,
  fixedFont = 45056L,
  fxdFntH = 45057L,
  fxdFntW = 45058L,
  fxdFntHW = 45059L,
  fontWid = 44208L
};

struct FMInput {
  short family;
  short size;
  Style face;
  Boolean needBits;
  short device;
  Point numer;
  Point denom;
};
typedef struct FMInput FMInput;
struct FMOutput {
  short errNum;
  Handle fontHandle;
  UInt8 boldPixels;
  UInt8 italicPixels;
  UInt8 ulOffset;
  UInt8 ulShadow;
  UInt8 ulThick;
  UInt8 shadowPixels;
  SInt8 extra;
  UInt8 ascent;
  UInt8 descent;
  UInt8 widMax;
  SInt8 leading;
  SInt8 curStyle;
  Point numer;
  Point denom;
};
typedef struct FMOutput FMOutput;
typedef FMOutput * FMOutputPtr;
typedef FMOutputPtr FMOutPtr;
struct FMetricRec {
  Fixed ascent;
  Fixed descent;
  Fixed leading;
  Fixed widMax;
  Handle wTabHandle;
};
typedef struct FMetricRec FMetricRec;
typedef FMetricRec * FMetricRecPtr;
typedef FMetricRecPtr * FMetricRecHandle;
# 261 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
GetFontName(
  short familyID,
  Str255 name) ;
# 275 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
GetFNum(
  ConstStr255Param name,
  short * familyID) ;
# 289 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern Boolean
RealFont(
  short fontNum,
  short size) ;
# 316 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern FMOutPtr
FMSwapFont(const FMInput * inRec) ;
# 328 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
SetFScaleDisable(Boolean fscaleDisable) ;
# 340 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
FontMetrics(FMetricRecPtr theMetrics) ;
# 352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
SetFractEnable(Boolean fractEnable) ;
# 364 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern short
GetDefFontSize(void) ;
# 376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern Boolean
IsOutline(
  Point numer,
  Point denom) ;
# 390 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
SetOutlinePreferred(Boolean outlinePreferred) ;
# 402 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern Boolean
GetOutlinePreferred(void) ;
# 414 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSErr
OutlineMetrics(
  short byteCount,
  const void * textPtr,
  Point numer,
  Point denom,
  short * yMax,
  short * yMin,
  FixedPtr awArray,
  FixedPtr lsbArray,
  RectPtr boundsArray) ;
# 435 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
SetPreserveGlyph(Boolean preserveGlyph) ;
# 447 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern Boolean
GetPreserveGlyph(void) ;
# 492 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern short
GetSysFont(void) ;
# 504 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern short
GetAppFont(void) ;
# 517 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
SetAntiAliasedTextEnabled(
  Boolean iEnable,
  SInt16 iMinFontSize) ;
# 533 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern Boolean
IsAntiAliasedTextEnabled(SInt16 * oMinFontSize) ;
# 546 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern void
QDTextBounds(
  short byteCount,
  const void * textAddr,
  Rect * bounds) ;
# 561 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSErr
FetchFontInfo(
  SInt16 fontID,
  SInt16 fontSize,
  SInt16 fontStyle,
  FontInfo * info) ;
# 578 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMCreateFontFamilyIterator(
  const FMFilter * iFilter,
  void * iRefCon,
  OptionBits iOptions,
  FMFontFamilyIterator * ioIterator) ;
# 594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMDisposeFontFamilyIterator(FMFontFamilyIterator * ioIterator) ;
# 606 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMResetFontFamilyIterator(
  const FMFilter * iFilter,
  void * iRefCon,
  OptionBits iOptions,
  FMFontFamilyIterator * ioIterator) ;
# 622 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetNextFontFamily(
  FMFontFamilyIterator * ioIterator,
  FMFontFamily * oFontFamily) ;
# 636 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMCreateFontIterator(
  const FMFilter * iFilter,
  void * iRefCon,
  OptionBits iOptions,
  FMFontIterator * ioIterator) ;
# 652 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMDisposeFontIterator(FMFontIterator * ioIterator) ;
# 664 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMResetFontIterator(
  const FMFilter * iFilter,
  void * iRefCon,
  OptionBits iOptions,
  FMFontIterator * ioIterator) ;
# 680 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetNextFont(
  FMFontIterator * ioIterator,
  FMFont * oFont) ;
# 694 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMCreateFontFamilyInstanceIterator(
  FMFontFamily iFontFamily,
  FMFontFamilyInstanceIterator * ioIterator) ;
# 708 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMDisposeFontFamilyInstanceIterator(FMFontFamilyInstanceIterator * ioIterator) ;
# 720 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMResetFontFamilyInstanceIterator(
  FMFontFamily iFontFamily,
  FMFontFamilyInstanceIterator * ioIterator) ;
# 734 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetNextFontFamilyInstance(
  FMFontFamilyInstanceIterator * ioIterator,
  FMFont * oFont,
  FMFontStyle * oStyle,
  FMFontSize * oSize) ;
# 750 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern FMFontFamily
FMGetFontFamilyFromName(ConstStr255Param iName) ;
# 762 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFamilyName(
  FMFontFamily iFontFamily,
  Str255 oName) ;
# 776 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFamilyTextEncoding(
  FMFontFamily iFontFamily,
  TextEncoding * oTextEncoding) ;
# 790 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFamilyGeneration(
  FMFontFamily iFontFamily,
  FMGeneration * oGeneration) ;
# 804 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFormat(
  FMFont iFont,
  FourCharCode * oFormat) ;
# 818 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontTableDirectory(
  FMFont iFont,
  ByteCount iLength,
  void * iBuffer,
  ByteCount * oActualLength) ;
# 834 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontTable(
  FMFont iFont,
  FourCharCode iTag,
  ByteOffset iOffset,
  ByteCount iLength,
  void * iBuffer,
  ByteCount * oActualLength) ;
# 852 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontGeneration(
  FMFont iFont,
  FMGeneration * oGeneration) ;
# 866 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontContainer(
  FMFont iFont,
  FSSpec * oFontContainer) ;
# 880 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFromFontFamilyInstance(
  FMFontFamily iFontFamily,
  FMFontStyle iStyle,
  FMFont * oFont,
  FMFontStyle * oIntrinsicStyle) ;
# 896 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFamilyInstanceFromFont(
  FMFont iFont,
  FMFontFamily * oFontFamily,
  FMFontStyle * oStyle) ;
# 913 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern ATSFontFamilyRef
FMGetATSFontFamilyRefFromFontFamily(FMFontFamily iFamily) ;
# 925 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern FMFontFamily
FMGetFontFamilyFromATSFontFamilyRef(ATSFontFamilyRef iFamily) ;
# 938 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMActivateFonts(
  const FSSpec * iFontContainer,
  const FMFilter * iFilter,
  void * iRefCon,
  OptionBits iOptions) ;
# 954 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMDeactivateFonts(
  const FSSpec * iFontContainer,
  const FMFilter * iFilter,
  void * iRefCon,
  OptionBits iOptions) ;
# 971 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern FMGeneration
FMGetGeneration(void) ;
# 983 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontContainerFromFontFamilyInstance(
  FMFontFamily iFontFamily,
  FMFontStyle iStyle,
  FMFontSize iFontSize,
  FSSpec * oFontContainer) ;
# 999 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
extern OSStatus
FMGetFontFamilyResource(
  FMFontFamily iFontFamily,
  FMFontStyle iFontStyle,
  FMFontSize iFontSize,
  ByteCount iBufferSize,
  void * ioBuffer,
  ByteCount * oSize) ;




typedef FMFontFamily FontFamilyID;
typedef FMFontSize FontPointSize;
enum {
  kFMUseGlobalScopeOption = 0x00000001
};





enum {
  kFontIDNewYork = 2,
  kFontIDGeneva = 3,
  kFontIDMonaco = 4,
  kFontIDVenice = 5,
  kFontIDLondon = 6,
  kFontIDAthens = 7,
  kFontIDSanFrancisco = 8,
  kFontIDToronto = 9,
  kFontIDCairo = 11,
  kFontIDLosAngeles = 12,
  kFontIDTimes = 20,
  kFontIDHelvetica = 21,
  kFontIDCourier = 22,
  kFontIDSymbol = 23,
  kFontIDMobile = 24
};
# 1048 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
struct WidEntry {
  SInt16 widStyle;
};
typedef struct WidEntry WidEntry;
struct WidTable {
  SInt16 numWidths;
};
typedef struct WidTable WidTable;
struct AsscEntry {
  SInt16 fontSize;
  SInt16 fontStyle;
  SInt16 fontID;
};
typedef struct AsscEntry AsscEntry;
struct FontAssoc {
  SInt16 numAssoc;
};
typedef struct FontAssoc FontAssoc;
struct StyleTable {
  SInt16 fontClass;
  SInt32 offset;
  SInt32 reserved;
  char indexes[48];
};
typedef struct StyleTable StyleTable;
struct NameTable {
  SInt16 stringCount;
  Str255 baseFontName;
};
typedef struct NameTable NameTable;
struct KernPair {
  char kernFirst;
  char kernSecond;
  SInt16 kernWidth;
};
typedef struct KernPair KernPair;
struct KernEntry {
  SInt16 kernStyle;
  SInt16 kernLength;
};
typedef struct KernEntry KernEntry;
struct KernTable {
  SInt16 numKerns;
};
typedef struct KernTable KernTable;
struct WidthTable {
  Fixed tabData[256];
  Handle tabFont;
  long sExtra;
  long style;
  short fID;
  short fSize;
  short face;
  short device;
  Point inNumer;
  Point inDenom;
  short aFID;
  Handle fHand;
  Boolean usedFam;
  UInt8 aFace;
  short vOutput;
  short hOutput;
  short vFactor;
  short hFactor;
  short aSize;
  short tabSize;
};
typedef struct WidthTable WidthTable;
typedef WidthTable * WidthTablePtr;
typedef WidthTablePtr * WidthTableHdl;
struct FamRec {
  SInt16 ffFlags;
  SInt16 ffFamID;
  SInt16 ffFirstChar;
  SInt16 ffLastChar;
  SInt16 ffAscent;
  SInt16 ffDescent;
  SInt16 ffLeading;
  SInt16 ffWidMax;
  SInt32 ffWTabOff;
  SInt32 ffKernOff;
  SInt32 ffStylOff;
  SInt16 ffProperty[9];
  SInt16 ffIntl[2];
  SInt16 ffVersion;
};
typedef struct FamRec FamRec;
struct FontRec {
  SInt16 fontType;
  SInt16 firstChar;
  SInt16 lastChar;
  SInt16 widMax;
  SInt16 kernMax;
  SInt16 nDescent;
  SInt16 fRectWidth;
  SInt16 fRectHeight;
  UInt16 owTLoc;
  SInt16 ascent;
  SInt16 descent;
  SInt16 leading;
  SInt16 rowWords;
};
typedef struct FontRec FontRec;
typedef FontRec * FontRecPtr;
typedef FontRecPtr * FontRecHdl;
# 1175 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Fonts.h" 3
#pragma pack(pop)


}
# 67 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 1 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern "C" {


#pragma pack(push, 2)

enum {
  pmCourteous = 0,
  pmDithered = 0x0001,
  pmTolerant = 0x0002,
  pmAnimated = 0x0004,
  pmExplicit = 0x0008,
  pmWhite = 0x0010,
  pmBlack = 0x0020,
  pmInhibitG2 = 0x0100,
  pmInhibitC2 = 0x0200,
  pmInhibitG4 = 0x0400,
  pmInhibitC4 = 0x0800,
  pmInhibitG8 = 0x1000,
  pmInhibitC8 = 0x2000,
  pmNoUpdates = 0x8000,
  pmBkUpdates = 0xA000,
  pmFgUpdates = 0xC000,
  pmAllUpdates = 0xE000
};

struct ColorInfo {
  RGBColor ciRGB;
  short ciUsage;
  short ciTolerance;
  short ciDataFields[3];
};
typedef struct ColorInfo ColorInfo;
typedef ColorInfo * ColorInfoPtr;
typedef ColorInfoPtr * ColorInfoHandle;
struct Palette {
  short pmEntries;
  short pmDataFields[7];
  ColorInfo pmInfo[1];
};
typedef struct Palette Palette;
typedef Palette * PalettePtr;
typedef PalettePtr * PaletteHandle;
# 83 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
InitPalettes(void) ;
# 95 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern PaletteHandle
NewPalette(
  short entries,
  CTabHandle srcColors,
  short srcUsage,
  short srcTolerance) ;
# 111 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern PaletteHandle
GetNewPalette(short PaletteID) ;
# 123 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
DisposePalette(PaletteHandle srcPalette) ;
# 135 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
ActivatePalette(WindowRef srcWindow) ;
# 147 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
SetPalette(
  WindowRef dstWindow,
  PaletteHandle srcPalette,
  Boolean cUpdates) ;
# 162 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
NSetPalette(
  WindowRef dstWindow,
  PaletteHandle srcPalette,
  short nCUpdates) ;
# 177 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern PaletteHandle
GetPalette(WindowRef srcWindow) ;
# 189 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
CopyPalette(
  PaletteHandle srcPalette,
  PaletteHandle dstPalette,
  short srcEntry,
  short dstEntry,
  short dstLength) ;
# 206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
PmForeColor(short dstEntry) ;
# 218 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
PmBackColor(short dstEntry) ;
# 230 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
AnimateEntry(
  WindowRef dstWindow,
  short dstEntry,
  const RGBColor * srcRGB) ;
# 248 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
AnimatePalette(
  WindowRef dstWindow,
  CTabHandle srcCTab,
  short srcIndex,
  short dstEntry,
  short dstLength) ;
# 265 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
GetEntryColor(
  PaletteHandle srcPalette,
  short srcEntry,
  RGBColor * dstRGB) ;
# 280 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
SetEntryColor(
  PaletteHandle dstPalette,
  short dstEntry,
  const RGBColor * srcRGB) ;
# 295 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
GetEntryUsage(
  PaletteHandle srcPalette,
  short srcEntry,
  short * dstUsage,
  short * dstTolerance) ;
# 311 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
SetEntryUsage(
  PaletteHandle dstPalette,
  short dstEntry,
  short srcUsage,
  short srcTolerance) ;
# 327 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
CTab2Palette(
  CTabHandle srcCTab,
  PaletteHandle dstPalette,
  short srcUsage,
  short srcTolerance) ;
# 343 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
Palette2CTab(
  PaletteHandle srcPalette,
  CTabHandle dstCTab) ;
# 357 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern SInt32
Entry2Index(short entry) ;
# 369 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
RestoreDeviceClut(GDHandle gd) ;
# 384 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
ResizePalette(
  PaletteHandle p,
  short size) ;
# 398 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
SaveFore(ColorSpec * c) ;
# 410 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
SaveBack(ColorSpec * c) ;
# 422 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
RestoreFore(const ColorSpec * c) ;
# 434 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
RestoreBack(const ColorSpec * c) ;
# 446 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern OSErr
SetDepth(
  GDHandle gd,
  short depth,
  short whichFlags,
  short flags) ;
# 462 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern short
HasDepth(
  GDHandle gd,
  short depth,
  short whichFlags,
  short flags) ;
# 478 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern short
PMgrVersion(void) ;
# 490 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern void
SetPaletteUpdates(
  PaletteHandle p,
  short updates) ;
# 504 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern short
GetPaletteUpdates(PaletteHandle p) ;
# 516 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Palettes.h" 3
extern Boolean
GetGray(
  GDHandle device,
  const RGBColor * backGround,
  RGBColor * foreGround) ;







#pragma pack(pop)


}
# 71 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern "C" {


#pragma pack(push, 2)


enum {
  returnColorTable = 0x0001,
  returnPalette = 0x0002,
  recordComments = 0x0004,
  recordFontInfo = 0x0008,
  suppressBlackAndWhite = 0x0010
};

enum {

  systemMethod = 0,
  popularMethod = 1,
  medianMethod = 2
};

enum {

  ColorBankIsCustom = -1,
  ColorBankIsExactAnd555 = 0,
  ColorBankIs555 = 1
};

typedef long PictInfoID;
struct CommentSpec {
  short count;
  short ID;
};
typedef struct CommentSpec CommentSpec;
typedef CommentSpec * CommentSpecPtr;
typedef CommentSpecPtr * CommentSpecHandle;
struct FontSpec {
  short pictFontID;
  short sysFontID;
  long size[4];
  short style;
  long nameOffset;
};
typedef struct FontSpec FontSpec;
typedef FontSpec * FontSpecPtr;
typedef FontSpecPtr * FontSpecHandle;
struct PictInfo {
  short version;
  long uniqueColors;
  PaletteHandle thePalette;
  CTabHandle theColorTable;
  Fixed hRes;
  Fixed vRes;
  short depth;
  Rect sourceRect;
  long textCount;
  long lineCount;
  long rectCount;
  long rRectCount;
  long ovalCount;
  long arcCount;
  long polyCount;
  long regionCount;
  long bitMapCount;
  long pixMapCount;
  long commentCount;
  long uniqueComments;
  CommentSpecHandle commentHandle;
  long uniqueFonts;
  FontSpecHandle fontHandle;
  Handle fontNamesHandle;
  long reserved1;
  long reserved2;
};
typedef struct PictInfo PictInfo;
typedef PictInfo * PictInfoPtr;
typedef PictInfoPtr * PictInfoHandle;
typedef OSErr ( * InitPickMethodProcPtr)(SInt16 colorsRequested, UInt32 *dataRef, SInt16 *colorBankType);
typedef OSErr ( * RecordColorsProcPtr)(UInt32 dataRef, RGBColor *colorsArray, SInt32 colorCount, SInt32 *uniqueColors);
typedef OSErr ( * CalcColorTableProcPtr)(UInt32 dataRef, SInt16 colorsRequested, void *colorBankPtr, CSpecArray resultPtr);
typedef OSErr ( * DisposeColorPickMethodProcPtr)(UInt32 dataRef);
typedef InitPickMethodProcPtr InitPickMethodUPP;
typedef RecordColorsProcPtr RecordColorsUPP;
typedef CalcColorTableProcPtr CalcColorTableUPP;
typedef DisposeColorPickMethodProcPtr DisposeColorPickMethodUPP;
# 129 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern InitPickMethodUPP
NewInitPickMethodUPP(InitPickMethodProcPtr userRoutine) ;
# 140 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern RecordColorsUPP
NewRecordColorsUPP(RecordColorsProcPtr userRoutine) ;
# 151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern CalcColorTableUPP
NewCalcColorTableUPP(CalcColorTableProcPtr userRoutine) ;
# 162 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern DisposeColorPickMethodUPP
NewDisposeColorPickMethodUPP(DisposeColorPickMethodProcPtr userRoutine) ;
# 173 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern void
DisposeInitPickMethodUPP(InitPickMethodUPP userUPP) ;
# 184 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern void
DisposeRecordColorsUPP(RecordColorsUPP userUPP) ;
# 195 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern void
DisposeCalcColorTableUPP(CalcColorTableUPP userUPP) ;
# 206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern void
DisposeDisposeColorPickMethodUPP(DisposeColorPickMethodUPP userUPP) ;
# 217 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
InvokeInitPickMethodUPP(
  SInt16 colorsRequested,
  UInt32 * dataRef,
  SInt16 * colorBankType,
  InitPickMethodUPP userUPP) ;
# 232 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
InvokeRecordColorsUPP(
  UInt32 dataRef,
  RGBColor * colorsArray,
  SInt32 colorCount,
  SInt32 * uniqueColors,
  RecordColorsUPP userUPP) ;
# 248 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
InvokeCalcColorTableUPP(
  UInt32 dataRef,
  SInt16 colorsRequested,
  void * colorBankPtr,
  CSpecArray resultPtr,
  CalcColorTableUPP userUPP) ;
# 264 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
InvokeDisposeColorPickMethodUPP(
  UInt32 dataRef,
  DisposeColorPickMethodUPP userUPP) ;



    inline InitPickMethodUPP NewInitPickMethodUPP(InitPickMethodProcPtr userRoutine) { return userRoutine; }
    inline RecordColorsUPP NewRecordColorsUPP(RecordColorsProcPtr userRoutine) { return userRoutine; }
    inline CalcColorTableUPP NewCalcColorTableUPP(CalcColorTableProcPtr userRoutine) { return userRoutine; }
    inline DisposeColorPickMethodUPP NewDisposeColorPickMethodUPP(DisposeColorPickMethodProcPtr userRoutine) { return userRoutine; }
    inline void DisposeInitPickMethodUPP(InitPickMethodUPP) { }
    inline void DisposeRecordColorsUPP(RecordColorsUPP) { }
    inline void DisposeCalcColorTableUPP(CalcColorTableUPP) { }
    inline void DisposeDisposeColorPickMethodUPP(DisposeColorPickMethodUPP) { }
    inline OSErr InvokeInitPickMethodUPP(SInt16 colorsRequested, UInt32 * dataRef, SInt16 * colorBankType, InitPickMethodUPP userUPP) { return (*userUPP)(colorsRequested, dataRef, colorBankType); }
    inline OSErr InvokeRecordColorsUPP(UInt32 dataRef, RGBColor * colorsArray, SInt32 colorCount, SInt32 * uniqueColors, RecordColorsUPP userUPP) { return (*userUPP)(dataRef, colorsArray, colorCount, uniqueColors); }
    inline OSErr InvokeCalcColorTableUPP(UInt32 dataRef, SInt16 colorsRequested, void * colorBankPtr, CSpecArray resultPtr, CalcColorTableUPP userUPP) { return (*userUPP)(dataRef, colorsRequested, colorBankPtr, resultPtr); }
    inline OSErr InvokeDisposeColorPickMethodUPP(UInt32 dataRef, DisposeColorPickMethodUPP userUPP) { return (*userUPP)(dataRef); }
# 308 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
GetPictInfo(
  PicHandle thePictHandle,
  PictInfo * thePictInfo,
  short verb,
  short colorsRequested,
  short colorPickMethod,
  short version) ;
# 326 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
GetPixMapInfo(
  PixMapHandle thePixMapHandle,
  PictInfo * thePictInfo,
  short verb,
  short colorsRequested,
  short colorPickMethod,
  short version) ;
# 344 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
NewPictInfo(
  PictInfoID * thePictInfoID,
  short verb,
  short colorsRequested,
  short colorPickMethod,
  short version) ;
# 361 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
RecordPictInfo(
  PictInfoID thePictInfoID,
  PicHandle thePictHandle) ;
# 375 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
RecordPixMapInfo(
  PictInfoID thePictInfoID,
  PixMapHandle thePixMapHandle) ;
# 389 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
RetrievePictInfo(
  PictInfoID thePictInfoID,
  PictInfo * thePictInfo,
  short colorsRequested) ;
# 404 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
extern OSErr
DisposePictInfo(PictInfoID thePictInfoID) ;
# 418 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/PictUtils.h" 3
#pragma pack(pop)


}
# 75 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
#pragma pack(push, 2)
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
enum {
  mBaseOffset = 1,
  mRowBytes = 2,
  mBounds = 3,
  mVersion = 4,
  mHRes = 5,
  mVRes = 6,
  mPixelType = 7,
  mPixelSize = 8,
  mCmpCount = 9,
  mCmpSize = 10,
  mPlaneBytes = 11,
  mVertRefRate = 14,
  mVidParams = 1,
  mTable = 2,
  mPageCnt = 3,
  mDevType = 4,
  oneBitMode = 128,
  twoBitMode = 129,
  fourBitMode = 130,
  eightBitMode = 131
};

enum {
  sixteenBitMode = 132,
  thirtyTwoBitMode = 133,
  firstVidMode = 128,
  secondVidMode = 129,
  thirdVidMode = 130,
  fourthVidMode = 131,
  fifthVidMode = 132,
  sixthVidMode = 133,
  spGammaDir = 64,
  spVidNamesDir = 65
};




enum {
  kDeclROMtables = 'decl',
  kDetailedTimingFormat = 'arba'
};


enum {
  kDDCBlockSize = 128
};


enum {
  kDDCBlockTypeEDID = 0
};


enum {
  kDDCForceReadBit = 0,
  kDDCForceReadMask = (1 << kDDCForceReadBit)
};
# 114 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
enum {
  timingInvalid = 0,
  timingInvalid_SM_T24 = 8,
  timingApple_FixedRateLCD = 42,
  timingApple_512x384_60hz = 130,
  timingApple_560x384_60hz = 135,
  timingApple_640x480_67hz = 140,
  timingApple_640x400_67hz = 145,
  timingVESA_640x480_60hz = 150,
  timingVESA_640x480_72hz = 152,
  timingVESA_640x480_75hz = 154,
  timingVESA_640x480_85hz = 158,
  timingGTF_640x480_120hz = 159,
  timingApple_640x870_75hz = 160,
  timingApple_640x818_75hz = 165,
  timingApple_832x624_75hz = 170,
  timingVESA_800x600_56hz = 180,
  timingVESA_800x600_60hz = 182,
  timingVESA_800x600_72hz = 184,
  timingVESA_800x600_75hz = 186,
  timingVESA_800x600_85hz = 188,
  timingVESA_1024x768_60hz = 190,
  timingVESA_1024x768_70hz = 200,
  timingVESA_1024x768_75hz = 204,
  timingVESA_1024x768_85hz = 208,
  timingApple_1024x768_75hz = 210,
  timingApple_1152x870_75hz = 220,
  timingAppleNTSC_ST = 230,
  timingAppleNTSC_FF = 232,
  timingAppleNTSC_STconv = 234,
  timingAppleNTSC_FFconv = 236,
  timingApplePAL_ST = 238,
  timingApplePAL_FF = 240,
  timingApplePAL_STconv = 242,
  timingApplePAL_FFconv = 244,
  timingVESA_1280x960_75hz = 250,
  timingVESA_1280x960_60hz = 252,
  timingVESA_1280x960_85hz = 254,
  timingVESA_1280x1024_60hz = 260,
  timingVESA_1280x1024_75hz = 262,
  timingVESA_1280x1024_85hz = 268,
  timingVESA_1600x1200_60hz = 280,
  timingVESA_1600x1200_65hz = 282,
  timingVESA_1600x1200_70hz = 284,
  timingVESA_1600x1200_75hz = 286,
  timingVESA_1600x1200_80hz = 288,
  timingVESA_1600x1200_85hz = 289,
  timingVESA_1792x1344_60hz = 296,
  timingVESA_1792x1344_75hz = 298,
  timingVESA_1856x1392_60hz = 300,
  timingVESA_1856x1392_75hz = 302,
  timingVESA_1920x1440_60hz = 304,
  timingVESA_1920x1440_75hz = 306,
  timingSMPTE240M_60hz = 400,
  timingFilmRate_48hz = 410,
  timingSony_1600x1024_76hz = 500,
  timingSony_1920x1080_60hz = 510,
  timingSony_1920x1080_72hz = 520,
  timingSony_1920x1200_76hz = 540,
  timingApple_0x0_0hz_Offline = 550
};



enum {
  timingApple12 = timingApple_512x384_60hz,
  timingApple12x = timingApple_560x384_60hz,
  timingApple13 = timingApple_640x480_67hz,
  timingApple13x = timingApple_640x400_67hz,
  timingAppleVGA = timingVESA_640x480_60hz,
  timingApple15 = timingApple_640x870_75hz,
  timingApple15x = timingApple_640x818_75hz,
  timingApple16 = timingApple_832x624_75hz,
  timingAppleSVGA = timingVESA_800x600_56hz,
  timingApple1Ka = timingVESA_1024x768_60hz,
  timingApple1Kb = timingVESA_1024x768_70hz,
  timingApple19 = timingApple_1024x768_75hz,
  timingApple21 = timingApple_1152x870_75hz,
  timingSony_1900x1200_74hz = 530,
  timingSony_1900x1200_76hz = timingSony_1920x1200_76hz
};


enum {
  kAllModesValid = 0,
  kAllModesSafe = 1,
  kReportsTagging = 2,
  kHasDirectConnection = 3,
  kIsMonoDev = 4,
  kUncertainConnection = 5,
  kTaggingInfoNonStandard = 6,
  kReportsDDCConnection = 7,
  kHasDDCConnection = 8,
  kConnectionInactive = 9,
  kDependentConnection = 10,
  kBuiltInConnection = 11,
  kOverrideConnection = 12,
  kFastCheckForDDC = 13,
  kReportsHotPlugging = 14
};



enum {
  kUnknownConnect = 1,
  kPanelConnect = 2,
  kPanelTFTConnect = 2,
  kFixedModeCRTConnect = 3,
  kMultiModeCRT1Connect = 4,
  kMultiModeCRT2Connect = 5,
  kMultiModeCRT3Connect = 6,
  kMultiModeCRT4Connect = 7,
  kModelessConnect = 8,
  kFullPageConnect = 9,
  kVGAConnect = 10,
  kNTSCConnect = 11,
  kPALConnect = 12,
  kHRConnect = 13,
  kPanelFSTNConnect = 14,
  kMonoTwoPageConnect = 15,
  kColorTwoPageConnect = 16,
  kColor16Connect = 17,
  kColor19Connect = 18,
  kGenericCRT = 19,
  kGenericLCD = 20,
  kDDCConnect = 21,
  kNoConnect = 22
};


enum {
  kModeValid = 0,
  kModeSafe = 1,
  kModeDefault = 2,
  kModeShowNow = 3,
  kModeNotResize = 4,
  kModeRequiresPan = 5,
  kModeInterlaced = 6,
  kModeShowNever = 7,
  kModeSimulscan = 8,
  kModeNotPreset = 9,
  kModeBuiltIn = 10,
  kModeStretched = 11
};


enum {
  kDepthDependent = 0
};


enum {
  kResolutionHasMultipleDepthSizes = 0
};


enum {

  kAVPowerOff = 0,
  kAVPowerStandby = 1,
  kAVPowerSuspend = 2,
  kAVPowerOn = 3,
  kHardwareSleep = 128,
  kHardwareWake = 129,
  kHardwareWakeFromSuspend = 130,
  kHardwareWakeToDoze = 131,
  kHardwareWakeToDozeFromSuspend = 132
};

enum {

  kPowerStateNeedsRefresh = 0,
  kPowerStateSleepAwareBit = 1,
  kPowerStateSleepForbiddenBit = 2,
  kPowerStateSleepCanPowerOffBit = 3,
  kPowerStateSleepNoDPMSBit = 4,
  kPowerStateSleepWaketoDozeBit = 5,
  kPowerStateNeedsRefreshMask = (1L << kPowerStateNeedsRefresh),
  kPowerStateSleepAwareMask = (1L << kPowerStateSleepAwareBit),
  kPowerStateSleepForbiddenMask = (1L << kPowerStateSleepForbiddenBit),
  kPowerStateSleepCanPowerOffMask = (1L << kPowerStateSleepCanPowerOffBit),
  kPowerStateSleepNoDPMSMask = (1L << kPowerStateSleepNoDPMSBit),
  kPowerStateSleepWaketoDozeMask = (1L << kPowerStateSleepWaketoDozeBit)
};


enum {

  cscReset = 0,
  cscKillIO = 1,
  cscSetMode = 2,
  cscSetEntries = 3,
  cscSetGamma = 4,
  cscGrayPage = 5,
  cscGrayScreen = 5,
  cscSetGray = 6,
  cscSetInterrupt = 7,
  cscDirectSetEntries = 8,
  cscSetDefaultMode = 9,
  cscSwitchMode = 10,
  cscSetSync = 11,
  cscSavePreferredConfiguration = 16,
  cscSetHardwareCursor = 22,
  cscDrawHardwareCursor = 23,
  cscSetConvolution = 24,
  cscSetPowerState = 25,
  cscPrivateControlCall = 26,
  cscSetMultiConnect = 28,
  cscSetClutBehavior = 29,
  cscSetDetailedTiming = 31,
  cscDoCommunication = 33,
  cscProbeConnection = 34,
  cscUnusedCall = 127
};

enum {

  cscGetMode = 2,
  cscGetEntries = 3,
  cscGetPageCnt = 4,
  cscGetPages = 4,
  cscGetPageBase = 5,
  cscGetBaseAddr = 5,
  cscGetGray = 6,
  cscGetInterrupt = 7,
  cscGetGamma = 8,
  cscGetDefaultMode = 9,
  cscGetCurMode = 10,
  cscGetSync = 11,
  cscGetConnection = 12,
  cscGetModeTiming = 13,
  cscGetModeBaseAddress = 14,
  cscGetScanProc = 15,
  cscGetPreferredConfiguration = 16,
  cscGetNextResolution = 17,
  cscGetVideoParameters = 18,
  cscGetGammaInfoList = 20,
  cscRetrieveGammaTable = 21,
  cscSupportsHardwareCursor = 22,
  cscGetHardwareCursorDrawState = 23,
  cscGetConvolution = 24,
  cscGetPowerState = 25,
  cscPrivateStatusCall = 26,
  cscGetDDCBlock = 27,
  cscGetMultiConnect = 28,
  cscGetClutBehavior = 29,
  cscGetTimingRanges = 30,
  cscGetDetailedTiming = 31,
  cscGetCommunicationInfo = 32
};


enum {
  kDisableHorizontalSyncBit = 0,
  kDisableVerticalSyncBit = 1,
  kDisableCompositeSyncBit = 2,
  kEnableSyncOnBlue = 3,
  kEnableSyncOnGreen = 4,
  kEnableSyncOnRed = 5,
  kNoSeparateSyncControlBit = 6,
  kTriStateSyncBit = 7,
  kHorizontalSyncMask = 0x01,
  kVerticalSyncMask = 0x02,
  kCompositeSyncMask = 0x04,
  kDPMSSyncMask = 0x07,
  kTriStateSyncMask = 0x80,
  kSyncOnBlueMask = 0x08,
  kSyncOnGreenMask = 0x10,
  kSyncOnRedMask = 0x20,
  kSyncOnMask = 0x38
};

enum {

  kDPMSSyncOn = 0,
  kDPMSSyncStandby = 1,
  kDPMSSyncSuspend = 2,
  kDPMSSyncOff = 7
};


enum {
  kConvolved = 0,
  kLiveVideoPassThru = 1,
  kConvolvedMask = 0x01,
  kLiveVideoPassThruMask = 0x02
};


struct VPBlock {
  long vpBaseOffset;
  short vpRowBytes;
  Rect vpBounds;
  short vpVersion;
  short vpPackType;
  long vpPackSize;
  long vpHRes;
  long vpVRes;
  short vpPixelType;
  short vpPixelSize;
  short vpCmpCount;
  short vpCmpSize;
  long vpPlaneBytes;
};
typedef struct VPBlock VPBlock;
typedef VPBlock * VPBlockPtr;
struct VDEntryRecord {
  Ptr csTable;
};
typedef struct VDEntryRecord VDEntryRecord;
typedef VDEntryRecord * VDEntRecPtr;

struct VDGrayRecord {
  Boolean csMode;
  SInt8 filler;
};
typedef struct VDGrayRecord VDGrayRecord;
typedef VDGrayRecord * VDGrayPtr;

struct VDFlagRecord {
  SInt8 csMode;
  SInt8 filler;
};
typedef struct VDFlagRecord VDFlagRecord;
typedef VDFlagRecord * VDFlagRecPtr;

struct VDSetEntryRecord {
  ColorSpec * csTable;
  short csStart;
  short csCount;
};
typedef struct VDSetEntryRecord VDSetEntryRecord;
typedef VDSetEntryRecord * VDSetEntryPtr;

struct VDGammaRecord {
  Ptr csGTable;
};
typedef struct VDGammaRecord VDGammaRecord;
typedef VDGammaRecord * VDGamRecPtr;
struct VDBaseAddressInfoRec {
  long csDevData;
  long csDevBase;
  short csModeReserved;
  long csModeBase;
};
typedef struct VDBaseAddressInfoRec VDBaseAddressInfoRec;
typedef VDBaseAddressInfoRec * VDBaseAddressInfoPtr;
struct VDSwitchInfoRec {
  unsigned short csMode;
  unsigned long csData;
  unsigned short csPage;
  Ptr csBaseAddr;
  unsigned long csReserved;
};
typedef struct VDSwitchInfoRec VDSwitchInfoRec;
typedef VDSwitchInfoRec * VDSwitchInfoPtr;
struct VDTimingInfoRec {
  unsigned long csTimingMode;
  unsigned long csTimingReserved;
  unsigned long csTimingFormat;
  unsigned long csTimingData;
  unsigned long csTimingFlags;
};
typedef struct VDTimingInfoRec VDTimingInfoRec;
typedef VDTimingInfoRec * VDTimingInfoPtr;
struct VDDisplayConnectInfoRec {
  unsigned short csDisplayType;
  unsigned char csConnectTaggedType;
  unsigned char csConnectTaggedData;
  unsigned long csConnectFlags;
  unsigned long csDisplayComponent;
  unsigned long csConnectReserved;
};
typedef struct VDDisplayConnectInfoRec VDDisplayConnectInfoRec;
typedef VDDisplayConnectInfoRec * VDDisplayConnectInfoPtr;
struct VDMultiConnectInfoRec {
  unsigned long csDisplayCountOrNumber;
  VDDisplayConnectInfoRec csConnectInfo;
};
typedef struct VDMultiConnectInfoRec VDMultiConnectInfoRec;
typedef VDMultiConnectInfoRec * VDMultiConnectInfoPtr;
# 508 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
typedef unsigned char RawSenseCode;
enum {
  kRSCZero = 0,
  kRSCOne = 1,
  kRSCTwo = 2,
  kRSCThree = 3,
  kRSCFour = 4,
  kRSCFive = 5,
  kRSCSix = 6,
  kRSCSeven = 7
};
# 539 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
typedef unsigned char ExtendedSenseCode;
enum {
  kESCZero21Inch = 0x00,
  kESCOnePortraitMono = 0x14,
  kESCTwo12Inch = 0x21,
  kESCThree21InchRadius = 0x31,
  kESCThree21InchMonoRadius = 0x34,
  kESCThree21InchMono = 0x35,
  kESCFourNTSC = 0x0A,
  kESCFivePortrait = 0x1E,
  kESCSixMSB1 = 0x03,
  kESCSixMSB2 = 0x0B,
  kESCSixMSB3 = 0x23,
  kESCSixStandard = 0x2B,
  kESCSevenPAL = 0x00,
  kESCSevenNTSC = 0x14,
  kESCSevenVGA = 0x17,
  kESCSeven16Inch = 0x2D,
  kESCSevenPALAlternate = 0x30,
  kESCSeven19Inch = 0x3A,
  kESCSevenDDC = 0x3E,
  kESCSevenNoDisplay = 0x3F
};
# 575 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
typedef unsigned short DepthMode;
enum {
  kDepthMode1 = 128,
  kDepthMode2 = 129,
  kDepthMode3 = 130,
  kDepthMode4 = 131,
  kDepthMode5 = 132,
  kDepthMode6 = 133
};

enum {
  kFirstDepthMode = 128,
  kSecondDepthMode = 129,
  kThirdDepthMode = 130,
  kFourthDepthMode = 131,
  kFifthDepthMode = 132,
  kSixthDepthMode = 133
};


struct VDPageInfo {
  short csMode;
  long csData;
  short csPage;
  Ptr csBaseAddr;
};
typedef struct VDPageInfo VDPageInfo;
typedef VDPageInfo * VDPgInfoPtr;
struct VDSizeInfo {
  short csHSize;
  short csHPos;
  short csVSize;
  short csVPos;
};
typedef struct VDSizeInfo VDSizeInfo;
typedef VDSizeInfo * VDSzInfoPtr;
struct VDSettings {
  short csParamCnt;
  short csBrightMax;
  short csBrightDef;
  short csBrightVal;
  short csCntrstMax;
  short csCntrstDef;
  short csCntrstVal;
  short csTintMax;
  short csTintDef;
  short csTintVal;
  short csHueMax;
  short csHueDef;
  short csHueVal;
  short csHorizDef;
  short csHorizVal;
  short csHorizMax;
  short csVertDef;
  short csVertVal;
  short csVertMax;
};
typedef struct VDSettings VDSettings;
typedef VDSettings * VDSettingsPtr;
struct VDDefMode {
  UInt8 csID;
  SInt8 filler;
};
typedef struct VDDefMode VDDefMode;
typedef VDDefMode * VDDefModePtr;
struct VDSyncInfoRec {
  UInt8 csMode;
  UInt8 csFlags;
};
typedef struct VDSyncInfoRec VDSyncInfoRec;
typedef VDSyncInfoRec * VDSyncInfoPtr;
typedef UInt32 AVIDType;
typedef AVIDType DisplayIDType;
typedef UInt32 DisplayModeID;
typedef UInt32 VideoDeviceType;
typedef UInt32 GammaTableID;





enum {
  kDisplayModeIDCurrent = 0x00,
  kDisplayModeIDInvalid = (long)0xFFFFFFFF,
  kDisplayModeIDFindFirstResolution = (long)0xFFFFFFFE,
  kDisplayModeIDNoMoreResolutions = (long)0xFFFFFFFD,
  kDisplayModeIDFindFirstProgrammable = (long)0xFFFFFFFC,
  kDisplayModeIDBootProgrammable = (long)0xFFFFFFFB,
  kDisplayModeIDReservedBase = (long)0x80000000
};


enum {
  kGammaTableIDFindFirst = (long)0xFFFFFFFE,
  kGammaTableIDNoMoreTables = (long)0xFFFFFFFD,
  kGammaTableIDSpecific = 0x00
};


enum {
  kGetConnectionCount = (long)0xFFFFFFFF,
  kActivateConnection = (0 << kConnectionInactive),
  kDeactivateConnection = (1 << kConnectionInactive)
};


enum {
  kVideoDefaultBus = 0
};



enum {
  kVideoBusTypeInvalid = 0,
  kVideoBusTypeI2C = 1
};



enum {
  kVideoNoTransactionType = 0,
  kVideoSimpleI2CType = 1,
  kVideoDDCciReplyType = 2
};


enum {
  kVideoReplyMicroSecDelayMask = (1 << 0)
};



struct VDResolutionInfoRec {
  DisplayModeID csPreviousDisplayModeID;
  DisplayModeID csDisplayModeID;
  unsigned long csHorizontalPixels;
  unsigned long csVerticalLines;
  Fixed csRefreshRate;
  DepthMode csMaxDepthMode;
  unsigned long csResolutionFlags;
  unsigned long csReserved;
};
typedef struct VDResolutionInfoRec VDResolutionInfoRec;
typedef VDResolutionInfoRec * VDResolutionInfoPtr;
struct VDVideoParametersInfoRec {
  DisplayModeID csDisplayModeID;
  DepthMode csDepthMode;
  VPBlockPtr csVPBlockPtr;
  unsigned long csPageCount;
  VideoDeviceType csDeviceType;
  UInt32 csDepthFlags;
};
typedef struct VDVideoParametersInfoRec VDVideoParametersInfoRec;
typedef VDVideoParametersInfoRec * VDVideoParametersInfoPtr;
struct VDGammaInfoRec {
  GammaTableID csLastGammaID;
  GammaTableID csNextGammaID;
  Ptr csGammaPtr;
  unsigned long csReserved;
};
typedef struct VDGammaInfoRec VDGammaInfoRec;
typedef VDGammaInfoRec * VDGammaInfoPtr;
struct VDGetGammaListRec {
  GammaTableID csPreviousGammaTableID;
  GammaTableID csGammaTableID;
  unsigned long csGammaTableSize;
  char * csGammaTableName;
};
typedef struct VDGetGammaListRec VDGetGammaListRec;
typedef VDGetGammaListRec * VDGetGammaListPtr;
struct VDRetrieveGammaRec {
  GammaTableID csGammaTableID;
  GammaTbl * csGammaTablePtr;
};
typedef struct VDRetrieveGammaRec VDRetrieveGammaRec;
typedef VDRetrieveGammaRec * VDRetrieveGammaPtr;
struct VDSetHardwareCursorRec {
  void * csCursorRef;
  UInt32 csReserved1;
  UInt32 csReserved2;
};
typedef struct VDSetHardwareCursorRec VDSetHardwareCursorRec;
typedef VDSetHardwareCursorRec * VDSetHardwareCursorPtr;
struct VDDrawHardwareCursorRec {
  SInt32 csCursorX;
  SInt32 csCursorY;
  UInt32 csCursorVisible;
  UInt32 csReserved1;
  UInt32 csReserved2;
};
typedef struct VDDrawHardwareCursorRec VDDrawHardwareCursorRec;
typedef VDDrawHardwareCursorRec * VDDrawHardwareCursorPtr;
struct VDSupportsHardwareCursorRec {
  UInt32 csSupportsHardwareCursor;

  UInt32 csReserved1;
  UInt32 csReserved2;
};
typedef struct VDSupportsHardwareCursorRec VDSupportsHardwareCursorRec;
typedef VDSupportsHardwareCursorRec * VDSupportsHardwareCursorPtr;
struct VDHardwareCursorDrawStateRec {
  SInt32 csCursorX;
  SInt32 csCursorY;
  UInt32 csCursorVisible;
  UInt32 csCursorSet;
  UInt32 csReserved1;
  UInt32 csReserved2;
};
typedef struct VDHardwareCursorDrawStateRec VDHardwareCursorDrawStateRec;
typedef VDHardwareCursorDrawStateRec * VDHardwareCursorDrawStatePtr;
struct VDConvolutionInfoRec {
  DisplayModeID csDisplayModeID;
  DepthMode csDepthMode;
  unsigned long csPage;
  UInt32 csFlags;
  UInt32 csReserved;
};
typedef struct VDConvolutionInfoRec VDConvolutionInfoRec;
typedef VDConvolutionInfoRec * VDConvolutionInfoPtr;
struct VDPowerStateRec {
  unsigned long powerState;
  unsigned long powerFlags;

  unsigned long powerReserved1;
  unsigned long powerReserved2;
};
typedef struct VDPowerStateRec VDPowerStateRec;
typedef VDPowerStateRec * VDPowerStatePtr;
# 813 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
struct VDPrivateSelectorDataRec {
  LogicalAddress privateParameters;
  ByteCount privateParametersSize;
  LogicalAddress privateResults;
  ByteCount privateResultsSize;
};
typedef struct VDPrivateSelectorDataRec VDPrivateSelectorDataRec;

struct VDPrivateSelectorRec {
  UInt32 reserved;
  VDPrivateSelectorDataRec data[1];
};
typedef struct VDPrivateSelectorRec VDPrivateSelectorRec;
struct VDDDCBlockRec {
  UInt32 ddcBlockNumber;
  ResType ddcBlockType;
  UInt32 ddcFlags;
  UInt32 ddcReserved;
  Byte ddcBlockData[128];
};
typedef struct VDDDCBlockRec VDDDCBlockRec;
typedef VDDDCBlockRec * VDDDCBlockPtr;

enum {

  kSyncInterlaceMask = (1 << 7),
  kSyncAnalogCompositeMask = 0,
  kSyncAnalogCompositeSerrateMask = (1 << 2),
  kSyncAnalogCompositeRGBSyncMask = (1 << 1),
  kSyncAnalogBipolarMask = (1 << 3),
  kSyncAnalogBipolarSerrateMask = (1 << 2),
  kSyncAnalogBipolarSRGBSyncMask = (1 << 1),
  kSyncDigitalCompositeMask = (1 << 4),
  kSyncDigitalCompositeSerrateMask = (1 << 2),
  kSyncDigitalCompositeMatchHSyncMask = (1 << 2),
  kSyncDigitalSeperateMask = (1 << 4) + (1 << 3),
  kSyncDigitalVSyncPositiveMask = (1 << 2),
  kSyncDigitalHSyncPositiveMask = (1 << 1)
};



struct VDDisplayTimingRangeRec {
  UInt32 csRangeSize;
  UInt32 csRangeType;
  UInt32 csRangeVersion;
  UInt32 csRangeReserved;

  UInt32 csRangeBlockIndex;
  UInt32 csRangeGroup;
  UInt32 csRangeBlockCount;
  UInt32 csRangeFlags;

  UInt64 csMinPixelClock;
  UInt64 csMaxPixelClock;

  UInt32 csMaxPixelError;
  UInt32 csTimingRangeSyncFlags;
  UInt32 csTimingRangeSignalLevels;
  UInt32 csReserved0;

  UInt32 csMinFrameRate;
  UInt32 csMaxFrameRate;
  UInt32 csMinLineRate;
  UInt32 csMaxLineRate;


  UInt32 csMaxHorizontalTotal;
  UInt32 csMaxVerticalTotal;
  UInt32 csMaxTotalReserved1;
  UInt32 csMaxTotalReserved2;
# 893 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Video.h" 3
  UInt8 csCharSizeHorizontalActive;
  UInt8 csCharSizeHorizontalBlanking;
  UInt8 csCharSizeHorizontalSyncOffset;
  UInt8 csCharSizeHorizontalSyncPulse;

  UInt8 csCharSizeVerticalActive;
  UInt8 csCharSizeVerticalBlanking;
  UInt8 csCharSizeVerticalSyncOffset;
  UInt8 csCharSizeVerticalSyncPulse;

  UInt8 csCharSizeHorizontalBorderLeft;
  UInt8 csCharSizeHorizontalBorderRight;
  UInt8 csCharSizeVerticalBorderTop;
  UInt8 csCharSizeVerticalBorderBottom;

  UInt8 csCharSizeHorizontalTotal;
  UInt8 csCharSizeVerticalTotal;
  UInt16 csCharSizeReserved1;


  UInt32 csMinHorizontalActiveClocks;
  UInt32 csMaxHorizontalActiveClocks;
  UInt32 csMinHorizontalBlankingClocks;
  UInt32 csMaxHorizontalBlankingClocks;

  UInt32 csMinHorizontalSyncOffsetClocks;
  UInt32 csMaxHorizontalSyncOffsetClocks;
  UInt32 csMinHorizontalPulseWidthClocks;
  UInt32 csMaxHorizontalPulseWidthClocks;

  UInt32 csMinVerticalActiveClocks;
  UInt32 csMaxVerticalActiveClocks;
  UInt32 csMinVerticalBlankingClocks;
  UInt32 csMaxVerticalBlankingClocks;

  UInt32 csMinVerticalSyncOffsetClocks;
  UInt32 csMaxVerticalSyncOffsetClocks;
  UInt32 csMinVerticalPulseWidthClocks;
  UInt32 csMaxVerticalPulseWidthClocks;


  UInt32 csMinHorizontalBorderLeft;
  UInt32 csMaxHorizontalBorderLeft;
  UInt32 csMinHorizontalBorderRight;
  UInt32 csMaxHorizontalBorderRight;

  UInt32 csMinVerticalBorderTop;
  UInt32 csMaxVerticalBorderTop;
  UInt32 csMinVerticalBorderBottom;
  UInt32 csMaxVerticalBorderBottom;

  UInt32 csReserved1;
  UInt32 csReserved2;
  UInt32 csReserved3;
  UInt32 csReserved4;

  UInt32 csReserved5;
  UInt32 csReserved6;
  UInt32 csReserved7;
  UInt32 csReserved8;
};
typedef struct VDDisplayTimingRangeRec VDDisplayTimingRangeRec;
typedef VDDisplayTimingRangeRec * VDDisplayTimingRangePtr;

enum {

  kDMSModeReady = 0,
  kDMSModeNotReady = 1,
  kDMSModeFree = 2
};



enum {
  kTimingChangeRestrictedErr = -10930,
  kVideoI2CReplyPendingErr = -10931,
  kVideoI2CTransactionErr = -10932,
  kVideoI2CBusyErr = -10933,
  kVideoI2CTransactionTypeErr = -10934,
  kVideoBufferSizeErr = -10935
};


enum {

  kRangeSupportsSignal_0700_0300_Bit = 0,
  kRangeSupportsSignal_0714_0286_Bit = 1,
  kRangeSupportsSignal_1000_0400_Bit = 2,
  kRangeSupportsSignal_0700_0000_Bit = 3,
  kRangeSupportsSignal_0700_0300_Mask = (1 << kRangeSupportsSignal_0700_0300_Bit),
  kRangeSupportsSignal_0714_0286_Mask = (1 << kRangeSupportsSignal_0714_0286_Bit),
  kRangeSupportsSignal_1000_0400_Mask = (1 << kRangeSupportsSignal_1000_0400_Bit),
  kRangeSupportsSignal_0700_0000_Mask = (1 << kRangeSupportsSignal_0700_0000_Bit)
};


enum {

  kDigitalSignalBit = 0,
  kAnalogSetupExpectedBit = 1,
  kDigitalSignalMask = (1 << kDigitalSignalBit),
  kAnalogSetupExpectedMask = (1 << kAnalogSetupExpectedBit)
};


enum {

  kAnalogSignalLevel_0700_0300 = 0,
  kAnalogSignalLevel_0714_0286 = 1,
  kAnalogSignalLevel_1000_0400 = 2,
  kAnalogSignalLevel_0700_0000 = 3
};


enum {

  kRangeSupportsSeperateSyncsBit = 0,
  kRangeSupportsSyncOnGreenBit = 1,
  kRangeSupportsCompositeSyncBit = 2,
  kRangeSupportsVSyncSerrationBit = 3,
  kRangeSupportsSeperateSyncsMask = (1 << kRangeSupportsSeperateSyncsBit),
  kRangeSupportsSyncOnGreenMask = (1 << kRangeSupportsSyncOnGreenBit),
  kRangeSupportsCompositeSyncMask = (1 << kRangeSupportsCompositeSyncBit),
  kRangeSupportsVSyncSerrationMask = (1 << kRangeSupportsVSyncSerrationBit)
};



enum {

  kSyncPositivePolarityBit = 0,
  kSyncPositivePolarityMask = (1 << kSyncPositivePolarityBit)
};





struct VDDetailedTimingRec {
  UInt32 csTimingSize;
  UInt32 csTimingType;
  UInt32 csTimingVersion;
  UInt32 csTimingReserved;

  DisplayModeID csDisplayModeID;
  UInt32 csDisplayModeSeed;
  UInt32 csDisplayModeState;
  UInt32 csDisplayModeAlias;

  UInt32 csSignalConfig;
  UInt32 csSignalLevels;

  UInt64 csPixelClock;

  UInt64 csMinPixelClock;
  UInt64 csMaxPixelClock;


  UInt32 csHorizontalActive;
  UInt32 csHorizontalBlanking;
  UInt32 csHorizontalSyncOffset;
  UInt32 csHorizontalSyncPulseWidth;

  UInt32 csVerticalActive;
  UInt32 csVerticalBlanking;
  UInt32 csVerticalSyncOffset;
  UInt32 csVerticalSyncPulseWidth;

  UInt32 csHorizontalBorderLeft;
  UInt32 csHorizontalBorderRight;
  UInt32 csVerticalBorderTop;
  UInt32 csVerticalBorderBottom;

  UInt32 csHorizontalSyncConfig;
  UInt32 csHorizontalSyncLevel;
  UInt32 csVerticalSyncConfig;
  UInt32 csVerticalSyncLevel;

  UInt32 csReserved1;
  UInt32 csReserved2;
  UInt32 csReserved3;
  UInt32 csReserved4;

  UInt32 csReserved5;
  UInt32 csReserved6;
  UInt32 csReserved7;
  UInt32 csReserved8;
};
typedef struct VDDetailedTimingRec VDDetailedTimingRec;
typedef VDDetailedTimingRec * VDDetailedTimingPtr;
typedef UInt32 VDClutBehavior;
typedef VDClutBehavior * VDClutBehaviorPtr;
enum {
  kSetClutAtSetEntries = 0,
  kSetClutAtVBL = 1
};


struct VDCommunicationRec {
  SInt32 csBusID;
  UInt32 csCommFlags;
  UInt32 csMinReplyDelay;
  UInt32 csReserved2;

  UInt32 csSendAddress;
  UInt32 csSendType;
  LogicalAddress csSendBuffer;
  ByteCount csSendSize;

  UInt32 csReplyAddress;
  UInt32 csReplyType;
  LogicalAddress csReplyBuffer;
  ByteCount csReplySize;

  UInt32 csReserved3;
  UInt32 csReserved4;
  UInt32 csReserved5;
  UInt32 csReserved6;
};
typedef struct VDCommunicationRec VDCommunicationRec;
typedef VDCommunicationRec * VDCommunicationPtr;
struct VDCommunicationInfoRec {
  SInt32 csBusID;
  UInt32 csBusType;
  SInt32 csMinBus;
  SInt32 csMaxBus;

  UInt32 csSupportedTypes;
  UInt32 csSupportedCommFlags;
  UInt32 csReserved2;
  UInt32 csReserved3;

  UInt32 csReserved4;
  UInt32 csReserved5;
  UInt32 csReserved6;
  UInt32 csReserved7;
};
typedef struct VDCommunicationInfoRec VDCommunicationInfoRec;
typedef VDCommunicationInfoRec * VDCommunicationInfoPtr;

#pragma pack(pop)
# 79 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 1 3
# 44 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern "C" {


#pragma pack(push, 2)
# 57 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
typedef void * DMProcessInfoPtr;
typedef void * DMModalFilterUPP;
enum {

  kAESystemConfigNotice = 'cnfg',
  kAEDisplayNotice = 'dspl',
  kAEDisplaySummary = 'dsum',
  keyDMConfigVersion = 'dmcv',
  keyDMConfigFlags = 'dmcf',
  keyDMConfigReserved = 'dmcr',
  keyDisplayID = 'dmid',
  keyDisplayComponent = 'dmdc',
  keyDisplayDevice = 'dmdd',
  keyDisplayFlags = 'dmdf',
  keyDisplayMode = 'dmdm',
  keyDisplayModeReserved = 'dmmr',
  keyDisplayReserved = 'dmdr',
  keyDisplayMirroredId = 'dmmi',
  keyDeviceFlags = 'dddf',
  keyDeviceDepthMode = 'dddm',
  keyDeviceRect = 'dddr',
  keyPixMapRect = 'dpdr',
  keyPixMapHResolution = 'dphr',
  keyPixMapVResolution = 'dpvr',
  keyPixMapPixelType = 'dppt',
  keyPixMapPixelSize = 'dpps',
  keyPixMapCmpCount = 'dpcc',
  keyPixMapCmpSize = 'dpcs',
  keyPixMapAlignment = 'dppa',
  keyPixMapResReserved = 'dprr',
  keyPixMapReserved = 'dppr',
  keyPixMapColorTableSeed = 'dpct',
  keySummaryMenubar = 'dsmb',
  keySummaryChanges = 'dsch',
  keyDisplayOldConfig = 'dold',
  keyDisplayNewConfig = 'dnew'
};

enum {
  dmOnlyActiveDisplays = true,
  dmAllDisplays = false
};


enum {

  kDependentNotifyClassShowCursor = 'shcr',
  kDependentNotifyClassDriverOverride = 'ndrv',
  kDependentNotifyClassDisplayMgrOverride = 'dmgr',
  kDependentNotifyClassProfileChanged = 'prof'
};


enum {

  kNoSwitchConfirmBit = 0,
  kDepthNotAvailableBit = 1,
  kShowModeBit = 3,
  kModeNotResizeBit = 4,
  kNeverShowModeBit = 5
};




enum {
  kBeginEndConfigureBit = 0,
  kMovedDisplayBit = 1,
  kSetMainDisplayBit = 2,
  kSetDisplayModeBit = 3,
  kAddDisplayBit = 4,
  kRemoveDisplayBit = 5,
  kNewDisplayBit = 6,
  kDisposeDisplayBit = 7,
  kEnabledDisplayBit = 8,
  kDisabledDisplayBit = 9,
  kMirrorDisplayBit = 10,
  kUnMirrorDisplayBit = 11
};


enum {

  kDMNotifyRequestConnectionProbe = 0,
  kDMNotifyInstalled = 1,
  kDMNotifyEvent = 2,
  kDMNotifyRemoved = 3,
  kDMNotifyPrep = 4,
  kDMNotifyExtendEvent = 5,
  kDMNotifyDependents = 6,
  kDMNotifySuspendConfigure = 7,
  kDMNotifyResumeConfigure = 8,
  kDMNotifyRequestDisplayProbe = 9,
  kDMNotifyDisplayWillSleep = 10,
  kDMNotifyDisplayDidWake = 11,

  kExtendedNotificationProc = (1L << 16)
};



enum {
  kFullNotify = 0,
  kFullDependencyNotify = 1
};


enum {
  kDummyDeviceID = 0x00FF,
  kInvalidDisplayID = 0x0000,
  kFirstDisplayID = 0x0100
};

enum {

  kAllowDuplicatesBit = 0
};

enum {

  kSuppressNumberBit = 0,
  kSuppressNumberMask = 1,
  kForceNumberBit = 1,
  kForceNumberMask = 2,
  kSuppressNameBit = 2,
  kSuppressNameMask = 4
};


enum {
  kDMSupressNumbersMask = (1 << 0),
  kDMForceNumbersMask = (1 << 1),
  kDMSupressNameMask = (1 << 2)
};




enum {
  kNoFidelity = 0,
  kMinimumFidelity = 1,
  kDefaultFidelity = 500,
  kDefaultManufacturerFidelity = 1000
};

enum {
  kAnyPanelType = 0,
  kAnyEngineType = 0,
  kAnyDeviceType = 0,
  kAnyPortType = 0
};


enum {

  kPLIncludeOfflineDevicesBit = 0
};



enum {
  kForceConfirmBit = 0,
  kForceConfirmMask = (1 << kForceConfirmBit)
};



enum {
  kDisplayModeListNotPreferredBit = 0,
  kDisplayModeListNotPreferredMask = (1 << kDisplayModeListNotPreferredBit)
};



enum {
  kComponentListNotPreferredBit = 0,
  kComponentListNotPreferredMask = (1 << kComponentListNotPreferredBit)
};

enum {
  kDisplayTimingInfoVersionZero = 1,
  kDisplayTimingInfoReservedCountVersionZero = 16,
  kDisplayModeEntryVersionZero = 0,
  kDisplayModeEntryVersionOne = 1
};


enum {
  kMakeAndModelReservedCount = 4
};



enum {
  kDisplayGestaltDisplayCommunicationAttr = 'comm',
  kDisplayGestaltForbidI2CMask = (1 << 0),
  kDisplayGestaltUseI2CPowerMask = (1 << 1),
  kDisplayGestaltCalibratorAttr = 'cali',
  kDisplayGestaltBrightnessAffectsGammaMask = (1 << 0),
  kDisplayGestaltViewAngleAffectsGammaMask = (1 << 1)
};


typedef UInt32 DMFidelityType;






typedef void * DMListType;
typedef UInt32 DMListIndexType;
typedef VDPowerStateRec AVPowerStateRec;
typedef VDPowerStateRec * AVPowerStatePtr;
struct DMDisplayTimingInfoRec {
  UInt32 timingInfoVersion;
  UInt32 timingInfoAttributes;
  SInt32 timingInfoRelativeQuality;
  SInt32 timingInfoRelativeDefault;

  UInt32 timingInfoReserved[16];
};
typedef struct DMDisplayTimingInfoRec DMDisplayTimingInfoRec;
typedef DMDisplayTimingInfoRec * DMDisplayTimingInfoPtr;

struct DMComponentListEntryRec {
  DisplayIDType itemID;
  Component itemComponent;
  ComponentDescription itemDescription;

  ResType itemClass;
  DMFidelityType itemFidelity;
  ResType itemSubClass;
  Point itemSort;

  UInt32 itemFlags;
  ResType itemReserved;
  UInt32 itemFuture1;
  UInt32 itemFuture2;
  UInt32 itemFuture3;
  UInt32 itemFuture4;
};
typedef struct DMComponentListEntryRec DMComponentListEntryRec;
typedef DMComponentListEntryRec * DMComponentListEntryPtr;

struct AVLocationRec {
  UInt32 locationConstant;
};
typedef struct AVLocationRec AVLocationRec;
typedef AVLocationRec * AVLocationPtr;
struct DMDepthInfoRec {
  VDSwitchInfoPtr depthSwitchInfo;
  VPBlockPtr depthVPBlock;
  UInt32 depthFlags;
  UInt32 depthReserved1;
  UInt32 depthReserved2;
};
typedef struct DMDepthInfoRec DMDepthInfoRec;
typedef DMDepthInfoRec * DMDepthInfoPtr;
struct DMDepthInfoBlockRec {
  UInt32 depthBlockCount;
  DMDepthInfoPtr depthVPBlock;
  UInt32 depthBlockFlags;
  UInt32 depthBlockReserved1;
  UInt32 depthBlockReserved2;
};
typedef struct DMDepthInfoBlockRec DMDepthInfoBlockRec;
typedef DMDepthInfoBlockRec * DMDepthInfoBlockPtr;
struct DMDisplayModeListEntryRec {
  UInt32 displayModeFlags;
  VDSwitchInfoPtr displayModeSwitchInfo;
  VDResolutionInfoPtr displayModeResolutionInfo;
  VDTimingInfoPtr displayModeTimingInfo;
  DMDepthInfoBlockPtr displayModeDepthBlockInfo;
  UInt32 displayModeVersion;
  StringPtr displayModeName;
  DMDisplayTimingInfoPtr displayModeDisplayInfo;
};
typedef struct DMDisplayModeListEntryRec DMDisplayModeListEntryRec;
typedef DMDisplayModeListEntryRec * DMDisplayModeListEntryPtr;

struct DependentNotifyRec {
  ResType notifyType;
  ResType notifyClass;
  DisplayIDType notifyPortID;
  ComponentInstance notifyComponent;

  UInt32 notifyVersion;
  UInt32 notifyFlags;
  UInt32 notifyReserved;
  UInt32 notifyFuture;
};
typedef struct DependentNotifyRec DependentNotifyRec;
typedef DependentNotifyRec * DependentNotifyPtr;

struct DMMakeAndModelRec {
  ResType manufacturer;
  UInt32 model;
  UInt32 serialNumber;
  UInt32 manufactureDate;

  UInt32 makeReserved[4];
};
typedef struct DMMakeAndModelRec DMMakeAndModelRec;
typedef DMMakeAndModelRec * DMMakeAndModelPtr;

enum {
  kIncludeOnlineActiveDisplaysMask = (1 << 0),
  kIncludeOnlineDisabledDisplaysMask = (1 << 1),
  kIncludeOfflineDisplaysMask = (1 << 2),
  kIncludeOfflineDummyDisplaysMask = (1 << 3),
  kIncludeHardwareMirroredDisplaysMask = (1 << 4)
};


enum {

  kDMModeListIncludeAllModesMask = (1 << 0),
  kDMModeListIncludeOfflineModesMask = (1 << 1),
  kDMModeListExcludeDriverModesMask = (1 << 2),
  kDMModeListExcludeDisplayModesMask = (1 << 3),
  kDMModeListExcludeCustomModesMask = (1 << 4),
  kDMModeListPreferStretchedModesMask = (1 << 5),
  kDMModeListPreferSafeModesMask = (1 << 6)
};



struct DisplayListEntryRec {
  GDHandle displayListEntryGDevice;
  DisplayIDType displayListEntryDisplayID;
  UInt32 displayListEntryIncludeFlags;
  UInt32 displayListEntryReserved1;

  UInt32 displayListEntryReserved2;
  UInt32 displayListEntryReserved3;
  UInt32 displayListEntryReserved4;
  UInt32 displayListEntryReserved5;
};
typedef struct DisplayListEntryRec DisplayListEntryRec;
typedef DisplayListEntryRec * DisplayListEntryPtr;
struct DMProfileListEntryRec {
  CMProfileRef profileRef;
  Ptr profileReserved1;
  Ptr profileReserved2;
  Ptr profileReserved3;
};
typedef struct DMProfileListEntryRec DMProfileListEntryRec;
typedef DMProfileListEntryRec * DMProfileListEntryPtr;
typedef void ( * DMNotificationProcPtr)(AppleEvent * theEvent);
typedef void ( * DMExtendedNotificationProcPtr)(void *userData, short theMessage, void *notifyData);
typedef void ( * DMComponentListIteratorProcPtr)(void *userData, DMListIndexType itemIndex, DMComponentListEntryPtr componentInfo);
typedef void ( * DMDisplayModeListIteratorProcPtr)(void *userData, DMListIndexType itemIndex, DMDisplayModeListEntryPtr displaymodeInfo);
typedef void ( * DMProfileListIteratorProcPtr)(void *userData, DMListIndexType itemIndex, DMProfileListEntryPtr profileInfo);
typedef void ( * DMDisplayListIteratorProcPtr)(void *userData, DMListIndexType itemIndex, DisplayListEntryPtr displaymodeInfo);
typedef DMNotificationProcPtr DMNotificationUPP;
typedef DMExtendedNotificationProcPtr DMExtendedNotificationUPP;
typedef DMComponentListIteratorProcPtr DMComponentListIteratorUPP;
typedef DMDisplayModeListIteratorProcPtr DMDisplayModeListIteratorUPP;
typedef DMProfileListIteratorProcPtr DMProfileListIteratorUPP;
typedef DMDisplayListIteratorProcPtr DMDisplayListIteratorUPP;
# 426 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern DMNotificationUPP
NewDMNotificationUPP(DMNotificationProcPtr userRoutine) ;
# 437 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern DMExtendedNotificationUPP
NewDMExtendedNotificationUPP(DMExtendedNotificationProcPtr userRoutine) ;
# 448 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern DMComponentListIteratorUPP
NewDMComponentListIteratorUPP(DMComponentListIteratorProcPtr userRoutine) ;
# 459 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern DMDisplayModeListIteratorUPP
NewDMDisplayModeListIteratorUPP(DMDisplayModeListIteratorProcPtr userRoutine) ;
# 470 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern DMProfileListIteratorUPP
NewDMProfileListIteratorUPP(DMProfileListIteratorProcPtr userRoutine) ;
# 481 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern DMDisplayListIteratorUPP
NewDMDisplayListIteratorUPP(DMDisplayListIteratorProcPtr userRoutine) ;
# 492 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DisposeDMNotificationUPP(DMNotificationUPP userUPP) ;
# 503 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DisposeDMExtendedNotificationUPP(DMExtendedNotificationUPP userUPP) ;
# 514 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DisposeDMComponentListIteratorUPP(DMComponentListIteratorUPP userUPP) ;
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DisposeDMDisplayModeListIteratorUPP(DMDisplayModeListIteratorUPP userUPP) ;
# 536 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DisposeDMProfileListIteratorUPP(DMProfileListIteratorUPP userUPP) ;
# 547 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DisposeDMDisplayListIteratorUPP(DMDisplayListIteratorUPP userUPP) ;
# 558 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
InvokeDMNotificationUPP(
  AppleEvent * theEvent,
  DMNotificationUPP userUPP) ;
# 571 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
InvokeDMExtendedNotificationUPP(
  void * userData,
  short theMessage,
  void * notifyData,
  DMExtendedNotificationUPP userUPP) ;
# 586 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
InvokeDMComponentListIteratorUPP(
  void * userData,
  DMListIndexType itemIndex,
  DMComponentListEntryPtr componentInfo,
  DMComponentListIteratorUPP userUPP) ;
# 601 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
InvokeDMDisplayModeListIteratorUPP(
  void * userData,
  DMListIndexType itemIndex,
  DMDisplayModeListEntryPtr displaymodeInfo,
  DMDisplayModeListIteratorUPP userUPP) ;
# 616 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
InvokeDMProfileListIteratorUPP(
  void * userData,
  DMListIndexType itemIndex,
  DMProfileListEntryPtr profileInfo,
  DMProfileListIteratorUPP userUPP) ;
# 631 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
InvokeDMDisplayListIteratorUPP(
  void * userData,
  DMListIndexType itemIndex,
  DisplayListEntryPtr displaymodeInfo,
  DMDisplayListIteratorUPP userUPP) ;



    inline DMNotificationUPP NewDMNotificationUPP(DMNotificationProcPtr userRoutine) { return userRoutine; }
    inline DMExtendedNotificationUPP NewDMExtendedNotificationUPP(DMExtendedNotificationProcPtr userRoutine) { return userRoutine; }
    inline DMComponentListIteratorUPP NewDMComponentListIteratorUPP(DMComponentListIteratorProcPtr userRoutine) { return userRoutine; }
    inline DMDisplayModeListIteratorUPP NewDMDisplayModeListIteratorUPP(DMDisplayModeListIteratorProcPtr userRoutine) { return userRoutine; }
    inline DMProfileListIteratorUPP NewDMProfileListIteratorUPP(DMProfileListIteratorProcPtr userRoutine) { return userRoutine; }
    inline DMDisplayListIteratorUPP NewDMDisplayListIteratorUPP(DMDisplayListIteratorProcPtr userRoutine) { return userRoutine; }
    inline void DisposeDMNotificationUPP(DMNotificationUPP) { }
    inline void DisposeDMExtendedNotificationUPP(DMExtendedNotificationUPP) { }
    inline void DisposeDMComponentListIteratorUPP(DMComponentListIteratorUPP) { }
    inline void DisposeDMDisplayModeListIteratorUPP(DMDisplayModeListIteratorUPP) { }
    inline void DisposeDMProfileListIteratorUPP(DMProfileListIteratorUPP) { }
    inline void DisposeDMDisplayListIteratorUPP(DMDisplayListIteratorUPP) { }
    inline void InvokeDMNotificationUPP(AppleEvent * theEvent, DMNotificationUPP userUPP) { (*userUPP)(theEvent); }
    inline void InvokeDMExtendedNotificationUPP(void * userData, short theMessage, void * notifyData, DMExtendedNotificationUPP userUPP) { (*userUPP)(userData, theMessage, notifyData); }
    inline void InvokeDMComponentListIteratorUPP(void * userData, DMListIndexType itemIndex, DMComponentListEntryPtr componentInfo, DMComponentListIteratorUPP userUPP) { (*userUPP)(userData, itemIndex, componentInfo); }
    inline void InvokeDMDisplayModeListIteratorUPP(void * userData, DMListIndexType itemIndex, DMDisplayModeListEntryPtr displaymodeInfo, DMDisplayModeListIteratorUPP userUPP) { (*userUPP)(userData, itemIndex, displaymodeInfo); }
    inline void InvokeDMProfileListIteratorUPP(void * userData, DMListIndexType itemIndex, DMProfileListEntryPtr profileInfo, DMProfileListIteratorUPP userUPP) { (*userUPP)(userData, itemIndex, profileInfo); }
    inline void InvokeDMDisplayListIteratorUPP(void * userData, DMListIndexType itemIndex, DisplayListEntryPtr displaymodeInfo, DMDisplayListIteratorUPP userUPP) { (*userUPP)(userData, itemIndex, displaymodeInfo); }
# 800 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern GDHandle
DMGetFirstScreenDevice(Boolean activeOnly) ;
# 812 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern GDHandle
DMGetNextScreenDevice(
  GDHandle theDevice,
  Boolean activeOnly) ;
# 826 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DMDrawDesktopRect(Rect * globalRect) ;
# 838 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern void
DMDrawDesktopRegion(RgnHandle globalRgn) ;
# 852 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMBeginConfigureDisplays(Handle * displayState) ;
# 864 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMEndConfigureDisplays(Handle displayState) ;
# 876 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMAddDisplay(
  GDHandle newDevice,
  short driver,
  UInt32 mode,
  UInt32 reserved,
  UInt32 displayID,
  Component displayComponent,
  Handle displayState) ;
# 895 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMMoveDisplay(
  GDHandle moveDevice,
  short x,
  short y,
  Handle displayState) ;
# 911 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMDisableDisplay(
  GDHandle disableDevice,
  Handle displayState) ;
# 925 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMEnableDisplay(
  GDHandle enableDevice,
  Handle displayState) ;
# 939 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMRemoveDisplay(
  GDHandle removeDevice,
  Handle displayState) ;
# 956 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSetMainDisplay(
  GDHandle newMainDevice,
  Handle displayState) ;
# 970 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSetDisplayMode(
  GDHandle theDevice,
  UInt32 mode,
  UInt32 * depthMode,
  long reserved,
  Handle displayState) ;
# 987 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMCheckDisplayMode(
  GDHandle theDevice,
  UInt32 mode,
  UInt32 depthMode,
  UInt32 * switchFlags,
  UInt32 reserved,
  Boolean * modeOk) ;
# 1005 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetDeskRegion(RgnHandle * desktopRegion) ;
# 1017 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMRegisterNotifyProc(
  DMNotificationUPP notificationProc,
  DMProcessInfoPtr whichPSN) ;
# 1031 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMRemoveNotifyProc(
  DMNotificationUPP notificationProc,
  DMProcessInfoPtr whichPSN) ;
# 1045 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMQDIsMirroringCapable(Boolean * qdIsMirroringCapable) ;
# 1057 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMCanMirrorNow(Boolean * canMirrorNow) ;
# 1069 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMIsMirroringOn(Boolean * isMirroringOn) ;
# 1081 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMMirrorDevices(
  GDHandle gD1,
  GDHandle gD2,
  Handle displayState) ;
# 1096 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMUnmirrorDevice(
  GDHandle gDevice,
  Handle displayState) ;
# 1110 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetNextMirroredDevice(
  GDHandle gDevice,
  GDHandle * mirroredDevice) ;
# 1124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMBlockMirroring(void) ;
# 1136 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMUnblockMirroring(void) ;
# 1161 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetDisplayIDByGDevice(
  GDHandle displayDevice,
  DisplayIDType * displayID,
  Boolean failToMain) ;
# 1176 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetGDeviceByDisplayID(
  DisplayIDType displayID,
  GDHandle * displayDevice,
  Boolean failToMain) ;
# 1191 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSetDisplayComponent(
  GDHandle theDevice,
  Component displayComponent) ;
# 1205 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetDisplayComponent(
  GDHandle theDevice,
  Component * displayComponent) ;
# 1219 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewDisplay(
  GDHandle * newDevice,
  short driverRefNum,
  UInt32 mode,
  UInt32 reserved,
  DisplayIDType displayID,
  Component displayComponent,
  Handle displayState) ;
# 1238 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMDisposeDisplay(
  GDHandle disposeDevice,
  Handle displayState) ;
# 1252 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMResolveDisplayComponents(void) ;
# 1264 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMRegisterExtendedNotifyProc(
  DMExtendedNotificationUPP notifyProc,
  void * notifyUserData,
  unsigned short nofifyOnFlags,
  DMProcessInfoPtr whichPSN) ;
# 1280 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMRemoveExtendedNotifyProc(
  DMExtendedNotificationUPP notifyProc,
  void * notifyUserData,
  DMProcessInfoPtr whichPSN,
  unsigned short removeFlags) ;
# 1296 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVPanelList(
  DisplayIDType displayID,
  ResType panelType,
  DMFidelityType minimumFidelity,
  UInt32 panelListFlags,
  UInt32 reserved,
  DMListIndexType * thePanelCount,
  DMListType * thePanelList) ;
# 1315 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVEngineList(
  DisplayIDType displayID,
  ResType engineType,
  DMFidelityType minimumFidelity,
  UInt32 engineListFlags,
  UInt32 reserved,
  DMListIndexType * engineCount,
  DMListType * engineList) ;
# 1334 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVDeviceList(
  ResType deviceType,
  UInt32 deviceListFlags,
  UInt32 reserved,
  DMListIndexType * deviceCount,
  DMListType * deviceList) ;
# 1351 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVPortListByPortType(
  ResType subType,
  UInt32 portListFlags,
  UInt32 reserved,
  DMListIndexType * devicePortCount,
  DMListType * theDevicePortList) ;
# 1368 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetIndexedComponentFromList(
  DMListType panelList,
  DMListIndexType itemIndex,
  UInt32 reserved,
  DMComponentListIteratorUPP listIterator,
  void * userData) ;
# 1385 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMDisposeList(DMListType panelList) ;
# 1397 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetNameByAVID(
  AVIDType theID,
  UInt32 nameFlags,
  Str255 name) ;
# 1412 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVIDByPortComponent(
  Component thePortComponent,
  ResType portKind,
  UInt32 reserved,
  AVIDType * newID) ;
# 1428 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetPortComponentByAVID(
  DisplayIDType thePortID,
  Component * thePortComponent,
  ComponentDescription * theDesciption,
  ResType * thePortKind) ;
# 1444 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSendDependentNotification(
  ResType notifyType,
  ResType notifyClass,
  AVIDType displayID,
  ComponentInstance notifyComponent) ;
# 1460 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMDisposeAVComponent(Component theAVComponent) ;
# 1472 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSaveScreenPrefs(
  UInt32 reserved1,
  UInt32 saveFlags,
  UInt32 reserved2) ;
# 1487 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVIDByDeviceComponent(
  Component theDeviceComponent,
  ResType portKind,
  UInt32 reserved,
  DisplayIDType * newID) ;
# 1503 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewAVPortListByDeviceAVID(
  AVIDType theID,
  DMFidelityType minimumFidelity,
  UInt32 portListFlags,
  UInt32 reserved,
  DMListIndexType * devicePortCount,
  DMListType * theDevicePortList) ;
# 1521 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetDeviceComponentByAVID(
  AVIDType theDeviceID,
  Component * theDeviceComponent,
  ComponentDescription * theDesciption,
  ResType * theDeviceKind) ;
# 1537 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMNewDisplayModeList(
  DisplayIDType displayID,
  UInt32 modeListFlags,
  UInt32 reserved,
  DMListIndexType * thePanelCount,
  DMListType * thePanelList) ;
# 1554 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetIndexedDisplayModeFromList(
  DMListType panelList,
  DMListIndexType itemIndex,
  UInt32 reserved,
  DMDisplayModeListIteratorUPP listIterator,
  void * userData) ;
# 1571 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetGraphicInfoByAVID(
  AVIDType theID,
  PicHandle * theAVPcit,
  Handle * theAVIconSuite,
  AVLocationRec * theAVLocation) ;
# 1587 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetAVPowerState(
  AVIDType theID,
  AVPowerStatePtr getPowerState,
  UInt32 reserved1) ;
# 1602 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSetAVPowerState(
  AVIDType theID,
  AVPowerStatePtr setPowerState,
  UInt32 powerFlags,
  Handle displayState) ;
# 1618 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetDeviceAVIDByPortAVID(
  AVIDType portAVID,
  AVIDType * deviceAVID) ;
# 1632 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetEnableByAVID(
  AVIDType theAVID,
  Boolean * isAVIDEnabledNow,
  Boolean * canChangeEnableNow) ;
# 1647 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMSetEnableByAVID(
  AVIDType theAVID,
  Boolean doEnable,
  Handle displayState) ;
# 1662 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMGetDisplayMode(
  GDHandle theDevice,
  VDSwitchInfoPtr switchInfo) ;
# 1676 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Displays.h" 3
extern OSErr
DMConfirmConfiguration(
  DMModalFilterUPP filterProc,
  UInt32 confirmFlags,
  UInt32 reserved,
  Handle displayState) ;





#pragma pack(pop)


}
# 83 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 1 3
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern "C" {


#pragma options align=power



typedef UInt32 FNSMatchOptions;
enum {
  kFNSMatchNames = 0x00000001,
  kFNSMatchTechnology = 0x00000002,
  kFNSMatchGlyphs = 0x00000004,
  kFNSMatchEncodings = 0x00000008,
  kFNSMatchQDMetrics = 0x00000010,
  kFNSMatchATSUMetrics = 0x00000020,
  kFNSMatchKerning = 0x00000040,
  kFNSMatchWSLayout = 0x00000080,
  kFNSMatchAATLayout = 0x00000100,
  kFNSMatchPrintEncoding = 0x00000200,
  kFNSMissingDataNoMatch = (UInt32)0x80000000,
  kFNSMatchAll = (UInt32)0xFFFFFFFF,
  kFNSMatchDefaults = 0
};
# 72 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern FNSMatchOptions
FNSMatchDefaultsGet(void) ;




typedef UInt32 FNSObjectVersion;
enum {
  kFNSVersionDontCare = 0,
  kFNSCurSysInfoVersion = 1
};


typedef UInt32 FNSFeatureFlags;




struct FNSSysInfo {
  FNSObjectVersion iSysInfoVersion;
  FNSFeatureFlags oFeatures;
  FNSObjectVersion oCurRefVersion;
  FNSObjectVersion oMinRefVersion;
  FNSObjectVersion oCurProfileVersion;
  FNSObjectVersion oMinProfileVersion;
  UInt16 oFontSyncVersion;
};
typedef struct FNSSysInfo FNSSysInfo;
# 108 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern void
FNSSysInfoGet(FNSSysInfo * ioInfo) ;




typedef struct OpaqueFNSFontReference* FNSFontReference;
# 123 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceGetVersion(
  FNSFontReference iReference,
  FNSObjectVersion * oVersion) ;
# 137 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceDispose(FNSFontReference iReference) ;
# 149 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceMatch(
  FNSFontReference iReference1,
  FNSFontReference iReference2,
  FNSMatchOptions iOptions,
  FNSMatchOptions * oFailedMatchOptions) ;
# 165 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceFlattenedSize(
  FNSFontReference iReference,
  ByteCount * oFlattenedSize) ;
# 179 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceFlatten(
  FNSFontReference iReference,
  void * oFlatReference,
  ByteCount * oFlattenedSize) ;
# 194 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceUnflatten(
  const void * iFlatReference,
  ByteCount iFlattenedSize,
  FNSFontReference * oReference) ;




enum {
  kFNSCreatorDefault = 0,
  kFNSProfileFileType = 'fnsp'
};

typedef struct OpaqueFNSFontProfile* FNSFontProfile;
# 217 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileCreate(
  const FSSpec * iFile,
  FourCharCode iCreator,
  ItemCount iEstNumRefs,
  FNSObjectVersion iDesiredVersion,
  FNSFontProfile * oProfile) ;
# 234 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileOpen(
  const FSSpec * iFile,
  Boolean iOpenForWrite,
  FNSFontProfile * oProfile) ;
# 250 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileCreateWithFSRef(
  const FSRef * iParentDirectory,
  UniCharCount iNameLength,
  const UniChar * iName,
  FourCharCode iCreator,
  ItemCount iEstNumRefs,
  FNSObjectVersion iDesiredVersion,
  FNSFontProfile * oProfile) ;
# 269 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileOpenWithFSRef(
  const FSRef * iFile,
  Boolean iOpenForWrite,
  FNSFontProfile * oProfile) ;
# 284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileGetVersion(
  FNSFontProfile iProfile,
  FNSObjectVersion * oVersion) ;
# 298 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileCompact(FNSFontProfile iProfile) ;
# 310 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileClose(FNSFontProfile iProfile) ;
# 322 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileAddReference(
  FNSFontProfile iProfile,
  FNSFontReference iReference) ;
# 336 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileRemoveReference(
  FNSFontProfile iProfile,
  FNSFontReference iReference) ;
# 350 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileRemoveIndReference(
  FNSFontProfile iProfile,
  UInt32 iIndex) ;
# 364 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileClear(FNSFontProfile iProfile) ;
# 376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileCountReferences(
  FNSFontProfile iProfile,
  ItemCount * oCount) ;
# 390 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileGetIndReference(
  FNSFontProfile iProfile,
  UInt32 iWhichReference,
  FNSFontReference * oReference) ;
# 405 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSProfileMatchReference(
  FNSFontProfile iProfile,
  FNSFontReference iReference,
  FNSMatchOptions iMatchOptions,
  ItemCount iOutputSize,
  UInt32 oIndices[],
  ItemCount * oNumMatches) ;
# 425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceCreate(
  FMFont iFont,
  FNSObjectVersion iDesiredVersion,
  FNSFontReference * oReference) ;
# 440 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceMatchFonts(
  FNSFontReference iReference,
  FNSMatchOptions iMatchOptions,
  ItemCount iOutputSize,
  FMFont oFonts[],
  ItemCount * oNumMatches) ;
# 459 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceCreateFromFamily(
  FMFontFamily iFamily,
  FMFontStyle iStyle,
  FNSObjectVersion iDesiredVersion,
  FNSFontReference * oReference,
  FMFontStyle * oActualStyle) ;
# 476 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceMatchFamilies(
  FNSFontReference iReference,
  FNSMatchOptions iMatchOptions,
  ItemCount iOutputSize,
  FMFontFamilyInstance oFonts[],
  ItemCount * oNumMatches) ;
# 495 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceGetFamilyInfo(
  FNSFontReference iReference,
  Str255 oFamilyName,
  ScriptCode * oFamilyNameScript,
  FMFontStyle * oActualStyle) ;
# 511 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceCountNames(
  FNSFontReference iReference,
  ItemCount * oNameCount) ;
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceGetIndName(
  FNSFontReference iReference,
  ItemCount iFontNameIndex,
  ByteCount iMaximumNameLength,
  Ptr oName,
  ByteCount * oActualNameLength,
  FontNameCode * oFontNameCode,
  FontPlatformCode * oFontNamePlatform,
  FontScriptCode * oFontNameScript,
  FontLanguageCode * oFontNameLanguage) ;
# 546 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern OSStatus
FNSReferenceFindName(
  FNSFontReference iReference,
  FontNameCode iFontNameCode,
  FontPlatformCode iFontNamePlatform,
  FontScriptCode iFontNameScript,
  FontLanguageCode iFontNameLanguage,
  ByteCount iMaximumNameLength,
  Ptr oName,
  ByteCount * oActualNameLength,
  ItemCount * oFontNameIndex) ;
# 568 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/FontSync.h" 3
extern Boolean
FNSEnabled(void) ;



#pragma options align=reset


}
# 87 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 1 3
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 1 3
# 56 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
extern "C" {


#pragma pack(push, 2)
# 76 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef struct OpaqueATSUTextLayout* ATSUTextLayout;
# 91 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef struct OpaqueATSUStyle* ATSUStyle;
# 102 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef struct OpaqueATSUFontFallbacks* ATSUFontFallbacks;
# 114 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef Fixed ATSUTextMeasurement;
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef FMFont ATSUFontID;
# 136 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUFontFeatureType;
# 146 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUFontFeatureSelector;
# 156 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef FourCharCode ATSUFontVariationAxis;
# 166 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef Fixed ATSUFontVariationValue;
# 183 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt32 ATSUAttributeTag;
enum {





  kATSULineWidthTag = 1L,





  kATSULineRotationTag = 2L,






  kATSULineDirectionTag = 3L,





  kATSULineJustificationFactorTag = 4L,





  kATSULineFlushFactorTag = 5L,






  kATSULineBaselineValuesTag = 6L,







  kATSULineLayoutOptionsTag = 7L,
# 239 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSULineAscentTag = 8L,
# 248 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSULineDescentTag = 9L,






  kATSULineLangRegionTag = 10L,






  kATSULineTextLocatorTag = 11L,






  kATSULineTruncationTag = 12L,
# 282 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSULineFontFallbacksTag = 13L,







  kATSULineDecimalTabCharacterTag = 14L,







  kATSULayoutOperationOverrideTag = 15L,






  kATSULineHighlightCGColorTag = 17L,





  kATSUMaxLineTag = 18L,




  kATSULineLanguageTag = 10L,
# 325 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSUCGContextTag = 32767L,







  kATSUQDBoldfaceTag = 256L,







  kATSUQDItalicTag = 257L,





  kATSUQDUnderlineTag = 258L,





  kATSUQDCondensedTag = 259L,





  kATSUQDExtendedTag = 260L,





  kATSUFontTag = 261L,





  kATSUSizeTag = 262L,





  kATSUColorTag = 263L,






  kATSULangRegionTag = 264L,







  kATSUVerticalCharacterTag = 265L,





  kATSUImposeWidthTag = 266L,




  kATSUBeforeWithStreamShiftTag = 267L,




  kATSUAfterWithStreamShiftTag = 268L,




  kATSUCrossStreamShiftTag = 269L,





  kATSUTrackingTag = 270L,




  kATSUHangingInhibitFactorTag = 271L,




  kATSUKerningInhibitFactorTag = 272L,





  kATSUDecompositionFactorTag = 273L,







  kATSUBaselineClassTag = 274L,






  kATSUPriorityJustOverrideTag = 275L,






  kATSUNoLigatureSplitTag = 276L,






  kATSUNoCaretAngleTag = 277L,






  kATSUSuppressCrossKerningTag = 278L,






  kATSUNoOpticalAlignmentTag = 279L,






  kATSUForceHangingTag = 280L,






  kATSUNoSpecialJustificationTag = 281L,






  kATSUStyleTextLocatorTag = 282L,







  kATSUStyleRenderingOptionsTag = 283L,
# 516 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSUAscentTag = 284L,
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSUDescentTag = 285L,
# 534 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSULeadingTag = 286L,






  kATSUGlyphSelectorTag = 287L,






  kATSURGBAlphaColorTag = 288L,







  kATSUFontMatrixTag = 289L,






  kATSUStyleUnderlineCountOptionTag = 290L,






  kATSUStyleUnderlineColorOptionTag = 291L,





  kATSUStyleStrikeThroughTag = 292L,






  kATSUStyleStrikeThroughCountOptionTag = 293L,






  kATSUStyleStrikeThroughColorOptionTag = 294L,






  kATSUStyleDropShadowTag = 295L,





  kATSUStyleDropShadowBlurOptionTag = 296L,






  kATSUStyleDropShadowOffsetOptionTag = 297L,





  kATSUStyleDropShadowColorOptionTag = 298L,





  kATSUMaxStyleTag = 299L,






  kATSULanguageTag = 264L,
  kATSUMaxATSUITagValue = 65535L
};
# 641 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef void * ATSUAttributeValuePtr;
typedef const void * ConstATSUAttributeValuePtr;
# 660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUAttributeInfo {
  ATSUAttributeTag fTag;
  ByteCount fValueSize;
};
typedef struct ATSUAttributeInfo ATSUAttributeInfo;
# 679 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUCaret {
  Fixed fX;
  Fixed fY;
  Fixed fDeltaX;
  Fixed fDeltaY;
};
typedef struct ATSUCaret ATSUCaret;
# 696 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUCursorMovementType;
enum {





  kATSUByCharacter = 0,





  kATSUByTypographicCluster = 1,




  kATSUByWord = 2,




  kATSUByCharacterCluster = 3,




  kATSUByCluster = 1
};
# 747 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt32 ATSULineTruncation;
enum {
  kATSUTruncateNone = 0,
  kATSUTruncateStart = 1,
  kATSUTruncateEnd = 2,
  kATSUTruncateMiddle = 3,
  kATSUTruncateSpecificationMask = 0x00000007,
  kATSUTruncFeatNoSquishing = 0x00000008
};
# 766 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUStyleLineCountType;
enum {
  kATSUStyleSingleLineCount = 1,
  kATSUStyleDoubleLineCount = 2
};
# 782 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUVerticalCharacterType;
enum {
  kATSUStronglyHorizontal = 0,
  kATSUStronglyVertical = 1
};
# 799 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUStyleComparison;
enum {
  kATSUStyleUnequal = 0,
  kATSUStyleContains = 1,
  kATSUStyleEquals = 2,
  kATSUStyleContainedBy = 3
};
# 818 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUFontFallbackMethod;
enum {





  kATSUDefaultFontFallbacks = 0,





  kATSULastResortOnlyFallback = 1,
# 840 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSUSequentialFallbacksPreferred = 2,
# 850 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
  kATSUSequentialFallbacksExclusive = 3
};
# 871 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 ATSUTabType;
enum {
  kATSULeftTab = 0,
  kATSUCenterTab = 1,
  kATSURightTab = 2,
  kATSUDecimalTab = 3,
  kATSUNumberTabTypes = 4
};
# 889 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUTab {
  ATSUTextMeasurement tabPosition;
  ATSUTabType tabType;
};
typedef struct ATSUTab ATSUTab;
# 903 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSURGBAlphaColor {
  float red;
  float green;
  float blue;
  float alpha;
};
typedef struct ATSURGBAlphaColor ATSURGBAlphaColor;
# 922 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt16 GlyphCollection;
enum {
  kGlyphCollectionGID = 0,
  kGlyphCollectionAdobeCNS1 = 1,
  kGlyphCollectionAdobeGB1 = 2,
  kGlyphCollectionAdobeJapan1 = 3,
  kGlyphCollectionAdobeJapan2 = 4,
  kGlyphCollectionAdobeKorea1 = 5,
  kGlyphCollectionUnspecified = 0xFF
};
# 944 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUGlyphSelector {





  GlyphCollection collection;






  GlyphID glyphID;
};
typedef struct ATSUGlyphSelector ATSUGlyphSelector;
# 974 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUGlyphInfo {
  GlyphID glyphID;
  UInt16 reserved;
  UInt32 layoutFlags;
  UniCharArrayOffset charIndex;
  ATSUStyle style;
  Float32 deltaY;
  Float32 idealX;
  SInt16 screenX;
  SInt16 caretX;
};
typedef struct ATSUGlyphInfo ATSUGlyphInfo;
# 1002 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUGlyphInfoArray {
  ATSUTextLayout layout;
  ItemCount numGlyphs;
  ATSUGlyphInfo glyphs[1];
};
typedef struct ATSUGlyphInfoArray ATSUGlyphInfoArray;
# 1029 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt32 ATSUHighlightMethod;
enum {
  kInvertHighlighting = 0,
  kRedrawHighlighting = 1
};
# 1046 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef UInt32 ATSUBackgroundDataType;
enum {
  kATSUBackgroundColor = 0,
  kATSUBackgroundCallback = 1
};
# 1063 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef ATSURGBAlphaColor ATSUBackgroundColor;
# 1110 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
typedef Boolean ( * RedrawBackgroundProcPtr)(ATSUTextLayout iLayout, UniCharArrayOffset iTextOffset, UniCharCount iTextLength, ATSTrapezoid iUnhighlightArea[], ItemCount iTrapezoidCount);
typedef RedrawBackgroundProcPtr RedrawBackgroundUPP;
# 1120 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
extern RedrawBackgroundUPP
NewRedrawBackgroundUPP(RedrawBackgroundProcPtr userRoutine) ;
# 1131 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
extern void
DisposeRedrawBackgroundUPP(RedrawBackgroundUPP userUPP) ;
# 1142 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
extern Boolean
InvokeRedrawBackgroundUPP(
  ATSUTextLayout iLayout,
  UniCharArrayOffset iTextOffset,
  UniCharCount iTextLength,
  ATSTrapezoid iUnhighlightArea[],
  ItemCount iTrapezoidCount,
  RedrawBackgroundUPP userUPP) ;



    inline RedrawBackgroundUPP NewRedrawBackgroundUPP(RedrawBackgroundProcPtr userRoutine) { return userRoutine; }
    inline void DisposeRedrawBackgroundUPP(RedrawBackgroundUPP) { }
    inline Boolean InvokeRedrawBackgroundUPP(ATSUTextLayout iLayout, UniCharArrayOffset iTextOffset, UniCharCount iTextLength, ATSTrapezoid iUnhighlightArea[], ItemCount iTrapezoidCount, RedrawBackgroundUPP userUPP) { return (*userUPP)(iLayout, iTextOffset, iTextLength, iUnhighlightArea, iTrapezoidCount); }
# 1180 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
union ATSUBackgroundData {




  ATSUBackgroundColor backgroundColor;





  RedrawBackgroundUPP backgroundUPP;
};
typedef union ATSUBackgroundData ATSUBackgroundData;
# 1217 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
struct ATSUUnhighlightData {







  ATSUBackgroundDataType dataType;






  ATSUBackgroundData unhighlightData;
};
typedef struct ATSUUnhighlightData ATSUUnhighlightData;
# 1247 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
enum {




  kATSULeftToRightBaseDirection = 0,




  kATSURightToLeftBaseDirection = 1
};
# 1272 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
enum {
  kATSUInvalidFontID = 0
};
# 1284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
enum {
  kATSUUseLineControlWidth = 0x7FFFFFFF
};
# 1295 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
enum {
  kATSUNoSelector = 0x0000FFFF
};
# 1310 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeTypes.h" 3
enum {




  kATSUFromTextBeginning = (UInt32)0xFFFFFFFF,




  kATSUToTextEnd = (UInt32)0xFFFFFFFF,




  kATSUFromPreviousLayout = (UInt32)0xFFFFFFFE,




  kATSUFromFollowingLayout = (UInt32)0xFFFFFFFD
};






enum {






  kATSUUseGrafPortPenLoc = (UInt32)0xFFFFFFFF,






  kATSUClearAll = (UInt32)0xFFFFFFFF
};


#pragma pack(pop)


}
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern "C" {
# 74 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateStyle(ATSUStyle * oStyle) ;
# 111 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateAndCopyStyle(
  ATSUStyle iStyle,
  ATSUStyle * oStyle) ;
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUDisposeStyle(ATSUStyle iStyle) ;
# 187 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetStyleRefCon(
  ATSUStyle iStyle,
  URefCon iRefCon) ;
# 224 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetStyleRefCon(
  ATSUStyle iStyle,
  URefCon * oRefCon) ;
# 272 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCompareStyles(
  ATSUStyle iFirstStyle,
  ATSUStyle iSecondStyle,
  ATSUStyleComparison * oComparison) ;
# 312 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCopyAttributes(
  ATSUStyle iSourceStyle,
  ATSUStyle iDestinationStyle) ;
# 364 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUOverwriteAttributes(
  ATSUStyle iSourceStyle,
  ATSUStyle iDestinationStyle) ;
# 417 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUUnderwriteAttributes(
  ATSUStyle iSourceStyle,
  ATSUStyle iDestinationStyle) ;
# 455 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUClearStyle(ATSUStyle iStyle) ;
# 493 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUStyleIsEmpty(
  ATSUStyle iStyle,
  Boolean * oIsClear) ;
# 559 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCalculateBaselineDeltas(
  ATSUStyle iStyle,
  BslnBaselineClass iBaselineClass,
  BslnBaselineRecord oBaselineDeltas) ;
# 624 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetAttributes(
  ATSUStyle iStyle,
  ItemCount iAttributeCount,
  const ATSUAttributeTag iTag[],
  const ByteCount iValueSize[],
  const ATSUAttributeValuePtr iValue[]) ;
# 680 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetAttribute(
  ATSUStyle iStyle,
  ATSUAttributeTag iTag,
  ByteCount iExpectedValueSize,
  ATSUAttributeValuePtr oValue,
  ByteCount * oActualValueSize) ;
# 746 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetAllAttributes(
  ATSUStyle iStyle,
  ATSUAttributeInfo oAttributeInfoArray[],
  ItemCount iTagValuePairArraySize,
  ItemCount * oTagValuePairCount) ;
# 796 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUClearAttributes(
  ATSUStyle iStyle,
  ItemCount iTagCount,
  const ATSUAttributeTag iTag[]) ;
# 846 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateTextLayout(ATSUTextLayout * oTextLayout) ;
# 884 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateAndCopyTextLayout(
  ATSUTextLayout iTextLayout,
  ATSUTextLayout * oTextLayout) ;
# 991 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateTextLayoutWithTextPtr(
  ConstUniCharArrayPtr iText,
  UniCharArrayOffset iTextOffset,
  UniCharCount iTextLength,
  UniCharCount iTextTotalLength,
  ItemCount iNumberOfRuns,
  const UniCharCount iRunLengths[],
  ATSUStyle iStyles[],
  ATSUTextLayout * oTextLayout) ;
# 1057 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUClearLayoutCache(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart) ;
# 1098 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUDisposeTextLayout(ATSUTextLayout iTextLayout) ;
# 1138 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetTextLayoutRefCon(
  ATSUTextLayout iTextLayout,
  URefCon iRefCon) ;
# 1173 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetTextLayoutRefCon(
  ATSUTextLayout iTextLayout,
  URefCon * oRefCon) ;
# 1264 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetTextPointerLocation(
  ATSUTextLayout iTextLayout,
  ConstUniCharArrayPtr iText,
  UniCharArrayOffset iTextOffset,
  UniCharCount iTextLength,
  UniCharCount iTextTotalLength) ;
# 1329 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetTextLocation(
  ATSUTextLayout iTextLayout,
  void ** oText,
  Boolean * oTextIsStoredInHandle,
  UniCharArrayOffset * oOffset,
  UniCharCount * oTextLength,
  UniCharCount * oTextTotalLength) ;
# 1394 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUTextDeleted(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iDeletedRangeStart,
  UniCharCount iDeletedRangeLength) ;
# 1445 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUTextInserted(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iInsertionLocation,
  UniCharCount iInsertionLength) ;
# 1482 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUTextMoved(
  ATSUTextLayout iTextLayout,
  ConstUniCharArrayPtr iNewLocation) ;
# 1527 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCopyLayoutControls(
  ATSUTextLayout iSourceTextLayout,
  ATSUTextLayout iDestTextLayout) ;
# 1593 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetLayoutControls(
  ATSUTextLayout iTextLayout,
  ItemCount iAttributeCount,
  const ATSUAttributeTag iTag[],
  const ByteCount iValueSize[],
  const ATSUAttributeValuePtr iValue[]) ;
# 1663 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetLayoutControl(
  ATSUTextLayout iTextLayout,
  ATSUAttributeTag iTag,
  ByteCount iExpectedValueSize,
  ATSUAttributeValuePtr oValue,
  ByteCount * oActualValueSize) ;
# 1733 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetAllLayoutControls(
  ATSUTextLayout iTextLayout,
  ATSUAttributeInfo oAttributeInfoArray[],
  ItemCount iTagValuePairArraySize,
  ItemCount * oTagValuePairCount) ;
# 1783 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUClearLayoutControls(
  ATSUTextLayout iTextLayout,
  ItemCount iTagCount,
  const ATSUAttributeTag iTag[]) ;
# 1840 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCopyLineControls(
  ATSUTextLayout iSourceTextLayout,
  UniCharArrayOffset iSourceLineStart,
  ATSUTextLayout iDestTextLayout,
  UniCharArrayOffset iDestLineStart) ;
# 1918 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetLineControls(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  ItemCount iAttributeCount,
  const ATSUAttributeTag iTag[],
  const ByteCount iValueSize[],
  const ATSUAttributeValuePtr iValue[]) ;
# 1987 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetLineControl(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  ATSUAttributeTag iTag,
  ByteCount iExpectedValueSize,
  ATSUAttributeValuePtr oValue,
  ByteCount * oActualValueSize) ;
# 2062 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetAllLineControls(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  ATSUAttributeInfo oAttributeInfoArray[],
  ItemCount iTagValuePairArraySize,
  ItemCount * oTagValuePairCount) ;
# 2115 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUClearLineControls(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  ItemCount iTagCount,
  const ATSUAttributeTag iTag[]) ;
# 2186 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetRunStyle(
  ATSUTextLayout iTextLayout,
  ATSUStyle iStyle,
  UniCharArrayOffset iRunStart,
  UniCharCount iRunLength) ;
# 2252 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetRunStyle(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOffset,
  ATSUStyle * oStyle,
  UniCharArrayOffset * oRunStart,
  UniCharCount * oRunLength) ;
# 2305 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetContinuousAttributes(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOffset,
  UniCharCount iLength,
  ATSUStyle oStyle) ;
# 2352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetTabArray(
  ATSUTextLayout iTextLayout,
  const ATSUTab iTabs[],
  ItemCount iTabCount) ;
# 2407 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetTabArray(
  ATSUTextLayout iTextLayout,
  ItemCount iMaxTabCount,
  ATSUTab oTabs[],
  ItemCount * oTabCount) ;
# 2450 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateFontFallbacks(ATSUFontFallbacks * oFontFallback) ;
# 2480 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUDisposeFontFallbacks(ATSUFontFallbacks iFontFallbacks) ;
# 2535 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetObjFontFallbacks(
  ATSUFontFallbacks iFontFallbacks,
  ItemCount iFontFallbacksCount,
  const ATSUFontID iFonts[],
  ATSUFontFallbackMethod iFontFallbackMethod) ;
# 2590 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetObjFontFallbacks(
  ATSUFontFallbacks iFontFallbacks,
  ItemCount iMaxFontFallbacksCount,
  ATSUFontID oFonts[],
  ATSUFontFallbackMethod * oFontFallbackMethod,
  ItemCount * oActualFallbacksCount) ;
# 2687 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUMatchFontsToText(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iTextStart,
  UniCharCount iTextLength,
  ATSUFontID * oFontID,
  UniCharArrayOffset * oChangedOffset,
  UniCharCount * oChangedLength) ;
# 2730 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetTransientFontMatching(
  ATSUTextLayout iTextLayout,
  Boolean iTransientFontMatching) ;
# 2770 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetTransientFontMatching(
  ATSUTextLayout iTextLayout,
  Boolean * oTransientFontMatching) ;
# 2807 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetFontFallbacks(
  ItemCount iFontFallbacksCount,
  const ATSUFontID iFontIDs[],
  ATSUFontFallbackMethod iFontFallbackMethod) ;
# 2840 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUGetFontFallbacks(
  ItemCount iMaxFontFallbacksCount,
  ATSUFontID oFontIDs[],
  ATSUFontFallbackMethod * oFontFallbackMethod,
  ItemCount * oActualFallbacksCount) ;
# 2866 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUCreateTextLayoutWithTextHandle(
  UniCharArrayHandle iText,
  UniCharArrayOffset iTextOffset,
  UniCharCount iTextLength,
  UniCharCount iTextTotalLength,
  ItemCount iNumberOfRuns,
  const UniCharCount iRunLengths[],
  ATSUStyle iStyles[],
  ATSUTextLayout * oTextLayout) __attribute__((deprecated));
# 2893 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUSetTextHandleLocation(
  ATSUTextLayout iTextLayout,
  UniCharArrayHandle iText,
  UniCharArrayOffset iTextOffset,
  UniCharCount iTextLength,
  UniCharCount iTextTotalLength) __attribute__((deprecated));
# 2924 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeObjects.h" 3
extern OSStatus
ATSUIdle(ATSUTextLayout iTextLayout) __attribute__((deprecated));




}
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern "C" {
# 121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUDrawText(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineOffset,
  UniCharCount iLineLength,
  ATSUTextMeasurement iLocationX,
  ATSUTextMeasurement iLocationY) ;
# 210 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUGetUnjustifiedBounds(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  UniCharCount iLineLength,
  ATSUTextMeasurement * oTextBefore,
  ATSUTextMeasurement * oTextAfter,
  ATSUTextMeasurement * oAscent,
  ATSUTextMeasurement * oDescent) ;
# 296 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUMeasureTextImage(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineOffset,
  UniCharCount iLineLength,
  ATSUTextMeasurement iLocationX,
  ATSUTextMeasurement iLocationY,
  Rect * oTextImageRect) ;
# 428 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUGetGlyphBounds(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iTextBasePointX,
  ATSUTextMeasurement iTextBasePointY,
  UniCharArrayOffset iBoundsCharStart,
  UniCharCount iBoundsCharLength,
  UInt16 iTypeOfBounds,
  ItemCount iMaxNumberOfBounds,
  ATSTrapezoid oGlyphBounds[],
  ItemCount * oActualNumberOfBounds) ;
# 492 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUBatchBreakLines(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iRangeStart,
  UniCharCount iRangeLength,
  ATSUTextMeasurement iLineWidth,
  ItemCount * oBreakCount) ;
# 570 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUBreakLine(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  ATSUTextMeasurement iLineWidth,
  Boolean iUseAsSoftLineBreak,
  UniCharArrayOffset * oLineBreak) ;
# 613 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUSetSoftLineBreak(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineBreak) ;
# 684 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUGetSoftLineBreaks(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iRangeStart,
  UniCharCount iRangeLength,
  ItemCount iMaximumBreaks,
  UniCharArrayOffset oBreaks[],
  ItemCount * oBreakCount) ;
# 732 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUClearSoftLineBreaks(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iRangeStart,
  UniCharCount iRangeLength) ;
# 818 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUSetHighlightingMethod(
  ATSUTextLayout iTextLayout,
  ATSUHighlightMethod iMethod,
  const ATSUUnhighlightData * iUnhighlightData) ;
# 892 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUHighlightText(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iTextBasePointX,
  ATSUTextMeasurement iTextBasePointY,
  UniCharArrayOffset iHighlightStart,
  UniCharCount iHighlightLength) ;
# 967 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUUnhighlightText(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iTextBasePointX,
  ATSUTextMeasurement iTextBasePointY,
  UniCharArrayOffset iHighlightStart,
  UniCharCount iHighlightLength) ;
# 1040 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUGetTextHighlight(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iTextBasePointX,
  ATSUTextMeasurement iTextBasePointY,
  UniCharArrayOffset iHighlightStart,
  UniCharCount iHighlightLength,
  RgnHandle oHighlightRegion) ;
# 1107 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUHighlightInactiveText(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iTextBasePointX,
  ATSUTextMeasurement iTextBasePointY,
  UniCharArrayOffset iHighlightStart,
  UniCharCount iHighlightLength) ;
# 1230 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUPositionToOffset(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iLocationX,
  ATSUTextMeasurement iLocationY,
  UniCharArrayOffset * ioPrimaryOffset,
  Boolean * oIsLeading,
  UniCharArrayOffset * oSecondaryOffset) ;
# 1325 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUOffsetToPosition(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOffset,
  Boolean iIsLeading,
  ATSUCaret * oMainCaret,
  ATSUCaret * oSecondCaret,
  Boolean * oCaretIsSplit) ;
# 1412 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUPositionToCursorOffset(
  ATSUTextLayout iTextLayout,
  ATSUTextMeasurement iLocationX,
  ATSUTextMeasurement iLocationY,
  ATSUCursorMovementType iMovementType,
  UniCharArrayOffset * ioPrimaryOffset,
  Boolean * oIsLeading,
  UniCharArrayOffset * oSecondaryOffset) ;
# 1492 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUOffsetToCursorPosition(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOffset,
  Boolean iIsLeading,
  ATSUCursorMovementType iMovementType,
  ATSUCaret * oMainCaret,
  ATSUCaret * oSecondCaret,
  Boolean * oCaretIsSplit) ;
# 1547 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUNextCursorPosition(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOldOffset,
  ATSUCursorMovementType iMovementType,
  UniCharArrayOffset * oNewOffset) ;
# 1596 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUPreviousCursorPosition(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOldOffset,
  ATSUCursorMovementType iMovementType,
  UniCharArrayOffset * oNewOffset) ;
# 1652 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSURightwardCursorPosition(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOldOffset,
  ATSUCursorMovementType iMovementType,
  UniCharArrayOffset * oNewOffset) ;
# 1708 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSULeftwardCursorPosition(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iOldOffset,
  ATSUCursorMovementType iMovementType,
  UniCharArrayOffset * oNewOffset) ;
# 1733 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDrawing.h" 3
extern OSStatus
ATSUMeasureText(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  UniCharCount iLineLength,
  ATSUTextMeasurement * oTextBefore,
  ATSUTextMeasurement * oTextAfter,
  ATSUTextMeasurement * oAscent,
  ATSUTextMeasurement * oDescent) ;




}
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern "C" {
# 90 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUSetFontFeatures(
  ATSUStyle iStyle,
  ItemCount iFeatureCount,
  const ATSUFontFeatureType iType[],
  const ATSUFontFeatureSelector iSelector[]) ;
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontFeature(
  ATSUStyle iStyle,
  ItemCount iFeatureIndex,
  ATSUFontFeatureType * oFeatureType,
  ATSUFontFeatureSelector * oFeatureSelector) ;
# 228 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetAllFontFeatures(
  ATSUStyle iStyle,
  ItemCount iMaximumFeatureCount,
  ATSUFontFeatureType oFeatureType[],
  ATSUFontFeatureSelector oFeatureSelector[],
  ItemCount * oActualFeatureCount) ;
# 296 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUClearFontFeatures(
  ATSUStyle iStyle,
  ItemCount iFeatureCount,
  const ATSUFontFeatureType iType[],
  const ATSUFontFeatureSelector iSelector[]) ;
# 361 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUSetVariations(
  ATSUStyle iStyle,
  ItemCount iVariationCount,
  const ATSUFontVariationAxis iAxes[],
  const ATSUFontVariationValue iValue[]) ;
# 414 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontVariationValue(
  ATSUStyle iStyle,
  ATSUFontVariationAxis iFontVariationAxis,
  ATSUFontVariationValue * oFontVariationValue) ;
# 487 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetAllFontVariations(
  ATSUStyle iStyle,
  ItemCount iVariationCount,
  ATSUFontVariationAxis oVariationAxes[],
  ATSUFontVariationValue oFontVariationValues[],
  ItemCount * oActualVariationCount) ;
# 545 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUClearFontVariations(
  ATSUStyle iStyle,
  ItemCount iAxisCount,
  const ATSUFontVariationAxis iAxis[]) ;
# 598 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUFontCount(ItemCount * oFontCount) ;
# 642 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontIDs(
  ATSUFontID oFontIDs[],
  ItemCount iArraySize,
  ItemCount * oFontCount) ;
# 669 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUFONDtoFontID(
  short iFONDNumber,
  Style iFONDStyle,
  ATSUFontID * oFontID) ;
# 696 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUFontIDtoFOND(
  ATSUFontID iFontID,
  short * oFONDNumber,
  Style * oFONDStyle) ;
# 742 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUCountFontNames(
  ATSUFontID iFontID,
  ItemCount * oFontNameCount) ;
# 833 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetIndFontName(
  ATSUFontID iFontID,
  ItemCount iFontNameIndex,
  ByteCount iMaximumNameLength,
  Ptr oName,
  ByteCount * oActualNameLength,
  FontNameCode * oFontNameCode,
  FontPlatformCode * oFontNamePlatform,
  FontScriptCode * oFontNameScript,
  FontLanguageCode * oFontNameLanguage) ;
# 938 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUFindFontName(
  ATSUFontID iFontID,
  FontNameCode iFontNameCode,
  FontPlatformCode iFontNamePlatform,
  FontScriptCode iFontNameScript,
  FontLanguageCode iFontNameLanguage,
  ByteCount iMaximumNameLength,
  Ptr oName,
  ByteCount * oActualNameLength,
  ItemCount * oFontNameIndex) ;
# 1014 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUFindFontFromName(
  const void * iName,
  ByteCount iNameLength,
  FontNameCode iFontNameCode,
  FontPlatformCode iFontNamePlatform,
  FontScriptCode iFontNameScript,
  FontLanguageCode iFontNameLanguage,
  ATSUFontID * oFontID) ;
# 1059 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUCountFontFeatureTypes(
  ATSUFontID iFontID,
  ItemCount * oTypeCount) ;
# 1102 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUCountFontFeatureSelectors(
  ATSUFontID iFontID,
  ATSUFontFeatureType iType,
  ItemCount * oSelectorCount) ;
# 1164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontFeatureTypes(
  ATSUFontID iFontID,
  ItemCount iMaximumTypes,
  ATSUFontFeatureType oTypes[],
  ItemCount * oActualTypeCount) ;
# 1254 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontFeatureSelectors(
  ATSUFontID iFontID,
  ATSUFontFeatureType iType,
  ItemCount iMaximumSelectors,
  ATSUFontFeatureSelector oSelectors[],
  Boolean oSelectorIsOnByDefault[],
  ItemCount * oActualSelectorCount,
  Boolean * oIsMutuallyExclusive) ;
# 1317 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontFeatureNameCode(
  ATSUFontID iFontID,
  ATSUFontFeatureType iType,
  ATSUFontFeatureSelector iSelector,
  FontNameCode * oNameCode) ;
# 1365 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUCountFontTracking(
  ATSUFontID iFontID,
  ATSUVerticalCharacterType iCharacterOrientation,
  ItemCount * oTrackingCount) ;
# 1422 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetIndFontTracking(
  ATSUFontID iFontID,
  ATSUVerticalCharacterType iCharacterOrientation,
  ItemCount iTrackIndex,
  Fixed * oFontTrackingValue,
  FontNameCode * oNameCode) ;
# 1464 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUCountFontVariations(
  ATSUFontID iFontID,
  ItemCount * oVariationCount) ;
# 1520 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetIndFontVariation(
  ATSUFontID iFontID,
  ItemCount iVariationIndex,
  ATSUFontVariationAxis * oATSUFontVariationAxis,
  ATSUFontVariationValue * oMinimumValue,
  ATSUFontVariationValue * oMaximumValue,
  ATSUFontVariationValue * oDefaultValue) ;
# 1569 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontVariationNameCode(
  ATSUFontID iFontID,
  ATSUFontVariationAxis iAxis,
  FontNameCode * oNameCode) ;
# 1609 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUCountFontInstances(
  ATSUFontID iFontID,
  ItemCount * oInstances) ;
# 1689 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontInstance(
  ATSUFontID iFontID,
  ItemCount iFontInstanceIndex,
  ItemCount iMaximumVariations,
  ATSUFontVariationAxis oAxes[],
  ATSUFontVariationValue oValues[],
  ItemCount * oActualVariationCount) ;
# 1741 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFonts.h" 3
extern OSStatus
ATSUGetFontInstanceNameCode(
  ATSUFontID iFontID,
  ItemCount iInstanceIndex,
  FontNameCode * oNameCode) ;




}
# 33 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern "C" {
# 97 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGlyphGetIdealMetrics(
  ATSUStyle iATSUStyle,
  ItemCount iNumOfGlyphs,
  GlyphID iGlyphIDs[],
  ByteOffset iInputOffset,
  ATSGlyphIdealMetrics oIdealMetrics[]) ;
# 165 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGlyphGetScreenMetrics(
  ATSUStyle iATSUStyle,
  ItemCount iNumOfGlyphs,
  GlyphID iGlyphIDs[],
  ByteOffset iInputOffset,
  Boolean iForcingAntiAlias,
  Boolean iAntiAliasSwitch,
  ATSGlyphScreenMetrics oScreenMetrics[]) ;
# 215 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGetNativeCurveType(
  ATSUStyle iATSUStyle,
  ATSCurveType * oCurveType) ;
# 243 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSQuadraticNewPathProcPtr)(void * callBackDataPtr);
typedef ATSQuadraticNewPathProcPtr ATSQuadraticNewPathUPP;
# 253 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSQuadraticNewPathUPP
NewATSQuadraticNewPathUPP(ATSQuadraticNewPathProcPtr userRoutine) ;
# 264 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSQuadraticNewPathUPP(ATSQuadraticNewPathUPP userUPP) ;
# 275 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSQuadraticNewPathUPP(
  void * callBackDataPtr,
  ATSQuadraticNewPathUPP userUPP) ;



    inline ATSQuadraticNewPathUPP NewATSQuadraticNewPathUPP(ATSQuadraticNewPathProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSQuadraticNewPathUPP(ATSQuadraticNewPathUPP) { }
    inline OSStatus InvokeATSQuadraticNewPathUPP(void * callBackDataPtr, ATSQuadraticNewPathUPP userUPP) { return (*userUPP)(callBackDataPtr); }
# 320 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSQuadraticLineProcPtr)(const Float32Point *pt1, const Float32Point *pt2, void *callBackDataPtr);
typedef ATSQuadraticLineProcPtr ATSQuadraticLineUPP;
# 330 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSQuadraticLineUPP
NewATSQuadraticLineUPP(ATSQuadraticLineProcPtr userRoutine) ;
# 341 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSQuadraticLineUPP(ATSQuadraticLineUPP userUPP) ;
# 352 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSQuadraticLineUPP(
  const Float32Point * pt1,
  const Float32Point * pt2,
  void * callBackDataPtr,
  ATSQuadraticLineUPP userUPP) ;



    inline ATSQuadraticLineUPP NewATSQuadraticLineUPP(ATSQuadraticLineProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSQuadraticLineUPP(ATSQuadraticLineUPP) { }
    inline OSStatus InvokeATSQuadraticLineUPP(const Float32Point * pt1, const Float32Point * pt2, void * callBackDataPtr, ATSQuadraticLineUPP userUPP) { return (*userUPP)(pt1, pt2, callBackDataPtr); }
# 404 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSQuadraticCurveProcPtr)(const Float32Point *pt1, const Float32Point *controlPt, const Float32Point *pt2, void *callBackDataPtr);
typedef ATSQuadraticCurveProcPtr ATSQuadraticCurveUPP;
# 414 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSQuadraticCurveUPP
NewATSQuadraticCurveUPP(ATSQuadraticCurveProcPtr userRoutine) ;
# 425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSQuadraticCurveUPP(ATSQuadraticCurveUPP userUPP) ;
# 436 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSQuadraticCurveUPP(
  const Float32Point * pt1,
  const Float32Point * controlPt,
  const Float32Point * pt2,
  void * callBackDataPtr,
  ATSQuadraticCurveUPP userUPP) ;



    inline ATSQuadraticCurveUPP NewATSQuadraticCurveUPP(ATSQuadraticCurveProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSQuadraticCurveUPP(ATSQuadraticCurveUPP) { }
    inline OSStatus InvokeATSQuadraticCurveUPP(const Float32Point * pt1, const Float32Point * controlPt, const Float32Point * pt2, void * callBackDataPtr, ATSQuadraticCurveUPP userUPP) { return (*userUPP)(pt1, controlPt, pt2, callBackDataPtr); }
# 478 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSQuadraticClosePathProcPtr)(void * callBackDataPtr);
typedef ATSQuadraticClosePathProcPtr ATSQuadraticClosePathUPP;
# 488 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSQuadraticClosePathUPP
NewATSQuadraticClosePathUPP(ATSQuadraticClosePathProcPtr userRoutine) ;
# 499 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSQuadraticClosePathUPP(ATSQuadraticClosePathUPP userUPP) ;
# 510 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSQuadraticClosePathUPP(
  void * callBackDataPtr,
  ATSQuadraticClosePathUPP userUPP) ;



    inline ATSQuadraticClosePathUPP NewATSQuadraticClosePathUPP(ATSQuadraticClosePathProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSQuadraticClosePathUPP(ATSQuadraticClosePathUPP) { }
    inline OSStatus InvokeATSQuadraticClosePathUPP(void * callBackDataPtr, ATSQuadraticClosePathUPP userUPP) { return (*userUPP)(callBackDataPtr); }
# 601 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGlyphGetQuadraticPaths(
  ATSUStyle iATSUStyle,
  GlyphID iGlyphID,
  ATSQuadraticNewPathUPP iNewPathProc,
  ATSQuadraticLineUPP iLineProc,
  ATSQuadraticCurveUPP iCurveProc,
  ATSQuadraticClosePathUPP iClosePathProc,
  void * iCallbackDataPtr,
  OSStatus * oCallbackResult) ;
# 638 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSCubicMoveToProcPtr)(const Float32Point *pt, void *callBackDataPtr);
typedef ATSCubicMoveToProcPtr ATSCubicMoveToUPP;
# 648 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSCubicMoveToUPP
NewATSCubicMoveToUPP(ATSCubicMoveToProcPtr userRoutine) ;
# 659 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSCubicMoveToUPP(ATSCubicMoveToUPP userUPP) ;
# 670 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSCubicMoveToUPP(
  const Float32Point * pt,
  void * callBackDataPtr,
  ATSCubicMoveToUPP userUPP) ;



    inline ATSCubicMoveToUPP NewATSCubicMoveToUPP(ATSCubicMoveToProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSCubicMoveToUPP(ATSCubicMoveToUPP) { }
    inline OSStatus InvokeATSCubicMoveToUPP(const Float32Point * pt, void * callBackDataPtr, ATSCubicMoveToUPP userUPP) { return (*userUPP)(pt, callBackDataPtr); }
# 714 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSCubicLineToProcPtr)(const Float32Point *pt, void *callBackDataPtr);
typedef ATSCubicLineToProcPtr ATSCubicLineToUPP;
# 724 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSCubicLineToUPP
NewATSCubicLineToUPP(ATSCubicLineToProcPtr userRoutine) ;
# 735 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSCubicLineToUPP(ATSCubicLineToUPP userUPP) ;
# 746 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSCubicLineToUPP(
  const Float32Point * pt,
  void * callBackDataPtr,
  ATSCubicLineToUPP userUPP) ;



    inline ATSCubicLineToUPP NewATSCubicLineToUPP(ATSCubicLineToProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSCubicLineToUPP(ATSCubicLineToUPP) { }
    inline OSStatus InvokeATSCubicLineToUPP(const Float32Point * pt, void * callBackDataPtr, ATSCubicLineToUPP userUPP) { return (*userUPP)(pt, callBackDataPtr); }
# 797 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSCubicCurveToProcPtr)(const Float32Point *pt1, const Float32Point *pt2, const Float32Point *pt3, void *callBackDataPtr);
typedef ATSCubicCurveToProcPtr ATSCubicCurveToUPP;
# 807 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSCubicCurveToUPP
NewATSCubicCurveToUPP(ATSCubicCurveToProcPtr userRoutine) ;
# 818 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSCubicCurveToUPP(ATSCubicCurveToUPP userUPP) ;
# 829 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSCubicCurveToUPP(
  const Float32Point * pt1,
  const Float32Point * pt2,
  const Float32Point * pt3,
  void * callBackDataPtr,
  ATSCubicCurveToUPP userUPP) ;



    inline ATSCubicCurveToUPP NewATSCubicCurveToUPP(ATSCubicCurveToProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSCubicCurveToUPP(ATSCubicCurveToUPP) { }
    inline OSStatus InvokeATSCubicCurveToUPP(const Float32Point * pt1, const Float32Point * pt2, const Float32Point * pt3, void * callBackDataPtr, ATSCubicCurveToUPP userUPP) { return (*userUPP)(pt1, pt2, pt3, callBackDataPtr); }
# 871 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
typedef OSStatus ( * ATSCubicClosePathProcPtr)(void * callBackDataPtr);
typedef ATSCubicClosePathProcPtr ATSCubicClosePathUPP;
# 881 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern ATSCubicClosePathUPP
NewATSCubicClosePathUPP(ATSCubicClosePathProcPtr userRoutine) ;
# 892 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern void
DisposeATSCubicClosePathUPP(ATSCubicClosePathUPP userUPP) ;
# 903 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
InvokeATSCubicClosePathUPP(
  void * callBackDataPtr,
  ATSCubicClosePathUPP userUPP) ;



    inline ATSCubicClosePathUPP NewATSCubicClosePathUPP(ATSCubicClosePathProcPtr userRoutine) { return userRoutine; }
    inline void DisposeATSCubicClosePathUPP(ATSCubicClosePathUPP) { }
    inline OSStatus InvokeATSCubicClosePathUPP(void * callBackDataPtr, ATSCubicClosePathUPP userUPP) { return (*userUPP)(callBackDataPtr); }
# 994 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGlyphGetCubicPaths(
  ATSUStyle iATSUStyle,
  GlyphID iGlyphID,
  ATSCubicMoveToUPP iMoveToProc,
  ATSCubicLineToUPP iLineToProc,
  ATSCubicCurveToUPP iCurveToProc,
  ATSCubicClosePathUPP iClosePathProc,
  void * iCallbackDataPtr,
  OSStatus * oCallbackResult) ;
# 1060 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGlyphGetCurvePaths(
  ATSUStyle iATSUStyle,
  GlyphID iGlyphID,
  ByteCount * ioBufferSize,
  ATSUCurvePaths * oPaths) ;
# 1091 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUGetGlyphInfo(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineStart,
  UniCharCount iLineLength,
  ByteCount * ioBufferSize,
  ATSUGlyphInfoArray * oGlyphInfoPtr) ;
# 1118 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeGlyphs.h" 3
extern OSStatus
ATSUDrawGlyphInfo(
  ATSUGlyphInfoArray * iGlyphInfoArray,
  Float32Point iLocation) ;




}
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 1 3
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
extern "C" {


#pragma pack(push, 2)

typedef UInt32 ATSUFlattenedDataStreamFormat;
enum {
  kATSUDataStreamUnicodeStyledText = 'ustl'
};







typedef UInt32 ATSUFlattenStyleRunOptions;
enum {
  kATSUFlattenOptionNoOptionsMask = 0x00000000
};






typedef UInt32 ATSUUnFlattenStyleRunOptions;
enum {
  kATSUUnFlattenOptionNoOptionsMask = 0x00000000
};
# 82 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
struct ATSUStyleRunInfo {
  UniCharCount runLength;
  ItemCount styleObjectIndex;
};
typedef struct ATSUStyleRunInfo ATSUStyleRunInfo;
# 106 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
enum {
  kATSFlatDataUstlVersion0 = 0,
  kATSFlatDataUstlVersion1 = 1,
  kATSFlatDataUstlVersion2 = 2,
  kATSFlatDataUstlCurrentVersion = kATSFlatDataUstlVersion2
};
# 121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
struct ATSFlatDataMainHeaderBlock {




  UInt32 version;



  ByteCount sizeOfDataBlock;



  ByteCount offsetToTextLayouts;



  ByteCount offsetToStyleRuns;



  ByteCount offsetToStyleList;
};
typedef struct ATSFlatDataMainHeaderBlock ATSFlatDataMainHeaderBlock;
# 159 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
struct ATSFlatDataTextLayoutDataHeader {



  ByteCount sizeOfLayoutData;


  ByteCount textLayoutLength;




  ByteCount offsetToLayoutControls;




  ByteCount offsetToLineInfo;







};
typedef struct ATSFlatDataTextLayoutDataHeader ATSFlatDataTextLayoutDataHeader;





struct ATSFlatDataTextLayoutHeader {




  ItemCount numFlattenedTextLayouts;




  ATSFlatDataTextLayoutDataHeader flattenedTextLayouts[1];
};
typedef struct ATSFlatDataTextLayoutHeader ATSFlatDataTextLayoutHeader;





struct ATSFlatDataLayoutControlsDataHeader {



  ItemCount numberOfLayoutControls;
# 222 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
  ATSUAttributeInfo controlArray[1];
};
typedef struct ATSFlatDataLayoutControlsDataHeader ATSFlatDataLayoutControlsDataHeader;
struct ATSFlatDataLineInfoData {


  UniCharCount lineLength;



  ItemCount numberOfLineControls;




};
typedef struct ATSFlatDataLineInfoData ATSFlatDataLineInfoData;





struct ATSFlatDataLineInfoHeader {





  ItemCount numberOfLines;




  ATSFlatDataLineInfoData lineInfoArray[1];
};
typedef struct ATSFlatDataLineInfoHeader ATSFlatDataLineInfoHeader;
# 273 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
struct ATSFlatDataStyleRunDataHeader {


  ItemCount numberOfStyleRuns;




  ATSUStyleRunInfo styleRunArray[1];
};
typedef struct ATSFlatDataStyleRunDataHeader ATSFlatDataStyleRunDataHeader;
# 297 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
struct ATSFlatDataStyleListStyleDataHeader {




  ByteCount sizeOfStyleInfo;




  ItemCount numberOfSetAttributes;



  ItemCount numberOfSetFeatures;



  ItemCount numberOfSetVariations;
# 338 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
};
typedef struct ATSFlatDataStyleListStyleDataHeader ATSFlatDataStyleListStyleDataHeader;





struct ATSFlatDataStyleListHeader {


  ItemCount numberOfStyles;






  ATSFlatDataStyleListStyleDataHeader styleDataArray[1];

};
typedef struct ATSFlatDataStyleListHeader ATSFlatDataStyleListHeader;





struct ATSFlatDataStyleListFeatureData {


  ATSUFontFeatureType theFeatureType;


  ATSUFontFeatureSelector theFeatureSelector;
};
typedef struct ATSFlatDataStyleListFeatureData ATSFlatDataStyleListFeatureData;






struct ATSFlatDataStyleListVariationData {


  ATSUFontVariationAxis theVariationAxis;


  ATSUFontVariationValue theVariationValue;
};
typedef struct ATSFlatDataStyleListVariationData ATSFlatDataStyleListVariationData;
# 401 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
typedef UInt32 ATSFlatDataFontSpeciferType;
enum {


  kATSFlattenedFontSpecifierRawNameData = 'namd'
};






struct ATSFlatDataFontNameDataHeader {


  ATSFlatDataFontSpeciferType nameSpecifierType;





  ByteCount nameSpecifierSize;







};
typedef struct ATSFlatDataFontNameDataHeader ATSFlatDataFontNameDataHeader;







struct ATSFlatDataFontSpecRawNameData {


  FontNameCode fontNameType;





  FontPlatformCode fontNamePlatform;





  FontScriptCode fontNameScript;




  FontLanguageCode fontNameLanguage;



  ByteCount fontNameLength;




};
typedef struct ATSFlatDataFontSpecRawNameData ATSFlatDataFontSpecRawNameData;
# 481 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
struct ATSFlatDataFontSpecRawNameDataHeader {



  ItemCount numberOfFlattenedNames;





  ATSFlatDataFontSpecRawNameData nameDataArray[1];

};
typedef struct ATSFlatDataFontSpecRawNameDataHeader ATSFlatDataFontSpecRawNameDataHeader;
# 591 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
extern OSStatus
ATSUFlattenStyleRunsToStream(
  ATSUFlattenedDataStreamFormat iStreamFormat,
  ATSUFlattenStyleRunOptions iFlattenOptions,
  ItemCount iNumberOfRunInfo,
  const ATSUStyleRunInfo iRunInfoArray[],
  ItemCount iNumberOfStyleObjects,
  const ATSUStyle iStyleArray[],
  ByteCount iStreamBufferSize,
  void * oStreamBuffer,
  ByteCount * oActualStreamBufferSize) ;
# 708 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
extern OSStatus
ATSUUnflattenStyleRunsFromStream(
  ATSUFlattenedDataStreamFormat iStreamFormat,
  ATSUUnFlattenStyleRunOptions iUnflattenOptions,
  ByteCount iStreamBufferSize,
  const void * iStreamBuffer,
  ItemCount iNumberOfRunInfo,
  ItemCount iNumberOfStyleObjects,
  ATSUStyleRunInfo oRunInfoArray[],
  ATSUStyle oStyleArray[],
  ItemCount * oActualNumberOfRunInfo,
  ItemCount * oActualNumberOfStyleObjects) ;
# 739 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
extern OSStatus
ATSUCopyToHandle(
  ATSUStyle iStyle,
  Handle oStyleHandle) __attribute__((deprecated));
# 760 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeFlattening.h" 3
extern OSStatus
ATSUPasteFromHandle(
  ATSUStyle iStyle,
  Handle iStyleHandle) __attribute__((deprecated));



#pragma pack(pop)


}
# 41 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 1 3
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
extern "C" {
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
typedef UInt32 ATSUDirectDataSelector;
enum {
# 59 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataAdvanceDeltaFixedArray = 0L,
# 70 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataBaselineDeltaFixedArray = 1L,
# 85 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataDeviceDeltaSInt16Array = 2L,
# 100 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataStyleIndexUInt16Array = 3L,
# 109 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataStyleSettingATSUStyleSettingRefArray = 4L,
# 125 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataLayoutRecordATSLayoutRecordVersion1 = 100L,
# 138 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
  kATSUDirectDataLayoutRecordATSLayoutRecordCurrent = kATSUDirectDataLayoutRecordATSLayoutRecordVersion1
};
# 152 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
typedef struct LLCStyleInfo* ATSUStyleSettingRef;
# 225 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
extern OSStatus
ATSUDirectGetLayoutDataArrayPtrFromLineRef(
  ATSULineRef iLineRef,
  ATSUDirectDataSelector iDataSelector,
  Boolean iCreate,
  void * oLayoutDataArrayPtr[],
  ItemCount * oLayoutDataCount) ;
# 306 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
extern OSStatus
ATSUDirectGetLayoutDataArrayPtrFromTextLayout(
  ATSUTextLayout iTextLayout,
  UniCharArrayOffset iLineOffset,
  ATSUDirectDataSelector iDataSelector,
  void * oLayoutDataArrayPtr[],
  ItemCount * oLayoutDataCount) ;
# 350 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
extern OSStatus
ATSUDirectReleaseLayoutDataArrayPtr(
  ATSULineRef iLineRef,
  ATSUDirectDataSelector iDataSelector,
  void * iLayoutDataArrayPtr[]) ;
# 401 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicodeDirectAccess.h" 3
extern OSStatus
ATSUDirectAddStyleSettingRef(
  ATSULineRef iLineRef,
  ATSUStyleSettingRef iStyleSettingRef,
  UInt16 * oStyleIndex) ;




}
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/ATSUnicode.h" 2 3
# 91 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/QD.h" 2 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern "C" {
# 57 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
typedef const struct __HIShape* HIShapeRef;
typedef struct __HIShape* HIMutableShapeRef;





enum {




  kHIShapeEnumerateInit = 1,





  kHIShapeEnumerateRect = 2,




  kHIShapeEnumerateTerminate = 3
};






enum {





  kHIShapeParseFromTop = 0,




  kHIShapeParseFromBottom = (1 << 0),





  kHIShapeParseFromLeft = 0,




  kHIShapeParseFromRight = (1 << 1),





  kHIShapeParseFromTopLeft = kHIShapeParseFromTop | kHIShapeParseFromLeft,




  kHIShapeParseFromBottomRight = kHIShapeParseFromBottom | kHIShapeParseFromRight
};
# 159 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
typedef OSStatus ( * HIShapeEnumerateProcPtr)(int inMessage, HIShapeRef inShape, const CGRect *inRect, void *inRefcon);
# 177 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern CFTypeID
HIShapeGetTypeID(void) ;
# 204 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateEmpty(void) ;
# 231 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateWithQDRgn(RgnHandle inRgn) ;
# 258 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateWithRect(const CGRect * inRect) ;
# 284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateCopy(HIShapeRef inShape) ;
# 314 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateIntersection(
  HIShapeRef inShape1,
  HIShapeRef inShape2) ;
# 346 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateDifference(
  HIShapeRef inShape1,
  HIShapeRef inShape2) ;
# 377 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateUnion(
  HIShapeRef inShape1,
  HIShapeRef inShape2) ;
# 409 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIShapeRef
HIShapeCreateXor(
  HIShapeRef inShape1,
  HIShapeRef inShape2) ;
# 438 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern Boolean
HIShapeIsEmpty(HIShapeRef inShape) ;
# 464 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern Boolean
HIShapeIsRectangular(HIShapeRef inShape) ;
# 493 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern Boolean
HIShapeContainsPoint(
  HIShapeRef inShape,
  const CGPoint * inPoint) ;
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern Boolean
HIShapeIntersectsRect(
  HIShapeRef inShape,
  const CGRect * inRect) ;
# 556 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern CGRect *
HIShapeGetBounds(
  HIShapeRef inShape,
  CGRect * outRect) ;
# 590 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeGetAsQDRgn(
  HIShapeRef inShape,
  RgnHandle outRgn) ;
# 624 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeReplacePathInCGContext(
  HIShapeRef inShape,
  CGContextRef inContext) ;
# 657 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeSetQDClip(
  HIShapeRef inShape,
  CGrafPtr inPort) ;
# 699 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeEnumerate(
  HIShapeRef inShape,
  OptionBits inOptions,
  HIShapeEnumerateProcPtr inProc,
  void * inRefcon) ;
# 728 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIMutableShapeRef
HIShapeCreateMutable(void) ;
# 754 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIMutableShapeRef
HIShapeCreateMutableCopy(HIShapeRef inOrig) ;
# 777 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern HIMutableShapeRef
HIShapeCreateMutableWithRect(const CGRect * inRect) ;
# 803 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeSetEmpty(HIMutableShapeRef inShape) ;
# 833 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeSetWithShape(
  HIMutableShapeRef inDestShape,
  HIShapeRef inSrcShape) ;
# 868 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeIntersect(
  HIShapeRef inShape1,
  HIShapeRef inShape2,
  HIMutableShapeRef outResult) ;
# 905 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeDifference(
  HIShapeRef inShape1,
  HIShapeRef inShape2,
  HIMutableShapeRef outResult) ;
# 949 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeUnion(
  HIShapeRef inShape1,
  HIShapeRef inShape2,
  HIMutableShapeRef outResult) ;
# 986 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeXor(
  HIShapeRef inShape1,
  HIShapeRef inShape2,
  HIMutableShapeRef outResult) ;
# 1021 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeOffset(
  HIMutableShapeRef inShape,
  CGFloat inDX,
  CGFloat inDY) ;
# 1058 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeInset(
  HIMutableShapeRef inShape,
  CGFloat inDX,
  CGFloat inDY) ;
# 1087 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIShape.h" 3
extern OSStatus
HIShapeUnionWithRect(
  HIMutableShapeRef inShape,
  const CGRect * inRect) ;




}
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 1 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 2 3
# 43 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern "C" {


#pragma pack(push, 2)



enum {
  kGenericDocumentIconResource = -4000,
  kGenericStationeryIconResource = -3985,
  kGenericEditionFileIconResource = -3989,
  kGenericApplicationIconResource = -3996,
  kGenericDeskAccessoryIconResource = -3991,
  kGenericFolderIconResource = -3999,
  kPrivateFolderIconResource = -3994,
  kFloppyIconResource = -3998,
  kTrashIconResource = -3993,
  kGenericRAMDiskIconResource = -3988,
  kGenericCDROMIconResource = -3987
};



enum {
  kDesktopIconResource = -3992,
  kOpenFolderIconResource = -3997,
  kGenericHardDiskIconResource = -3995,
  kGenericFileServerIconResource = -3972,
  kGenericSuitcaseIconResource = -3970,
  kGenericMoverObjectIconResource = -3969
};



enum {
  kGenericPreferencesIconResource = -3971,
  kGenericQueryDocumentIconResource = -16506,
  kGenericExtensionIconResource = -16415,
  kSystemFolderIconResource = -3983,
  kHelpIconResource = -20271,
  kAppleMenuFolderIconResource = -3982
};


enum {
  genericDocumentIconResource = kGenericDocumentIconResource,
  genericStationeryIconResource = kGenericStationeryIconResource,
  genericEditionFileIconResource = kGenericEditionFileIconResource,
  genericApplicationIconResource = kGenericApplicationIconResource,
  genericDeskAccessoryIconResource = kGenericDeskAccessoryIconResource,
  genericFolderIconResource = kGenericFolderIconResource,
  privateFolderIconResource = kPrivateFolderIconResource,
  floppyIconResource = kFloppyIconResource,
  trashIconResource = kTrashIconResource,
  genericRAMDiskIconResource = kGenericRAMDiskIconResource,
  genericCDROMIconResource = kGenericCDROMIconResource,
  desktopIconResource = kDesktopIconResource,
  openFolderIconResource = kOpenFolderIconResource,
  genericHardDiskIconResource = kGenericHardDiskIconResource,
  genericFileServerIconResource = kGenericFileServerIconResource,
  genericSuitcaseIconResource = kGenericSuitcaseIconResource,
  genericMoverObjectIconResource = kGenericMoverObjectIconResource,
  genericPreferencesIconResource = kGenericPreferencesIconResource,
  genericQueryDocumentIconResource = kGenericQueryDocumentIconResource,
  genericExtensionIconResource = kGenericExtensionIconResource,
  systemFolderIconResource = kSystemFolderIconResource,
  appleMenuFolderIconResource = kAppleMenuFolderIconResource
};


enum {
  kStartupFolderIconResource = -3981,
  kOwnedFolderIconResource = -3980,
  kDropFolderIconResource = -3979,
  kSharedFolderIconResource = -3978,
  kMountedFolderIconResource = -3977,
  kControlPanelFolderIconResource = -3976,
  kPrintMonitorFolderIconResource = -3975,
  kPreferencesFolderIconResource = -3974,
  kExtensionsFolderIconResource = -3973,
  kFontsFolderIconResource = -3968,
  kFullTrashIconResource = -3984
};


enum {
  startupFolderIconResource = kStartupFolderIconResource,
  ownedFolderIconResource = kOwnedFolderIconResource,
  dropFolderIconResource = kDropFolderIconResource,
  sharedFolderIconResource = kSharedFolderIconResource,
  mountedFolderIconResource = kMountedFolderIconResource,
  controlPanelFolderIconResource = kControlPanelFolderIconResource,
  printMonitorFolderIconResource = kPrintMonitorFolderIconResource,
  preferencesFolderIconResource = kPreferencesFolderIconResource,
  extensionsFolderIconResource = kExtensionsFolderIconResource,
  fontsFolderIconResource = kFontsFolderIconResource,
  fullTrashIconResource = kFullTrashIconResource
};


enum {
  kAlignNone = 0x00,
  kAlignVerticalCenter = 0x01,
  kAlignTop = 0x02,
  kAlignBottom = 0x03,
  kAlignHorizontalCenter = 0x04,
  kAlignAbsoluteCenter = kAlignVerticalCenter | kAlignHorizontalCenter,
  kAlignCenterTop = kAlignTop | kAlignHorizontalCenter,
  kAlignCenterBottom = kAlignBottom | kAlignHorizontalCenter,
  kAlignLeft = 0x08,
  kAlignCenterLeft = kAlignVerticalCenter | kAlignLeft,
  kAlignTopLeft = kAlignTop | kAlignLeft,
  kAlignBottomLeft = kAlignBottom | kAlignLeft,
  kAlignRight = 0x0C,
  kAlignCenterRight = kAlignVerticalCenter | kAlignRight,
  kAlignTopRight = kAlignTop | kAlignRight,
  kAlignBottomRight = kAlignBottom | kAlignRight
};


enum {
  atNone = kAlignNone,
  atVerticalCenter = kAlignVerticalCenter,
  atTop = kAlignTop,
  atBottom = kAlignBottom,
  atHorizontalCenter = kAlignHorizontalCenter,
  atAbsoluteCenter = kAlignAbsoluteCenter,
  atCenterTop = kAlignCenterTop,
  atCenterBottom = kAlignCenterBottom,
  atLeft = kAlignLeft,
  atCenterLeft = kAlignCenterLeft,
  atTopLeft = kAlignTopLeft,
  atBottomLeft = kAlignBottomLeft,
  atRight = kAlignRight,
  atCenterRight = kAlignCenterRight,
  atTopRight = kAlignTopRight,
  atBottomRight = kAlignBottomRight
};

typedef SInt16 IconAlignmentType;

enum {
  kTransformNone = 0x00,
  kTransformDisabled = 0x01,
  kTransformOffline = 0x02,
  kTransformOpen = 0x03,
  kTransformLabel1 = 0x0100,
  kTransformLabel2 = 0x0200,
  kTransformLabel3 = 0x0300,
  kTransformLabel4 = 0x0400,
  kTransformLabel5 = 0x0500,
  kTransformLabel6 = 0x0600,
  kTransformLabel7 = 0x0700,
  kTransformSelected = 0x4000,
  kTransformSelectedDisabled = kTransformSelected | kTransformDisabled,
  kTransformSelectedOffline = kTransformSelected | kTransformOffline,
  kTransformSelectedOpen = kTransformSelected | kTransformOpen
};


enum {
  ttNone = kTransformNone,
  ttDisabled = kTransformDisabled,
  ttOffline = kTransformOffline,
  ttOpen = kTransformOpen,
  ttLabel1 = kTransformLabel1,
  ttLabel2 = kTransformLabel2,
  ttLabel3 = kTransformLabel3,
  ttLabel4 = kTransformLabel4,
  ttLabel5 = kTransformLabel5,
  ttLabel6 = kTransformLabel6,
  ttLabel7 = kTransformLabel7,
  ttSelected = kTransformSelected,
  ttSelectedDisabled = kTransformSelectedDisabled,
  ttSelectedOffline = kTransformSelectedOffline,
  ttSelectedOpen = kTransformSelectedOpen
};

typedef SInt16 IconTransformType;

enum {
  kSelectorLarge1Bit = 0x00000001,
  kSelectorLarge4Bit = 0x00000002,
  kSelectorLarge8Bit = 0x00000004,
  kSelectorLarge32Bit = 0x00000008,
  kSelectorLarge8BitMask = 0x00000010,
  kSelectorSmall1Bit = 0x00000100,
  kSelectorSmall4Bit = 0x00000200,
  kSelectorSmall8Bit = 0x00000400,
  kSelectorSmall32Bit = 0x00000800,
  kSelectorSmall8BitMask = 0x00001000,
  kSelectorMini1Bit = 0x00010000,
  kSelectorMini4Bit = 0x00020000,
  kSelectorMini8Bit = 0x00040000,
  kSelectorHuge1Bit = 0x01000000,
  kSelectorHuge4Bit = 0x02000000,
  kSelectorHuge8Bit = 0x04000000,
  kSelectorHuge32Bit = 0x08000000,
  kSelectorHuge8BitMask = 0x10000000,
  kSelectorAllLargeData = 0x000000FF,
  kSelectorAllSmallData = 0x0000FF00,
  kSelectorAllMiniData = 0x00FF0000,
  kSelectorAllHugeData = (long)0xFF000000,
  kSelectorAll1BitData = kSelectorLarge1Bit | kSelectorSmall1Bit | kSelectorMini1Bit | kSelectorHuge1Bit,
  kSelectorAll4BitData = kSelectorLarge4Bit | kSelectorSmall4Bit | kSelectorMini4Bit | kSelectorHuge4Bit,
  kSelectorAll8BitData = kSelectorLarge8Bit | kSelectorSmall8Bit | kSelectorMini8Bit | kSelectorHuge8Bit,
  kSelectorAll32BitData = kSelectorLarge32Bit | kSelectorSmall32Bit | kSelectorHuge32Bit,
  kSelectorAllAvailableData = (long)0xFFFFFFFF
};

typedef UInt32 IconSelectorValue;

enum {
  svLarge1Bit = kSelectorLarge1Bit,
  svLarge4Bit = kSelectorLarge4Bit,
  svLarge8Bit = kSelectorLarge8Bit,
  svSmall1Bit = kSelectorSmall1Bit,
  svSmall4Bit = kSelectorSmall4Bit,
  svSmall8Bit = kSelectorSmall8Bit,
  svMini1Bit = kSelectorMini1Bit,
  svMini4Bit = kSelectorMini4Bit,
  svMini8Bit = kSelectorMini8Bit,
  svAllLargeData = kSelectorAllLargeData,
  svAllSmallData = kSelectorAllSmallData,
  svAllMiniData = kSelectorAllMiniData,
  svAll1BitData = kSelectorAll1BitData,
  svAll4BitData = kSelectorAll4BitData,
  svAll8BitData = kSelectorAll8BitData,
  svAllAvailableData = kSelectorAllAvailableData
};

typedef OSErr ( * IconActionProcPtr)(ResType theType, Handle *theIcon, void *yourDataPtr);
typedef Handle ( * IconGetterProcPtr)(ResType theType, void *yourDataPtr);
typedef IconActionProcPtr IconActionUPP;
typedef IconGetterProcPtr IconGetterUPP;
# 286 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern IconActionUPP
NewIconActionUPP(IconActionProcPtr userRoutine) ;
# 297 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern IconGetterUPP
NewIconGetterUPP(IconGetterProcPtr userRoutine) ;
# 308 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern void
DisposeIconActionUPP(IconActionUPP userUPP) ;
# 319 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern void
DisposeIconGetterUPP(IconGetterUPP userUPP) ;
# 330 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
InvokeIconActionUPP(
  ResType theType,
  Handle * theIcon,
  void * yourDataPtr,
  IconActionUPP userUPP) ;
# 345 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Handle
InvokeIconGetterUPP(
  ResType theType,
  void * yourDataPtr,
  IconGetterUPP userUPP) ;



    inline IconActionUPP NewIconActionUPP(IconActionProcPtr userRoutine) { return userRoutine; }
    inline IconGetterUPP NewIconGetterUPP(IconGetterProcPtr userRoutine) { return userRoutine; }
    inline void DisposeIconActionUPP(IconActionUPP) { }
    inline void DisposeIconGetterUPP(IconGetterUPP) { }
    inline OSErr InvokeIconActionUPP(ResType theType, Handle * theIcon, void * yourDataPtr, IconActionUPP userUPP) { return (*userUPP)(theType, theIcon, yourDataPtr); }
    inline Handle InvokeIconGetterUPP(ResType theType, void * yourDataPtr, IconGetterUPP userUPP) { return (*userUPP)(theType, yourDataPtr); }
# 370 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
typedef IconGetterProcPtr IconGetter;
typedef IconActionProcPtr IconAction;
struct CIcon {
  PixMap iconPMap;
  BitMap iconMask;
  BitMap iconBMap;
  Handle iconData;
  SInt16 iconMaskData[1];
};
typedef struct CIcon CIcon;
typedef CIcon * CIconPtr;
typedef CIconPtr * CIconHandle;




typedef Handle IconSuiteRef;
typedef Handle IconCacheRef;
# 401 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern CIconHandle
GetCIcon(SInt16 iconID) ;
# 416 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern void
PlotCIcon(
  const Rect * theRect,
  CIconHandle theIcon) ;
# 433 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern void
DisposeCIcon(CIconHandle theIcon) ;
# 448 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Handle
GetIcon(SInt16 iconID) ;
# 463 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern void
PlotIcon(
  const Rect * theRect,
  Handle theIcon) ;
# 480 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotIconID(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  SInt16 theResID) ;
# 499 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
NewIconSuite(IconSuiteRef * theIconSuite) ;
# 514 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
AddIconToSuite(
  Handle theIconData,
  IconSuiteRef theSuite,
  ResType theType) ;
# 532 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconFromSuite(
  Handle * theIconData,
  IconSuiteRef theSuite,
  ResType theType) ;
# 550 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
ForEachIconDo(
  IconSuiteRef theSuite,
  IconSelectorValue selector,
  IconActionUPP action,
  void * yourDataPtr) ;
# 569 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconSuite(
  IconSuiteRef * theIconSuite,
  SInt16 theResID,
  IconSelectorValue selector) ;
# 587 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
DisposeIconSuite(
  IconSuiteRef theIconSuite,
  Boolean disposeData) ;
# 604 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotIconSuite(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  IconSuiteRef theIconSuite) ;
# 623 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
MakeIconCache(
  IconCacheRef * theCache,
  IconGetterUPP makeIcon,
  void * yourDataPtr) ;
# 641 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
LoadIconCache(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  IconCacheRef theIconCache) ;
# 660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotIconMethod(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  IconGetterUPP theMethod,
  void * yourDataPtr) ;
# 680 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetLabel(
  SInt16 labelNumber,
  RGBColor * labelColor,
  Str255 labelString) ;
# 698 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
PtInIconID(
  Point testPt,
  const Rect * iconRect,
  IconAlignmentType align,
  SInt16 iconID) ;
# 717 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
PtInIconSuite(
  Point testPt,
  const Rect * iconRect,
  IconAlignmentType align,
  IconSuiteRef theIconSuite) ;
# 736 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
PtInIconMethod(
  Point testPt,
  const Rect * iconRect,
  IconAlignmentType align,
  IconGetterUPP theMethod,
  void * yourDataPtr) ;
# 756 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
RectInIconID(
  const Rect * testRect,
  const Rect * iconRect,
  IconAlignmentType align,
  SInt16 iconID) ;
# 775 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
RectInIconSuite(
  const Rect * testRect,
  const Rect * iconRect,
  IconAlignmentType align,
  IconSuiteRef theIconSuite) ;
# 794 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
RectInIconMethod(
  const Rect * testRect,
  const Rect * iconRect,
  IconAlignmentType align,
  IconGetterUPP theMethod,
  void * yourDataPtr) ;
# 814 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconIDToRgn(
  RgnHandle theRgn,
  const Rect * iconRect,
  IconAlignmentType align,
  SInt16 iconID) ;
# 833 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconSuiteToRgn(
  RgnHandle theRgn,
  const Rect * iconRect,
  IconAlignmentType align,
  IconSuiteRef theIconSuite) ;
# 852 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconMethodToRgn(
  RgnHandle theRgn,
  const Rect * iconRect,
  IconAlignmentType align,
  IconGetterUPP theMethod,
  void * yourDataPtr) ;
# 872 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
SetSuiteLabel(
  IconSuiteRef theSuite,
  SInt16 theLabel) ;
# 889 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern SInt16
GetSuiteLabel(IconSuiteRef theSuite) ;
# 904 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconCacheData(
  IconCacheRef theCache,
  void ** theData) ;
# 921 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
SetIconCacheData(
  IconCacheRef theCache,
  void * theData) ;
# 938 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconCacheProc(
  IconCacheRef theCache,
  IconGetterUPP * theProc) ;
# 955 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
SetIconCacheProc(
  IconCacheRef theCache,
  IconGetterUPP theProc) ;
# 972 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotIconHandle(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  Handle theIcon) ;
# 991 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotSICNHandle(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  Handle theSICN) ;
# 1010 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotCIconHandle(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  CIconHandle theCIcon) ;





typedef struct OpaqueIconRef* IconRef;
# 1040 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
enum {
  kSystemIconsCreator = 'macs'
};
# 1052 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
enum {
  kClipboardIcon = 'CLIP',
  kClippingUnknownTypeIcon = 'clpu',
  kClippingPictureTypeIcon = 'clpp',
  kClippingTextTypeIcon = 'clpt',
  kClippingSoundTypeIcon = 'clps',
  kDesktopIcon = 'desk',
  kFinderIcon = 'FNDR',
  kComputerIcon = 'root',
  kFontSuitcaseIcon = 'FFIL',
  kFullTrashIcon = 'ftrh',
  kGenericApplicationIcon = 'APPL',
  kGenericCDROMIcon = 'cddr',
  kGenericControlPanelIcon = 'APPC',
  kGenericControlStripModuleIcon = 'sdev',
  kGenericComponentIcon = 'thng',
  kGenericDeskAccessoryIcon = 'APPD',
  kGenericDocumentIcon = 'docu',
  kGenericEditionFileIcon = 'edtf',
  kGenericExtensionIcon = 'INIT',
  kGenericFileServerIcon = 'srvr',
  kGenericFontIcon = 'ffil',
  kGenericFontScalerIcon = 'sclr',
  kGenericFloppyIcon = 'flpy',
  kGenericHardDiskIcon = 'hdsk',
  kGenericIDiskIcon = 'idsk',
  kGenericRemovableMediaIcon = 'rmov',
  kGenericMoverObjectIcon = 'movr',
  kGenericPCCardIcon = 'pcmc',
  kGenericPreferencesIcon = 'pref',
  kGenericQueryDocumentIcon = 'qery',
  kGenericRAMDiskIcon = 'ramd',
  kGenericSharedLibaryIcon = 'shlb',
  kGenericStationeryIcon = 'sdoc',
  kGenericSuitcaseIcon = 'suit',
  kGenericURLIcon = 'gurl',
  kGenericWORMIcon = 'worm',
  kInternationalResourcesIcon = 'ifil',
  kKeyboardLayoutIcon = 'kfil',
  kSoundFileIcon = 'sfil',
  kSystemSuitcaseIcon = 'zsys',
  kTrashIcon = 'trsh',
  kTrueTypeFontIcon = 'tfil',
  kTrueTypeFlatFontIcon = 'sfnt',
  kTrueTypeMultiFlatFontIcon = 'ttcf',
  kUserIDiskIcon = 'udsk',
  kUnknownFSObjectIcon = 'unfs',
  kInternationResourcesIcon = kInternationalResourcesIcon
};


enum {
  kInternetLocationHTTPIcon = 'ilht',
  kInternetLocationFTPIcon = 'ilft',
  kInternetLocationAppleShareIcon = 'ilaf',
  kInternetLocationAppleTalkZoneIcon = 'ilat',
  kInternetLocationFileIcon = 'ilfi',
  kInternetLocationMailIcon = 'ilma',
  kInternetLocationNewsIcon = 'ilnw',
  kInternetLocationNSLNeighborhoodIcon = 'ilns',
  kInternetLocationGenericIcon = 'ilge'
};


enum {
  kGenericFolderIcon = 'fldr',
  kDropFolderIcon = 'dbox',
  kMountedFolderIcon = 'mntd',
  kOpenFolderIcon = 'ofld',
  kOwnedFolderIcon = 'ownd',
  kPrivateFolderIcon = 'prvf',
  kSharedFolderIcon = 'shfl'
};


enum {
  kSharingPrivsNotApplicableIcon = 'shna',
  kSharingPrivsReadOnlyIcon = 'shro',
  kSharingPrivsReadWriteIcon = 'shrw',
  kSharingPrivsUnknownIcon = 'shuk',
  kSharingPrivsWritableIcon = 'writ'
};



enum {
  kUserFolderIcon = 'ufld',
  kWorkgroupFolderIcon = 'wfld',
  kGuestUserIcon = 'gusr',
  kUserIcon = 'user',
  kOwnerIcon = 'susr',
  kGroupIcon = 'grup'
};


enum {
  kAppearanceFolderIcon = 'appr',
  kAppleExtrasFolderIcon = 0x616578C4 ,
  kAppleMenuFolderIcon = 'amnu',
  kApplicationsFolderIcon = 'apps',
  kApplicationSupportFolderIcon = 'asup',
  kAssistantsFolderIcon = 0x617374C4 ,
  kColorSyncFolderIcon = 'prof',
  kContextualMenuItemsFolderIcon = 'cmnu',
  kControlPanelDisabledFolderIcon = 'ctrD',
  kControlPanelFolderIcon = 'ctrl',
  kControlStripModulesFolderIcon = 0x736476C4 ,
  kDocumentsFolderIcon = 'docs',
  kExtensionsDisabledFolderIcon = 'extD',
  kExtensionsFolderIcon = 'extn',
  kFavoritesFolderIcon = 'favs',
  kFontsFolderIcon = 'font',
  kHelpFolderIcon = (long)0xC4686C70 ,
  kInternetFolderIcon = 0x696E74C4 ,
  kInternetPlugInFolderIcon = (long)0xC46E6574 ,
  kInternetSearchSitesFolderIcon = 'issf',
  kLocalesFolderIcon = (long)0xC46C6F63 ,
  kMacOSReadMeFolderIcon = 0x6D6F72C4 ,
  kPublicFolderIcon = 'pubf',
  kPreferencesFolderIcon = 0x707266C4 ,
  kPrinterDescriptionFolderIcon = 'ppdf',
  kPrinterDriverFolderIcon = (long)0xC4707264 ,
  kPrintMonitorFolderIcon = 'prnt',
  kRecentApplicationsFolderIcon = 'rapp',
  kRecentDocumentsFolderIcon = 'rdoc',
  kRecentServersFolderIcon = 'rsrv',
  kScriptingAdditionsFolderIcon = (long)0xC4736372 ,
  kSharedLibrariesFolderIcon = (long)0xC46C6962 ,
  kScriptsFolderIcon = 0x736372C4 ,
  kShutdownItemsDisabledFolderIcon = 'shdD',
  kShutdownItemsFolderIcon = 'shdf',
  kSpeakableItemsFolder = 'spki',
  kStartupItemsDisabledFolderIcon = 'strD',
  kStartupItemsFolderIcon = 'strt',
  kSystemExtensionDisabledFolderIcon = 'macD',
  kSystemFolderIcon = 'macs',
  kTextEncodingsFolderIcon = (long)0xC4746578 ,
  kUsersFolderIcon = 0x757372C4 ,
  kUtilitiesFolderIcon = 0x757469C4 ,
  kVoicesFolderIcon = 'fvoc'
};


enum {
  kAppleScriptBadgeIcon = 'scrp',
  kLockedBadgeIcon = 'lbdg',
  kMountedBadgeIcon = 'mbdg',
  kSharedBadgeIcon = 'sbdg',
  kAliasBadgeIcon = 'abdg',
  kAlertCautionBadgeIcon = 'cbdg'
};


enum {
  kAlertNoteIcon = 'note',
  kAlertCautionIcon = 'caut',
  kAlertStopIcon = 'stop'
};


enum {
  kAppleTalkIcon = 'atlk',
  kAppleTalkZoneIcon = 'atzn',
  kAFPServerIcon = 'afps',
  kFTPServerIcon = 'ftps',
  kHTTPServerIcon = 'htps',
  kGenericNetworkIcon = 'gnet',
  kIPFileServerIcon = 'isrv'
};


enum {
  kToolbarCustomizeIcon = 'tcus',
  kToolbarDeleteIcon = 'tdel',
  kToolbarFavoritesIcon = 'tfav',
  kToolbarHomeIcon = 'thom'
};


enum {
  kAppleLogoIcon = 'capl',
  kAppleMenuIcon = 'sapl',
  kBackwardArrowIcon = 'baro',
  kFavoriteItemsIcon = 'favr',
  kForwardArrowIcon = 'faro',
  kGridIcon = 'grid',
  kHelpIcon = 'help',
  kKeepArrangedIcon = 'arng',
  kLockedIcon = 'lock',
  kNoFilesIcon = 'nfil',
  kNoFolderIcon = 'nfld',
  kNoWriteIcon = 'nwrt',
  kProtectedApplicationFolderIcon = 'papp',
  kProtectedSystemFolderIcon = 'psys',
  kRecentItemsIcon = 'rcnt',
  kShortcutIcon = 'shrt',
  kSortAscendingIcon = 'asnd',
  kSortDescendingIcon = 'dsnd',
  kUnlockedIcon = 'ulck',
  kConnectToIcon = 'cnct',
  kGenericWindowIcon = 'gwin',
  kQuestionMarkIcon = 'ques',
  kDeleteAliasIcon = 'dali',
  kEjectMediaIcon = 'ejec',
  kBurningIcon = 'burn',
  kRightContainerArrowIcon = 'rcar'
};



typedef UInt32 IconServicesUsageFlags;
enum {
  kIconServicesNormalUsageFlag = 0x00000000,
  kIconServicesNoBadgeFlag = 0x00000001,
  kIconServicesUpdateIfNeededFlag = 0x00000002
};
# 1277 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
enum {
  kIconServicesCatalogInfoMask = (kFSCatInfoNodeID | kFSCatInfoParentDirID | kFSCatInfoVolume | kFSCatInfoNodeFlags | kFSCatInfoFinderInfo | kFSCatInfoFinderXInfo | kFSCatInfoUserAccess | kFSCatInfoPermissions | kFSCatInfoContentMod)
};
# 1288 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
typedef UInt32 PlotIconRefFlags;
enum {




  kPlotIconRefNormalFlags = 0L,




  kPlotIconRefNoImage = (1 << 1),




  kPlotIconRefNoMask = (1 << 2)
};
# 1333 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconRefToIconFamily(
  IconRef theIconRef,
  IconSelectorValue whichIcons,
  IconFamilyHandle * iconFamily) ;
# 1358 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconFamilyToIconSuite(
  IconFamilyHandle iconFamily,
  IconSelectorValue whichIcons,
  IconSuiteRef * iconSuite) ;
# 1382 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconSuiteToIconFamily(
  IconSuiteRef iconSuite,
  IconSelectorValue whichIcons,
  IconFamilyHandle * iconFamily) ;
# 1410 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
SetIconFamilyData(
  IconFamilyHandle iconFamily,
  OSType iconType,
  Handle h) ;
# 1438 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconFamilyData(
  IconFamilyHandle iconFamily,
  OSType iconType,
  Handle h) ;
# 1472 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconRefOwners(
  IconRef theIconRef,
  UInt16 * owners) ;
# 1495 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
AcquireIconRef(IconRef theIconRef) ;
# 1521 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
ReleaseIconRef(IconRef theIconRef) ;
# 1562 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconRefFromFile(
  const FSSpec * theFile,
  IconRef * theIconRef,
  SInt16 * theLabel) ;
# 1597 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconRef(
  SInt16 vRefNum,
  OSType creator,
  OSType iconType,
  IconRef * theIconRef) ;
# 1630 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconRefFromFolder(
  SInt16 vRefNum,
  SInt32 parentFolderID,
  SInt32 folderID,
  SInt8 attributes,
  SInt8 accessPrivileges,
  IconRef * theIconRef) ;
# 1690 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSStatus
GetIconRefFromFileInfo(
  const FSRef * inRef,
  UniCharCount inFileNameLength,
  const UniChar * inFileName,
  FSCatalogInfoBitmap inWhichInfo,
  const FSCatalogInfo * inCatalogInfo,
  IconServicesUsageFlags inUsageFlags,
  IconRef * outIconRef,
  SInt16 * outLabel) ;
# 1746 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconRefFromTypeInfo(
  OSType inCreator,
  OSType inType,
  CFStringRef inExtension,
  CFStringRef inMIMEType,
  IconServicesUsageFlags inUsageFlags,
  IconRef * outIconRef) ;
# 1786 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSStatus
GetIconRefFromIconFamilyPtr(
  const IconFamilyResource * inIconFamilyPtr,
  Size inSize,
  IconRef * outIconRef) ;
# 1821 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSStatus
GetIconRefFromComponent(
  Component inComponent,
  IconRef * outIconRef) ;
# 1857 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
RegisterIconRefFromIconFamily(
  OSType creator,
  OSType iconType,
  IconFamilyHandle iconFamily,
  IconRef * theIconRef) ;
# 1889 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
RegisterIconRefFromResource(
  OSType creator,
  OSType iconType,
  const FSSpec * resourceFile,
  SInt16 resourceID,
  IconRef * theIconRef) ;
# 1930 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSStatus
RegisterIconRefFromFSRef(
  OSType creator,
  OSType iconType,
  const FSRef * iconFile,
  IconRef * theIconRef) ;
# 1957 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
UnregisterIconRef(
  OSType creator,
  OSType iconType) ;
# 1988 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
UpdateIconRef(IconRef theIconRef) ;
# 2013 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
OverrideIconRefFromResource(
  IconRef theIconRef,
  const FSSpec * resourceFile,
  SInt16 resourceID) ;
# 2042 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
OverrideIconRef(
  IconRef oldIconRef,
  IconRef newIconRef) ;
# 2066 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
RemoveIconRefOverride(IconRef theIconRef) ;
# 2096 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
CompositeIconRef(
  IconRef backgroundIconRef,
  IconRef foregroundIconRef,
  IconRef * compositeIconRef) ;
# 2121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IsIconRefComposite(
  IconRef compositeIconRef,
  IconRef * backgroundIconRef,
  IconRef * foregroundIconRef) ;
# 2152 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
IsValidIconRef(IconRef theIconRef) ;
# 2177 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
PlotIconRef(
  const Rect * theRect,
  IconAlignmentType align,
  IconTransformType transform,
  IconServicesUsageFlags theIconServicesUsageFlags,
  IconRef theIconRef) ;
# 2227 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSStatus
PlotIconRefInContext(
  CGContextRef inContext,
  const CGRect * inRect,
  IconAlignmentType inAlign,
  IconTransformType inTransform,
  const RGBColor * inLabelColor,
  PlotIconRefFlags inFlags,
  IconRef inIconRef) ;
# 2261 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
PtInIconRef(
  const Point * testPt,
  const Rect * iconRect,
  IconAlignmentType align,
  IconServicesUsageFlags theIconServicesUsageFlags,
  IconRef theIconRef) ;
# 2292 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
RectInIconRef(
  const Rect * testRect,
  const Rect * iconRect,
  IconAlignmentType align,
  IconServicesUsageFlags iconServicesUsageFlags,
  IconRef theIconRef) ;
# 2322 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
IconRefToRgn(
  RgnHandle theRgn,
  const Rect * iconRect,
  IconAlignmentType align,
  IconServicesUsageFlags iconServicesUsageFlags,
  IconRef theIconRef) ;
# 2371 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
IconRefContainsCGPoint(
  const CGPoint * testPt,
  const CGRect * iconRect,
  IconAlignmentType align,
  IconServicesUsageFlags iconServicesUsageFlags,
  IconRef theIconRef) ;
# 2418 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
IconRefIntersectsCGRect(
  const CGRect * testRect,
  const CGRect * iconRect,
  IconAlignmentType align,
  IconServicesUsageFlags iconServicesUsageFlags,
  IconRef theIconRef) ;
# 2459 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern HIShapeRef
IconRefToHIShape(
  const CGRect * iconRect,
  IconAlignmentType align,
  IconServicesUsageFlags iconServicesUsageFlags,
  IconRef theIconRef) ;
# 2499 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetIconSizesFromIconRef(
  IconSelectorValue iconSelectorInput,
  IconSelectorValue * iconSelectorOutputPtr,
  IconServicesUsageFlags iconServicesUsageFlags,
  IconRef theIconRef) ;
# 2538 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
IsDataAvailableInIconRef(
  OSType inIconKind,
  IconRef inIconRef) ;
# 2571 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
FlushIconRefs(
  OSType creator,
  OSType iconType) ;
# 2597 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
FlushIconRefsByVolume(SInt16 vRefNum) ;
# 2629 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
SetCustomIconsEnabled(
  SInt16 vRefNum,
  Boolean enableCustomIcons) ;
# 2653 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
GetCustomIconsEnabled(
  SInt16 vRefNum,
  Boolean * customIconsEnabled) ;
# 2676 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern Boolean
IsIconRefMaskEmpty(IconRef iconRef) ;
# 2703 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern IconRef
GetIconRefVariant(
  IconRef inIconRef,
  OSType inVariant,
  IconTransformType * outTransform) ;
# 2743 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
RegisterIconRefFromIconFile(
  OSType creator,
  OSType iconType,
  const FSSpec * iconFile,
  IconRef * theIconRef) ;
# 2769 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
ReadIconFile(
  const FSSpec * iconFile,
  IconFamilyHandle * iconFamily) ;
# 2792 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSErr
WriteIconFile(
  IconFamilyHandle iconFamily,
  const FSSpec * iconFile) ;
# 2824 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
extern OSStatus
ReadIconFromFSRef(
  const FSRef * ref,
  IconFamilyHandle * iconFamily) ;
# 2841 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Icons.h" 3
#pragma pack(pop)


}
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 1 3
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern "C" {


#pragma pack(push, 2)





enum {
  icPrefNotFoundErr = -666,
  icPermErr = -667,
  icPrefDataErr = -668,
  icInternalErr = -669,
  icTruncatedErr = -670,
  icNoMoreWritersErr = -671,
  icNothingToOverrideErr = -672,
  icNoURLErr = -673,
  icConfigNotFoundErr = -674,
  icConfigInappropriateErr = -675,
  icProfileNotFoundErr = -676,
  icTooManyProfilesErr = -677
};





enum {
  kICComponentInterfaceVersion0 = 0x00000000,
  kICComponentInterfaceVersion1 = 0x00010000,
  kICComponentInterfaceVersion2 = 0x00020000,
  kICComponentInterfaceVersion3 = 0x00030000,
  kICComponentInterfaceVersion4 = 0x00040000,
  kICComponentInterfaceVersion = kICComponentInterfaceVersion4
};





typedef struct OpaqueICInstance* ICInstance;




struct ICDirSpec {
  short vRefNum;
  long dirID;
};
typedef struct ICDirSpec ICDirSpec;
typedef ICDirSpec ICDirSpecArray[4];
typedef ICDirSpecArray * ICDirSpecArrayPtr;





typedef UInt32 ICAttr;
enum {
  kICAttrLockedBit = 0,
  kICAttrVolatileBit = 1
};

enum {
  kICAttrNoChange = (UInt32)0xFFFFFFFF,
  kICAttrLockedMask = 0x00000001,
  kICAttrVolatileMask = 0x00000002
};




typedef UInt8 ICPerm;
enum {
  icNoPerm = 0,
  icReadOnlyPerm = 1,
  icReadWritePerm = 2
};





typedef SInt32 ICProfileID;
typedef ICProfileID * ICProfileIDPtr;
enum {
  kICNilProfileID = 0
};




enum {
  kICNoUserInteractionBit = 0
};

enum {
  kICNoUserInteractionMask = 0x00000001
};

enum {
  kICFileType = 'ICAp',
  kICCreator = 'ICAp'
};




enum {
  kInternetEventClass = 'GURL',
  kAEGetURL = 'GURL',
  kAEFetchURL = 'FURL',
  keyAEAttaching = 'Atch'
};


enum {
  kICEditPreferenceEventClass = 'ICAp',
  kICEditPreferenceEvent = 'ICAp',
  keyICEditPreferenceDestination = 'dest'
};




enum {
  kICComponentVersion = 0,
  kICNumVersion = 1
};




struct ICFontRecord {
  SInt16 size;
  Style face;
  char pad;
  Str255 font;
};
typedef struct ICFontRecord ICFontRecord;
typedef ICFontRecord * ICFontRecordPtr;
typedef ICFontRecordPtr * ICFontRecordHandle;




struct ICCharTable {
  unsigned char netToMac[256];
  unsigned char macToNet[256];
};
typedef struct ICCharTable ICCharTable;
typedef ICCharTable * ICCharTablePtr;
typedef ICCharTablePtr * ICCharTableHandle;




struct ICAppSpec {
  OSType fCreator;
  Str63 name;
};
typedef struct ICAppSpec ICAppSpec;
typedef ICAppSpec * ICAppSpecPtr;
typedef ICAppSpecPtr * ICAppSpecHandle;
struct ICAppSpecList {
  SInt16 numberOfItems;
  ICAppSpec appSpecs[1];
};
typedef struct ICAppSpecList ICAppSpecList;
typedef ICAppSpecList * ICAppSpecListPtr;
typedef ICAppSpecListPtr * ICAppSpecListHandle;




struct ICFileSpec {
  Str31 volName;
  SInt32 volCreationDate;
  FSSpec fss;
  AliasRecord alias;


};
typedef struct ICFileSpec ICFileSpec;
typedef ICFileSpec * ICFileSpecPtr;
typedef ICFileSpecPtr * ICFileSpecHandle;
enum {
  kICFileSpecHeaderSize = sizeof(ICFileSpec) - sizeof(AliasRecord)
};




typedef SInt32 ICMapEntryFlags;
typedef SInt16 ICFixedLength;
struct ICMapEntry {
  SInt16 totalLength;
  ICFixedLength fixedLength;
  SInt16 version;
  OSType fileType;
  OSType fileCreator;
  OSType postCreator;
  ICMapEntryFlags flags;

  Str255 extension;
  Str255 creatorAppName;
  Str255 postAppName;
  Str255 MIMEType;
  Str255 entryName;
};
typedef struct ICMapEntry ICMapEntry;
typedef ICMapEntry * ICMapEntryPtr;
typedef ICMapEntryPtr * ICMapEntryHandle;
enum {
  kICMapFixedLength = 22
};

enum {
  kICMapBinaryBit = 0,
  kICMapResourceForkBit = 1,
  kICMapDataForkBit = 2,
  kICMapPostBit = 3,
  kICMapNotIncomingBit = 4,
  kICMapNotOutgoingBit = 5
};

enum {
  kICMapBinaryMask = 0x00000001,
  kICMapResourceForkMask = 0x00000002,
  kICMapDataForkMask = 0x00000004,
  kICMapPostMask = 0x00000008,
  kICMapNotIncomingMask = 0x00000010,
  kICMapNotOutgoingMask = 0x00000020
};




typedef SInt16 ICServiceEntryFlags;
struct ICServiceEntry {
  Str255 name;
  SInt16 port;
  ICServiceEntryFlags flags;
};
typedef struct ICServiceEntry ICServiceEntry;
typedef ICServiceEntry * ICServiceEntryPtr;
typedef ICServiceEntryPtr * ICServiceEntryHandle;

enum {
  kICServicesTCPBit = 0,
  kICServicesUDPBit = 1
};

enum {
  kICServicesTCPMask = 0x00000001,
  kICServicesUDPMask = 0x00000002
};

struct ICServices {
  SInt16 count;
  ICServiceEntry services[1];
};
typedef struct ICServices ICServices;
typedef ICServices * ICServicesPtr;
typedef ICServicesPtr * ICServicesHandle;
# 660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICStart(
  ICInstance * inst,
  OSType signature) ;
# 681 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICStop(ICInstance inst) ;
# 700 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetVersion(
  ICInstance inst,
  long whichVersion,
  UInt32 * version) ;
# 723 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetConfigName(
  ICInstance inst,
  Boolean longname,
  Str255 name) ;
# 751 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetSeed(
  ICInstance inst,
  long * seed) ;
# 773 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetPerm(
  ICInstance inst,
  ICPerm * perm) ;
# 796 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICBegin(
  ICInstance inst,
  ICPerm perm) ;
# 822 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetPref(
  ICInstance inst,
  ConstStr255Param key,
  ICAttr * attr,
  void * buf,
  long * size) ;
# 857 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICSetPref(
  ICInstance inst,
  ConstStr255Param key,
  ICAttr attr,
  const void * buf,
  long size) ;
# 890 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICFindPrefHandle(
  ICInstance inst,
  ConstStr255Param key,
  ICAttr * attr,
  Handle prefh) ;
# 918 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetPrefHandle(
  ICInstance inst,
  ConstStr255Param key,
  ICAttr * attr,
  Handle * prefh) ;
# 949 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICSetPrefHandle(
  ICInstance inst,
  ConstStr255Param key,
  ICAttr attr,
  Handle prefh) ;
# 980 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICCountPref(
  ICInstance inst,
  long * count) ;
# 1001 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetIndPref(
  ICInstance inst,
  long index,
  Str255 key) ;
# 1025 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICDeletePref(
  ICInstance inst,
  ConstStr255Param key) ;
# 1047 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICEnd(ICInstance inst) ;
# 1066 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetDefaultPref(
  ICInstance inst,
  ConstStr255Param key,
  Handle prefH) ;
# 1089 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICEditPreferences(
  ICInstance inst,
  ConstStr255Param key) ;
# 1119 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICLaunchURL(
  ICInstance inst,
  ConstStr255Param hint,
  const void * data,
  long len,
  long * selStart,
  long * selEnd) ;
# 1157 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICParseURL(
  ICInstance inst,
  ConstStr255Param hint,
  const void * data,
  long len,
  long * selStart,
  long * selEnd,
  Handle url) ;
# 1196 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICCreateGURLEvent(
  ICInstance inst,
  OSType helperCreator,
  Handle urlH,
  AppleEvent * theEvent) ;
# 1219 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICSendGURLEvent(
  ICInstance inst,
  AppleEvent * theEvent) ;
# 1245 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICMapFilename(
  ICInstance inst,
  ConstStr255Param filename,
  ICMapEntry * entry) ;
# 1269 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICMapTypeCreator(
  ICInstance inst,
  OSType fType,
  OSType fCreator,
  ConstStr255Param filename,
  ICMapEntry * entry) ;
# 1297 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICMapEntriesFilename(
  ICInstance inst,
  Handle entries,
  ConstStr255Param filename,
  ICMapEntry * entry) ;
# 1323 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICMapEntriesTypeCreator(
  ICInstance inst,
  Handle entries,
  OSType fType,
  OSType fCreator,
  ConstStr255Param filename,
  ICMapEntry * entry) ;
# 1353 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICCountMapEntries(
  ICInstance inst,
  Handle entries,
  long * count) ;
# 1376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetIndMapEntry(
  ICInstance inst,
  Handle entries,
  long index,
  long * pos,
  ICMapEntry * entry) ;
# 1405 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetMapEntry(
  ICInstance inst,
  Handle entries,
  long pos,
  ICMapEntry * entry) ;
# 1431 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICSetMapEntry(
  ICInstance inst,
  Handle entries,
  long pos,
  const ICMapEntry * entry) ;
# 1459 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICDeleteMapEntry(
  ICInstance inst,
  Handle entries,
  long pos) ;
# 1484 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICAddMapEntry(
  ICInstance inst,
  Handle entries,
  const ICMapEntry * entry) ;
# 1509 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetCurrentProfile(
  ICInstance inst,
  ICProfileID * currentID) ;
# 1529 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICSetCurrentProfile(
  ICInstance inst,
  ICProfileID newID) ;
# 1549 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICCountProfiles(
  ICInstance inst,
  long * count) ;
# 1569 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetIndProfile(
  ICInstance inst,
  long index,
  ICProfileID * thisID) ;
# 1592 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICGetProfileName(
  ICInstance inst,
  ICProfileID thisID,
  Str255 name) ;
# 1615 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICSetProfileName(
  ICInstance inst,
  ICProfileID thisID,
  ConstStr255Param name) ;
# 1637 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICAddProfile(
  ICInstance inst,
  ICProfileID prototypeID,
  ICProfileID * newID) ;
# 1663 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
extern OSStatus
ICDeleteProfile(
  ICInstance inst,
  ICProfileID thisID) ;
# 1675 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/InternetConfig.h" 3
#pragma pack(pop)


}
# 34 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 1 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern "C" {


#pragma pack(push, 2)

enum {

  kNoProcess = 0,
  kSystemProcess = 1,
  kCurrentProcess = 2
};



typedef UInt16 LaunchFlags;
enum {
  launchContinue = 0x4000,
  launchNoFileFlags = 0x0800,
  launchUseMinimum = 0x0400,
  launchDontSwitch = 0x0200,
  launchAllow24Bit = 0x0100,
  launchInhibitDaemon = 0x0080
};



struct AppParameters {
  struct {
    UInt16 what;
    UInt32 message;
    UInt32 when;
    Point where;
    UInt16 modifiers;
  } theMsgEvent;
  UInt32 eventRefCon;
  UInt32 messageLength;
};
typedef struct AppParameters AppParameters;
typedef AppParameters * AppParametersPtr;
# 89 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
struct LaunchParamBlockRec {
  UInt32 reserved1;
  UInt16 reserved2;
  UInt16 launchBlockID;
  UInt32 launchEPBLength;
  UInt16 launchFileFlags;
  LaunchFlags launchControlFlags;
  FSSpecPtr launchAppSpec;
  ProcessSerialNumber launchProcessSN;
  UInt32 launchPreferredSize;
  UInt32 launchMinimumSize;
  UInt32 launchAvailableSize;
  AppParametersPtr launchAppParameters;
};
typedef struct LaunchParamBlockRec LaunchParamBlockRec;


typedef LaunchParamBlockRec * LaunchPBPtr;


enum {
  extendedBlock = 0x4C43,
  extendedBlockLen = sizeof(LaunchParamBlockRec) - 12
};

enum {

  modeReserved = 0x01000000,
  modeControlPanel = 0x00080000,
  modeLaunchDontSwitch = 0x00040000,
  modeDeskAccessory = 0x00020000,
  modeMultiLaunch = 0x00010000,
  modeNeedSuspendResume = 0x00004000,
  modeCanBackground = 0x00001000,
  modeDoesActivateOnFGSwitch = 0x00000800,
  modeOnlyBackground = 0x00000400,
  modeGetFrontClicks = 0x00000200,
  modeGetAppDiedMsg = 0x00000100,
  mode32BitCompatible = 0x00000080,
  modeHighLevelEventAware = 0x00000040,
  modeLocalAndRemoteHLEvents = 0x00000020,
  modeStationeryAware = 0x00000010,
  modeUseTextEditServices = 0x00000008,
  modeDisplayManagerAware = 0x00000004
};

typedef UInt32 ProcessApplicationTransformState;
enum {
  kProcessTransformToForegroundApplication = 1L
};
# 180 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
struct ProcessInfoRec {
  UInt32 processInfoLength;
  StringPtr processName;
  ProcessSerialNumber processNumber;
  UInt32 processType;
  OSType processSignature;
  UInt32 processMode;
  Ptr processLocation;
  UInt32 processSize;
  UInt32 processFreeMem;
  ProcessSerialNumber processLauncher;
  UInt32 processLaunchDate;
  UInt32 processActiveTime;
  FSSpecPtr processAppSpec;
};
typedef struct ProcessInfoRec ProcessInfoRec;


typedef ProcessInfoRec * ProcessInfoRecPtr;
# 241 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
struct ProcessInfoExtendedRec {
  UInt32 processInfoLength;
  StringPtr processName;
  ProcessSerialNumber processNumber;
  UInt32 processType;
  OSType processSignature;
  UInt32 processMode;
  Ptr processLocation;
  UInt32 processSize;
  UInt32 processFreeMem;
  ProcessSerialNumber processLauncher;
  UInt32 processLaunchDate;
  UInt32 processActiveTime;
  FSSpecPtr processAppSpec;
  UInt32 processTempMemTotal;
  UInt32 processPurgeableTempMemTotal;
};
typedef struct ProcessInfoExtendedRec ProcessInfoExtendedRec;


typedef ProcessInfoExtendedRec * ProcessInfoExtendedRecPtr;

struct SizeResourceRec {
  UInt16 flags;
  UInt32 preferredHeapSize;
  UInt32 minimumHeapSize;
};
typedef struct SizeResourceRec SizeResourceRec;
typedef SizeResourceRec * SizeResourceRecPtr;
typedef SizeResourceRecPtr * SizeResourceRecHandle;





enum {





  kProcessDictionaryIncludeAllInformationMask = (long)0xFFFFFFFF
};
# 292 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
enum {
  kQuitBeforeNormalTimeMask = 1,
  kQuitAtNormalTimeMask = 2,
  kQuitBeforeFBAsQuitMask = 4,
  kQuitBeforeShellQuitsMask = 8,
  kQuitBeforeTerminatorAppQuitsMask = 16,
  kQuitNeverMask = 32,
  kQuitOptionsMask = 0x7F,
  kQuitNotQuitDuringInstallMask = 0x0100,
  kQuitNotQuitDuringLogoutMask = 0x0200
};
# 313 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
LaunchApplication(LaunchPBPtr LaunchParams) ;
# 400 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
GetCurrentProcess(ProcessSerialNumber * PSN) ;
# 412 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
GetFrontProcess(ProcessSerialNumber * PSN) ;
# 424 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
GetNextProcess(ProcessSerialNumber * PSN) ;
# 472 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
GetProcessInformation(
  const ProcessSerialNumber * PSN,
  ProcessInfoRec * info) ;
# 533 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern CFDictionaryRef
ProcessInformationCopyDictionary(
  const ProcessSerialNumber * PSN,
  UInt32 infoToReturn) ;
# 547 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
SetFrontProcess(const ProcessSerialNumber * PSN) ;







enum {






  kSetFrontProcessFrontWindowOnly = (1 << 0)
};
# 595 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSStatus
SetFrontProcessWithOptions(
  const ProcessSerialNumber * inProcess,
  OptionBits inOptions) ;
# 609 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
WakeUpProcess(const ProcessSerialNumber * PSN) ;
# 621 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
SameProcess(
  const ProcessSerialNumber * PSN1,
  const ProcessSerialNumber * PSN2,
  Boolean * result) ;
# 637 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern void
ExitToShell(void) ;
# 666 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
KillProcess(const ProcessSerialNumber * inProcess) ;
# 713 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSStatus
GetProcessBundleLocation(
  const ProcessSerialNumber * psn,
  FSRef * location) ;
# 748 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSStatus
CopyProcessName(
  const ProcessSerialNumber * psn,
  CFStringRef * name) ;
# 779 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSStatus
GetProcessPID(
  const ProcessSerialNumber * psn,
  pid_t * pid) ;
# 810 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSStatus
GetProcessForPID(
  pid_t pid,
  ProcessSerialNumber * psn) ;
# 839 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern Boolean
IsProcessVisible(const ProcessSerialNumber * psn) ;
# 868 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSErr
ShowHideProcess(
  const ProcessSerialNumber * psn,
  Boolean visible) ;
# 905 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Processes.h" 3
extern OSStatus
TransformProcessType(
  const ProcessSerialNumber * psn,
  ProcessApplicationTransformState transformState) ;





enum {
  initDev = 0,
  hitDev = 1,
  closeDev = 2,
  nulDev = 3,
  updateDev = 4,
  activDev = 5,
  deactivDev = 6,
  keyEvtDev = 7,
  macDev = 8,
  undoDev = 9,
  cutDev = 10,
  copyDev = 11,
  pasteDev = 12,
  clearDev = 13,
  cursorDev = 14
};


enum {
  cdevGenErr = -1,
  cdevMemErr = 0,
  cdevResErr = 1,
  cdevUnset = 3
};





#pragma pack(pop)


}
# 38 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern "C" {
# 95 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
typedef struct OpaquePasteboardRef* PasteboardRef;
typedef void * PasteboardItemID;

enum {
  badPasteboardSyncErr = -25130,
  badPasteboardIndexErr = -25131,
  badPasteboardItemErr = -25132,
  badPasteboardFlavorErr = -25133,
  duplicatePasteboardFlavorErr = -25134,
  notPasteboardOwnerErr = -25135,
  noPasteboardPromiseKeeperErr = -25136
};
# 117 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
typedef OptionBits PasteboardSyncFlags;
enum {
# 129 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
  kPasteboardModified = (1 << 0),







  kPasteboardClientIsOwner = (1 << 1)
};
# 202 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
typedef OptionBits PasteboardFlavorFlags;
enum {




  kPasteboardFlavorNoFlags = 0,







  kPasteboardFlavorSenderOnly = (1 << 0),






  kPasteboardFlavorSenderTranslated = (1 << 1),







  kPasteboardFlavorNotSaved = (1 << 2),
# 243 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
  kPasteboardFlavorRequestOnly = (1 << 3),
# 252 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
  kPasteboardFlavorSystemTranslated = (1 << 8),
# 262 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
  kPasteboardFlavorPromised = (1 << 9)
};
# 282 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern CFTypeID
PasteboardGetTypeID(void) ;
# 333 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardCreate(
  CFStringRef inName,
  PasteboardRef * outPasteboard) ;
# 366 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern PasteboardSyncFlags
PasteboardSynchronize(PasteboardRef inPasteboard) ;
# 397 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardClear(PasteboardRef inPasteboard) ;
# 429 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardCopyName(
  PasteboardRef inPasteboard,
  CFStringRef * outName) ;
# 461 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardGetItemCount(
  PasteboardRef inPasteboard,
  ItemCount * outItemCount) ;
# 496 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardGetItemIdentifier(
  PasteboardRef inPasteboard,
  CFIndex inIndex,
  PasteboardItemID * outItem) ;
# 534 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardCopyItemFlavors(
  PasteboardRef inPasteboard,
  PasteboardItemID inItem,
  CFArrayRef * outFlavorTypes) ;
# 575 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardGetItemFlavorFlags(
  PasteboardRef inPasteboard,
  PasteboardItemID inItem,
  CFStringRef inFlavorType,
  PasteboardFlavorFlags * outFlags) ;
# 616 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardCopyItemFlavorData(
  PasteboardRef inPasteboard,
  PasteboardItemID inItem,
  CFStringRef inFlavorType,
  CFDataRef * outData) ;
# 676 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardPutItemFlavor(
  PasteboardRef inPasteboard,
  PasteboardItemID inItem,
  CFStringRef inFlavorType,
  CFDataRef inData,
  PasteboardFlavorFlags inFlags) ;
# 712 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardCopyPasteLocation(
  PasteboardRef inPasteboard,
  CFURLRef * outPasteLocation) ;
# 747 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardSetPasteLocation(
  PasteboardRef inPasteboard,
  CFURLRef inPasteLocation) ;
# 778 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
typedef OSStatus ( * PasteboardPromiseKeeperProcPtr)(PasteboardRef pasteboard, PasteboardItemID item, CFStringRef flavorType, void *context);
# 810 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardSetPromiseKeeper(
  PasteboardRef inPasteboard,
  PasteboardPromiseKeeperProcPtr inPromiseKeeper,
  void * inContext) ;
# 846 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Pasteboard.h" 3
extern OSStatus
PasteboardResolvePromises(PasteboardRef inPasteboard) ;




}
# 42 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern "C" {
# 119 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
typedef struct OpaqueTranslationRef* TranslationRef;

enum {





  badTranslationRefErr = -3031
};
# 142 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
typedef OptionBits TranslationFlags;
enum {





  kTranslationDataTranslation = (1 << 0),





  kTranslationFileTranslation = (1 << 1)
};
# 175 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern CFTypeID
TranslationGetTypeID(void) ;
# 217 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationCreate(
  CFStringRef inSourceType,
  CFStringRef inDestinationType,
  TranslationFlags inTranslationFlags,
  TranslationRef * outTranslation) ;
# 271 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationCreateWithSourceArray(
  CFArrayRef inSourceTypes,
  TranslationFlags inTranslationFlags,
  CFArrayRef * outDestinationTypes,
  CFDictionaryRef * outTranslations) ;
# 312 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationPerformForData(
  TranslationRef inTranslation,
  CFDataRef inSourceData,
  CFDataRef * outDestinationData) ;
# 370 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationPerformForFile(
  TranslationRef inTranslation,
  const FSRef * inSourceFile,
  const FSRef * inDestinationDirectory,
  CFStringRef inDestinationName,
  FSRef * outTranslatedFile) ;
# 429 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationPerformForURL(
  TranslationRef inTranslation,
  CFURLRef inSourceURL,
  CFURLRef inDestinationURL,
  CFURLRef * outTranslatedURL) ;
# 462 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationCopySourceType(
  TranslationRef inTranslation,
  CFStringRef * outSourceType) ;
# 494 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationCopyDestinationType(
  TranslationRef inTranslation,
  CFStringRef * outDestinationType) ;
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/TranslationServices.h" 3
extern OSStatus
TranslationGetTranslationFlags(
  TranslationRef inTranslation,
  TranslationFlags * outTranslationFlags) ;




}
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 1 3
# 11 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXError.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXError.h" 3
extern "C" {




enum {
    kAXErrorSuccess = 0,
    kAXErrorFailure = -25200,
    kAXErrorIllegalArgument = -25201,
    kAXErrorInvalidUIElement = -25202,
    kAXErrorInvalidUIElementObserver = -25203,
    kAXErrorCannotComplete = -25204,
    kAXErrorAttributeUnsupported = -25205,
    kAXErrorActionUnsupported = -25206,
    kAXErrorNotificationUnsupported = -25207,
    kAXErrorNotImplemented = -25208,
    kAXErrorNotificationAlreadyRegistered = -25209,
    kAXErrorNotificationNotRegistered = -25210,
    kAXErrorAPIDisabled = -25211,
    kAXErrorNoValue = -25212,
    kAXErrorParameterizedAttributeUnsupported = -25213,
 kAXErrorNotEnoughPrecision = -25214
};
typedef SInt32 AXError;



}
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXRoleConstants.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXAttributeConstants.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXActionConstants.h" 1 3
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXNotificationConstants.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXValueConstants.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXConstants.h" 2 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXUIElement.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXUIElement.h" 3
extern "C" {





extern Boolean AXAPIEnabled ();
extern Boolean AXIsProcessTrusted () ;

extern AXError AXMakeProcessTrusted (CFStringRef executablePath) ;

typedef const struct __AXUIElement *AXUIElementRef;

enum {
 kAXCopyMultipleAttributeOptionStopOnError = 0x1
};
typedef UInt32 AXCopyMultipleAttributeOptions;


extern CFTypeID AXUIElementGetTypeID (void);

extern AXError AXUIElementCopyAttributeNames (AXUIElementRef element, CFArrayRef *names);
extern AXError AXUIElementCopyAttributeValue (AXUIElementRef element, CFStringRef attribute, CFTypeRef *value);
extern AXError AXUIElementGetAttributeValueCount (AXUIElementRef element, CFStringRef attribute, CFIndex *count);
extern AXError AXUIElementCopyAttributeValues (AXUIElementRef element, CFStringRef attribute, CFIndex index, CFIndex maxValues, CFArrayRef *values);
extern AXError AXUIElementIsAttributeSettable (AXUIElementRef element, CFStringRef attribute, Boolean *settable);
extern AXError AXUIElementSetAttributeValue (AXUIElementRef element, CFStringRef attribute, CFTypeRef value);
extern AXError AXUIElementCopyMultipleAttributeValues (AXUIElementRef element, CFArrayRef attributes, AXCopyMultipleAttributeOptions options, CFArrayRef *values) ;

extern AXError AXUIElementCopyParameterizedAttributeNames (AXUIElementRef element, CFArrayRef *names) ;
extern AXError AXUIElementCopyParameterizedAttributeValue (AXUIElementRef element, CFStringRef parameterizedAttribute, CFTypeRef parameter, CFTypeRef *result) ;

extern AXError AXUIElementCopyActionNames (AXUIElementRef element, CFArrayRef *names);
extern AXError AXUIElementCopyActionDescription (AXUIElementRef element, CFStringRef action, CFStringRef *description);
extern AXError AXUIElementPerformAction (AXUIElementRef element, CFStringRef action);

extern AXError AXUIElementCopyElementAtPosition (AXUIElementRef application, float x,float y, AXUIElementRef *element);

extern AXUIElementRef AXUIElementCreateApplication (pid_t pid);
extern AXUIElementRef AXUIElementCreateSystemWide (void);

extern AXError AXUIElementGetPid (AXUIElementRef element, pid_t *pid);





extern AXError AXUIElementSetMessagingTimeout (AXUIElementRef element, float timeoutInSeconds) ;



extern AXError AXUIElementPostKeyboardEvent (AXUIElementRef application, CGCharCode keyChar, CGKeyCode virtualKey, Boolean keyDown);



typedef struct __AXObserver *AXObserverRef;

typedef void (*AXObserverCallback)(AXObserverRef observer, AXUIElementRef element, CFStringRef notification, void *refcon);

CFTypeID AXObserverGetTypeID (void);

extern AXError AXObserverCreate (pid_t application, AXObserverCallback callback, AXObserverRef *outObserver);

extern AXError AXObserverAddNotification (AXObserverRef observer, AXUIElementRef element, CFStringRef notification, void *refcon);
extern AXError AXObserverRemoveNotification (AXObserverRef observer, AXUIElementRef element, CFStringRef notification);

extern CFRunLoopSourceRef AXObserverGetRunLoopSource (AXObserverRef observer);


}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXValue.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXValue.h" 3
extern "C" {





typedef enum {

    kAXValueCGPointType = 1,
    kAXValueCGSizeType = 2,
    kAXValueCGRectType = 3,


    kAXValueCFRangeType = 4,


    kAXValueAXErrorType = 5,


    kAXValueIllegalType = 0

} AXValueType;

typedef const struct __AXValue *AXValueRef;

extern CFTypeID AXValueGetTypeID() ;


extern AXValueRef AXValueCreate (AXValueType theType, const void *valuePtr);
extern AXValueType AXValueGetType(AXValueRef value);

extern Boolean AXValueGetValue(AXValueRef value, AXValueType theType, void *valuePtr);



}
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXTextAttributedString.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXTextAttributedString.h" 3
extern "C" {




extern CFStringRef kAXFontTextAttribute;
extern CFStringRef kAXForegroundColorTextAttribute;
extern CFStringRef kAXBackgroundColorTextAttribute;
extern CFStringRef kAXUnderlineColorTextAttribute;
extern CFStringRef kAXStrikethroughColorTextAttribute;
extern CFStringRef kAXUnderlineTextAttribute;
extern CFStringRef kAXSuperscriptTextAttribute;
extern CFStringRef kAXStrikethroughTextAttribute;
extern CFStringRef kAXShadowTextAttribute;

extern CFStringRef kAXAttachmentTextAttribute;
extern CFStringRef kAXLinkTextAttribute;

extern CFStringRef kAXNaturalLanguageTextAttribute;
extern CFStringRef kAXReplacementStringTextAttribute;

extern CFStringRef kAXMisspelledTextAttribute;


extern CFStringRef kAXFontNameKey;
extern CFStringRef kAXFontFamilyKey;
extern CFStringRef kAXVisibleNameKey;
extern CFStringRef kAXFontSizeKey;

enum {
    kAXUnderlineStyleNone = 0x0,
    kAXUnderlineStyleSingle = 0x1,
    kAXUnderlineStyleThick = 0x2,
    kAXUnderlineStyleDouble = 0x9
};
typedef UInt32 AXUnderlineStyle;



extern CFStringRef kAXForegoundColorTextAttribute;


}
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/Accessibility.h" 2 3
# 50 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/UniversalAccess.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/UniversalAccess.h" 3
extern "C" {
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/UniversalAccess.h" 3
typedef UInt32 UAZoomChangeFocusType;
enum {




  kUAZoomFocusTypeOther = 0,




  kUAZoomFocusTypeInsertionPoint = 1
};
# 90 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/UniversalAccess.h" 3
extern Boolean
UAZoomEnabled(void) ;
# 132 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/UniversalAccess.h" 3
extern OSStatus
UAZoomChangeFocus(
  const CGRect * inRect,
  const CGRect * inHighlightRect,
  UAZoomChangeFocusType inType) ;




}
# 53 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 1 3
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 1 3
# 24 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmconfig.h" 1 3
# 29 "/System/Library/Frameworks/Security.framework/Headers/cssmconfig.h" 3
# 1 "/System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/ConditionalMacros.h" 1 3
# 30 "/System/Library/Frameworks/Security.framework/Headers/cssmconfig.h" 2 3
# 40 "/System/Library/Frameworks/Security.framework/Headers/cssmconfig.h" 3
extern "C" {



typedef int64_t sint64;



typedef uint64_t uint64;



typedef int32_t sint32;



typedef int16_t sint16;



typedef int8_t sint8;



typedef uint32_t uint32;



typedef uint16_t uint16;



typedef uint8_t uint8;



typedef intptr_t CSSM_INTPTR;
typedef size_t CSSM_SIZE;
# 89 "/System/Library/Frameworks/Security.framework/Headers/cssmconfig.h" 3
}
# 25 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 1 3
# 29 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmerr.h" 1 3
# 30 "/System/Library/Frameworks/Security.framework/Headers/cssmerr.h" 3
extern "C" {
# 43 "/System/Library/Frameworks/Security.framework/Headers/cssmerr.h" 3
enum {
 CSSM_BASE_ERROR = -0x7FFF0000
};

enum {
 CSSM_ERRORCODE_MODULE_EXTENT = 0x00000800,
 CSSM_ERRORCODE_CUSTOM_OFFSET = 0x00000400,
 CSSM_ERRORCODE_COMMON_EXTENT = 0x100
};
# 67 "/System/Library/Frameworks/Security.framework/Headers/cssmerr.h" 3
enum {
 CSSM_CSSM_BASE_ERROR = CSSM_BASE_ERROR,
 CSSM_CSSM_PRIVATE_ERROR = CSSM_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET,
 CSSM_CSP_BASE_ERROR = CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_CSP_PRIVATE_ERROR = CSSM_CSP_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET,
 CSSM_DL_BASE_ERROR = CSSM_CSP_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_DL_PRIVATE_ERROR = CSSM_DL_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET,
 CSSM_CL_BASE_ERROR = CSSM_DL_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_CL_PRIVATE_ERROR = CSSM_CL_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET,
 CSSM_TP_BASE_ERROR = CSSM_CL_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_TP_PRIVATE_ERROR = CSSM_TP_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET ,
 CSSM_KR_BASE_ERROR = CSSM_TP_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_KR_PRIVATE_ERROR = CSSM_KR_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET,
 CSSM_AC_BASE_ERROR = CSSM_KR_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_AC_PRIVATE_ERROR = CSSM_AC_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET
};


enum {
 CSSM_MDS_BASE_ERROR = CSSM_CSP_BASE_ERROR + CSSM_ERRORCODE_MODULE_EXTENT,
 CSSM_MDS_PRIVATE_ERROR = CSSM_MDS_BASE_ERROR + CSSM_ERRORCODE_CUSTOM_OFFSET
};


enum {
 CSSMERR_CSSM_INVALID_ADDIN_HANDLE =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT + 1,
 CSSMERR_CSSM_NOT_INITIALIZED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT + 2,
 CSSMERR_CSSM_INVALID_HANDLE_USAGE =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT + 3,
 CSSMERR_CSSM_PVC_REFERENT_NOT_FOUND =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT + 4,
 CSSMERR_CSSM_FUNCTION_INTEGRITY_FAIL =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT + 5
};


enum {
 CSSM_ERRCODE_INTERNAL_ERROR = 0x0001,
 CSSM_ERRCODE_MEMORY_ERROR = 0x0002,
 CSSM_ERRCODE_MDS_ERROR = 0x0003,
 CSSM_ERRCODE_INVALID_POINTER = 0x0004,
 CSSM_ERRCODE_INVALID_INPUT_POINTER = 0x0005,
 CSSM_ERRCODE_INVALID_OUTPUT_POINTER = 0x0006,
 CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED = 0x0007,
 CSSM_ERRCODE_SELF_CHECK_FAILED = 0x0008,
 CSSM_ERRCODE_OS_ACCESS_DENIED = 0x0009,
 CSSM_ERRCODE_FUNCTION_FAILED = 0x000A,
 CSSM_ERRCODE_MODULE_MANIFEST_VERIFY_FAILED = 0x000B,
 CSSM_ERRCODE_INVALID_GUID = 0x000C
};


enum {
 CSSM_ERRCODE_OPERATION_AUTH_DENIED = 0x0020,
 CSSM_ERRCODE_OBJECT_USE_AUTH_DENIED = 0x0021,
 CSSM_ERRCODE_OBJECT_MANIP_AUTH_DENIED = 0x0022,
 CSSM_ERRCODE_OBJECT_ACL_NOT_SUPPORTED = 0x0023,
 CSSM_ERRCODE_OBJECT_ACL_REQUIRED = 0x0024,
 CSSM_ERRCODE_INVALID_ACCESS_CREDENTIALS = 0x0025,
 CSSM_ERRCODE_INVALID_ACL_BASE_CERTS = 0x0026,
 CSSM_ERRCODE_ACL_BASE_CERTS_NOT_SUPPORTED = 0x0027,
 CSSM_ERRCODE_INVALID_SAMPLE_VALUE = 0x0028,
 CSSM_ERRCODE_SAMPLE_VALUE_NOT_SUPPORTED = 0x0029,
 CSSM_ERRCODE_INVALID_ACL_SUBJECT_VALUE = 0x002A,
 CSSM_ERRCODE_ACL_SUBJECT_TYPE_NOT_SUPPORTED = 0x002B,
 CSSM_ERRCODE_INVALID_ACL_CHALLENGE_CALLBACK = 0x002C,
 CSSM_ERRCODE_ACL_CHALLENGE_CALLBACK_FAILED = 0x002D,
 CSSM_ERRCODE_INVALID_ACL_ENTRY_TAG = 0x002E,
 CSSM_ERRCODE_ACL_ENTRY_TAG_NOT_FOUND = 0x002F,
 CSSM_ERRCODE_INVALID_ACL_EDIT_MODE = 0x0030,
 CSSM_ERRCODE_ACL_CHANGE_FAILED = 0x0031,
 CSSM_ERRCODE_INVALID_NEW_ACL_ENTRY = 0x0032,
 CSSM_ERRCODE_INVALID_NEW_ACL_OWNER = 0x0033,
 CSSM_ERRCODE_ACL_DELETE_FAILED = 0x0034,
 CSSM_ERRCODE_ACL_REPLACE_FAILED = 0x0035,
 CSSM_ERRCODE_ACL_ADD_FAILED = 0x0036
};


enum {
 CSSM_ERRCODE_INVALID_CONTEXT_HANDLE = 0x0040,
 CSSM_ERRCODE_INCOMPATIBLE_VERSION = 0x0041,
 CSSM_ERRCODE_INVALID_CERTGROUP_POINTER = 0x0042,
 CSSM_ERRCODE_INVALID_CERT_POINTER = 0x0043,
 CSSM_ERRCODE_INVALID_CRL_POINTER = 0x0044,
 CSSM_ERRCODE_INVALID_FIELD_POINTER = 0x0045,
 CSSM_ERRCODE_INVALID_DATA = 0x0046,
 CSSM_ERRCODE_CRL_ALREADY_SIGNED = 0x0047,
 CSSM_ERRCODE_INVALID_NUMBER_OF_FIELDS = 0x0048,
 CSSM_ERRCODE_VERIFICATION_FAILURE = 0x0049,
 CSSM_ERRCODE_INVALID_DB_HANDLE = 0x004A,
 CSSM_ERRCODE_PRIVILEGE_NOT_GRANTED = 0x004B,
 CSSM_ERRCODE_INVALID_DB_LIST = 0x004C,
 CSSM_ERRCODE_INVALID_DB_LIST_POINTER = 0x004D,
 CSSM_ERRCODE_UNKNOWN_FORMAT = 0x004E,
 CSSM_ERRCODE_UNKNOWN_TAG = 0x004F,
 CSSM_ERRCODE_INVALID_CSP_HANDLE = 0x0050,
 CSSM_ERRCODE_INVALID_DL_HANDLE = 0x0051,
 CSSM_ERRCODE_INVALID_CL_HANDLE = 0x0052,
 CSSM_ERRCODE_INVALID_TP_HANDLE = 0x0053,
 CSSM_ERRCODE_INVALID_KR_HANDLE = 0x0054,
 CSSM_ERRCODE_INVALID_AC_HANDLE = 0x0055,
 CSSM_ERRCODE_INVALID_PASSTHROUGH_ID = 0x0056,
 CSSM_ERRCODE_INVALID_NETWORK_ADDR = 0x0057,
 CSSM_ERRCODE_INVALID_CRYPTO_DATA = 0x0058
};


enum {
 CSSMERR_CSSM_INTERNAL_ERROR =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INTERNAL_ERROR,
 CSSMERR_CSSM_MEMORY_ERROR =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_MEMORY_ERROR,
 CSSMERR_CSSM_MDS_ERROR =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_MDS_ERROR,
 CSSMERR_CSSM_INVALID_POINTER =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INVALID_POINTER,
 CSSMERR_CSSM_INVALID_INPUT_POINTER =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INVALID_INPUT_POINTER,
 CSSMERR_CSSM_INVALID_OUTPUT_POINTER =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INVALID_OUTPUT_POINTER,
 CSSMERR_CSSM_FUNCTION_NOT_IMPLEMENTED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED,
 CSSMERR_CSSM_SELF_CHECK_FAILED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_SELF_CHECK_FAILED,
 CSSMERR_CSSM_OS_ACCESS_DENIED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_OS_ACCESS_DENIED,
 CSSMERR_CSSM_FUNCTION_FAILED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_FUNCTION_FAILED,
 CSSMERR_CSSM_MODULE_MANIFEST_VERIFY_FAILED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_MODULE_MANIFEST_VERIFY_FAILED,
 CSSMERR_CSSM_INVALID_GUID =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INVALID_GUID
};


enum {
 CSSMERR_CSSM_INVALID_CONTEXT_HANDLE =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INVALID_CONTEXT_HANDLE,
 CSSMERR_CSSM_INCOMPATIBLE_VERSION =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INCOMPATIBLE_VERSION,
 CSSMERR_CSSM_PRIVILEGE_NOT_GRANTED =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_PRIVILEGE_NOT_GRANTED
};


enum {
 CSSM_CSSM_BASE_CSSM_ERROR =
  CSSM_CSSM_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT + 0x10,
 CSSMERR_CSSM_SCOPE_NOT_SUPPORTED = CSSM_CSSM_BASE_CSSM_ERROR + 1,
 CSSMERR_CSSM_PVC_ALREADY_CONFIGURED = CSSM_CSSM_BASE_CSSM_ERROR + 2,
 CSSMERR_CSSM_INVALID_PVC = CSSM_CSSM_BASE_CSSM_ERROR + 3,
 CSSMERR_CSSM_EMM_LOAD_FAILED = CSSM_CSSM_BASE_CSSM_ERROR + 4,
 CSSMERR_CSSM_EMM_UNLOAD_FAILED = CSSM_CSSM_BASE_CSSM_ERROR + 5,
 CSSMERR_CSSM_ADDIN_LOAD_FAILED = CSSM_CSSM_BASE_CSSM_ERROR + 6,
 CSSMERR_CSSM_INVALID_KEY_HIERARCHY = CSSM_CSSM_BASE_CSSM_ERROR + 7,
 CSSMERR_CSSM_ADDIN_UNLOAD_FAILED = CSSM_CSSM_BASE_CSSM_ERROR + 8,
 CSSMERR_CSSM_LIB_REF_NOT_FOUND = CSSM_CSSM_BASE_CSSM_ERROR + 9,
 CSSMERR_CSSM_INVALID_ADDIN_FUNCTION_TABLE = CSSM_CSSM_BASE_CSSM_ERROR + 10,
 CSSMERR_CSSM_EMM_AUTHENTICATE_FAILED = CSSM_CSSM_BASE_CSSM_ERROR + 11,
 CSSMERR_CSSM_ADDIN_AUTHENTICATE_FAILED = CSSM_CSSM_BASE_CSSM_ERROR + 12,
 CSSMERR_CSSM_INVALID_SERVICE_MASK = CSSM_CSSM_BASE_CSSM_ERROR + 13,
 CSSMERR_CSSM_MODULE_NOT_LOADED = CSSM_CSSM_BASE_CSSM_ERROR + 14,
 CSSMERR_CSSM_INVALID_SUBSERVICEID = CSSM_CSSM_BASE_CSSM_ERROR + 15,
 CSSMERR_CSSM_BUFFER_TOO_SMALL = CSSM_CSSM_BASE_CSSM_ERROR + 16,
 CSSMERR_CSSM_INVALID_ATTRIBUTE = CSSM_CSSM_BASE_CSSM_ERROR + 17,
 CSSMERR_CSSM_ATTRIBUTE_NOT_IN_CONTEXT = CSSM_CSSM_BASE_CSSM_ERROR + 18,
 CSSMERR_CSSM_MODULE_MANAGER_INITIALIZE_FAIL = CSSM_CSSM_BASE_CSSM_ERROR + 19,
 CSSMERR_CSSM_MODULE_MANAGER_NOT_FOUND = CSSM_CSSM_BASE_CSSM_ERROR + 20,
 CSSMERR_CSSM_EVENT_NOTIFICATION_CALLBACK_NOT_FOUND = CSSM_CSSM_BASE_CSSM_ERROR + 21
};


enum {
 CSSMERR_CSP_INTERNAL_ERROR =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INTERNAL_ERROR,
 CSSMERR_CSP_MEMORY_ERROR =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_MEMORY_ERROR,
 CSSMERR_CSP_MDS_ERROR =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_MDS_ERROR,
 CSSMERR_CSP_INVALID_POINTER =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_POINTER,
 CSSMERR_CSP_INVALID_INPUT_POINTER =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_INPUT_POINTER,
 CSSMERR_CSP_INVALID_OUTPUT_POINTER =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_OUTPUT_POINTER,
 CSSMERR_CSP_FUNCTION_NOT_IMPLEMENTED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED,
 CSSMERR_CSP_SELF_CHECK_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_SELF_CHECK_FAILED,
 CSSMERR_CSP_OS_ACCESS_DENIED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_OS_ACCESS_DENIED,
 CSSMERR_CSP_FUNCTION_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_FUNCTION_FAILED
};


enum {
 CSSMERR_CSP_OPERATION_AUTH_DENIED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_OPERATION_AUTH_DENIED,
 CSSMERR_CSP_OBJECT_USE_AUTH_DENIED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_OBJECT_USE_AUTH_DENIED,
 CSSMERR_CSP_OBJECT_MANIP_AUTH_DENIED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_OBJECT_MANIP_AUTH_DENIED,
 CSSMERR_CSP_OBJECT_ACL_NOT_SUPPORTED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_OBJECT_ACL_NOT_SUPPORTED,
 CSSMERR_CSP_OBJECT_ACL_REQUIRED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_OBJECT_ACL_REQUIRED,
 CSSMERR_CSP_INVALID_ACCESS_CREDENTIALS =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_ACCESS_CREDENTIALS,
 CSSMERR_CSP_INVALID_ACL_BASE_CERTS =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_BASE_CERTS,
 CSSMERR_CSP_ACL_BASE_CERTS_NOT_SUPPORTED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_BASE_CERTS_NOT_SUPPORTED,
 CSSMERR_CSP_INVALID_SAMPLE_VALUE =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_SAMPLE_VALUE,
 CSSMERR_CSP_SAMPLE_VALUE_NOT_SUPPORTED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_SAMPLE_VALUE_NOT_SUPPORTED,
 CSSMERR_CSP_INVALID_ACL_SUBJECT_VALUE =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_SUBJECT_VALUE,
 CSSMERR_CSP_ACL_SUBJECT_TYPE_NOT_SUPPORTED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_SUBJECT_TYPE_NOT_SUPPORTED,
 CSSMERR_CSP_INVALID_ACL_CHALLENGE_CALLBACK =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_CHALLENGE_CALLBACK,
 CSSMERR_CSP_ACL_CHALLENGE_CALLBACK_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_CHALLENGE_CALLBACK_FAILED,
 CSSMERR_CSP_INVALID_ACL_ENTRY_TAG =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_ENTRY_TAG,
 CSSMERR_CSP_ACL_ENTRY_TAG_NOT_FOUND =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_ENTRY_TAG_NOT_FOUND,
 CSSMERR_CSP_INVALID_ACL_EDIT_MODE =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_EDIT_MODE,
 CSSMERR_CSP_ACL_CHANGE_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_CHANGE_FAILED,
 CSSMERR_CSP_INVALID_NEW_ACL_ENTRY =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_NEW_ACL_ENTRY,
 CSSMERR_CSP_INVALID_NEW_ACL_OWNER =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_NEW_ACL_OWNER,
 CSSMERR_CSP_ACL_DELETE_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_DELETE_FAILED,
 CSSMERR_CSP_ACL_REPLACE_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_REPLACE_FAILED,
 CSSMERR_CSP_ACL_ADD_FAILED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_ACL_ADD_FAILED
};


enum {
 CSSMERR_CSP_INVALID_CONTEXT_HANDLE =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_CONTEXT_HANDLE,
 CSSMERR_CSP_PRIVILEGE_NOT_GRANTED =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_PRIVILEGE_NOT_GRANTED,
 CSSMERR_CSP_INVALID_DATA =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_DATA,
 CSSMERR_CSP_INVALID_PASSTHROUGH_ID =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_PASSTHROUGH_ID,
 CSSMERR_CSP_INVALID_CRYPTO_DATA =
  CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INVALID_CRYPTO_DATA
};


enum {

 CSSM_CSP_BASE_CSP_ERROR =
  CSSM_CSP_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT,
 CSSMERR_CSP_INPUT_LENGTH_ERROR = CSSM_CSP_BASE_CSP_ERROR + 1,
 CSSMERR_CSP_OUTPUT_LENGTH_ERROR = CSSM_CSP_BASE_CSP_ERROR + 2,
 CSSMERR_CSP_PRIVILEGE_NOT_SUPPORTED = CSSM_CSP_BASE_CSP_ERROR + 3,
 CSSMERR_CSP_DEVICE_ERROR = CSSM_CSP_BASE_CSP_ERROR + 4,
 CSSMERR_CSP_DEVICE_MEMORY_ERROR = CSSM_CSP_BASE_CSP_ERROR + 5,
 CSSMERR_CSP_ATTACH_HANDLE_BUSY = CSSM_CSP_BASE_CSP_ERROR + 6,
 CSSMERR_CSP_NOT_LOGGED_IN = CSSM_CSP_BASE_CSP_ERROR + 7,
 CSSMERR_CSP_INVALID_KEY = CSSM_CSP_BASE_CSP_ERROR + 16,
 CSSMERR_CSP_INVALID_KEY_REFERENCE = CSSM_CSP_BASE_CSP_ERROR + 17,
 CSSMERR_CSP_INVALID_KEY_CLASS = CSSM_CSP_BASE_CSP_ERROR + 18,
 CSSMERR_CSP_ALGID_MISMATCH = CSSM_CSP_BASE_CSP_ERROR + 19,
 CSSMERR_CSP_KEY_USAGE_INCORRECT = CSSM_CSP_BASE_CSP_ERROR + 20,
 CSSMERR_CSP_KEY_BLOB_TYPE_INCORRECT = CSSM_CSP_BASE_CSP_ERROR + 21,
 CSSMERR_CSP_KEY_HEADER_INCONSISTENT = CSSM_CSP_BASE_CSP_ERROR + 22,
 CSSMERR_CSP_UNSUPPORTED_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 23,
 CSSMERR_CSP_UNSUPPORTED_KEY_SIZE = CSSM_CSP_BASE_CSP_ERROR + 24,
 CSSMERR_CSP_INVALID_KEY_POINTER = CSSM_CSP_BASE_CSP_ERROR + 25,
 CSSMERR_CSP_INVALID_KEYUSAGE_MASK = CSSM_CSP_BASE_CSP_ERROR + 26,
 CSSMERR_CSP_UNSUPPORTED_KEYUSAGE_MASK = CSSM_CSP_BASE_CSP_ERROR + 27,
 CSSMERR_CSP_INVALID_KEYATTR_MASK = CSSM_CSP_BASE_CSP_ERROR + 28,
 CSSMERR_CSP_UNSUPPORTED_KEYATTR_MASK = CSSM_CSP_BASE_CSP_ERROR + 29,
 CSSMERR_CSP_INVALID_KEY_LABEL = CSSM_CSP_BASE_CSP_ERROR + 30,
 CSSMERR_CSP_UNSUPPORTED_KEY_LABEL = CSSM_CSP_BASE_CSP_ERROR + 31,
 CSSMERR_CSP_INVALID_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 32,


 CSSMERR_CSP_INVALID_DATA_COUNT = CSSM_CSP_BASE_CSP_ERROR + 40,
 CSSMERR_CSP_VECTOR_OF_BUFS_UNSUPPORTED = CSSM_CSP_BASE_CSP_ERROR + 41,
 CSSMERR_CSP_INVALID_INPUT_VECTOR = CSSM_CSP_BASE_CSP_ERROR + 42,
 CSSMERR_CSP_INVALID_OUTPUT_VECTOR = CSSM_CSP_BASE_CSP_ERROR + 43,


 CSSMERR_CSP_INVALID_CONTEXT = CSSM_CSP_BASE_CSP_ERROR + 48,
 CSSMERR_CSP_INVALID_ALGORITHM = CSSM_CSP_BASE_CSP_ERROR + 49,
 CSSMERR_CSP_INVALID_ATTR_KEY = CSSM_CSP_BASE_CSP_ERROR + 54,
 CSSMERR_CSP_MISSING_ATTR_KEY = CSSM_CSP_BASE_CSP_ERROR + 55,
 CSSMERR_CSP_INVALID_ATTR_INIT_VECTOR = CSSM_CSP_BASE_CSP_ERROR + 56,
 CSSMERR_CSP_MISSING_ATTR_INIT_VECTOR = CSSM_CSP_BASE_CSP_ERROR + 57,
 CSSMERR_CSP_INVALID_ATTR_SALT = CSSM_CSP_BASE_CSP_ERROR + 58,
 CSSMERR_CSP_MISSING_ATTR_SALT = CSSM_CSP_BASE_CSP_ERROR + 59,
 CSSMERR_CSP_INVALID_ATTR_PADDING = CSSM_CSP_BASE_CSP_ERROR + 60,
 CSSMERR_CSP_MISSING_ATTR_PADDING = CSSM_CSP_BASE_CSP_ERROR + 61,
 CSSMERR_CSP_INVALID_ATTR_RANDOM = CSSM_CSP_BASE_CSP_ERROR + 62,
 CSSMERR_CSP_MISSING_ATTR_RANDOM = CSSM_CSP_BASE_CSP_ERROR + 63,
 CSSMERR_CSP_INVALID_ATTR_SEED = CSSM_CSP_BASE_CSP_ERROR + 64,
 CSSMERR_CSP_MISSING_ATTR_SEED = CSSM_CSP_BASE_CSP_ERROR + 65,
 CSSMERR_CSP_INVALID_ATTR_PASSPHRASE = CSSM_CSP_BASE_CSP_ERROR + 66,
 CSSMERR_CSP_MISSING_ATTR_PASSPHRASE = CSSM_CSP_BASE_CSP_ERROR + 67,
 CSSMERR_CSP_INVALID_ATTR_KEY_LENGTH = CSSM_CSP_BASE_CSP_ERROR + 68,
 CSSMERR_CSP_MISSING_ATTR_KEY_LENGTH = CSSM_CSP_BASE_CSP_ERROR + 69,
 CSSMERR_CSP_INVALID_ATTR_BLOCK_SIZE = CSSM_CSP_BASE_CSP_ERROR + 70,
 CSSMERR_CSP_MISSING_ATTR_BLOCK_SIZE = CSSM_CSP_BASE_CSP_ERROR + 71,
 CSSMERR_CSP_INVALID_ATTR_OUTPUT_SIZE = CSSM_CSP_BASE_CSP_ERROR + 100,
 CSSMERR_CSP_MISSING_ATTR_OUTPUT_SIZE = CSSM_CSP_BASE_CSP_ERROR + 101,
 CSSMERR_CSP_INVALID_ATTR_ROUNDS = CSSM_CSP_BASE_CSP_ERROR + 102,
 CSSMERR_CSP_MISSING_ATTR_ROUNDS = CSSM_CSP_BASE_CSP_ERROR + 103,
 CSSMERR_CSP_INVALID_ATTR_ALG_PARAMS = CSSM_CSP_BASE_CSP_ERROR + 104,
 CSSMERR_CSP_MISSING_ATTR_ALG_PARAMS = CSSM_CSP_BASE_CSP_ERROR + 105,
 CSSMERR_CSP_INVALID_ATTR_LABEL = CSSM_CSP_BASE_CSP_ERROR + 106,
 CSSMERR_CSP_MISSING_ATTR_LABEL = CSSM_CSP_BASE_CSP_ERROR + 107,
 CSSMERR_CSP_INVALID_ATTR_KEY_TYPE = CSSM_CSP_BASE_CSP_ERROR + 108,
 CSSMERR_CSP_MISSING_ATTR_KEY_TYPE = CSSM_CSP_BASE_CSP_ERROR + 109,
 CSSMERR_CSP_INVALID_ATTR_MODE = CSSM_CSP_BASE_CSP_ERROR + 110,
 CSSMERR_CSP_MISSING_ATTR_MODE = CSSM_CSP_BASE_CSP_ERROR + 111,
 CSSMERR_CSP_INVALID_ATTR_EFFECTIVE_BITS = CSSM_CSP_BASE_CSP_ERROR + 112,
 CSSMERR_CSP_MISSING_ATTR_EFFECTIVE_BITS = CSSM_CSP_BASE_CSP_ERROR + 113,
 CSSMERR_CSP_INVALID_ATTR_START_DATE = CSSM_CSP_BASE_CSP_ERROR + 114,
 CSSMERR_CSP_MISSING_ATTR_START_DATE = CSSM_CSP_BASE_CSP_ERROR + 115,
 CSSMERR_CSP_INVALID_ATTR_END_DATE = CSSM_CSP_BASE_CSP_ERROR + 116,
 CSSMERR_CSP_MISSING_ATTR_END_DATE = CSSM_CSP_BASE_CSP_ERROR + 117,
 CSSMERR_CSP_INVALID_ATTR_VERSION = CSSM_CSP_BASE_CSP_ERROR + 118,
 CSSMERR_CSP_MISSING_ATTR_VERSION = CSSM_CSP_BASE_CSP_ERROR + 119,
 CSSMERR_CSP_INVALID_ATTR_PRIME = CSSM_CSP_BASE_CSP_ERROR + 120,
 CSSMERR_CSP_MISSING_ATTR_PRIME = CSSM_CSP_BASE_CSP_ERROR + 121,
 CSSMERR_CSP_INVALID_ATTR_BASE = CSSM_CSP_BASE_CSP_ERROR + 122,
 CSSMERR_CSP_MISSING_ATTR_BASE = CSSM_CSP_BASE_CSP_ERROR + 123,
 CSSMERR_CSP_INVALID_ATTR_SUBPRIME = CSSM_CSP_BASE_CSP_ERROR + 124,
 CSSMERR_CSP_MISSING_ATTR_SUBPRIME = CSSM_CSP_BASE_CSP_ERROR + 125,
 CSSMERR_CSP_INVALID_ATTR_ITERATION_COUNT = CSSM_CSP_BASE_CSP_ERROR + 126,
 CSSMERR_CSP_MISSING_ATTR_ITERATION_COUNT = CSSM_CSP_BASE_CSP_ERROR + 127,
 CSSMERR_CSP_INVALID_ATTR_DL_DB_HANDLE = CSSM_CSP_BASE_CSP_ERROR + 128,
 CSSMERR_CSP_MISSING_ATTR_DL_DB_HANDLE = CSSM_CSP_BASE_CSP_ERROR + 129,
 CSSMERR_CSP_INVALID_ATTR_ACCESS_CREDENTIALS = CSSM_CSP_BASE_CSP_ERROR + 130,
 CSSMERR_CSP_MISSING_ATTR_ACCESS_CREDENTIALS = CSSM_CSP_BASE_CSP_ERROR + 131,
 CSSMERR_CSP_INVALID_ATTR_PUBLIC_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 132,
 CSSMERR_CSP_MISSING_ATTR_PUBLIC_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 133,
 CSSMERR_CSP_INVALID_ATTR_PRIVATE_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 134,
 CSSMERR_CSP_MISSING_ATTR_PRIVATE_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 135,
 CSSMERR_CSP_INVALID_ATTR_SYMMETRIC_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 136,
 CSSMERR_CSP_MISSING_ATTR_SYMMETRIC_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 137,
 CSSMERR_CSP_INVALID_ATTR_WRAPPED_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 138,
 CSSMERR_CSP_MISSING_ATTR_WRAPPED_KEY_FORMAT = CSSM_CSP_BASE_CSP_ERROR + 139,


 CSSMERR_CSP_STAGED_OPERATION_IN_PROGRESS = CSSM_CSP_BASE_CSP_ERROR + 72,
 CSSMERR_CSP_STAGED_OPERATION_NOT_STARTED = CSSM_CSP_BASE_CSP_ERROR + 73,
 CSSMERR_CSP_VERIFY_FAILED = CSSM_CSP_BASE_CSP_ERROR + 74,
 CSSMERR_CSP_INVALID_SIGNATURE = CSSM_CSP_BASE_CSP_ERROR + 75,
 CSSMERR_CSP_QUERY_SIZE_UNKNOWN = CSSM_CSP_BASE_CSP_ERROR + 76,
 CSSMERR_CSP_BLOCK_SIZE_MISMATCH = CSSM_CSP_BASE_CSP_ERROR + 77,
 CSSMERR_CSP_PRIVATE_KEY_NOT_FOUND = CSSM_CSP_BASE_CSP_ERROR + 78,
 CSSMERR_CSP_PUBLIC_KEY_INCONSISTENT = CSSM_CSP_BASE_CSP_ERROR + 79,
 CSSMERR_CSP_DEVICE_VERIFY_FAILED = CSSM_CSP_BASE_CSP_ERROR + 80,
 CSSMERR_CSP_INVALID_LOGIN_NAME = CSSM_CSP_BASE_CSP_ERROR + 81,
 CSSMERR_CSP_ALREADY_LOGGED_IN = CSSM_CSP_BASE_CSP_ERROR + 82,
 CSSMERR_CSP_PRIVATE_KEY_ALREADY_EXISTS = CSSM_CSP_BASE_CSP_ERROR + 83,
 CSSMERR_CSP_KEY_LABEL_ALREADY_EXISTS = CSSM_CSP_BASE_CSP_ERROR + 84,
 CSSMERR_CSP_INVALID_DIGEST_ALGORITHM = CSSM_CSP_BASE_CSP_ERROR + 85,
 CSSMERR_CSP_CRYPTO_DATA_CALLBACK_FAILED = CSSM_CSP_BASE_CSP_ERROR + 86
};



enum {
 CSSMERR_TP_INTERNAL_ERROR =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INTERNAL_ERROR,
 CSSMERR_TP_MEMORY_ERROR =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_MEMORY_ERROR,
 CSSMERR_TP_MDS_ERROR =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_MDS_ERROR,
 CSSMERR_TP_INVALID_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_POINTER,
 CSSMERR_TP_INVALID_INPUT_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_INPUT_POINTER,
 CSSMERR_TP_INVALID_OUTPUT_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_OUTPUT_POINTER,
 CSSMERR_TP_FUNCTION_NOT_IMPLEMENTED =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED,
 CSSMERR_TP_SELF_CHECK_FAILED =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_SELF_CHECK_FAILED,
 CSSMERR_TP_OS_ACCESS_DENIED =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_OS_ACCESS_DENIED,
 CSSMERR_TP_FUNCTION_FAILED =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_FUNCTION_FAILED,
 CSSMERR_TP_INVALID_CONTEXT_HANDLE =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_CONTEXT_HANDLE,
 CSSMERR_TP_INVALID_DATA =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_DATA,
 CSSMERR_TP_INVALID_DB_LIST =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_LIST,
 CSSMERR_TP_INVALID_CERTGROUP_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_CERTGROUP_POINTER,
 CSSMERR_TP_INVALID_CERT_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_CERT_POINTER,
 CSSMERR_TP_INVALID_CRL_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_CRL_POINTER,
 CSSMERR_TP_INVALID_FIELD_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_FIELD_POINTER,
 CSSMERR_TP_INVALID_NETWORK_ADDR =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_NETWORK_ADDR,
 CSSMERR_TP_CRL_ALREADY_SIGNED =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_CRL_ALREADY_SIGNED,
 CSSMERR_TP_INVALID_NUMBER_OF_FIELDS =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_NUMBER_OF_FIELDS,
 CSSMERR_TP_VERIFICATION_FAILURE =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_VERIFICATION_FAILURE,
 CSSMERR_TP_INVALID_DB_HANDLE =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_HANDLE,
 CSSMERR_TP_UNKNOWN_FORMAT =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_UNKNOWN_FORMAT,
 CSSMERR_TP_UNKNOWN_TAG =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_UNKNOWN_TAG,
 CSSMERR_TP_INVALID_PASSTHROUGH_ID =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_PASSTHROUGH_ID,
 CSSMERR_TP_INVALID_CSP_HANDLE =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_CSP_HANDLE,
 CSSMERR_TP_INVALID_DL_HANDLE =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_DL_HANDLE,
 CSSMERR_TP_INVALID_CL_HANDLE =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_CL_HANDLE,
 CSSMERR_TP_INVALID_DB_LIST_POINTER =
  CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_LIST_POINTER
};


enum {
 CSSM_TP_BASE_TP_ERROR =
  CSSM_TP_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT,
 CSSMERR_TP_INVALID_CALLERAUTH_CONTEXT_POINTER = CSSM_TP_BASE_TP_ERROR + 1,
 CSSMERR_TP_INVALID_IDENTIFIER_POINTER = CSSM_TP_BASE_TP_ERROR + 2,
 CSSMERR_TP_INVALID_KEYCACHE_HANDLE = CSSM_TP_BASE_TP_ERROR + 3,
 CSSMERR_TP_INVALID_CERTGROUP = CSSM_TP_BASE_TP_ERROR + 4,
 CSSMERR_TP_INVALID_CRLGROUP = CSSM_TP_BASE_TP_ERROR + 5,
 CSSMERR_TP_INVALID_CRLGROUP_POINTER = CSSM_TP_BASE_TP_ERROR + 6,
 CSSMERR_TP_AUTHENTICATION_FAILED = CSSM_TP_BASE_TP_ERROR + 7,
 CSSMERR_TP_CERTGROUP_INCOMPLETE = CSSM_TP_BASE_TP_ERROR + 8,
 CSSMERR_TP_CERTIFICATE_CANT_OPERATE = CSSM_TP_BASE_TP_ERROR + 9,
 CSSMERR_TP_CERT_EXPIRED = CSSM_TP_BASE_TP_ERROR + 10,
 CSSMERR_TP_CERT_NOT_VALID_YET = CSSM_TP_BASE_TP_ERROR + 11,
 CSSMERR_TP_CERT_REVOKED = CSSM_TP_BASE_TP_ERROR + 12,
 CSSMERR_TP_CERT_SUSPENDED = CSSM_TP_BASE_TP_ERROR + 13,
 CSSMERR_TP_INSUFFICIENT_CREDENTIALS = CSSM_TP_BASE_TP_ERROR + 14,
 CSSMERR_TP_INVALID_ACTION = CSSM_TP_BASE_TP_ERROR + 15,
 CSSMERR_TP_INVALID_ACTION_DATA = CSSM_TP_BASE_TP_ERROR + 16,
 CSSMERR_TP_INVALID_ANCHOR_CERT = CSSM_TP_BASE_TP_ERROR + 18,
 CSSMERR_TP_INVALID_AUTHORITY = CSSM_TP_BASE_TP_ERROR + 19,
 CSSMERR_TP_VERIFY_ACTION_FAILED = CSSM_TP_BASE_TP_ERROR + 20,
 CSSMERR_TP_INVALID_CERTIFICATE = CSSM_TP_BASE_TP_ERROR + 21,
 CSSMERR_TP_INVALID_CERT_AUTHORITY = CSSM_TP_BASE_TP_ERROR + 22,
 CSSMERR_TP_INVALID_CRL_AUTHORITY = CSSM_TP_BASE_TP_ERROR + 23,
 CSSMERR_TP_INVALID_CRL_ENCODING = CSSM_TP_BASE_TP_ERROR + 24,
 CSSMERR_TP_INVALID_CRL_TYPE = CSSM_TP_BASE_TP_ERROR + 25,
 CSSMERR_TP_INVALID_CRL = CSSM_TP_BASE_TP_ERROR + 26,
 CSSMERR_TP_INVALID_FORM_TYPE = CSSM_TP_BASE_TP_ERROR + 27,
 CSSMERR_TP_INVALID_ID = CSSM_TP_BASE_TP_ERROR + 28,
 CSSMERR_TP_INVALID_IDENTIFIER = CSSM_TP_BASE_TP_ERROR + 29,
 CSSMERR_TP_INVALID_INDEX = CSSM_TP_BASE_TP_ERROR + 30,
 CSSMERR_TP_INVALID_NAME = CSSM_TP_BASE_TP_ERROR + 31,
 CSSMERR_TP_INVALID_POLICY_IDENTIFIERS = CSSM_TP_BASE_TP_ERROR + 32,
 CSSMERR_TP_INVALID_TIMESTRING = CSSM_TP_BASE_TP_ERROR + 33,
 CSSMERR_TP_INVALID_REASON = CSSM_TP_BASE_TP_ERROR + 34,
 CSSMERR_TP_INVALID_REQUEST_INPUTS = CSSM_TP_BASE_TP_ERROR + 35,
 CSSMERR_TP_INVALID_RESPONSE_VECTOR = CSSM_TP_BASE_TP_ERROR + 36,
 CSSMERR_TP_INVALID_SIGNATURE = CSSM_TP_BASE_TP_ERROR + 37,
 CSSMERR_TP_INVALID_STOP_ON_POLICY = CSSM_TP_BASE_TP_ERROR + 38,
 CSSMERR_TP_INVALID_CALLBACK = CSSM_TP_BASE_TP_ERROR + 39,
 CSSMERR_TP_INVALID_TUPLE = CSSM_TP_BASE_TP_ERROR + 40,
 CSSMERR_TP_NOT_SIGNER = CSSM_TP_BASE_TP_ERROR + 41,
 CSSMERR_TP_NOT_TRUSTED = CSSM_TP_BASE_TP_ERROR + 42,
 CSSMERR_TP_NO_DEFAULT_AUTHORITY = CSSM_TP_BASE_TP_ERROR + 43,
 CSSMERR_TP_REJECTED_FORM = CSSM_TP_BASE_TP_ERROR + 44,
 CSSMERR_TP_REQUEST_LOST = CSSM_TP_BASE_TP_ERROR + 45,
 CSSMERR_TP_REQUEST_REJECTED = CSSM_TP_BASE_TP_ERROR + 46,
 CSSMERR_TP_UNSUPPORTED_ADDR_TYPE = CSSM_TP_BASE_TP_ERROR + 47,
 CSSMERR_TP_UNSUPPORTED_SERVICE = CSSM_TP_BASE_TP_ERROR + 48,
 CSSMERR_TP_INVALID_TUPLEGROUP_POINTER = CSSM_TP_BASE_TP_ERROR + 49,
 CSSMERR_TP_INVALID_TUPLEGROUP = CSSM_TP_BASE_TP_ERROR + 50
};


enum {
 CSSMERR_AC_INTERNAL_ERROR =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INTERNAL_ERROR,
 CSSMERR_AC_MEMORY_ERROR =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_MEMORY_ERROR,
 CSSMERR_AC_MDS_ERROR =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_MDS_ERROR,
 CSSMERR_AC_INVALID_POINTER =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_POINTER,
 CSSMERR_AC_INVALID_INPUT_POINTER =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_INPUT_POINTER,
 CSSMERR_AC_INVALID_OUTPUT_POINTER =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_OUTPUT_POINTER,
 CSSMERR_AC_FUNCTION_NOT_IMPLEMENTED =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED,
 CSSMERR_AC_SELF_CHECK_FAILED =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_SELF_CHECK_FAILED,
 CSSMERR_AC_OS_ACCESS_DENIED =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_OS_ACCESS_DENIED,
 CSSMERR_AC_FUNCTION_FAILED =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_FUNCTION_FAILED,
 CSSMERR_AC_INVALID_CONTEXT_HANDLE =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_CONTEXT_HANDLE,
 CSSMERR_AC_INVALID_DATA =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_DATA,
 CSSMERR_AC_INVALID_DB_LIST =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_LIST,
 CSSMERR_AC_INVALID_PASSTHROUGH_ID =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_PASSTHROUGH_ID,
 CSSMERR_AC_INVALID_DL_HANDLE =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_DL_HANDLE,
 CSSMERR_AC_INVALID_CL_HANDLE =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_CL_HANDLE,
 CSSMERR_AC_INVALID_TP_HANDLE =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_TP_HANDLE,
 CSSMERR_AC_INVALID_DB_HANDLE =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_HANDLE,
 CSSMERR_AC_INVALID_DB_LIST_POINTER =
  CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_LIST_POINTER
};


enum {
 CSSM_AC_BASE_AC_ERROR =
  CSSM_AC_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT,
 CSSMERR_AC_INVALID_BASE_ACLS = CSSM_AC_BASE_AC_ERROR + 1,
 CSSMERR_AC_INVALID_TUPLE_CREDENTIALS = CSSM_AC_BASE_AC_ERROR + 2,
 CSSMERR_AC_INVALID_ENCODING = CSSM_AC_BASE_AC_ERROR + 3,
 CSSMERR_AC_INVALID_VALIDITY_PERIOD = CSSM_AC_BASE_AC_ERROR + 4,
 CSSMERR_AC_INVALID_REQUESTOR = CSSM_AC_BASE_AC_ERROR + 5,
 CSSMERR_AC_INVALID_REQUEST_DESCRIPTOR = CSSM_AC_BASE_AC_ERROR + 6
};


enum {
 CSSMERR_CL_INTERNAL_ERROR =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INTERNAL_ERROR,
 CSSMERR_CL_MEMORY_ERROR =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_MEMORY_ERROR,
 CSSMERR_CL_MDS_ERROR =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_MDS_ERROR,
 CSSMERR_CL_INVALID_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_POINTER,
 CSSMERR_CL_INVALID_INPUT_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_INPUT_POINTER,
 CSSMERR_CL_INVALID_OUTPUT_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_OUTPUT_POINTER,
 CSSMERR_CL_FUNCTION_NOT_IMPLEMENTED =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED,
 CSSMERR_CL_SELF_CHECK_FAILED =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_SELF_CHECK_FAILED,
 CSSMERR_CL_OS_ACCESS_DENIED =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_OS_ACCESS_DENIED,
 CSSMERR_CL_FUNCTION_FAILED =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_FUNCTION_FAILED,
 CSSMERR_CL_INVALID_CONTEXT_HANDLE =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_CONTEXT_HANDLE,
 CSSMERR_CL_INVALID_CERTGROUP_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_CERTGROUP_POINTER,
 CSSMERR_CL_INVALID_CERT_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_CERT_POINTER,
 CSSMERR_CL_INVALID_CRL_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_CRL_POINTER,
 CSSMERR_CL_INVALID_FIELD_POINTER =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_FIELD_POINTER,
 CSSMERR_CL_INVALID_DATA =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_DATA,
 CSSMERR_CL_CRL_ALREADY_SIGNED =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_CRL_ALREADY_SIGNED,
 CSSMERR_CL_INVALID_NUMBER_OF_FIELDS =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_NUMBER_OF_FIELDS,
 CSSMERR_CL_VERIFICATION_FAILURE =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_VERIFICATION_FAILURE,
 CSSMERR_CL_UNKNOWN_FORMAT =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_UNKNOWN_FORMAT,
 CSSMERR_CL_UNKNOWN_TAG =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_UNKNOWN_TAG,
 CSSMERR_CL_INVALID_PASSTHROUGH_ID =
  CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INVALID_PASSTHROUGH_ID
};


enum {
 CSSM_CL_BASE_CL_ERROR =
  CSSM_CL_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT,
 CSSMERR_CL_INVALID_BUNDLE_POINTER = CSSM_CL_BASE_CL_ERROR + 1,
 CSSMERR_CL_INVALID_CACHE_HANDLE = CSSM_CL_BASE_CL_ERROR + 2,
 CSSMERR_CL_INVALID_RESULTS_HANDLE = CSSM_CL_BASE_CL_ERROR + 3,
 CSSMERR_CL_INVALID_BUNDLE_INFO = CSSM_CL_BASE_CL_ERROR + 4,
 CSSMERR_CL_INVALID_CRL_INDEX = CSSM_CL_BASE_CL_ERROR + 5,
 CSSMERR_CL_INVALID_SCOPE = CSSM_CL_BASE_CL_ERROR + 6,
 CSSMERR_CL_NO_FIELD_VALUES = CSSM_CL_BASE_CL_ERROR + 7,
 CSSMERR_CL_SCOPE_NOT_SUPPORTED = CSSM_CL_BASE_CL_ERROR + 8
};


enum {
 CSSMERR_DL_INTERNAL_ERROR =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INTERNAL_ERROR,
 CSSMERR_DL_MEMORY_ERROR =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_MEMORY_ERROR,
 CSSMERR_DL_MDS_ERROR =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_MDS_ERROR,
 CSSMERR_DL_INVALID_POINTER =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_POINTER,
 CSSMERR_DL_INVALID_INPUT_POINTER =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_INPUT_POINTER,
 CSSMERR_DL_INVALID_OUTPUT_POINTER =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_OUTPUT_POINTER,
 CSSMERR_DL_FUNCTION_NOT_IMPLEMENTED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED,
 CSSMERR_DL_SELF_CHECK_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_SELF_CHECK_FAILED,
 CSSMERR_DL_OS_ACCESS_DENIED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_OS_ACCESS_DENIED,
 CSSMERR_DL_FUNCTION_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_FUNCTION_FAILED,
 CSSMERR_DL_INVALID_CSP_HANDLE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_CSP_HANDLE,
 CSSMERR_DL_INVALID_DL_HANDLE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_DL_HANDLE,
 CSSMERR_DL_INVALID_CL_HANDLE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_CL_HANDLE,
 CSSMERR_DL_INVALID_DB_LIST_POINTER =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_LIST_POINTER
};


enum {
 CSSMERR_DL_OPERATION_AUTH_DENIED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_OPERATION_AUTH_DENIED,
 CSSMERR_DL_OBJECT_USE_AUTH_DENIED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_OBJECT_USE_AUTH_DENIED,
 CSSMERR_DL_OBJECT_MANIP_AUTH_DENIED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_OBJECT_MANIP_AUTH_DENIED,
 CSSMERR_DL_OBJECT_ACL_NOT_SUPPORTED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_OBJECT_ACL_NOT_SUPPORTED,
 CSSMERR_DL_OBJECT_ACL_REQUIRED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_OBJECT_ACL_REQUIRED,
 CSSMERR_DL_INVALID_ACCESS_CREDENTIALS =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_ACCESS_CREDENTIALS,
 CSSMERR_DL_INVALID_ACL_BASE_CERTS =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_BASE_CERTS,
 CSSMERR_DL_ACL_BASE_CERTS_NOT_SUPPORTED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_BASE_CERTS_NOT_SUPPORTED,
 CSSMERR_DL_INVALID_SAMPLE_VALUE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_SAMPLE_VALUE,
 CSSMERR_DL_SAMPLE_VALUE_NOT_SUPPORTED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_SAMPLE_VALUE_NOT_SUPPORTED,
 CSSMERR_DL_INVALID_ACL_SUBJECT_VALUE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_SUBJECT_VALUE,
 CSSMERR_DL_ACL_SUBJECT_TYPE_NOT_SUPPORTED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_SUBJECT_TYPE_NOT_SUPPORTED,
 CSSMERR_DL_INVALID_ACL_CHALLENGE_CALLBACK =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_CHALLENGE_CALLBACK,
 CSSMERR_DL_ACL_CHALLENGE_CALLBACK_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_CHALLENGE_CALLBACK_FAILED,
 CSSMERR_DL_INVALID_ACL_ENTRY_TAG =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_ENTRY_TAG,
 CSSMERR_DL_ACL_ENTRY_TAG_NOT_FOUND =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_ENTRY_TAG_NOT_FOUND,
 CSSMERR_DL_INVALID_ACL_EDIT_MODE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_ACL_EDIT_MODE,
 CSSMERR_DL_ACL_CHANGE_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_CHANGE_FAILED,
 CSSMERR_DL_INVALID_NEW_ACL_ENTRY =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_NEW_ACL_ENTRY,
 CSSMERR_DL_INVALID_NEW_ACL_OWNER =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_NEW_ACL_OWNER,
 CSSMERR_DL_ACL_DELETE_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_DELETE_FAILED,
 CSSMERR_DL_ACL_REPLACE_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_REPLACE_FAILED,
 CSSMERR_DL_ACL_ADD_FAILED =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_ACL_ADD_FAILED
};


enum {
 CSSMERR_DL_INVALID_DB_HANDLE =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_DB_HANDLE,
 CSSMERR_DL_INVALID_PASSTHROUGH_ID =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_PASSTHROUGH_ID,
 CSSMERR_DL_INVALID_NETWORK_ADDR =
  CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INVALID_NETWORK_ADDR
};


enum {
 CSSM_DL_BASE_DL_ERROR =
  CSSM_DL_BASE_ERROR + CSSM_ERRORCODE_COMMON_EXTENT,
 CSSMERR_DL_DATABASE_CORRUPT = CSSM_DL_BASE_DL_ERROR + 1,
 CSSMERR_DL_INVALID_RECORD_INDEX = CSSM_DL_BASE_DL_ERROR + 8,
 CSSMERR_DL_INVALID_RECORDTYPE = CSSM_DL_BASE_DL_ERROR + 9,
 CSSMERR_DL_INVALID_FIELD_NAME = CSSM_DL_BASE_DL_ERROR + 10,
 CSSMERR_DL_UNSUPPORTED_FIELD_FORMAT = CSSM_DL_BASE_DL_ERROR + 11,
 CSSMERR_DL_UNSUPPORTED_INDEX_INFO = CSSM_DL_BASE_DL_ERROR + 12,
 CSSMERR_DL_UNSUPPORTED_LOCALITY = CSSM_DL_BASE_DL_ERROR + 13,
 CSSMERR_DL_UNSUPPORTED_NUM_ATTRIBUTES = CSSM_DL_BASE_DL_ERROR + 14,
 CSSMERR_DL_UNSUPPORTED_NUM_INDEXES = CSSM_DL_BASE_DL_ERROR + 15,
 CSSMERR_DL_UNSUPPORTED_NUM_RECORDTYPES = CSSM_DL_BASE_DL_ERROR + 16,
 CSSMERR_DL_UNSUPPORTED_RECORDTYPE = CSSM_DL_BASE_DL_ERROR + 17,
 CSSMERR_DL_FIELD_SPECIFIED_MULTIPLE = CSSM_DL_BASE_DL_ERROR + 18,
 CSSMERR_DL_INCOMPATIBLE_FIELD_FORMAT = CSSM_DL_BASE_DL_ERROR + 19,
 CSSMERR_DL_INVALID_PARSING_MODULE = CSSM_DL_BASE_DL_ERROR + 20,
 CSSMERR_DL_INVALID_DB_NAME = CSSM_DL_BASE_DL_ERROR + 22,
 CSSMERR_DL_DATASTORE_DOESNOT_EXIST = CSSM_DL_BASE_DL_ERROR + 23,
 CSSMERR_DL_DATASTORE_ALREADY_EXISTS = CSSM_DL_BASE_DL_ERROR + 24,
 CSSMERR_DL_DB_LOCKED = CSSM_DL_BASE_DL_ERROR + 25,
 CSSMERR_DL_DATASTORE_IS_OPEN = CSSM_DL_BASE_DL_ERROR + 26,
 CSSMERR_DL_RECORD_NOT_FOUND = CSSM_DL_BASE_DL_ERROR + 27,
 CSSMERR_DL_MISSING_VALUE = CSSM_DL_BASE_DL_ERROR + 28,
 CSSMERR_DL_UNSUPPORTED_QUERY = CSSM_DL_BASE_DL_ERROR + 29,
 CSSMERR_DL_UNSUPPORTED_QUERY_LIMITS = CSSM_DL_BASE_DL_ERROR + 30,
 CSSMERR_DL_UNSUPPORTED_NUM_SELECTION_PREDS = CSSM_DL_BASE_DL_ERROR + 31,
 CSSMERR_DL_UNSUPPORTED_OPERATOR = CSSM_DL_BASE_DL_ERROR + 33,
 CSSMERR_DL_INVALID_RESULTS_HANDLE = CSSM_DL_BASE_DL_ERROR + 34,
 CSSMERR_DL_INVALID_DB_LOCATION = CSSM_DL_BASE_DL_ERROR + 35,
 CSSMERR_DL_INVALID_ACCESS_REQUEST = CSSM_DL_BASE_DL_ERROR + 36,
 CSSMERR_DL_INVALID_INDEX_INFO = CSSM_DL_BASE_DL_ERROR + 37,
 CSSMERR_DL_INVALID_SELECTION_TAG = CSSM_DL_BASE_DL_ERROR + 38,
 CSSMERR_DL_INVALID_NEW_OWNER = CSSM_DL_BASE_DL_ERROR + 39,
 CSSMERR_DL_INVALID_RECORD_UID = CSSM_DL_BASE_DL_ERROR + 40,
 CSSMERR_DL_INVALID_UNIQUE_INDEX_DATA = CSSM_DL_BASE_DL_ERROR + 41,
 CSSMERR_DL_INVALID_MODIFY_MODE = CSSM_DL_BASE_DL_ERROR + 42,
 CSSMERR_DL_INVALID_OPEN_PARAMETERS = CSSM_DL_BASE_DL_ERROR + 43,
 CSSMERR_DL_RECORD_MODIFIED = CSSM_DL_BASE_DL_ERROR + 44,
 CSSMERR_DL_ENDOFDATA = CSSM_DL_BASE_DL_ERROR + 45,
 CSSMERR_DL_INVALID_QUERY = CSSM_DL_BASE_DL_ERROR + 46,
 CSSMERR_DL_INVALID_VALUE = CSSM_DL_BASE_DL_ERROR + 47,
 CSSMERR_DL_MULTIPLE_VALUES_UNSUPPORTED = CSSM_DL_BASE_DL_ERROR + 48,
 CSSMERR_DL_STALE_UNIQUE_RECORD = CSSM_DL_BASE_DL_ERROR + 49
};



}
# 30 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmtype.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmtype.h" 3
extern "C" {




typedef CSSM_INTPTR CSSM_HANDLE, *CSSM_HANDLE_PTR;

typedef uint64 CSSM_LONG_HANDLE, *CSSM_LONG_HANDLE_PTR;

typedef CSSM_HANDLE CSSM_MODULE_HANDLE, *CSSM_MODULE_HANDLE_PTR;

typedef CSSM_LONG_HANDLE CSSM_CC_HANDLE;

typedef CSSM_MODULE_HANDLE CSSM_CSP_HANDLE;

typedef CSSM_MODULE_HANDLE CSSM_TP_HANDLE;

typedef CSSM_MODULE_HANDLE CSSM_AC_HANDLE;

typedef CSSM_MODULE_HANDLE CSSM_CL_HANDLE;

typedef CSSM_MODULE_HANDLE CSSM_DL_HANDLE;

typedef CSSM_MODULE_HANDLE CSSM_DB_HANDLE;



enum {
    CSSM_INVALID_HANDLE = 0
};




typedef sint32 CSSM_BOOL;
enum {
 CSSM_FALSE = 0,
 CSSM_TRUE = !CSSM_FALSE
};


typedef sint32 CSSM_RETURN;
enum {
 CSSM_OK = 0
};

enum {
 CSSM_MODULE_STRING_SIZE = 64
};
typedef char CSSM_STRING [CSSM_MODULE_STRING_SIZE + 4];

typedef struct cssm_data {
    CSSM_SIZE Length;
    uint8 *Data;
} CSSM_DATA, *CSSM_DATA_PTR;

typedef struct cssm_guid {
    uint32 Data1;
    uint16 Data2;
    uint16 Data3;
    uint8 Data4[8];
} CSSM_GUID, *CSSM_GUID_PTR;

typedef uint32 CSSM_BITMASK;
typedef CSSM_BITMASK CSSM_KEY_HIERARCHY;
enum {
 CSSM_KEY_HIERARCHY_NONE = 0,
 CSSM_KEY_HIERARCHY_INTEG = 1,
 CSSM_KEY_HIERARCHY_EXPORT = 2
};

typedef CSSM_BITMASK CSSM_PVC_MODE;
enum {
 CSSM_PVC_NONE = 0,
 CSSM_PVC_APP = 1,
 CSSM_PVC_SP = 2
};

typedef uint32 CSSM_PRIVILEGE_SCOPE;
enum {
 CSSM_PRIVILEGE_SCOPE_NONE = 0,
 CSSM_PRIVILEGE_SCOPE_PROCESS = 1,
 CSSM_PRIVILEGE_SCOPE_THREAD = 2
};

typedef struct cssm_version {
    uint32 Major;
    uint32 Minor;
} CSSM_VERSION, *CSSM_VERSION_PTR;

typedef uint32 CSSM_SERVICE_MASK;
enum {
 CSSM_SERVICE_CSSM = 0x1,
 CSSM_SERVICE_CSP = 0x2,
 CSSM_SERVICE_DL = 0x4,
 CSSM_SERVICE_CL = 0x8,
 CSSM_SERVICE_TP = 0x10,
 CSSM_SERVICE_AC = 0x20,
 CSSM_SERVICE_KR = 0x40
};

typedef CSSM_SERVICE_MASK CSSM_SERVICE_TYPE;

typedef struct cssm_subservice_uid {
    CSSM_GUID Guid;
    CSSM_VERSION Version;
    uint32 SubserviceId;
    CSSM_SERVICE_TYPE SubserviceType;
} CSSM_SUBSERVICE_UID, *CSSM_SUBSERVICE_UID_PTR;

typedef uint32 CSSM_MODULE_EVENT, *CSSM_MODULE_EVENT_PTR;
enum {
    CSSM_NOTIFY_INSERT = 1,
    CSSM_NOTIFY_REMOVE = 2,
    CSSM_NOTIFY_FAULT = 3
};

typedef CSSM_RETURN ( *CSSM_API_ModuleEventHandler)
    (const CSSM_GUID *ModuleGuid,
     void* AppNotifyCallbackCtx,
     uint32 SubserviceId,
     CSSM_SERVICE_TYPE ServiceType,
     CSSM_MODULE_EVENT EventType);

typedef uint32 CSSM_ATTACH_FLAGS;
enum {
 CSSM_ATTACH_READ_ONLY = 0x00000001
};



typedef uint64 CSSM_PRIVILEGE;
typedef CSSM_PRIVILEGE CSSM_USEE_TAG;
enum {
 CSSM_USEE_LAST = 0xFF,
 CSSM_USEE_NONE = 0,
 CSSM_USEE_DOMESTIC = 1,
 CSSM_USEE_FINANCIAL = 2,
 CSSM_USEE_KRLE = 3,
 CSSM_USEE_KRENT = 4,
 CSSM_USEE_SSL = 5,
 CSSM_USEE_AUTHENTICATION = 6,
 CSSM_USEE_KEYEXCH = 7,
 CSSM_USEE_MEDICAL = 8,
 CSSM_USEE_INSURANCE = 9,
 CSSM_USEE_WEAK = 10
};

typedef uint32 CSSM_NET_ADDRESS_TYPE;
enum {
    CSSM_ADDR_NONE = 0,
    CSSM_ADDR_CUSTOM = 1,
    CSSM_ADDR_URL = 2,
    CSSM_ADDR_SOCKADDR = 3,
    CSSM_ADDR_NAME = 4
};

typedef struct cssm_net_address {
    CSSM_NET_ADDRESS_TYPE AddressType;
    CSSM_DATA Address;
} CSSM_NET_ADDRESS, *CSSM_NET_ADDRESS_PTR;

typedef uint32 CSSM_NET_PROTOCOL;
enum {
 CSSM_NET_PROTO_NONE = 0,
 CSSM_NET_PROTO_CUSTOM = 1,
 CSSM_NET_PROTO_UNSPECIFIED = 2,
 CSSM_NET_PROTO_LDAP = 3,
 CSSM_NET_PROTO_LDAPS = 4,
 CSSM_NET_PROTO_LDAPNS = 5,
 CSSM_NET_PROTO_X500DAP = 6,
 CSSM_NET_PROTO_FTP = 7,
 CSSM_NET_PROTO_FTPS = 8,
 CSSM_NET_PROTO_OCSP = 9,
 CSSM_NET_PROTO_CMP = 10,
 CSSM_NET_PROTO_CMPS = 11
};

typedef CSSM_RETURN ( *CSSM_CALLBACK)
    (CSSM_DATA_PTR OutData, void *CallerCtx);

typedef struct cssm_crypto_data {
    CSSM_DATA Param;
    CSSM_CALLBACK Callback;
    void *CallerCtx;
} CSSM_CRYPTO_DATA, *CSSM_CRYPTO_DATA_PTR;

typedef sint32 CSSM_WORDID_TYPE;
enum {
 CSSM_WORDID__UNK_ = -1,
 CSSM_WORDID__NLU_ = 0,
 CSSM_WORDID__STAR_ = 1,
 CSSM_WORDID_A = 2,
 CSSM_WORDID_ACL = 3,
 CSSM_WORDID_ALPHA = 4,
 CSSM_WORDID_B = 5,
 CSSM_WORDID_BER = 6,
 CSSM_WORDID_BINARY = 7,
 CSSM_WORDID_BIOMETRIC = 8,
 CSSM_WORDID_C = 9,
 CSSM_WORDID_CANCELED = 10,
 CSSM_WORDID_CERT = 11,
 CSSM_WORDID_COMMENT = 12,
 CSSM_WORDID_CRL = 13,
 CSSM_WORDID_CUSTOM = 14,
 CSSM_WORDID_D = 15,
 CSSM_WORDID_DATE = 16,
 CSSM_WORDID_DB_DELETE = 17,
 CSSM_WORDID_DB_EXEC_STORED_QUERY = 18,
 CSSM_WORDID_DB_INSERT = 19,
 CSSM_WORDID_DB_MODIFY = 20,
 CSSM_WORDID_DB_READ = 21,
 CSSM_WORDID_DBS_CREATE = 22,
 CSSM_WORDID_DBS_DELETE = 23,
 CSSM_WORDID_DECRYPT = 24,
 CSSM_WORDID_DELETE = 25,
 CSSM_WORDID_DELTA_CRL = 26,
 CSSM_WORDID_DER = 27,
 CSSM_WORDID_DERIVE = 28,
 CSSM_WORDID_DISPLAY = 29,
 CSSM_WORDID_DO = 30,
 CSSM_WORDID_DSA = 31,
 CSSM_WORDID_DSA_SHA1 = 32,
 CSSM_WORDID_E = 33,
 CSSM_WORDID_ELGAMAL = 34,
 CSSM_WORDID_ENCRYPT = 35,
 CSSM_WORDID_ENTRY = 36,
 CSSM_WORDID_EXPORT_CLEAR = 37,
 CSSM_WORDID_EXPORT_WRAPPED = 38,
 CSSM_WORDID_G = 39,
 CSSM_WORDID_GE = 40,
 CSSM_WORDID_GENKEY = 41,
 CSSM_WORDID_HASH = 42,
 CSSM_WORDID_HASHED_PASSWORD = 43,
 CSSM_WORDID_HASHED_SUBJECT = 44,
 CSSM_WORDID_HAVAL = 45,
 CSSM_WORDID_IBCHASH = 46,
 CSSM_WORDID_IMPORT_CLEAR = 47,
 CSSM_WORDID_IMPORT_WRAPPED = 48,
 CSSM_WORDID_INTEL = 49,
 CSSM_WORDID_ISSUER = 50,
 CSSM_WORDID_ISSUER_INFO = 51,
 CSSM_WORDID_K_OF_N = 52,
 CSSM_WORDID_KEA = 53,
 CSSM_WORDID_KEYHOLDER = 54,
 CSSM_WORDID_L = 55,
 CSSM_WORDID_LE = 56,
 CSSM_WORDID_LOGIN = 57,
 CSSM_WORDID_LOGIN_NAME = 58,
 CSSM_WORDID_MAC = 59,
 CSSM_WORDID_MD2 = 60,
 CSSM_WORDID_MD2WITHRSA = 61,
 CSSM_WORDID_MD4 = 62,
 CSSM_WORDID_MD5 = 63,
 CSSM_WORDID_MD5WITHRSA = 64,
 CSSM_WORDID_N = 65,
 CSSM_WORDID_NAME = 66,
 CSSM_WORDID_NDR = 67,
 CSSM_WORDID_NHASH = 68,
 CSSM_WORDID_NOT_AFTER = 69,
 CSSM_WORDID_NOT_BEFORE = 70,
 CSSM_WORDID_NULL = 71,
 CSSM_WORDID_NUMERIC = 72,
 CSSM_WORDID_OBJECT_HASH = 73,
 CSSM_WORDID_ONE_TIME = 74,
 CSSM_WORDID_ONLINE = 75,
 CSSM_WORDID_OWNER = 76,
 CSSM_WORDID_P = 77,
 CSSM_WORDID_PAM_NAME = 78,
 CSSM_WORDID_PASSWORD = 79,
 CSSM_WORDID_PGP = 80,
 CSSM_WORDID_PREFIX = 81,
 CSSM_WORDID_PRIVATE_KEY = 82,
 CSSM_WORDID_PROMPTED_BIOMETRIC = 83,
 CSSM_WORDID_PROMPTED_PASSWORD = 84,
 CSSM_WORDID_PROPAGATE = 85,
 CSSM_WORDID_PROTECTED_BIOMETRIC = 86,
 CSSM_WORDID_PROTECTED_PASSWORD = 87,
 CSSM_WORDID_PROTECTED_PIN = 88,
 CSSM_WORDID_PUBLIC_KEY = 89,
 CSSM_WORDID_PUBLIC_KEY_FROM_CERT = 90,
 CSSM_WORDID_Q = 91,
 CSSM_WORDID_RANGE = 92,
 CSSM_WORDID_REVAL = 93,
 CSSM_WORDID_RIPEMAC = 94,
 CSSM_WORDID_RIPEMD = 95,
 CSSM_WORDID_RIPEMD160 = 96,
 CSSM_WORDID_RSA = 97,
 CSSM_WORDID_RSA_ISO9796 = 98,
 CSSM_WORDID_RSA_PKCS = 99,
 CSSM_WORDID_RSA_PKCS_MD5 = 100,
 CSSM_WORDID_RSA_PKCS_SHA1 = 101,
 CSSM_WORDID_RSA_PKCS1 = 102,
 CSSM_WORDID_RSA_PKCS1_MD5 = 103,
 CSSM_WORDID_RSA_PKCS1_SHA1 = 104,
 CSSM_WORDID_RSA_PKCS1_SIG = 105,
 CSSM_WORDID_RSA_RAW = 106,
 CSSM_WORDID_SDSIV1 = 107,
 CSSM_WORDID_SEQUENCE = 108,
 CSSM_WORDID_SET = 109,
 CSSM_WORDID_SEXPR = 110,
 CSSM_WORDID_SHA1 = 111,
 CSSM_WORDID_SHA1WITHDSA = 112,
 CSSM_WORDID_SHA1WITHECDSA = 113,
 CSSM_WORDID_SHA1WITHRSA = 114,
 CSSM_WORDID_SIGN = 115,
 CSSM_WORDID_SIGNATURE = 116,
 CSSM_WORDID_SIGNED_NONCE = 117,
 CSSM_WORDID_SIGNED_SECRET = 118,
 CSSM_WORDID_SPKI = 119,
 CSSM_WORDID_SUBJECT = 120,
 CSSM_WORDID_SUBJECT_INFO = 121,
 CSSM_WORDID_TAG = 122,
 CSSM_WORDID_THRESHOLD = 123,
 CSSM_WORDID_TIME = 124,
 CSSM_WORDID_URI = 125,
 CSSM_WORDID_VERSION = 126,
 CSSM_WORDID_X509_ATTRIBUTE = 127,
 CSSM_WORDID_X509V1 = 128,
 CSSM_WORDID_X509V2 = 129,
 CSSM_WORDID_X509V3 = 130,
 CSSM_WORDID_X9_ATTRIBUTE = 131,
 CSSM_WORDID_VENDOR_START = 0x00010000,
 CSSM_WORDID_VENDOR_END = 0x7FFF0000
};

typedef uint32 CSSM_LIST_ELEMENT_TYPE, *CSSM_LIST_ELEMENT_TYPE_PTR;
enum {
 CSSM_LIST_ELEMENT_DATUM = 0x00,
 CSSM_LIST_ELEMENT_SUBLIST = 0x01,
 CSSM_LIST_ELEMENT_WORDID = 0x02
};

typedef uint32 CSSM_LIST_TYPE, *CSSM_LIST_TYPE_PTR;
enum {
 CSSM_LIST_TYPE_UNKNOWN = 0,
 CSSM_LIST_TYPE_CUSTOM = 1,
 CSSM_LIST_TYPE_SEXPR = 2
};

typedef struct cssm_list_element *CSSM_LIST_ELEMENT_PTR;

typedef struct cssm_list {
    CSSM_LIST_TYPE ListType;
    CSSM_LIST_ELEMENT_PTR Head;
    CSSM_LIST_ELEMENT_PTR Tail;
} CSSM_LIST, *CSSM_LIST_PTR;

typedef struct cssm_list_element {
    struct cssm_list_element *NextElement;
 CSSM_WORDID_TYPE WordID;

    CSSM_LIST_ELEMENT_TYPE ElementType;
    union {
        CSSM_LIST Sublist;
        CSSM_DATA Word;
    } Element;
} CSSM_LIST_ELEMENT;

typedef struct {
 CSSM_LIST Issuer;
 CSSM_LIST Subject;
 CSSM_BOOL Delegate;
 CSSM_LIST AuthorizationTag;
 CSSM_LIST ValidityPeriod;
} CSSM_TUPLE, *CSSM_TUPLE_PTR;

typedef struct cssm_tuplegroup {
    uint32 NumberOfTuples;
    CSSM_TUPLE_PTR Tuples;
} CSSM_TUPLEGROUP, *CSSM_TUPLEGROUP_PTR;

typedef CSSM_WORDID_TYPE CSSM_SAMPLE_TYPE;
enum {
 CSSM_SAMPLE_TYPE_PASSWORD = CSSM_WORDID_PASSWORD,
 CSSM_SAMPLE_TYPE_HASHED_PASSWORD = CSSM_WORDID_HASHED_PASSWORD,
 CSSM_SAMPLE_TYPE_PROTECTED_PASSWORD = CSSM_WORDID_PROTECTED_PASSWORD,
 CSSM_SAMPLE_TYPE_PROMPTED_PASSWORD = CSSM_WORDID_PROMPTED_PASSWORD,
 CSSM_SAMPLE_TYPE_SIGNED_NONCE = CSSM_WORDID_SIGNED_NONCE,
 CSSM_SAMPLE_TYPE_SIGNED_SECRET = CSSM_WORDID_SIGNED_SECRET,
 CSSM_SAMPLE_TYPE_BIOMETRIC = CSSM_WORDID_BIOMETRIC,
 CSSM_SAMPLE_TYPE_PROTECTED_BIOMETRIC = CSSM_WORDID_PROTECTED_BIOMETRIC,
 CSSM_SAMPLE_TYPE_PROMPTED_BIOMETRIC = CSSM_WORDID_PROMPTED_BIOMETRIC,
 CSSM_SAMPLE_TYPE_THRESHOLD = CSSM_WORDID_THRESHOLD
};

typedef struct cssm_sample {
    CSSM_LIST TypedSample;
    const CSSM_SUBSERVICE_UID *Verifier;
} CSSM_SAMPLE, *CSSM_SAMPLE_PTR;

typedef struct cssm_samplegroup {
    uint32 NumberOfSamples;
    const CSSM_SAMPLE *Samples;
} CSSM_SAMPLEGROUP, *CSSM_SAMPLEGROUP_PTR;

typedef void *( *CSSM_MALLOC)
    (CSSM_SIZE size,
     void *allocref);

typedef void ( *CSSM_FREE)
    (void *memblock,
     void *allocref);

typedef void *( *CSSM_REALLOC)
    (void *memblock,
     CSSM_SIZE size,
     void *allocref);

typedef void *( *CSSM_CALLOC)
    (uint32 num,
     CSSM_SIZE size,
     void *allocref);

typedef struct cssm_memory_funcs {
    CSSM_MALLOC malloc_func;
    CSSM_FREE free_func;
    CSSM_REALLOC realloc_func;
    CSSM_CALLOC calloc_func;
    void *AllocRef;
} CSSM_MEMORY_FUNCS, *CSSM_MEMORY_FUNCS_PTR;

typedef CSSM_MEMORY_FUNCS CSSM_API_MEMORY_FUNCS;
typedef CSSM_API_MEMORY_FUNCS *CSSM_API_MEMORY_FUNCS_PTR;

typedef CSSM_RETURN ( * CSSM_CHALLENGE_CALLBACK)
    (const CSSM_LIST *Challenge,
     CSSM_SAMPLEGROUP_PTR Response,
     void *CallerCtx,
     const CSSM_MEMORY_FUNCS *MemFuncs);

typedef uint32 CSSM_CERT_TYPE, *CSSM_CERT_TYPE_PTR;
enum {
    CSSM_CERT_UNKNOWN = 0x00,
    CSSM_CERT_X_509v1 = 0x01,
    CSSM_CERT_X_509v2 = 0x02,
    CSSM_CERT_X_509v3 = 0x03,
    CSSM_CERT_PGP = 0x04,
    CSSM_CERT_SPKI = 0x05,
    CSSM_CERT_SDSIv1 = 0x06,
    CSSM_CERT_Intel = 0x08,
    CSSM_CERT_X_509_ATTRIBUTE = 0x09,
    CSSM_CERT_X9_ATTRIBUTE = 0x0A,
    CSSM_CERT_TUPLE = 0x0B,
    CSSM_CERT_ACL_ENTRY = 0x0C,
    CSSM_CERT_MULTIPLE = 0x7FFE,
    CSSM_CERT_LAST = 0x7FFF,



 CSSM_CL_CUSTOM_CERT_TYPE = 0x08000
};

typedef uint32 CSSM_CERT_ENCODING, *CSSM_CERT_ENCODING_PTR;
enum {
    CSSM_CERT_ENCODING_UNKNOWN = 0x00,
    CSSM_CERT_ENCODING_CUSTOM = 0x01,
    CSSM_CERT_ENCODING_BER = 0x02,
    CSSM_CERT_ENCODING_DER = 0x03,
    CSSM_CERT_ENCODING_NDR = 0x04,
    CSSM_CERT_ENCODING_SEXPR = 0x05,
    CSSM_CERT_ENCODING_PGP = 0x06,
    CSSM_CERT_ENCODING_MULTIPLE = 0x7FFE,
    CSSM_CERT_ENCODING_LAST = 0x7FFF,



 CSSM_CL_CUSTOM_CERT_ENCODING = 0x8000
};

typedef struct cssm_encoded_cert {
    CSSM_CERT_TYPE CertType;
    CSSM_CERT_ENCODING CertEncoding;
    CSSM_DATA CertBlob;
} CSSM_ENCODED_CERT, *CSSM_ENCODED_CERT_PTR;

typedef uint32 CSSM_CERT_PARSE_FORMAT, *CSSM_CERT_PARSE_FORMAT_PTR;
enum {
 CSSM_CERT_PARSE_FORMAT_NONE = 0x00,
 CSSM_CERT_PARSE_FORMAT_CUSTOM = 0x01,
 CSSM_CERT_PARSE_FORMAT_SEXPR = 0x02,
 CSSM_CERT_PARSE_FORMAT_COMPLEX = 0x03,
 CSSM_CERT_PARSE_FORMAT_OID_NAMED = 0x04,
 CSSM_CERT_PARSE_FORMAT_TUPLE = 0x05,
 CSSM_CERT_PARSE_FORMAT_MULTIPLE = 0x7FFE,


 CSSM_CERT_PARSE_FORMAT_LAST = 0x7FFF,




 CSSM_CL_CUSTOM_CERT_PARSE_FORMAT = 0x8000
};

typedef struct cssm_parsed_cert {
    CSSM_CERT_TYPE CertType;
    CSSM_CERT_PARSE_FORMAT ParsedCertFormat;

    void *ParsedCert;
} CSSM_PARSED_CERT, *CSSM_PARSED_CERT_PTR;

typedef struct cssm_cert_pair {
    CSSM_ENCODED_CERT EncodedCert;
    CSSM_PARSED_CERT ParsedCert;
} CSSM_CERT_PAIR, *CSSM_CERT_PAIR_PTR;

typedef uint32 CSSM_CERTGROUP_TYPE, *CSSM_CERTGROUP_TYPE_PTR;
enum {
 CSSM_CERTGROUP_DATA = 0x00,
 CSSM_CERTGROUP_ENCODED_CERT = 0x01,
 CSSM_CERTGROUP_PARSED_CERT = 0x02,
 CSSM_CERTGROUP_CERT_PAIR = 0x03
};

typedef struct cssm_certgroup {
    CSSM_CERT_TYPE CertType;
    CSSM_CERT_ENCODING CertEncoding;
    uint32 NumCerts;
    union {
        CSSM_DATA_PTR CertList;
        CSSM_ENCODED_CERT_PTR EncodedCertList;

        CSSM_PARSED_CERT_PTR ParsedCertList;

        CSSM_CERT_PAIR_PTR PairCertList;

    } GroupList;
    CSSM_CERTGROUP_TYPE CertGroupType;

    void *Reserved;
} CSSM_CERTGROUP, *CSSM_CERTGROUP_PTR;

typedef struct cssm_base_certs {
    CSSM_TP_HANDLE TPHandle;
    CSSM_CL_HANDLE CLHandle;
    CSSM_CERTGROUP Certs;
} CSSM_BASE_CERTS, *CSSM_BASE_CERTS_PTR;

typedef struct cssm_access_credentials {
    CSSM_STRING EntryTag;
    CSSM_BASE_CERTS BaseCerts;
    CSSM_SAMPLEGROUP Samples;
    CSSM_CHALLENGE_CALLBACK Callback;
    void *CallerCtx;
} CSSM_ACCESS_CREDENTIALS, *CSSM_ACCESS_CREDENTIALS_PTR;

typedef sint32 CSSM_ACL_SUBJECT_TYPE;
enum {
 CSSM_ACL_SUBJECT_TYPE_ANY = CSSM_WORDID__STAR_,
 CSSM_ACL_SUBJECT_TYPE_THRESHOLD = CSSM_WORDID_THRESHOLD,
 CSSM_ACL_SUBJECT_TYPE_PASSWORD = CSSM_WORDID_PASSWORD,
 CSSM_ACL_SUBJECT_TYPE_PROTECTED_PASSWORD = CSSM_WORDID_PROTECTED_PASSWORD,
 CSSM_ACL_SUBJECT_TYPE_PROMPTED_PASSWORD = CSSM_WORDID_PROMPTED_PASSWORD,
 CSSM_ACL_SUBJECT_TYPE_PUBLIC_KEY = CSSM_WORDID_PUBLIC_KEY,
 CSSM_ACL_SUBJECT_TYPE_HASHED_SUBJECT = CSSM_WORDID_HASHED_SUBJECT,
 CSSM_ACL_SUBJECT_TYPE_BIOMETRIC = CSSM_WORDID_BIOMETRIC,
 CSSM_ACL_SUBJECT_TYPE_PROTECTED_BIOMETRIC = CSSM_WORDID_PROTECTED_BIOMETRIC,
 CSSM_ACL_SUBJECT_TYPE_PROMPTED_BIOMETRIC = CSSM_WORDID_PROMPTED_BIOMETRIC,
 CSSM_ACL_SUBJECT_TYPE_LOGIN_NAME = CSSM_WORDID_LOGIN_NAME,
 CSSM_ACL_SUBJECT_TYPE_EXT_PAM_NAME = CSSM_WORDID_PAM_NAME
};


typedef sint32 CSSM_ACL_AUTHORIZATION_TAG;
enum {


 CSSM_ACL_AUTHORIZATION_TAG_VENDOR_DEFINED_START = 0x00010000,


 CSSM_ACL_AUTHORIZATION_ANY = CSSM_WORDID__STAR_,

 CSSM_ACL_AUTHORIZATION_LOGIN = CSSM_WORDID_LOGIN,
 CSSM_ACL_AUTHORIZATION_GENKEY = CSSM_WORDID_GENKEY,
 CSSM_ACL_AUTHORIZATION_DELETE = CSSM_WORDID_DELETE,
 CSSM_ACL_AUTHORIZATION_EXPORT_WRAPPED = CSSM_WORDID_EXPORT_WRAPPED,
 CSSM_ACL_AUTHORIZATION_EXPORT_CLEAR = CSSM_WORDID_EXPORT_CLEAR,
 CSSM_ACL_AUTHORIZATION_IMPORT_WRAPPED = CSSM_WORDID_IMPORT_WRAPPED,
 CSSM_ACL_AUTHORIZATION_IMPORT_CLEAR = CSSM_WORDID_IMPORT_CLEAR,
 CSSM_ACL_AUTHORIZATION_SIGN = CSSM_WORDID_SIGN,
 CSSM_ACL_AUTHORIZATION_ENCRYPT = CSSM_WORDID_ENCRYPT,
 CSSM_ACL_AUTHORIZATION_DECRYPT = CSSM_WORDID_DECRYPT,
 CSSM_ACL_AUTHORIZATION_MAC = CSSM_WORDID_MAC,
 CSSM_ACL_AUTHORIZATION_DERIVE = CSSM_WORDID_DERIVE,

 CSSM_ACL_AUTHORIZATION_DBS_CREATE = CSSM_WORDID_DBS_CREATE,
 CSSM_ACL_AUTHORIZATION_DBS_DELETE = CSSM_WORDID_DBS_DELETE,
 CSSM_ACL_AUTHORIZATION_DB_READ = CSSM_WORDID_DB_READ,
 CSSM_ACL_AUTHORIZATION_DB_INSERT = CSSM_WORDID_DB_INSERT,
 CSSM_ACL_AUTHORIZATION_DB_MODIFY = CSSM_WORDID_DB_MODIFY,
 CSSM_ACL_AUTHORIZATION_DB_DELETE = CSSM_WORDID_DB_DELETE
};

typedef struct cssm_authorizationgroup {
    uint32 NumberOfAuthTags;
    CSSM_ACL_AUTHORIZATION_TAG *AuthTags;
} CSSM_AUTHORIZATIONGROUP, *CSSM_AUTHORIZATIONGROUP_PTR;

typedef struct cssm_acl_validity_period {
    CSSM_DATA StartDate;
    CSSM_DATA EndDate;
} CSSM_ACL_VALIDITY_PERIOD, *CSSM_ACL_VALIDITY_PERIOD_PTR;

typedef struct cssm_acl_entry_prototype {
    CSSM_LIST TypedSubject;
    CSSM_BOOL Delegate;
    CSSM_AUTHORIZATIONGROUP Authorization;
    CSSM_ACL_VALIDITY_PERIOD TimeRange;
    CSSM_STRING EntryTag;
} CSSM_ACL_ENTRY_PROTOTYPE, *CSSM_ACL_ENTRY_PROTOTYPE_PTR;

typedef struct cssm_acl_owner_prototype {
    CSSM_LIST TypedSubject;
    CSSM_BOOL Delegate;
} CSSM_ACL_OWNER_PROTOTYPE, *CSSM_ACL_OWNER_PROTOTYPE_PTR;

typedef CSSM_RETURN ( * CSSM_ACL_SUBJECT_CALLBACK)
    (const CSSM_LIST *SubjectRequest,
     CSSM_LIST_PTR SubjectResponse,
     void *CallerContext,
     const CSSM_MEMORY_FUNCS *MemFuncs);

typedef struct cssm_acl_entry_input {
    CSSM_ACL_ENTRY_PROTOTYPE Prototype;
    CSSM_ACL_SUBJECT_CALLBACK Callback;
    void *CallerContext;
} CSSM_ACL_ENTRY_INPUT, *CSSM_ACL_ENTRY_INPUT_PTR;

typedef struct cssm_resource_control_context {
    CSSM_ACCESS_CREDENTIALS_PTR AccessCred;
    CSSM_ACL_ENTRY_INPUT InitialAclEntry;
} CSSM_RESOURCE_CONTROL_CONTEXT, *CSSM_RESOURCE_CONTROL_CONTEXT_PTR;

typedef CSSM_HANDLE CSSM_ACL_HANDLE;

typedef struct cssm_acl_entry_info {
    CSSM_ACL_ENTRY_PROTOTYPE EntryPublicInfo;
    CSSM_ACL_HANDLE EntryHandle;
} CSSM_ACL_ENTRY_INFO, *CSSM_ACL_ENTRY_INFO_PTR;

typedef uint32 CSSM_ACL_EDIT_MODE;
enum {
 CSSM_ACL_EDIT_MODE_ADD = 1,
 CSSM_ACL_EDIT_MODE_DELETE = 2,
 CSSM_ACL_EDIT_MODE_REPLACE = 3
};

typedef struct cssm_acl_edit {
    CSSM_ACL_EDIT_MODE EditMode;
    CSSM_ACL_HANDLE OldEntryHandle;
    const CSSM_ACL_ENTRY_INPUT *NewEntry;
} CSSM_ACL_EDIT, *CSSM_ACL_EDIT_PTR;




typedef void ( *CSSM_PROC_ADDR) ();

typedef CSSM_PROC_ADDR *CSSM_PROC_ADDR_PTR;

typedef struct cssm_func_name_addr {
    CSSM_STRING Name;
    CSSM_PROC_ADDR Address;
} CSSM_FUNC_NAME_ADDR, *CSSM_FUNC_NAME_ADDR_PTR;




typedef struct cssm_date {
    uint8 Year[4];
    uint8 Month[2];
    uint8 Day[2];
} CSSM_DATE, *CSSM_DATE_PTR;

typedef struct cssm_range {
    uint32 Min;
    uint32 Max;
} CSSM_RANGE, *CSSM_RANGE_PTR;

typedef struct cssm_query_size_data {
    uint32 SizeInputBlock;
    uint32 SizeOutputBlock;
} CSSM_QUERY_SIZE_DATA, *CSSM_QUERY_SIZE_DATA_PTR;

typedef uint32 CSSM_HEADERVERSION;
enum {
 CSSM_KEYHEADER_VERSION = 2
};

typedef struct cssm_key_size {
    uint32 LogicalKeySizeInBits;
    uint32 EffectiveKeySizeInBits;
} CSSM_KEY_SIZE, *CSSM_KEY_SIZE_PTR;

typedef uint32 CSSM_KEYBLOB_TYPE;
enum {
 CSSM_KEYBLOB_RAW = 0,
 CSSM_KEYBLOB_REFERENCE = 2,
 CSSM_KEYBLOB_WRAPPED = 3,
 CSSM_KEYBLOB_OTHER = 0xFFFFFFFF
};

typedef uint32 CSSM_KEYBLOB_FORMAT;
enum {

 CSSM_KEYBLOB_RAW_FORMAT_NONE = 0,

 CSSM_KEYBLOB_RAW_FORMAT_PKCS1 = 1,
 CSSM_KEYBLOB_RAW_FORMAT_PKCS3 = 2,
 CSSM_KEYBLOB_RAW_FORMAT_MSCAPI = 3,
 CSSM_KEYBLOB_RAW_FORMAT_PGP = 4,
 CSSM_KEYBLOB_RAW_FORMAT_FIPS186 = 5,
 CSSM_KEYBLOB_RAW_FORMAT_BSAFE = 6,
 CSSM_KEYBLOB_RAW_FORMAT_CCA = 9,
 CSSM_KEYBLOB_RAW_FORMAT_PKCS8 = 10,
 CSSM_KEYBLOB_RAW_FORMAT_SPKI = 11,
 CSSM_KEYBLOB_RAW_FORMAT_OCTET_STRING = 12,
 CSSM_KEYBLOB_RAW_FORMAT_OTHER = 0xFFFFFFFF
};
enum {

 CSSM_KEYBLOB_WRAPPED_FORMAT_NONE = 0,

 CSSM_KEYBLOB_WRAPPED_FORMAT_PKCS8 = 1,
 CSSM_KEYBLOB_WRAPPED_FORMAT_PKCS7 = 2,
 CSSM_KEYBLOB_WRAPPED_FORMAT_MSCAPI = 3,
 CSSM_KEYBLOB_WRAPPED_FORMAT_OTHER = 0xFFFFFFFF
};
enum {

 CSSM_KEYBLOB_REF_FORMAT_INTEGER = 0,
 CSSM_KEYBLOB_REF_FORMAT_STRING = 1,
 CSSM_KEYBLOB_REF_FORMAT_SPKI = 2,

 CSSM_KEYBLOB_REF_FORMAT_OTHER = 0xFFFFFFFF
};

typedef uint32 CSSM_KEYCLASS;
enum {
 CSSM_KEYCLASS_PUBLIC_KEY = 0,
 CSSM_KEYCLASS_PRIVATE_KEY = 1,
 CSSM_KEYCLASS_SESSION_KEY = 2,
 CSSM_KEYCLASS_SECRET_PART = 3,
 CSSM_KEYCLASS_OTHER = 0xFFFFFFFF
};

typedef uint32 CSSM_KEYATTR_FLAGS;
enum {

 CSSM_KEYATTR_RETURN_DEFAULT = 0x00000000,
 CSSM_KEYATTR_RETURN_DATA = 0x10000000,
 CSSM_KEYATTR_RETURN_REF = 0x20000000,
 CSSM_KEYATTR_RETURN_NONE = 0x40000000,

 CSSM_KEYATTR_PERMANENT = 0x00000001,
 CSSM_KEYATTR_PRIVATE = 0x00000002,
 CSSM_KEYATTR_MODIFIABLE = 0x00000004,
 CSSM_KEYATTR_SENSITIVE = 0x00000008,
 CSSM_KEYATTR_EXTRACTABLE = 0x00000020,

 CSSM_KEYATTR_ALWAYS_SENSITIVE = 0x00000010,
 CSSM_KEYATTR_NEVER_EXTRACTABLE = 0x00000040
};

typedef uint32 CSSM_KEYUSE;
enum {
 CSSM_KEYUSE_ANY = 0x80000000,
 CSSM_KEYUSE_ENCRYPT = 0x00000001,
 CSSM_KEYUSE_DECRYPT = 0x00000002,
 CSSM_KEYUSE_SIGN = 0x00000004,
 CSSM_KEYUSE_VERIFY = 0x00000008,
 CSSM_KEYUSE_SIGN_RECOVER = 0x00000010,
 CSSM_KEYUSE_VERIFY_RECOVER = 0x00000020,
 CSSM_KEYUSE_WRAP = 0x00000040,
 CSSM_KEYUSE_UNWRAP = 0x00000080,
 CSSM_KEYUSE_DERIVE = 0x00000100
};

typedef uint32 CSSM_ALGORITHMS;
enum {
 CSSM_ALGID_NONE = 0,
 CSSM_ALGID_CUSTOM = CSSM_ALGID_NONE + 1,
 CSSM_ALGID_DH = CSSM_ALGID_NONE + 2,
 CSSM_ALGID_PH = CSSM_ALGID_NONE + 3,
 CSSM_ALGID_KEA = CSSM_ALGID_NONE + 4,
 CSSM_ALGID_MD2 = CSSM_ALGID_NONE + 5,
 CSSM_ALGID_MD4 = CSSM_ALGID_NONE + 6,
 CSSM_ALGID_MD5 = CSSM_ALGID_NONE + 7,
 CSSM_ALGID_SHA1 = CSSM_ALGID_NONE + 8,
 CSSM_ALGID_NHASH = CSSM_ALGID_NONE + 9,
 CSSM_ALGID_HAVAL = CSSM_ALGID_NONE + 10,
 CSSM_ALGID_RIPEMD = CSSM_ALGID_NONE + 11,
 CSSM_ALGID_IBCHASH = CSSM_ALGID_NONE + 12,
 CSSM_ALGID_RIPEMAC = CSSM_ALGID_NONE + 13,
 CSSM_ALGID_DES = CSSM_ALGID_NONE + 14,
 CSSM_ALGID_DESX = CSSM_ALGID_NONE + 15,
 CSSM_ALGID_RDES = CSSM_ALGID_NONE + 16,
 CSSM_ALGID_3DES_3KEY_EDE = CSSM_ALGID_NONE + 17,
 CSSM_ALGID_3DES_2KEY_EDE = CSSM_ALGID_NONE + 18,
 CSSM_ALGID_3DES_1KEY_EEE = CSSM_ALGID_NONE + 19,
 CSSM_ALGID_3DES_3KEY = CSSM_ALGID_3DES_3KEY_EDE,
 CSSM_ALGID_3DES_3KEY_EEE = CSSM_ALGID_NONE + 20,
 CSSM_ALGID_3DES_2KEY = CSSM_ALGID_3DES_2KEY_EDE,
 CSSM_ALGID_3DES_2KEY_EEE = CSSM_ALGID_NONE + 21,
 CSSM_ALGID_3DES_1KEY = CSSM_ALGID_3DES_3KEY_EEE,
 CSSM_ALGID_IDEA = CSSM_ALGID_NONE + 22,
 CSSM_ALGID_RC2 = CSSM_ALGID_NONE + 23,
 CSSM_ALGID_RC5 = CSSM_ALGID_NONE + 24,
 CSSM_ALGID_RC4 = CSSM_ALGID_NONE + 25,
 CSSM_ALGID_SEAL = CSSM_ALGID_NONE + 26,
 CSSM_ALGID_CAST = CSSM_ALGID_NONE + 27,
 CSSM_ALGID_BLOWFISH = CSSM_ALGID_NONE + 28,
 CSSM_ALGID_SKIPJACK = CSSM_ALGID_NONE + 29,
 CSSM_ALGID_LUCIFER = CSSM_ALGID_NONE + 30,
 CSSM_ALGID_MADRYGA = CSSM_ALGID_NONE + 31,
 CSSM_ALGID_FEAL = CSSM_ALGID_NONE + 32,
 CSSM_ALGID_REDOC = CSSM_ALGID_NONE + 33,
 CSSM_ALGID_REDOC3 = CSSM_ALGID_NONE + 34,
 CSSM_ALGID_LOKI = CSSM_ALGID_NONE + 35,
 CSSM_ALGID_KHUFU = CSSM_ALGID_NONE + 36,
 CSSM_ALGID_KHAFRE = CSSM_ALGID_NONE + 37,
 CSSM_ALGID_MMB = CSSM_ALGID_NONE + 38,
 CSSM_ALGID_GOST = CSSM_ALGID_NONE + 39,
 CSSM_ALGID_SAFER = CSSM_ALGID_NONE + 40,
 CSSM_ALGID_CRAB = CSSM_ALGID_NONE + 41,
 CSSM_ALGID_RSA = CSSM_ALGID_NONE + 42,
 CSSM_ALGID_DSA = CSSM_ALGID_NONE + 43,
 CSSM_ALGID_MD5WithRSA = CSSM_ALGID_NONE + 44,
 CSSM_ALGID_MD2WithRSA = CSSM_ALGID_NONE + 45,
 CSSM_ALGID_ElGamal = CSSM_ALGID_NONE + 46,
 CSSM_ALGID_MD2Random = CSSM_ALGID_NONE + 47,
 CSSM_ALGID_MD5Random = CSSM_ALGID_NONE + 48,
 CSSM_ALGID_SHARandom = CSSM_ALGID_NONE + 49,
 CSSM_ALGID_DESRandom = CSSM_ALGID_NONE + 50,
 CSSM_ALGID_SHA1WithRSA = CSSM_ALGID_NONE + 51,
 CSSM_ALGID_CDMF = CSSM_ALGID_NONE + 52,
 CSSM_ALGID_CAST3 = CSSM_ALGID_NONE + 53,
 CSSM_ALGID_CAST5 = CSSM_ALGID_NONE + 54,
 CSSM_ALGID_GenericSecret = CSSM_ALGID_NONE + 55,
 CSSM_ALGID_ConcatBaseAndKey = CSSM_ALGID_NONE + 56,
 CSSM_ALGID_ConcatKeyAndBase = CSSM_ALGID_NONE + 57,
 CSSM_ALGID_ConcatBaseAndData = CSSM_ALGID_NONE + 58,
 CSSM_ALGID_ConcatDataAndBase = CSSM_ALGID_NONE + 59,
 CSSM_ALGID_XORBaseAndData = CSSM_ALGID_NONE + 60,
 CSSM_ALGID_ExtractFromKey = CSSM_ALGID_NONE + 61,
 CSSM_ALGID_SSL3PreMasterGen = CSSM_ALGID_NONE + 62,
 CSSM_ALGID_SSL3MasterDerive = CSSM_ALGID_NONE + 63,
 CSSM_ALGID_SSL3KeyAndMacDerive = CSSM_ALGID_NONE + 64,
 CSSM_ALGID_SSL3MD5_MAC = CSSM_ALGID_NONE + 65,
 CSSM_ALGID_SSL3SHA1_MAC = CSSM_ALGID_NONE + 66,
 CSSM_ALGID_PKCS5_PBKDF1_MD5 = CSSM_ALGID_NONE + 67,
 CSSM_ALGID_PKCS5_PBKDF1_MD2 = CSSM_ALGID_NONE + 68,
 CSSM_ALGID_PKCS5_PBKDF1_SHA1 = CSSM_ALGID_NONE + 69,
 CSSM_ALGID_WrapLynks = CSSM_ALGID_NONE + 70,
 CSSM_ALGID_WrapSET_OAEP = CSSM_ALGID_NONE + 71,
 CSSM_ALGID_BATON = CSSM_ALGID_NONE + 72,
 CSSM_ALGID_ECDSA = CSSM_ALGID_NONE + 73,
 CSSM_ALGID_MAYFLY = CSSM_ALGID_NONE + 74,
 CSSM_ALGID_JUNIPER = CSSM_ALGID_NONE + 75,
 CSSM_ALGID_FASTHASH = CSSM_ALGID_NONE + 76,
 CSSM_ALGID_3DES = CSSM_ALGID_NONE + 77,
 CSSM_ALGID_SSL3MD5 = CSSM_ALGID_NONE + 78,
 CSSM_ALGID_SSL3SHA1 = CSSM_ALGID_NONE + 79,
 CSSM_ALGID_FortezzaTimestamp = CSSM_ALGID_NONE + 80,
 CSSM_ALGID_SHA1WithDSA = CSSM_ALGID_NONE + 81,
 CSSM_ALGID_SHA1WithECDSA = CSSM_ALGID_NONE + 82,
 CSSM_ALGID_DSA_BSAFE = CSSM_ALGID_NONE + 83,
 CSSM_ALGID_ECDH = CSSM_ALGID_NONE + 84,
 CSSM_ALGID_ECMQV = CSSM_ALGID_NONE + 85,
 CSSM_ALGID_PKCS12_SHA1_PBE = CSSM_ALGID_NONE + 86,
 CSSM_ALGID_ECNRA = CSSM_ALGID_NONE + 87,
 CSSM_ALGID_SHA1WithECNRA = CSSM_ALGID_NONE + 88,
 CSSM_ALGID_ECES = CSSM_ALGID_NONE + 89,
 CSSM_ALGID_ECAES = CSSM_ALGID_NONE + 90,
 CSSM_ALGID_SHA1HMAC = CSSM_ALGID_NONE + 91,
 CSSM_ALGID_FIPS186Random = CSSM_ALGID_NONE + 92,
 CSSM_ALGID_ECC = CSSM_ALGID_NONE + 93,
 CSSM_ALGID_MQV = CSSM_ALGID_NONE + 94,
 CSSM_ALGID_NRA = CSSM_ALGID_NONE + 95,
 CSSM_ALGID_IntelPlatformRandom = CSSM_ALGID_NONE + 96,
 CSSM_ALGID_UTC = CSSM_ALGID_NONE + 97,
 CSSM_ALGID_HAVAL3 = CSSM_ALGID_NONE + 98,
 CSSM_ALGID_HAVAL4 = CSSM_ALGID_NONE + 99,
 CSSM_ALGID_HAVAL5 = CSSM_ALGID_NONE + 100,
 CSSM_ALGID_TIGER = CSSM_ALGID_NONE + 101,
 CSSM_ALGID_MD5HMAC = CSSM_ALGID_NONE + 102,
 CSSM_ALGID_PKCS5_PBKDF2 = CSSM_ALGID_NONE + 103,
 CSSM_ALGID_RUNNING_COUNTER = CSSM_ALGID_NONE + 104,
 CSSM_ALGID_LAST = CSSM_ALGID_NONE + 0x7FFFFFFF,



 CSSM_ALGID_VENDOR_DEFINED = CSSM_ALGID_NONE + 0x80000000
};

typedef uint32 CSSM_ENCRYPT_MODE;
enum {
 CSSM_ALGMODE_NONE = 0,
 CSSM_ALGMODE_CUSTOM = CSSM_ALGMODE_NONE + 1,
 CSSM_ALGMODE_ECB = CSSM_ALGMODE_NONE + 2,
 CSSM_ALGMODE_ECBPad = CSSM_ALGMODE_NONE + 3,
 CSSM_ALGMODE_CBC = CSSM_ALGMODE_NONE + 4,
 CSSM_ALGMODE_CBC_IV8 = CSSM_ALGMODE_NONE + 5,
 CSSM_ALGMODE_CBCPadIV8 = CSSM_ALGMODE_NONE + 6,
 CSSM_ALGMODE_CFB = CSSM_ALGMODE_NONE + 7,
 CSSM_ALGMODE_CFB_IV8 = CSSM_ALGMODE_NONE + 8,
 CSSM_ALGMODE_CFBPadIV8 = CSSM_ALGMODE_NONE + 9,
 CSSM_ALGMODE_OFB = CSSM_ALGMODE_NONE + 10,
 CSSM_ALGMODE_OFB_IV8 = CSSM_ALGMODE_NONE + 11,
 CSSM_ALGMODE_OFBPadIV8 = CSSM_ALGMODE_NONE + 12,
 CSSM_ALGMODE_COUNTER = CSSM_ALGMODE_NONE + 13,
 CSSM_ALGMODE_BC = CSSM_ALGMODE_NONE + 14,
 CSSM_ALGMODE_PCBC = CSSM_ALGMODE_NONE + 15,
 CSSM_ALGMODE_CBCC = CSSM_ALGMODE_NONE + 16,
 CSSM_ALGMODE_OFBNLF = CSSM_ALGMODE_NONE + 17,
 CSSM_ALGMODE_PBC = CSSM_ALGMODE_NONE + 18,
 CSSM_ALGMODE_PFB = CSSM_ALGMODE_NONE + 19,
 CSSM_ALGMODE_CBCPD = CSSM_ALGMODE_NONE + 20,
 CSSM_ALGMODE_PUBLIC_KEY = CSSM_ALGMODE_NONE + 21,
 CSSM_ALGMODE_PRIVATE_KEY = CSSM_ALGMODE_NONE + 22,
 CSSM_ALGMODE_SHUFFLE = CSSM_ALGMODE_NONE + 23,
 CSSM_ALGMODE_ECB64 = CSSM_ALGMODE_NONE + 24,
 CSSM_ALGMODE_CBC64 = CSSM_ALGMODE_NONE + 25,
 CSSM_ALGMODE_OFB64 = CSSM_ALGMODE_NONE + 26,
 CSSM_ALGMODE_CFB32 = CSSM_ALGMODE_NONE + 28,
 CSSM_ALGMODE_CFB16 = CSSM_ALGMODE_NONE + 29,
 CSSM_ALGMODE_CFB8 = CSSM_ALGMODE_NONE + 30,
 CSSM_ALGMODE_WRAP = CSSM_ALGMODE_NONE + 31,
 CSSM_ALGMODE_PRIVATE_WRAP = CSSM_ALGMODE_NONE + 32,
 CSSM_ALGMODE_RELAYX = CSSM_ALGMODE_NONE + 33,
 CSSM_ALGMODE_ECB128 = CSSM_ALGMODE_NONE + 34,
 CSSM_ALGMODE_ECB96 = CSSM_ALGMODE_NONE + 35,
 CSSM_ALGMODE_CBC128 = CSSM_ALGMODE_NONE + 36,
 CSSM_ALGMODE_OAEP_HASH = CSSM_ALGMODE_NONE + 37,
 CSSM_ALGMODE_PKCS1_EME_V15 = CSSM_ALGMODE_NONE + 38,
 CSSM_ALGMODE_PKCS1_EME_OAEP = CSSM_ALGMODE_NONE + 39,
 CSSM_ALGMODE_PKCS1_EMSA_V15 = CSSM_ALGMODE_NONE + 40,
 CSSM_ALGMODE_ISO_9796 = CSSM_ALGMODE_NONE + 41,
 CSSM_ALGMODE_X9_31 = CSSM_ALGMODE_NONE + 42,
 CSSM_ALGMODE_LAST = CSSM_ALGMODE_NONE + 0x7FFFFFFF,



 CSSM_ALGMODE_VENDOR_DEFINED = CSSM_ALGMODE_NONE + 0x80000000
};

typedef struct cssm_keyheader {
    CSSM_HEADERVERSION HeaderVersion;
    CSSM_GUID CspId;
    CSSM_KEYBLOB_TYPE BlobType;
    CSSM_KEYBLOB_FORMAT Format;
    CSSM_ALGORITHMS AlgorithmId;
    CSSM_KEYCLASS KeyClass;
    uint32 LogicalKeySizeInBits;
    CSSM_KEYATTR_FLAGS KeyAttr;
    CSSM_KEYUSE KeyUsage;
    CSSM_DATE StartDate;
    CSSM_DATE EndDate;
    CSSM_ALGORITHMS WrapAlgorithmId;
    CSSM_ENCRYPT_MODE WrapMode;
    uint32 Reserved;
} CSSM_KEYHEADER, *CSSM_KEYHEADER_PTR;

typedef struct cssm_key {
    CSSM_KEYHEADER KeyHeader;
    CSSM_DATA KeyData;
} CSSM_KEY, *CSSM_KEY_PTR;

typedef CSSM_KEY CSSM_WRAP_KEY, *CSSM_WRAP_KEY_PTR;

typedef uint32 CSSM_CSPTYPE;
enum {
    CSSM_CSP_SOFTWARE = 1,
    CSSM_CSP_HARDWARE = CSSM_CSP_SOFTWARE + 1,
    CSSM_CSP_HYBRID = CSSM_CSP_SOFTWARE + 2
};


typedef struct cssm_dl_db_handle {
    CSSM_DL_HANDLE DLHandle;
    CSSM_DB_HANDLE DBHandle;
} CSSM_DL_DB_HANDLE, *CSSM_DL_DB_HANDLE_PTR;

typedef uint32 CSSM_CONTEXT_TYPE;
enum {
 CSSM_ALGCLASS_NONE = 0,
 CSSM_ALGCLASS_CUSTOM = CSSM_ALGCLASS_NONE + 1,
 CSSM_ALGCLASS_SIGNATURE = CSSM_ALGCLASS_NONE + 2,
 CSSM_ALGCLASS_SYMMETRIC = CSSM_ALGCLASS_NONE + 3,
 CSSM_ALGCLASS_DIGEST = CSSM_ALGCLASS_NONE + 4,
 CSSM_ALGCLASS_RANDOMGEN = CSSM_ALGCLASS_NONE + 5,
 CSSM_ALGCLASS_UNIQUEGEN = CSSM_ALGCLASS_NONE + 6,
 CSSM_ALGCLASS_MAC = CSSM_ALGCLASS_NONE + 7,
 CSSM_ALGCLASS_ASYMMETRIC = CSSM_ALGCLASS_NONE + 8,
 CSSM_ALGCLASS_KEYGEN = CSSM_ALGCLASS_NONE + 9,
 CSSM_ALGCLASS_DERIVEKEY = CSSM_ALGCLASS_NONE + 10
};


enum {
 CSSM_ATTRIBUTE_DATA_NONE = 0x00000000,
 CSSM_ATTRIBUTE_DATA_UINT32 = 0x10000000,
 CSSM_ATTRIBUTE_DATA_CSSM_DATA = 0x20000000,
 CSSM_ATTRIBUTE_DATA_CRYPTO_DATA = 0x30000000,
 CSSM_ATTRIBUTE_DATA_KEY = 0x40000000,
 CSSM_ATTRIBUTE_DATA_STRING = 0x50000000,
 CSSM_ATTRIBUTE_DATA_DATE = 0x60000000,
 CSSM_ATTRIBUTE_DATA_RANGE = 0x70000000,
 CSSM_ATTRIBUTE_DATA_ACCESS_CREDENTIALS = 0x80000000,
 CSSM_ATTRIBUTE_DATA_VERSION = 0x01000000,
 CSSM_ATTRIBUTE_DATA_DL_DB_HANDLE = 0x02000000,
 CSSM_ATTRIBUTE_DATA_KR_PROFILE = 0x03000000,
 CSSM_ATTRIBUTE_TYPE_MASK = 0xFF000000
};

typedef uint32 CSSM_ATTRIBUTE_TYPE;
enum {
    CSSM_ATTRIBUTE_NONE = 0,
    CSSM_ATTRIBUTE_CUSTOM = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 1,
    CSSM_ATTRIBUTE_DESCRIPTION = CSSM_ATTRIBUTE_DATA_STRING | 2,
    CSSM_ATTRIBUTE_KEY = CSSM_ATTRIBUTE_DATA_KEY | 3,
    CSSM_ATTRIBUTE_INIT_VECTOR = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 4,
    CSSM_ATTRIBUTE_SALT = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 5,
    CSSM_ATTRIBUTE_PADDING = CSSM_ATTRIBUTE_DATA_UINT32 | 6,
    CSSM_ATTRIBUTE_RANDOM = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 7,
    CSSM_ATTRIBUTE_SEED = CSSM_ATTRIBUTE_DATA_CRYPTO_DATA | 8,
    CSSM_ATTRIBUTE_PASSPHRASE = CSSM_ATTRIBUTE_DATA_CRYPTO_DATA | 9,
    CSSM_ATTRIBUTE_KEY_LENGTH = CSSM_ATTRIBUTE_DATA_UINT32 | 10,
    CSSM_ATTRIBUTE_KEY_LENGTH_RANGE = CSSM_ATTRIBUTE_DATA_RANGE | 11,
    CSSM_ATTRIBUTE_BLOCK_SIZE = CSSM_ATTRIBUTE_DATA_UINT32 | 12,
    CSSM_ATTRIBUTE_OUTPUT_SIZE = CSSM_ATTRIBUTE_DATA_UINT32 | 13,
    CSSM_ATTRIBUTE_ROUNDS = CSSM_ATTRIBUTE_DATA_UINT32 | 14,
    CSSM_ATTRIBUTE_IV_SIZE = CSSM_ATTRIBUTE_DATA_UINT32 | 15,
    CSSM_ATTRIBUTE_ALG_PARAMS = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 16,
    CSSM_ATTRIBUTE_LABEL = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 17,
    CSSM_ATTRIBUTE_KEY_TYPE = CSSM_ATTRIBUTE_DATA_UINT32 | 18,
    CSSM_ATTRIBUTE_MODE = CSSM_ATTRIBUTE_DATA_UINT32 | 19,
    CSSM_ATTRIBUTE_EFFECTIVE_BITS = CSSM_ATTRIBUTE_DATA_UINT32 | 20,
    CSSM_ATTRIBUTE_START_DATE = CSSM_ATTRIBUTE_DATA_DATE | 21,
    CSSM_ATTRIBUTE_END_DATE = CSSM_ATTRIBUTE_DATA_DATE | 22,
    CSSM_ATTRIBUTE_KEYUSAGE = CSSM_ATTRIBUTE_DATA_UINT32 | 23,
    CSSM_ATTRIBUTE_KEYATTR = CSSM_ATTRIBUTE_DATA_UINT32 | 24,
    CSSM_ATTRIBUTE_VERSION = CSSM_ATTRIBUTE_DATA_VERSION | 25,
    CSSM_ATTRIBUTE_PRIME = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 26,
    CSSM_ATTRIBUTE_BASE = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 27,
    CSSM_ATTRIBUTE_SUBPRIME = CSSM_ATTRIBUTE_DATA_CSSM_DATA | 28,
    CSSM_ATTRIBUTE_ALG_ID = CSSM_ATTRIBUTE_DATA_UINT32 | 29,
    CSSM_ATTRIBUTE_ITERATION_COUNT = CSSM_ATTRIBUTE_DATA_UINT32 | 30,
    CSSM_ATTRIBUTE_ROUNDS_RANGE = CSSM_ATTRIBUTE_DATA_RANGE | 31,
 CSSM_ATTRIBUTE_KRPROFILE_LOCAL = CSSM_ATTRIBUTE_DATA_KR_PROFILE | 32,
 CSSM_ATTRIBUTE_KRPROFILE_REMOTE = CSSM_ATTRIBUTE_DATA_KR_PROFILE | 33,
    CSSM_ATTRIBUTE_CSP_HANDLE = CSSM_ATTRIBUTE_DATA_UINT32 | 34,
    CSSM_ATTRIBUTE_DL_DB_HANDLE = CSSM_ATTRIBUTE_DATA_DL_DB_HANDLE | 35,
    CSSM_ATTRIBUTE_ACCESS_CREDENTIALS = CSSM_ATTRIBUTE_DATA_ACCESS_CREDENTIALS | 36,
    CSSM_ATTRIBUTE_PUBLIC_KEY_FORMAT = CSSM_ATTRIBUTE_DATA_UINT32 | 37,
    CSSM_ATTRIBUTE_PRIVATE_KEY_FORMAT = CSSM_ATTRIBUTE_DATA_UINT32 | 38,
    CSSM_ATTRIBUTE_SYMMETRIC_KEY_FORMAT=CSSM_ATTRIBUTE_DATA_UINT32 | 39,
    CSSM_ATTRIBUTE_WRAPPED_KEY_FORMAT = CSSM_ATTRIBUTE_DATA_UINT32 | 40
};

typedef uint32 CSSM_PADDING;
enum {
 CSSM_PADDING_NONE = 0,
 CSSM_PADDING_CUSTOM = CSSM_PADDING_NONE + 1,
 CSSM_PADDING_ZERO = CSSM_PADDING_NONE + 2,
 CSSM_PADDING_ONE = CSSM_PADDING_NONE + 3,
 CSSM_PADDING_ALTERNATE = CSSM_PADDING_NONE + 4,
 CSSM_PADDING_FF = CSSM_PADDING_NONE + 5,
 CSSM_PADDING_PKCS5 = CSSM_PADDING_NONE + 6,
 CSSM_PADDING_PKCS7 = CSSM_PADDING_NONE + 7,
 CSSM_PADDING_CIPHERSTEALING = CSSM_PADDING_NONE + 8,
 CSSM_PADDING_RANDOM = CSSM_PADDING_NONE + 9,
 CSSM_PADDING_PKCS1 = CSSM_PADDING_NONE + 10,



 CSSM_PADDING_VENDOR_DEFINED = CSSM_PADDING_NONE + 0x80000000
};

typedef CSSM_ALGORITHMS CSSM_KEY_TYPE;

typedef struct cssm_context_attribute {
    CSSM_ATTRIBUTE_TYPE AttributeType;
    uint32 AttributeLength;
    union cssm_context_attribute_value {
        char *String;
        uint32 Uint32;
        CSSM_ACCESS_CREDENTIALS_PTR AccessCredentials;
        CSSM_KEY_PTR Key;
        CSSM_DATA_PTR Data;
        CSSM_PADDING Padding;
        CSSM_DATE_PTR Date;
        CSSM_RANGE_PTR Range;
        CSSM_CRYPTO_DATA_PTR CryptoData;
        CSSM_VERSION_PTR Version;
        CSSM_DL_DB_HANDLE_PTR DLDBHandle;
        struct cssm_kr_profile *KRProfile;
    } Attribute;
} CSSM_CONTEXT_ATTRIBUTE, *CSSM_CONTEXT_ATTRIBUTE_PTR;

typedef struct cssm_context {
    CSSM_CONTEXT_TYPE ContextType;
    CSSM_ALGORITHMS AlgorithmType;
    uint32 NumberOfAttributes;
    CSSM_CONTEXT_ATTRIBUTE_PTR ContextAttributes;
    CSSM_CSP_HANDLE CSPHandle;
 CSSM_BOOL Privileged;
 uint32 EncryptionProhibited;
 uint32 WorkFactor;
 uint32 Reserved;
} CSSM_CONTEXT, *CSSM_CONTEXT_PTR;

typedef uint32 CSSM_SC_FLAGS;
enum {
 CSSM_CSP_TOK_RNG = 0x00000001,
 CSSM_CSP_TOK_CLOCK_EXISTS = 0x00000040
};

typedef uint32 CSSM_CSP_READER_FLAGS;
enum {
 CSSM_CSP_RDR_TOKENPRESENT = 0x00000001,

 CSSM_CSP_RDR_EXISTS = 0x00000002,


 CSSM_CSP_RDR_HW = 0x00000004

};

typedef uint32 CSSM_CSP_FLAGS;
enum {
 CSSM_CSP_TOK_WRITE_PROTECTED = 0x00000002,
 CSSM_CSP_TOK_LOGIN_REQUIRED = 0x00000004,
 CSSM_CSP_TOK_USER_PIN_INITIALIZED = 0x00000008,
 CSSM_CSP_TOK_PROT_AUTHENTICATION = 0x00000100,
 CSSM_CSP_TOK_USER_PIN_EXPIRED = 0x00100000,
 CSSM_CSP_TOK_SESSION_KEY_PASSWORD = 0x00200000,
 CSSM_CSP_TOK_PRIVATE_KEY_PASSWORD = 0x00400000,
 CSSM_CSP_STORES_PRIVATE_KEYS = 0x01000000,
 CSSM_CSP_STORES_PUBLIC_KEYS = 0x02000000,
 CSSM_CSP_STORES_SESSION_KEYS = 0x04000000,
 CSSM_CSP_STORES_CERTIFICATES = 0x08000000,
 CSSM_CSP_STORES_GENERIC = 0x10000000
};

typedef uint32 CSSM_PKCS_OAEP_MGF;
enum {
 CSSM_PKCS_OAEP_MGF_NONE = 0,
 CSSM_PKCS_OAEP_MGF1_SHA1 = CSSM_PKCS_OAEP_MGF_NONE + 1,
 CSSM_PKCS_OAEP_MGF1_MD5 = CSSM_PKCS_OAEP_MGF_NONE + 2
};

typedef uint32 CSSM_PKCS_OAEP_PSOURCE;
enum {
 CSSM_PKCS_OAEP_PSOURCE_NONE = 0,
 CSSM_PKCS_OAEP_PSOURCE_Pspecified = CSSM_PKCS_OAEP_PSOURCE_NONE + 1
};

typedef struct cssm_pkcs1_oaep_params {
    uint32 HashAlgorithm;
    CSSM_DATA HashParams;
    CSSM_PKCS_OAEP_MGF MGF;
    CSSM_DATA MGFParams;
    CSSM_PKCS_OAEP_PSOURCE PSource;
    CSSM_DATA PSourceParams;
} CSSM_PKCS1_OAEP_PARAMS, *CSSM_PKCS1_OAEP_PARAMS_PTR;

typedef struct cssm_csp_operational_statistics {
    CSSM_BOOL UserAuthenticated;

    CSSM_CSP_FLAGS DeviceFlags;
    uint32 TokenMaxSessionCount;
    uint32 TokenOpenedSessionCount;
    uint32 TokenMaxRWSessionCount;
    uint32 TokenOpenedRWSessionCount;
    uint32 TokenTotalPublicMem;
    uint32 TokenFreePublicMem;
    uint32 TokenTotalPrivateMem;
    uint32 TokenFreePrivateMem;
} CSSM_CSP_OPERATIONAL_STATISTICS, *CSSM_CSP_OPERATIONAL_STATISTICS_PTR;



enum {
 CSSM_VALUE_NOT_AVAILABLE = (uint32)(~0)
};

typedef struct cssm_pkcs5_pbkdf1_params {
    CSSM_DATA Passphrase;
    CSSM_DATA InitVector;
} CSSM_PKCS5_PBKDF1_PARAMS, *CSSM_PKCS5_PBKDF1_PARAMS_PTR;

typedef uint32 CSSM_PKCS5_PBKDF2_PRF;
enum {
 CSSM_PKCS5_PBKDF2_PRF_HMAC_SHA1 = 0
};

typedef struct cssm_pkcs5_pbkdf2_params {
 CSSM_DATA Passphrase;
 CSSM_PKCS5_PBKDF2_PRF PseudoRandomFunction;
} CSSM_PKCS5_PBKDF2_PARAMS, *CSSM_PKCS5_PBKDF2_PARAMS_PTR;

typedef struct cssm_kea_derive_params {
    CSSM_DATA Rb;
    CSSM_DATA Yb;
} CSSM_KEA_DERIVE_PARAMS, *CSSM_KEA_DERIVE_PARAMS_PTR;




typedef struct cssm_tp_authority_id {
    CSSM_DATA *AuthorityCert;
    CSSM_NET_ADDRESS_PTR AuthorityLocation;
} CSSM_TP_AUTHORITY_ID, *CSSM_TP_AUTHORITY_ID_PTR;

typedef uint32 CSSM_TP_AUTHORITY_REQUEST_TYPE, *CSSM_TP_AUTHORITY_REQUEST_TYPE_PTR;
enum {
 CSSM_TP_AUTHORITY_REQUEST_CERTISSUE = 0x01,
 CSSM_TP_AUTHORITY_REQUEST_CERTREVOKE = 0x02,
 CSSM_TP_AUTHORITY_REQUEST_CERTSUSPEND = 0x03,
 CSSM_TP_AUTHORITY_REQUEST_CERTRESUME = 0x04,
 CSSM_TP_AUTHORITY_REQUEST_CERTVERIFY = 0x05,
 CSSM_TP_AUTHORITY_REQUEST_CERTNOTARIZE = 0x06,
 CSSM_TP_AUTHORITY_REQUEST_CERTUSERECOVER = 0x07,
 CSSM_TP_AUTHORITY_REQUEST_CRLISSUE = 0x100
};

typedef CSSM_RETURN ( * CSSM_TP_VERIFICATION_RESULTS_CALLBACK)
 (CSSM_MODULE_HANDLE ModuleHandle,
  void *CallerCtx,
  CSSM_DATA_PTR VerifiedCert);


typedef CSSM_DATA CSSM_OID, *CSSM_OID_PTR;

typedef struct cssm_field {
    CSSM_OID FieldOid;
    CSSM_DATA FieldValue;
} CSSM_FIELD, *CSSM_FIELD_PTR;


typedef struct cssm_tp_policyinfo {
    uint32 NumberOfPolicyIds;
    CSSM_FIELD_PTR PolicyIds;
    void *PolicyControl;
} CSSM_TP_POLICYINFO, *CSSM_TP_POLICYINFO_PTR;

typedef uint32 CSSM_TP_SERVICES;
enum {

 CSSM_TP_KEY_ARCHIVE = 0x0001,
 CSSM_TP_CERT_PUBLISH = 0x0002,
 CSSM_TP_CERT_NOTIFY_RENEW = 0x0004,
 CSSM_TP_CERT_DIR_UPDATE = 0x0008,
 CSSM_TP_CRL_DISTRIBUTE = 0x0010
};

typedef uint32 CSSM_TP_ACTION;
enum {
 CSSM_TP_ACTION_DEFAULT = 0
};

typedef uint32 CSSM_TP_STOP_ON;
enum {
    CSSM_TP_STOP_ON_POLICY = 0,
    CSSM_TP_STOP_ON_NONE = 1,
    CSSM_TP_STOP_ON_FIRST_PASS = 2,
    CSSM_TP_STOP_ON_FIRST_FAIL = 3
};

typedef char *CSSM_TIMESTRING;


typedef struct cssm_dl_db_list {
    uint32 NumHandles;
    CSSM_DL_DB_HANDLE_PTR DLDBHandle;
} CSSM_DL_DB_LIST, *CSSM_DL_DB_LIST_PTR;


typedef struct cssm_tp_callerauth_context {
    CSSM_TP_POLICYINFO Policy;
    CSSM_TIMESTRING VerifyTime;
    CSSM_TP_STOP_ON VerificationAbortOn;
    CSSM_TP_VERIFICATION_RESULTS_CALLBACK CallbackWithVerifiedCert;
    uint32 NumberOfAnchorCerts;
    CSSM_DATA_PTR AnchorCerts;
    CSSM_DL_DB_LIST_PTR DBList;
    CSSM_ACCESS_CREDENTIALS_PTR CallerCredentials;
} CSSM_TP_CALLERAUTH_CONTEXT, *CSSM_TP_CALLERAUTH_CONTEXT_PTR;

typedef uint32 CSSM_CRL_PARSE_FORMAT, * CSSM_CRL_PARSE_FORMAT_PTR;
enum {
 CSSM_CRL_PARSE_FORMAT_NONE = 0x00,
 CSSM_CRL_PARSE_FORMAT_CUSTOM = 0x01,
 CSSM_CRL_PARSE_FORMAT_SEXPR = 0x02,
 CSSM_CRL_PARSE_FORMAT_COMPLEX = 0x03,
 CSSM_CRL_PARSE_FORMAT_OID_NAMED = 0x04,
 CSSM_CRL_PARSE_FORMAT_TUPLE = 0x05,
 CSSM_CRL_PARSE_FORMAT_MULTIPLE = 0x7FFE,
 CSSM_CRL_PARSE_FORMAT_LAST = 0x7FFF,



 CSSM_CL_CUSTOM_CRL_PARSE_FORMAT = 0x8000
};


typedef uint32 CSSM_CRL_TYPE, *CSSM_CRL_TYPE_PTR;
enum {
    CSSM_CRL_TYPE_UNKNOWN = 0x00,
    CSSM_CRL_TYPE_X_509v1 = 0x01,
    CSSM_CRL_TYPE_X_509v2 = 0x02,
    CSSM_CRL_TYPE_SPKI = 0x03,
    CSSM_CRL_TYPE_MULTIPLE = 0x7FFE
};

typedef uint32 CSSM_CRL_ENCODING, *CSSM_CRL_ENCODING_PTR;
enum {
    CSSM_CRL_ENCODING_UNKNOWN = 0x00,
    CSSM_CRL_ENCODING_CUSTOM = 0x01,
    CSSM_CRL_ENCODING_BER = 0x02,
    CSSM_CRL_ENCODING_DER = 0x03,
    CSSM_CRL_ENCODING_BLOOM = 0x04,
    CSSM_CRL_ENCODING_SEXPR = 0x05,
    CSSM_CRL_ENCODING_MULTIPLE = 0x7FFE
};

typedef struct cssm_encoded_crl {
    CSSM_CRL_TYPE CrlType;
    CSSM_CRL_ENCODING CrlEncoding;
    CSSM_DATA CrlBlob;
} CSSM_ENCODED_CRL, *CSSM_ENCODED_CRL_PTR;


typedef struct cssm_parsed_crl {
    CSSM_CRL_TYPE CrlType;
    CSSM_CRL_PARSE_FORMAT ParsedCrlFormat;

    void *ParsedCrl;
} CSSM_PARSED_CRL, *CSSM_PARSED_CRL_PTR;

typedef struct cssm_crl_pair {
    CSSM_ENCODED_CRL EncodedCrl;
    CSSM_PARSED_CRL ParsedCrl;
} CSSM_CRL_PAIR, *CSSM_CRL_PAIR_PTR;

typedef uint32 CSSM_CRLGROUP_TYPE, * CSSM_CRLGROUP_TYPE_PTR;
enum {
 CSSM_CRLGROUP_DATA = 0x00,
 CSSM_CRLGROUP_ENCODED_CRL = 0x01,
 CSSM_CRLGROUP_PARSED_CRL = 0x02,
 CSSM_CRLGROUP_CRL_PAIR = 0x03
};

typedef struct cssm_crlgroup {
    CSSM_CRL_TYPE CrlType;
    CSSM_CRL_ENCODING CrlEncoding;
    uint32 NumberOfCrls;
    union {
        CSSM_DATA_PTR CrlList;
        CSSM_ENCODED_CRL_PTR EncodedCrlList;
        CSSM_PARSED_CRL_PTR ParsedCrlList;
        CSSM_CRL_PAIR_PTR PairCrlList;
    } GroupCrlList;
    CSSM_CRLGROUP_TYPE CrlGroupType;
} CSSM_CRLGROUP, *CSSM_CRLGROUP_PTR;

typedef struct cssm_fieldgroup {
    int NumberOfFields;
    CSSM_FIELD_PTR Fields;
} CSSM_FIELDGROUP, *CSSM_FIELDGROUP_PTR;

typedef uint32 CSSM_EVIDENCE_FORM;
enum {
 CSSM_EVIDENCE_FORM_UNSPECIFIC = 0x0,
 CSSM_EVIDENCE_FORM_CERT = 0x1,
 CSSM_EVIDENCE_FORM_CRL = 0x2,
 CSSM_EVIDENCE_FORM_CERT_ID = 0x3,
 CSSM_EVIDENCE_FORM_CRL_ID = 0x4,
 CSSM_EVIDENCE_FORM_VERIFIER_TIME = 0x5,
 CSSM_EVIDENCE_FORM_CRL_THISTIME = 0x6,
 CSSM_EVIDENCE_FORM_CRL_NEXTTIME = 0x7,
 CSSM_EVIDENCE_FORM_POLICYINFO = 0x8,
 CSSM_EVIDENCE_FORM_TUPLEGROUP = 0x9
};

typedef struct cssm_evidence {
    CSSM_EVIDENCE_FORM EvidenceForm;
    void *Evidence;
} CSSM_EVIDENCE, *CSSM_EVIDENCE_PTR;

typedef struct cssm_tp_verify_context {
    CSSM_TP_ACTION Action;
    CSSM_DATA ActionData;
    CSSM_CRLGROUP Crls;
    CSSM_TP_CALLERAUTH_CONTEXT_PTR Cred;
} CSSM_TP_VERIFY_CONTEXT, *CSSM_TP_VERIFY_CONTEXT_PTR;

typedef struct cssm_tp_verify_context_result {
    uint32 NumberOfEvidences;
    CSSM_EVIDENCE_PTR Evidence;
} CSSM_TP_VERIFY_CONTEXT_RESULT, *CSSM_TP_VERIFY_CONTEXT_RESULT_PTR;

typedef struct cssm_tp_request_set {
    uint32 NumberOfRequests;
    void *Requests;
} CSSM_TP_REQUEST_SET, *CSSM_TP_REQUEST_SET_PTR;

typedef struct cssm_tp_result_set {
    uint32 NumberOfResults;
    void *Results;
} CSSM_TP_RESULT_SET, *CSSM_TP_RESULT_SET_PTR;

typedef uint32 CSSM_TP_CONFIRM_STATUS, *CSSM_TP_CONFIRM_STATUS_PTR;
enum {
 CSSM_TP_CONFIRM_STATUS_UNKNOWN = 0x0,

 CSSM_TP_CONFIRM_ACCEPT = 0x1,


 CSSM_TP_CONFIRM_REJECT = 0x2


};

typedef struct cssm_tp_confirm_response {
    uint32 NumberOfResponses;
    CSSM_TP_CONFIRM_STATUS_PTR Responses;
} CSSM_TP_CONFIRM_RESPONSE, *CSSM_TP_CONFIRM_RESPONSE_PTR;

enum {
 CSSM_ESTIMATED_TIME_UNKNOWN = -1
};

enum {
 CSSM_ELAPSED_TIME_UNKNOWN = -1,
 CSSM_ELAPSED_TIME_COMPLETE = -2
};

typedef struct cssm_tp_certissue_input {
    CSSM_SUBSERVICE_UID CSPSubserviceUid;
    CSSM_CL_HANDLE CLHandle;
    uint32 NumberOfTemplateFields;
    CSSM_FIELD_PTR SubjectCertFields;
    CSSM_TP_SERVICES MoreServiceRequests;
    uint32 NumberOfServiceControls;
    CSSM_FIELD_PTR ServiceControls;
    CSSM_ACCESS_CREDENTIALS_PTR UserCredentials;
} CSSM_TP_CERTISSUE_INPUT, *CSSM_TP_CERTISSUE_INPUT_PTR;

typedef uint32 CSSM_TP_CERTISSUE_STATUS;
enum {
 CSSM_TP_CERTISSUE_STATUS_UNKNOWN = 0x0,

 CSSM_TP_CERTISSUE_OK = 0x1,

 CSSM_TP_CERTISSUE_OKWITHCERTMODS = 0x2,


 CSSM_TP_CERTISSUE_OKWITHSERVICEMODS = 0x3,



 CSSM_TP_CERTISSUE_REJECTED = 0x4,


 CSSM_TP_CERTISSUE_NOT_AUTHORIZED = 0x5,


 CSSM_TP_CERTISSUE_WILL_BE_REVOKED = 0x6


};

typedef struct cssm_tp_certissue_output {
    CSSM_TP_CERTISSUE_STATUS IssueStatus;
    CSSM_CERTGROUP_PTR CertGroup;
    CSSM_TP_SERVICES PerformedServiceRequests;
} CSSM_TP_CERTISSUE_OUTPUT, *CSSM_TP_CERTISSUE_OUTPUT_PTR;

typedef uint32 CSSM_TP_CERTCHANGE_ACTION;
enum {
 CSSM_TP_CERTCHANGE_NONE = 0x0,
 CSSM_TP_CERTCHANGE_REVOKE = 0x1,




 CSSM_TP_CERTCHANGE_HOLD = 0x2,
# 1532 "/System/Library/Frameworks/Security.framework/Headers/cssmtype.h" 3
 CSSM_TP_CERTCHANGE_RELEASE = 0x3





};

typedef uint32 CSSM_TP_CERTCHANGE_REASON;
enum {
 CSSM_TP_CERTCHANGE_REASON_UNKNOWN = 0x0,

 CSSM_TP_CERTCHANGE_REASON_KEYCOMPROMISE = 0x1,

 CSSM_TP_CERTCHANGE_REASON_CACOMPROMISE = 0x2,

 CSSM_TP_CERTCHANGE_REASON_CEASEOPERATION = 0x3,


 CSSM_TP_CERTCHANGE_REASON_AFFILIATIONCHANGE = 0x4,


 CSSM_TP_CERTCHANGE_REASON_SUPERCEDED = 0x5,


 CSSM_TP_CERTCHANGE_REASON_SUSPECTEDCOMPROMISE = 0x6,

 CSSM_TP_CERTCHANGE_REASON_HOLDRELEASE = 0x7


};

typedef struct cssm_tp_certchange_input {
    CSSM_TP_CERTCHANGE_ACTION Action;
    CSSM_TP_CERTCHANGE_REASON Reason;
    CSSM_CL_HANDLE CLHandle;
    CSSM_DATA_PTR Cert;
    CSSM_FIELD_PTR ChangeInfo;
    CSSM_TIMESTRING StartTime;
    CSSM_ACCESS_CREDENTIALS_PTR CallerCredentials;
} CSSM_TP_CERTCHANGE_INPUT, *CSSM_TP_CERTCHANGE_INPUT_PTR;

typedef uint32 CSSM_TP_CERTCHANGE_STATUS;
enum {
 CSSM_TP_CERTCHANGE_STATUS_UNKNOWN = 0x0,

 CSSM_TP_CERTCHANGE_OK = 0x1,


 CSSM_TP_CERTCHANGE_OKWITHNEWTIME = 0x2,


 CSSM_TP_CERTCHANGE_WRONGCA = 0x3,



 CSSM_TP_CERTCHANGE_REJECTED = 0x4,


 CSSM_TP_CERTCHANGE_NOT_AUTHORIZED = 0x5



};

typedef struct cssm_tp_certchange_output {
    CSSM_TP_CERTCHANGE_STATUS ActionStatus;
    CSSM_FIELD RevokeInfo;
} CSSM_TP_CERTCHANGE_OUTPUT, *CSSM_TP_CERTCHANGE_OUTPUT_PTR;

typedef struct cssm_tp_certverify_input {
    CSSM_CL_HANDLE CLHandle;
    CSSM_DATA_PTR Cert;
    CSSM_TP_VERIFY_CONTEXT_PTR VerifyContext;
} CSSM_TP_CERTVERIFY_INPUT, *CSSM_TP_CERTVERIFY_INPUT_PTR;

typedef uint32 CSSM_TP_CERTVERIFY_STATUS;
enum {
 CSSM_TP_CERTVERIFY_UNKNOWN = 0x0,
 CSSM_TP_CERTVERIFY_VALID = 0x1,
 CSSM_TP_CERTVERIFY_INVALID = 0x2,
 CSSM_TP_CERTVERIFY_REVOKED = 0x3,
 CSSM_TP_CERTVERIFY_SUSPENDED = 0x4,
 CSSM_TP_CERTVERIFY_EXPIRED = 0x5,
 CSSM_TP_CERTVERIFY_NOT_VALID_YET = 0x6,
 CSSM_TP_CERTVERIFY_INVALID_AUTHORITY = 0x7,
 CSSM_TP_CERTVERIFY_INVALID_SIGNATURE = 0x8,
 CSSM_TP_CERTVERIFY_INVALID_CERT_VALUE = 0x9,
 CSSM_TP_CERTVERIFY_INVALID_CERTGROUP = 0xA,
 CSSM_TP_CERTVERIFY_INVALID_POLICY = 0xB,
 CSSM_TP_CERTVERIFY_INVALID_POLICY_IDS = 0xC,
 CSSM_TP_CERTVERIFY_INVALID_BASIC_CONSTRAINTS = 0xD,
 CSSM_TP_CERTVERIFY_INVALID_CRL_DIST_PT = 0xE,
 CSSM_TP_CERTVERIFY_INVALID_NAME_TREE = 0xF,
 CSSM_TP_CERTVERIFY_UNKNOWN_CRITICAL_EXT = 0x10
};

typedef struct cssm_tp_certverify_output {
    CSSM_TP_CERTVERIFY_STATUS VerifyStatus;
    uint32 NumberOfEvidence;
    CSSM_EVIDENCE_PTR Evidence;
} CSSM_TP_CERTVERIFY_OUTPUT, *CSSM_TP_CERTVERIFY_OUTPUT_PTR;

typedef struct cssm_tp_certnotarize_input {
    CSSM_CL_HANDLE CLHandle;
    uint32 NumberOfFields;
    CSSM_FIELD_PTR MoreFields;
    CSSM_FIELD_PTR SignScope;
    uint32 ScopeSize;
    CSSM_TP_SERVICES MoreServiceRequests;
    uint32 NumberOfServiceControls;
    CSSM_FIELD_PTR ServiceControls;
    CSSM_ACCESS_CREDENTIALS_PTR UserCredentials;
} CSSM_TP_CERTNOTARIZE_INPUT, *CSSM_TP_CERTNOTARIZE_INPUT_PTR;

typedef uint32 CSSM_TP_CERTNOTARIZE_STATUS;
enum {
 CSSM_TP_CERTNOTARIZE_STATUS_UNKNOWN = 0x0,

 CSSM_TP_CERTNOTARIZE_OK = 0x1,


 CSSM_TP_CERTNOTARIZE_OKWITHOUTFIELDS = 0x2,



 CSSM_TP_CERTNOTARIZE_OKWITHSERVICEMODS = 0x3,




 CSSM_TP_CERTNOTARIZE_REJECTED = 0x4,


 CSSM_TP_CERTNOTARIZE_NOT_AUTHORIZED = 0x5


};

typedef struct cssm_tp_certnotarize_output {
    CSSM_TP_CERTNOTARIZE_STATUS NotarizeStatus;
    CSSM_CERTGROUP_PTR NotarizedCertGroup;
    CSSM_TP_SERVICES PerformedServiceRequests;
} CSSM_TP_CERTNOTARIZE_OUTPUT, *CSSM_TP_CERTNOTARIZE_OUTPUT_PTR;

typedef struct cssm_tp_certreclaim_input {
    CSSM_CL_HANDLE CLHandle;
    uint32 NumberOfSelectionFields;
    CSSM_FIELD_PTR SelectionFields;
    CSSM_ACCESS_CREDENTIALS_PTR UserCredentials;
} CSSM_TP_CERTRECLAIM_INPUT, *CSSM_TP_CERTRECLAIM_INPUT_PTR;

typedef uint32 CSSM_TP_CERTRECLAIM_STATUS;
enum {
 CSSM_TP_CERTRECLAIM_STATUS_UNKNOWN = 0x0,

 CSSM_TP_CERTRECLAIM_OK = 0x1,



 CSSM_TP_CERTRECLAIM_NOMATCH = 0x2,



 CSSM_TP_CERTRECLAIM_REJECTED = 0x3,


 CSSM_TP_CERTRECLAIM_NOT_AUTHORIZED = 0x4



};

typedef struct cssm_tp_certreclaim_output {
    CSSM_TP_CERTRECLAIM_STATUS ReclaimStatus;
    CSSM_CERTGROUP_PTR ReclaimedCertGroup;
    CSSM_LONG_HANDLE KeyCacheHandle;
} CSSM_TP_CERTRECLAIM_OUTPUT, *CSSM_TP_CERTRECLAIM_OUTPUT_PTR;

typedef struct cssm_tp_crlissue_input {
    CSSM_CL_HANDLE CLHandle;
    uint32 CrlIdentifier;
    CSSM_TIMESTRING CrlThisTime;
    CSSM_FIELD_PTR PolicyIdentifier;
    CSSM_ACCESS_CREDENTIALS_PTR CallerCredentials;
} CSSM_TP_CRLISSUE_INPUT, *CSSM_TP_CRLISSUE_INPUT_PTR;

typedef uint32 CSSM_TP_CRLISSUE_STATUS;
enum {
 CSSM_TP_CRLISSUE_STATUS_UNKNOWN = 0x0,

 CSSM_TP_CRLISSUE_OK = 0x1,



 CSSM_TP_CRLISSUE_NOT_CURRENT = 0x2,






 CSSM_TP_CRLISSUE_INVALID_DOMAIN = 0x3,




 CSSM_TP_CRLISSUE_UNKNOWN_IDENTIFIER = 0x4,



 CSSM_TP_CRLISSUE_REJECTED = 0x5,



 CSSM_TP_CRLISSUE_NOT_AUTHORIZED = 0x6



};

typedef struct cssm_tp_crlissue_output {
    CSSM_TP_CRLISSUE_STATUS IssueStatus;
    CSSM_ENCODED_CRL_PTR Crl;
    CSSM_TIMESTRING CrlNextTime;
} CSSM_TP_CRLISSUE_OUTPUT, *CSSM_TP_CRLISSUE_OUTPUT_PTR;

typedef uint32 CSSM_TP_FORM_TYPE;
enum {
 CSSM_TP_FORM_TYPE_GENERIC = 0x0,
 CSSM_TP_FORM_TYPE_REGISTRATION = 0x1
};



typedef uint32 CSSM_CL_TEMPLATE_TYPE;
enum {
 CSSM_CL_TEMPLATE_INTERMEDIATE_CERT = 1,


 CSSM_CL_TEMPLATE_PKIX_CERTTEMPLATE = 2

};

typedef uint32 CSSM_CERT_BUNDLE_TYPE;
enum {
    CSSM_CERT_BUNDLE_UNKNOWN = 0x00,
    CSSM_CERT_BUNDLE_CUSTOM = 0x01,
    CSSM_CERT_BUNDLE_PKCS7_SIGNED_DATA = 0x02,
    CSSM_CERT_BUNDLE_PKCS7_SIGNED_ENVELOPED_DATA = 0x03,
    CSSM_CERT_BUNDLE_PKCS12 = 0x04,
    CSSM_CERT_BUNDLE_PFX = 0x05,
    CSSM_CERT_BUNDLE_SPKI_SEQUENCE = 0x06,
    CSSM_CERT_BUNDLE_PGP_KEYRING = 0x07,
    CSSM_CERT_BUNDLE_LAST = 0x7FFF,



 CSSM_CL_CUSTOM_CERT_BUNDLE_TYPE = 0x8000
};

typedef uint32 CSSM_CERT_BUNDLE_ENCODING;
enum {
    CSSM_CERT_BUNDLE_ENCODING_UNKNOWN = 0x00,
    CSSM_CERT_BUNDLE_ENCODING_CUSTOM = 0x01,
    CSSM_CERT_BUNDLE_ENCODING_BER = 0x02,
    CSSM_CERT_BUNDLE_ENCODING_DER = 0x03,
    CSSM_CERT_BUNDLE_ENCODING_SEXPR = 0x04,
    CSSM_CERT_BUNDLE_ENCODING_PGP = 0x05
};

typedef struct cssm_cert_bundle_header {
    CSSM_CERT_BUNDLE_TYPE BundleType;
    CSSM_CERT_BUNDLE_ENCODING BundleEncoding;
} CSSM_CERT_BUNDLE_HEADER, *CSSM_CERT_BUNDLE_HEADER_PTR;

typedef struct cssm_cert_bundle {
    CSSM_CERT_BUNDLE_HEADER BundleHeader;
    CSSM_DATA Bundle;
} CSSM_CERT_BUNDLE, *CSSM_CERT_BUNDLE_PTR;

enum {
 CSSM_FIELDVALUE_COMPLEX_DATA_TYPE = 0xFFFFFFFF
};



typedef uint32 CSSM_DB_ATTRIBUTE_NAME_FORMAT, *CSSM_DB_ATTRIBUTE_NAME_FORMAT_PTR;
enum {
    CSSM_DB_ATTRIBUTE_NAME_AS_STRING = 0,
    CSSM_DB_ATTRIBUTE_NAME_AS_OID = 1,
 CSSM_DB_ATTRIBUTE_NAME_AS_INTEGER = 2
};

typedef uint32 CSSM_DB_ATTRIBUTE_FORMAT, *CSSM_DB_ATTRIBUTE_FORMAT_PTR;
enum {
    CSSM_DB_ATTRIBUTE_FORMAT_STRING = 0,
    CSSM_DB_ATTRIBUTE_FORMAT_SINT32 = 1,
    CSSM_DB_ATTRIBUTE_FORMAT_UINT32 = 2,
    CSSM_DB_ATTRIBUTE_FORMAT_BIG_NUM = 3,
    CSSM_DB_ATTRIBUTE_FORMAT_REAL = 4,
    CSSM_DB_ATTRIBUTE_FORMAT_TIME_DATE = 5,
    CSSM_DB_ATTRIBUTE_FORMAT_BLOB = 6,
    CSSM_DB_ATTRIBUTE_FORMAT_MULTI_UINT32 = 7,
    CSSM_DB_ATTRIBUTE_FORMAT_COMPLEX = 8
};

typedef struct cssm_db_attribute_info {
    CSSM_DB_ATTRIBUTE_NAME_FORMAT AttributeNameFormat;
    union cssm_db_attribute_label {
        char *AttributeName;
        CSSM_OID AttributeOID;
        uint32 AttributeID;
    } Label;
    CSSM_DB_ATTRIBUTE_FORMAT AttributeFormat;
} CSSM_DB_ATTRIBUTE_INFO, *CSSM_DB_ATTRIBUTE_INFO_PTR;

typedef struct cssm_db_attribute_data {
    CSSM_DB_ATTRIBUTE_INFO Info;
    uint32 NumberOfValues;
    CSSM_DATA_PTR Value;
} CSSM_DB_ATTRIBUTE_DATA, *CSSM_DB_ATTRIBUTE_DATA_PTR;

typedef uint32 CSSM_DB_RECORDTYPE;
enum {

 CSSM_DB_RECORDTYPE_SCHEMA_START = 0x00000000,
 CSSM_DB_RECORDTYPE_SCHEMA_END = CSSM_DB_RECORDTYPE_SCHEMA_START + 4,

 CSSM_DB_RECORDTYPE_OPEN_GROUP_START = 0x0000000A,
 CSSM_DB_RECORDTYPE_OPEN_GROUP_END = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 8,

 CSSM_DB_RECORDTYPE_APP_DEFINED_START = 0x80000000,
 CSSM_DB_RECORDTYPE_APP_DEFINED_END = 0xffffffff,

 CSSM_DL_DB_SCHEMA_INFO = CSSM_DB_RECORDTYPE_SCHEMA_START + 0,
 CSSM_DL_DB_SCHEMA_INDEXES = CSSM_DB_RECORDTYPE_SCHEMA_START + 1,
 CSSM_DL_DB_SCHEMA_ATTRIBUTES = CSSM_DB_RECORDTYPE_SCHEMA_START + 2,
 CSSM_DL_DB_SCHEMA_PARSING_MODULE = CSSM_DB_RECORDTYPE_SCHEMA_START + 3,

 CSSM_DL_DB_RECORD_ANY = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 0,
 CSSM_DL_DB_RECORD_CERT = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 1,
 CSSM_DL_DB_RECORD_CRL = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 2,
 CSSM_DL_DB_RECORD_POLICY = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 3,
 CSSM_DL_DB_RECORD_GENERIC = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 4,
 CSSM_DL_DB_RECORD_PUBLIC_KEY = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 5,
 CSSM_DL_DB_RECORD_PRIVATE_KEY = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 6,
 CSSM_DL_DB_RECORD_SYMMETRIC_KEY = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 7,
 CSSM_DL_DB_RECORD_ALL_KEYS = CSSM_DB_RECORDTYPE_OPEN_GROUP_START + 8
};

enum {
 CSSM_DB_CERT_USE_TRUSTED = 0x00000001,
 CSSM_DB_CERT_USE_SYSTEM = 0x00000002,
 CSSM_DB_CERT_USE_OWNER = 0x00000004,
 CSSM_DB_CERT_USE_REVOKED = 0x00000008,
 CSSM_DB_CERT_USE_SIGNING = 0x00000010,
 CSSM_DB_CERT_USE_PRIVACY = 0x00000020
};

typedef struct cssm_db_record_attribute_info {
    CSSM_DB_RECORDTYPE DataRecordType;
    uint32 NumberOfAttributes;
    CSSM_DB_ATTRIBUTE_INFO_PTR AttributeInfo;
} CSSM_DB_RECORD_ATTRIBUTE_INFO, *CSSM_DB_RECORD_ATTRIBUTE_INFO_PTR;

typedef struct cssm_db_record_attribute_data {
    CSSM_DB_RECORDTYPE DataRecordType;
    uint32 SemanticInformation;
    uint32 NumberOfAttributes;
    CSSM_DB_ATTRIBUTE_DATA_PTR AttributeData;
} CSSM_DB_RECORD_ATTRIBUTE_DATA, *CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR;

typedef struct cssm_db_parsing_module_info {
    CSSM_DB_RECORDTYPE RecordType;
    CSSM_SUBSERVICE_UID ModuleSubserviceUid;
} CSSM_DB_PARSING_MODULE_INFO, *CSSM_DB_PARSING_MODULE_INFO_PTR;

typedef uint32 CSSM_DB_INDEX_TYPE;
enum {
    CSSM_DB_INDEX_UNIQUE = 0,
    CSSM_DB_INDEX_NONUNIQUE = 1
};

typedef uint32 CSSM_DB_INDEXED_DATA_LOCATION;
enum {
    CSSM_DB_INDEX_ON_UNKNOWN = 0,
    CSSM_DB_INDEX_ON_ATTRIBUTE = 1,
    CSSM_DB_INDEX_ON_RECORD = 2
};

typedef struct cssm_db_index_info {
    CSSM_DB_INDEX_TYPE IndexType;
    CSSM_DB_INDEXED_DATA_LOCATION IndexedDataLocation;
    CSSM_DB_ATTRIBUTE_INFO Info;
} CSSM_DB_INDEX_INFO, *CSSM_DB_INDEX_INFO_PTR;

typedef struct cssm_db_unique_record {
    CSSM_DB_INDEX_INFO RecordLocator;
    CSSM_DATA RecordIdentifier;
} CSSM_DB_UNIQUE_RECORD, *CSSM_DB_UNIQUE_RECORD_PTR;

typedef struct cssm_db_record_index_info {
    CSSM_DB_RECORDTYPE DataRecordType;
    uint32 NumberOfIndexes;
    CSSM_DB_INDEX_INFO_PTR IndexInfo;
} CSSM_DB_RECORD_INDEX_INFO, *CSSM_DB_RECORD_INDEX_INFO_PTR;

typedef uint32 CSSM_DB_ACCESS_TYPE, *CSSM_DB_ACCESS_TYPE_PTR;
enum {
 CSSM_DB_ACCESS_READ = 0x00001,
 CSSM_DB_ACCESS_WRITE = 0x00002,
 CSSM_DB_ACCESS_PRIVILEGED = 0x00004
};

typedef uint32 CSSM_DB_MODIFY_MODE;
enum {
 CSSM_DB_MODIFY_ATTRIBUTE_NONE = 0,
 CSSM_DB_MODIFY_ATTRIBUTE_ADD = CSSM_DB_MODIFY_ATTRIBUTE_NONE + 1,
 CSSM_DB_MODIFY_ATTRIBUTE_DELETE = CSSM_DB_MODIFY_ATTRIBUTE_NONE + 2,
 CSSM_DB_MODIFY_ATTRIBUTE_REPLACE = CSSM_DB_MODIFY_ATTRIBUTE_NONE + 3
};

typedef struct cssm_dbinfo {



    uint32 NumberOfRecordTypes;
    CSSM_DB_PARSING_MODULE_INFO_PTR DefaultParsingModules;
    CSSM_DB_RECORD_ATTRIBUTE_INFO_PTR RecordAttributeNames;
    CSSM_DB_RECORD_INDEX_INFO_PTR RecordIndexes;

    CSSM_BOOL IsLocal;
    char *AccessPath;
    void *Reserved;
} CSSM_DBINFO, *CSSM_DBINFO_PTR;

typedef uint32 CSSM_DB_OPERATOR, *CSSM_DB_OPERATOR_PTR;
enum {
    CSSM_DB_EQUAL = 0,
    CSSM_DB_NOT_EQUAL = 1,
    CSSM_DB_LESS_THAN = 2,
    CSSM_DB_GREATER_THAN = 3,
    CSSM_DB_CONTAINS = 4,
    CSSM_DB_CONTAINS_INITIAL_SUBSTRING = 5,
    CSSM_DB_CONTAINS_FINAL_SUBSTRING = 6
};

typedef uint32 CSSM_DB_CONJUNCTIVE, *CSSM_DB_CONJUNCTIVE_PTR;
enum {
    CSSM_DB_NONE = 0,
    CSSM_DB_AND = 1,
    CSSM_DB_OR = 2
};

typedef struct cssm_selection_predicate {
    CSSM_DB_OPERATOR DbOperator;
    CSSM_DB_ATTRIBUTE_DATA Attribute;
} CSSM_SELECTION_PREDICATE, *CSSM_SELECTION_PREDICATE_PTR;

enum {
 CSSM_QUERY_TIMELIMIT_NONE = 0
};

enum {
 CSSM_QUERY_SIZELIMIT_NONE = 0
};

typedef struct cssm_query_limits {
    uint32 TimeLimit;
    uint32 SizeLimit;
} CSSM_QUERY_LIMITS, *CSSM_QUERY_LIMITS_PTR;

typedef uint32 CSSM_QUERY_FLAGS;
enum {
 CSSM_QUERY_RETURN_DATA = 0x01
};

typedef struct cssm_query {
    CSSM_DB_RECORDTYPE RecordType;
    CSSM_DB_CONJUNCTIVE Conjunctive;
    uint32 NumSelectionPredicates;
    CSSM_SELECTION_PREDICATE_PTR SelectionPredicate;
    CSSM_QUERY_LIMITS QueryLimits;
    CSSM_QUERY_FLAGS QueryFlags;
} CSSM_QUERY, *CSSM_QUERY_PTR;

typedef uint32 CSSM_DLTYPE, *CSSM_DLTYPE_PTR;
enum {
    CSSM_DL_UNKNOWN = 0,
    CSSM_DL_CUSTOM = 1,
    CSSM_DL_LDAP = 2,
    CSSM_DL_ODBC = 3,
    CSSM_DL_PKCS11 = 4,
    CSSM_DL_FFS = 5,
    CSSM_DL_MEMORY = 6,
    CSSM_DL_REMOTEDIR = 7
};

typedef void *CSSM_DL_CUSTOM_ATTRIBUTES;
typedef void *CSSM_DL_LDAP_ATTRIBUTES;
typedef void *CSSM_DL_ODBC_ATTRIBUTES;
typedef void *CSSM_DL_FFS_ATTRIBUTES;

typedef struct cssm_dl_pkcs11_attributes {
    uint32 DeviceAccessFlags;
} *CSSM_DL_PKCS11_ATTRIBUTE, *CSSM_DL_PKCS11_ATTRIBUTE_PTR;

enum {
 CSSM_DB_DATASTORES_UNKNOWN = 0xFFFFFFFF
};

typedef struct cssm_name_list {
    uint32 NumStrings;
    char **String;
} CSSM_NAME_LIST, *CSSM_NAME_LIST_PTR;

typedef uint32 CSSM_DB_RETRIEVAL_MODES;
enum {
 CSSM_DB_TRANSACTIONAL_MODE = 0,
 CSSM_DB_FILESYSTEMSCAN_MODE = 1
};

typedef struct cssm_db_schema_attribute_info {
    uint32 AttributeId;
    char *AttributeName;
    CSSM_OID AttributeNameID;
    CSSM_DB_ATTRIBUTE_FORMAT DataType;
} CSSM_DB_SCHEMA_ATTRIBUTE_INFO, *CSSM_DB_SCHEMA_ATTRIBUTE_INFO_PTR;

typedef struct cssm_db_schema_index_info {
    uint32 AttributeId;
    uint32 IndexId;
    CSSM_DB_INDEX_TYPE IndexType;
    CSSM_DB_INDEXED_DATA_LOCATION IndexedDataLocation;
} CSSM_DB_SCHEMA_INDEX_INFO, *CSSM_DB_SCHEMA_INDEX_INFO_PTR;


}
# 31 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/x509defs.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/x509defs.h" 3
extern "C" {


typedef uint8 CSSM_BER_TAG;
# 70 "/System/Library/Frameworks/Security.framework/Headers/x509defs.h" 3
typedef struct cssm_x509_algorithm_identifier {
    CSSM_OID algorithm;
    CSSM_DATA parameters;
} CSSM_X509_ALGORITHM_IDENTIFIER, *CSSM_X509_ALGORITHM_IDENTIFIER_PTR;


typedef struct cssm_x509_type_value_pair {
    CSSM_OID type;
    CSSM_BER_TAG valueType;

    CSSM_DATA value;
} CSSM_X509_TYPE_VALUE_PAIR, *CSSM_X509_TYPE_VALUE_PAIR_PTR;

typedef struct cssm_x509_rdn {
    uint32 numberOfPairs;
    CSSM_X509_TYPE_VALUE_PAIR_PTR AttributeTypeAndValue;
} CSSM_X509_RDN, *CSSM_X509_RDN_PTR;

typedef struct cssm_x509_name {
    uint32 numberOfRDNs;
    CSSM_X509_RDN_PTR RelativeDistinguishedName;
} CSSM_X509_NAME, *CSSM_X509_NAME_PTR;


typedef struct cssm_x509_subject_public_key_info {
    CSSM_X509_ALGORITHM_IDENTIFIER algorithm;
    CSSM_DATA subjectPublicKey;
} CSSM_X509_SUBJECT_PUBLIC_KEY_INFO, *CSSM_X509_SUBJECT_PUBLIC_KEY_INFO_PTR;

typedef struct cssm_x509_time {
    CSSM_BER_TAG timeType;
    CSSM_DATA time;
} CSSM_X509_TIME, *CSSM_X509_TIME_PTR;


typedef struct x509_validity {
    CSSM_X509_TIME notBefore;
    CSSM_X509_TIME notAfter;
} CSSM_X509_VALIDITY, *CSSM_X509_VALIDITY_PTR;



typedef CSSM_BOOL CSSM_X509_OPTION;

typedef struct cssm_x509ext_basicConstraints {
    CSSM_BOOL cA;
    CSSM_X509_OPTION pathLenConstraintPresent;
    uint32 pathLenConstraint;
} CSSM_X509EXT_BASICCONSTRAINTS, *CSSM_X509EXT_BASICCONSTRAINTS_PTR;

typedef enum extension_data_format {
    CSSM_X509_DATAFORMAT_ENCODED = 0,
    CSSM_X509_DATAFORMAT_PARSED,
    CSSM_X509_DATAFORMAT_PAIR
} CSSM_X509EXT_DATA_FORMAT;

typedef struct cssm_x509_extensionTagAndValue {
    CSSM_BER_TAG type;
    CSSM_DATA value;
} CSSM_X509EXT_TAGandVALUE, *CSSM_X509EXT_TAGandVALUE_PTR;

typedef struct cssm_x509ext_pair {
    CSSM_X509EXT_TAGandVALUE tagAndValue;
    void *parsedValue;
} CSSM_X509EXT_PAIR, *CSSM_X509EXT_PAIR_PTR;


typedef struct cssm_x509_extension {
    CSSM_OID extnId;
    CSSM_BOOL critical;
    CSSM_X509EXT_DATA_FORMAT format;
    union cssm_x509ext_value {
        CSSM_X509EXT_TAGandVALUE *tagAndValue;
        void *parsedValue;
        CSSM_X509EXT_PAIR *valuePair;
    } value;
    CSSM_DATA BERvalue;
} CSSM_X509_EXTENSION, *CSSM_X509_EXTENSION_PTR;

typedef struct cssm_x509_extensions {
    uint32 numberOfExtensions;
    CSSM_X509_EXTENSION_PTR extensions;
} CSSM_X509_EXTENSIONS, *CSSM_X509_EXTENSIONS_PTR;


typedef struct cssm_x509_tbs_certificate {
    CSSM_DATA version;
    CSSM_DATA serialNumber;
    CSSM_X509_ALGORITHM_IDENTIFIER signature;
    CSSM_X509_NAME issuer;
    CSSM_X509_VALIDITY validity;
    CSSM_X509_NAME subject;
    CSSM_X509_SUBJECT_PUBLIC_KEY_INFO subjectPublicKeyInfo;
    CSSM_DATA issuerUniqueIdentifier;
    CSSM_DATA subjectUniqueIdentifier;
    CSSM_X509_EXTENSIONS extensions;
} CSSM_X509_TBS_CERTIFICATE, *CSSM_X509_TBS_CERTIFICATE_PTR;


typedef struct cssm_x509_signature {
    CSSM_X509_ALGORITHM_IDENTIFIER algorithmIdentifier;
    CSSM_DATA encrypted;
} CSSM_X509_SIGNATURE, *CSSM_X509_SIGNATURE_PTR;


typedef struct cssm_x509_signed_certificate {
    CSSM_X509_TBS_CERTIFICATE certificate;
    CSSM_X509_SIGNATURE signature;
} CSSM_X509_SIGNED_CERTIFICATE, *CSSM_X509_SIGNED_CERTIFICATE_PTR;

typedef struct cssm_x509ext_policyQualifierInfo {
    CSSM_OID policyQualifierId;
    CSSM_DATA value;
} CSSM_X509EXT_POLICYQUALIFIERINFO, *CSSM_X509EXT_POLICYQUALIFIERINFO_PTR;

typedef struct cssm_x509ext_policyQualifiers {
    uint32 numberOfPolicyQualifiers;
    CSSM_X509EXT_POLICYQUALIFIERINFO *policyQualifier;
} CSSM_X509EXT_POLICYQUALIFIERS, *CSSM_X509EXT_POLICYQUALIFIERS_PTR;

typedef struct cssm_x509ext_policyInfo {
    CSSM_OID policyIdentifier;
    CSSM_X509EXT_POLICYQUALIFIERS policyQualifiers;
} CSSM_X509EXT_POLICYINFO, *CSSM_X509EXT_POLICYINFO_PTR;





typedef struct cssm_x509_revoked_cert_entry {
    CSSM_DATA certificateSerialNumber;
    CSSM_X509_TIME revocationDate;
    CSSM_X509_EXTENSIONS extensions;
} CSSM_X509_REVOKED_CERT_ENTRY, *CSSM_X509_REVOKED_CERT_ENTRY_PTR;

typedef struct cssm_x509_revoked_cert_list {
    uint32 numberOfRevokedCertEntries;
    CSSM_X509_REVOKED_CERT_ENTRY_PTR revokedCertEntry;
} CSSM_X509_REVOKED_CERT_LIST, *CSSM_X509_REVOKED_CERT_LIST_PTR;


typedef struct cssm_x509_tbs_certlist {
    CSSM_DATA version;
    CSSM_X509_ALGORITHM_IDENTIFIER signature;
    CSSM_X509_NAME issuer;
    CSSM_X509_TIME thisUpdate;
    CSSM_X509_TIME nextUpdate;
    CSSM_X509_REVOKED_CERT_LIST_PTR revokedCertificates;
    CSSM_X509_EXTENSIONS extensions;
} CSSM_X509_TBS_CERTLIST, *CSSM_X509_TBS_CERTLIST_PTR;

typedef struct cssm_x509_signed_crl {
    CSSM_X509_TBS_CERTLIST tbsCertList;
    CSSM_X509_SIGNATURE signature;
} CSSM_X509_SIGNED_CRL, *CSSM_X509_SIGNED_CRL_PTR;


}
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 1 3
# 80 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef enum {
 GNT_OtherName = 0,
 GNT_RFC822Name,
 GNT_DNSName,
 GNT_X400Address,
 GNT_DirectoryName,
 GNT_EdiPartyName,
 GNT_URI,
 GNT_IPAddress,
 GNT_RegisteredID
} CE_GeneralNameType;

typedef struct {
 CSSM_OID typeId;
 CSSM_DATA value;
} CE_OtherName;

typedef struct {
 CE_GeneralNameType nameType;
 CSSM_BOOL berEncoded;
 CSSM_DATA name;
} CE_GeneralName;

typedef struct {
 uint32 numNames;
 CE_GeneralName *generalName;
} CE_GeneralNames;
# 120 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 CSSM_BOOL keyIdentifierPresent;
 CSSM_DATA keyIdentifier;
 CSSM_BOOL generalNamesPresent;
 CE_GeneralNames *generalNames;
 CSSM_BOOL serialNumberPresent;
 CSSM_DATA serialNumber;
} CE_AuthorityKeyID;







typedef CSSM_DATA CE_SubjectKeyID;
# 154 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef uint16 CE_KeyUsage;
# 184 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef uint32 CE_CrlReason;
# 214 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 uint32 numPurposes;
 CSSM_OID_PTR purposes;
} CE_ExtendedKeyUsage;
# 228 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 CSSM_BOOL cA;
 CSSM_BOOL pathLenConstraintPresent;
 uint32 pathLenConstraint;
} CE_BasicConstraints;
# 285 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 CSSM_OID policyQualifierId;
 CSSM_DATA qualifier;

} CE_PolicyQualifierInfo;

typedef struct {
 CSSM_OID certPolicyId;
 uint32 numPolicyQualifiers;
 CE_PolicyQualifierInfo *policyQualifiers;
} CE_PolicyInformation;

typedef struct {
 uint32 numPolicies;
 CE_PolicyInformation *policies;
} CE_CertPolicies;
# 309 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef uint16 CE_NetscapeCertType;
# 351 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef uint8 CE_CrlDistReasonFlags;
# 361 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef enum {
 CE_CDNT_FullName,
 CE_CDNT_NameRelativeToCrlIssuer
} CE_CrlDistributionPointNameType;

typedef struct {
 CE_CrlDistributionPointNameType nameType;
 union {
  CE_GeneralNames *fullName;
  CSSM_X509_RDN_PTR rdn;
 } dpn;
} CE_DistributionPointName;





typedef struct {
 CE_DistributionPointName *distPointName;
 CSSM_BOOL reasonsPresent;
 CE_CrlDistReasonFlags reasons;
 CE_GeneralNames *crlIssuer;
} CE_CRLDistributionPoint;

typedef struct {
 uint32 numDistPoints;
 CE_CRLDistributionPoint *distPoints;
} CE_CRLDistPointsSyntax;
# 403 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 CSSM_OID accessMethod;
 CE_GeneralName accessLocation;
} CE_AccessDescription;

typedef struct {
 uint32 numAccessDescriptions;
 CE_AccessDescription *accessDescriptions;
} CE_AuthorityInfoAccess;
# 420 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef CE_GeneralNames CE_NameRegistrationAuthorities;






typedef struct {
 CSSM_OID *semanticsIdentifier;
 CE_NameRegistrationAuthorities *nameRegistrationAuthorities;
} CE_SemanticsInformation;
# 441 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 CSSM_OID statementId;
 CE_SemanticsInformation *semanticsInfo;
 CSSM_DATA *otherInfo;
} CE_QC_Statement;




typedef struct {
 uint32 numQCStatements;
 CE_QC_Statement *qcStatements;
} CE_QC_Statements;
# 462 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef uint32 CE_CrlNumber;






typedef uint32 CE_DeltaCrl;
# 485 "/System/Library/Frameworks/Security.framework/Headers/certextensions.h" 3
typedef struct {
 CE_DistributionPointName *distPointName;
 CSSM_BOOL onlyUserCertsPresent;
 CSSM_BOOL onlyUserCerts;
 CSSM_BOOL onlyCACertsPresent;
 CSSM_BOOL onlyCACerts;
 CSSM_BOOL onlySomeReasonsPresent;
 CE_CrlDistReasonFlags onlySomeReasons;
 CSSM_BOOL indirectCrlPresent;
 CSSM_BOOL indirectCrl;
} CE_IssuingDistributionPoint;





typedef enum {
 DT_AuthorityKeyID,
 DT_SubjectKeyID,
 DT_KeyUsage,
 DT_SubjectAltName,
 DT_IssuerAltName,
 DT_ExtendedKeyUsage,
 DT_BasicConstraints,
 DT_CertPolicies,
 DT_NetscapeCertType,
 DT_CrlNumber,
 DT_DeltaCrl,
 DT_CrlReason,
 DT_CrlDistributionPoints,
 DT_IssuingDistributionPoint,
 DT_AuthorityInfoAccess,
 DT_Other,
 DT_QC_Statements
} CE_DataType;




typedef union {
 CE_AuthorityKeyID authorityKeyID;
 CE_SubjectKeyID subjectKeyID;
 CE_KeyUsage keyUsage;
 CE_GeneralNames subjectAltName;
 CE_GeneralNames issuerAltName;
 CE_ExtendedKeyUsage extendedKeyUsage;
 CE_BasicConstraints basicConstraints;
 CE_CertPolicies certPolicies;
 CE_NetscapeCertType netscapeCertType;
 CE_CrlNumber crlNumber;
 CE_DeltaCrl deltaCrl;
 CE_CrlReason crlReason;
 CE_CRLDistPointsSyntax crlDistPoints;
 CE_IssuingDistributionPoint issuingDistPoint;
 CE_AuthorityInfoAccess authorityInfoAccess;
 CE_QC_Statements qualifiedCertStatements;
 CSSM_DATA rawData;
} CE_Data;

typedef struct {
 CE_DataType type;
 CE_Data extension;
 CSSM_BOOL critical;
} CE_DataAndType;
# 33 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 2 3




extern "C" {





extern const CSSM_GUID gGuidCssm;


extern const CSSM_GUID gGuidAppleFileDL;


extern const CSSM_GUID gGuidAppleCSP;


extern const CSSM_GUID gGuidAppleCSPDL;


extern const CSSM_GUID gGuidAppleX509CL;


extern const CSSM_GUID gGuidAppleX509TP;


extern const CSSM_GUID gGuidAppleLDAPDL;


extern const CSSM_GUID gGuidAppleDotMacTP;


extern const CSSM_GUID gGuidAppleSdCSPDL;


extern const CSSM_GUID gGuidAppleDotMacDL;



enum
{
 CSSM_WORDID_KEYCHAIN_PROMPT = CSSM_WORDID_VENDOR_START,
    CSSM_WORDID_KEYCHAIN_LOCK,
    CSSM_WORDID_KEYCHAIN_CHANGE_LOCK,
 CSSM_WORDID_PROCESS,
 CSSM_WORDID__RESERVED_1,
 CSSM_WORDID_SYMMETRIC_KEY,
 CSSM_WORDID_SYSTEM,
 CSSM_WORDID_KEY,
 CSSM_WORDID_PIN,
 CSSM_WORDID_PREAUTH,
 CSSM_WORDID_PREAUTH_SOURCE,
 CSSM_WORDID__FIRST_UNUSED
};


enum
{
 CSSM_ACL_SUBJECT_TYPE_KEYCHAIN_PROMPT = CSSM_WORDID_KEYCHAIN_PROMPT,
 CSSM_ACL_SUBJECT_TYPE_PROCESS = CSSM_WORDID_PROCESS,
 CSSM_ACL_SUBJECT_TYPE_CODE_SIGNATURE = CSSM_WORDID_SIGNATURE,
 CSSM_ACL_SUBJECT_TYPE_COMMENT = CSSM_WORDID_COMMENT,
 CSSM_ACL_SUBJECT_TYPE_SYMMETRIC_KEY = CSSM_WORDID_SYMMETRIC_KEY,
 CSSM_ACL_SUBJECT_TYPE_PREAUTH = CSSM_WORDID_PREAUTH,
 CSSM_ACL_SUBJECT_TYPE_PREAUTH_SOURCE = CSSM_WORDID_PREAUTH_SOURCE
};

enum
{
 CSSM_SAMPLE_TYPE_KEYCHAIN_PROMPT = CSSM_WORDID_KEYCHAIN_PROMPT,
    CSSM_SAMPLE_TYPE_KEYCHAIN_LOCK = CSSM_WORDID_KEYCHAIN_LOCK,
    CSSM_SAMPLE_TYPE_KEYCHAIN_CHANGE_LOCK = CSSM_WORDID_KEYCHAIN_CHANGE_LOCK,
 CSSM_SAMPLE_TYPE_PROCESS = CSSM_WORDID_PROCESS,
 CSSM_SAMPLE_TYPE_COMMENT = CSSM_WORDID_COMMENT,
 CSSM_SAMPLE_TYPE_RETRY_ID = CSSM_WORDID_PROPAGATE,
 CSSM_SAMPLE_TYPE_SYMMETRIC_KEY = CSSM_WORDID_SYMMETRIC_KEY,
 CSSM_SAMPLE_TYPE_PREAUTH = CSSM_WORDID_PREAUTH

};



enum {
 CSSM_ACL_AUTHORIZATION_CHANGE_ACL = CSSM_ACL_AUTHORIZATION_TAG_VENDOR_DEFINED_START,
 CSSM_ACL_AUTHORIZATION_CHANGE_OWNER,


 CSSM_ACL_AUTHORIZATION_PREAUTH_BASE =
  CSSM_ACL_AUTHORIZATION_TAG_VENDOR_DEFINED_START + 0x1000000,
 CSSM_ACL_AUTHORIZATION_PREAUTH_END = CSSM_ACL_AUTHORIZATION_PREAUTH_BASE + 0x10000
};
# 139 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
enum {
    CSSM_ACL_CODE_SIGNATURE_INVALID = 0,
    CSSM_ACL_CODE_SIGNATURE_OSX = 1
};



enum {
    CSSM_ACL_MATCH_UID = 0x01,
    CSSM_ACL_MATCH_GID = 0x02,
    CSSM_ACL_MATCH_HONOR_ROOT = 0x100,
    CSSM_ACL_MATCH_BITS = CSSM_ACL_MATCH_UID | CSSM_ACL_MATCH_GID
};

enum {
    CSSM_ACL_PROCESS_SELECTOR_CURRENT_VERSION = 0x101
};

typedef struct cssm_acl_process_subject_selector {
    uint16 version;
    uint16 mask;
    uint32 uid;
    uint32 gid;
} CSSM_ACL_PROCESS_SUBJECT_SELECTOR;



enum {
 CSSM_ACL_KEYCHAIN_PROMPT_CURRENT_VERSION = 0x101
};

enum {
 CSSM_ACL_KEYCHAIN_PROMPT_REQUIRE_PASSPHRASE = 0x0001
};

typedef struct cssm_acl_keychain_prompt_selector {
 uint16 version;
 uint16 flags;
} CSSM_ACL_KEYCHAIN_PROMPT_SELECTOR;


typedef uint32 CSSM_ACL_PREAUTH_TRACKING_STATE;
enum {
 CSSM_ACL_PREAUTH_TRACKING_COUNT_MASK = 0xff,
 CSSM_ACL_PREAUTH_TRACKING_BLOCKED = 0,



 CSSM_ACL_PREAUTH_TRACKING_UNKNOWN = 0x40000000,
 CSSM_ACL_PREAUTH_TRACKING_AUTHORIZED = 0x80000000
};



enum {
 CSSM_DB_ACCESS_RESET = 0x10000
};



enum
{
    CSSM_ALGID_APPLE_YARROW = CSSM_ALGID_VENDOR_DEFINED,
 CSSM_ALGID_AES,
 CSSM_ALGID_FEE,
 CSSM_ALGID_FEE_MD5,
 CSSM_ALGID_FEE_SHA1,
 CSSM_ALGID_FEED,
 CSSM_ALGID_FEEDEXP,
 CSSM_ALGID_ASC,
 CSSM_ALGID_SHA1HMAC_LEGACY,
 CSSM_ALGID_KEYCHAIN_KEY,
 CSSM_ALGID_PKCS12_PBE_ENCR,
 CSSM_ALGID_PKCS12_PBE_MAC,
 CSSM_ALGID_SECURE_PASSPHRASE,
 CSSM_ALGID_PBE_OPENSSL_MD5,
 CSSM_ALGID_SHA256,
 CSSM_ALGID_SHA384,
 CSSM_ALGID_SHA512,
 CSSM_ALGID_ENTROPY_DEFAULT,
 CSSM_ALGID_SHA224,
 CSSM_ALGID_SHA224WithRSA,
 CSSM_ALGID_SHA256WithRSA,
 CSSM_ALGID_SHA384WithRSA,
 CSSM_ALGID_SHA512WithRSA,
 CSSM_ALGID_OPENSSH1,
    CSSM_ALGID__FIRST_UNUSED
};


enum
{

    CSSM_PADDING_APPLE_SSLv2 = CSSM_PADDING_VENDOR_DEFINED
};



enum {
 CSSM_KEYBLOB_RAW_FORMAT_VENDOR_DEFINED = 0x80000000
};
enum {

 CSSM_KEYBLOB_RAW_FORMAT_X509 = CSSM_KEYBLOB_RAW_FORMAT_VENDOR_DEFINED,

 CSSM_KEYBLOB_RAW_FORMAT_OPENSSH,

 CSSM_KEYBLOB_RAW_FORMAT_OPENSSL,

 CSSM_KEYBLOB_RAW_FORMAT_OPENSSH2
};


enum
{
    CSSM_CUSTOM_COMMON_ERROR_EXTENT = 0x00e0,

    CSSM_ERRCODE_NO_USER_INTERACTION = 0x00e0,
    CSSM_ERRCODE_USER_CANCELED = 0x00e1,
 CSSM_ERRCODE_SERVICE_NOT_AVAILABLE = 0x00e2,
 CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION = 0x00e3,
 CSSM_ERRCODE_DEVICE_RESET = 0x00e4,
 CSSM_ERRCODE_DEVICE_FAILED = 0x00e5
};

enum {
 CSSMERR_CSSM_NO_USER_INTERACTION = CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_NO_USER_INTERACTION,
 CSSMERR_AC_NO_USER_INTERACTION = CSSM_AC_BASE_ERROR + CSSM_ERRCODE_NO_USER_INTERACTION,
 CSSMERR_CSP_NO_USER_INTERACTION = CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_NO_USER_INTERACTION,
 CSSMERR_CL_NO_USER_INTERACTION = CSSM_CL_BASE_ERROR + CSSM_ERRCODE_NO_USER_INTERACTION,
 CSSMERR_DL_NO_USER_INTERACTION = CSSM_DL_BASE_ERROR + CSSM_ERRCODE_NO_USER_INTERACTION,
 CSSMERR_TP_NO_USER_INTERACTION = CSSM_TP_BASE_ERROR + CSSM_ERRCODE_NO_USER_INTERACTION,

 CSSMERR_CSSM_USER_CANCELED = CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_USER_CANCELED,
 CSSMERR_AC_USER_CANCELED = CSSM_AC_BASE_ERROR + CSSM_ERRCODE_USER_CANCELED,
 CSSMERR_CSP_USER_CANCELED = CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_USER_CANCELED,
 CSSMERR_CL_USER_CANCELED = CSSM_CL_BASE_ERROR + CSSM_ERRCODE_USER_CANCELED,
 CSSMERR_DL_USER_CANCELED = CSSM_DL_BASE_ERROR + CSSM_ERRCODE_USER_CANCELED,
 CSSMERR_TP_USER_CANCELED = CSSM_TP_BASE_ERROR + CSSM_ERRCODE_USER_CANCELED,

 CSSMERR_CSSM_SERVICE_NOT_AVAILABLE = CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_SERVICE_NOT_AVAILABLE,
 CSSMERR_AC_SERVICE_NOT_AVAILABLE = CSSM_AC_BASE_ERROR + CSSM_ERRCODE_SERVICE_NOT_AVAILABLE,
 CSSMERR_CSP_SERVICE_NOT_AVAILABLE = CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_SERVICE_NOT_AVAILABLE,
 CSSMERR_CL_SERVICE_NOT_AVAILABLE = CSSM_CL_BASE_ERROR + CSSM_ERRCODE_SERVICE_NOT_AVAILABLE,
 CSSMERR_DL_SERVICE_NOT_AVAILABLE = CSSM_DL_BASE_ERROR + CSSM_ERRCODE_SERVICE_NOT_AVAILABLE,
 CSSMERR_TP_SERVICE_NOT_AVAILABLE = CSSM_TP_BASE_ERROR + CSSM_ERRCODE_SERVICE_NOT_AVAILABLE,

 CSSMERR_CSSM_INSUFFICIENT_CLIENT_IDENTIFICATION = CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION,
 CSSMERR_AC_INSUFFICIENT_CLIENT_IDENTIFICATION = CSSM_AC_BASE_ERROR + CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION,
 CSSMERR_CSP_INSUFFICIENT_CLIENT_IDENTIFICATION = CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION,
 CSSMERR_CL_INSUFFICIENT_CLIENT_IDENTIFICATION = CSSM_CL_BASE_ERROR + CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION,
 CSSMERR_DL_INSUFFICIENT_CLIENT_IDENTIFICATION = CSSM_DL_BASE_ERROR + CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION,
 CSSMERR_TP_INSUFFICIENT_CLIENT_IDENTIFICATION = CSSM_TP_BASE_ERROR + CSSM_ERRCODE_INSUFFICIENT_CLIENT_IDENTIFICATION,

 CSSMERR_CSSM_DEVICE_RESET = CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_DEVICE_RESET,
 CSSMERR_AC_DEVICE_RESET = CSSM_AC_BASE_ERROR + CSSM_ERRCODE_DEVICE_RESET,
 CSSMERR_CSP_DEVICE_RESET = CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_DEVICE_RESET,
 CSSMERR_CL_DEVICE_RESET = CSSM_CL_BASE_ERROR + CSSM_ERRCODE_DEVICE_RESET,
 CSSMERR_DL_DEVICE_RESET = CSSM_DL_BASE_ERROR + CSSM_ERRCODE_DEVICE_RESET,
 CSSMERR_TP_DEVICE_RESET = CSSM_TP_BASE_ERROR + CSSM_ERRCODE_DEVICE_RESET,

 CSSMERR_CSSM_DEVICE_FAILED = CSSM_CSSM_BASE_ERROR + CSSM_ERRCODE_DEVICE_FAILED,
 CSSMERR_AC_DEVICE_FAILED = CSSM_AC_BASE_ERROR + CSSM_ERRCODE_DEVICE_FAILED,
 CSSMERR_CSP_DEVICE_FAILED = CSSM_CSP_BASE_ERROR + CSSM_ERRCODE_DEVICE_FAILED,
 CSSMERR_CL_DEVICE_FAILED = CSSM_CL_BASE_ERROR + CSSM_ERRCODE_DEVICE_FAILED,
 CSSMERR_DL_DEVICE_FAILED = CSSM_DL_BASE_ERROR + CSSM_ERRCODE_DEVICE_FAILED,
 CSSMERR_TP_DEVICE_FAILED = CSSM_TP_BASE_ERROR + CSSM_ERRCODE_DEVICE_FAILED
};


enum {
 CSSMERR_CSP_APPLE_ADD_APPLICATION_ACL_SUBJECT = CSSM_CSP_PRIVATE_ERROR + 0,




 CSSMERR_CSP_APPLE_PUBLIC_KEY_INCOMPLETE = CSSM_CSP_PRIVATE_ERROR + 1,


 CSSMERR_CSP_APPLE_SIGNATURE_MISMATCH = CSSM_CSP_PRIVATE_ERROR + 2,


 CSSMERR_CSP_APPLE_INVALID_KEY_START_DATE = CSSM_CSP_PRIVATE_ERROR + 3,
 CSSMERR_CSP_APPLE_INVALID_KEY_END_DATE = CSSM_CSP_PRIVATE_ERROR + 4,


 CSSMERR_CSPDL_APPLE_DL_CONVERSION_ERROR = CSSM_CSP_PRIVATE_ERROR + 5,


 CSSMERR_CSP_APPLE_SSLv2_ROLLBACK = CSSM_CSP_PRIVATE_ERROR + 6
};



enum
{
    CSSM_DL_DB_RECORD_GENERIC_PASSWORD = CSSM_DB_RECORDTYPE_APP_DEFINED_START + 0,
    CSSM_DL_DB_RECORD_INTERNET_PASSWORD = CSSM_DB_RECORDTYPE_APP_DEFINED_START + 1,
    CSSM_DL_DB_RECORD_APPLESHARE_PASSWORD = CSSM_DB_RECORDTYPE_APP_DEFINED_START + 2,

    CSSM_DL_DB_RECORD_X509_CERTIFICATE = CSSM_DB_RECORDTYPE_APP_DEFINED_START + 0x1000,
 CSSM_DL_DB_RECORD_USER_TRUST,
 CSSM_DL_DB_RECORD_X509_CRL,
 CSSM_DL_DB_RECORD_UNLOCK_REFERRAL,
 CSSM_DL_DB_RECORD_EXTENDED_ATTRIBUTE,
    CSSM_DL_DB_RECORD_METADATA = CSSM_DB_RECORDTYPE_APP_DEFINED_START + 0x8000
};


enum {



 CSSM_APPLEFILEDL_TOGGLE_AUTOCOMMIT,


 CSSM_APPLEFILEDL_COMMIT,


 CSSM_APPLEFILEDL_ROLLBACK
};


enum {
 CSSM_APPLE_UNLOCK_TYPE_KEY_DIRECT = 1,
 CSSM_APPLE_UNLOCK_TYPE_WRAPPED_PRIVATE = 2
};


enum
{



 CSSMERR_APPLEDL_INVALID_OPEN_PARAMETERS = CSSM_DL_PRIVATE_ERROR + 0,


 CSSMERR_APPLEDL_DISK_FULL = CSSM_DL_PRIVATE_ERROR + 1,


 CSSMERR_APPLEDL_QUOTA_EXCEEDED = CSSM_DL_PRIVATE_ERROR + 2,


 CSSMERR_APPLEDL_FILE_TOO_BIG = CSSM_DL_PRIVATE_ERROR + 3,


    CSSMERR_APPLEDL_INVALID_DATABASE_BLOB = CSSM_DL_PRIVATE_ERROR + 4,
    CSSMERR_APPLEDL_INVALID_KEY_BLOB = CSSM_DL_PRIVATE_ERROR + 5,


    CSSMERR_APPLEDL_INCOMPATIBLE_DATABASE_BLOB = CSSM_DL_PRIVATE_ERROR + 6,
    CSSMERR_APPLEDL_INCOMPATIBLE_KEY_BLOB = CSSM_DL_PRIVATE_ERROR + 7,
};


enum
{

 CSSMERR_APPLETP_HOSTNAME_MISMATCH = CSSM_TP_PRIVATE_ERROR + 0,

 CSSMERR_APPLETP_UNKNOWN_CRITICAL_EXTEN = CSSM_TP_PRIVATE_ERROR + 1,

 CSSMERR_APPLETP_NO_BASIC_CONSTRAINTS = CSSM_TP_PRIVATE_ERROR + 2,

 CSSMERR_APPLETP_INVALID_CA = CSSM_TP_PRIVATE_ERROR + 3,

 CSSMERR_APPLETP_INVALID_AUTHORITY_ID = CSSM_TP_PRIVATE_ERROR + 4,

 CSSMERR_APPLETP_INVALID_SUBJECT_ID = CSSM_TP_PRIVATE_ERROR + 5,

 CSSMERR_APPLETP_INVALID_KEY_USAGE = CSSM_TP_PRIVATE_ERROR + 6,

 CSSMERR_APPLETP_INVALID_EXTENDED_KEY_USAGE = CSSM_TP_PRIVATE_ERROR + 7,

 CSSMERR_APPLETP_INVALID_ID_LINKAGE = CSSM_TP_PRIVATE_ERROR + 8,

 CSSMERR_APPLETP_PATH_LEN_CONSTRAINT = CSSM_TP_PRIVATE_ERROR + 9,

 CSSMERR_APPLETP_INVALID_ROOT = CSSM_TP_PRIVATE_ERROR + 10,

 CSSMERR_APPLETP_CRL_EXPIRED = CSSM_TP_PRIVATE_ERROR + 11,
 CSSMERR_APPLETP_CRL_NOT_VALID_YET = CSSM_TP_PRIVATE_ERROR + 12,

 CSSMERR_APPLETP_CRL_NOT_FOUND = CSSM_TP_PRIVATE_ERROR + 13,

 CSSMERR_APPLETP_CRL_SERVER_DOWN = CSSM_TP_PRIVATE_ERROR + 14,

 CSSMERR_APPLETP_CRL_BAD_URI = CSSM_TP_PRIVATE_ERROR + 15,

 CSSMERR_APPLETP_UNKNOWN_CERT_EXTEN = CSSM_TP_PRIVATE_ERROR + 16,
 CSSMERR_APPLETP_UNKNOWN_CRL_EXTEN = CSSM_TP_PRIVATE_ERROR + 17,

 CSSMERR_APPLETP_CRL_NOT_TRUSTED = CSSM_TP_PRIVATE_ERROR + 18,

 CSSMERR_APPLETP_CRL_INVALID_ANCHOR_CERT = CSSM_TP_PRIVATE_ERROR + 19,

 CSSMERR_APPLETP_CRL_POLICY_FAIL = CSSM_TP_PRIVATE_ERROR + 20,

 CSSMERR_APPLETP_IDP_FAIL = CSSM_TP_PRIVATE_ERROR + 21,

 CSSMERR_APPLETP_CERT_NOT_FOUND_FROM_ISSUER = CSSM_TP_PRIVATE_ERROR + 22,

 CSSMERR_APPLETP_BAD_CERT_FROM_ISSUER = CSSM_TP_PRIVATE_ERROR + 23,

 CSSMERR_APPLETP_SMIME_EMAIL_ADDRS_NOT_FOUND = CSSM_TP_PRIVATE_ERROR + 24,

 CSSMERR_APPLETP_SMIME_BAD_EXT_KEY_USE = CSSM_TP_PRIVATE_ERROR + 25,

 CSSMERR_APPLETP_SMIME_BAD_KEY_USE = CSSM_TP_PRIVATE_ERROR + 26,

 CSSMERR_APPLETP_SMIME_KEYUSAGE_NOT_CRITICAL = CSSM_TP_PRIVATE_ERROR + 27,


 CSSMERR_APPLETP_SMIME_NO_EMAIL_ADDRS = CSSM_TP_PRIVATE_ERROR + 28,


 CSSMERR_APPLETP_SMIME_SUBJ_ALT_NAME_NOT_CRIT = CSSM_TP_PRIVATE_ERROR + 29,

 CSSMERR_APPLETP_SSL_BAD_EXT_KEY_USE = CSSM_TP_PRIVATE_ERROR + 30,

 CSSMERR_APPLETP_OCSP_BAD_RESPONSE = CSSM_TP_PRIVATE_ERROR + 31,

 CSSMERR_APPLETP_OCSP_BAD_REQUEST = CSSM_TP_PRIVATE_ERROR + 32,

 CSSMERR_APPLETP_OCSP_UNAVAILABLE = CSSM_TP_PRIVATE_ERROR + 33,

 CSSMERR_APPLETP_OCSP_STATUS_UNRECOGNIZED = CSSM_TP_PRIVATE_ERROR + 34,

 CSSMERR_APPLETP_INCOMPLETE_REVOCATION_CHECK = CSSM_TP_PRIVATE_ERROR + 35,

 CSSMERR_APPLETP_NETWORK_FAILURE = CSSM_TP_PRIVATE_ERROR + 36,

 CSSMERR_APPLETP_OCSP_NOT_TRUSTED = CSSM_TP_PRIVATE_ERROR + 37,

 CSSMERR_APPLETP_OCSP_INVALID_ANCHOR_CERT = CSSM_TP_PRIVATE_ERROR + 38,

 CSSMERR_APPLETP_OCSP_SIG_ERROR = CSSM_TP_PRIVATE_ERROR + 39,

 CSSMERR_APPLETP_OCSP_NO_SIGNER = CSSM_TP_PRIVATE_ERROR + 40,

 CSSMERR_APPLETP_OCSP_RESP_MALFORMED_REQ = CSSM_TP_PRIVATE_ERROR + 41,

 CSSMERR_APPLETP_OCSP_RESP_INTERNAL_ERR = CSSM_TP_PRIVATE_ERROR + 42,

 CSSMERR_APPLETP_OCSP_RESP_TRY_LATER = CSSM_TP_PRIVATE_ERROR + 43,

 CSSMERR_APPLETP_OCSP_RESP_SIG_REQUIRED = CSSM_TP_PRIVATE_ERROR + 44,

 CSSMERR_APPLETP_OCSP_RESP_UNAUTHORIZED = CSSM_TP_PRIVATE_ERROR + 45,

 CSSMERR_APPLETP_OCSP_NONCE_MISMATCH = CSSM_TP_PRIVATE_ERROR + 46,

 CSSMERR_APPLETP_CS_BAD_CERT_CHAIN_LENGTH = CSSM_TP_PRIVATE_ERROR + 47,

 CSSMERR_APPLETP_CS_NO_BASIC_CONSTRAINTS = CSSM_TP_PRIVATE_ERROR + 48,

 CSSMERR_APPLETP_CS_BAD_PATH_LENGTH = CSSM_TP_PRIVATE_ERROR + 49,

 CSSMERR_APPLETP_CS_NO_EXTENDED_KEY_USAGE = CSSM_TP_PRIVATE_ERROR + 50,

 CSSMERR_APPLETP_CODE_SIGN_DEVELOPMENT = CSSM_TP_PRIVATE_ERROR + 51,

 CSSMERR_APPLETP_RS_BAD_CERT_CHAIN_LENGTH = CSSM_TP_PRIVATE_ERROR + 52,

 CSSMERR_APPLETP_RS_BAD_EXTENDED_KEY_USAGE = CSSM_TP_PRIVATE_ERROR + 53,

 CSSMERR_APPLETP_TRUST_SETTING_DENY = CSSM_TP_PRIVATE_ERROR + 54,

 CSSMERR_APPLETP_INVALID_EMPTY_SUBJECT = CSSM_TP_PRIVATE_ERROR + 55,

 CSSMERR_APPLETP_UNKNOWN_QUAL_CERT_STATEMENT = CSSM_TP_PRIVATE_ERROR + 56
};


enum
{

 CSSMERR_APPLE_DOTMAC_REQ_QUEUED = CSSM_TP_PRIVATE_ERROR + 100,

 CSSMERR_APPLE_DOTMAC_REQ_REDIRECT = CSSM_TP_PRIVATE_ERROR + 101,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_ERR = CSSM_TP_PRIVATE_ERROR + 102,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_PARAM = CSSM_TP_PRIVATE_ERROR + 103,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_AUTH = CSSM_TP_PRIVATE_ERROR + 104,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_UNIMPL = CSSM_TP_PRIVATE_ERROR + 105,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_NOT_AVAIL = CSSM_TP_PRIVATE_ERROR + 106,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_ALREADY_EXIST = CSSM_TP_PRIVATE_ERROR + 107,

 CSSMERR_APPLE_DOTMAC_REQ_SERVER_SERVICE_ERROR = CSSM_TP_PRIVATE_ERROR + 108,

 CSSMERR_APPLE_DOTMAC_REQ_IS_PENDING = CSSM_TP_PRIVATE_ERROR + 109,

 CSSMERR_APPLE_DOTMAC_NO_REQ_PENDING = CSSM_TP_PRIVATE_ERROR + 110
};

enum
{
 CSSM_APPLEDL_OPEN_PARAMETERS_VERSION = 1
};

enum cssm_appledl_open_parameters_mask
{
 kCSSM_APPLEDL_MASK_MODE = (1 << 0)
};





typedef struct cssm_appledl_open_parameters
{
 uint32 length;
 uint32 version;
# 565 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
 CSSM_BOOL autoCommit;


 uint32 mask;


 mode_t mode;
} CSSM_APPLEDL_OPEN_PARAMETERS, *CSSM_APPLEDL_OPEN_PARAMETERS_PTR;



enum
{


 CSSM_APPLECSPDL_DB_LOCK = 0,







 CSSM_APPLECSPDL_DB_UNLOCK = 1,
# 600 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
 CSSM_APPLECSPDL_DB_GET_SETTINGS = 2,







 CSSM_APPLECSPDL_DB_SET_SETTINGS = 3,
# 619 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
 CSSM_APPLECSPDL_DB_IS_LOCKED = 4,
# 635 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
 CSSM_APPLECSPDL_DB_CHANGE_PASSWORD =5,


 CSSM_APPLECSPDL_DB_GET_HANDLE = 6,


 CSSM_APPLESCPDL_CSP_GET_KEYHANDLE = 7,

 CSSM_APPLE_PRIVATE_CSPDL_CODE_8 = 8,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_9 = 9,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_10 = 10,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_11 = 11,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_12 = 12,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_13 = 13,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_14 = 14,
 CSSM_APPLE_PRIVATE_CSPDL_CODE_15 = 15,






 CSSM_APPLECSP_KEYDIGEST = 0x100
};




typedef struct cssm_applecspdl_db_settings_parameters
{
 uint32 idleTimeout;
 uint8 lockOnSleep;
} CSSM_APPLECSPDL_DB_SETTINGS_PARAMETERS, *CSSM_APPLECSPDL_DB_SETTINGS_PARAMETERS_PTR;


typedef struct cssm_applecspdl_db_is_locked_parameters
{
 uint8 isLocked;
} CSSM_APPLECSPDL_DB_IS_LOCKED_PARAMETERS, *CSSM_APPLECSPDL_DB_IS_LOCKED_PARAMETERS_PTR;


typedef struct cssm_applecspdl_db_change_password_parameters
{
 CSSM_ACCESS_CREDENTIALS *accessCredentials;
} CSSM_APPLECSPDL_DB_CHANGE_PASSWORD_PARAMETERS, *CSSM_APPLECSPDL_DB_CHANGE_PASSWORD_PARAMETERS_PTR;


enum {
 CSSM_KEYBLOB_WRAPPED_FORMAT_APPLE_CUSTOM = 100,
 CSSM_KEYBLOB_WRAPPED_FORMAT_OPENSSL,
 CSSM_KEYBLOB_WRAPPED_FORMAT_OPENSSH1
};




enum {
 CSSM_ATTRIBUTE_VENDOR_DEFINED = 0x800000
};

enum {



    CSSM_ATTRIBUTE_PUBLIC_KEY =
   (CSSM_ATTRIBUTE_DATA_KEY | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 0)),





 CSSM_ATTRIBUTE_FEE_PRIME_TYPE =
   (CSSM_ATTRIBUTE_DATA_UINT32 | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 1)),
 CSSM_ATTRIBUTE_FEE_CURVE_TYPE =
   (CSSM_ATTRIBUTE_DATA_UINT32 | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 2)),





 CSSM_ATTRIBUTE_ASC_OPTIMIZATION =
   (CSSM_ATTRIBUTE_DATA_UINT32 | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 3)),




 CSSM_ATTRIBUTE_RSA_BLINDING =
   (CSSM_ATTRIBUTE_DATA_UINT32 | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 4)),





 CSSM_ATTRIBUTE_PARAM_KEY =
   (CSSM_ATTRIBUTE_DATA_KEY | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 5)),





 CSSM_ATTRIBUTE_PROMPT =
   (CSSM_ATTRIBUTE_DATA_CSSM_DATA | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 6)),





 CSSM_ATTRIBUTE_ALERT_TITLE =
   (CSSM_ATTRIBUTE_DATA_CSSM_DATA | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 7)),






 CSSM_ATTRIBUTE_VERIFY_PASSPHRASE =
   (CSSM_ATTRIBUTE_DATA_UINT32 | (CSSM_ATTRIBUTE_VENDOR_DEFINED + 8))

};




enum {
 CSSM_FEE_PRIME_TYPE_DEFAULT = 0,
 CSSM_FEE_PRIME_TYPE_MERSENNE,
 CSSM_FEE_PRIME_TYPE_FEE,
 CSSM_FEE_PRIME_TYPE_GENERAL
};






enum {
 CSSM_FEE_CURVE_TYPE_DEFAULT = 0,
 CSSM_FEE_CURVE_TYPE_MONTGOMERY,
 CSSM_FEE_CURVE_TYPE_WEIERSTRASS
};




enum {
 CSSM_ASC_OPTIMIZE_DEFAULT = 0,
 CSSM_ASC_OPTIMIZE_SIZE,
 CSSM_ASC_OPTIMIZE_SECURITY,
 CSSM_ASC_OPTIMIZE_TIME,
 CSSM_ASC_OPTIMIZE_TIME_SIZE,
 CSSM_ASC_OPTIMIZE_ASCII,
};




enum {




 CSSM_KEYATTR_PARTIAL = 0x00010000,





 CSSM_KEYATTR_PUBLIC_KEY_ENCRYPT = 0x00020000
};




typedef struct {
 const char *string;
 const CSSM_OID *oid;
} CSSM_APPLE_TP_NAME_OID;







typedef struct {
 CSSM_CSP_HANDLE cspHand;
 CSSM_CL_HANDLE clHand;
 uint32 serialNumber;
 uint32 numSubjectNames;
 CSSM_APPLE_TP_NAME_OID *subjectNames;







 uint32 numIssuerNames;
 CSSM_APPLE_TP_NAME_OID *issuerNames;

 CSSM_X509_NAME_PTR issuerNameX509;
 const CSSM_KEY *certPublicKey;
 const CSSM_KEY *issuerPrivateKey;



 CSSM_ALGORITHMS signatureAlg;
 CSSM_OID signatureOid;
 uint32 notBefore;
 uint32 notAfter;
 uint32 numExtensions;
 CE_DataAndType *extensions;




 const char *challengeString;
} CSSM_APPLE_TP_CERT_REQUEST;
# 868 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
typedef struct {
 uint32 Version;







 uint32 ServerNameLen;
 const char *ServerName;


 uint32 Flags;
} CSSM_APPLE_TP_SSL_OPTIONS;
# 892 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
typedef uint32 CSSM_APPLE_TP_CRL_OPT_FLAGS;
enum {

 CSSM_TP_ACTION_REQUIRE_CRL_PER_CERT = 0x00000001,

 CSSM_TP_ACTION_FETCH_CRL_FROM_NET = 0x00000002,


 CSSM_TP_ACTION_CRL_SUFFICIENT = 0x00000004,

 CSSM_TP_ACTION_REQUIRE_CRL_IF_PRESENT = 0x00000008
};

typedef struct {
 uint32 Version;
 CSSM_APPLE_TP_CRL_OPT_FLAGS CrlFlags;







 CSSM_DL_DB_HANDLE_PTR crlStore;
} CSSM_APPLE_TP_CRL_OPTIONS;
# 925 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
typedef struct {
 uint32 Version;





 CE_KeyUsage IntendedUsage;
# 941 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
 uint32 SenderEmailLen;
 const char *SenderEmail;
} CSSM_APPLE_TP_SMIME_OPTIONS;







typedef uint32 CSSM_APPLE_TP_ACTION_FLAGS;
enum {
 CSSM_TP_ACTION_ALLOW_EXPIRED = 0x00000001,
 CSSM_TP_ACTION_LEAF_IS_CA = 0x00000002,
 CSSM_TP_ACTION_FETCH_CERT_FROM_NET = 0x00000004,
 CSSM_TP_ACTION_ALLOW_EXPIRED_ROOT = 0x00000008,
 CSSM_TP_ACTION_REQUIRE_REV_PER_CERT = 0x00000010,

 CSSM_TP_ACTION_TRUST_SETTINGS = 0x00000020,

 CSSM_TP_ACTION_IMPLICIT_ANCHORS = 0x00000040

};


typedef struct {
 uint32 Version;
 CSSM_APPLE_TP_ACTION_FLAGS ActionFlags;
} CSSM_APPLE_TP_ACTION_DATA;
# 978 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
typedef uint32 CSSM_TP_APPLE_CERT_STATUS;
enum
{
 CSSM_CERT_STATUS_EXPIRED = 0x00000001,
 CSSM_CERT_STATUS_NOT_VALID_YET = 0x00000002,
 CSSM_CERT_STATUS_IS_IN_INPUT_CERTS = 0x00000004,
 CSSM_CERT_STATUS_IS_IN_ANCHORS = 0x00000008,
 CSSM_CERT_STATUS_IS_ROOT = 0x00000010,
 CSSM_CERT_STATUS_IS_FROM_NET = 0x00000020,

 CSSM_CERT_STATUS_TRUST_SETTINGS_FOUND_USER = 0x00000040,

 CSSM_CERT_STATUS_TRUST_SETTINGS_FOUND_ADMIN = 0x00000080,

 CSSM_CERT_STATUS_TRUST_SETTINGS_FOUND_SYSTEM = 0x00000100,

 CSSM_CERT_STATUS_TRUST_SETTINGS_TRUST = 0x00000200,

 CSSM_CERT_STATUS_TRUST_SETTINGS_DENY = 0x00000400,

 CSSM_CERT_STATUS_TRUST_SETTINGS_IGNORED_ERROR = 0x00000800
};

typedef struct {
 CSSM_TP_APPLE_CERT_STATUS StatusBits;
 uint32 NumStatusCodes;
 CSSM_RETURN *StatusCodes;


 uint32 Index;


 CSSM_DL_DB_HANDLE DlDbHandle;
 CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord;
} CSSM_TP_APPLE_EVIDENCE_INFO;






typedef struct
{
 uint32 Version;
} CSSM_TP_APPLE_EVIDENCE_HEADER;
# 1039 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
enum
{
 CSSM_EVIDENCE_FORM_APPLE_HEADER = 0x80000000 + 0,
 CSSM_EVIDENCE_FORM_APPLE_CERTGROUP = 0x80000000 + 1,
 CSSM_EVIDENCE_FORM_APPLE_CERT_INFO = 0x80000000 + 2
};


enum {





 CSSM_APPLEX509CL_OBTAIN_CSR,







 CSSM_APPLEX509CL_VERIFY_CSR
};






typedef struct {
 CSSM_X509_NAME_PTR subjectNameX509;



 CSSM_ALGORITHMS signatureAlg;
 CSSM_OID signatureOid;

 CSSM_CSP_HANDLE cspHand;
 const CSSM_KEY *subjectPublicKey;
 const CSSM_KEY *subjectPrivateKey;




 const char *challengeString;
} CSSM_APPLE_CL_CSR_REQUEST;
# 1104 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
void cssmPerror(const char *how, CSSM_RETURN error);


bool cssmOidToAlg(const CSSM_OID *oid, CSSM_ALGORITHMS *alg);
const CSSM_OID *cssmAlgToOid(CSSM_ALGORITHMS algId);
# 1119 "/System/Library/Frameworks/Security.framework/Headers/cssmapple.h" 3
}
# 26 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/cssm.h" 1 3
# 30 "/System/Library/Frameworks/Security.framework/Headers/cssm.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/emmtype.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/emmtype.h" 3
extern "C" {




typedef uint32 CSSM_MANAGER_EVENT_TYPES;



typedef struct cssm_manager_event_notification {
    CSSM_SERVICE_MASK DestinationModuleManagerType;
    CSSM_SERVICE_MASK SourceModuleManagerType;
    CSSM_MANAGER_EVENT_TYPES Event;
    uint32 EventId;
    CSSM_DATA EventData;
} CSSM_MANAGER_EVENT_NOTIFICATION, *CSSM_MANAGER_EVENT_NOTIFICATION_PTR;


}
# 31 "/System/Library/Frameworks/Security.framework/Headers/cssm.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmapi.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmapi.h" 3
extern "C" {




CSSM_RETURN
CSSM_Init (const CSSM_VERSION *Version,
           CSSM_PRIVILEGE_SCOPE Scope,
           const CSSM_GUID *CallerGuid,
           CSSM_KEY_HIERARCHY KeyHierarchy,
           CSSM_PVC_MODE *PvcPolicy,
           const void *Reserved);

CSSM_RETURN
CSSM_Terminate (void);

CSSM_RETURN
CSSM_ModuleLoad (const CSSM_GUID *ModuleGuid,
                 CSSM_KEY_HIERARCHY KeyHierarchy,
                 CSSM_API_ModuleEventHandler AppNotifyCallback,
                 void *AppNotifyCallbackCtx);

CSSM_RETURN
CSSM_ModuleUnload (const CSSM_GUID *ModuleGuid,
                   CSSM_API_ModuleEventHandler AppNotifyCallback,
                   void *AppNotifyCallbackCtx);

CSSM_RETURN
CSSM_Introduce (const CSSM_GUID *ModuleID,
                CSSM_KEY_HIERARCHY KeyHierarchy);

CSSM_RETURN
CSSM_Unintroduce (const CSSM_GUID *ModuleID);

CSSM_RETURN
CSSM_ModuleAttach (const CSSM_GUID *ModuleGuid,
                   const CSSM_VERSION *Version,
                   const CSSM_API_MEMORY_FUNCS *MemoryFuncs,
                   uint32 SubserviceID,
                   CSSM_SERVICE_TYPE SubServiceType,
                   CSSM_ATTACH_FLAGS AttachFlags,
                   CSSM_KEY_HIERARCHY KeyHierarchy,
                   CSSM_FUNC_NAME_ADDR *FunctionTable,
                   uint32 NumFunctionTable,
                   const void *Reserved,
                   CSSM_MODULE_HANDLE_PTR NewModuleHandle);

CSSM_RETURN
CSSM_ModuleDetach (CSSM_MODULE_HANDLE ModuleHandle);

CSSM_RETURN
CSSM_SetPrivilege (CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_GetPrivilege (CSSM_PRIVILEGE *Privilege);

CSSM_RETURN
CSSM_GetModuleGUIDFromHandle (CSSM_MODULE_HANDLE ModuleHandle,
                              CSSM_GUID_PTR ModuleGUID);

CSSM_RETURN
CSSM_GetSubserviceUIDFromHandle (CSSM_MODULE_HANDLE ModuleHandle,
                                 CSSM_SUBSERVICE_UID_PTR SubserviceUID);

CSSM_RETURN
CSSM_ListAttachedModuleManagers (uint32 *NumberOfModuleManagers,
                                 CSSM_GUID_PTR ModuleManagerGuids);

CSSM_RETURN
CSSM_GetAPIMemoryFunctions (CSSM_MODULE_HANDLE AddInHandle,
                            CSSM_API_MEMORY_FUNCS_PTR AppMemoryFuncs);




CSSM_RETURN
CSSM_CSP_CreateSignatureContext (CSSM_CSP_HANDLE CSPHandle,
                                 CSSM_ALGORITHMS AlgorithmID,
                                 const CSSM_ACCESS_CREDENTIALS *AccessCred,
                                 const CSSM_KEY *Key,
                                 CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateSymmetricContext (CSSM_CSP_HANDLE CSPHandle,
                                 CSSM_ALGORITHMS AlgorithmID,
                                 CSSM_ENCRYPT_MODE Mode,
                                 const CSSM_ACCESS_CREDENTIALS *AccessCred,
                                 const CSSM_KEY *Key,
                                 const CSSM_DATA *InitVector,
                                 CSSM_PADDING Padding,
                                 void *Reserved,
                                 CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateDigestContext (CSSM_CSP_HANDLE CSPHandle,
                              CSSM_ALGORITHMS AlgorithmID,
                              CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateMacContext (CSSM_CSP_HANDLE CSPHandle,
                           CSSM_ALGORITHMS AlgorithmID,
                           const CSSM_KEY *Key,
                           CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateRandomGenContext (CSSM_CSP_HANDLE CSPHandle,
                                 CSSM_ALGORITHMS AlgorithmID,
                                 const CSSM_CRYPTO_DATA *Seed,
                                 CSSM_SIZE Length,
                                 CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateAsymmetricContext (CSSM_CSP_HANDLE CSPHandle,
                                  CSSM_ALGORITHMS AlgorithmID,
                                  const CSSM_ACCESS_CREDENTIALS *AccessCred,
                                  const CSSM_KEY *Key,
                                  CSSM_PADDING Padding,
                                  CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateDeriveKeyContext (CSSM_CSP_HANDLE CSPHandle,
                                 CSSM_ALGORITHMS AlgorithmID,
                                 CSSM_KEY_TYPE DeriveKeyType,
                                 uint32 DeriveKeyLengthInBits,
                                 const CSSM_ACCESS_CREDENTIALS *AccessCred,
                                 const CSSM_KEY *BaseKey,
                                 uint32 IterationCount,
                                 const CSSM_DATA *Salt,
                                 const CSSM_CRYPTO_DATA *Seed,
                                 CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreateKeyGenContext (CSSM_CSP_HANDLE CSPHandle,
                              CSSM_ALGORITHMS AlgorithmID,
                              uint32 KeySizeInBits,
                              const CSSM_CRYPTO_DATA *Seed,
                              const CSSM_DATA *Salt,
                              const CSSM_DATE *StartDate,
                              const CSSM_DATE *EndDate,
                              const CSSM_DATA *Params,
                              CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_CSP_CreatePassThroughContext (CSSM_CSP_HANDLE CSPHandle,
                                   const CSSM_KEY *Key,
                                   CSSM_CC_HANDLE *NewContextHandle);

CSSM_RETURN
CSSM_GetContext (CSSM_CC_HANDLE CCHandle,
                 CSSM_CONTEXT_PTR *Context);

CSSM_RETURN
CSSM_FreeContext (CSSM_CONTEXT_PTR Context);

CSSM_RETURN
CSSM_SetContext (CSSM_CC_HANDLE CCHandle,
                 const CSSM_CONTEXT *Context);

CSSM_RETURN
CSSM_DeleteContext (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_GetContextAttribute (const CSSM_CONTEXT *Context,
                          uint32 AttributeType,
                          CSSM_CONTEXT_ATTRIBUTE_PTR *ContextAttribute);

CSSM_RETURN
CSSM_UpdateContextAttributes (CSSM_CC_HANDLE CCHandle,
                              uint32 NumberOfAttributes,
                              const CSSM_CONTEXT_ATTRIBUTE *ContextAttributes);

CSSM_RETURN
CSSM_DeleteContextAttributes (CSSM_CC_HANDLE CCHandle,
                              uint32 NumberOfAttributes,
                              const CSSM_CONTEXT_ATTRIBUTE *ContextAttributes);




CSSM_RETURN
CSSM_CSP_Login (CSSM_CSP_HANDLE CSPHandle,
                const CSSM_ACCESS_CREDENTIALS *AccessCred,
                const CSSM_DATA *LoginName,
                const void *Reserved);

CSSM_RETURN
CSSM_CSP_Logout (CSSM_CSP_HANDLE CSPHandle);

CSSM_RETURN
CSSM_CSP_GetLoginAcl (CSSM_CSP_HANDLE CSPHandle,
                      const CSSM_STRING *SelectionTag,
                      uint32 *NumberOfAclInfos,
                      CSSM_ACL_ENTRY_INFO_PTR *AclInfos);

CSSM_RETURN
CSSM_CSP_ChangeLoginAcl (CSSM_CSP_HANDLE CSPHandle,
                         const CSSM_ACCESS_CREDENTIALS *AccessCred,
                         const CSSM_ACL_EDIT *AclEdit);

CSSM_RETURN
CSSM_GetKeyAcl (CSSM_CSP_HANDLE CSPHandle,
                const CSSM_KEY *Key,
                const CSSM_STRING *SelectionTag,
                uint32 *NumberOfAclInfos,
                CSSM_ACL_ENTRY_INFO_PTR *AclInfos);

CSSM_RETURN
CSSM_ChangeKeyAcl (CSSM_CSP_HANDLE CSPHandle,
                   const CSSM_ACCESS_CREDENTIALS *AccessCred,
                   const CSSM_ACL_EDIT *AclEdit,
                   const CSSM_KEY *Key);

CSSM_RETURN
CSSM_GetKeyOwner (CSSM_CSP_HANDLE CSPHandle,
                  const CSSM_KEY *Key,
                  CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);

CSSM_RETURN
CSSM_ChangeKeyOwner (CSSM_CSP_HANDLE CSPHandle,
                     const CSSM_ACCESS_CREDENTIALS *AccessCred,
                     const CSSM_KEY *Key,
                     const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);

CSSM_RETURN
CSSM_CSP_GetLoginOwner (CSSM_CSP_HANDLE CSPHandle,
                        CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);

CSSM_RETURN
CSSM_CSP_ChangeLoginOwner (CSSM_CSP_HANDLE CSPHandle,
                           const CSSM_ACCESS_CREDENTIALS *AccessCred,
                           const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);

CSSM_RETURN
CSSM_SignData (CSSM_CC_HANDLE CCHandle,
               const CSSM_DATA *DataBufs,
               uint32 DataBufCount,
               CSSM_ALGORITHMS DigestAlgorithm,
               CSSM_DATA_PTR Signature);

CSSM_RETURN
CSSM_SignDataInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_SignDataUpdate (CSSM_CC_HANDLE CCHandle,
                     const CSSM_DATA *DataBufs,
                     uint32 DataBufCount);

CSSM_RETURN
CSSM_SignDataFinal (CSSM_CC_HANDLE CCHandle,
                    CSSM_DATA_PTR Signature);

CSSM_RETURN
CSSM_VerifyData (CSSM_CC_HANDLE CCHandle,
                 const CSSM_DATA *DataBufs,
                 uint32 DataBufCount,
                 CSSM_ALGORITHMS DigestAlgorithm,
                 const CSSM_DATA *Signature);

CSSM_RETURN
CSSM_VerifyDataInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_VerifyDataUpdate (CSSM_CC_HANDLE CCHandle,
                       const CSSM_DATA *DataBufs,
                       uint32 DataBufCount);

CSSM_RETURN
CSSM_VerifyDataFinal (CSSM_CC_HANDLE CCHandle,
                      const CSSM_DATA *Signature);

CSSM_RETURN
CSSM_DigestData (CSSM_CC_HANDLE CCHandle,
                 const CSSM_DATA *DataBufs,
                 uint32 DataBufCount,
                 CSSM_DATA_PTR Digest);

CSSM_RETURN
CSSM_DigestDataInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_DigestDataUpdate (CSSM_CC_HANDLE CCHandle,
                       const CSSM_DATA *DataBufs,
                       uint32 DataBufCount);

CSSM_RETURN
CSSM_DigestDataClone (CSSM_CC_HANDLE CCHandle,
                      CSSM_CC_HANDLE *ClonednewCCHandle);

CSSM_RETURN
CSSM_DigestDataFinal (CSSM_CC_HANDLE CCHandle,
                      CSSM_DATA_PTR Digest);

CSSM_RETURN
CSSM_GenerateMac (CSSM_CC_HANDLE CCHandle,
                  const CSSM_DATA *DataBufs,
                  uint32 DataBufCount,
                  CSSM_DATA_PTR Mac);

CSSM_RETURN
CSSM_GenerateMacInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_GenerateMacUpdate (CSSM_CC_HANDLE CCHandle,
                        const CSSM_DATA *DataBufs,
                        uint32 DataBufCount);

CSSM_RETURN
CSSM_GenerateMacFinal (CSSM_CC_HANDLE CCHandle,
                       CSSM_DATA_PTR Mac);

CSSM_RETURN
CSSM_VerifyMac (CSSM_CC_HANDLE CCHandle,
                const CSSM_DATA *DataBufs,
                uint32 DataBufCount,
                const CSSM_DATA *Mac);

CSSM_RETURN
CSSM_VerifyMacInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_VerifyMacUpdate (CSSM_CC_HANDLE CCHandle,
                      const CSSM_DATA *DataBufs,
                      uint32 DataBufCount);

CSSM_RETURN
CSSM_VerifyMacFinal (CSSM_CC_HANDLE CCHandle,
                     const CSSM_DATA *Mac);

CSSM_RETURN
CSSM_QuerySize (CSSM_CC_HANDLE CCHandle,
                CSSM_BOOL Encrypt,
                uint32 QuerySizeCount,
                CSSM_QUERY_SIZE_DATA_PTR DataBlockSizes);

CSSM_RETURN
CSSM_EncryptData (CSSM_CC_HANDLE CCHandle,
                  const CSSM_DATA *ClearBufs,
                  uint32 ClearBufCount,
                  CSSM_DATA_PTR CipherBufs,
                  uint32 CipherBufCount,
                  CSSM_SIZE *bytesEncrypted,
                  CSSM_DATA_PTR RemData);

CSSM_RETURN
CSSM_EncryptDataP (CSSM_CC_HANDLE CCHandle,
                   const CSSM_DATA *ClearBufs,
                   uint32 ClearBufCount,
                   CSSM_DATA_PTR CipherBufs,
                   uint32 CipherBufCount,
                   CSSM_SIZE *bytesEncrypted,
                   CSSM_DATA_PTR RemData,
                   CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_EncryptDataInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_EncryptDataInitP (CSSM_CC_HANDLE CCHandle,
                       CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_EncryptDataUpdate (CSSM_CC_HANDLE CCHandle,
                        const CSSM_DATA *ClearBufs,
                        uint32 ClearBufCount,
                        CSSM_DATA_PTR CipherBufs,
                        uint32 CipherBufCount,
                        CSSM_SIZE *bytesEncrypted);

CSSM_RETURN
CSSM_EncryptDataFinal (CSSM_CC_HANDLE CCHandle,
                       CSSM_DATA_PTR RemData);

CSSM_RETURN
CSSM_DecryptData (CSSM_CC_HANDLE CCHandle,
                  const CSSM_DATA *CipherBufs,
                  uint32 CipherBufCount,
                  CSSM_DATA_PTR ClearBufs,
                  uint32 ClearBufCount,
                  CSSM_SIZE *bytesDecrypted,
                  CSSM_DATA_PTR RemData);

CSSM_RETURN
CSSM_DecryptDataP (CSSM_CC_HANDLE CCHandle,
                   const CSSM_DATA *CipherBufs,
                   uint32 CipherBufCount,
                   CSSM_DATA_PTR ClearBufs,
                   uint32 ClearBufCount,
                   CSSM_SIZE *bytesDecrypted,
                   CSSM_DATA_PTR RemData,
                   CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_DecryptDataInit (CSSM_CC_HANDLE CCHandle);

CSSM_RETURN
CSSM_DecryptDataInitP (CSSM_CC_HANDLE CCHandle,
                       CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_DecryptDataUpdate (CSSM_CC_HANDLE CCHandle,
                        const CSSM_DATA *CipherBufs,
                        uint32 CipherBufCount,
                        CSSM_DATA_PTR ClearBufs,
                        uint32 ClearBufCount,
                        CSSM_SIZE *bytesDecrypted);

CSSM_RETURN
CSSM_DecryptDataFinal (CSSM_CC_HANDLE CCHandle,
                       CSSM_DATA_PTR RemData);

CSSM_RETURN
CSSM_QueryKeySizeInBits (CSSM_CSP_HANDLE CSPHandle,
                         CSSM_CC_HANDLE CCHandle,
                         const CSSM_KEY *Key,
                         CSSM_KEY_SIZE_PTR KeySize);

CSSM_RETURN
CSSM_GenerateKey (CSSM_CC_HANDLE CCHandle,
                  uint32 KeyUsage,
                  uint32 KeyAttr,
                  const CSSM_DATA *KeyLabel,
                  const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                  CSSM_KEY_PTR Key);

CSSM_RETURN
CSSM_GenerateKeyP (CSSM_CC_HANDLE CCHandle,
                   uint32 KeyUsage,
                   uint32 KeyAttr,
                   const CSSM_DATA *KeyLabel,
                   const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                   CSSM_KEY_PTR Key,
                   CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_GenerateKeyPair (CSSM_CC_HANDLE CCHandle,
                      uint32 PublicKeyUsage,
                      uint32 PublicKeyAttr,
                      const CSSM_DATA *PublicKeyLabel,
                      CSSM_KEY_PTR PublicKey,
                      uint32 PrivateKeyUsage,
                      uint32 PrivateKeyAttr,
                      const CSSM_DATA *PrivateKeyLabel,
                      const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                      CSSM_KEY_PTR PrivateKey);

CSSM_RETURN
CSSM_GenerateKeyPairP (CSSM_CC_HANDLE CCHandle,
                       uint32 PublicKeyUsage,
                       uint32 PublicKeyAttr,
                       const CSSM_DATA *PublicKeyLabel,
                       CSSM_KEY_PTR PublicKey,
                       uint32 PrivateKeyUsage,
                       uint32 PrivateKeyAttr,
                       const CSSM_DATA *PrivateKeyLabel,
                       const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                       CSSM_KEY_PTR PrivateKey,
                       CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_GenerateRandom (CSSM_CC_HANDLE CCHandle,
                     CSSM_DATA_PTR RandomNumber);

CSSM_RETURN
CSSM_CSP_ObtainPrivateKeyFromPublicKey (CSSM_CSP_HANDLE CSPHandle,
                                        const CSSM_KEY *PublicKey,
                                        CSSM_KEY_PTR PrivateKey);

CSSM_RETURN
CSSM_WrapKey (CSSM_CC_HANDLE CCHandle,
              const CSSM_ACCESS_CREDENTIALS *AccessCred,
              const CSSM_KEY *Key,
              const CSSM_DATA *DescriptiveData,
              CSSM_WRAP_KEY_PTR WrappedKey);

CSSM_RETURN
CSSM_UnwrapKey (CSSM_CC_HANDLE CCHandle,
                const CSSM_KEY *PublicKey,
                const CSSM_WRAP_KEY *WrappedKey,
                uint32 KeyUsage,
                uint32 KeyAttr,
                const CSSM_DATA *KeyLabel,
                const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                CSSM_KEY_PTR UnwrappedKey,
                CSSM_DATA_PTR DescriptiveData);

CSSM_RETURN
CSSM_WrapKeyP (CSSM_CC_HANDLE CCHandle,
               const CSSM_ACCESS_CREDENTIALS *AccessCred,
               const CSSM_KEY *Key,
               const CSSM_DATA *DescriptiveData,
               CSSM_WRAP_KEY_PTR WrappedKey,
               CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_UnwrapKeyP (CSSM_CC_HANDLE CCHandle,
                 const CSSM_KEY *PublicKey,
                 const CSSM_WRAP_KEY *WrappedKey,
                 uint32 KeyUsage,
                 uint32 KeyAttr,
                 const CSSM_DATA *KeyLabel,
                 const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                 CSSM_KEY_PTR UnwrappedKey,
                 CSSM_DATA_PTR DescriptiveData,
                 CSSM_PRIVILEGE Privilege);

CSSM_RETURN
CSSM_DeriveKey (CSSM_CC_HANDLE CCHandle,
                CSSM_DATA_PTR Param,
                uint32 KeyUsage,
                uint32 KeyAttr,
                const CSSM_DATA *KeyLabel,
                const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                CSSM_KEY_PTR DerivedKey);

CSSM_RETURN
CSSM_FreeKey (CSSM_CSP_HANDLE CSPHandle,
              const CSSM_ACCESS_CREDENTIALS *AccessCred,
              CSSM_KEY_PTR KeyPtr,
              CSSM_BOOL Delete);

CSSM_RETURN
CSSM_GenerateAlgorithmParams (CSSM_CC_HANDLE CCHandle,
                              uint32 ParamBits,
                              CSSM_DATA_PTR Param);




CSSM_RETURN
CSSM_CSP_GetOperationalStatistics (CSSM_CSP_HANDLE CSPHandle,
                                   CSSM_CSP_OPERATIONAL_STATISTICS *Statistics);

CSSM_RETURN
CSSM_GetTimeValue (CSSM_CSP_HANDLE CSPHandle,
                   CSSM_ALGORITHMS TimeAlgorithm,
                   CSSM_DATA *TimeData);

CSSM_RETURN
CSSM_RetrieveUniqueId (CSSM_CSP_HANDLE CSPHandle,
                       CSSM_DATA_PTR UniqueID);

CSSM_RETURN
CSSM_RetrieveCounter (CSSM_CSP_HANDLE CSPHandle,
                      CSSM_DATA_PTR Counter);

CSSM_RETURN
CSSM_VerifyDevice (CSSM_CSP_HANDLE CSPHandle,
                   const CSSM_DATA *DeviceCert);




CSSM_RETURN
CSSM_CSP_PassThrough (CSSM_CC_HANDLE CCHandle,
                      uint32 PassThroughId,
                      const void *InData,
                      void **OutData);




CSSM_RETURN
CSSM_TP_SubmitCredRequest (CSSM_TP_HANDLE TPHandle,
                           const CSSM_TP_AUTHORITY_ID *PreferredAuthority,
                           CSSM_TP_AUTHORITY_REQUEST_TYPE RequestType,
                           const CSSM_TP_REQUEST_SET *RequestInput,
                           const CSSM_TP_CALLERAUTH_CONTEXT *CallerAuthContext,
                           sint32 *EstimatedTime,
                           CSSM_DATA_PTR ReferenceIdentifier);

CSSM_RETURN
CSSM_TP_RetrieveCredResult (CSSM_TP_HANDLE TPHandle,
                            const CSSM_DATA *ReferenceIdentifier,
                            const CSSM_TP_CALLERAUTH_CONTEXT *CallerAuthCredentials,
                            sint32 *EstimatedTime,
                            CSSM_BOOL *ConfirmationRequired,
                            CSSM_TP_RESULT_SET_PTR *RetrieveOutput);

CSSM_RETURN
CSSM_TP_ConfirmCredResult (CSSM_TP_HANDLE TPHandle,
                           const CSSM_DATA *ReferenceIdentifier,
                           const CSSM_TP_CALLERAUTH_CONTEXT *CallerAuthCredentials,
                           const CSSM_TP_CONFIRM_RESPONSE *Responses,
                           const CSSM_TP_AUTHORITY_ID *PreferredAuthority);

CSSM_RETURN
CSSM_TP_ReceiveConfirmation (CSSM_TP_HANDLE TPHandle,
                             const CSSM_DATA *ReferenceIdentifier,
                             CSSM_TP_CONFIRM_RESPONSE_PTR *Responses,
                             sint32 *ElapsedTime);

CSSM_RETURN
CSSM_TP_CertReclaimKey (CSSM_TP_HANDLE TPHandle,
                        const CSSM_CERTGROUP *CertGroup,
                        uint32 CertIndex,
                        CSSM_LONG_HANDLE KeyCacheHandle,
                        CSSM_CSP_HANDLE CSPHandle,
                        const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry);

CSSM_RETURN
CSSM_TP_CertReclaimAbort (CSSM_TP_HANDLE TPHandle,
                          CSSM_LONG_HANDLE KeyCacheHandle);

CSSM_RETURN
CSSM_TP_FormRequest (CSSM_TP_HANDLE TPHandle,
                     const CSSM_TP_AUTHORITY_ID *PreferredAuthority,
                     CSSM_TP_FORM_TYPE FormType,
                     CSSM_DATA_PTR BlankForm);

CSSM_RETURN
CSSM_TP_FormSubmit (CSSM_TP_HANDLE TPHandle,
                    CSSM_TP_FORM_TYPE FormType,
                    const CSSM_DATA *Form,
                    const CSSM_TP_AUTHORITY_ID *ClearanceAuthority,
                    const CSSM_TP_AUTHORITY_ID *RepresentedAuthority,
                    CSSM_ACCESS_CREDENTIALS_PTR Credentials);

CSSM_RETURN
CSSM_TP_CertGroupVerify (CSSM_TP_HANDLE TPHandle,
                         CSSM_CL_HANDLE CLHandle,
                         CSSM_CSP_HANDLE CSPHandle,
                         const CSSM_CERTGROUP *CertGroupToBeVerified,
                         const CSSM_TP_VERIFY_CONTEXT *VerifyContext,
                         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR VerifyContextResult);

CSSM_RETURN
CSSM_TP_CertCreateTemplate (CSSM_TP_HANDLE TPHandle,
                            CSSM_CL_HANDLE CLHandle,
                            uint32 NumberOfFields,
                            const CSSM_FIELD *CertFields,
                            CSSM_DATA_PTR CertTemplate);

CSSM_RETURN
CSSM_TP_CertGetAllTemplateFields (CSSM_TP_HANDLE TPHandle,
                                  CSSM_CL_HANDLE CLHandle,
                                  const CSSM_DATA *CertTemplate,
                                  uint32 *NumberOfFields,
                                  CSSM_FIELD_PTR *CertFields);

CSSM_RETURN
CSSM_TP_CertSign (CSSM_TP_HANDLE TPHandle,
                  CSSM_CL_HANDLE CLHandle,
                  CSSM_CC_HANDLE CCHandle,
                  const CSSM_DATA *CertTemplateToBeSigned,
                  const CSSM_CERTGROUP *SignerCertGroup,
                  const CSSM_TP_VERIFY_CONTEXT *SignerVerifyContext,
                  CSSM_TP_VERIFY_CONTEXT_RESULT_PTR SignerVerifyResult,
                  CSSM_DATA_PTR SignedCert);

CSSM_RETURN
CSSM_TP_CrlVerify (CSSM_TP_HANDLE TPHandle,
                   CSSM_CL_HANDLE CLHandle,
                   CSSM_CSP_HANDLE CSPHandle,
                   const CSSM_ENCODED_CRL *CrlToBeVerified,
                   const CSSM_CERTGROUP *SignerCertGroup,
                   const CSSM_TP_VERIFY_CONTEXT *VerifyContext,
                   CSSM_TP_VERIFY_CONTEXT_RESULT_PTR RevokerVerifyResult);

CSSM_RETURN
CSSM_TP_CrlCreateTemplate (CSSM_TP_HANDLE TPHandle,
                           CSSM_CL_HANDLE CLHandle,
                           uint32 NumberOfFields,
                           const CSSM_FIELD *CrlFields,
                           CSSM_DATA_PTR NewCrlTemplate);

CSSM_RETURN
CSSM_TP_CertRevoke (CSSM_TP_HANDLE TPHandle,
                    CSSM_CL_HANDLE CLHandle,
                    CSSM_CSP_HANDLE CSPHandle,
                    const CSSM_DATA *OldCrlTemplate,
                    const CSSM_CERTGROUP *CertGroupToBeRevoked,
                    const CSSM_CERTGROUP *RevokerCertGroup,
                    const CSSM_TP_VERIFY_CONTEXT *RevokerVerifyContext,
                    CSSM_TP_VERIFY_CONTEXT_RESULT_PTR RevokerVerifyResult,
                    CSSM_TP_CERTCHANGE_REASON Reason,
                    CSSM_DATA_PTR NewCrlTemplate);

CSSM_RETURN
CSSM_TP_CertRemoveFromCrlTemplate (CSSM_TP_HANDLE TPHandle,
                                   CSSM_CL_HANDLE CLHandle,
                                   CSSM_CSP_HANDLE CSPHandle,
                                   const CSSM_DATA *OldCrlTemplate,
                                   const CSSM_CERTGROUP *CertGroupToBeRemoved,
                                   const CSSM_CERTGROUP *RevokerCertGroup,
                                   const CSSM_TP_VERIFY_CONTEXT *RevokerVerifyContext,
                                   CSSM_TP_VERIFY_CONTEXT_RESULT_PTR RevokerVerifyResult,
                                   CSSM_DATA_PTR NewCrlTemplate);

CSSM_RETURN
CSSM_TP_CrlSign (CSSM_TP_HANDLE TPHandle,
                 CSSM_CL_HANDLE CLHandle,
                 CSSM_CC_HANDLE CCHandle,
                 const CSSM_ENCODED_CRL *CrlToBeSigned,
                 const CSSM_CERTGROUP *SignerCertGroup,
                 const CSSM_TP_VERIFY_CONTEXT *SignerVerifyContext,
                 CSSM_TP_VERIFY_CONTEXT_RESULT_PTR SignerVerifyResult,
                 CSSM_DATA_PTR SignedCrl);

CSSM_RETURN
CSSM_TP_ApplyCrlToDb (CSSM_TP_HANDLE TPHandle,
                      CSSM_CL_HANDLE CLHandle,
                      CSSM_CSP_HANDLE CSPHandle,
                      const CSSM_ENCODED_CRL *CrlToBeApplied,
                      const CSSM_CERTGROUP *SignerCertGroup,
                      const CSSM_TP_VERIFY_CONTEXT *ApplyCrlVerifyContext,
                      CSSM_TP_VERIFY_CONTEXT_RESULT_PTR ApplyCrlVerifyResult);

CSSM_RETURN
CSSM_TP_CertGroupConstruct (CSSM_TP_HANDLE TPHandle,
                            CSSM_CL_HANDLE CLHandle,
                            CSSM_CSP_HANDLE CSPHandle,
                            const CSSM_DL_DB_LIST *DBList,
                            const void *ConstructParams,
                            const CSSM_CERTGROUP *CertGroupFrag,
                            CSSM_CERTGROUP_PTR *CertGroup);

CSSM_RETURN
CSSM_TP_CertGroupPrune (CSSM_TP_HANDLE TPHandle,
                        CSSM_CL_HANDLE CLHandle,
                        const CSSM_DL_DB_LIST *DBList,
                        const CSSM_CERTGROUP *OrderedCertGroup,
                        CSSM_CERTGROUP_PTR *PrunedCertGroup);

CSSM_RETURN
CSSM_TP_CertGroupToTupleGroup (CSSM_TP_HANDLE TPHandle,
                               CSSM_CL_HANDLE CLHandle,
                               const CSSM_CERTGROUP *CertGroup,
                               CSSM_TUPLEGROUP_PTR *TupleGroup);

CSSM_RETURN
CSSM_TP_TupleGroupToCertGroup (CSSM_TP_HANDLE TPHandle,
                               CSSM_CL_HANDLE CLHandle,
                               const CSSM_TUPLEGROUP *TupleGroup,
                               CSSM_CERTGROUP_PTR *CertTemplates);

CSSM_RETURN
CSSM_TP_PassThrough (CSSM_TP_HANDLE TPHandle,
                     CSSM_CL_HANDLE CLHandle,
                     CSSM_CC_HANDLE CCHandle,
                     const CSSM_DL_DB_LIST *DBList,
                     uint32 PassThroughId,
                     const void *InputParams,
                     void **OutputParams);




CSSM_RETURN
CSSM_AC_AuthCompute (CSSM_AC_HANDLE ACHandle,
                     const CSSM_TUPLEGROUP *BaseAuthorizations,
                     const CSSM_TUPLEGROUP *Credentials,
                     uint32 NumberOfRequestors,
                     const CSSM_LIST *Requestors,
                     const CSSM_LIST *RequestedAuthorizationPeriod,
                     const CSSM_LIST *RequestedAuthorization,
                     CSSM_TUPLEGROUP_PTR AuthorizationResult);

CSSM_RETURN
CSSM_AC_PassThrough (CSSM_AC_HANDLE ACHandle,
                     CSSM_TP_HANDLE TPHandle,
                     CSSM_CL_HANDLE CLHandle,
                     CSSM_CC_HANDLE CCHandle,
                     const CSSM_DL_DB_LIST *DBList,
                     uint32 PassThroughId,
                     const void *InputParams,
                     void **OutputParams);




CSSM_RETURN
CSSM_CL_CertCreateTemplate (CSSM_CL_HANDLE CLHandle,
                            uint32 NumberOfFields,
                            const CSSM_FIELD *CertFields,
                            CSSM_DATA_PTR CertTemplate);

CSSM_RETURN
CSSM_CL_CertGetAllTemplateFields (CSSM_CL_HANDLE CLHandle,
                                  const CSSM_DATA *CertTemplate,
                                  uint32 *NumberOfFields,
                                  CSSM_FIELD_PTR *CertFields);

CSSM_RETURN
CSSM_CL_CertSign (CSSM_CL_HANDLE CLHandle,
                  CSSM_CC_HANDLE CCHandle,
                  const CSSM_DATA *CertTemplate,
                  const CSSM_FIELD *SignScope,
                  uint32 ScopeSize,
                  CSSM_DATA_PTR SignedCert);

CSSM_RETURN
CSSM_CL_CertVerify (CSSM_CL_HANDLE CLHandle,
                    CSSM_CC_HANDLE CCHandle,
                    const CSSM_DATA *CertToBeVerified,
                    const CSSM_DATA *SignerCert,
                    const CSSM_FIELD *VerifyScope,
                    uint32 ScopeSize);

CSSM_RETURN
CSSM_CL_CertVerifyWithKey (CSSM_CL_HANDLE CLHandle,
                           CSSM_CC_HANDLE CCHandle,
                           const CSSM_DATA *CertToBeVerified);

CSSM_RETURN
CSSM_CL_CertGetFirstFieldValue (CSSM_CL_HANDLE CLHandle,
                                const CSSM_DATA *Cert,
                                const CSSM_OID *CertField,
                                CSSM_HANDLE_PTR ResultsHandle,
                                uint32 *NumberOfMatchedFields,
                                CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CertGetNextFieldValue (CSSM_CL_HANDLE CLHandle,
                               CSSM_HANDLE ResultsHandle,
                               CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CertAbortQuery (CSSM_CL_HANDLE CLHandle,
                        CSSM_HANDLE ResultsHandle);

CSSM_RETURN
CSSM_CL_CertGetKeyInfo (CSSM_CL_HANDLE CLHandle,
                        const CSSM_DATA *Cert,
                        CSSM_KEY_PTR *Key);

CSSM_RETURN
CSSM_CL_CertGetAllFields (CSSM_CL_HANDLE CLHandle,
                          const CSSM_DATA *Cert,
                          uint32 *NumberOfFields,
                          CSSM_FIELD_PTR *CertFields);

CSSM_RETURN
CSSM_CL_FreeFields (CSSM_CL_HANDLE CLHandle,
                    uint32 NumberOfFields,
                    CSSM_FIELD_PTR *Fields);

CSSM_RETURN
CSSM_CL_FreeFieldValue (CSSM_CL_HANDLE CLHandle,
                        const CSSM_OID *CertOrCrlOid,
                        CSSM_DATA_PTR Value);

CSSM_RETURN
CSSM_CL_CertCache (CSSM_CL_HANDLE CLHandle,
                   const CSSM_DATA *Cert,
                   CSSM_HANDLE_PTR CertHandle);

CSSM_RETURN
CSSM_CL_CertGetFirstCachedFieldValue (CSSM_CL_HANDLE CLHandle,
                                      CSSM_HANDLE CertHandle,
                                      const CSSM_OID *CertField,
                                      CSSM_HANDLE_PTR ResultsHandle,
                                      uint32 *NumberOfMatchedFields,
                                      CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CertGetNextCachedFieldValue (CSSM_CL_HANDLE CLHandle,
                                     CSSM_HANDLE ResultsHandle,
                                     CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CertAbortCache (CSSM_CL_HANDLE CLHandle,
                        CSSM_HANDLE CertHandle);

CSSM_RETURN
CSSM_CL_CertGroupToSignedBundle (CSSM_CL_HANDLE CLHandle,
                                 CSSM_CC_HANDLE CCHandle,
                                 const CSSM_CERTGROUP *CertGroupToBundle,
                                 const CSSM_CERT_BUNDLE_HEADER *BundleInfo,
                                 CSSM_DATA_PTR SignedBundle);

CSSM_RETURN
CSSM_CL_CertGroupFromVerifiedBundle (CSSM_CL_HANDLE CLHandle,
                                     CSSM_CC_HANDLE CCHandle,
                                     const CSSM_CERT_BUNDLE *CertBundle,
                                     const CSSM_DATA *SignerCert,
                                     CSSM_CERTGROUP_PTR *CertGroup);

CSSM_RETURN
CSSM_CL_CertDescribeFormat (CSSM_CL_HANDLE CLHandle,
                            uint32 *NumberOfFields,
                            CSSM_OID_PTR *OidList);

CSSM_RETURN
CSSM_CL_CrlCreateTemplate (CSSM_CL_HANDLE CLHandle,
                           uint32 NumberOfFields,
                           const CSSM_FIELD *CrlTemplate,
                           CSSM_DATA_PTR NewCrl);

CSSM_RETURN
CSSM_CL_CrlSetFields (CSSM_CL_HANDLE CLHandle,
                      uint32 NumberOfFields,
                      const CSSM_FIELD *CrlTemplate,
                      const CSSM_DATA *OldCrl,
                      CSSM_DATA_PTR ModifiedCrl);

CSSM_RETURN
CSSM_CL_CrlAddCert (CSSM_CL_HANDLE CLHandle,
                    CSSM_CC_HANDLE CCHandle,
                    const CSSM_DATA *Cert,
                    uint32 NumberOfFields,
                    const CSSM_FIELD *CrlEntryFields,
                    const CSSM_DATA *OldCrl,
                    CSSM_DATA_PTR NewCrl);

CSSM_RETURN
CSSM_CL_CrlRemoveCert (CSSM_CL_HANDLE CLHandle,
                       const CSSM_DATA *Cert,
                       const CSSM_DATA *OldCrl,
                       CSSM_DATA_PTR NewCrl);

CSSM_RETURN
CSSM_CL_CrlSign (CSSM_CL_HANDLE CLHandle,
                 CSSM_CC_HANDLE CCHandle,
                 const CSSM_DATA *UnsignedCrl,
                 const CSSM_FIELD *SignScope,
                 uint32 ScopeSize,
                 CSSM_DATA_PTR SignedCrl);

CSSM_RETURN
CSSM_CL_CrlVerify (CSSM_CL_HANDLE CLHandle,
                   CSSM_CC_HANDLE CCHandle,
                   const CSSM_DATA *CrlToBeVerified,
                   const CSSM_DATA *SignerCert,
                   const CSSM_FIELD *VerifyScope,
                   uint32 ScopeSize);

CSSM_RETURN
CSSM_CL_CrlVerifyWithKey (CSSM_CL_HANDLE CLHandle,
                          CSSM_CC_HANDLE CCHandle,
                          const CSSM_DATA *CrlToBeVerified);

CSSM_RETURN
CSSM_CL_IsCertInCrl (CSSM_CL_HANDLE CLHandle,
                     const CSSM_DATA *Cert,
                     const CSSM_DATA *Crl,
                     CSSM_BOOL *CertFound);

CSSM_RETURN
CSSM_CL_CrlGetFirstFieldValue (CSSM_CL_HANDLE CLHandle,
                               const CSSM_DATA *Crl,
                               const CSSM_OID *CrlField,
                               CSSM_HANDLE_PTR ResultsHandle,
                               uint32 *NumberOfMatchedFields,
                               CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CrlGetNextFieldValue (CSSM_CL_HANDLE CLHandle,
                              CSSM_HANDLE ResultsHandle,
                              CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CrlAbortQuery (CSSM_CL_HANDLE CLHandle,
                       CSSM_HANDLE ResultsHandle);

CSSM_RETURN
CSSM_CL_CrlGetAllFields (CSSM_CL_HANDLE CLHandle,
                         const CSSM_DATA *Crl,
                         uint32 *NumberOfCrlFields,
                         CSSM_FIELD_PTR *CrlFields);

CSSM_RETURN
CSSM_CL_CrlCache (CSSM_CL_HANDLE CLHandle,
                  const CSSM_DATA *Crl,
                  CSSM_HANDLE_PTR CrlHandle);

CSSM_RETURN
CSSM_CL_IsCertInCachedCrl (CSSM_CL_HANDLE CLHandle,
                           const CSSM_DATA *Cert,
                           CSSM_HANDLE CrlHandle,
                           CSSM_BOOL *CertFound,
                           CSSM_DATA_PTR CrlRecordIndex);

CSSM_RETURN
CSSM_CL_CrlGetFirstCachedFieldValue (CSSM_CL_HANDLE CLHandle,
                                     CSSM_HANDLE CrlHandle,
                                     const CSSM_DATA *CrlRecordIndex,
                                     const CSSM_OID *CrlField,
                                     CSSM_HANDLE_PTR ResultsHandle,
                                     uint32 *NumberOfMatchedFields,
                                     CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CrlGetNextCachedFieldValue (CSSM_CL_HANDLE CLHandle,
                                    CSSM_HANDLE ResultsHandle,
                                    CSSM_DATA_PTR *Value);

CSSM_RETURN
CSSM_CL_CrlGetAllCachedRecordFields (CSSM_CL_HANDLE CLHandle,
                                     CSSM_HANDLE CrlHandle,
                                     const CSSM_DATA *CrlRecordIndex,
                                     uint32 *NumberOfFields,
                                     CSSM_FIELD_PTR *CrlFields);

CSSM_RETURN
CSSM_CL_CrlAbortCache (CSSM_CL_HANDLE CLHandle,
                       CSSM_HANDLE CrlHandle);

CSSM_RETURN
CSSM_CL_CrlDescribeFormat (CSSM_CL_HANDLE CLHandle,
                           uint32 *NumberOfFields,
                           CSSM_OID_PTR *OidList);

CSSM_RETURN
CSSM_CL_PassThrough (CSSM_CL_HANDLE CLHandle,
                     CSSM_CC_HANDLE CCHandle,
                     uint32 PassThroughId,
                     const void *InputParams,
                     void **OutputParams);




CSSM_RETURN
CSSM_DL_DbOpen (CSSM_DL_HANDLE DLHandle,
                const char *DbName,
                const CSSM_NET_ADDRESS *DbLocation,
                CSSM_DB_ACCESS_TYPE AccessRequest,
                const CSSM_ACCESS_CREDENTIALS *AccessCred,
                const void *OpenParameters,
                CSSM_DB_HANDLE *DbHandle);

CSSM_RETURN
CSSM_DL_DbClose (CSSM_DL_DB_HANDLE DLDBHandle);

CSSM_RETURN
CSSM_DL_DbCreate (CSSM_DL_HANDLE DLHandle,
                  const char *DbName,
                  const CSSM_NET_ADDRESS *DbLocation,
                  const CSSM_DBINFO *DBInfo,
                  CSSM_DB_ACCESS_TYPE AccessRequest,
                  const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                  const void *OpenParameters,
                  CSSM_DB_HANDLE *DbHandle);

CSSM_RETURN
CSSM_DL_DbDelete (CSSM_DL_HANDLE DLHandle,
                  const char *DbName,
                  const CSSM_NET_ADDRESS *DbLocation,
                  const CSSM_ACCESS_CREDENTIALS *AccessCred);

CSSM_RETURN
CSSM_DL_CreateRelation (CSSM_DL_DB_HANDLE DLDBHandle,
                        CSSM_DB_RECORDTYPE RelationID,
                        const char *RelationName,
                        uint32 NumberOfAttributes,
                        const CSSM_DB_SCHEMA_ATTRIBUTE_INFO *pAttributeInfo,
                        uint32 NumberOfIndexes,
                        const CSSM_DB_SCHEMA_INDEX_INFO *pIndexInfo);

CSSM_RETURN
CSSM_DL_DestroyRelation (CSSM_DL_DB_HANDLE DLDBHandle,
                         CSSM_DB_RECORDTYPE RelationID);

CSSM_RETURN
CSSM_DL_Authenticate (CSSM_DL_DB_HANDLE DLDBHandle,
                      CSSM_DB_ACCESS_TYPE AccessRequest,
                      const CSSM_ACCESS_CREDENTIALS *AccessCred);

CSSM_RETURN
CSSM_DL_GetDbAcl (CSSM_DL_DB_HANDLE DLDBHandle,
                  const CSSM_STRING *SelectionTag,
                  uint32 *NumberOfAclInfos,
                  CSSM_ACL_ENTRY_INFO_PTR *AclInfos);

CSSM_RETURN
CSSM_DL_ChangeDbAcl (CSSM_DL_DB_HANDLE DLDBHandle,
                     const CSSM_ACCESS_CREDENTIALS *AccessCred,
                     const CSSM_ACL_EDIT *AclEdit);

CSSM_RETURN
CSSM_DL_GetDbOwner (CSSM_DL_DB_HANDLE DLDBHandle,
                    CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);

CSSM_RETURN
CSSM_DL_ChangeDbOwner (CSSM_DL_DB_HANDLE DLDBHandle,
                       const CSSM_ACCESS_CREDENTIALS *AccessCred,
                       const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);

CSSM_RETURN
CSSM_DL_GetDbNames (CSSM_DL_HANDLE DLHandle,
                    CSSM_NAME_LIST_PTR *NameList);

CSSM_RETURN
CSSM_DL_GetDbNameFromHandle (CSSM_DL_DB_HANDLE DLDBHandle,
                             char **DbName);

CSSM_RETURN
CSSM_DL_FreeNameList (CSSM_DL_HANDLE DLHandle,
                      CSSM_NAME_LIST_PTR NameList);

CSSM_RETURN
CSSM_DL_DataInsert (CSSM_DL_DB_HANDLE DLDBHandle,
                    CSSM_DB_RECORDTYPE RecordType,
                    const CSSM_DB_RECORD_ATTRIBUTE_DATA *Attributes,
                    const CSSM_DATA *Data,
                    CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);

CSSM_RETURN
CSSM_DL_DataDelete (CSSM_DL_DB_HANDLE DLDBHandle,
                    const CSSM_DB_UNIQUE_RECORD *UniqueRecordIdentifier);

CSSM_RETURN
CSSM_DL_DataModify (CSSM_DL_DB_HANDLE DLDBHandle,
                    CSSM_DB_RECORDTYPE RecordType,
                    CSSM_DB_UNIQUE_RECORD_PTR UniqueRecordIdentifier,
                    const CSSM_DB_RECORD_ATTRIBUTE_DATA *AttributesToBeModified,
                    const CSSM_DATA *DataToBeModified,
                    CSSM_DB_MODIFY_MODE ModifyMode);

CSSM_RETURN
CSSM_DL_DataGetFirst (CSSM_DL_DB_HANDLE DLDBHandle,
                      const CSSM_QUERY *Query,
                      CSSM_HANDLE_PTR ResultsHandle,
                      CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
                      CSSM_DATA_PTR Data,
                      CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);

CSSM_RETURN
CSSM_DL_DataGetNext (CSSM_DL_DB_HANDLE DLDBHandle,
                     CSSM_HANDLE ResultsHandle,
                     CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
                     CSSM_DATA_PTR Data,
                     CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);

CSSM_RETURN
CSSM_DL_DataAbortQuery (CSSM_DL_DB_HANDLE DLDBHandle,
                        CSSM_HANDLE ResultsHandle);

CSSM_RETURN
CSSM_DL_DataGetFromUniqueRecordId (CSSM_DL_DB_HANDLE DLDBHandle,
                              const CSSM_DB_UNIQUE_RECORD *UniqueRecord,
                              CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
                              CSSM_DATA_PTR Data);

CSSM_RETURN
CSSM_DL_FreeUniqueRecord (CSSM_DL_DB_HANDLE DLDBHandle,
                          CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord);

CSSM_RETURN
CSSM_DL_PassThrough (CSSM_DL_DB_HANDLE DLDBHandle,
                uint32 PassThroughId,
                const void *InputParams,
                void **OutputParams);


}
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssm.h" 2 3
# 28 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmaci.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmaci.h" 3
extern "C" {


typedef struct cssm_spi_ac_funcs {
    CSSM_RETURN ( *AuthCompute)
        (CSSM_AC_HANDLE ACHandle,
         const CSSM_TUPLEGROUP *BaseAuthorizations,
         const CSSM_TUPLEGROUP *Credentials,
         uint32 NumberOfRequestors,
         const CSSM_LIST *Requestors,
         const CSSM_LIST *RequestedAuthorizationPeriod,
         const CSSM_LIST *RequestedAuthorization,
         CSSM_TUPLEGROUP_PTR AuthorizationResult);
    CSSM_RETURN ( *PassThrough)
        (CSSM_AC_HANDLE ACHandle,
         CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DL_DB_LIST *DBList,
         uint32 PassThroughId,
         const void *InputParams,
         void **OutputParams);
} CSSM_SPI_AC_FUNCS, *CSSM_SPI_AC_FUNCS_PTR;


}
# 29 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmcli.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmcli.h" 3
extern "C" {


typedef struct cssm_spi_cl_funcs {
    CSSM_RETURN ( *CertCreateTemplate)
        (CSSM_CL_HANDLE CLHandle,
         uint32 NumberOfFields,
         const CSSM_FIELD *CertFields,
         CSSM_DATA_PTR CertTemplate);
    CSSM_RETURN ( *CertGetAllTemplateFields)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *CertTemplate,
         uint32 *NumberOfFields,
         CSSM_FIELD_PTR *CertFields);
    CSSM_RETURN ( *CertSign)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CertTemplate,
         const CSSM_FIELD *SignScope,
         uint32 ScopeSize,
         CSSM_DATA_PTR SignedCert);
    CSSM_RETURN ( *CertVerify)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CertToBeVerified,
         const CSSM_DATA *SignerCert,
         const CSSM_FIELD *VerifyScope,
         uint32 ScopeSize);
    CSSM_RETURN ( *CertVerifyWithKey)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CertToBeVerified);
    CSSM_RETURN ( *CertGetFirstFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         const CSSM_OID *CertField,
         CSSM_HANDLE_PTR ResultsHandle,
         uint32 *NumberOfMatchedFields,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CertGetNextFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE ResultsHandle,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CertAbortQuery)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE ResultsHandle);
    CSSM_RETURN ( *CertGetKeyInfo)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         CSSM_KEY_PTR *Key);
    CSSM_RETURN ( *CertGetAllFields)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         uint32 *NumberOfFields,
         CSSM_FIELD_PTR *CertFields);
 CSSM_RETURN ( *FreeFields)
  (CSSM_CL_HANDLE CLHandle,
   uint32 NumberOfFields,
   CSSM_FIELD_PTR *FieldArray);
    CSSM_RETURN ( *FreeFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_OID *CertOrCrlOid,
         CSSM_DATA_PTR Value);
    CSSM_RETURN ( *CertCache)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         CSSM_HANDLE_PTR CertHandle);
    CSSM_RETURN ( *CertGetFirstCachedFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE CertHandle,
         const CSSM_OID *CertField,
         CSSM_HANDLE_PTR ResultsHandle,
         uint32 *NumberOfMatchedFields,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CertGetNextCachedFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE ResultsHandle,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CertAbortCache)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE CertHandle);
    CSSM_RETURN ( *CertGroupToSignedBundle)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CERTGROUP *CertGroupToBundle,
         const CSSM_CERT_BUNDLE_HEADER *BundleInfo,
         CSSM_DATA_PTR SignedBundle);
    CSSM_RETURN ( *CertGroupFromVerifiedBundle)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CERT_BUNDLE *CertBundle,
         const CSSM_DATA *SignerCert,
         CSSM_CERTGROUP_PTR *CertGroup);
    CSSM_RETURN ( *CertDescribeFormat)
        (CSSM_CL_HANDLE CLHandle,
         uint32 *NumberOfFields,
         CSSM_OID_PTR *OidList);
    CSSM_RETURN ( *CrlCreateTemplate)
        (CSSM_CL_HANDLE CLHandle,
         uint32 NumberOfFields,
         const CSSM_FIELD *CrlTemplate,
         CSSM_DATA_PTR NewCrl);
    CSSM_RETURN ( *CrlSetFields)
        (CSSM_CL_HANDLE CLHandle,
         uint32 NumberOfFields,
         const CSSM_FIELD *CrlTemplate,
         const CSSM_DATA *OldCrl,
         CSSM_DATA_PTR ModifiedCrl);
    CSSM_RETURN ( *CrlAddCert)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *Cert,
         uint32 NumberOfFields,
         const CSSM_FIELD *CrlEntryFields,
         const CSSM_DATA *OldCrl,
         CSSM_DATA_PTR NewCrl);
    CSSM_RETURN ( *CrlRemoveCert)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         const CSSM_DATA *OldCrl,
         CSSM_DATA_PTR NewCrl);
    CSSM_RETURN ( *CrlSign)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *UnsignedCrl,
         const CSSM_FIELD *SignScope,
         uint32 ScopeSize,
         CSSM_DATA_PTR SignedCrl);
    CSSM_RETURN ( *CrlVerify)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CrlToBeVerified,
         const CSSM_DATA *SignerCert,
         const CSSM_FIELD *VerifyScope,
         uint32 ScopeSize);
    CSSM_RETURN ( *CrlVerifyWithKey)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CrlToBeVerified);
    CSSM_RETURN ( *IsCertInCrl)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         const CSSM_DATA *Crl,
         CSSM_BOOL *CertFound);
    CSSM_RETURN ( *CrlGetFirstFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Crl,
         const CSSM_OID *CrlField,
         CSSM_HANDLE_PTR ResultsHandle,
         uint32 *NumberOfMatchedFields,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CrlGetNextFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE ResultsHandle,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CrlAbortQuery)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE ResultsHandle);
    CSSM_RETURN ( *CrlGetAllFields)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Crl,
         uint32 *NumberOfCrlFields,
         CSSM_FIELD_PTR *CrlFields);
    CSSM_RETURN ( *CrlCache)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Crl,
         CSSM_HANDLE_PTR CrlHandle);
    CSSM_RETURN ( *IsCertInCachedCrl)
        (CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *Cert,
         CSSM_HANDLE CrlHandle,
         CSSM_BOOL *CertFound,
         CSSM_DATA_PTR CrlRecordIndex);
    CSSM_RETURN ( *CrlGetFirstCachedFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE CrlHandle,
         const CSSM_DATA *CrlRecordIndex,
         const CSSM_OID *CrlField,
         CSSM_HANDLE_PTR ResultsHandle,
         uint32 *NumberOfMatchedFields,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CrlGetNextCachedFieldValue)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE ResultsHandle,
         CSSM_DATA_PTR *Value);
    CSSM_RETURN ( *CrlGetAllCachedRecordFields)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE CrlHandle,
         const CSSM_DATA *CrlRecordIndex,
         uint32 *NumberOfFields,
         CSSM_FIELD_PTR *CrlFields);
    CSSM_RETURN ( *CrlAbortCache)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_HANDLE CrlHandle);
    CSSM_RETURN ( *CrlDescribeFormat)
        (CSSM_CL_HANDLE CLHandle,
         uint32 *NumberOfFields,
         CSSM_OID_PTR *OidList);
    CSSM_RETURN ( *PassThrough)
        (CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         uint32 PassThroughId,
         const void *InputParams,
         void **OutputParams);
} CSSM_SPI_CL_FUNCS, *CSSM_SPI_CL_FUNCS_PTR;


}
# 31 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmcspi.h" 1 3
# 30 "/System/Library/Frameworks/Security.framework/Headers/cssmcspi.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmspi.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmspi.h" 3
extern "C" {


typedef CSSM_RETURN ( *CSSM_SPI_ModuleEventHandler)
    (const CSSM_GUID *ModuleGuid,
     void *CssmNotifyCallbackCtx,
     uint32 SubserviceId,
     CSSM_SERVICE_TYPE ServiceType,
     CSSM_MODULE_EVENT EventType);

typedef uint32 CSSM_CONTEXT_EVENT;
enum {
    CSSM_CONTEXT_EVENT_CREATE = 1,
    CSSM_CONTEXT_EVENT_DELETE = 2,
    CSSM_CONTEXT_EVENT_UPDATE = 3
};

typedef struct cssm_module_funcs {
    CSSM_SERVICE_TYPE ServiceType;
    uint32 NumberOfServiceFuncs;
    const CSSM_PROC_ADDR *ServiceFuncs;
} CSSM_MODULE_FUNCS, *CSSM_MODULE_FUNCS_PTR;

typedef void *( *CSSM_UPCALLS_MALLOC)
    (CSSM_HANDLE AddInHandle,
     uint32 size);

typedef void ( *CSSM_UPCALLS_FREE)
    (CSSM_HANDLE AddInHandle,
     void *memblock);

typedef void *( *CSSM_UPCALLS_REALLOC)
    (CSSM_HANDLE AddInHandle,
     void *memblock,
     uint32 size);

typedef void *( *CSSM_UPCALLS_CALLOC)
    (CSSM_HANDLE AddInHandle,
     uint32 num,
     uint32 size);

typedef struct cssm_upcalls {
    CSSM_UPCALLS_MALLOC malloc_func;
    CSSM_UPCALLS_FREE free_func;
    CSSM_UPCALLS_REALLOC realloc_func;
    CSSM_UPCALLS_CALLOC calloc_func;
    CSSM_RETURN ( *CcToHandle_func)
        (CSSM_CC_HANDLE Cc,
         CSSM_MODULE_HANDLE_PTR ModuleHandle);
    CSSM_RETURN ( *GetModuleInfo_func)
        (CSSM_MODULE_HANDLE Module,
         CSSM_GUID_PTR Guid,
         CSSM_VERSION_PTR Version,
         uint32 *SubServiceId,
         CSSM_SERVICE_TYPE *SubServiceType,
         CSSM_ATTACH_FLAGS *AttachFlags,
         CSSM_KEY_HIERARCHY *KeyHierarchy,
         CSSM_API_MEMORY_FUNCS_PTR AttachedMemFuncs,
         CSSM_FUNC_NAME_ADDR_PTR FunctionTable,
         uint32 NumFunctions);
} CSSM_UPCALLS, *CSSM_UPCALLS_PTR;

CSSM_RETURN
CSSM_SPI_ModuleLoad (const CSSM_GUID *CssmGuid,
                     const CSSM_GUID *ModuleGuid,
                     CSSM_SPI_ModuleEventHandler CssmNotifyCallback,
                     void *CssmNotifyCallbackCtx);

CSSM_RETURN
CSSM_SPI_ModuleUnload (const CSSM_GUID *CssmGuid,
                       const CSSM_GUID *ModuleGuid,
                       CSSM_SPI_ModuleEventHandler CssmNotifyCallback,
                       void *CssmNotifyCallbackCtx);

CSSM_RETURN
CSSM_SPI_ModuleAttach (const CSSM_GUID *ModuleGuid,
                       const CSSM_VERSION *Version,
                       uint32 SubserviceID,
                       CSSM_SERVICE_TYPE SubServiceType,
                       CSSM_ATTACH_FLAGS AttachFlags,
                       CSSM_MODULE_HANDLE ModuleHandle,
                       CSSM_KEY_HIERARCHY KeyHierarchy,
                       const CSSM_GUID *CssmGuid,
                       const CSSM_GUID *ModuleManagerGuid,
                       const CSSM_GUID *CallerGuid,
                       const CSSM_UPCALLS *Upcalls,
                       CSSM_MODULE_FUNCS_PTR *FuncTbl);

CSSM_RETURN
CSSM_SPI_ModuleDetach (CSSM_MODULE_HANDLE ModuleHandle);



}
# 31 "/System/Library/Frameworks/Security.framework/Headers/cssmcspi.h" 2 3


extern "C" {


typedef struct cssm_spi_csp_funcs {
    CSSM_RETURN ( *EventNotify)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CONTEXT_EVENT Event,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context);
    CSSM_RETURN ( *QuerySize)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         CSSM_BOOL Encrypt,
         uint32 QuerySizeCount,
         CSSM_QUERY_SIZE_DATA_PTR DataBlock);
    CSSM_RETURN ( *SignData)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount,
         CSSM_ALGORITHMS DigestAlgorithm,
         CSSM_DATA_PTR Signature);
    CSSM_RETURN ( *SignDataInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context);
    CSSM_RETURN ( *SignDataUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount);
    CSSM_RETURN ( *SignDataFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         CSSM_DATA_PTR Signature);
    CSSM_RETURN ( *VerifyData)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount,
         CSSM_ALGORITHMS DigestAlgorithm,
         const CSSM_DATA *Signature);
    CSSM_RETURN ( *VerifyDataInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context);
    CSSM_RETURN ( *VerifyDataUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount);
    CSSM_RETURN ( *VerifyDataFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *Signature);
    CSSM_RETURN ( *DigestData)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount,
         CSSM_DATA_PTR Digest);
    CSSM_RETURN ( *DigestDataInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context);
    CSSM_RETURN ( *DigestDataUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount);
    CSSM_RETURN ( *DigestDataClone)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         CSSM_CC_HANDLE ClonedCCHandle);
    CSSM_RETURN ( *DigestDataFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         CSSM_DATA_PTR Digest);
    CSSM_RETURN ( *GenerateMac)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount,
         CSSM_DATA_PTR Mac);
    CSSM_RETURN ( *GenerateMacInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context);
    CSSM_RETURN ( *GenerateMacUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount);
    CSSM_RETURN ( *GenerateMacFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         CSSM_DATA_PTR Mac);
    CSSM_RETURN ( *VerifyMac)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount,
         const CSSM_DATA *Mac);
    CSSM_RETURN ( *VerifyMacInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context);
    CSSM_RETURN ( *VerifyMacUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *DataBufs,
         uint32 DataBufCount);
    CSSM_RETURN ( *VerifyMacFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *Mac);
    CSSM_RETURN ( *EncryptData)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *ClearBufs,
         uint32 ClearBufCount,
         CSSM_DATA_PTR CipherBufs,
         uint32 CipherBufCount,
         CSSM_SIZE *bytesEncrypted,
         CSSM_DATA_PTR RemData,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *EncryptDataInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *EncryptDataUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *ClearBufs,
         uint32 ClearBufCount,
         CSSM_DATA_PTR CipherBufs,
         uint32 CipherBufCount,
         CSSM_SIZE *bytesEncrypted);
    CSSM_RETURN ( *EncryptDataFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         CSSM_DATA_PTR RemData);
    CSSM_RETURN ( *DecryptData)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_DATA *CipherBufs,
         uint32 CipherBufCount,
         CSSM_DATA_PTR ClearBufs,
         uint32 ClearBufCount,
         CSSM_SIZE *bytesDecrypted,
         CSSM_DATA_PTR RemData,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *DecryptDataInit)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *DecryptDataUpdate)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CipherBufs,
         uint32 CipherBufCount,
         CSSM_DATA_PTR ClearBufs,
         uint32 ClearBufCount,
         CSSM_SIZE *bytesDecrypted);
    CSSM_RETURN ( *DecryptDataFinal)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         CSSM_DATA_PTR RemData);
    CSSM_RETURN ( *QueryKeySizeInBits)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_KEY *Key,
         CSSM_KEY_SIZE_PTR KeySize);
    CSSM_RETURN ( *GenerateKey)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         uint32 KeyUsage,
         uint32 KeyAttr,
         const CSSM_DATA *KeyLabel,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
         CSSM_KEY_PTR Key,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *GenerateKeyPair)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         uint32 PublicKeyUsage,
         uint32 PublicKeyAttr,
         const CSSM_DATA *PublicKeyLabel,
         CSSM_KEY_PTR PublicKey,
         uint32 PrivateKeyUsage,
         uint32 PrivateKeyAttr,
         const CSSM_DATA *PrivateKeyLabel,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
         CSSM_KEY_PTR PrivateKey,
         CSSM_PRIVILEGE Privilege);
   CSSM_RETURN ( *GenerateRandom)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         CSSM_DATA_PTR RandomNumber);
    CSSM_RETURN ( *GenerateAlgorithmParams)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         uint32 ParamBits,
         CSSM_DATA_PTR Param,
         uint32 *NumberOfUpdatedAttibutes,
         CSSM_CONTEXT_ATTRIBUTE_PTR *UpdatedAttributes);
    CSSM_RETURN ( *WrapKey)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_KEY *Key,
         const CSSM_DATA *DescriptiveData,
         CSSM_WRAP_KEY_PTR WrappedKey,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *UnwrapKey)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         const CSSM_KEY *PublicKey,
         const CSSM_WRAP_KEY *WrappedKey,
         uint32 KeyUsage,
         uint32 KeyAttr,
         const CSSM_DATA *KeyLabel,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
         CSSM_KEY_PTR UnwrappedKey,
         CSSM_DATA_PTR DescriptiveData,
         CSSM_PRIVILEGE Privilege);
    CSSM_RETURN ( *DeriveKey)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         CSSM_DATA_PTR Param,
         uint32 KeyUsage,
         uint32 KeyAttr,
         const CSSM_DATA *KeyLabel,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
         CSSM_KEY_PTR DerivedKey);
    CSSM_RETURN ( *FreeKey)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         CSSM_KEY_PTR KeyPtr,
         CSSM_BOOL Delete);
    CSSM_RETURN ( *PassThrough)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_CONTEXT *Context,
         uint32 PassThroughId,
         const void *InData,
         void **OutData);
    CSSM_RETURN ( *Login)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_DATA *LoginName,
         const void *Reserved);
    CSSM_RETURN ( *Logout)
        (CSSM_CSP_HANDLE CSPHandle);
    CSSM_RETURN ( *ChangeLoginAcl)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_ACL_EDIT *AclEdit);
    CSSM_RETURN ( *ObtainPrivateKeyFromPublicKey)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_KEY *PublicKey,
         CSSM_KEY_PTR PrivateKey);
    CSSM_RETURN ( *RetrieveUniqueId)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_DATA_PTR UniqueID);
    CSSM_RETURN ( *RetrieveCounter)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_DATA_PTR Counter);
    CSSM_RETURN ( *VerifyDevice)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_DATA *DeviceCert);
    CSSM_RETURN ( *GetTimeValue)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_ALGORITHMS TimeAlgorithm,
         CSSM_DATA *TimeData);
    CSSM_RETURN ( *GetOperationalStatistics)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_CSP_OPERATIONAL_STATISTICS *Statistics);
    CSSM_RETURN ( *GetLoginAcl)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_STRING *SelectionTag,
         uint32 *NumberOfAclInfos,
         CSSM_ACL_ENTRY_INFO_PTR *AclInfos);
    CSSM_RETURN ( *GetKeyAcl)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_KEY *Key,
         const CSSM_STRING *SelectionTag,
         uint32 *NumberOfAclInfos,
         CSSM_ACL_ENTRY_INFO_PTR *AclInfos);
    CSSM_RETURN ( *ChangeKeyAcl)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_ACL_EDIT *AclEdit,
         const CSSM_KEY *Key);
    CSSM_RETURN ( *GetKeyOwner)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_KEY *Key,
         CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);
    CSSM_RETURN ( *ChangeKeyOwner)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_KEY *Key,
         const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);
    CSSM_RETURN ( *GetLoginOwner)
        (CSSM_CSP_HANDLE CSPHandle,
         CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);
    CSSM_RETURN ( *ChangeLoginOwner)
        (CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);
} CSSM_SPI_CSP_FUNCS, *CSSM_SPI_CSP_FUNCS_PTR;


}
# 32 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmdli.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmdli.h" 3
extern "C" {


typedef struct cssm_spi_dl_funcs {
    CSSM_RETURN ( *DbOpen)
        (CSSM_DL_HANDLE DLHandle,
         const char *DbName,
         const CSSM_NET_ADDRESS *DbLocation,
         CSSM_DB_ACCESS_TYPE AccessRequest,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const void *OpenParameters,
         CSSM_DB_HANDLE *DbHandle);
    CSSM_RETURN ( *DbClose)
        (CSSM_DL_DB_HANDLE DLDBHandle);
    CSSM_RETURN ( *DbCreate)
        (CSSM_DL_HANDLE DLHandle,
         const char *DbName,
         const CSSM_NET_ADDRESS *DbLocation,
         const CSSM_DBINFO *DBInfo,
         CSSM_DB_ACCESS_TYPE AccessRequest,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
         const void *OpenParameters,
         CSSM_DB_HANDLE *DbHandle);
    CSSM_RETURN ( *DbDelete)
        (CSSM_DL_HANDLE DLHandle,
         const char *DbName,
         const CSSM_NET_ADDRESS *DbLocation,
         const CSSM_ACCESS_CREDENTIALS *AccessCred);
    CSSM_RETURN ( *CreateRelation)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_DB_RECORDTYPE RelationID,
         const char *RelationName,
         uint32 NumberOfAttributes,
         const CSSM_DB_SCHEMA_ATTRIBUTE_INFO *pAttributeInfo,
         uint32 NumberOfIndexes,
         const CSSM_DB_SCHEMA_INDEX_INFO *pIndexInfo);
    CSSM_RETURN ( *DestroyRelation)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_DB_RECORDTYPE RelationID);
    CSSM_RETURN ( *Authenticate)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_DB_ACCESS_TYPE AccessRequest,
         const CSSM_ACCESS_CREDENTIALS *AccessCred);
    CSSM_RETURN ( *GetDbAcl)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         const CSSM_STRING *SelectionTag,
         uint32 *NumberOfAclInfos,
         CSSM_ACL_ENTRY_INFO_PTR *AclInfos);
    CSSM_RETURN ( *ChangeDbAcl)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_ACL_EDIT *AclEdit);
    CSSM_RETURN ( *GetDbOwner)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);
    CSSM_RETURN ( *ChangeDbOwner)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);
    CSSM_RETURN ( *GetDbNames)
        (CSSM_DL_HANDLE DLHandle,
         CSSM_NAME_LIST_PTR *NameList);
    CSSM_RETURN ( *GetDbNameFromHandle)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         char **DbName);
    CSSM_RETURN ( *FreeNameList)
        (CSSM_DL_HANDLE DLHandle,
         CSSM_NAME_LIST_PTR NameList);
    CSSM_RETURN ( *DataInsert)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_DB_RECORDTYPE RecordType,
         const CSSM_DB_RECORD_ATTRIBUTE_DATA *Attributes,
         const CSSM_DATA *Data,
         CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);
    CSSM_RETURN ( *DataDelete)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         const CSSM_DB_UNIQUE_RECORD *UniqueRecordIdentifier);
    CSSM_RETURN ( *DataModify)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_DB_RECORDTYPE RecordType,
         CSSM_DB_UNIQUE_RECORD_PTR UniqueRecordIdentifier,
         const CSSM_DB_RECORD_ATTRIBUTE_DATA *AttributesToBeModified,
         const CSSM_DATA *DataToBeModified,
         CSSM_DB_MODIFY_MODE ModifyMode);
    CSSM_RETURN ( *DataGetFirst)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         const CSSM_QUERY *Query,
         CSSM_HANDLE_PTR ResultsHandle,
         CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
         CSSM_DATA_PTR Data,
         CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);
    CSSM_RETURN ( *DataGetNext)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_HANDLE ResultsHandle,
         CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
         CSSM_DATA_PTR Data,
         CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);
    CSSM_RETURN ( *DataAbortQuery)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_HANDLE ResultsHandle);
    CSSM_RETURN ( *DataGetFromUniqueRecordId)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         const CSSM_DB_UNIQUE_RECORD *UniqueRecord,
         CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
         CSSM_DATA_PTR Data);
    CSSM_RETURN ( *FreeUniqueRecord)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord);
    CSSM_RETURN ( *PassThrough)
        (CSSM_DL_DB_HANDLE DLDBHandle,
         uint32 PassThroughId,
         const void *InputParams,
         void **OutputParams);
} CSSM_SPI_DL_FUNCS, *CSSM_SPI_DL_FUNCS_PTR;


}
# 33 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmkrapi.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmkrapi.h" 3
extern "C" {


typedef uint32 CSSM_KRSP_HANDLE;

typedef struct cssm_kr_name {
    uint8 Type;
    uint8 Length;
    char *Name;
} CSSM_KR_NAME;

typedef struct cssm_kr_profile {
    CSSM_KR_NAME UserName;
    CSSM_CERTGROUP_PTR UserCertificate;
    CSSM_CERTGROUP_PTR KRSCertChain;
    uint8 LE_KRANum;
    CSSM_CERTGROUP_PTR LE_KRACertChainList;
    uint8 ENT_KRANum;
    CSSM_CERTGROUP_PTR ENT_KRACertChainList;
    uint8 INDIV_KRANum;
    CSSM_CERTGROUP_PTR INDIV_KRACertChainList;
    CSSM_DATA_PTR INDIV_AuthenticationInfo;
    uint32 KRSPFlags;
    CSSM_DATA_PTR KRSPExtensions;
} CSSM_KR_PROFILE, *CSSM_KR_PROFILE_PTR;

typedef struct cssm_kr_wrappedproductinfo {
    CSSM_VERSION StandardVersion;
    CSSM_STRING StandardDescription;
    CSSM_VERSION ProductVersion;
    CSSM_STRING ProductDescription;
    CSSM_STRING ProductVendor;
    uint32 ProductFlags;
} CSSM_KR_WRAPPEDPRODUCT_INFO, *CSSM_KR_WRAPPEDPRODUCT_INFO_PTR;

typedef struct cssm_krsubservice {
    uint32 SubServiceId;
    char *Description;
    CSSM_KR_WRAPPEDPRODUCT_INFO WrappedProduct;
} CSSM_KRSUBSERVICE, *CSSM_KRSUBSERVICE_PTR;

typedef uint32 CSSM_KR_POLICY_TYPE;





typedef uint32 CSSM_KR_POLICY_FLAGS;
# 89 "/System/Library/Frameworks/Security.framework/Headers/cssmkrapi.h" 3
typedef struct cssm_kr_policy_list_item {
    struct kr_policy_list_item *next;
    CSSM_ALGORITHMS AlgorithmId;
    CSSM_ENCRYPT_MODE Mode;
    uint32 MaxKeyLength;
    uint32 MaxRounds;
    uint8 WorkFactor;
    CSSM_KR_POLICY_FLAGS PolicyFlags;
    CSSM_CONTEXT_TYPE AlgClass;
} CSSM_KR_POLICY_LIST_ITEM, *CSSM_KR_POLICY_LIST_ITEM_PTR;

typedef struct cssm_kr_policy_info {
    CSSM_BOOL krbNotAllowed;
    uint32 numberOfEntries;
    CSSM_KR_POLICY_LIST_ITEM *policyEntry;
} CSSM_KR_POLICY_INFO, *CSSM_KR_POLICY_INFO_PTR;




CSSM_RETURN
CSSM_KR_SetEnterpriseRecoveryPolicy (const CSSM_DATA *RecoveryPolicyFileName,
                                     const CSSM_ACCESS_CREDENTIALS *OldPassPhrase,
                                     const CSSM_ACCESS_CREDENTIALS *NewPassPhrase);




CSSM_RETURN
CSSM_KR_CreateRecoveryRegistrationContext (CSSM_KRSP_HANDLE KRSPHandle,
                                           CSSM_CC_HANDLE *NewContext);

CSSM_RETURN
CSSM_KR_CreateRecoveryEnablementContext (CSSM_KRSP_HANDLE KRSPHandle,
                                         const CSSM_KR_PROFILE *LocalProfile,
                                         const CSSM_KR_PROFILE *RemoteProfile,
                                         CSSM_CC_HANDLE *NewContext);

CSSM_RETURN
CSSM_KR_CreateRecoveryRequestContext (CSSM_KRSP_HANDLE KRSPHandle,
                                      const CSSM_KR_PROFILE *LocalProfile,
                                      CSSM_CC_HANDLE *NewContext);

CSSM_RETURN
CSSM_KR_GetPolicyInfo (CSSM_CC_HANDLE CCHandle,
                       CSSM_KR_POLICY_FLAGS *EncryptionProhibited,
                       uint32 *WorkFactor);




CSSM_RETURN
CSSM_KR_RegistrationRequest (CSSM_CC_HANDLE RecoveryRegistrationContext,
                             const CSSM_DATA *KRInData,
                             const CSSM_ACCESS_CREDENTIALS *AccessCredentials,
                             CSSM_KR_POLICY_FLAGS KRFlags,
                             sint32 *EstimatedTime,
                             CSSM_HANDLE_PTR ReferenceHandle);

CSSM_RETURN
CSSM_KR_RegistrationRetrieve (CSSM_KRSP_HANDLE KRSPHandle,
                              CSSM_HANDLE ReferenceHandle,
                              const CSSM_ACCESS_CREDENTIALS *AccessCredentials,
                              sint32 *EstimatedTime,
                              CSSM_KR_PROFILE_PTR KRProfile);




CSSM_RETURN
CSSM_KR_GenerateRecoveryFields (CSSM_CC_HANDLE KeyRecoveryContext,
                                CSSM_CC_HANDLE CCHandle,
                                const CSSM_DATA *KRSPOptions,
                                CSSM_KR_POLICY_FLAGS KRFlags,
                                CSSM_DATA_PTR KRFields,
                                CSSM_CC_HANDLE *NewCCHandle);

CSSM_RETURN
CSSM_KR_ProcessRecoveryFields (CSSM_CC_HANDLE KeyRecoveryContext,
                               CSSM_CC_HANDLE CryptoContext,
                               const CSSM_DATA *KRSPOptions,
                               CSSM_KR_POLICY_FLAGS KRFlags,
                               const CSSM_DATA *KRFields,
                               CSSM_CC_HANDLE *NewCryptoContext);




CSSM_RETURN
CSSM_KR_RecoveryRequest (CSSM_CC_HANDLE RecoveryRequestContext,
                         const CSSM_DATA *KRInData,
                         const CSSM_ACCESS_CREDENTIALS *AccessCredentials,
                         sint32 *EstimatedTime,
                         CSSM_HANDLE_PTR ReferenceHandle);

CSSM_RETURN
CSSM_KR_RecoveryRetrieve (CSSM_KRSP_HANDLE KRSPHandle,
                          CSSM_HANDLE ReferenceHandle,
                          const CSSM_ACCESS_CREDENTIALS *AccessCredentials,
                          sint32 *EstimatedTime,
                          CSSM_HANDLE_PTR CacheHandle,
                          uint32 *NumberOfRecoveredKeys);

CSSM_RETURN
CSSM_KR_GetRecoveredObject (CSSM_KRSP_HANDLE KRSPHandle,
                            CSSM_HANDLE CacheHandle,
                            uint32 IndexInResults,
                            CSSM_CSP_HANDLE CSPHandle,
                            const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
                            uint32 Flags,
                            CSSM_KEY_PTR RecoveredKey,
                            CSSM_DATA_PTR OtherInfo);

CSSM_RETURN
CSSM_KR_RecoveryRequestAbort (CSSM_KRSP_HANDLE KRSPHandle,
                              CSSM_HANDLE CacheHandle);

CSSM_RETURN
CSSM_KR_QueryPolicyInfo (CSSM_KRSP_HANDLE KRSPHandle,
                         CSSM_ALGORITHMS AlgorithmID,
                         CSSM_ENCRYPT_MODE Mode,
                         CSSM_CONTEXT_TYPE Class,
                         CSSM_KR_POLICY_INFO_PTR *PolicyInfoData);




CSSM_RETURN
CSSM_KR_PassThrough (CSSM_KRSP_HANDLE KRSPHandle,
                     CSSM_CC_HANDLE KeyRecoveryContext,
                     CSSM_CC_HANDLE CryptoContext,
                     uint32 PassThroughId,
                     const void *InputParams,
                     void **OutputParams);


}
# 35 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmkrspi.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmkrspi.h" 3
extern "C" {




typedef struct cssm_spi_kr_funcs {
    CSSM_RETURN ( *RegistrationRequest)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_CC_HANDLE KRRegistrationContextHandle,
         const CSSM_CONTEXT *KRRegistrationContext,
         const CSSM_DATA *KRInData,
         const CSSM_ACCESS_CREDENTIALS *AccessCredentials,
         CSSM_KR_POLICY_FLAGS KRFlags,
         sint32 *EstimatedTime,
         CSSM_HANDLE_PTR ReferenceHandle);
    CSSM_RETURN ( *RegistrationRetrieve)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_HANDLE ReferenceHandle,
         sint32 *EstimatedTime,
         CSSM_KR_PROFILE_PTR KRProfile);
    CSSM_RETURN ( *GenerateRecoveryFields)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_CC_HANDLE KREnablementContextHandle,
         const CSSM_CONTEXT *KREnablementContext,
         CSSM_CC_HANDLE CryptoContextHandle,
         const CSSM_CONTEXT *CryptoContext,
         const CSSM_DATA *KRSPOptions,
         CSSM_KR_POLICY_FLAGS KRFlags,
         CSSM_DATA_PTR KRFields);
    CSSM_RETURN ( *ProcessRecoveryFields)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_CC_HANDLE KREnablementContextHandle,
         const CSSM_CONTEXT *KREnablementContext,
         CSSM_CC_HANDLE CryptoContextHandle,
         const CSSM_CONTEXT *CryptoContext,
         const CSSM_DATA *KRSPOptions,
         CSSM_KR_POLICY_FLAGS KRFlags,
         const CSSM_DATA *KRFields);
    CSSM_RETURN ( *RecoveryRequest)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_CC_HANDLE KRRequestContextHandle,
         const CSSM_CONTEXT *KRRequestContext,
         const CSSM_DATA *KRInData,
         const CSSM_ACCESS_CREDENTIALS *AccessCredentials,
         sint32 *EstimatedTime,
         CSSM_HANDLE_PTR ReferenceHandle);
    CSSM_RETURN ( *RecoveryRetrieve)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_HANDLE ReferenceHandle,
         sint32 *EstimatedTime,
         CSSM_HANDLE_PTR CacheHandle,
         uint32 *NumberOfRecoveredKeys);
    CSSM_RETURN ( *GetRecoveredObject)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_HANDLE CacheHandle,
         uint32 IndexInResults,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
         uint32 Flags,
         CSSM_KEY_PTR RecoveredKey,
         CSSM_DATA_PTR OtherInfo);
    CSSM_RETURN ( *RecoveryRequestAbort)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_HANDLE ResultsHandle);
    CSSM_RETURN ( *PassThrough)
        (CSSM_KRSP_HANDLE KRSPHandle,
         CSSM_CC_HANDLE KeyRecoveryContextHandle,
         const CSSM_CONTEXT *KeyRecoveryContext,
         CSSM_CC_HANDLE CryptoContextHandle,
         const CSSM_CONTEXT *CryptoContext,
         uint32 PassThroughId,
         const void *InputParams,
         void **OutputParams);
} CSSM_SPI_KR_FUNCS, *CSSM_SPI_KR_FUNCS_PTR;


}
# 36 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/cssmtpi.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/cssmtpi.h" 3
extern "C" {


typedef struct cssm_spi_tp_funcs {
    CSSM_RETURN ( *SubmitCredRequest)
        (CSSM_TP_HANDLE TPHandle,
         const CSSM_TP_AUTHORITY_ID *PreferredAuthority,
         CSSM_TP_AUTHORITY_REQUEST_TYPE RequestType,
         const CSSM_TP_REQUEST_SET *RequestInput,
         const CSSM_TP_CALLERAUTH_CONTEXT *CallerAuthContext,
         sint32 *EstimatedTime,
         CSSM_DATA_PTR ReferenceIdentifier);
    CSSM_RETURN ( *RetrieveCredResult)
        (CSSM_TP_HANDLE TPHandle,
         const CSSM_DATA *ReferenceIdentifier,
         const CSSM_TP_CALLERAUTH_CONTEXT *CallerAuthCredentials,
         sint32 *EstimatedTime,
         CSSM_BOOL *ConfirmationRequired,
         CSSM_TP_RESULT_SET_PTR *RetrieveOutput);
    CSSM_RETURN ( *ConfirmCredResult)
        (CSSM_TP_HANDLE TPHandle,
         const CSSM_DATA *ReferenceIdentifier,
         const CSSM_TP_CALLERAUTH_CONTEXT *CallerAuthCredentials,
         const CSSM_TP_CONFIRM_RESPONSE *Responses,
         const CSSM_TP_AUTHORITY_ID *PreferredAuthority);
    CSSM_RETURN ( *ReceiveConfirmation)
        (CSSM_TP_HANDLE TPHandle,
         const CSSM_DATA *ReferenceIdentifier,
         CSSM_TP_CONFIRM_RESPONSE_PTR *Responses,
         sint32 *ElapsedTime);
    CSSM_RETURN ( *CertReclaimKey)
        (CSSM_TP_HANDLE TPHandle,
         const CSSM_CERTGROUP *CertGroup,
         uint32 CertIndex,
         CSSM_LONG_HANDLE KeyCacheHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry);
    CSSM_RETURN ( *CertReclaimAbort)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_LONG_HANDLE KeyCacheHandle);
    CSSM_RETURN ( *FormRequest)
        (CSSM_TP_HANDLE TPHandle,
         const CSSM_TP_AUTHORITY_ID *PreferredAuthority,
         CSSM_TP_FORM_TYPE FormType,
         CSSM_DATA_PTR BlankForm);
    CSSM_RETURN ( *FormSubmit)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_TP_FORM_TYPE FormType,
         const CSSM_DATA *Form,
         const CSSM_TP_AUTHORITY_ID *ClearanceAuthority,
         const CSSM_TP_AUTHORITY_ID *RepresentedAuthority,
         CSSM_ACCESS_CREDENTIALS_PTR Credentials);
    CSSM_RETURN ( *CertGroupVerify)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_CERTGROUP *CertGroupToBeVerified,
         const CSSM_TP_VERIFY_CONTEXT *VerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR VerifyContextResult);
    CSSM_RETURN ( *CertCreateTemplate)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         uint32 NumberOfFields,
         const CSSM_FIELD *CertFields,
         CSSM_DATA_PTR CertTemplate);
    CSSM_RETURN ( *CertGetAllTemplateFields)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         const CSSM_DATA *CertTemplate,
         uint32 *NumberOfFields,
         CSSM_FIELD_PTR *CertFields);
    CSSM_RETURN ( *CertSign)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DATA *CertTemplateToBeSigned,
         const CSSM_CERTGROUP *SignerCertGroup,
         const CSSM_TP_VERIFY_CONTEXT *SignerVerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR SignerVerifyResult,
         CSSM_DATA_PTR SignedCert);
    CSSM_RETURN ( *CrlVerify)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ENCODED_CRL *CrlToBeVerified,
         const CSSM_CERTGROUP *SignerCertGroup,
         const CSSM_TP_VERIFY_CONTEXT *VerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR RevokerVerifyResult);
    CSSM_RETURN ( *CrlCreateTemplate)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         uint32 NumberOfFields,
         const CSSM_FIELD *CrlFields,
         CSSM_DATA_PTR NewCrlTemplate);
    CSSM_RETURN ( *CertRevoke)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_DATA *OldCrlTemplate,
         const CSSM_CERTGROUP *CertGroupToBeRevoked,
         const CSSM_CERTGROUP *RevokerCertGroup,
         const CSSM_TP_VERIFY_CONTEXT *RevokerVerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR RevokerVerifyResult,
         CSSM_TP_CERTCHANGE_REASON Reason,
         CSSM_DATA_PTR NewCrlTemplate);
    CSSM_RETURN ( *CertRemoveFromCrlTemplate)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_DATA *OldCrlTemplate,
         const CSSM_CERTGROUP *CertGroupToBeRemoved,
         const CSSM_CERTGROUP *RevokerCertGroup,
         const CSSM_TP_VERIFY_CONTEXT *RevokerVerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR RevokerVerifyResult,
         CSSM_DATA_PTR NewCrlTemplate);
    CSSM_RETURN ( *CrlSign)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_ENCODED_CRL *CrlToBeSigned,
         const CSSM_CERTGROUP *SignerCertGroup,
         const CSSM_TP_VERIFY_CONTEXT *SignerVerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR SignerVerifyResult,
         CSSM_DATA_PTR SignedCrl);
    CSSM_RETURN ( *ApplyCrlToDb)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_ENCODED_CRL *CrlToBeApplied,
         const CSSM_CERTGROUP *SignerCertGroup,
         const CSSM_TP_VERIFY_CONTEXT *ApplyCrlVerifyContext,
         CSSM_TP_VERIFY_CONTEXT_RESULT_PTR ApplyCrlVerifyResult);
    CSSM_RETURN ( *CertGroupConstruct)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CSP_HANDLE CSPHandle,
         const CSSM_DL_DB_LIST *DBList,
         const void *ConstructParams,
         const CSSM_CERTGROUP *CertGroupFrag,
         CSSM_CERTGROUP_PTR *CertGroup);
    CSSM_RETURN ( *CertGroupPrune)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         const CSSM_DL_DB_LIST *DBList,
         const CSSM_CERTGROUP *OrderedCertGroup,
         CSSM_CERTGROUP_PTR *PrunedCertGroup);
    CSSM_RETURN ( *CertGroupToTupleGroup)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         const CSSM_CERTGROUP *CertGroup,
         CSSM_TUPLEGROUP_PTR *TupleGroup);
    CSSM_RETURN ( *TupleGroupToCertGroup)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         const CSSM_TUPLEGROUP *TupleGroup,
         CSSM_CERTGROUP_PTR *CertTemplates);
    CSSM_RETURN ( *PassThrough)
        (CSSM_TP_HANDLE TPHandle,
         CSSM_CL_HANDLE CLHandle,
         CSSM_CC_HANDLE CCHandle,
         const CSSM_DL_DB_LIST *DBList,
         uint32 PassThroughId,
         const void *InputParams,
         void **OutputParams);
} CSSM_SPI_TP_FUNCS, *CSSM_SPI_TP_FUNCS_PTR;


}
# 38 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/emmspi.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/emmspi.h" 3
extern "C" {


typedef struct cssm_state_funcs {
    CSSM_RETURN ( *cssm_GetAttachFunctions)
        (CSSM_MODULE_HANDLE hAddIn,
         CSSM_SERVICE_MASK AddinType,
         void **SPFunctions,
         CSSM_GUID_PTR Guid,
  CSSM_BOOL *Serialized);
    CSSM_RETURN ( *cssm_ReleaseAttachFunctions)
        (CSSM_MODULE_HANDLE hAddIn);
    CSSM_RETURN ( *cssm_GetAppMemoryFunctions)
        (CSSM_MODULE_HANDLE hAddIn,
         CSSM_UPCALLS_PTR UpcallTable);
    CSSM_RETURN ( *cssm_IsFuncCallValid)
        (CSSM_MODULE_HANDLE hAddin,
         CSSM_PROC_ADDR SrcAddress,
         CSSM_PROC_ADDR DestAddress,
         CSSM_PRIVILEGE InPriv,
         CSSM_PRIVILEGE *OutPriv,
         CSSM_BITMASK Hints,
         CSSM_BOOL *IsOK);
    CSSM_RETURN ( *cssm_DeregisterManagerServices)
        (const CSSM_GUID *GUID);
    CSSM_RETURN ( *cssm_DeliverModuleManagerEvent)
        (const CSSM_MANAGER_EVENT_NOTIFICATION *EventDescription);
} CSSM_STATE_FUNCS, *CSSM_STATE_FUNCS_PTR;

typedef struct cssm_manager_registration_info {

    CSSM_RETURN ( *Initialize)
        (uint32 VerMajor,
         uint32 VerMinor);
    CSSM_RETURN ( *Terminate) (void);
    CSSM_RETURN ( *RegisterDispatchTable)
        (CSSM_STATE_FUNCS_PTR CssmStateCallTable);
    CSSM_RETURN ( *DeregisterDispatchTable) (void);
    CSSM_RETURN ( *EventNotifyManager)
        (const CSSM_MANAGER_EVENT_NOTIFICATION *EventDescription);
    CSSM_RETURN ( *RefreshFunctionTable)
        (CSSM_FUNC_NAME_ADDR_PTR FuncNameAddrPtr,
         uint32 NumOfFuncNameAddr);
} CSSM_MANAGER_REGISTRATION_INFO, *CSSM_MANAGER_REGISTRATION_INFO_PTR;

enum {
 CSSM_HINT_NONE = 0,
 CSSM_HINT_ADDRESS_APP = 1 << 0,
 CSSM_HINT_ADDRESS_SP = 1 << 1
};

CSSM_RETURN
ModuleManagerAuthenticate (CSSM_KEY_HIERARCHY KeyHierarchy,
                           const CSSM_GUID *CssmGuid,
                           const CSSM_GUID *AppGuid,
                           CSSM_MANAGER_REGISTRATION_INFO_PTR FunctionTable);


}
# 40 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/mds.h" 1 3
# 33 "/System/Library/Frameworks/Security.framework/Headers/mds.h" 3
extern "C" {


typedef CSSM_DL_HANDLE MDS_HANDLE;

typedef CSSM_DL_DB_HANDLE MDS_DB_HANDLE;

typedef struct mds_funcs {
    CSSM_RETURN ( *DbOpen)
        (MDS_HANDLE MdsHandle,
         const char *DbName,
         const CSSM_NET_ADDRESS *DbLocation,
         CSSM_DB_ACCESS_TYPE AccessRequest,
         const CSSM_ACCESS_CREDENTIALS *AccessCred,
         const void *OpenParameters,
         CSSM_DB_HANDLE *hMds);

    CSSM_RETURN ( *DbClose)
        (MDS_DB_HANDLE MdsDbHandle);

    CSSM_RETURN ( *GetDbNames)
        (MDS_HANDLE MdsHandle,
         CSSM_NAME_LIST_PTR *NameList);

    CSSM_RETURN ( *GetDbNameFromHandle)
        (MDS_DB_HANDLE MdsDbHandle,
         char **DbName);

    CSSM_RETURN ( *FreeNameList)
        (MDS_HANDLE MdsHandle,
         CSSM_NAME_LIST_PTR NameList);

    CSSM_RETURN ( *DataInsert)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_DB_RECORDTYPE RecordType,
         const CSSM_DB_RECORD_ATTRIBUTE_DATA *Attributes,
         const CSSM_DATA *Data,
         CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);

    CSSM_RETURN ( *DataDelete)
        (MDS_DB_HANDLE MdsDbHandle,
         const CSSM_DB_UNIQUE_RECORD *UniqueRecordIdentifier);

    CSSM_RETURN ( *DataModify)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_DB_RECORDTYPE RecordType,
         CSSM_DB_UNIQUE_RECORD_PTR UniqueRecordIdentifier,
         const CSSM_DB_RECORD_ATTRIBUTE_DATA *AttributesToBeModified,
         const CSSM_DATA *DataToBeModified,
         CSSM_DB_MODIFY_MODE ModifyMode);

    CSSM_RETURN ( *DataGetFirst)
        (MDS_DB_HANDLE MdsDbHandle,
         const CSSM_QUERY *Query,
         CSSM_HANDLE_PTR ResultsHandle,
         CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
         CSSM_DATA_PTR Data,
         CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);

    CSSM_RETURN ( *DataGetNext)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_HANDLE ResultsHandle,
         CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
         CSSM_DATA_PTR Data,
         CSSM_DB_UNIQUE_RECORD_PTR *UniqueId);

    CSSM_RETURN ( *DataAbortQuery)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_HANDLE ResultsHandle);

    CSSM_RETURN ( *DataGetFromUniqueRecordId)
        (MDS_DB_HANDLE MdsDbHandle,
         const CSSM_DB_UNIQUE_RECORD *UniqueRecord,
         CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
         CSSM_DATA_PTR Data);

    CSSM_RETURN ( *FreeUniqueRecord)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord);

    CSSM_RETURN ( *CreateRelation)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_DB_RECORDTYPE RelationID,
         const char *RelationName,
         uint32 NumberOfAttributes,
         const CSSM_DB_SCHEMA_ATTRIBUTE_INFO *pAttributeInfo,
         uint32 NumberOfIndexes,
         const CSSM_DB_SCHEMA_INDEX_INFO *pIndexInfo);

    CSSM_RETURN ( *DestroyRelation)
        (MDS_DB_HANDLE MdsDbHandle,
         CSSM_DB_RECORDTYPE RelationID);
} MDS_FUNCS, *MDS_FUNCS_PTR;




CSSM_RETURN
MDS_Initialize (const CSSM_GUID *pCallerGuid,
                const CSSM_MEMORY_FUNCS *pMemoryFunctions,
                MDS_FUNCS_PTR pDlFunctions,
                MDS_HANDLE *hMds);

CSSM_RETURN
MDS_Terminate (MDS_HANDLE MdsHandle);

CSSM_RETURN
MDS_Install (MDS_HANDLE MdsHandle);

CSSM_RETURN
MDS_Uninstall (MDS_HANDLE MdsHandle);


}
# 42 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/mds_schema.h" 1 3
# 33 "/System/Library/Frameworks/Security.framework/Headers/mds_schema.h" 3
extern "C" {
# 189 "/System/Library/Frameworks/Security.framework/Headers/mds_schema.h" 3
}
# 43 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/oidsalg.h" 1 3
# 32 "/System/Library/Frameworks/Security.framework/Headers/oidsalg.h" 3
extern "C" {


extern const CSSM_OID
 CSSMOID_MD2,
 CSSMOID_MD4,
 CSSMOID_MD5,
 CSSMOID_RSA,
 CSSMOID_MD2WithRSA,
 CSSMOID_MD4WithRSA,
 CSSMOID_MD5WithRSA,
 CSSMOID_SHA1WithRSA,
 CSSMOID_SHA224WithRSA,
 CSSMOID_SHA256WithRSA,
 CSSMOID_SHA384WithRSA,
 CSSMOID_SHA512WithRSA,
 CSSMOID_SHA1WithRSA_OIW,
 CSSMOID_RSAWithOAEP,
 CSSMOID_OAEP_MGF1,
 CSSMOID_OAEP_ID_PSPECIFIED,
 CSSMOID_DES_CBC,
 CSSMOID_ANSI_DH_PUB_NUMBER,
 CSSMOID_ANSI_DH_STATIC,
 CSSMOID_ANSI_DH_ONE_FLOW,
 CSSMOID_ANSI_DH_EPHEM,
 CSSMOID_ANSI_DH_HYBRID1,
 CSSMOID_ANSI_DH_HYBRID2,
 CSSMOID_ANSI_DH_HYBRID_ONEFLOW,
 CSSMOID_ANSI_MQV1,
 CSSMOID_ANSI_MQV2,
 CSSMOID_ANSI_DH_STATIC_SHA1,
 CSSMOID_ANSI_DH_ONE_FLOW_SHA1,
 CSSMOID_ANSI_DH_EPHEM_SHA1,
 CSSMOID_ANSI_DH_HYBRID1_SHA1,
 CSSMOID_ANSI_DH_HYBRID2_SHA1,
 CSSMOID_ANSI_MQV1_SHA1,
 CSSMOID_ANSI_MQV2_SHA1,
 CSSMOID_PKCS3,
 CSSMOID_DH,
 CSSMOID_DSA,
 CSSMOID_DSA_CMS,
 CSSMOID_DSA_JDK,
 CSSMOID_SHA1WithDSA,
 CSSMOID_SHA1WithDSA_CMS,
 CSSMOID_SHA1WithDSA_JDK,
 CSSMOID_SHA1,
 CSSMOID_SHA224,
 CSSMOID_SHA256,
 CSSMOID_SHA384,
 CSSMOID_SHA512,
 CSSMOID_APPLE_ISIGN,
 CSSMOID_APPLE_X509_BASIC,
 CSSMOID_APPLE_TP_SSL,
 CSSMOID_APPLE_TP_LOCAL_CERT_GEN,
 CSSMOID_APPLE_TP_CSR_GEN,
 CSSMOID_APPLE_TP_REVOCATION_CRL,
 CSSMOID_APPLE_TP_REVOCATION_OCSP,
 CSSMOID_APPLE_TP_SMIME,
 CSSMOID_APPLE_TP_EAP,
 CSSMOID_APPLE_TP_CODE_SIGN,
 CSSMOID_APPLE_TP_SW_UPDATE_SIGNING,
 CSSMOID_APPLE_TP_IP_SEC,
 CSSMOID_APPLE_TP_ICHAT,
 CSSMOID_APPLE_TP_RESOURCE_SIGN,
 CSSMOID_APPLE_TP_PKINIT_CLIENT,
 CSSMOID_APPLE_TP_PKINIT_SERVER,
 CSSMOID_APPLE_TP_CODE_SIGNING,
 CSSMOID_APPLE_TP_PACKAGE_SIGNING,
 CSSMOID_APPLE_FEE,
 CSSMOID_APPLE_ASC,
 CSSMOID_APPLE_FEE_MD5,
 CSSMOID_APPLE_FEE_SHA1,
 CSSMOID_APPLE_FEED,
 CSSMOID_APPLE_FEEDEXP,
 CSSMOID_APPLE_ECDSA,
 CSSMOID_DOTMAC_CERT,
 CSSMOID_DOTMAC_CERT_REQ,
 CSSMOID_DOTMAC_CERT_REQ_IDENTITY,
 CSSMOID_DOTMAC_CERT_REQ_EMAIL_SIGN,
 CSSMOID_DOTMAC_CERT_REQ_EMAIL_ENCRYPT,
 CSSMOID_DOTMAC_CERT_REQ_ARCHIVE_LIST,
 CSSMOID_DOTMAC_CERT_REQ_ARCHIVE_STORE,
 CSSMOID_DOTMAC_CERT_REQ_ARCHIVE_FETCH,
 CSSMOID_DOTMAC_CERT_REQ_ARCHIVE_REMOVE,
 CSSMOID_DOTMAC_CERT_REQ_VALUE_USERNAME,
 CSSMOID_DOTMAC_CERT_REQ_VALUE_PASSWORD,
 CSSMOID_DOTMAC_CERT_REQ_VALUE_HOSTNAME,
 CSSMOID_DOTMAC_CERT_REQ_VALUE_RENEW,
 CSSMOID_DOTMAC_CERT_REQ_VALUE_ASYNC,
 CSSMOID_DOTMAC_CERT_REQ_VALUE_IS_PENDING,
 CSSMOID_PKCS5_DIGEST_ALG,
 CSSMOID_PKCS5_ENCRYPT_ALG,
 CSSMOID_PKCS5_HMAC_SHA1,
 CSSMOID_PKCS5_pbeWithMD2AndDES,
 CSSMOID_PKCS5_pbeWithMD2AndRC2,
 CSSMOID_PKCS5_pbeWithMD5AndDES,
 CSSMOID_PKCS5_pbeWithMD5AndRC2,
 CSSMOID_PKCS5_pbeWithSHA1AndDES,
 CSSMOID_PKCS5_pbeWithSHA1AndRC2,
 CSSMOID_PKCS5_PBKDF2,
 CSSMOID_PKCS5_PBES2,
 CSSMOID_PKCS5_PBMAC1,
 CSSMOID_PKCS5_RC2_CBC,
 CSSMOID_PKCS5_DES_EDE3_CBC,
 CSSMOID_PKCS5_RC5_CBC,
 CSSMOID_PKCS12_pbeWithSHAAnd128BitRC4,
 CSSMOID_PKCS12_pbeWithSHAAnd40BitRC4,
 CSSMOID_PKCS12_pbeWithSHAAnd3Key3DESCBC,
 CSSMOID_PKCS12_pbeWithSHAAnd2Key3DESCBC,
 CSSMOID_PKCS12_pbeWithSHAAnd128BitRC2CBC,
 CSSMOID_PKCS12_pbewithSHAAnd40BitRC2CBC;


}
# 44 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/oidsattr.h" 1 3
# 30 "/System/Library/Frameworks/Security.framework/Headers/oidsattr.h" 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/oidsbase.h" 1 3
# 30 "/System/Library/Frameworks/Security.framework/Headers/oidsbase.h" 3
extern "C" {
# 287 "/System/Library/Frameworks/Security.framework/Headers/oidsbase.h" 3
}
# 31 "/System/Library/Frameworks/Security.framework/Headers/oidsattr.h" 2 3




extern const CSSM_OID
 CSSMOID_ObjectClass,
 CSSMOID_AliasedEntryName,
 CSSMOID_KnowledgeInformation,
 CSSMOID_CommonName,
 CSSMOID_Surname,
 CSSMOID_SerialNumber,
 CSSMOID_CountryName,
 CSSMOID_LocalityName,
 CSSMOID_StateProvinceName,
 CSSMOID_CollectiveStateProvinceName,
 CSSMOID_StreetAddress,
 CSSMOID_CollectiveStreetAddress,
 CSSMOID_OrganizationName,
 CSSMOID_CollectiveOrganizationName,
 CSSMOID_OrganizationalUnitName,
 CSSMOID_CollectiveOrganizationalUnitName,
 CSSMOID_Title,
 CSSMOID_Description,
 CSSMOID_SearchGuide,
 CSSMOID_BusinessCategory,
 CSSMOID_PostalAddress,
 CSSMOID_CollectivePostalAddress,
 CSSMOID_PostalCode,
 CSSMOID_CollectivePostalCode,
 CSSMOID_PostOfficeBox,
 CSSMOID_CollectivePostOfficeBox,
 CSSMOID_PhysicalDeliveryOfficeName,
 CSSMOID_CollectivePhysicalDeliveryOfficeName,
 CSSMOID_TelephoneNumber,
 CSSMOID_CollectiveTelephoneNumber,
 CSSMOID_TelexNumber,
 CSSMOID_CollectiveTelexNumber,
 CSSMOID_TelexTerminalIdentifier,
 CSSMOID_CollectiveTelexTerminalIdentifier,
 CSSMOID_FacsimileTelephoneNumber,
 CSSMOID_CollectiveFacsimileTelephoneNumber,
 CSSMOID_X_121Address,
 CSSMOID_InternationalISDNNumber,
 CSSMOID_CollectiveInternationalISDNNumber,
 CSSMOID_RegisteredAddress,
 CSSMOID_DestinationIndicator,
 CSSMOID_PreferredDeliveryMethod,
 CSSMOID_PresentationAddress,
 CSSMOID_SupportedApplicationContext,
 CSSMOID_Member,
 CSSMOID_Owner,
 CSSMOID_RoleOccupant,
 CSSMOID_SeeAlso,
 CSSMOID_UserPassword,
 CSSMOID_UserCertificate,
 CSSMOID_CACertificate,
 CSSMOID_AuthorityRevocationList,
 CSSMOID_CertificateRevocationList,
 CSSMOID_CrossCertificatePair,
 CSSMOID_Name,
 CSSMOID_GivenName,
 CSSMOID_Initials,
 CSSMOID_GenerationQualifier,
 CSSMOID_UniqueIdentifier,
 CSSMOID_DNQualifier,
 CSSMOID_EnhancedSearchGuide,
 CSSMOID_ProtocolInformation,
 CSSMOID_DistinguishedName,
 CSSMOID_UniqueMember,
 CSSMOID_HouseIdentifier;


extern const CSSM_OID
 CSSMOID_EmailAddress,
 CSSMOID_UnstructuredName,
 CSSMOID_ContentType,
 CSSMOID_MessageDigest,
 CSSMOID_SigningTime,
 CSSMOID_CounterSignature,
 CSSMOID_ChallengePassword,
 CSSMOID_UnstructuredAddress,
 CSSMOID_ExtendedCertificateAttributes;


extern const CSSM_OID
 CSSMOID_QT_CPS,
 CSSMOID_QT_UNOTICE,
 CSSMOID_AD_OCSP,
 CSSMOID_AD_CA_ISSUERS,
 CSSMOID_AD_TIME_STAMPING,
 CSSMOID_AD_CA_REPOSITORY,
 CSSMOID_PDA_DATE_OF_BIRTH,
 CSSMOID_PDA_PLACE_OF_BIRTH,
 CSSMOID_PDA_GENDER,
 CSSMOID_PDA_COUNTRY_CITIZEN,
 CSSMOID_PDA_COUNTRY_RESIDENCE,
 CSSMOID_OID_QCS_SYNTAX_V1,
 CSSMOID_OID_QCS_SYNTAX_V2;


extern const CSSM_OID
 CSSMOID_ETSI_QCS_QC_COMPLIANCE,
 CSSMOID_ETSI_QCS_QC_LIMIT_VALUE,
 CSSMOID_ETSI_QCS_QC_RETENTION,
 CSSMOID_ETSI_QCS_QC_SSCD;


extern const CSSM_OID
 CSSMOID_PKCS7_Data,
 CSSMOID_PKCS7_SignedData,
 CSSMOID_PKCS7_EnvelopedData,
 CSSMOID_PKCS7_SignedAndEnvelopedData,
 CSSMOID_PKCS7_DigestedData,
 CSSMOID_PKCS7_EncryptedData,
 CSSMOID_PKCS7_DataWithAttributes,
 CSSMOID_PKCS7_EncryptedPrivateKeyInfo,


 CSSMOID_PKCS9_FriendlyName,
 CSSMOID_PKCS9_LocalKeyId,
 CSSMOID_PKCS9_CertTypes,
 CSSMOID_PKCS9_CrlTypes,
 CSSMOID_PKCS9_X509Certificate,
 CSSMOID_PKCS9_SdsiCertificate,
 CSSMOID_PKCS9_X509Crl,


 CSSMOID_PKCS12_keyBag,
 CSSMOID_PKCS12_shroudedKeyBag,
 CSSMOID_PKCS12_certBag,
 CSSMOID_PKCS12_crlBag,
 CSSMOID_PKCS12_secretBag,
 CSSMOID_PKCS12_safeContentsBag,


 CSSMOID_KERBv5_PKINIT_AUTH_DATA,
 CSSMOID_KERBv5_PKINIT_DH_KEY_DATA,
 CSSMOID_KERBv5_PKINIT_RKEY_DATA;
# 45 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/oidscert.h" 1 3
# 34 "/System/Library/Frameworks/Security.framework/Headers/oidscert.h" 3
extern "C" {
# 55 "/System/Library/Frameworks/Security.framework/Headers/oidscert.h" 3
extern const CSSM_OID

 CSSMOID_X509V3SignedCertificate,
 CSSMOID_X509V3SignedCertificateCStruct,
 CSSMOID_X509V3Certificate,
 CSSMOID_X509V3CertificateCStruct,
 CSSMOID_X509V1Version,
 CSSMOID_X509V1SerialNumber,
 CSSMOID_X509V1IssuerName,
 CSSMOID_X509V1IssuerNameStd,
 CSSMOID_X509V1IssuerNameCStruct,
 CSSMOID_X509V1IssuerNameLDAP,
 CSSMOID_X509V1ValidityNotBefore,
 CSSMOID_X509V1ValidityNotAfter,
 CSSMOID_X509V1SubjectName,
 CSSMOID_X509V1SubjectNameStd,
 CSSMOID_X509V1SubjectNameCStruct,
 CSSMOID_X509V1SubjectNameLDAP,
 CSSMOID_CSSMKeyStruct,
 CSSMOID_X509V1SubjectPublicKeyCStruct,
 CSSMOID_X509V1SubjectPublicKeyAlgorithm,
 CSSMOID_X509V1SubjectPublicKeyAlgorithmParameters,
 CSSMOID_X509V1SubjectPublicKey,
 CSSMOID_X509V1CertificateIssuerUniqueId,
 CSSMOID_X509V1CertificateSubjectUniqueId,
 CSSMOID_X509V3CertificateExtensionsStruct,
 CSSMOID_X509V3CertificateExtensionsCStruct,
 CSSMOID_X509V3CertificateNumberOfExtensions,
 CSSMOID_X509V3CertificateExtensionStruct,
 CSSMOID_X509V3CertificateExtensionCStruct,
 CSSMOID_X509V3CertificateExtensionId,
 CSSMOID_X509V3CertificateExtensionCritical,
 CSSMOID_X509V3CertificateExtensionType,
 CSSMOID_X509V3CertificateExtensionValue,


 CSSMOID_X509V1SignatureStruct,
 CSSMOID_X509V1SignatureCStruct,
 CSSMOID_X509V1SignatureAlgorithm,
 CSSMOID_X509V1SignatureAlgorithmTBS,
 CSSMOID_X509V1SignatureAlgorithmParameters,
 CSSMOID_X509V1Signature,


 CSSMOID_SubjectSignatureBitmap,
 CSSMOID_SubjectPicture,
 CSSMOID_SubjectEmailAddress,
 CSSMOID_UseExemptions;
# 111 "/System/Library/Frameworks/Security.framework/Headers/oidscert.h" 3
extern const CSSM_OID
 CSSMOID_SubjectDirectoryAttributes,
 CSSMOID_SubjectKeyIdentifier,
 CSSMOID_KeyUsage,
 CSSMOID_PrivateKeyUsagePeriod,
 CSSMOID_SubjectAltName,
 CSSMOID_IssuerAltName,
 CSSMOID_BasicConstraints,
 CSSMOID_CrlNumber,
 CSSMOID_CrlReason,
 CSSMOID_HoldInstructionCode,
 CSSMOID_InvalidityDate,
 CSSMOID_DeltaCrlIndicator,
 CSSMOID_IssuingDistributionPoint,
 CSSMOID_IssuingDistributionPoints,
 CSSMOID_CertIssuer,
 CSSMOID_NameConstraints,
 CSSMOID_CrlDistributionPoints,
 CSSMOID_CertificatePolicies,
 CSSMOID_PolicyMappings,
 CSSMOID_PolicyConstraints,
 CSSMOID_AuthorityKeyIdentifier,
 CSSMOID_ExtendedKeyUsage,
 CSSMOID_AuthorityInfoAccess,
 CSSMOID_BiometricInfo,
 CSSMOID_QC_Statements,
 CSSMOID_SubjectInfoAccess,
 CSSMOID_ExtendedKeyUsageAny,
 CSSMOID_ServerAuth,
 CSSMOID_ClientAuth,
 CSSMOID_ExtendedUseCodeSigning,
 CSSMOID_EmailProtection,
 CSSMOID_TimeStamping,
 CSSMOID_OCSPSigning,
 CSSMOID_KERBv5_PKINIT_KP_CLIENT_AUTH,
 CSSMOID_KERBv5_PKINIT_KP_KDC,
 CSSMOID_DOTMAC_CERT_EXTENSION,
 CSSMOID_DOTMAC_CERT_IDENTITY,
 CSSMOID_DOTMAC_CERT_EMAIL_SIGN,
 CSSMOID_DOTMAC_CERT_EMAIL_ENCRYPT,
 CSSMOID_APPLE_CERT_POLICY,
 CSSMOID_DOTMAC_CERT_POLICY,
 CSSMOID_APPLE_EKU_CODE_SIGNING,
 CSSMOID_APPLE_EKU_CODE_SIGNING_DEV,
 CSSMOID_APPLE_EKU_RESOURCE_SIGNING,
 CSSMOID_APPLE_EKU_ICHAT_SIGNING,
 CSSMOID_APPLE_EKU_ICHAT_ENCRYPTION,
 CSSMOID_APPLE_EKU_SYSTEM_IDENTITY
;




extern const CSSM_OID
 CSSMOID_NetscapeCertType,
 CSSMOID_NetscapeCertSequence,
 CSSMOID_NetscapeSGC;

extern const CSSM_OID CSSMOID_MicrosoftSGC;
# 186 "/System/Library/Frameworks/Security.framework/Headers/oidscert.h" 3
}
# 47 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/oidscrl.h" 1 3
# 34 "/System/Library/Frameworks/Security.framework/Headers/oidscrl.h" 3
extern "C" {






extern const CSSM_OID

 CSSMOID_X509V2CRLSignedCrlStruct,
 CSSMOID_X509V2CRLSignedCrlCStruct,
 CSSMOID_X509V2CRLTbsCertListStruct,
 CSSMOID_X509V2CRLTbsCertListCStruct,
 CSSMOID_X509V2CRLVersion,
 CSSMOID_X509V1CRLIssuerStruct,
 CSSMOID_X509V1CRLIssuerNameCStruct,
 CSSMOID_X509V1CRLIssuerNameLDAP,
 CSSMOID_X509V1CRLThisUpdate,
 CSSMOID_X509V1CRLNextUpdate,


 CSSMOID_X509V1CRLRevokedCertificatesStruct,
 CSSMOID_X509V1CRLRevokedCertificatesCStruct,
 CSSMOID_X509V1CRLNumberOfRevokedCertEntries,
 CSSMOID_X509V1CRLRevokedEntryStruct,
 CSSMOID_X509V1CRLRevokedEntryCStruct,
 CSSMOID_X509V1CRLRevokedEntrySerialNumber,
 CSSMOID_X509V1CRLRevokedEntryRevocationDate,


 CSSMOID_X509V2CRLRevokedEntryAllExtensionsStruct,
 CSSMOID_X509V2CRLRevokedEntryAllExtensionsCStruct,
 CSSMOID_X509V2CRLRevokedEntryNumberOfExtensions,
 CSSMOID_X509V2CRLRevokedEntrySingleExtensionStruct,
 CSSMOID_X509V2CRLRevokedEntrySingleExtensionCStruct,
 CSSMOID_X509V2CRLRevokedEntryExtensionId,
 CSSMOID_X509V2CRLRevokedEntryExtensionCritical,
 CSSMOID_X509V2CRLRevokedEntryExtensionType,
 CSSMOID_X509V2CRLRevokedEntryExtensionValue,


 CSSMOID_X509V2CRLAllExtensionsStruct,
 CSSMOID_X509V2CRLAllExtensionsCStruct,
 CSSMOID_X509V2CRLNumberOfExtensions,
 CSSMOID_X509V2CRLSingleExtensionStruct,
 CSSMOID_X509V2CRLSingleExtensionCStruct,
 CSSMOID_X509V2CRLExtensionId,
 CSSMOID_X509V2CRLExtensionCritical,
 CSSMOID_X509V2CRLExtensionType,


 CSSMOID_PKIX_OCSP,
 CSSMOID_PKIX_OCSP_BASIC,
 CSSMOID_PKIX_OCSP_NONCE,
 CSSMOID_PKIX_OCSP_CRL,
 CSSMOID_PKIX_OCSP_RESPONSE,
 CSSMOID_PKIX_OCSP_NOCHECK,
 CSSMOID_PKIX_OCSP_ARCHIVE_CUTOFF,
 CSSMOID_PKIX_OCSP_SERVICE_LOCATOR;



}
# 48 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3



# 1 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 1 3
# 39 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 3
extern "C" {







CFTypeID SecAccessGetTypeID(void);
# 62 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 3
OSStatus SecAccessCreate(CFStringRef descriptor, CFArrayRef trustedlist, SecAccessRef *accessRef);
# 73 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 3
OSStatus SecAccessCreateFromOwnerAndACL(const CSSM_ACL_OWNER_PROTOTYPE *owner, uint32 aclCount, const CSSM_ACL_ENTRY_INFO *acls, SecAccessRef *accessRef);
# 84 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 3
OSStatus SecAccessGetOwnerAndACL(SecAccessRef accessRef, CSSM_ACL_OWNER_PROTOTYPE_PTR *owner, uint32 *aclCount, CSSM_ACL_ENTRY_INFO_PTR *acls);
# 93 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 3
OSStatus SecAccessCopyACLList(SecAccessRef accessRef, CFArrayRef *aclList);
# 103 "/System/Library/Frameworks/Security.framework/Headers/SecAccess.h" 3
OSStatus SecAccessCopySelectedACLList(SecAccessRef accessRef, CSSM_ACL_AUTHORIZATION_TAG action, CFArrayRef *aclList);



}
# 52 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 1 3
# 39 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 3
extern "C" {







CFTypeID SecACLGetTypeID(void);
# 59 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 3
OSStatus SecACLCreateFromSimpleContents(SecAccessRef access,
 CFArrayRef applicationList,
 CFStringRef description, const CSSM_ACL_KEYCHAIN_PROMPT_SELECTOR *promptSelector,
 SecACLRef *newAcl);







OSStatus SecACLRemove(SecACLRef aclRef);
# 81 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 3
OSStatus SecACLCopySimpleContents(SecACLRef acl,
 CFArrayRef *applicationList,
 CFStringRef *description, CSSM_ACL_KEYCHAIN_PROMPT_SELECTOR *promptSelector);
# 94 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 3
OSStatus SecACLSetSimpleContents(SecACLRef acl,
 CFArrayRef applicationList,
 CFStringRef description, const CSSM_ACL_KEYCHAIN_PROMPT_SELECTOR *promptSelector);
# 106 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 3
OSStatus SecACLGetAuthorizations(SecACLRef acl,
 CSSM_ACL_AUTHORIZATION_TAG *tags, uint32 *tagCount);
# 117 "/System/Library/Frameworks/Security.framework/Headers/SecACL.h" 3
OSStatus SecACLSetAuthorizations(SecACLRef acl,
 CSSM_ACL_AUTHORIZATION_TAG *tags, uint32 tagCount);



}
# 53 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 1 3
# 43 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
extern "C" {
# 58 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
enum
{
    kSecSubjectItemAttr = 'subj',
    kSecIssuerItemAttr = 'issu',
    kSecSerialNumberItemAttr = 'snbr',
    kSecPublicKeyHashItemAttr = 'hpky',
    kSecSubjectKeyIdentifierItemAttr = 'skid',
 kSecCertTypeItemAttr = 'ctyp',
 kSecCertEncodingItemAttr = 'cenc'
};






CFTypeID SecCertificateGetTypeID(void);

#pragma mark ---- Certificate Operations ----
# 87 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateCreateFromData(const CSSM_DATA *data, CSSM_CERT_TYPE type, CSSM_CERT_ENCODING encoding, SecCertificateRef *certificate);
# 97 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateAddToKeychain(SecCertificateRef certificate, SecKeychainRef keychain);
# 106 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateGetData(SecCertificateRef certificate, CSSM_DATA_PTR data);
# 115 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateGetType(SecCertificateRef certificate, CSSM_CERT_TYPE *certificateType);
# 131 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateGetSubject(SecCertificateRef certificate, const CSSM_X509_NAME **subject);
# 147 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateGetIssuer(SecCertificateRef certificate, const CSSM_X509_NAME **issuer);
# 156 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateGetCLHandle(SecCertificateRef certificate, CSSM_CL_HANDLE *clHandle);
# 165 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateGetAlgorithmID(SecCertificateRef certificate, const CSSM_X509_ALGORITHM_IDENTIFIER **algid);
# 174 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateCopyPublicKey(SecCertificateRef certificate, SecKeyRef *key);
# 183 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateCopyCommonName(SecCertificateRef certificate, CFStringRef *commonName);
# 192 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateCopyEmailAddresses(SecCertificateRef certificate, CFArrayRef *emailAddresses);
# 203 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateCopyPreference(CFStringRef name, CSSM_KEYUSE keyUsage, SecCertificateRef *certificate);
# 215 "/System/Library/Frameworks/Security.framework/Headers/SecCertificate.h" 3
OSStatus SecCertificateSetPreference(SecCertificateRef certificate, CFStringRef name, CSSM_KEYUSE keyUsage, CFDateRef date);



}
# 54 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 1 3
# 39 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
extern "C" {







CFTypeID SecIdentityGetTypeID(void);
# 57 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentityCreateWithCertificate(
   CFTypeRef keychainOrArray,
   SecCertificateRef certificateRef,
            SecIdentityRef *identityRef);
# 69 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentityCopyCertificate(
            SecIdentityRef identityRef,
            SecCertificateRef *certificateRef);
# 80 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentityCopyPrivateKey(
            SecIdentityRef identityRef,
            SecKeyRef *privateKeyRef);
# 94 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentityCopyPreference(CFStringRef name, CSSM_KEYUSE keyUsage, CFArrayRef validIssuers, SecIdentityRef *identity);
# 104 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentitySetPreference(SecIdentityRef identity, CFStringRef name, CSSM_KEYUSE keyUsage);
# 124 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentityCopySystemIdentity(
   CFStringRef domain,
   SecIdentityRef *idRef,
   CFStringRef *actualDomain);
# 142 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
OSStatus SecIdentitySetSystemIdentity(
   CFStringRef domain,
   SecIdentityRef idRef);
# 154 "/System/Library/Frameworks/Security.framework/Headers/SecIdentity.h" 3
extern const CFStringRef kSecIdentityDomainDefault;




extern const CFStringRef kSecIdentityDomainKerberosKDC;


}
# 55 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecIdentitySearch.h" 1 3
# 41 "/System/Library/Frameworks/Security.framework/Headers/SecIdentitySearch.h" 3
extern "C" {






typedef struct OpaqueSecIdentitySearchRef *SecIdentitySearchRef;






CFTypeID SecIdentitySearchGetTypeID(void);
# 66 "/System/Library/Frameworks/Security.framework/Headers/SecIdentitySearch.h" 3
OSStatus SecIdentitySearchCreate(CFTypeRef keychainOrArray, CSSM_KEYUSE keyUsage, SecIdentitySearchRef *searchRef);
# 75 "/System/Library/Frameworks/Security.framework/Headers/SecIdentitySearch.h" 3
OSStatus SecIdentitySearchCopyNext(SecIdentitySearchRef searchRef, SecIdentityRef *identity);


}
# 56 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 1 3
# 39 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
extern "C" {
# 110 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
enum
{
    kSecKeyKeyClass = 0,
    kSecKeyPrintName = 1,
    kSecKeyAlias = 2,
    kSecKeyPermanent = 3,
    kSecKeyPrivate = 4,
    kSecKeyModifiable = 5,
    kSecKeyLabel = 6,
    kSecKeyApplicationTag = 7,
    kSecKeyKeyCreator = 8,
    kSecKeyKeyType = 9,
    kSecKeyKeySizeInBits = 10,
    kSecKeyEffectiveKeySize = 11,
    kSecKeyStartDate = 12,
    kSecKeyEndDate = 13,
    kSecKeySensitive = 14,
    kSecKeyAlwaysSensitive = 15,
    kSecKeyExtractable = 16,
    kSecKeyNeverExtractable = 17,
    kSecKeyEncrypt = 18,
    kSecKeyDecrypt = 19,
    kSecKeyDerive = 20,
    kSecKeySign = 21,
    kSecKeyVerify = 22,
    kSecKeySignRecover = 23,
    kSecKeyVerifyRecover = 24,
    kSecKeyWrap = 25,
    kSecKeyUnwrap = 26
};





typedef uint32 SecCredentialType;
# 154 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
enum
{
 kSecCredentialTypeDefault = 0,
 kSecCredentialTypeWithUI,
 kSecCredentialTypeNoUI
};







CFTypeID SecKeyGetTypeID(void);
# 185 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
OSStatus SecKeyCreatePair(
        SecKeychainRef keychainRef,
        CSSM_ALGORITHMS algorithm,
        uint32 keySizeInBits,
        CSSM_CC_HANDLE contextHandle,
        CSSM_KEYUSE publicKeyUsage,
        uint32 publicKeyAttr,
        CSSM_KEYUSE privateKeyUsage,
        uint32 privateKeyAttr,
        SecAccessRef initialAccess,
        SecKeyRef* publicKey,
        SecKeyRef* privateKey);
# 211 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
OSStatus SecKeyGenerate(
        SecKeychainRef keychainRef,
        CSSM_ALGORITHMS algorithm,
        uint32 keySizeInBits,
        CSSM_CC_HANDLE contextHandle,
        CSSM_KEYUSE keyUsage,
        uint32 keyAttr,
        SecAccessRef initialAccess,
        SecKeyRef* keyRef);
# 229 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
OSStatus SecKeyGetCSSMKey(SecKeyRef key, const CSSM_KEY **cssmKey);
# 238 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
OSStatus SecKeyGetCSPHandle(SecKeyRef keyRef, CSSM_CSP_HANDLE *cspHandle);
# 249 "/System/Library/Frameworks/Security.framework/Headers/SecKey.h" 3
OSStatus SecKeyGetCredentials(
        SecKeyRef keyRef,
        CSSM_ACL_AUTHORIZATION_TAG operation,
        SecCredentialType credentialType,
        const CSSM_ACCESS_CREDENTIALS **outCredentials);



}
# 57 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 1 3
# 37 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
extern "C" {
# 47 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
enum
{
    kSecUnlockStateStatus = 1,
    kSecReadPermStatus = 2,
    kSecWritePermStatus = 4
};
# 65 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
struct SecKeychainSettings
{
 UInt32 version;
 Boolean lockOnSleep;
 Boolean useLockInterval;
 UInt32 lockInterval;
};
typedef struct SecKeychainSettings SecKeychainSettings;





typedef FourCharCode SecAuthenticationType;
# 100 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
enum
{
    kSecAuthenticationTypeNTLM = ('ntlm'),
    kSecAuthenticationTypeMSN = ('msna'),
    kSecAuthenticationTypeDPA = ('dpaa'),
    kSecAuthenticationTypeRPA = ('rpaa'),
    kSecAuthenticationTypeHTTPBasic = ('http'),
    kSecAuthenticationTypeHTTPDigest = ('httd'),
    kSecAuthenticationTypeHTMLForm = ('form'),
    kSecAuthenticationTypeDefault = ('dflt'),
    kSecAuthenticationTypeAny = (0)
};





typedef FourCharCode SecProtocolType;
# 157 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
enum
{
    kSecProtocolTypeFTP = 'ftp ',
    kSecProtocolTypeFTPAccount = 'ftpa',
    kSecProtocolTypeHTTP = 'http',
    kSecProtocolTypeIRC = 'irc ',
    kSecProtocolTypeNNTP = 'nntp',
    kSecProtocolTypePOP3 = 'pop3',
    kSecProtocolTypeSMTP = 'smtp',
    kSecProtocolTypeSOCKS = 'sox ',
    kSecProtocolTypeIMAP = 'imap',
    kSecProtocolTypeLDAP = 'ldap',
    kSecProtocolTypeAppleTalk = 'atlk',
    kSecProtocolTypeAFP = 'afp ',
    kSecProtocolTypeTelnet = 'teln',
    kSecProtocolTypeSSH = 'ssh ',
    kSecProtocolTypeFTPS = 'ftps',
    kSecProtocolTypeHTTPS = 'htps',
    kSecProtocolTypeHTTPProxy = 'htpx',
    kSecProtocolTypeHTTPSProxy = 'htsx',
    kSecProtocolTypeFTPProxy = 'ftpx',
    kSecProtocolTypeCIFS = 'cifs',
    kSecProtocolTypeSMB = 'smb ',
    kSecProtocolTypeRTSP = 'rtsp',
    kSecProtocolTypeRTSPProxy = 'rtsx',
    kSecProtocolTypeDAAP = 'daap',
    kSecProtocolTypeEPPC = 'eppc',
    kSecProtocolTypeIPP = 'ipp ',
    kSecProtocolTypeNNTPS = 'ntps',
    kSecProtocolTypeLDAPS = 'ldps',
    kSecProtocolTypeTelnetS = 'tels',
    kSecProtocolTypeIMAPS = 'imps',
    kSecProtocolTypeIRCS = 'ircs',
    kSecProtocolTypePOP3S = 'pops',
    kSecProtocolTypeCVSpserver = 'cvsp',
    kSecProtocolTypeSVN = 'svn ',
    kSecProtocolTypeAny = 0
};





typedef UInt32 SecKeychainEvent;
# 216 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
enum
{
    kSecLockEvent = 1,
    kSecUnlockEvent = 2,
    kSecAddEvent = 3,
    kSecDeleteEvent = 4,
    kSecUpdateEvent = 5,
    kSecPasswordChangedEvent = 6,
    kSecDefaultChangedEvent = 9,
    kSecDataAccessEvent = 10,
    kSecKeychainListChangedEvent = 11,
 kSecTrustSettingsChangedEvent = 12
};





typedef UInt32 SecKeychainEventMask;
# 250 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
enum
{
    kSecLockEventMask = 1 << kSecLockEvent,
    kSecUnlockEventMask = 1 << kSecUnlockEvent,
    kSecAddEventMask = 1 << kSecAddEvent,
    kSecDeleteEventMask = 1 << kSecDeleteEvent,
    kSecUpdateEventMask = 1 << kSecUpdateEvent,
    kSecPasswordChangedEventMask = 1 << kSecPasswordChangedEvent,
    kSecDefaultChangedEventMask = 1 << kSecDefaultChangedEvent,
    kSecDataAccessEventMask = 1 << kSecDataAccessEvent,
    kSecKeychainListChangedMask = 1 << kSecKeychainListChangedEvent,
 kSecTrustSettingsChangedEventMask = 1 << kSecTrustSettingsChangedEvent,
    kSecEveryEventMask = 0xffffffff
};
# 274 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
struct SecKeychainCallbackInfo
{
    UInt32 version;
    SecKeychainItemRef item;
    SecKeychainRef keychain;
 pid_t pid;
};
typedef struct SecKeychainCallbackInfo SecKeychainCallbackInfo;






CFTypeID SecKeychainGetTypeID(void);







OSStatus SecKeychainGetVersion(UInt32 *returnVers);

#pragma mark ---- Keychain Management ----
# 308 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainOpen(const char *pathName, SecKeychainRef *keychain);
# 321 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainCreate(const char *pathName, UInt32 passwordLength, const void *password, Boolean promptUser, SecAccessRef initialAccess, SecKeychainRef *keychain);







OSStatus SecKeychainDelete(SecKeychainRef keychainOrArray);
# 338 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainSetSettings(SecKeychainRef keychain, const SecKeychainSettings *newSettings);
# 347 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainCopySettings(SecKeychainRef keychain, SecKeychainSettings *outSettings);
# 359 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainUnlock(SecKeychainRef keychain, UInt32 passwordLength, const void *password, Boolean usePassword);







OSStatus SecKeychainLock(SecKeychainRef keychain);






OSStatus SecKeychainLockAll(void);







OSStatus SecKeychainCopyDefault(SecKeychainRef *keychain);







OSStatus SecKeychainSetDefault(SecKeychainRef keychain);







OSStatus SecKeychainCopySearchList(CFArrayRef *searchList);







OSStatus SecKeychainSetSearchList(CFArrayRef searchList);






typedef enum {
 kSecPreferencesDomainUser,
 kSecPreferencesDomainSystem,
 kSecPreferencesDomainCommon,
 kSecPreferencesDomainDynamic
} SecPreferencesDomain;

OSStatus SecKeychainCopyDomainDefault(SecPreferencesDomain domain, SecKeychainRef *keychain);
OSStatus SecKeychainSetDomainDefault(SecPreferencesDomain domain, SecKeychainRef keychain);
OSStatus SecKeychainCopyDomainSearchList(SecPreferencesDomain domain, CFArrayRef *searchList);
OSStatus SecKeychainSetDomainSearchList(SecPreferencesDomain domain, CFArrayRef searchList);
OSStatus SecKeychainSetPreferenceDomain(SecPreferencesDomain domain);
OSStatus SecKeychainGetPreferenceDomain(SecPreferencesDomain *domain);
# 435 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainGetStatus(SecKeychainRef keychain, SecKeychainStatus *keychainStatus);
# 445 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainGetPath(SecKeychainRef keychain, UInt32 *ioPathLength, char *pathName);

#pragma mark ---- Keychain Item Attribute Information ----
# 457 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainAttributeInfoForItemID(SecKeychainRef keychain, UInt32 itemID, SecKeychainAttributeInfo **info);







OSStatus SecKeychainFreeAttributeInfo(SecKeychainAttributeInfo *info);

#pragma mark ---- Keychain Manager Callbacks ----
# 484 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
typedef OSStatus (*SecKeychainCallback)(SecKeychainEvent keychainEvent, SecKeychainCallbackInfo *info, void *context);
# 494 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainAddCallback(SecKeychainCallback callbackFunction, SecKeychainEventMask eventMask, void* userContext);







OSStatus SecKeychainRemoveCallback(SecKeychainCallback callbackFunction);

#pragma mark ---- High Level Keychain Manager Calls ----
# 526 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainAddInternetPassword(SecKeychainRef keychain, UInt32 serverNameLength, const char *serverName, UInt32 securityDomainLength, const char *securityDomain, UInt32 accountNameLength, const char *accountName, UInt32 pathLength, const char *path, UInt16 port, SecProtocolType protocol, SecAuthenticationType authenticationType, UInt32 passwordLength, const void *passwordData, SecKeychainItemRef *itemRef);
# 549 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainFindInternetPassword(CFTypeRef keychainOrArray, UInt32 serverNameLength, const char *serverName, UInt32 securityDomainLength, const char *securityDomain, UInt32 accountNameLength, const char *accountName, UInt32 pathLength, const char *path, UInt16 port, SecProtocolType protocol, SecAuthenticationType authenticationType, UInt32 *passwordLength, void **passwordData, SecKeychainItemRef *itemRef);
# 565 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainAddGenericPassword(SecKeychainRef keychain, UInt32 serviceNameLength, const char *serviceName, UInt32 accountNameLength, const char *accountName, UInt32 passwordLength, const void *passwordData, SecKeychainItemRef *itemRef);
# 581 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainFindGenericPassword(CFTypeRef keychainOrArray, UInt32 serviceNameLength, const char *serviceName, UInt32 accountNameLength, const char *accountName, UInt32 *passwordLength, void **passwordData, SecKeychainItemRef *itemRef);

#pragma mark ---- Managing User Interaction ----






OSStatus SecKeychainSetUserInteractionAllowed(Boolean state);







OSStatus SecKeychainGetUserInteractionAllowed(Boolean *state);

#pragma mark ---- CSSM Bridge Functions ----







OSStatus SecKeychainGetCSPHandle(SecKeychainRef keychain, CSSM_CSP_HANDLE *cspHandle);
# 617 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainGetDLDBHandle(SecKeychainRef keychain, CSSM_DL_DB_HANDLE *dldbHandle);

#pragma mark ---- Keychain Access Management ----







OSStatus SecKeychainCopyAccess(SecKeychainRef keychain, SecAccessRef *access);
# 636 "/System/Library/Frameworks/Security.framework/Headers/SecKeychain.h" 3
OSStatus SecKeychainSetAccess(SecKeychainRef keychain, SecAccessRef access);


}
# 58 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 1 3
# 38 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
extern "C" {






typedef FourCharCode SecItemClass;
# 59 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
enum
{
    kSecInternetPasswordItemClass = 'inet',
    kSecGenericPasswordItemClass = 'genp',
    kSecAppleSharePasswordItemClass = 'ashp',
    kSecCertificateItemClass = CSSM_DL_DB_RECORD_X509_CERTIFICATE,
    kSecPublicKeyItemClass = CSSM_DL_DB_RECORD_PUBLIC_KEY,
    kSecPrivateKeyItemClass = CSSM_DL_DB_RECORD_PRIVATE_KEY,
    kSecSymmetricKeyItemClass = CSSM_DL_DB_RECORD_SYMMETRIC_KEY
};






typedef FourCharCode SecItemAttr;
# 110 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
enum
{
    kSecCreationDateItemAttr = 'cdat',
    kSecModDateItemAttr = 'mdat',
    kSecDescriptionItemAttr = 'desc',
    kSecCommentItemAttr = 'icmt',
    kSecCreatorItemAttr = 'crtr',
    kSecTypeItemAttr = 'type',
    kSecScriptCodeItemAttr = 'scrp',
    kSecLabelItemAttr = 'labl',
    kSecInvisibleItemAttr = 'invi',
    kSecNegativeItemAttr = 'nega',
    kSecCustomIconItemAttr = 'cusi',
    kSecAccountItemAttr = 'acct',
    kSecServiceItemAttr = 'svce',
    kSecGenericItemAttr = 'gena',
    kSecSecurityDomainItemAttr = 'sdmn',
    kSecServerItemAttr = 'srvr',
    kSecAuthenticationTypeItemAttr = 'atyp',
    kSecPortItemAttr = 'port',
    kSecPathItemAttr = 'path',
    kSecVolumeItemAttr = 'vlme',
    kSecAddressItemAttr = 'addr',
    kSecSignatureItemAttr = 'ssig',
    kSecProtocolItemAttr = 'ptcl',
 kSecCertificateType = 'ctyp',
 kSecCertificateEncoding = 'cenc',
 kSecCrlType = 'crtp',
 kSecCrlEncoding = 'crnc',
 kSecAlias = 'alis'
};





typedef UInt8 SecAFPServerSignature[16];





typedef UInt8 SecPublicKeyHash[20];

#pragma mark ---- Keychain Item Management ----





CFTypeID SecKeychainItemGetTypeID(void);
# 172 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemModifyAttributesAndData(SecKeychainItemRef itemRef, const SecKeychainAttributeList *attrList, UInt32 length, const void *data);
# 186 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemCreateFromContent(SecItemClass itemClass, SecKeychainAttributeList *attrList,
  UInt32 length, const void *data, SecKeychainRef keychainRef,
  SecAccessRef initialAccess, SecKeychainItemRef *itemRef);
# 199 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemModifyContent(SecKeychainItemRef itemRef, const SecKeychainAttributeList *attrList, UInt32 length, const void *data);
# 211 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemCopyContent(SecKeychainItemRef itemRef, SecItemClass *itemClass, SecKeychainAttributeList *attrList, UInt32 *length, void **outData);







OSStatus SecKeychainItemFreeContent(SecKeychainAttributeList *attrList, void *data);
# 232 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemCopyAttributesAndData(SecKeychainItemRef itemRef, SecKeychainAttributeInfo *info, SecItemClass *itemClass, SecKeychainAttributeList **attrList, UInt32 *length, void **outData);
# 241 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemFreeAttributesAndData(SecKeychainAttributeList *attrList, void *data);
# 250 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemDelete(SecKeychainItemRef itemRef);
# 259 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemCopyKeychain(SecKeychainItemRef itemRef, SecKeychainRef *keychainRef);
# 270 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemCreateCopy(SecKeychainItemRef itemRef, SecKeychainRef destKeychainRef,
 SecAccessRef initialAccess, SecKeychainItemRef *itemCopy);


#pragma mark ---- CSSM Bridge Functions ----







OSStatus SecKeychainItemGetDLDBHandle(SecKeychainItemRef keyItemRef, CSSM_DL_DB_HANDLE *dldbHandle);
# 291 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemGetUniqueRecordID(SecKeychainItemRef itemRef, const CSSM_DB_UNIQUE_RECORD **uniqueRecordID);

#pragma mark ---- Keychain Item Access Management ----







OSStatus SecKeychainItemCopyAccess(SecKeychainItemRef itemRef, SecAccessRef *access);
# 310 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h" 3
OSStatus SecKeychainItemSetAccess(SecKeychainItemRef itemRef, SecAccessRef access);


}
# 59 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainSearch.h" 1 3
# 36 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainSearch.h" 3
extern "C" {







CFTypeID SecKeychainSearchGetTypeID(void);
# 55 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainSearch.h" 3
OSStatus SecKeychainSearchCreateFromAttributes(CFTypeRef keychainOrArray, SecItemClass itemClass, const SecKeychainAttributeList *attrList, SecKeychainSearchRef *searchRef);
# 64 "/System/Library/Frameworks/Security.framework/Headers/SecKeychainSearch.h" 3
OSStatus SecKeychainSearchCopyNext(SecKeychainSearchRef searchRef, SecKeychainItemRef *itemRef);


}
# 60 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecPolicy.h" 1 3
# 37 "/System/Library/Frameworks/Security.framework/Headers/SecPolicy.h" 3
extern "C" {







CFTypeID SecPolicyGetTypeID(void);
# 54 "/System/Library/Frameworks/Security.framework/Headers/SecPolicy.h" 3
OSStatus SecPolicyGetOID(SecPolicyRef policyRef, CSSM_OID *oid);
# 63 "/System/Library/Frameworks/Security.framework/Headers/SecPolicy.h" 3
OSStatus SecPolicyGetValue(SecPolicyRef policyRef, CSSM_DATA *value);
# 72 "/System/Library/Frameworks/Security.framework/Headers/SecPolicy.h" 3
OSStatus SecPolicySetValue(SecPolicyRef policyRef, const CSSM_DATA *value);
# 81 "/System/Library/Frameworks/Security.framework/Headers/SecPolicy.h" 3
OSStatus SecPolicyGetTPHandle(SecPolicyRef policyRef, CSSM_TP_HANDLE *tpHandle);


}
# 61 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecPolicySearch.h" 1 3
# 37 "/System/Library/Frameworks/Security.framework/Headers/SecPolicySearch.h" 3
extern "C" {






typedef struct OpaquePolicySearchRef *SecPolicySearchRef;






CFTypeID SecPolicySearchGetTypeID(void);
# 62 "/System/Library/Frameworks/Security.framework/Headers/SecPolicySearch.h" 3
OSStatus SecPolicySearchCreate(CSSM_CERT_TYPE certType, const CSSM_OID *policyOID, const CSSM_DATA *value, SecPolicySearchRef *searchRef);
# 71 "/System/Library/Frameworks/Security.framework/Headers/SecPolicySearch.h" 3
OSStatus SecPolicySearchCopyNext(SecPolicySearchRef searchRef, SecPolicyRef *policyRef);


}
# 62 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 1 3
# 40 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
extern "C" {
# 55 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
typedef enum {
    kSecTrustResultInvalid,
    kSecTrustResultProceed,
    kSecTrustResultConfirm,
    kSecTrustResultDeny,
    kSecTrustResultUnspecified,
    kSecTrustResultRecoverableTrustFailure,
    kSecTrustResultFatalTrustFailure,
    kSecTrustResultOtherError
} SecTrustResultType;





typedef SecTrustResultType SecTrustUserSetting;





typedef struct OpaqueSecTrustRef *SecTrustRef;






CFTypeID SecTrustGetTypeID(void);
# 93 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustCreateWithCertificates(CFArrayRef certificates, CFTypeRef policies, SecTrustRef *trustRef);
# 102 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustSetPolicies(SecTrustRef trust, CFTypeRef policies);
# 112 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustSetParameters(SecTrustRef trustRef, CSSM_TP_ACTION action, CFDataRef actionData);
# 121 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustSetAnchorCertificates(SecTrustRef trust, CFArrayRef anchorCertificates);
# 130 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustSetKeychains(SecTrustRef trust, CFTypeRef keychainOrArray);
# 139 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustSetVerifyDate(SecTrustRef trust, CFDateRef verifyDate);
# 148 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustEvaluate(SecTrustRef trust, SecTrustResultType *result);
# 159 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustGetResult(SecTrustRef trustRef, SecTrustResultType *result, CFArrayRef *certChain, CSSM_TP_APPLE_EVIDENCE_INFO **statusChain);
# 168 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustGetCssmResult(SecTrustRef trust, CSSM_TP_VERIFY_CONTEXT_RESULT_PTR *result);
# 177 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustGetCssmResultCode(SecTrustRef trust, OSStatus *resultCode);
# 186 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustGetTPHandle(SecTrustRef trust, CSSM_TP_HANDLE *handle);
# 195 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustCopyPolicies(SecTrustRef trust, CFArrayRef *policies);
# 205 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustCopyCustomAnchorCertificates(SecTrustRef trust, CFArrayRef *anchors);







OSStatus SecTrustCopyAnchorCertificates(CFArrayRef *anchors);
# 223 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustGetCSSMAnchorCertificates(const CSSM_DATA **cssmAnchors, uint32 *cssmAnchorCount)
 ;
# 235 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustGetUserTrust(SecCertificateRef certificate, SecPolicyRef policy, SecTrustUserSetting *trustSetting)
 ;
# 249 "/System/Library/Frameworks/Security.framework/Headers/SecTrust.h" 3
OSStatus SecTrustSetUserTrust(SecCertificateRef certificate, SecPolicyRef policy, SecTrustUserSetting trustSetting)
 ;



}
# 63 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecTrustedApplication.h" 1 3
# 38 "/System/Library/Frameworks/Security.framework/Headers/SecTrustedApplication.h" 3
extern "C" {







CFTypeID SecTrustedApplicationGetTypeID(void);
# 57 "/System/Library/Frameworks/Security.framework/Headers/SecTrustedApplication.h" 3
OSStatus SecTrustedApplicationCreateFromPath(const char *path, SecTrustedApplicationRef *app);
# 66 "/System/Library/Frameworks/Security.framework/Headers/SecTrustedApplication.h" 3
OSStatus SecTrustedApplicationCopyData(SecTrustedApplicationRef appRef, CFDataRef *data);
# 75 "/System/Library/Frameworks/Security.framework/Headers/SecTrustedApplication.h" 3
OSStatus SecTrustedApplicationSetData(SecTrustedApplicationRef appRef, CFDataRef data);



}
# 64 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecTrustSettings.h" 1 3
# 39 "/System/Library/Frameworks/Security.framework/Headers/SecTrustSettings.h" 3
extern "C" {
# 181 "/System/Library/Frameworks/Security.framework/Headers/SecTrustSettings.h" 3
enum {

 kSecTrustSettingsKeyUseSignature = 0x00000001,

 kSecTrustSettingsKeyUseEnDecryptData = 0x00000002,

 kSecTrustSettingsKeyUseEnDecryptKey = 0x00000004,

 kSecTrustSettingsKeyUseSignCert = 0x00000008,

 kSecTrustSettingsKeyUseSignRevocation = 0x00000010,

 kSecTrustSettingsKeyUseKeyExchange = 0x00000020,

 kSecTrustSettingsKeyUseAny = 0xffffffff
};
typedef uint32 SecTrustSettingsKeyUsage;




enum {
 kSecTrustSettingsResultInvalid = 0,

 kSecTrustSettingsResultTrustRoot,
 kSecTrustSettingsResultTrustAsRoot,
 kSecTrustSettingsResultDeny,
 kSecTrustSettingsResultUnspecified

};
typedef uint32 SecTrustSettingsResult;






enum {
 kSecTrustSettingsDomainUser = 0,
 kSecTrustSettingsDomainAdmin,
 kSecTrustSettingsDomainSystem
};
typedef uint32 SecTrustSettingsDomain;
# 249 "/System/Library/Frameworks/Security.framework/Headers/SecTrustSettings.h" 3
OSStatus SecTrustSettingsCopyTrustSettings(
 SecCertificateRef certRef,
 SecTrustSettingsDomain domain,
 CFArrayRef *trustSettings);
# 262 "/System/Library/Frameworks/Security.framework/Headers/SecTrustSettings.h" 3
OSStatus SecTrustSettingsSetTrustSettings(
 SecCertificateRef certRef,
 SecTrustSettingsDomain domain,
 CFTypeRef trustSettingsDictOrArray);





OSStatus SecTrustSettingsRemoveTrustSettings(
 SecCertificateRef certRef,
 SecTrustSettingsDomain domain);
# 283 "/System/Library/Frameworks/Security.framework/Headers/SecTrustSettings.h" 3
OSStatus SecTrustSettingsCopyCertificates(
 SecTrustSettingsDomain domain,
 CFArrayRef *certArray);







OSStatus SecTrustSettingsCopyModificationDate(
 SecCertificateRef certRef,
 SecTrustSettingsDomain domain,
 CFDateRef *modificationDate);







OSStatus SecTrustSettingsCreateExternalRepresentation(
 SecTrustSettingsDomain domain,
 CFDataRef *trustSettings);





OSStatus SecTrustSettingsImportExternalRepresentation(
 SecTrustSettingsDomain domain,
 CFDataRef trustSettings);


}
# 65 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecImportExport.h" 1 3
# 39 "/System/Library/Frameworks/Security.framework/Headers/SecImportExport.h" 3
extern "C" {





enum
{




 kSecFormatUnknown = 0,





 kSecFormatOpenSSL,
 kSecFormatSSH,
 kSecFormatBSAFE,


 kSecFormatRawKey,


 kSecFormatWrappedPKCS8,
 kSecFormatWrappedOpenSSL,
 kSecFormatWrappedSSH,
 kSecFormatWrappedLSH,


 kSecFormatX509Cert,


 kSecFormatPEMSequence,

 kSecFormatPKCS7,
 kSecFormatPKCS12,
 kSecFormatNetscapeCertSequence,


 kSecFormatSSHv2


};
typedef uint32_t SecExternalFormat;




enum {
 kSecItemTypeUnknown,
 kSecItemTypePrivateKey,
 kSecItemTypePublicKey,
 kSecItemTypeSessionKey,
 kSecItemTypeCertificate,
 kSecItemTypeAggregate
};
typedef uint32_t SecExternalItemType;




enum
{
 kSecItemPemArmour = 0x00000001,
};
typedef uint32_t SecItemImportExportFlags;




enum
{




 kSecKeyImportOnlyOne = 0x00000001,
# 127 "/System/Library/Frameworks/Security.framework/Headers/SecImportExport.h" 3
 kSecKeySecurePassphrase = 0x00000002,







 kSecKeyNoAccessControl = 0x00000004
};
typedef uint32_t SecKeyImportExportFlags;
# 147 "/System/Library/Frameworks/Security.framework/Headers/SecImportExport.h" 3
typedef struct
{

 uint32_t version;
 SecKeyImportExportFlags flags;
 CFTypeRef passphrase;


 CFStringRef alertTitle;
 CFStringRef alertPrompt;


 SecAccessRef accessRef;

 CSSM_KEYUSE keyUsage;

 CSSM_KEYATTR_FLAGS keyAttributes;
} SecKeyImportExportParameters;
# 215 "/System/Library/Frameworks/Security.framework/Headers/SecImportExport.h" 3
OSStatus SecKeychainItemExport(
 CFTypeRef keychainItemOrArray,
 SecExternalFormat outputFormat,
 SecItemImportExportFlags flags,
 const SecKeyImportExportParameters *keyParams,
 CFDataRef *exportedData);
# 370 "/System/Library/Frameworks/Security.framework/Headers/SecImportExport.h" 3
OSStatus SecKeychainItemImport(
 CFDataRef importedData,
 CFStringRef fileNameOrExtension,
 SecExternalFormat *inputFormat,
 SecExternalItemType *itemType,
 SecItemImportExportFlags flags,
 const SecKeyImportExportParameters *keyParams,
 SecKeychainRef importKeychain,
 CFArrayRef *outItems);


}
# 66 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3


# 1 "/System/Library/Frameworks/Security.framework/Headers/AuthorizationTags.h" 1 3
# 69 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/AuthorizationDB.h" 1 3
# 36 "/System/Library/Frameworks/Security.framework/Headers/AuthorizationDB.h" 3
extern "C" {
# 109 "/System/Library/Frameworks/Security.framework/Headers/AuthorizationDB.h" 3
OSStatus AuthorizationRightGet(const char *rightName,
 CFDictionaryRef *rightDefinition);
# 133 "/System/Library/Frameworks/Security.framework/Headers/AuthorizationDB.h" 3
OSStatus AuthorizationRightSet(AuthorizationRef authRef,
 const char *rightName,
 CFTypeRef rightDefinition,
 CFStringRef descriptionKey,
 CFBundleRef bundle,
 CFStringRef localeTableName);
# 151 "/System/Library/Frameworks/Security.framework/Headers/AuthorizationDB.h" 3
OSStatus AuthorizationRightRemove(AuthorizationRef authRef,
 const char *rightName);



}
# 70 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3

# 1 "/System/Library/Frameworks/Security.framework/Headers/CipherSuite.h" 1 3
# 37 "/System/Library/Frameworks/Security.framework/Headers/CipherSuite.h" 3
typedef UInt32 SSLCipherSuite;

enum
{ SSL_NULL_WITH_NULL_NULL = 0x0000,
    SSL_RSA_WITH_NULL_MD5 = 0x0001,
    SSL_RSA_WITH_NULL_SHA = 0x0002,
    SSL_RSA_EXPORT_WITH_RC4_40_MD5 = 0x0003,
    SSL_RSA_WITH_RC4_128_MD5 = 0x0004,
    SSL_RSA_WITH_RC4_128_SHA = 0x0005,
    SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 = 0x0006,
    SSL_RSA_WITH_IDEA_CBC_SHA = 0x0007,
    SSL_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0008,
    SSL_RSA_WITH_DES_CBC_SHA = 0x0009,
    SSL_RSA_WITH_3DES_EDE_CBC_SHA = 0x000A,
    SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x000B,
    SSL_DH_DSS_WITH_DES_CBC_SHA = 0x000C,
    SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA = 0x000D,
    SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x000E,
    SSL_DH_RSA_WITH_DES_CBC_SHA = 0x000F,
    SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA = 0x0010,
    SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x0011,
    SSL_DHE_DSS_WITH_DES_CBC_SHA = 0x0012,
    SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 0x0013,
    SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x0014,
    SSL_DHE_RSA_WITH_DES_CBC_SHA = 0x0015,
    SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x0016,
    SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 = 0x0017,
    SSL_DH_anon_WITH_RC4_128_MD5 = 0x0018,
    SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA = 0x0019,
    SSL_DH_anon_WITH_DES_CBC_SHA = 0x001A,
    SSL_DH_anon_WITH_3DES_EDE_CBC_SHA = 0x001B,
    SSL_FORTEZZA_DMS_WITH_NULL_SHA = 0x001C,
    SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA = 0x001D,


 TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F,
 TLS_DH_DSS_WITH_AES_128_CBC_SHA = 0x0030,
 TLS_DH_RSA_WITH_AES_128_CBC_SHA = 0x0031,
 TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x0032,
 TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033,
 TLS_DH_anon_WITH_AES_128_CBC_SHA = 0x0034,
 TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035,
 TLS_DH_DSS_WITH_AES_256_CBC_SHA = 0x0036,
 TLS_DH_RSA_WITH_AES_256_CBC_SHA = 0x0037,
 TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x0038,
 TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039,
 TLS_DH_anon_WITH_AES_256_CBC_SHA = 0x003A,





    SSL_RSA_WITH_RC2_CBC_MD5 = 0xFF80,
    SSL_RSA_WITH_IDEA_CBC_MD5 = 0xFF81,
    SSL_RSA_WITH_DES_CBC_MD5 = 0xFF82,
    SSL_RSA_WITH_3DES_EDE_CBC_MD5 = 0xFF83,
    SSL_NO_SUCH_CIPHERSUITE = 0xFFFF
};
# 72 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 1 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 1 3
# 66 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
extern "C" {







struct SSLContext;
typedef struct SSLContext *SSLContextRef;


typedef const void * SSLConnectionRef;


typedef enum {
 kSSLProtocolUnknown,
 kSSLProtocol2,
 kSSLProtocol3,
 kSSLProtocol3Only,

 kTLSProtocol1,
 kTLSProtocol1Only,
 kSSLProtocolAll
} SSLProtocol;


typedef enum {
 kSSLIdle,
 kSSLHandshake,
 kSSLConnected,
 kSSLClosed,
 kSSLAborted
} SSLSessionState;





typedef enum {

 kSSLClientCertNone,

 kSSLClientCertRequested,






 kSSLClientCertSent,




 kSSLClientCertRejected
} SSLClientCertificateState;
# 141 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
typedef OSStatus
(*SSLReadFunc) (SSLConnectionRef connection,
        void *data,


        size_t *dataLength);
typedef OSStatus
(*SSLWriteFunc) (SSLConnectionRef connection,
        const void *data,
        size_t *dataLength);
# 164 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
enum {
 errSSLProtocol = -9800,
 errSSLNegotiation = -9801,
 errSSLFatalAlert = -9802,
 errSSLWouldBlock = -9803,
    errSSLSessionNotFound = -9804,
    errSSLClosedGraceful = -9805,
    errSSLClosedAbort = -9806,
    errSSLXCertChainInvalid = -9807,
    errSSLBadCert = -9808,
 errSSLCrypto = -9809,
 errSSLInternal = -9810,
 errSSLModuleAttach = -9811,
    errSSLUnknownRootCert = -9812,
    errSSLNoRootCert = -9813,
 errSSLCertExpired = -9814,
 errSSLCertNotYetValid = -9815,
 errSSLClosedNoNotify = -9816,
 errSSLBufferOverflow = -9817,
 errSSLBadCipherSuite = -9818,


 errSSLPeerUnexpectedMsg = -9819,
 errSSLPeerBadRecordMac = -9820,
 errSSLPeerDecryptionFail = -9821,
 errSSLPeerRecordOverflow = -9822,
 errSSLPeerDecompressFail = -9823,
 errSSLPeerHandshakeFail = -9824,
 errSSLPeerBadCert = -9825,
 errSSLPeerUnsupportedCert = -9826,
 errSSLPeerCertRevoked = -9827,
 errSSLPeerCertExpired = -9828,
 errSSLPeerCertUnknown = -9829,
 errSSLIllegalParam = -9830,
 errSSLPeerUnknownCA = -9831,
 errSSLPeerAccessDenied = -9832,
 errSSLPeerDecodeError = -9833,
 errSSLPeerDecryptError = -9834,
 errSSLPeerExportRestriction = -9835,
 errSSLPeerProtocolVersion = -9836,
 errSSLPeerInsufficientSecurity = -9837,
 errSSLPeerInternalError = -9838,
 errSSLPeerUserCancelled = -9839,
 errSSLPeerNoRenegotiation = -9840,


 errSSLHostNameMismatch = -9843,
 errSSLConnectionRefused = -9844,
 errSSLDecryptionFail = -9845,
 errSSLBadRecordMac = -9846,
 errSSLRecordOverflow = -9847,
 errSSLBadConfiguration = -9848,
 errSSLLast = -9849
};
# 227 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLNewContext (Boolean isServer,
        SSLContextRef *contextPtr);




OSStatus
SSLDisposeContext (SSLContextRef context);




OSStatus
SSLGetSessionState (SSLContextRef context,
        SSLSessionState *state);
# 254 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetIOFuncs (SSLContextRef context,
        SSLReadFunc read,
        SSLWriteFunc write);
# 272 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetProtocolVersionEnabled (SSLContextRef context,
        SSLProtocol protocol,
        Boolean enable);




OSStatus
SSLGetProtocolVersionEnabled(SSLContextRef context,
        SSLProtocol protocol,
        Boolean *enable);
# 294 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetProtocolVersion (SSLContextRef context,
        SSLProtocol version);
# 306 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLGetProtocolVersion (SSLContextRef context,
        SSLProtocol *protocol);
# 334 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetCertificate (SSLContextRef context,
        CFArrayRef certRefs);
# 348 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetConnection (SSLContextRef context,
        SSLConnectionRef connection);

OSStatus
SSLGetConnection (SSLContextRef context,
        SSLConnectionRef *connection);
# 363 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetPeerDomainName (SSLContextRef context,
        const char *peerName,
        size_t peerNameLen);




OSStatus
SSLGetPeerDomainNameLength (SSLContextRef context,
        size_t *peerNameLen);




OSStatus
SSLGetPeerDomainName (SSLContextRef context,
        char *peerName,
        size_t *peerNameLen);







OSStatus
SSLGetNegotiatedProtocolVersion (SSLContextRef context,
          SSLProtocol *protocol);







OSStatus
SSLGetNumberSupportedCiphers (SSLContextRef context,
         size_t *numCiphers);

OSStatus
SSLGetSupportedCiphers (SSLContextRef context,
         SSLCipherSuite *ciphers,
         size_t *numCiphers);







OSStatus
SSLSetEnabledCiphers (SSLContextRef context,
        const SSLCipherSuite *ciphers,
        size_t numCiphers);







OSStatus
SSLGetNumberEnabledCiphers (SSLContextRef context,
        size_t *numCiphers);

OSStatus
SSLGetEnabledCiphers (SSLContextRef context,
        SSLCipherSuite *ciphers,
        size_t *numCiphers);
# 441 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetEnableCertVerify (SSLContextRef context,
        Boolean enableVerify);

OSStatus
SSLGetEnableCertVerify (SSLContextRef context,
        Boolean *enableVerify);
# 456 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetAllowsExpiredCerts (SSLContextRef context,
        Boolean allowsExpired);




OSStatus
SSLGetAllowsExpiredCerts (SSLContextRef context,
        Boolean *allowsExpired);







OSStatus
SSLSetAllowsExpiredRoots (SSLContextRef context,
        Boolean allowsExpired);

OSStatus
SSLGetAllowsExpiredRoots (SSLContextRef context,
        Boolean *allowsExpired);
# 496 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetAllowsAnyRoot (SSLContextRef context,
        Boolean anyRoot);




OSStatus
SSLGetAllowsAnyRoot (SSLContextRef context,
        Boolean *anyRoot);
# 519 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetTrustedRoots (SSLContextRef context,
        CFArrayRef trustedRoots,
        Boolean replaceExisting);
# 533 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLGetTrustedRoots (SSLContextRef context,
        CFArrayRef *trustedRoots)
        ;
# 545 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLCopyTrustedRoots (SSLContextRef context,
        CFArrayRef *trustedRoots);
# 563 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLGetPeerCertificates (SSLContextRef context,
        CFArrayRef *certs)
        ;
# 579 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLCopyPeerCertificates (SSLContextRef context,
        CFArrayRef *certs);
# 597 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetPeerID (SSLContextRef context,
        const void *peerID,
        size_t peerIDLen);





OSStatus
SSLGetPeerID (SSLContextRef context,
        const void **peerID,
        size_t *peerIDLen);





OSStatus
SSLGetNegotiatedCipher (SSLContextRef context,
        SSLCipherSuite *cipherSuite);
# 656 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetEncryptionCertificate (SSLContextRef context,
        CFArrayRef certRefs);







typedef enum {
 kNeverAuthenticate,
 kAlwaysAuthenticate,
 kTryAuthenticate

} SSLAuthenticate;

OSStatus
SSLSetClientSideAuthenticate (SSLContextRef context,
         SSLAuthenticate auth);





OSStatus
SSLAddDistinguishedName (SSLContextRef context,
        const void *derDN,
        size_t derDNLen);
# 699 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLSetCertificateAuthorities(SSLContextRef context,
        CFTypeRef certificateOrArray,
        Boolean replaceExisting);







OSStatus
SSLCopyCertificateAuthorities(SSLContextRef context,
         CFArrayRef *certificates);
# 727 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLCopyDistinguishedNames (SSLContextRef context,
        CFArrayRef *names);
# 738 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLGetClientCertificateState (SSLContextRef context,
         SSLClientCertificateState *clientState);







OSStatus SSLSetDiffieHellmanParams (SSLContextRef context,
          const void *dhParams,
          size_t dhParamsLen);





OSStatus SSLGetDiffieHellmanParams (SSLContextRef context,
          const void **dhParams,
          size_t *dhParamsLen);






OSStatus SSLSetRsaBlinding (SSLContextRef context,
          Boolean blinding);

OSStatus SSLGetRsaBlinding (SSLContextRef context,
          Boolean *blinding);
# 809 "/System/Library/Frameworks/Security.framework/Headers/SecureTransport.h" 3
OSStatus
SSLHandshake (SSLContextRef context);






OSStatus
SSLWrite (SSLContextRef context,
        const void * data,
        size_t dataLength,
        size_t *processed);






OSStatus
SSLRead (SSLContextRef context,
        void * data,
        size_t dataLength,
        size_t *processed);






OSStatus
SSLGetBufferedReadSize (SSLContextRef context,
        size_t *bufSize);




OSStatus
SSLClose (SSLContextRef context);


}
# 72 "/System/Library/Frameworks/Security.framework/Headers/Security.h" 2 3
# 33 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 2 3
# 44 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern "C" {
# 53 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
typedef struct OpaqueLSSharedFileListRef* LSSharedFileListRef;
typedef struct OpaqueLSSharedFileListItemRef* LSSharedFileListItemRef;
# 66 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListFavoriteVolumes ;
# 77 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListFavoriteItems ;
# 88 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListRecentApplicationItems ;
# 99 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListRecentDocumentItems ;
# 110 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListRecentServerItems ;
# 121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListSessionLoginItems ;
# 132 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListGlobalLoginItems ;
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListRecentItemsMaxAmount ;
# 164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListVolumesComputerVisible ;
# 178 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListVolumesIDiskVisible ;
# 192 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListVolumesNetworkVisible ;
# 209 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern LSSharedFileListItemRef kLSSharedFileListItemBeforeFirst ;
# 223 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern LSSharedFileListItemRef kLSSharedFileListItemLast ;
# 240 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef kLSSharedFileListItemHidden ;



enum {
  kLSSharedFileListNoUserInteraction = 1 << 0,
  kLSSharedFileListDoNotMountVolumes = 1 << 1
};
# 257 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
typedef void ( * LSSharedFileListChangedProcPtr)(LSSharedFileListRef inList, void *context);
# 277 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFTypeID
LSSharedFileListGetTypeID(void) ;
# 299 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFTypeID
LSSharedFileListItemGetTypeID(void) ;
# 340 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern LSSharedFileListRef
LSSharedFileListCreate(
  CFAllocatorRef inAllocator,
  CFStringRef inListType,
  CFTypeRef listOptions) ;
# 376 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListSetAuthorization(
  LSSharedFileListRef inList,
  AuthorizationRef inAuthorization) ;
# 418 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern void
LSSharedFileListAddObserver(
  LSSharedFileListRef inList,
  CFRunLoopRef inRunloop,
  CFStringRef inRunloopMode,
  LSSharedFileListChangedProcPtr callback,
  void * context) ;
# 461 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern void
LSSharedFileListRemoveObserver(
  LSSharedFileListRef inList,
  CFRunLoopRef inRunloop,
  CFStringRef inRunloopMode,
  LSSharedFileListChangedProcPtr callback,
  void * context) ;
# 492 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern UInt32
LSSharedFileListGetSeedValue(LSSharedFileListRef inList) ;
# 526 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFTypeRef
LSSharedFileListCopyProperty(
  LSSharedFileListRef inList,
  CFStringRef inPropertyName) ;
# 560 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListSetProperty(
  LSSharedFileListRef inList,
  CFStringRef inPropertyName,
  CFTypeRef inPropertyData) ;
# 597 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFArrayRef
LSSharedFileListCopySnapshot(
  LSSharedFileListRef inList,
  UInt32 * outSnapshotSeed) ;
# 655 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern LSSharedFileListItemRef
LSSharedFileListInsertItemURL(
  LSSharedFileListRef inList,
  LSSharedFileListItemRef insertAfterThisItem,
  CFStringRef inDisplayName,
  IconRef inIconRef,
  CFURLRef inURL,
  CFDictionaryRef inPropertiesToSet,
  CFArrayRef inPropertiesToClear) ;
# 717 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern LSSharedFileListItemRef
LSSharedFileListInsertItemFSRef(
  LSSharedFileListRef inList,
  LSSharedFileListItemRef insertAfterThisItem,
  CFStringRef inDisplayName,
  IconRef inIconRef,
  const FSRef * inFSRef,
  CFDictionaryRef inPropertiesToSet,
  CFArrayRef inPropertiesToClear) ;
# 758 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListItemMove(
  LSSharedFileListRef inList,
  LSSharedFileListItemRef inItem,
  LSSharedFileListItemRef inMoveAfterItem) ;
# 790 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListItemRemove(
  LSSharedFileListRef inList,
  LSSharedFileListItemRef inItem) ;
# 818 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListRemoveAllItems(LSSharedFileListRef inList) ;
# 839 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern UInt32
LSSharedFileListItemGetID(LSSharedFileListItemRef inItem) ;
# 864 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern IconRef
LSSharedFileListItemCopyIconRef(LSSharedFileListItemRef inItem) ;
# 886 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFStringRef
LSSharedFileListItemCopyDisplayName(LSSharedFileListItemRef inItem) ;
# 921 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListItemResolve(
  LSSharedFileListItemRef inItem,
  UInt32 inFlags,
  CFURLRef * outURL,
  FSRef * outRef) ;
# 947 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern CFTypeRef
LSSharedFileListItemCopyProperty(
  LSSharedFileListItemRef inItem,
  CFStringRef inPropertyName) ;
# 970 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/LSSharedFileList.h" 3
extern OSStatus
LSSharedFileListItemSetProperty(
  LSSharedFileListItemRef inItem,
  CFStringRef inPropertyName,
  CFTypeRef inPropertyData) ;




}
# 57 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/HIServices.h" 2 3
# 39 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 1 3
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitions.h" 1 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitions.h" 3
#pragma options align=mac68k



typedef const void * PMObject;
typedef struct OpaquePMPrintSettings* PMPrintSettings;
typedef struct OpaquePMPageFormat* PMPageFormat;
typedef struct OpaquePMPrintSession* PMPrintSession;
typedef struct OpaquePMPrinter* PMPrinter;
typedef struct OpaquePMServer* PMServer;
typedef struct OpaquePMPreset* PMPreset;
typedef struct OpaquePMPaper* PMPaper;
enum {
  kPMCancel = 0x0080
};
# 56 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitions.h" 3
typedef UInt16 PMDestinationType;
enum {
  kPMDestinationInvalid = 0,
  kPMDestinationPrinter = 1,
  kPMDestinationFile = 2,
  kPMDestinationFax = 3,
  kPMDestinationPreview = 4,
  kPMDestinationProcessPDF = 5
};



typedef UInt16 PMOrientation;
enum {
  kPMPortrait = 1,
  kPMLandscape = 2,
  kPMReversePortrait = 3,
  kPMReverseLandscape = 4
};


typedef UInt16 PMPrinterState;
enum {
  kPMPrinterIdle = 3,
  kPMPrinterProcessing = 4,
  kPMPrinterStopped = 5
};

typedef UInt32 PMColorSpaceModel;
enum {
  kPMUnknownColorSpaceModel = 0,
  kPMGrayColorSpaceModel = 1,
  kPMRGBColorSpaceModel = 2,
  kPMCMYKColorSpaceModel = 3,
  kPMDevNColorSpaceModel = 4
};




typedef UInt32 PMQualityMode;
enum {
  kPMQualityLowest = 0x0000,
  kPMQualityInkSaver = 0x0001,
  kPMQualityDraft = 0x0004,
  kPMQualityNormal = 0x0008,
  kPMQualityPhoto = 0x000B,
  kPMQualityBest = 0x000D,
  kPMQualityHighest = 0x000F
};



typedef UInt32 PMPaperType;
enum {
  kPMPaperTypeUnknown = 0x0000,
  kPMPaperTypePlain = 0x0001,
  kPMPaperTypeCoated = 0x0002,
  kPMPaperTypePremium = 0x0003,
  kPMPaperTypeGlossy = 0x0004,
  kPMPaperTypeTransparency = 0x0005,
  kPMPaperTypeTShirt = 0x0006
};


typedef UInt16 PMScalingAlignment;
enum {
  kPMScalingPinTopLeft = 1,
  kPMScalingPinTopRight = 2,
  kPMScalingPinBottomLeft = 3,
  kPMScalingPinBottomRight = 4,
  kPMScalingCenterOnPaper = 5,
  kPMScalingCenterOnImgArea = 6
};


typedef UInt16 PMDuplexBinding;
enum {
  kPMDuplexBindingLeftRight = 1,
  kPMDuplexBindingTopDown = 2
};


typedef UInt32 PMDuplexMode;
enum {
  kPMDuplexNone = 0x0001,
  kPMDuplexNoTumble = 0x0002,
  kPMDuplexTumble = 0x0003,
  kPMSimplexTumble = 0x0004
};


typedef UInt16 PMLayoutDirection;
enum {

  kPMLayoutLeftRightTopBottom = 1,
  kPMLayoutLeftRightBottomTop = 2,
  kPMLayoutRightLeftTopBottom = 3,
  kPMLayoutRightLeftBottomTop = 4,
  kPMLayoutTopBottomLeftRight = 5,
  kPMLayoutTopBottomRightLeft = 6,
  kPMLayoutBottomTopLeftRight = 7,
  kPMLayoutBottomTopRightLeft = 8
};


typedef UInt16 PMBorderType;
enum {
  kPMBorderSingleHairline = 1,
  kPMBorderDoubleHairline = 2,
  kPMBorderSingleThickline = 3,
  kPMBorderDoubleThickline = 4
};

typedef UInt16 PMPPDDomain;
enum {
  kAllPPDDomains = 1,
  kSystemPPDDomain = 2,
  kLocalPPDDomain = 3,
  kNetworkPPDDomain = 4,
  kUserPPDDomain = 5,
  kCUPSPPDDomain = 6
};
# 200 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitions.h" 3
enum {
  kPMNoError = noErr,
  kPMGeneralError = -30870,
  kPMOutOfScope = -30871,
  kPMInvalidParameter = paramErr,
  kPMNoDefaultPrinter = -30872,
  kPMNotImplemented = -30873,
  kPMNoSuchEntry = -30874,
  kPMInvalidPrintSettings = -30875,
  kPMInvalidPageFormat = -30876,
  kPMValueOutOfRange = -30877,
  kPMLockIgnored = -30878
};

enum {
  kPMInvalidPrintSession = -30879,
  kPMInvalidPrinter = -30880,
  kPMObjectInUse = -30881,
  kPMInvalidPreset = -30899
};


enum {
  kPMPrintAllPages = -1
};

enum {
  kPMUnlocked = false,
  kPMLocked = true
};

struct PMRect {
  double top;
  double left;
  double bottom;
  double right;
};
typedef struct PMRect PMRect;
struct PMResolution {
  double hRes;
  double vRes;
};
typedef struct PMResolution PMResolution;
struct PMLanguageInfo {
  Str32 level;
  Str32 version;
  Str32 release;
};
typedef struct PMLanguageInfo PMLanguageInfo;

typedef PMRect PMPaperMargins;



#pragma options align=reset
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern "C" {
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
#pragma mark
#pragma mark Retain/Release
#pragma mark
# 73 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMRetain(PMObject object) ;
# 106 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMRelease(PMObject object) ;

#pragma mark
#pragma mark Session
#pragma mark
# 128 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCreateSession(PMPrintSession * printSession) ;
# 140 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionError(PMPrintSession printSession) ;
# 152 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionSetError(
  PMPrintSession printSession,
  OSStatus printError) ;

#pragma mark
#pragma mark Session: Printing Loop
#pragma mark
# 182 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionBeginCGDocumentNoDialog(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  PMPageFormat pageFormat) ;
# 197 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionEndDocumentNoDialog(PMPrintSession printSession) ;
# 216 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionBeginPageNoDialog(
  PMPrintSession printSession,
  PMPageFormat pageFormat,
  const PMRect * pageFrame) ;
# 238 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionEndPageNoDialog(PMPrintSession printSession) ;
# 272 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionGetCGGraphicsContext(
  PMPrintSession printSession,
  CGContextRef * context) ;

#pragma mark
#pragma mark Session: Other routines
#pragma mark -
# 324 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionGetDestinationType(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  PMDestinationType * destTypeP) ;
# 364 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionCopyDestinationFormat(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  CFStringRef * destFormatP) ;
# 411 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionCopyDestinationLocation(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  CFURLRef * destLocationP) ;
# 477 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionSetDestination(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  PMDestinationType destType,
  CFStringRef destFormat,
  CFURLRef destLocation) ;
# 525 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionCopyOutputFormatList(
  PMPrintSession printSession,
  PMDestinationType destType,
  CFArrayRef * documentFormatP) ;
# 574 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionCreatePageFormatList(
  PMPrintSession printSession,
  PMPrinter printer,
  CFArrayRef * pageFormatList) ;
# 591 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionCreatePrinterList(
  PMPrintSession printSession,
  CFArrayRef * printerList,
  CFIndex * currentIndex,
  PMPrinter * currentPrinter) ;
# 609 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionGetCurrentPrinter(
  PMPrintSession printSession,
  PMPrinter * currentPrinter) ;
# 625 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionSetCurrentPMPrinter(
  PMPrintSession session,
  PMPrinter printer) ;
# 638 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionGetDataFromSession(
  PMPrintSession printSession,
  CFStringRef key,
  CFTypeRef * data) ;
# 652 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionSetDataInSession(
  PMPrintSession printSession,
  CFStringRef key,
  CFTypeRef data) ;

#pragma mark -
#pragma mark PageFormat
#pragma mark
# 677 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCreatePageFormat(PMPageFormat * pageFormat) ;
# 688 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionDefaultPageFormat(
  PMPrintSession printSession,
  PMPageFormat pageFormat) ;
# 701 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionValidatePageFormat(
  PMPrintSession printSession,
  PMPageFormat pageFormat,
  Boolean * result) ;
# 717 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCopyPageFormat(
  PMPageFormat formatSrc,
  PMPageFormat formatDest) ;
# 742 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCreatePageFormatWithPMPaper(
  PMPageFormat * pageFormat,
  PMPaper paper) ;
# 760 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMFlattenPageFormatToCFData(
  PMPageFormat pageFormat,
  CFDataRef * flatFormat) ;
# 778 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMFlattenPageFormatToURL(
  PMPageFormat pageFormat,
  CFURLRef flattenFileURL) ;
# 806 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMUnflattenPageFormatWithCFData(
  CFDataRef flattenCFData,
  PMPageFormat * pageFormat) ;
# 835 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMUnflattenPageFormatWithURL(
  CFURLRef flattenFileURL,
  PMPageFormat * pageFormat) ;


#pragma mark -
# 850 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetAdjustedPageRect(
  PMPageFormat pageFormat,
  PMRect * pageRect) ;
# 864 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetAdjustedPaperRect(
  PMPageFormat pageFormat,
  PMRect * paperRect) ;
# 878 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetOrientation(
  PMPageFormat pageFormat,
  PMOrientation * orientation) ;
# 892 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetPageFormatExtendedData(
  PMPageFormat pageFormat,
  OSType dataID,
  UInt32 * size,
  void * extendedData) ;
# 922 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPageFormatGetPrinterID(
 PMPageFormat pageFormat,
 CFStringRef* printerID ) ;
# 943 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetScale(
  PMPageFormat pageFormat,
  double * scale) ;
# 966 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetUnadjustedPageRect(
  PMPageFormat pageFormat,
  PMRect * pageRect) ;
# 989 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetUnadjustedPaperRect(
  PMPageFormat pageFormat,
  PMRect * paperRect) ;


#pragma mark -
# 1019 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetOrientation(
  PMPageFormat pageFormat,
  PMOrientation orientation,
  Boolean lock) ;
# 1034 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetPageFormatExtendedData(
  PMPageFormat pageFormat,
  OSType dataID,
  UInt32 size,
  void * extendedData) ;
# 1050 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetScale(
  PMPageFormat pageFormat,
  double scale) ;


#pragma mark -
#pragma mark PrintSettings
#pragma mark
# 1076 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCreatePrintSettings(PMPrintSettings * printSettings) ;
# 1087 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionDefaultPrintSettings(
  PMPrintSession printSession,
  PMPrintSettings printSettings) ;
# 1100 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSessionValidatePrintSettings(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  Boolean * result) ;
# 1116 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCopyPrintSettings(
  PMPrintSettings settingSrc,
  PMPrintSettings settingDest) ;
# 1133 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMFlattenPrintSettingsToCFData(
  PMPrintSettings printSettings,
  CFDataRef * flatSetting) ;
# 1151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMFlattenPrintSettingsToURL(
  PMPrintSettings printSettings,
  CFURLRef flattenFileURL) ;
# 1180 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMUnflattenPrintSettingsWithCFData(
  CFDataRef flattenCFData,
  PMPrintSettings * printSettings) ;
# 1209 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMUnflattenPrintSettingsWithURL(
  CFURLRef flattenFileURL,
  PMPrintSettings * printSettings) ;


#pragma mark -
# 1224 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetCollate(
  PMPrintSettings printSettings,
  Boolean * collate) ;
# 1238 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetCopies(
  PMPrintSettings printSettings,
  UInt32 * copies) ;
# 1252 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetDuplex(
  PMPrintSettings printSettings,
  PMDuplexMode * duplexSetting) ;
# 1266 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetFirstPage(
  PMPrintSettings printSettings,
  UInt32 * first) ;
# 1280 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetLastPage(
  PMPrintSettings printSettings,
  UInt32 * last) ;
# 1303 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetPageRange(
  PMPrintSettings printSettings,
  UInt32 * minPage,
  UInt32 * maxPage) ;
# 1318 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetPrintSettingsExtendedData(
  PMPrintSettings printSettings,
  OSType dataID,
  UInt32 * size,
  void * extendedData) ;
# 1333 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsGetJobName(
  PMPrintSettings printSettings,
  CFStringRef * name) ;
# 1358 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsGetValue(
  PMPrintSettings printSettings,
  CFStringRef key,
  CFTypeRef * value) ;

#pragma mark -
# 1374 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetCollate(
  PMPrintSettings printSettings,
  Boolean collate) ;
# 1388 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetCopies(
  PMPrintSettings printSettings,
  UInt32 copies,
  Boolean lock) ;
# 1403 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetDuplex(
  PMPrintSettings printSettings,
  PMDuplexMode duplexSetting) ;
# 1417 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetFirstPage(
  PMPrintSettings printSettings,
  UInt32 first,
  Boolean lock) ;
# 1432 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetLastPage(
  PMPrintSettings printSettings,
  UInt32 last,
  Boolean lock) ;
# 1455 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetPageRange(
  PMPrintSettings printSettings,
  UInt32 minPage,
  UInt32 maxPage) ;
# 1469 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMSetPrintSettingsExtendedData(
  PMPrintSettings printSettings,
  OSType dataID,
  UInt32 size,
  void * extendedData) ;
# 1485 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsSetJobName(
  PMPrintSettings printSettings,
  CFStringRef name) ;
# 1515 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsSetValue(
  PMPrintSettings printSettings,
  CFStringRef key,
  CFTypeRef value,
  Boolean locked) ;
# 1542 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsCopyAsDictionary(
  PMPrintSettings printSettings,
  CFDictionaryRef *settingsDictionary) ;
# 1567 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsCopyKeys(
 PMPrintSettings printSettings,
 CFArrayRef *settingsKeys) ;



#pragma mark -
#pragma mark Printer
#pragma mark
# 1594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCreateGenericPrinter( PMPrinter* printer ) ;
# 1619 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMServerCreatePrinterList(
  PMServer server,
  CFArrayRef * printerList) ;
# 1651 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMServerLaunchPrinterBrowser(
  PMServer server,
  CFDictionaryRef options) ;
# 1679 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern PMPrinter
PMPrinterCreateFromPrinterID(CFStringRef printerID) ;
# 1711 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterCopyDescriptionURL(
  PMPrinter printer,
  CFStringRef descriptionType,
  CFURLRef * fileURL) ;
# 1740 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterCopyDeviceURI(
  PMPrinter printer,
  CFURLRef * deviceURI) ;
# 1757 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterCopyHostName(
  PMPrinter printer,
  CFStringRef * hostNameP) ;
# 1795 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterCopyPresets(
  PMPrinter printer,
  CFArrayRef * presetList) ;
# 1839 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetCommInfo(
  PMPrinter printer,
  Boolean * supportsTransparentP,
  Boolean * supportsEightBitP) ;
# 1854 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern CFStringRef
PMPrinterGetID(PMPrinter printer) ;
# 1866 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern CFStringRef
PMPrinterGetLocation(PMPrinter printer) ;
# 1878 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetDriverCreator(
  PMPrinter printer,
  OSType * creator) ;
# 1892 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetDriverReleaseInfo(
  PMPrinter printer,
  VersRec * release) ;
# 1918 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetPrinterResolutionCount(
  PMPrinter printer,
  UInt32 * countP) ;
# 1947 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetIndexedPrinterResolution(
  PMPrinter printer,
  UInt32 index,
  PMResolution * resolutionP) ;
# 1994 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
OSStatus PMPrinterGetOutputResolution(
  PMPrinter printer,
  PMPrintSettings printSettings,
  PMResolution *resolutionP) ;
# 2033 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
OSStatus PMPrinterSetOutputResolution(
  PMPrinter printer,
  PMPrintSettings printSettings,
  const PMResolution *resolutionP) ;
# 2047 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetLanguageInfo(
  PMPrinter printer,
  PMLanguageInfo * info) ;
# 2061 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetMakeAndModelName(
  PMPrinter printer,
  CFStringRef * makeAndModel) ;
# 2097 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetMimeTypes(
  PMPrinter printer,
  PMPrintSettings settings,
  CFArrayRef * mimeTypes) ;
# 2112 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern CFStringRef
PMPrinterGetName(PMPrinter printer) ;
# 2137 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetPaperList(
  PMPrinter printer,
  CFArrayRef * paperList) ;
# 2151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterGetState(
  PMPrinter printer,
  PMPrinterState * state) ;
# 2165 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern Boolean
PMPrinterIsDefault(PMPrinter printer) ;
# 2180 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern Boolean
PMPrinterIsFavorite(PMPrinter printer) ;
# 2192 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern Boolean
PMPrinterIsPostScriptCapable(PMPrinter printer) ;
# 2206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterIsPostScriptPrinter(PMPrinter printer, Boolean *isPSPrinter) ;
# 2222 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterIsRemote(
  PMPrinter printer,
  Boolean * isRemoteP) ;


#pragma mark
#pragma mark Preset
#pragma mark
# 2252 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPresetCopyName(
  PMPreset preset,
  CFStringRef * name) ;
# 2284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPresetCreatePrintSettings(
  PMPreset preset,
  PMPrintSession session,
  PMPrintSettings * printSettings) ;
# 2320 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPresetGetAttributes(
  PMPreset preset,
  CFDictionaryRef * attributes) ;


#pragma mark
#pragma mark Paper
#pragma mark
# 2350 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMGetPageFormatPaper(
  PMPageFormat format,
  PMPaper * paper) ;
# 2394 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperCreate(
  PMPrinter printer,
  CFStringRef id,
  CFStringRef name,
  double width,
  double height,
  const PMPaperMargins * margins,
  PMPaper * paperP) ;
# 2442 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperCreateCustom(
  PMPrinter printer,
  CFStringRef id,
  CFStringRef name,
  double width,
  double height,
  const PMPaperMargins * margins,
  PMPaper * paperP) ;
# 2472 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperGetID(
  PMPaper paper,
  CFStringRef * paperID) ;
# 2498 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperGetHeight(
  PMPaper paper,
  double * paperHeight) ;
# 2524 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperGetMargins(
  PMPaper paper,
  PMPaperMargins * paperMargins) ;
# 2550 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperGetName(
  PMPaper paper,
  CFStringRef * paperName) ;
# 2576 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPaperGetWidth(
  PMPaper paper,
  double * paperWidth) ;
# 2597 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern Boolean
PMPaperIsCustom(
  PMPaper paper ) ;

#pragma mark
#pragma mark PDF Workflow
#pragma mark
# 2634 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMWorkflowCopyItems(CFArrayRef * workflowItems) ;
# 2681 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMWorkflowSubmitPDFWithOptions(
  CFURLRef workflowItem,
  CFStringRef title,
  const char * options,
  CFURLRef pdfFile) ;
# 2727 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMWorkflowSubmitPDFWithSettings(
  CFURLRef workflowItem,
  PMPrintSettings settings,
  CFURLRef pdfFile) ;


#pragma mark
#pragma mark Job Submission
#pragma mark
# 2771 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterPrintWithProvider(
  PMPrinter printer,
  PMPrintSettings settings,
  PMPageFormat format,
  CFStringRef mimeType,
  CGDataProviderRef provider) ;
# 2819 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterPrintWithFile(
  PMPrinter printer,
  PMPrintSettings settings,
  PMPageFormat format,
  CFStringRef mimeType,
  CFURLRef fileURL) ;
# 2870 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrinterWritePostScriptToURL(
   PMPrinter printer,
   PMPrintSettings settings,
   PMPageFormat format,
   CFStringRef mimeType,
   CFURLRef sourceFileURL,
   CFURLRef destinationFileURL) ;
# 2904 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsToOptions(
  PMPrintSettings settings,
  char ** options) ;
# 2940 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMPrintSettingsToOptionsWithPrinterAndPageFormat(
  PMPrintSettings settings,
  PMPrinter printer,
  PMPageFormat pageFormat,
  char ** options) ;


#pragma mark
#pragma mark PPD related
#pragma mark
# 2974 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCopyAvailablePPDs(
  PMPPDDomain domain,
  CFArrayRef * ppds) ;
# 3003 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCopyLocalizedPPD(
  CFURLRef ppd,
  CFURLRef * localizedPPD) ;
# 3033 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern OSStatus
PMCopyPPDData(
  CFURLRef ppd,
  CFDataRef * data) ;


#pragma mark
#pragma mark EPS related
#pragma mark
# 3101 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCore.h" 3
extern CGImageRef
PMCGImageCreateWithEPSDataProvider(
  CGDataProviderRef epsDataProvider,
  CGImageRef epsPreview) ;



}
# 35 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitionsDeprecated.h" 1 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitionsDeprecated.h" 3
extern "C" {


#pragma options align=mac68k


typedef struct OpaquePMPrintContext* PMPrintContext;
typedef struct OpaquePMDialog* PMDialog;
enum {
  kSizeOfTPrint = 120
};

typedef UInt16 PMColorMode;
enum {
  kPMBlackAndWhite = 1,
  kPMGray = 2,
  kPMColor = 3,
  kPMColorModeDuotone = 4,
  kPMColorModeSpecialColor = 5
};



typedef UInt32 PMColorSyncIntent;
enum {
  kPMColorIntentUndefined = 0x0000,
  kPMColorIntentAutomatic = 0x0001,
  kPMColorIntentPhoto = 0x0002,
  kPMColorIntentBusiness = 0x0004,
  kPMColorIntentRelColor = 0x0008,
  kPMColorIntentAbsColor = 0x0010,
  kPMColorIntentUnused = 0xFFE0
};

typedef UInt32 PMTag;
enum {

  kPMCurrentValue = 'curr',
  kPMDefaultValue = 'dflt',
  kPMMinimumValue = 'minv',
  kPMMaximumValue = 'maxv',

  kPMSourceProfile = 'srcp',

  kPMMinRange = 'mnrg',
  kPMMaxRange = 'mxrg',
  kPMMinSquareResolution = 'mins',
  kPMMaxSquareResolution = 'maxs',
  kPMDefaultResolution = 'dftr'
};


enum {
  kPSPageInjectAllPages = -1,
  kPSInjectionMaxDictSize = 5
};


typedef UInt16 PSInjectionPlacement;
enum {
  kPSInjectionBeforeSubsection = 1,
  kPSInjectionAfterSubsection = 2,
  kPSInjectionReplaceSubsection = 3
};


typedef SInt32 PSInjectionSection;
enum {

  kInjectionSectJob = 1,
  kInjectionSectCoverPage = 2
};


typedef SInt32 PSInjectionSubsection;
enum {
  kInjectionSubPSAdobe = 1,
  kInjectionSubPSAdobeEPS = 2,
  kInjectionSubBoundingBox = 3,
  kInjectionSubEndComments = 4,
  kInjectionSubOrientation = 5,
  kInjectionSubPages = 6,
  kInjectionSubPageOrder = 7,
  kInjectionSubBeginProlog = 8,
  kInjectionSubEndProlog = 9,
  kInjectionSubBeginSetup = 10,
  kInjectionSubEndSetup = 11,
  kInjectionSubBeginDefaults = 12,
  kInjectionSubEndDefaults = 13,
  kInjectionSubDocFonts = 14,
  kInjectionSubDocNeededFonts = 15,
  kInjectionSubDocSuppliedFonts = 16,
  kInjectionSubDocNeededRes = 17,
  kInjectionSubDocSuppliedRes = 18,
  kInjectionSubDocCustomColors = 19,
  kInjectionSubDocProcessColors = 20,
  kInjectionSubPlateColor = 21,
  kInjectionSubPageTrailer = 22,
  kInjectionSubTrailer = 23,
  kInjectionSubEOF = 24,
  kInjectionSubBeginFont = 25,
  kInjectionSubEndFont = 26,
  kInjectionSubBeginResource = 27,
  kInjectionSubEndResource = 28,
  kInjectionSubPage = 29,
  kInjectionSubBeginPageSetup = 30,
  kInjectionSubEndPageSetup = 31
};
# 152 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMDefinitionsDeprecated.h" 3
#pragma options align=reset


}
# 39 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 1 3
# 46 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern "C" {
# 73 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetProfile(
  PMPrintSettings printSettings,
  PMTag tag,
  const CMProfileLocation * profile) ;







typedef void ( * PMIdleProcPtr)(void);
typedef PMIdleProcPtr PMIdleUPP;
# 143 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionBeginDocumentNoDialog(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  PMPageFormat pageFormat) ;
# 172 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionGetGraphicsContext(
  PMPrintSession printSession,
  CFStringRef graphicsContextType,
  void ** graphicsContext) ;
# 190 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionEnableColorSync(PMPrintSession printSession) ;
# 206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionDisableColorSync(PMPrintSession printSession) ;
# 218 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionSetIdleProc(
  PMPrintSession printSession,
  PMIdleUPP idleProc) ;
# 235 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionGeneral(
  PMPrintSession printSession,
  Ptr pData) ;
# 249 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionConvertOldPrintRecord(
  PMPrintSession printSession,
  Handle printRecordHandle,
  PMPrintSettings * printSettings,
  PMPageFormat * pageFormat) ;
# 265 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionMakeOldPrintRecord(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  PMPageFormat pageFormat,
  Handle * printRecordHandle) ;
# 285 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionSetCurrentPrinter(
  PMPrintSession session,
  CFStringRef printerName) ;
# 305 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionPostScriptBegin(PMPrintSession printSession) ;
# 323 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionPostScriptEnd(PMPrintSession printSession) ;
# 341 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionPostScriptHandle(
  PMPrintSession printSession,
  Handle psHandle) ;
# 361 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionPostScriptData(
  PMPrintSession printSession,
  Ptr psPtr,
  Size len) ;
# 382 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionPostScriptFile(
  PMPrintSession printSession,
  FSSpec * psFile) ;
# 402 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionSetPSInjectionData(
  PMPrintSession printSession,
  PMPrintSettings printSettings,
  CFArrayRef injectionDictArray) ;
# 423 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionGetDocumentFormatSupported(
  PMPrintSession printSession,
  CFArrayRef * docFormats,
  UInt32 limit) ;
# 444 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionGetDocumentFormatGeneration(
  PMPrintSession printSession,
  CFArrayRef * docFormats) ;
# 466 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionSetDocumentFormatGeneration(
  PMPrintSession printSession,
  CFStringRef docFormat,
  CFArrayRef graphicsContextTypes,
  CFTypeRef options) ;
# 488 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSessionIsDocumentFormatSupported(
  PMPrintSession printSession,
  CFStringRef docFormat,
  Boolean * supported) ;
# 998 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetJobName(
  PMPrintSettings printSettings,
  StringPtr name) ;
# 1014 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetJobName(
  PMPrintSettings printSettings,
  StringPtr name) ;
# 1031 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetPhysicalPaperSize(
  PMPageFormat pageFormat,
  PMRect * paperSize) ;
# 1049 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetAdjustedPageRect(
  PMPageFormat pageFormat,
  const PMRect * pageRect) ;
# 1066 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetPhysicalPaperSize(
  PMPageFormat pageFormat,
  const PMRect * paperSize) ;
# 1083 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetUnadjustedPaperRect(
  PMPageFormat pageFormat,
  const PMRect * paperRect) ;
# 1099 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetPhysicalPageSize(
  PMPageFormat pageFormat,
  PMRect * pageSize) ;
# 1113 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetColorMode(
  PMPrintSettings printSettings,
  PMColorMode * colorMode) ;
# 1127 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetColorMode(
  PMPrintSettings printSettings,
  PMColorMode colorMode) ;
# 1143 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetDestination(
  PMPrintSettings printSettings,
  PMDestinationType * destType,
  CFURLRef * fileURL) ;
# 1162 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMPrinterGetDescriptionURL(
  PMPrinter printer,
  CFStringRef descriptionType,
  CFURLRef * fileURL) ;
# 1182 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMPrinterGetDeviceURI(
  PMPrinter printer,
  CFURLRef * deviceURI) ;
# 1209 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetResolution(
  PMPageFormat pageFormat,
  PMResolution * res) ;
# 1230 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetResolution(
  PMPageFormat pageFormat,
  const PMResolution * res) ;
# 1271 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMFlattenPageFormat(
  PMPageFormat pageFormat,
  Handle * flatFormat) ;
# 1288 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMUnflattenPageFormat(
  Handle flatFormat,
  PMPageFormat * pageFormat) ;
# 1330 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMFlattenPrintSettings(
  PMPrintSettings printSettings,
  Handle * flatSettings) ;
# 1347 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMUnflattenPrintSettings(
  Handle flatSettings,
  PMPrintSettings * printSettings) ;
# 1367 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMGetJobNameCFString(
  PMPrintSettings printSettings,
  CFStringRef * name) ;
# 1384 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMSetJobNameCFString(
  PMPrintSettings printSettings,
  CFStringRef name) ;
# 1401 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMCoreDeprecated.h" 3
extern OSStatus
PMPrinterGetPrinterResolution(
  PMPrinter printer,
  PMTag tag,
  PMResolution * res) ;



}
# 43 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMPrintAETypes.h" 1 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMPrintAETypes.h" 3
extern "C" {
# 85 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PMPrintAETypes.h" 3
}
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Headers/PrintCore.h" 2 3
# 43 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3







# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/ImageIO.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/ImageIO.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 3
typedef struct CGImageSource *CGImageSourceRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 2 3

extern "C" {


enum CGImageSourceStatus {
    kCGImageStatusUnexpectedEOF = -5,
    kCGImageStatusInvalidData = -4,
    kCGImageStatusUnknownType = -3,
    kCGImageStatusReadingHeader = -2,
    kCGImageStatusIncomplete = -1,
    kCGImageStatusComplete = 0
};
typedef enum CGImageSourceStatus CGImageSourceStatus;
# 34 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 3
extern const CFStringRef kCGImageSourceTypeIdentifierHint ;
# 43 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 3
extern const CFStringRef kCGImageSourceShouldCache ;







extern const CFStringRef kCGImageSourceShouldAllowFloat ;
# 65 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 3
extern const CFStringRef kCGImageSourceCreateThumbnailFromImageIfAbsent ;
# 75 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 3
extern const CFStringRef kCGImageSourceCreateThumbnailFromImageAlways ;






extern const CFStringRef kCGImageSourceThumbnailMaxPixelSize ;






extern const CFStringRef kCGImageSourceCreateThumbnailWithTransform ;





extern CFTypeID CGImageSourceGetTypeID (void) ;



extern CFArrayRef CGImageSourceCopyTypeIdentifiers(void) ;





extern CGImageSourceRef CGImageSourceCreateWithDataProvider(CGDataProviderRef provider, CFDictionaryRef options) ;





extern CGImageSourceRef CGImageSourceCreateWithData(CFDataRef data, CFDictionaryRef options) ;





extern CGImageSourceRef CGImageSourceCreateWithURL(CFURLRef url, CFDictionaryRef options) ;






extern CFStringRef CGImageSourceGetType(CGImageSourceRef isrc) ;




extern size_t CGImageSourceGetCount(CGImageSourceRef isrc) ;





extern CFDictionaryRef CGImageSourceCopyProperties(CGImageSourceRef isrc, CFDictionaryRef options) ;






extern CFDictionaryRef CGImageSourceCopyPropertiesAtIndex(CGImageSourceRef isrc, size_t index, CFDictionaryRef options) ;





extern CGImageRef CGImageSourceCreateImageAtIndex(CGImageSourceRef isrc, size_t index, CFDictionaryRef options) ;






extern CGImageRef CGImageSourceCreateThumbnailAtIndex(CGImageSourceRef isrc, size_t index, CFDictionaryRef options) ;







extern CGImageSourceRef CGImageSourceCreateIncremental(CFDictionaryRef options) ;






extern void CGImageSourceUpdateData(CGImageSourceRef isrc, CFDataRef data, bool final) ;






extern void CGImageSourceUpdateDataProvider(CGImageSourceRef isrc, CGDataProviderRef provider, bool final) ;





extern CGImageSourceStatus CGImageSourceGetStatus(CGImageSourceRef isrc) ;






extern CGImageSourceStatus CGImageSourceGetStatusAtIndex(CGImageSourceRef isrc, size_t index) ;


}
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/ImageIO.h" 2 3

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 1 3
# 10 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 3
typedef struct CGImageDestination *CGImageDestinationRef;

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageSource.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 2 3

extern "C" {
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 3
extern const CFStringRef kCGImageDestinationLossyCompressionQuality ;
# 38 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 3
extern const CFStringRef kCGImageDestinationBackgroundColor ;





extern CFTypeID CGImageDestinationGetTypeID(void) ;



extern CFArrayRef CGImageDestinationCopyTypeIdentifiers(void) ;
# 57 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 3
extern CGImageDestinationRef CGImageDestinationCreateWithDataConsumer(CGDataConsumerRef consumer, CFStringRef type, size_t count, CFDictionaryRef options) ;







extern CGImageDestinationRef CGImageDestinationCreateWithData(CFMutableDataRef data, CFStringRef type, size_t count, CFDictionaryRef options) ;
# 74 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 3
extern CGImageDestinationRef CGImageDestinationCreateWithURL(CFURLRef url, CFStringRef type, size_t count, CFDictionaryRef options) ;




extern void CGImageDestinationSetProperties(CGImageDestinationRef idst, CFDictionaryRef properties) ;






extern void CGImageDestinationAddImage(CGImageDestinationRef idst, CGImageRef image, CFDictionaryRef properties) ;
# 95 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageDestination.h" 3
extern void CGImageDestinationAddImageFromSource(CGImageDestinationRef idst, CGImageSourceRef isrc, size_t index, CFDictionaryRef properties) ;







extern bool CGImageDestinationFinalize(CGImageDestinationRef idst) ;


}
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/ImageIO.h" 2 3

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageProperties.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageProperties.h" 3
extern const CFStringRef kCGImagePropertyTIFFDictionary ;
extern const CFStringRef kCGImagePropertyGIFDictionary ;
extern const CFStringRef kCGImagePropertyJFIFDictionary ;
extern const CFStringRef kCGImagePropertyExifDictionary ;
extern const CFStringRef kCGImagePropertyPNGDictionary ;
extern const CFStringRef kCGImagePropertyIPTCDictionary ;
extern const CFStringRef kCGImagePropertyGPSDictionary ;
extern const CFStringRef kCGImagePropertyRawDictionary ;
extern const CFStringRef kCGImagePropertyCIFFDictionary ;
extern const CFStringRef kCGImageProperty8BIMDictionary ;
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageProperties.h" 3
extern const CFStringRef kCGImagePropertyFileSize ;
# 45 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageProperties.h" 3
extern const CFStringRef kCGImagePropertyPixelHeight ;
extern const CFStringRef kCGImagePropertyPixelWidth ;




extern const CFStringRef kCGImagePropertyDPIHeight ;
extern const CFStringRef kCGImagePropertyDPIWidth ;




extern const CFStringRef kCGImagePropertyDepth ;
# 72 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/CGImageProperties.h" 3
extern const CFStringRef kCGImagePropertyOrientation ;




extern const CFStringRef kCGImagePropertyIsFloat ;




extern const CFStringRef kCGImagePropertyIsIndexed ;




extern const CFStringRef kCGImagePropertyHasAlpha ;




extern const CFStringRef kCGImagePropertyColorModel ;




extern const CFStringRef kCGImagePropertyProfileName ;




extern const CFStringRef kCGImagePropertyColorModelRGB ;
extern const CFStringRef kCGImagePropertyColorModelGray ;
extern const CFStringRef kCGImagePropertyColorModelCMYK ;
extern const CFStringRef kCGImagePropertyColorModelLab ;




extern const CFStringRef kCGImagePropertyTIFFCompression ;
extern const CFStringRef kCGImagePropertyTIFFPhotometricInterpretation ;
extern const CFStringRef kCGImagePropertyTIFFDocumentName ;
extern const CFStringRef kCGImagePropertyTIFFImageDescription ;
extern const CFStringRef kCGImagePropertyTIFFMake ;
extern const CFStringRef kCGImagePropertyTIFFModel ;
extern const CFStringRef kCGImagePropertyTIFFOrientation ;
extern const CFStringRef kCGImagePropertyTIFFXResolution ;
extern const CFStringRef kCGImagePropertyTIFFYResolution ;
extern const CFStringRef kCGImagePropertyTIFFResolutionUnit ;
extern const CFStringRef kCGImagePropertyTIFFSoftware ;
extern const CFStringRef kCGImagePropertyTIFFTransferFunction ;
extern const CFStringRef kCGImagePropertyTIFFDateTime ;
extern const CFStringRef kCGImagePropertyTIFFArtist ;
extern const CFStringRef kCGImagePropertyTIFFHostComputer ;
extern const CFStringRef kCGImagePropertyTIFFCopyright ;
extern const CFStringRef kCGImagePropertyTIFFWhitePoint ;
extern const CFStringRef kCGImagePropertyTIFFPrimaryChromaticities ;



extern const CFStringRef kCGImagePropertyJFIFVersion ;
extern const CFStringRef kCGImagePropertyJFIFXDensity ;
extern const CFStringRef kCGImagePropertyJFIFYDensity ;
extern const CFStringRef kCGImagePropertyJFIFDensityUnit ;
extern const CFStringRef kCGImagePropertyJFIFIsProgressive ;




extern const CFStringRef kCGImagePropertyExifExposureTime ;
extern const CFStringRef kCGImagePropertyExifFNumber ;
extern const CFStringRef kCGImagePropertyExifExposureProgram ;
extern const CFStringRef kCGImagePropertyExifSpectralSensitivity ;
extern const CFStringRef kCGImagePropertyExifISOSpeedRatings ;
extern const CFStringRef kCGImagePropertyExifOECF ;
extern const CFStringRef kCGImagePropertyExifVersion ;
extern const CFStringRef kCGImagePropertyExifDateTimeOriginal ;
extern const CFStringRef kCGImagePropertyExifDateTimeDigitized ;
extern const CFStringRef kCGImagePropertyExifComponentsConfiguration ;
extern const CFStringRef kCGImagePropertyExifCompressedBitsPerPixel ;
extern const CFStringRef kCGImagePropertyExifShutterSpeedValue ;
extern const CFStringRef kCGImagePropertyExifApertureValue ;
extern const CFStringRef kCGImagePropertyExifBrightnessValue ;
extern const CFStringRef kCGImagePropertyExifExposureBiasValue ;
extern const CFStringRef kCGImagePropertyExifMaxApertureValue ;
extern const CFStringRef kCGImagePropertyExifSubjectDistance ;
extern const CFStringRef kCGImagePropertyExifMeteringMode ;
extern const CFStringRef kCGImagePropertyExifLightSource ;
extern const CFStringRef kCGImagePropertyExifFlash ;
extern const CFStringRef kCGImagePropertyExifFocalLength ;
extern const CFStringRef kCGImagePropertyExifSubjectArea ;
extern const CFStringRef kCGImagePropertyExifMakerNote ;
extern const CFStringRef kCGImagePropertyExifUserComment ;
extern const CFStringRef kCGImagePropertyExifSubsecTime ;
extern const CFStringRef kCGImagePropertyExifSubsecTimeOrginal ;
extern const CFStringRef kCGImagePropertyExifSubsecTimeDigitized ;
extern const CFStringRef kCGImagePropertyExifFlashPixVersion ;
extern const CFStringRef kCGImagePropertyExifColorSpace ;
extern const CFStringRef kCGImagePropertyExifPixelXDimension ;
extern const CFStringRef kCGImagePropertyExifPixelYDimension ;
extern const CFStringRef kCGImagePropertyExifRelatedSoundFile ;
extern const CFStringRef kCGImagePropertyExifFlashEnergy ;
extern const CFStringRef kCGImagePropertyExifSpatialFrequencyResponse ;
extern const CFStringRef kCGImagePropertyExifFocalPlaneXResolution ;
extern const CFStringRef kCGImagePropertyExifFocalPlaneYResolution ;
extern const CFStringRef kCGImagePropertyExifFocalPlaneResolutionUnit ;
extern const CFStringRef kCGImagePropertyExifSubjectLocation ;
extern const CFStringRef kCGImagePropertyExifExposureIndex ;
extern const CFStringRef kCGImagePropertyExifSensingMethod ;
extern const CFStringRef kCGImagePropertyExifFileSource ;
extern const CFStringRef kCGImagePropertyExifSceneType ;
extern const CFStringRef kCGImagePropertyExifCFAPattern ;
extern const CFStringRef kCGImagePropertyExifCustomRendered ;
extern const CFStringRef kCGImagePropertyExifExposureMode ;
extern const CFStringRef kCGImagePropertyExifWhiteBalance ;
extern const CFStringRef kCGImagePropertyExifDigitalZoomRatio ;
extern const CFStringRef kCGImagePropertyExifFocalLenIn35mmFilm ;
extern const CFStringRef kCGImagePropertyExifSceneCaptureType ;
extern const CFStringRef kCGImagePropertyExifGainControl ;
extern const CFStringRef kCGImagePropertyExifContrast ;
extern const CFStringRef kCGImagePropertyExifSaturation ;
extern const CFStringRef kCGImagePropertyExifSharpness ;
extern const CFStringRef kCGImagePropertyExifDeviceSettingDescription ;
extern const CFStringRef kCGImagePropertyExifSubjectDistRange ;
extern const CFStringRef kCGImagePropertyExifImageUniqueID ;
extern const CFStringRef kCGImagePropertyExifGamma ;



extern const CFStringRef kCGImagePropertyGIFLoopCount ;
extern const CFStringRef kCGImagePropertyGIFDelayTime ;
extern const CFStringRef kCGImagePropertyGIFImageColorMap ;
extern const CFStringRef kCGImagePropertyGIFHasGlobalColorMap ;



extern const CFStringRef kCGImagePropertyPNGGamma ;
extern const CFStringRef kCGImagePropertyPNGInterlaceType ;
extern const CFStringRef kCGImagePropertyPNGXPixelsPerMeter ;
extern const CFStringRef kCGImagePropertyPNGYPixelsPerMeter ;
extern const CFStringRef kCGImagePropertyPNGsRGBIntent ;
extern const CFStringRef kCGImagePropertyPNGChromaticities ;



extern const CFStringRef kCGImagePropertyGPSVersion ;
extern const CFStringRef kCGImagePropertyGPSLatitudeRef ;
extern const CFStringRef kCGImagePropertyGPSLatitude ;
extern const CFStringRef kCGImagePropertyGPSLongitudeRef ;
extern const CFStringRef kCGImagePropertyGPSLongitude ;
extern const CFStringRef kCGImagePropertyGPSAltitudeRef ;
extern const CFStringRef kCGImagePropertyGPSAltitude ;
extern const CFStringRef kCGImagePropertyGPSTimeStamp ;
extern const CFStringRef kCGImagePropertyGPSSatellites ;
extern const CFStringRef kCGImagePropertyGPSStatus ;
extern const CFStringRef kCGImagePropertyGPSMeasureMode ;
extern const CFStringRef kCGImagePropertyGPSDOP ;
extern const CFStringRef kCGImagePropertyGPSSpeedRef ;
extern const CFStringRef kCGImagePropertyGPSSpeed ;
extern const CFStringRef kCGImagePropertyGPSTrackRef ;
extern const CFStringRef kCGImagePropertyGPSTrack ;
extern const CFStringRef kCGImagePropertyGPSImgDirectionRef ;
extern const CFStringRef kCGImagePropertyGPSImgDirection ;
extern const CFStringRef kCGImagePropertyGPSMapDatum ;
extern const CFStringRef kCGImagePropertyGPSDestLatitudeRef ;
extern const CFStringRef kCGImagePropertyGPSDestLatitude ;
extern const CFStringRef kCGImagePropertyGPSDestLongitudeRef ;
extern const CFStringRef kCGImagePropertyGPSDestLongitude ;
extern const CFStringRef kCGImagePropertyGPSDestBearingRef ;
extern const CFStringRef kCGImagePropertyGPSDestBearing ;
extern const CFStringRef kCGImagePropertyGPSDestDistanceRef ;
extern const CFStringRef kCGImagePropertyGPSDestDistance ;
extern const CFStringRef kCGImagePropertyGPSProcessingMethod ;
extern const CFStringRef kCGImagePropertyGPSAreaInformation ;
extern const CFStringRef kCGImagePropertyGPSDateStamp ;
extern const CFStringRef kCGImagePropertyGPSDifferental ;



extern const CFStringRef kCGImagePropertyIPTCObjectTypeReference ;
extern const CFStringRef kCGImagePropertyIPTCObjectAttributeReference ;
extern const CFStringRef kCGImagePropertyIPTCObjectName ;
extern const CFStringRef kCGImagePropertyIPTCEditStatus ;
extern const CFStringRef kCGImagePropertyIPTCEditorialUpdate ;
extern const CFStringRef kCGImagePropertyIPTCUrgency ;
extern const CFStringRef kCGImagePropertyIPTCSubjectReference ;
extern const CFStringRef kCGImagePropertyIPTCCategory ;
extern const CFStringRef kCGImagePropertyIPTCSupplementalCategory ;
extern const CFStringRef kCGImagePropertyIPTCFixtureIdentifier ;
extern const CFStringRef kCGImagePropertyIPTCKeywords ;
extern const CFStringRef kCGImagePropertyIPTCContentLocationCode ;
extern const CFStringRef kCGImagePropertyIPTCContentLocationName ;
extern const CFStringRef kCGImagePropertyIPTCReleaseDate ;
extern const CFStringRef kCGImagePropertyIPTCReleaseTime ;
extern const CFStringRef kCGImagePropertyIPTCExpirationDate ;
extern const CFStringRef kCGImagePropertyIPTCExpirationTime ;
extern const CFStringRef kCGImagePropertyIPTCSpecialInstructions ;
extern const CFStringRef kCGImagePropertyIPTCActionAdvised ;
extern const CFStringRef kCGImagePropertyIPTCReferenceService ;
extern const CFStringRef kCGImagePropertyIPTCReferenceDate ;
extern const CFStringRef kCGImagePropertyIPTCReferenceNumber ;
extern const CFStringRef kCGImagePropertyIPTCDateCreated ;
extern const CFStringRef kCGImagePropertyIPTCTimeCreated ;
extern const CFStringRef kCGImagePropertyIPTCDigitalCreationDate ;
extern const CFStringRef kCGImagePropertyIPTCDigitalCreationTime ;
extern const CFStringRef kCGImagePropertyIPTCOriginatingProgram ;
extern const CFStringRef kCGImagePropertyIPTCProgramVersion ;
extern const CFStringRef kCGImagePropertyIPTCObjectCycle ;
extern const CFStringRef kCGImagePropertyIPTCByline ;
extern const CFStringRef kCGImagePropertyIPTCBylineTitle ;
extern const CFStringRef kCGImagePropertyIPTCCity ;
extern const CFStringRef kCGImagePropertyIPTCSubLocation ;
extern const CFStringRef kCGImagePropertyIPTCProvinceState ;
extern const CFStringRef kCGImagePropertyIPTCCountryPrimaryLocationCode ;
extern const CFStringRef kCGImagePropertyIPTCCountryPrimaryLocationName ;
extern const CFStringRef kCGImagePropertyIPTCOriginalTransmissionReference ;
extern const CFStringRef kCGImagePropertyIPTCHeadline ;
extern const CFStringRef kCGImagePropertyIPTCCredit ;
extern const CFStringRef kCGImagePropertyIPTCSource ;
extern const CFStringRef kCGImagePropertyIPTCCopyrightNotice ;
extern const CFStringRef kCGImagePropertyIPTCContact ;
extern const CFStringRef kCGImagePropertyIPTCCaptionAbstract ;
extern const CFStringRef kCGImagePropertyIPTCWriterEditor ;
extern const CFStringRef kCGImagePropertyIPTCImageType ;
extern const CFStringRef kCGImagePropertyIPTCImageOrientation ;
extern const CFStringRef kCGImagePropertyIPTCLanguageIdentifier ;
extern const CFStringRef kCGImagePropertyIPTCStarRating ;
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ImageIO.framework/Headers/ImageIO.h" 2 3
# 51 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LangAnalysis.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LangAnalysis.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 1 3
# 28 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 1 3
# 36 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern "C" {


#pragma options align=power
# 50 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
enum {
  kDictionaryFileType = 'dict',
  kDCMDictionaryHeaderSignature = 'dict',
  kDCMDictionaryHeaderVersion = 2
};

enum {
  kDCMAnyFieldTag = typeWildCard,
  kDCMAnyFieldType = typeWildCard
};




enum {
  keyDCMFieldTag = 'ftag',
  keyDCMFieldType = 'ftyp',
  keyDCMMaxRecordSize = 'mrsz',
  keyDCMFieldAttributes = 'fatr',
  keyDCMFieldDefaultData = 'fdef',
  keyDCMFieldName = 'fnam',
  keyDCMFieldFindMethods = 'ffnd'
};




enum {
  typeDCMFieldAttributes = 'fatr',
  typeDCMFindMethod = 'fmth'
};





enum {
  kDCMIndexedFieldMask = 0x00000001,
  kDCMRequiredFieldMask = 0x00000002,
  kDCMIdentifyFieldMask = 0x00000004,
  kDCMFixedSizeFieldMask = 0x00000008,
  kDCMHiddenFieldMask = (long)0x80000000
};

typedef OptionBits DCMFieldAttributes;



enum {
  pDCMAccessMethod = 'amtd',
  pDCMPermission = 'perm',
  pDCMListing = 'list',
  pDCMMaintenance = 'mtnc',
  pDCMLocale = 'locl',
  pDCMClass = pClass,
  pDCMCopyright = 'info'
};




enum {
  kDCMReadOnlyDictionary = 0,
  kDCMReadWriteDictionary = 1
};




enum {
  kDCMAllowListing = 0,
  kDCMProhibitListing = 1
};




enum {
  kDCMUserDictionaryClass = 0,
  kDCMSpecificDictionaryClass = 1,
  kDCMBasicDictionaryClass = 2
};




enum {
  kDCMFindMethodExactMatch = kAEEquals,
  kDCMFindMethodBeginningMatch = kAEBeginsWith,
  kDCMFindMethodContainsMatch = kAEContains,
  kDCMFindMethodEndingMatch = kAEEndsWith,
  kDCMFindMethodForwardTrie = 'ftri',
  kDCMFindMethodBackwardTrie = 'btri'
};

typedef OSType DCMFindMethod;



enum {
  kDCMCanUseFileDictionaryMask = 0x00000001,
  kDCMCanUseMemoryDictionaryMask = 0x00000002,
  kDCMCanStreamDictionaryMask = 0x00000004,
  kDCMCanHaveMultipleIndexMask = 0x00000008,
  kDCMCanModifyDictionaryMask = 0x00000010,
  kDCMCanCreateDictionaryMask = 0x00000020,
  kDCMCanAddDictionaryFieldMask = 0x00000040,
  kDCMCanUseTransactionMask = 0x00000080
};

typedef OptionBits DCMAccessMethodFeature;
typedef UInt32 DCMUniqueID;
typedef struct OpaqueDCMObjectID* DCMObjectID;
typedef DCMObjectID DCMAccessMethodID;
typedef DCMObjectID DCMDictionaryID;

typedef struct OpaqueDCMObjectRef* DCMObjectRef;
typedef DCMObjectRef DCMDictionaryRef;
typedef DCMObjectRef DCMDictionaryStreamRef;

typedef struct OpaqueDCMObjectIterator* DCMObjectIterator;
typedef DCMObjectIterator DCMAccessMethodIterator;
typedef DCMObjectIterator DCMDictionaryIterator;
typedef struct OpaqueDCMFoundRecordIterator* DCMFoundRecordIterator;



typedef DescType DCMFieldTag;
typedef DescType DCMFieldType;



struct DCMDictionaryHeader {
  FourCharCode headerSignature;
  UInt32 headerVersion;
  ByteCount headerSize;
  Str63 accessMethod;
};
typedef struct DCMDictionaryHeader DCMDictionaryHeader;



typedef Boolean ( * DCMProgressFilterProcPtr)(Boolean determinateProcess, UInt16 percentageComplete, UInt32 callbackUD);
typedef DCMProgressFilterProcPtr DCMProgressFilterUPP;
# 232 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern UInt32
DCMLibraryVersion(void) ;
# 247 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMNewDictionary(
  DCMAccessMethodID accessMethodID,
  const FSSpec * newDictionaryFile,
  ScriptCode scriptTag,
  const AEDesc * listOfFieldInfoRecords,
  Boolean invisible,
  ItemCount recordCapacity,
  DCMDictionaryID * newDictionary) ;
# 266 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMDeriveNewDictionary(
  DCMDictionaryID srcDictionary,
  const FSSpec * newDictionaryFile,
  ScriptCode scriptTag,
  Boolean invisible,
  ItemCount recordCapacity,
  DCMDictionaryID * newDictionary) ;
# 284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMDeleteDictionary(DCMDictionaryID dictionaryID) ;
# 299 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMRegisterDictionaryFile(
  const FSSpec * dictionaryFile,
  DCMDictionaryID * dictionaryID) ;
# 313 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMUnregisterDictionary(DCMDictionaryID dictionaryID) ;
# 328 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMOpenDictionary(
  DCMDictionaryID dictionaryID,
  ByteCount protectKeySize,
  ConstLogicalAddress protectKey,
  DCMDictionaryRef * dictionaryRef) ;
# 344 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMCloseDictionary(DCMDictionaryRef dictionaryRef) ;
# 359 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetDictionaryWriteAccess(
  DCMDictionaryRef dictionaryRef,
  Duration timeOutDuration) ;
# 373 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMReleaseDictionaryWriteAccess(
  DCMDictionaryRef dictionaryRef,
  Boolean commitTransaction) ;
# 390 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMFindRecords(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMFindMethod findMethod,
  ItemCount preFetchedDataNum,
  DCMFieldTag preFetchedData[],
  ItemCount skipCount,
  ItemCount maxRecordCount,
  DCMFoundRecordIterator * recordIterator) ;
# 412 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern ItemCount
DCMCountRecordIterator(DCMFoundRecordIterator recordIterator) ;
# 424 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMIterateFoundRecord(
  DCMFoundRecordIterator recordIterator,
  ByteCount maxKeySize,
  ByteCount * actualKeySize,
  LogicalAddress keyData,
  DCMUniqueID * uniqueID,
  AEDesc * dataList) ;
# 442 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMDisposeRecordIterator(DCMFoundRecordIterator recordIterator) ;
# 457 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMCountRecord(
  DCMDictionaryID dictionaryID,
  ItemCount * count) ;
# 471 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetRecordSequenceNumber(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMUniqueID uniqueID,
  ItemCount * sequenceNum) ;
# 489 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetNthRecord(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ItemCount serialNum,
  ByteCount maxKeySize,
  ByteCount * keySize,
  LogicalAddress keyData,
  DCMUniqueID * uniqueID) ;
# 508 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetNextRecord(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMUniqueID uniqueID,
  ByteCount maxKeySize,
  ByteCount * nextKeySize,
  LogicalAddress nextKeyData,
  DCMUniqueID * nextUniqueID) ;
# 529 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetPrevRecord(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMUniqueID uniqueID,
  ByteCount maxKeySize,
  ByteCount * prevKeySize,
  LogicalAddress prevKeyData,
  DCMUniqueID * prevUniqueID) ;
# 553 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFieldData(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMUniqueID uniqueID,
  ItemCount numOfData,
  const DCMFieldTag dataTag[],
  AEDesc * dataList) ;
# 573 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMSetFieldData(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMUniqueID uniqueID,
  const AEDesc * dataList) ;
# 594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMAddRecord(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  Boolean checkOnly,
  const AEDesc * dataList,
  DCMUniqueID * newUniqueID) ;
# 613 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMDeleteRecord(
  DCMDictionaryRef dictionaryRef,
  DCMFieldTag keyFieldTag,
  ByteCount keySize,
  ConstLogicalAddress keyData,
  DCMUniqueID uniqueID) ;
# 633 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMReorganizeDictionary(
  DCMDictionaryID dictionaryID,
  ItemCount extraCapacity,
  DCMProgressFilterUPP progressProc,
  UInt32 userData) ;
# 649 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMCompactDictionary(
  DCMDictionaryID dictionaryID,
  DCMProgressFilterUPP progressProc,
  UInt32 userData) ;
# 667 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFileFromDictionaryID(
  DCMDictionaryID dictionaryID,
  FSSpec * fileRef) ;
# 681 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetDictionaryIDFromFile(
  const FSSpec * fileRef,
  DCMDictionaryID * dictionaryID) ;
# 695 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern DCMDictionaryID
DCMGetDictionaryIDFromRef(DCMDictionaryRef dictionaryRef) ;
# 710 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetDictionaryFieldInfo(
  DCMDictionaryID dictionaryID,
  DCMFieldTag fieldTag,
  AEDesc * fieldInfoRecord) ;
# 728 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetDictionaryProperty(
  DCMDictionaryID dictionaryID,
  DCMFieldTag propertyTag,
  ByteCount maxPropertySize,
  ByteCount * actualSize,
  LogicalAddress propertyValue) ;
# 745 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMSetDictionaryProperty(
  DCMDictionaryID dictionaryID,
  DCMFieldTag propertyTag,
  ByteCount propertySize,
  ConstLogicalAddress propertyValue) ;
# 761 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetDictionaryPropertyList(
  DCMDictionaryID dictionaryID,
  ItemCount maxPropertyNum,
  ItemCount * numProperties,
  DCMFieldTag propertyTag[]) ;
# 780 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMCreateDictionaryIterator(DCMDictionaryIterator * dictionaryIterator) ;
# 795 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMCreateAccessMethodIterator(DCMAccessMethodIterator * accessMethodIterator) ;
# 810 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern ItemCount
DCMCountObjectIterator(DCMObjectIterator iterator) ;
# 822 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMIterateObject(
  DCMObjectIterator iterator,
  DCMObjectID * objectID) ;
# 836 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMResetObjectIterator(DCMObjectIterator iterator) ;
# 848 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMDisposeObjectIterator(DCMObjectIterator iterator) ;
# 863 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetAccessMethodIDFromName(
  ConstStr63Param accessMethodName,
  DCMAccessMethodID * accessMethodID) ;
# 880 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMCreateFieldInfoRecord(
  DescType fieldTag,
  DescType fieldType,
  ByteCount maxRecordSize,
  DCMFieldAttributes fieldAttributes,
  AEDesc * fieldDefaultData,
  ItemCount numberOfFindMethods,
  DCMFindMethod findMethods[],
  AEDesc * fieldInfoRecord) ;
# 900 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFieldTagAndType(
  const AEDesc * fieldInfoRecord,
  DCMFieldTag * fieldTag,
  DCMFieldType * fieldType) ;
# 915 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFieldMaxRecordSize(
  const AEDesc * fieldInfoRecord,
  ByteCount * maxRecordSize) ;
# 929 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFieldAttributes(
  const AEDesc * fieldInfoRecord,
  DCMFieldAttributes * attributes) ;
# 943 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFieldDefaultData(
  const AEDesc * fieldInfoRecord,
  DescType desiredType,
  AEDesc * fieldDefaultData) ;
# 958 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
extern OSStatus
DCMGetFieldFindMethods(
  const AEDesc * fieldInfoRecord,
  ItemCount findMethodsArrayMaxSize,
  DCMFindMethod findMethods[],
  ItemCount * actualNumberOfFindMethods) ;
# 978 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
    inline Boolean DCMDictionaryManagerAvailable() { return true; }
# 996 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
enum {
  kMaxYomiLengthInAppleJapaneseDictionary = 40,
  kMaxKanjiLengthInAppleJapaneseDictionary = 64
};




enum {
  kDCMJapaneseYomiTag = 'yomi',
  kDCMJapaneseHyokiTag = 'hyok',
  kDCMJapaneseHinshiTag = 'hins',
  kDCMJapaneseWeightTag = 'hind',
  kDCMJapanesePhoneticTag = 'hton',
  kDCMJapaneseAccentTag = 'acnt',
  kDCMJapaneseOnKunReadingTag = 'OnKn',
  kDCMJapaneseFukugouInfoTag = 'fuku'
};

enum {
  kDCMJapaneseYomiType = typeUnicodeText,
  kDCMJapaneseHyokiType = typeUnicodeText,
  kDCMJapaneseHinshiType = 'hins',
  kDCMJapaneseWeightType = typeSInt16,
  kDCMJapanesePhoneticType = typeUnicodeText,
  kDCMJapaneseAccentType = 'byte',
  kDCMJapaneseOnKunReadingType = typeUnicodeText,
  kDCMJapaneseFukugouInfoType = 'fuku'
};
# 1034 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
#pragma options align=reset
#pragma options align=mac68k


enum {

  kInsert = 0,
  kReplace = 1,
  kInsertOrReplace = 2
};



typedef short DictionaryDataInsertMode;
enum {

  kIsCaseSensitive = 0x10,
  kIsNotDiacriticalSensitive = 0x20
};

enum {

  kNoun = -1,
  kVerb = -2,
  kAdjective = -3,
  kAdverb = -4
};


typedef SInt8 DictionaryEntryAttribute;

struct DictionaryInformation {
  FSSpec dictionaryFSSpec;
  SInt32 numberOfRecords;
  SInt32 currentGarbageSize;
  ScriptCode script;
  SInt16 maximumKeyLength;
  SInt8 keyAttributes;
};
typedef struct DictionaryInformation DictionaryInformation;
struct DictionaryAttributeTable {
  UInt8 datSize;
  DictionaryEntryAttribute datTable[1];
};
typedef struct DictionaryAttributeTable DictionaryAttributeTable;
typedef DictionaryAttributeTable * DictionaryAttributeTablePtr;
# 1174 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/Dictionary.h" 3
#pragma options align=reset


}
# 29 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 2 3
# 40 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern "C" {


#pragma options align=power


typedef struct OpaqueLAEnvironmentRef* LAEnvironmentRef;
typedef struct OpaqueLAContextRef* LAContextRef;
typedef AEKeyword LAPropertyKey;
typedef DescType LAPropertyType;



struct LAMorphemeRec {
  ByteCount sourceTextLength;
  LogicalAddress sourceTextPtr;
  ByteCount morphemeTextLength;
  LogicalAddress morphemeTextPtr;
  UInt32 partOfSpeech;
};
typedef struct LAMorphemeRec LAMorphemeRec;
struct LAMorphemesArray {
  ItemCount morphemesCount;
  ByteCount processedTextLength;
  ByteCount morphemesTextLength;
  LAMorphemeRec morphemes[1];
};
typedef struct LAMorphemesArray LAMorphemesArray;
typedef LAMorphemesArray * LAMorphemesArrayPtr;
enum {
  kLAMorphemesArrayVersion = 0
};




typedef AERecord LAMorphemeBundle;
typedef AERecord LAMorphemePath;
typedef AERecord LAMorpheme;
typedef AERecord LAHomograph;
enum {
  keyAELAMorphemeBundle = 'lmfb',
  keyAELAMorphemePath = 'lmfp',
  keyAELAMorpheme = 'lmfn',
  keyAELAHomograph = 'lmfh'
};

enum {
  typeLAMorphemeBundle = typeAERecord,
  typeLAMorphemePath = typeAERecord,
  typeLAMorpheme = typeAEList,
  typeLAHomograph = typeAEList
};




enum {
  keyAEMorphemePartOfSpeechCode = 'lamc',
  keyAEMorphemeTextRange = 'lamt'
};

enum {
  typeAEMorphemePartOfSpeechCode = 'lamc',
  typeAEMorphemeTextRange = 'lamt'
};

typedef UInt32 MorphemePartOfSpeech;
struct MorphemeTextRange {
  UInt32 sourceOffset;
  UInt32 length;
};
typedef struct MorphemeTextRange MorphemeTextRange;



enum {
  kLAEndOfSourceTextMask = 0x00000001
};




enum {
  kLADefaultEdge = 0,
  kLAFreeEdge = 1,
  kLAIncompleteEdge = 2
};




enum {
  kLAAllMorphemes = 0
};
# 148 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern UInt32
LALibraryVersion(void) ;
# 163 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LATextToMorphemes(
  LAContextRef context,
  TextEncoding preferedEncoding,
  ByteCount textLength,
  ConstLogicalAddress sourceText,
  ByteCount bufferSize,
  OptionBits convertFlags,
  UInt32 structureVersion,
  ByteCount * acceptedLength,
  LAMorphemesArrayPtr resultBuffer) ;
# 187 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAOpenAnalysisContext(
  LAEnvironmentRef environ,
  LAContextRef * context) ;
# 201 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LACloseAnalysisContext(LAContextRef context) ;
# 216 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAGetEnvironmentList(
  UInt32 maxCount,
  UInt32 * actualCount,
  LAEnvironmentRef environmentList[]) ;
# 231 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAGetEnvironmentName(
  LAEnvironmentRef environment,
  Str63 environmentName) ;
# 245 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAGetEnvironmentRef(
  ConstStr63Param targetEnvironmentName,
  LAEnvironmentRef * environment) ;
# 259 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LACreateCustomEnvironment(
  LAEnvironmentRef baseEnvironment,
  ConstStr63Param newEnvironmentName,
  Boolean persistent,
  LAEnvironmentRef * newEnvironment) ;
# 275 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LADeleteCustomEnvironment(LAEnvironmentRef environment) ;
# 290 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAOpenDictionary(
  LAEnvironmentRef environ,
  const FSSpec * dictionary) ;
# 304 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LACloseDictionary(
  LAEnvironmentRef environ,
  const FSSpec * dictionary) ;
# 318 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAListAvailableDictionaries(
  LAEnvironmentRef environ,
  ItemCount maxCount,
  ItemCount * actualCount,
  FSSpec dictionaryList[],
  Boolean opened[]) ;
# 335 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAAddNewWord(
  LAEnvironmentRef environ,
  const FSSpec * dictionary,
  const AEDesc * dataList) ;
# 353 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAMorphemeAnalysis(
  LAContextRef context,
  ConstUniCharArrayPtr text,
  UniCharCount textLength,
  LAMorphemePath * leadingPath,
  LAMorphemePath * trailingPath,
  ItemCount pathCount,
  LAMorphemeBundle * result) ;
# 372 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAContinuousMorphemeAnalysis(
  LAContextRef context,
  ConstUniCharArrayPtr text,
  UniCharCount textLength,
  Boolean incrementalText,
  LAMorphemePath * leadingPath,
  LAMorphemePath * trailingPath,
  Boolean * modified) ;
# 391 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAGetMorphemes(
  LAContextRef context,
  LAMorphemePath * result) ;
# 405 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAShiftMorphemes(
  LAContextRef context,
  ItemCount morphemeCount,
  LAMorphemePath * path,
  UniCharCount * shiftedLength) ;
# 421 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
extern OSStatus
LAResetAnalysis(LAContextRef context) ;
# 437 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
    inline Boolean LALanguageAnalysisAvailable() { return true; }
# 457 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
enum {
  kAppleJapaneseDictionarySignature = 'jlan'
};




enum {
  kMaxInputLengthOfAppleJapaneseEngine = 200
};





typedef MorphemePartOfSpeech JapanesePartOfSpeech;
typedef UInt16 HomographWeight;
typedef UInt8 HomographAccent;



enum {
  keyAEHomographDicInfo = 'lahd',
  keyAEHomographWeight = 'lahw',
  keyAEHomographAccent = 'laha'
};

enum {
  typeAEHomographDicInfo = 'lahd',
  typeAEHomographWeight = typeSInt16,
  typeAEHomographAccent = 'laha'
};




struct HomographDicInfoRec {
  DCMDictionaryID dictionaryID;
  DCMUniqueID uniqueID;
};
typedef struct HomographDicInfoRec HomographDicInfoRec;
# 506 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LanguageAnalysis.h" 3
enum {
  kLASpeechRoughClassMask = 0x0000F000,
  kLASpeechMediumClassMask = 0x0000FF00,
  kLASpeechStrictClassMask = 0x0000FFF0,
  kLASpeechKatsuyouMask = 0x0000000F
};





enum {
  kLASpeechMeishi = 0x00000000,
  kLASpeechFutsuuMeishi = 0x00000000,
  kLASpeechJinmei = 0x00000100,
  kLASpeechJinmeiSei = 0x00000110,
  kLASpeechJinmeiMei = 0x00000120,
  kLASpeechChimei = 0x00000200,
  kLASpeechSetsubiChimei = 0x00000210,
  kLASpeechSoshikimei = 0x00000300,
  kLASpeechKoyuuMeishi = 0x00000400,
  kLASpeechSahenMeishi = 0x00000500,
  kLASpeechKeidouMeishi = 0x00000600,
  kLASpeechRentaishi = 0x00001000,
  kLASpeechFukushi = 0x00002000,
  kLASpeechSetsuzokushi = 0x00003000,
  kLASpeechKandoushi = 0x00004000,
  kLASpeechDoushi = 0x00005000,
  kLASpeechGodanDoushi = 0x00005000,
  kLASpeechKagyouGodan = 0x00005000,
  kLASpeechSagyouGodan = 0x00005010,
  kLASpeechTagyouGodan = 0x00005020,
  kLASpeechNagyouGodan = 0x00005030,
  kLASpeechMagyouGodan = 0x00005040,
  kLASpeechRagyouGodan = 0x00005050,
  kLASpeechWagyouGodan = 0x00005060,
  kLASpeechGagyouGodan = 0x00005070,
  kLASpeechBagyouGodan = 0x00005080,
  kLASpeechIchidanDoushi = 0x00005100,
  kLASpeechKahenDoushi = 0x00005200,
  kLASpeechSahenDoushi = 0x00005300,
  kLASpeechZahenDoushi = 0x00005400,
  kLASpeechKeiyoushi = 0x00006000,
  kLASpeechKeiyoudoushi = 0x00007000,
  kLASpeechSettougo = 0x00008000,
  kLASpeechSuujiSettougo = 0x00008100,
  kLASpeechSetsubigo = 0x00009000,
  kLASpeechJinmeiSetsubigo = 0x00009100,
  kLASpeechChimeiSetsubigo = 0x00009200,
  kLASpeechSoshikimeiSetsubigo = 0x00009300,
  kLASpeechSuujiSetsubigo = 0x00009400,
  kLASpeechMuhinshi = 0x0000A000,
  kLASpeechTankanji = 0x0000A000,
  kLASpeechKigou = 0x0000A100,
  kLASpeechKuten = 0x0000A110,
  kLASpeechTouten = 0x0000A120,
  kLASpeechSuushi = 0x0000A200,
  kLASpeechDokuritsugo = 0x0000A300,
  kLASpeechSeiku = 0x0000A400,
  kLASpeechJodoushi = 0x0000B000,
  kLASpeechJoshi = 0x0000C000
};





enum {
  kLASpeechKatsuyouGokan = 0x00000001,
  kLASpeechKatsuyouMizen = 0x00000002,
  kLASpeechKatsuyouRenyou = 0x00000003,
  kLASpeechKatsuyouSyuushi = 0x00000004,
  kLASpeechKatsuyouRentai = 0x00000005,
  kLASpeechKatsuyouKatei = 0x00000006,
  kLASpeechKatsuyouMeirei = 0x00000007
};





#pragma options align=reset


}
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LangAnalysis.framework/Headers/LangAnalysis.h" 2 3
# 55 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 1 3
# 33 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern "C" {


#pragma pack(push, 2)

enum {
  kTextToSpeechSynthType = 'ttsc',
  kTextToSpeechVoiceType = 'ttvd',
  kTextToSpeechVoiceFileType = 'ttvf',
  kTextToSpeechVoiceBundleType = 'ttvb'
};

enum {
  kNoEndingProsody = 1,
  kNoSpeechInterrupt = 2,
  kPreflightThenPause = 4
};

enum {
  kImmediate = 0,
  kEndOfWord = 1,
  kEndOfSentence = 2
};





enum {
  soStatus = 'stat',
  soErrors = 'erro',
  soInputMode = 'inpt',
  soCharacterMode = 'char',
  soNumberMode = 'nmbr',
  soRate = 'rate',
  soPitchBase = 'pbas',
  soPitchMod = 'pmod',
  soVolume = 'volm',
  soSynthType = 'vers',
  soRecentSync = 'sync',
  soPhonemeSymbols = 'phsy',
  soCurrentVoice = 'cvox',
  soCommandDelimiter = 'dlim',
  soReset = 'rset',
  soCurrentA5 = 'myA5',
  soRefCon = 'refc',
  soTextDoneCallBack = 'tdcb',
  soSpeechDoneCallBack = 'sdcb',
  soSyncCallBack = 'sycb',
  soErrorCallBack = 'ercb',
  soPhonemeCallBack = 'phcb',
  soWordCallBack = 'wdcb',
  soSynthExtension = 'xtnd',
  soSoundOutput = 'sndo',
  soOutputToFileWithCFURL = 'opaf'
};





enum {
  modeText = 'TEXT',
  modePhonemes = 'PHON',
  modeNormal = 'NORM',
  modeLiteral = 'LTRL'
};


enum {
  soVoiceDescription = 'info',
  soVoiceFile = 'fref'
};






struct SpeechChannelRecord {
  long data[1];
};
typedef struct SpeechChannelRecord SpeechChannelRecord;
typedef SpeechChannelRecord * SpeechChannel;

struct VoiceSpec {
  OSType creator;
  OSType id;
};
typedef struct VoiceSpec VoiceSpec;
typedef VoiceSpec * VoiceSpecPtr;

enum {
  kNeuter = 0,
  kMale = 1,
  kFemale = 2
};




struct VoiceDescription {
  SInt32 length;
  VoiceSpec voice;
  SInt32 version;
  Str63 name;
  Str255 comment;
  SInt16 gender;
  SInt16 age;
  SInt16 script;
  SInt16 language;
  SInt16 region;
  SInt32 reserved[4];
};
typedef struct VoiceDescription VoiceDescription;


struct VoiceFileInfo {
  FSSpec fileSpec;
  SInt16 resID;
};
typedef struct VoiceFileInfo VoiceFileInfo;
struct SpeechStatusInfo {
  Boolean outputBusy;
  Boolean outputPaused;
  long inputBytesLeft;
  SInt16 phonemeCode;
};
typedef struct SpeechStatusInfo SpeechStatusInfo;


struct SpeechErrorInfo {
  SInt16 count;
  OSErr oldest;
  long oldPos;
  OSErr newest;
  long newPos;
};
typedef struct SpeechErrorInfo SpeechErrorInfo;


struct SpeechVersionInfo {
  OSType synthType;
  OSType synthSubType;
  OSType synthManufacturer;
  SInt32 synthFlags;
  NumVersion synthVersion;
};
typedef struct SpeechVersionInfo SpeechVersionInfo;


struct PhonemeInfo {
  SInt16 opcode;
  Str15 phStr;
  Str31 exampleStr;
  SInt16 hiliteStart;
  SInt16 hiliteEnd;
};
typedef struct PhonemeInfo PhonemeInfo;

struct PhonemeDescriptor {
  SInt16 phonemeCount;
  PhonemeInfo thePhonemes[1];
};
typedef struct PhonemeDescriptor PhonemeDescriptor;
struct SpeechXtndData {
  OSType synthCreator;
  Byte synthData[2];
};
typedef struct SpeechXtndData SpeechXtndData;

struct DelimiterInfo {
  Byte startDelimiter[2];
  Byte endDelimiter[2];
};
typedef struct DelimiterInfo DelimiterInfo;
typedef void ( * SpeechTextDoneProcPtr)(SpeechChannel chan, SRefCon refCon, const void **nextBuf, unsigned long *byteLen, SInt32 *controlFlags);
typedef void ( * SpeechDoneProcPtr)(SpeechChannel chan, SRefCon refCon);
typedef void ( * SpeechSyncProcPtr)(SpeechChannel chan, SRefCon refCon, OSType syncMessage);
typedef void ( * SpeechErrorProcPtr)(SpeechChannel chan, SRefCon refCon, OSErr theError, long bytePos);
typedef void ( * SpeechPhonemeProcPtr)(SpeechChannel chan, SRefCon refCon, SInt16 phonemeOpcode);
typedef void ( * SpeechWordProcPtr)(SpeechChannel chan, SRefCon refCon, unsigned long wordPos, UInt16 wordLen);
typedef SpeechTextDoneProcPtr SpeechTextDoneUPP;
typedef SpeechDoneProcPtr SpeechDoneUPP;
typedef SpeechSyncProcPtr SpeechSyncUPP;
typedef SpeechErrorProcPtr SpeechErrorUPP;
typedef SpeechPhonemeProcPtr SpeechPhonemeUPP;
typedef SpeechWordProcPtr SpeechWordUPP;
# 229 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SpeechTextDoneUPP
NewSpeechTextDoneUPP(SpeechTextDoneProcPtr userRoutine) ;
# 240 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SpeechDoneUPP
NewSpeechDoneUPP(SpeechDoneProcPtr userRoutine) ;
# 251 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SpeechSyncUPP
NewSpeechSyncUPP(SpeechSyncProcPtr userRoutine) ;
# 262 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SpeechErrorUPP
NewSpeechErrorUPP(SpeechErrorProcPtr userRoutine) ;
# 273 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SpeechPhonemeUPP
NewSpeechPhonemeUPP(SpeechPhonemeProcPtr userRoutine) ;
# 284 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SpeechWordUPP
NewSpeechWordUPP(SpeechWordProcPtr userRoutine) ;
# 295 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
DisposeSpeechTextDoneUPP(SpeechTextDoneUPP userUPP) ;
# 306 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
DisposeSpeechDoneUPP(SpeechDoneUPP userUPP) ;
# 317 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
DisposeSpeechSyncUPP(SpeechSyncUPP userUPP) ;
# 328 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
DisposeSpeechErrorUPP(SpeechErrorUPP userUPP) ;
# 339 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
DisposeSpeechPhonemeUPP(SpeechPhonemeUPP userUPP) ;
# 350 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
DisposeSpeechWordUPP(SpeechWordUPP userUPP) ;
# 361 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
InvokeSpeechTextDoneUPP(
  SpeechChannel chan,
  SRefCon refCon,
  const void ** nextBuf,
  unsigned long * byteLen,
  SInt32 * controlFlags,
  SpeechTextDoneUPP userUPP) ;
# 378 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
InvokeSpeechDoneUPP(
  SpeechChannel chan,
  SRefCon refCon,
  SpeechDoneUPP userUPP) ;
# 392 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
InvokeSpeechSyncUPP(
  SpeechChannel chan,
  SRefCon refCon,
  OSType syncMessage,
  SpeechSyncUPP userUPP) ;
# 407 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
InvokeSpeechErrorUPP(
  SpeechChannel chan,
  SRefCon refCon,
  OSErr theError,
  long bytePos,
  SpeechErrorUPP userUPP) ;
# 423 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
InvokeSpeechPhonemeUPP(
  SpeechChannel chan,
  SRefCon refCon,
  SInt16 phonemeOpcode,
  SpeechPhonemeUPP userUPP) ;
# 438 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern void
InvokeSpeechWordUPP(
  SpeechChannel chan,
  SRefCon refCon,
  unsigned long wordPos,
  UInt16 wordLen,
  SpeechWordUPP userUPP) ;



    inline SpeechTextDoneUPP NewSpeechTextDoneUPP(SpeechTextDoneProcPtr userRoutine) { return userRoutine; }
    inline SpeechDoneUPP NewSpeechDoneUPP(SpeechDoneProcPtr userRoutine) { return userRoutine; }
    inline SpeechSyncUPP NewSpeechSyncUPP(SpeechSyncProcPtr userRoutine) { return userRoutine; }
    inline SpeechErrorUPP NewSpeechErrorUPP(SpeechErrorProcPtr userRoutine) { return userRoutine; }
    inline SpeechPhonemeUPP NewSpeechPhonemeUPP(SpeechPhonemeProcPtr userRoutine) { return userRoutine; }
    inline SpeechWordUPP NewSpeechWordUPP(SpeechWordProcPtr userRoutine) { return userRoutine; }
    inline void DisposeSpeechTextDoneUPP(SpeechTextDoneUPP) { }
    inline void DisposeSpeechDoneUPP(SpeechDoneUPP) { }
    inline void DisposeSpeechSyncUPP(SpeechSyncUPP) { }
    inline void DisposeSpeechErrorUPP(SpeechErrorUPP) { }
    inline void DisposeSpeechPhonemeUPP(SpeechPhonemeUPP) { }
    inline void DisposeSpeechWordUPP(SpeechWordUPP) { }
    inline void InvokeSpeechTextDoneUPP(SpeechChannel chan, SRefCon refCon, const void ** nextBuf, unsigned long * byteLen, SInt32 * controlFlags, SpeechTextDoneUPP userUPP) { (*userUPP)(chan, refCon, nextBuf, byteLen, controlFlags); }
    inline void InvokeSpeechDoneUPP(SpeechChannel chan, SRefCon refCon, SpeechDoneUPP userUPP) { (*userUPP)(chan, refCon); }
    inline void InvokeSpeechSyncUPP(SpeechChannel chan, SRefCon refCon, OSType syncMessage, SpeechSyncUPP userUPP) { (*userUPP)(chan, refCon, syncMessage); }
    inline void InvokeSpeechErrorUPP(SpeechChannel chan, SRefCon refCon, OSErr theError, long bytePos, SpeechErrorUPP userUPP) { (*userUPP)(chan, refCon, theError, bytePos); }
    inline void InvokeSpeechPhonemeUPP(SpeechChannel chan, SRefCon refCon, SInt16 phonemeOpcode, SpeechPhonemeUPP userUPP) { (*userUPP)(chan, refCon, phonemeOpcode); }
    inline void InvokeSpeechWordUPP(SpeechChannel chan, SRefCon refCon, unsigned long wordPos, UInt16 wordLen, SpeechWordUPP userUPP) { (*userUPP)(chan, refCon, wordPos, wordLen); }
# 496 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern NumVersion
SpeechManagerVersion(void) ;
# 508 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
MakeVoiceSpec(
  OSType creator,
  OSType id,
  VoiceSpec * voice) ;
# 523 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
CountVoices(SInt16 * numVoices) ;
# 535 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
GetIndVoice(
  SInt16 index,
  VoiceSpec * voice) ;
# 549 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
GetVoiceDescription(
  const VoiceSpec * voice,
  VoiceDescription * info,
  long infoLength) ;
# 564 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
GetVoiceInfo(
  const VoiceSpec * voice,
  OSType selector,
  void * voiceInfo) ;
# 579 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
NewSpeechChannel(
  VoiceSpec * voice,
  SpeechChannel * chan) ;
# 593 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
DisposeSpeechChannel(SpeechChannel chan) ;
# 605 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
SpeakString(ConstStr255Param textToBeSpoken) ;
# 617 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
SpeakText(
  SpeechChannel chan,
  const void * textBuf,
  unsigned long textBytes) ;
# 632 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
SpeakBuffer(
  SpeechChannel chan,
  const void * textBuf,
  unsigned long textBytes,
  SInt32 controlFlags) ;
# 648 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
StopSpeech(SpeechChannel chan) ;
# 660 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
StopSpeechAt(
  SpeechChannel chan,
  SInt32 whereToStop) ;
# 674 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
PauseSpeechAt(
  SpeechChannel chan,
  SInt32 whereToPause) ;
# 688 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
ContinueSpeech(SpeechChannel chan) ;
# 700 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SInt16
SpeechBusy(void) ;
# 712 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern SInt16
SpeechBusySystemWide(void) ;
# 724 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
SetSpeechRate(
  SpeechChannel chan,
  Fixed rate) ;
# 738 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
GetSpeechRate(
  SpeechChannel chan,
  Fixed * rate) ;
# 752 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
SetSpeechPitch(
  SpeechChannel chan,
  Fixed pitch) ;
# 766 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
GetSpeechPitch(
  SpeechChannel chan,
  Fixed * pitch) ;
# 780 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
SetSpeechInfo(
  SpeechChannel chan,
  OSType selector,
  const void * speechInfo) ;
# 795 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
GetSpeechInfo(
  SpeechChannel chan,
  OSType selector,
  void * speechInfo) ;
# 810 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
TextToPhonemes(
  SpeechChannel chan,
  const void * textBuf,
  unsigned long textBytes,
  Handle phonemeBuf,
  long * phonemeBytes) ;
# 827 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Headers/SpeechSynthesis.h" 3
extern OSErr
UseDictionary(
  SpeechChannel chan,
  Handle dictionary) ;





#pragma pack(pop)


}
# 59 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h" 1 3
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern "C" {


#pragma pack(push, 2)





enum {
  kLSAppInTrashErr = -10660,
  kLSExecutableIncorrectFormat = -10661,
  kLSUnknownErr = -10810,
  kLSNotAnApplicationErr = -10811,
  kLSNotInitializedErr = -10812,
  kLSDataUnavailableErr = -10813,
  kLSApplicationNotFoundErr = -10814,
  kLSUnknownTypeErr = -10815,
  kLSDataTooOldErr = -10816,
  kLSDataErr = -10817,
  kLSLaunchInProgressErr = -10818,
  kLSNotRegisteredErr = -10819,
  kLSAppDoesNotClaimTypeErr = -10820,
  kLSAppDoesNotSupportSchemeWarning = -10821,
  kLSServerCommunicationErr = -10822,
  kLSCannotSetInfoErr = -10823,
  kLSNoRegistrationInfoErr = -10824,
  kLSIncompatibleSystemVersionErr = -10825,
  kLSNoLaunchPermissionErr = -10826,
  kLSNoExecutableErr = -10827,
  kLSNoClassicEnvironmentErr = -10828,
  kLSMultipleSessionsNotSupportedErr = -10829
};

typedef OptionBits LSInitializeFlags;
enum {
  kLSInitializeDefaults = 0x00000001
};

enum {
  kLSMinCatInfoBitmap = (kFSCatInfoNodeFlags | kFSCatInfoParentDirID | kFSCatInfoFinderInfo | kFSCatInfoFinderXInfo)
};


typedef OptionBits LSRequestedInfo;
enum {
  kLSRequestExtension = 0x00000001,
  kLSRequestTypeCreator = 0x00000002,
  kLSRequestBasicFlagsOnly = 0x00000004,
  kLSRequestAppTypeFlags = 0x00000008,
  kLSRequestAllFlags = 0x00000010,
  kLSRequestIconAndKind = 0x00000020,
  kLSRequestExtensionFlagsOnly = 0x00000040,
  kLSRequestAllInfo = (UInt32)0xFFFFFFFF
};

typedef OptionBits LSItemInfoFlags;
enum {
  kLSItemInfoIsPlainFile = 0x00000001,
  kLSItemInfoIsPackage = 0x00000002,
  kLSItemInfoIsApplication = 0x00000004,
  kLSItemInfoIsContainer = 0x00000008,
  kLSItemInfoIsAliasFile = 0x00000010,
  kLSItemInfoIsSymlink = 0x00000020,
  kLSItemInfoIsInvisible = 0x00000040,
  kLSItemInfoIsNativeApp = 0x00000080,
  kLSItemInfoIsClassicApp = 0x00000100,
  kLSItemInfoAppPrefersNative = 0x00000200,
  kLSItemInfoAppPrefersClassic = 0x00000400,
  kLSItemInfoAppIsScriptable = 0x00000800,
  kLSItemInfoIsVolume = 0x00001000,
  kLSItemInfoExtensionIsHidden = 0x00100000
};

typedef OptionBits LSRolesMask;
enum {
  kLSRolesNone = 0x00000001,
  kLSRolesViewer = 0x00000002,
  kLSRolesEditor = 0x00000004,
  kLSRolesShell = 0x00000008,
  kLSRolesAll = (UInt32)0xFFFFFFFF
};


typedef UInt32 LSKindID;
enum {
  kLSUnknownKindID = 0
};


enum {
  kLSUnknownType = 0,
  kLSUnknownCreator = 0
};

struct LSItemInfoRecord {
  LSItemInfoFlags flags;
  OSType filetype;
  OSType creator;
  CFStringRef extension;


  CFStringRef iconFileName;
  LSKindID kindID;


};
typedef struct LSItemInfoRecord LSItemInfoRecord;

typedef OptionBits LSAcceptanceFlags;
enum {
  kLSAcceptDefault = 0x00000001,
  kLSAcceptAllowLoginUI = 0x00000002
};
# 162 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSInit(LSInitializeFlags inFlags) ;
# 178 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSTerm(void) ;
# 212 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyItemInfoForRef(
  const FSRef * inItemRef,
  LSRequestedInfo inWhichInfo,
  LSItemInfoRecord * outItemInfo) ;
# 248 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyItemInfoForURL(
  CFURLRef inURL,
  LSRequestedInfo inWhichInfo,
  LSItemInfoRecord * outItemInfo) ;
# 287 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSGetExtensionInfo(
  UniCharCount inNameLen,
  const UniChar inNameBuffer[],
  UniCharCount * outExtStartIndex) ;
# 322 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyDisplayNameForRef(
  const FSRef * inRef,
  CFStringRef * outDisplayName) ;
# 356 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyDisplayNameForURL(
  CFURLRef inURL,
  CFStringRef * outDisplayName) ;
# 391 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSSetExtensionHiddenForRef(
  const FSRef * inRef,
  Boolean inHide) ;
# 426 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSSetExtensionHiddenForURL(
  CFURLRef inURL,
  Boolean inHide) ;
# 460 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyKindStringForRef(
  const FSRef * inFSRef,
  CFStringRef * outKindString) ;
# 494 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyKindStringForURL(
  CFURLRef inURL,
  CFStringRef * outKindString) ;
# 545 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyKindStringForTypeInfo(
  OSType inType,
  OSType inCreator,
  CFStringRef inExtension,
  CFStringRef * outKindString) ;
# 581 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyKindStringForMIMEType(
  CFStringRef inMIMEType,
  CFStringRef * outKindString) ;
# 627 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSGetApplicationForItem(
  const FSRef * inItemRef,
  LSRolesMask inRoleMask,
  FSRef * outAppRef,
  CFURLRef * outAppURL) ;
# 684 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSGetApplicationForInfo(
  OSType inType,
  OSType inCreator,
  CFStringRef inExtension,
  LSRolesMask inRoleMask,
  FSRef * outAppRef,
  CFURLRef * outAppURL) ;
# 730 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyApplicationForMIMEType(
  CFStringRef inMIMEType,
  LSRolesMask inRoleMask,
  CFURLRef * outAppURL) ;
# 778 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSGetApplicationForURL(
  CFURLRef inURL,
  LSRolesMask inRoleMask,
  FSRef * outAppRef,
  CFURLRef * outAppURL) ;
# 829 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSFindApplicationForInfo(
  OSType inCreator,
  CFStringRef inBundleID,
  CFStringRef inName,
  FSRef * outAppRef,
  CFURLRef * outAppURL) ;
# 877 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCanRefAcceptItem(
  const FSRef * inItemFSRef,
  const FSRef * inTargetRef,
  LSRolesMask inRoleMask,
  LSAcceptanceFlags inFlags,
  Boolean * outAcceptsItem) ;
# 925 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCanURLAcceptURL(
  CFURLRef inItemURL,
  CFURLRef inTargetURL,
  LSRolesMask inRoleMask,
  LSAcceptanceFlags inFlags,
  Boolean * outAcceptsItem) ;
# 968 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSRegisterURL(
  CFURLRef inURL,
  Boolean inUpdate) ;
# 1007 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSRegisterFSRef(
  const FSRef * inRef,
  Boolean inUpdate) ;
# 1050 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern CFArrayRef
LSCopyApplicationURLsForURL(
  CFURLRef inURL,
  LSRolesMask inRoleMask) ;
# 1127 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemContentType ;
# 1136 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemFileType ;
# 1145 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemFileCreator ;
# 1154 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemExtension ;
# 1163 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemDisplayName ;
# 1172 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemDisplayKind ;
# 1181 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemRoleHandlerDisplayName ;
# 1190 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemIsInvisible ;
# 1199 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern const CFStringRef kLSItemExtensionIsHidden ;
# 1235 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyItemAttribute(
  const FSRef * inItem,
  LSRolesMask inRoles,
  CFStringRef inAttributeName,
  CFTypeRef * outValue) ;
# 1268 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSCopyItemAttributes(
  const FSRef * inItem,
  LSRolesMask inRoles,
  CFArrayRef inAttributeNames,
  CFDictionaryRef * outValues) ;
# 1300 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern CFStringRef
LSCopyDefaultRoleHandlerForContentType(
  CFStringRef inContentType,
  LSRolesMask inRole) ;
# 1328 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern CFArrayRef
LSCopyAllRoleHandlersForContentType(
  CFStringRef inContentType,
  LSRolesMask inRole) ;
# 1354 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSSetDefaultRoleHandlerForContentType(
  CFStringRef inContentType,
  LSRolesMask inRole,
  CFStringRef inHandlerBundleID) ;
# 1373 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
typedef OptionBits LSHandlerOptions;
enum {
  kLSHandlerOptionsDefault = 0,
  kLSHandlerOptionsIgnoreCreator = 1
};
# 1396 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern LSHandlerOptions
LSGetHandlerOptionsForContentType(CFStringRef inContentType) ;
# 1417 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSSetHandlerOptionsForContentType(
  CFStringRef inContentType,
  LSHandlerOptions inOptions) ;
# 1442 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern CFStringRef
LSCopyDefaultHandlerForURLScheme(CFStringRef inURLScheme) ;
# 1467 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern CFArrayRef
LSCopyAllHandlersForURLScheme(CFStringRef inURLScheme) ;
# 1490 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSInfo.h" 3
extern OSStatus
LSSetDefaultHandlerForURLScheme(
  CFStringRef inURLScheme,
  CFStringRef inHandlerBundleID) ;



#pragma pack(pop)


}
# 22 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 1 3
# 41 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern "C" {


#pragma pack(push, 2)





typedef OptionBits LSLaunchFlags;
enum {
  kLSLaunchDefaults = 0x00000001,
  kLSLaunchAndPrint = 0x00000002,
  kLSLaunchReserved2 = 0x00000004,
  kLSLaunchReserved3 = 0x00000008,
  kLSLaunchReserved4 = 0x00000010,
  kLSLaunchReserved5 = 0x00000020,
  kLSLaunchAndDisplayErrors = 0x00000040,
  kLSLaunchInhibitBGOnly = 0x00000080,
  kLSLaunchDontAddToRecents = 0x00000100,
  kLSLaunchDontSwitch = 0x00000200,
  kLSLaunchNoParams = 0x00000800,
  kLSLaunchAsync = 0x00010000,
  kLSLaunchStartClassic = 0x00020000,
  kLSLaunchInClassic = 0x00040000,
  kLSLaunchNewInstance = 0x00080000,
  kLSLaunchAndHide = 0x00100000,
  kLSLaunchAndHideOthers = 0x00200000,
  kLSLaunchHasUntrustedContents = 0x00400000
};

struct LSLaunchFSRefSpec {
  const FSRef * appRef;
  ItemCount numDocs;
  const FSRef * itemRefs;
  const AEDesc * passThruParams;

  LSLaunchFlags launchFlags;
  void * asyncRefCon;
};
typedef struct LSLaunchFSRefSpec LSLaunchFSRefSpec;
struct LSLaunchURLSpec {
  CFURLRef appURL;
  CFArrayRef itemURLs;
  const AEDesc * passThruParams;
  LSLaunchFlags launchFlags;
  void * asyncRefCon;
};
typedef struct LSLaunchURLSpec LSLaunchURLSpec;
# 127 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenFSRef(
  const FSRef * inRef,
  FSRef * outLaunchedRef) ;
# 167 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenCFURLRef(
  CFURLRef inURL,
  CFURLRef * outLaunchedURL) ;
# 201 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenFromRefSpec(
  const LSLaunchFSRefSpec * inLaunchSpec,
  FSRef * outLaunchedRef) ;
# 237 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenFromURLSpec(
  const LSLaunchURLSpec * inLaunchSpec,
  CFURLRef * outLaunchedURL) ;
# 258 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
struct LSApplicationParameters {
  CFIndex version;
  LSLaunchFlags flags;
  const FSRef * application;
  void * asyncLaunchRefCon;
  CFDictionaryRef environment;

  CFArrayRef argv;

  AppleEvent * initialEvent;
};
typedef struct LSApplicationParameters LSApplicationParameters;
# 297 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenApplication(
  const LSApplicationParameters * appParams,
  ProcessSerialNumber * outPSN) ;
# 342 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenItemsWithRole(
  const FSRef * inItems,
  CFIndex inItemCount,
  LSRolesMask inRole,
  const AEKeyDesc * inAEParam,
  const LSApplicationParameters * inAppParams,
  ProcessSerialNumber * outPSNs,
  CFIndex inMaxPSNCount) ;
# 395 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LSOpen.h" 3
extern OSStatus
LSOpenURLsWithRole(
  CFArrayRef inURLs,
  LSRolesMask inRole,
  const AEKeyDesc * inAEParam,
  const LSApplicationParameters * inAppParams,
  ProcessSerialNumber * outPSNs,
  CFIndex inMaxPSNCount) ;





#pragma pack(pop)


}
# 26 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 1 3
# 101 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeItem ;
# 110 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeContent ;
# 119 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeCompositeContent ;
# 128 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeApplication ;
# 137 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMessage ;
# 146 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeContact ;
# 155 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeArchive ;
# 164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeDiskImage ;
# 251 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeData ;
# 260 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeDirectory ;
# 269 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeResolvable ;
# 278 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeSymLink ;
# 287 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMountPoint ;
# 296 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeAliasFile ;
# 305 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeAliasRecord ;
# 314 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeURL ;
# 323 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeFileURL ;
# 469 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeText ;
# 478 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypePlainText ;
# 487 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeUTF8PlainText ;
# 496 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeUTF16ExternalPlainText ;
# 505 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeUTF16PlainText ;
# 514 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeRTF ;
# 523 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeHTML ;
# 532 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeXML ;
# 541 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeSourceCode ;
# 550 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeCSource ;
# 559 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeObjectiveCSource ;
# 568 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeCPlusPlusSource ;
# 577 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeObjectiveCPlusPlusSource ;
# 586 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeCHeader ;
# 595 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeCPlusPlusHeader ;
# 604 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeJavaSource ;
# 659 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypePDF ;
# 668 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeRTFD ;
# 677 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeFlatRTFD ;
# 686 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeTXNTextAndMultimediaData ;
# 695 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeWebArchive ;
# 796 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeImage ;
# 805 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeJPEG ;
# 814 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeJPEG2000 ;
# 823 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeTIFF ;
# 832 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypePICT ;
# 841 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeGIF ;
# 850 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypePNG ;
# 859 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeQuickTimeImage ;
# 868 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeAppleICNS ;
# 877 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeBMP ;
# 886 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeICO ;
# 982 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeAudiovisualContent ;
# 991 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMovie ;
# 1000 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeVideo ;
# 1009 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeAudio ;
# 1018 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeQuickTimeMovie ;
# 1027 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMPEG ;
# 1036 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMPEG4 ;
# 1045 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMP3 ;
# 1054 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeMPEG4Audio ;
# 1063 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeAppleProtectedMPEG4Audio ;
# 1115 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeFolder ;
# 1124 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeVolume ;
# 1133 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypePackage ;
# 1142 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeBundle ;
# 1151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeFramework ;
# 1179 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeApplicationBundle ;
# 1188 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeApplicationFile ;
# 1208 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeVCard ;
# 1228 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTCoreTypes.h" 3
extern const CFStringRef kUTTypeInkText ;
# 30 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h" 2 3



# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 1 3
# 31 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern "C" {
# 213 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTExportedTypeDeclarationsKey ;
# 222 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTImportedTypeDeclarationsKey ;
# 231 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeIdentifierKey ;
# 240 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeTagSpecificationKey ;
# 249 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeConformsToKey ;
# 258 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeDescriptionKey ;
# 267 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeIconFileKey ;
# 276 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeReferenceURLKey ;
# 285 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTypeVersionKey ;
# 303 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTagClassFilenameExtension ;
# 312 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTagClassMIMEType ;
# 321 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTagClassNSPboardType ;
# 330 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern const CFStringRef kUTTagClassOSType ;
# 381 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFStringRef
UTTypeCreatePreferredIdentifierForTag(
  CFStringRef inTagClass,
  CFStringRef inTag,
  CFStringRef inConformingToUTI) ;
# 432 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFArrayRef
UTTypeCreateAllIdentifiersForTag(
  CFStringRef inTagClass,
  CFStringRef inTag,
  CFStringRef inConformingToUTI) ;
# 470 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFStringRef
UTTypeCopyPreferredTagWithClass(
  CFStringRef inUTI,
  CFStringRef inTagClass) ;
# 504 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern Boolean
UTTypeEqual(
  CFStringRef inUTI1,
  CFStringRef inUTI2) ;
# 535 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern Boolean
UTTypeConformsTo(
  CFStringRef inUTI,
  CFStringRef inConformsToUTI) ;
# 564 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFStringRef
UTTypeCopyDescription(CFStringRef inUTI) ;
# 594 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFDictionaryRef
UTTypeCopyDeclaration(CFStringRef inUTI) ;
# 622 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFURLRef
UTTypeCopyDeclaringBundleURL(CFStringRef inUTI) ;
# 651 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern CFStringRef
UTCreateStringForOSType(OSType inOSType) ;
# 680 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/UTType.h" 3
extern OSType
UTGetOSTypeFromString(CFStringRef inString) ;





}
# 34 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h" 2 3
# 63 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3


# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 1 3
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 1 3
# 23 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
extern "C" {
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
extern const CFStringRef kCTFontSymbolicTrait ;
# 41 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
extern const CFStringRef kCTFontWeightTrait ;
# 52 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
extern const CFStringRef kCTFontWidthTrait ;
# 62 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
extern const CFStringRef kCTFontSlantTrait ;







enum {
 kCTFontClassMaskShift = 28
};
# 86 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
enum {
    kCTFontItalicTrait = (1 << 0),
    kCTFontBoldTrait = (1 << 1),
    kCTFontExpandedTrait = (1 << 5),
    kCTFontCondensedTrait = (1 << 6),
    kCTFontMonoSpaceTrait = (1 << 10),
    kCTFontVerticalTrait = (1 << 11),
    kCTFontUIOptimizedTrait = (1 << 12),

 kCTFontClassMaskTrait = (15 << kCTFontClassMaskShift)
};
typedef uint32_t CTFontSymbolicTraits ;
# 108 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 3
enum {
 kCTFontUnknownClass = (0 << kCTFontClassMaskShift),
 kCTFontOldStyleSerifsClass = (1 << kCTFontClassMaskShift),
 kCTFontTransitionalSerifsClass = (2 << kCTFontClassMaskShift),
 kCTFontModernSerifsClass = (3 << kCTFontClassMaskShift),
 kCTFontClarendonSerifsClass = (4 << kCTFontClassMaskShift),
 kCTFontSlabSerifsClass = (5 << kCTFontClassMaskShift),
 kCTFontFreeformSerifsClass = (7 << kCTFontClassMaskShift),
 kCTFontSansSerifClass = (8 << kCTFontClassMaskShift),
 kCTFontOrnamentalsClass = (9 << kCTFontClassMaskShift),
 kCTFontScriptsClass = (10 << kCTFontClassMaskShift),
 kCTFontSymbolicClass = (12 << kCTFontClassMaskShift)
};
typedef uint32_t CTFontStylisticClass ;


}
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 2 3
# 27 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern "C" {
# 39 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
typedef const struct __CTFontDescriptor *CTFontDescriptorRef ;
# 52 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontNameAttribute ;
# 61 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontDisplayNameAttribute ;






extern const CFStringRef kCTFontFamilyNameAttribute ;
# 78 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontStyleNameAttribute ;







extern const CFStringRef kCTFontTraitsAttribute ;
# 95 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontVariationAttribute ;







extern const CFStringRef kCTFontSizeAttribute ;







extern const CFStringRef kCTFontMatrixAttribute ;
# 120 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontCascadeListAttribute ;
# 130 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontCharacterSetAttribute ;
# 141 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontLanguagesAttribute ;
# 151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontBaselineAdjustAttribute ;
# 160 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontMacintoshEncodingsAttribute ;
# 170 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontFeaturesAttribute ;
# 184 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontFeatureSettingsAttribute ;
# 193 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontFixedAdvanceAttribute ;
# 203 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
extern const CFStringRef kCTFontOrientationAttribute ;






enum {
 kCTFontDefaultOrientation = 0,
 kCTFontHorizontalOrientation = 1,
 kCTFontVerticalOrientation = 2
};
typedef uint32_t CTFontOrientation ;
# 237 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CTFontDescriptorRef CTFontDescriptorCreateWithNameAndSize(
 CFStringRef name,
 CGFloat size ) ;
# 255 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CTFontDescriptorRef CTFontDescriptorCreateWithAttributes(
 CFDictionaryRef attributes ) ;
# 273 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CTFontDescriptorRef CTFontDescriptorCreateCopyWithAttributes(
 CTFontDescriptorRef original,
 CFDictionaryRef attributes ) ;
# 296 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CTFontDescriptorRef CTFontDescriptorCreateCopyWithVariation(
 CTFontDescriptorRef original,
 CFNumberRef variationIdentifier,
 CGFloat variationValue ) ;
# 318 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CTFontDescriptorRef CTFontDescriptorCreateCopyWithFeature(
 CTFontDescriptorRef original,
 CFNumberRef featureTypeIdentifier,
 CFNumberRef featureSelectorIdentifier ) ;
# 340 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CFArrayRef CTFontDescriptorCreateMatchingFontDescriptors(
 CTFontDescriptorRef descriptor,
 CFSetRef mandatoryAttributes ) ;
# 361 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CTFontDescriptorRef CTFontDescriptorCreateMatchingFontDescriptor(
 CTFontDescriptorRef descriptor,
 CFSetRef mandatoryAttributes ) ;
# 381 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CFDictionaryRef CTFontDescriptorCopyAttributes(
 CTFontDescriptorRef descriptor ) ;
# 399 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CFTypeRef CTFontDescriptorCopyAttribute(
 CTFontDescriptorRef descriptor,
 CFStringRef attribute ) ;
# 425 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CFTypeRef CTFontDescriptorCopyLocalizedAttribute(
 CTFontDescriptorRef descriptor,
 CFStringRef attribute,
 CFStringRef *language) ;
# 440 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 3
CFTypeID CTFontDescriptorGetTypeID( void ) ;


}
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 2 3

# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Headers/ATSTypes.h" 1 3
# 22 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGFont.h" 1 3
# 23 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 2 3


extern "C" {
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
typedef const struct __CTFont *CTFontRef ;
# 48 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontCopyrightNameKey ;




extern const CFStringRef kCTFontFamilyNameKey ;




extern const CFStringRef kCTFontSubFamilyNameKey ;




extern const CFStringRef kCTFontStyleNameKey ;






extern const CFStringRef kCTFontUniqueNameKey ;




extern const CFStringRef kCTFontFullNameKey ;




extern const CFStringRef kCTFontVersionNameKey ;




extern const CFStringRef kCTFontPostScriptNameKey ;




extern const CFStringRef kCTFontTrademarkNameKey ;




extern const CFStringRef kCTFontManufacturerNameKey ;




extern const CFStringRef kCTFontDesignerNameKey ;




extern const CFStringRef kCTFontDescriptionNameKey ;




extern const CFStringRef kCTFontVendorURLNameKey ;




extern const CFStringRef kCTFontDesignerURLNameKey ;




extern const CFStringRef kCTFontLicenseNameKey ;




extern const CFStringRef kCTFontLicenseURLNameKey ;




extern const CFStringRef kCTFontSampleTextNameKey ;




extern const CFStringRef kCTFontPostScriptCIDNameKey ;
# 164 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateWithName(
 CFStringRef name,
 CGFloat size,
 const CGAffineTransform *matrix ) ;
# 193 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateWithFontDescriptor(
 CTFontDescriptorRef descriptor,
 CGFloat size,
 const CGAffineTransform *matrix ) ;
# 206 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
enum {
 kCTFontNoFontType = -1,
 kCTFontUserFontType = 0,
 kCTFontUserFixedPitchFontType = 1,
 kCTFontSystemFontType = 2,
 kCTFontEmphasizedSystemFontType = 3,
 kCTFontSmallSystemFontType = 4,
 kCTFontSmallEmphasizedSystemFontType = 5,
 kCTFontMiniSystemFontType = 6,
 kCTFontMiniEmphasizedSystemFontType = 7,
 kCTFontViewsFontType = 8,
 kCTFontApplicationFontType = 9,
 kCTFontLabelFontType = 10,
 kCTFontMenuTitleFontType = 11,
 kCTFontMenuItemFontType = 12,
 kCTFontMenuItemMarkFontType = 13,
 kCTFontMenuItemCmdKeyFontType = 14,
 kCTFontWindowTitleFontType = 15,
 kCTFontPushButtonFontType = 16,
 kCTFontUtilityWindowTitleFontType = 17,
 kCTFontAlertHeaderFontType = 18,
 kCTFontSystemDetailFontType = 19,
 kCTFontEmphasizedSystemDetailFontType = 20,
 kCTFontToolbarFontType = 21,
 kCTFontSmallToolbarFontType = 22,
 kCTFontMessageFontType = 23,
 kCTFontPaletteFontType = 24,
 kCTFontToolTipFontType = 25,
 kCTFontControlContentFontType = 26
};
typedef uint32_t CTFontUIFontType ;
# 259 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateUIFontForLanguage(
 CTFontUIFontType uiType,
 CGFloat size,
 CFStringRef language ) ;
# 290 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateCopyWithAttributes(
 CTFontRef font,
 CGFloat size,
 const CGAffineTransform *matrix,
 CTFontDescriptorRef attributes ) ;
# 321 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateCopyWithSymbolicTraits(
 CTFontRef font,
 CGFloat size,
 const CGAffineTransform *matrix,
 uint32_t symTraitValue,
 uint32_t symTraitMask ) ;
# 350 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateCopyWithFamily(
 CTFontRef font,
 CGFloat size,
 const CGAffineTransform *matrix,
 CFStringRef family ) ;
# 381 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateForString(
 CTFontRef currentFont,
 CFStringRef string,
 CFRange range ) ;
# 402 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontDescriptorRef CTFontCopyFontDescriptor(
 CTFontRef font ) ;
# 420 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFTypeRef CTFontCopyAttribute(
 CTFontRef font,
 CFStringRef attribute ) ;
# 434 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetSize( CTFontRef font ) ;
# 447 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGAffineTransform CTFontGetMatrix( CTFontRef font ) ;
# 460 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontSymbolicTraits CTFontGetSymbolicTraits( CTFontRef font ) ;
# 474 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFDictionaryRef CTFontCopyTraits( CTFontRef font ) ;
# 490 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringRef CTFontCopyPostScriptName( CTFontRef font ) ;
# 502 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringRef CTFontCopyFamilyName( CTFontRef font ) ;
# 514 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringRef CTFontCopyFullName( CTFontRef font ) ;
# 526 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringRef CTFontCopyDisplayName( CTFontRef font ) ;
# 543 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringRef CTFontCopyName(
 CTFontRef font,
 CFStringRef nameKey ) ;
# 568 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringRef CTFontCopyLocalizedName(
 CTFontRef font,
 CFStringRef nameKey,
 CFStringRef *language ) ;
# 588 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFCharacterSetRef CTFontCopyCharacterSet( CTFontRef font ) ;
# 599 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFStringEncoding CTFontGetStringEncoding( CTFontRef font ) ;
# 613 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFArrayRef CTFontCopySupportedLanguages( CTFontRef font ) ;
# 641 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
Boolean CTFontGetGlyphsForCharacters(
 CTFontRef font,
 const UniChar characters[],
 CGGlyph glyphs[],
 CFIndex count ) ;
# 661 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetAscent( CTFontRef font ) ;
# 673 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetDescent( CTFontRef font ) ;
# 685 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetLeading( CTFontRef font ) ;
# 696 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
unsigned CTFontGetUnitsPerEm( CTFontRef font ) ;
# 707 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFIndex CTFontGetGlyphCount( CTFontRef font ) ;
# 720 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGRect CTFontGetBoundingBox( CTFontRef font ) ;
# 732 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetUnderlinePosition( CTFontRef font ) ;
# 744 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetUnderlineThickness( CTFontRef font ) ;
# 757 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetSlantAngle( CTFontRef font ) ;
# 769 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetCapHeight( CTFontRef font ) ;
# 781 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFloat CTFontGetXHeight( CTFontRef font ) ;
# 802 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGGlyph CTFontGetGlyphWithName(
 CTFontRef font,
 CFStringRef glyphName ) ;
# 835 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGRect CTFontGetBoundingRectsForGlyphs(
 CTFontRef font,
 CTFontOrientation orientation,
 const CGGlyph glyphs[],
 CGRect boundingRects[],
 CFIndex count ) ;
# 870 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
double CTFontGetAdvancesForGlyphs(
 CTFontRef font,
 CTFontOrientation orientation,
 const CGGlyph glyphs[],
 CGSize advances[],
 CFIndex count ) ;
# 895 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
void CTFontGetVerticalTranslationsForGlyphs(
 CTFontRef font,
 const CGGlyph glyphs[],
 CGSize translations[],
 CFIndex count ) ;
# 910 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontVariationAxisIdentifierKey ;






extern const CFStringRef kCTFontVariationAxisMinimumValueKey ;






extern const CFStringRef kCTFontVariationAxisMaximumValueKey ;






extern const CFStringRef kCTFontVariationAxisDefaultValueKey ;






extern const CFStringRef kCTFontVariationAxisNameKey ;
# 951 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFArrayRef CTFontCopyVariationAxes( CTFontRef font ) ;
# 965 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFDictionaryRef CTFontCopyVariation( CTFontRef font ) ;
# 976 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontFeatureTypeIdentifierKey ;






extern const CFStringRef kCTFontFeatureTypeNameKey ;
# 992 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontFeatureTypeExclusiveKey ;
# 1001 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontFeatureTypeSelectorsKey ;







extern const CFStringRef kCTFontFeatureSelectorIdentifierKey ;






extern const CFStringRef kCTFontFeatureSelectorNameKey ;
# 1025 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontFeatureSelectorDefaultKey ;
# 1034 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
extern const CFStringRef kCTFontFeatureSelectorSettingKey ;
# 1046 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFArrayRef CTFontCopyFeatures( CTFontRef font ) ;
# 1065 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFArrayRef CTFontCopyFeatureSettings( CTFontRef font ) ;
# 1088 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CGFontRef CTFontCopyGraphicsFont(
 CTFontRef font,
 CTFontDescriptorRef *attributes ) ;
# 1115 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateWithGraphicsFont(
 CGFontRef graphicsFont,
 CGFloat size,
 const CGAffineTransform *matrix,
 CTFontDescriptorRef attributes ) ;
# 1137 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
ATSFontRef CTFontGetPlatformFont(
 CTFontRef font,
 CTFontDescriptorRef *attributes ) ;
# 1163 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateWithPlatformFont(
 ATSFontRef platformFont,
 CGFloat size,
 const CGAffineTransform *matrix,
 CTFontDescriptorRef attributes ) ;
# 1193 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CTFontRef CTFontCreateWithQuickdrawInstance(
 ConstStr255Param name,
 int16_t identifier,
 uint8_t style,
 CGFloat size ) ;





enum {
 kCTFontTableAcnt = 'acnt',
 kCTFontTableAvar = 'avar',
 kCTFontTableBASE = 'BASE',
 kCTFontTableBdat = 'bdat',
 kCTFontTableBhed = 'bhed',
 kCTFontTableBloc = 'bloc',
 kCTFontTableBsln = 'bsln',
 kCTFontTableCmap = 'cmap',
 kCTFontTableCvar = 'cvar',
 kCTFontTableCvt = 'cvt ',
 kCTFontTableCFF = 'CFF ',
 kCTFontTableDSIG = 'DSIG',
 kCTFontTableEBDT = 'EBDT',
 kCTFontTableEBLC = 'EBLC',
 kCTFontTableEBSC = 'EBSC',
 kCTFontTableFdsc = 'fdsc',
 kCTFontTableFeat = 'feat',
 kCTFontTableFmtx = 'fmtx',
 kCTFontTableFpgm = 'fpgm',
 kCTFontTableFvar = 'fvar',
 kCTFontTableGasp = 'gasp',
 kCTFontTableGDEF = 'GDEF',
 kCTFontTableGPOS = 'GPOS',
 kCTFontTableGSUB = 'GSUB',
 kCTFontTableGlyf = 'glyf',
 kCTFontTableGvar = 'gvar',
 kCTFontTableHdmx = 'hdmx',
 kCTFontTableHead = 'head',
 kCTFontTableHhea = 'hhea',
 kCTFontTableHmtx = 'hmtx',
 kCTFontTableHsty = 'hsty',
 kCTFontTableJSTF = 'JSTF',
 kCTFontTableJust = 'just',
 kCTFontTableKern = 'kern',
 kCTFontTableLcar = 'lcar',
 kCTFontTableLoca = 'loca',
 kCTFontTableLTSH = 'LTSH',
 kCTFontTableMaxp = 'maxp',
 kCTFontTableMort = 'mort',
 kCTFontTableMorx = 'morx',
 kCTFontTableName = 'name',
 kCTFontTableOpbd = 'opbd',
 kCTFontTableOS2 = 'OS/2',
 kCTFontTablePCLT = 'PCLT',
 kCTFontTablePost = 'post',
 kCTFontTablePrep = 'prep',
 kCTFontTableProp = 'prop',
 kCTFontTableTrak = 'trak',
 kCTFontTableVDMX = 'VDMX',
 kCTFontTableVhea = 'vhea',
 kCTFontTableVmtx = 'vmtx',
 kCTFontTableVORG = 'VORG',
 kCTFontTableZapf = 'Zapf'
};
typedef uint32_t CTFontTableTag ;

enum {
 kCTFontTableOptionNoOptions = 0,
 kCTFontTableOptionExcludeSynthetic = (1 << 0)
};
typedef uint32_t CTFontTableOptions ;
# 1280 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFArrayRef CTFontCopyAvailableTables(
 CTFontRef font,
 CTFontTableOptions options ) ;
# 1300 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFDataRef CTFontCopyTable(
 CTFontRef font,
 CTFontTableTag table,
 CTFontTableOptions options ) ;
# 1314 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 3
CFTypeID CTFontGetTypeID( void ) ;


}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 1 3
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 2 3


extern "C" {
# 32 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
typedef const struct __CTFontCollection *CTFontCollectionRef ;
# 41 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
typedef CFComparisonResult (*CTFontCollectionSortDescriptorsCallback)(CTFontDescriptorRef first, CTFontDescriptorRef second, void *refCon) ;
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
extern const CFStringRef kCTFontCollectionRemoveDuplicatesOption ;
# 70 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
CTFontCollectionRef CTFontCollectionCreateFromAvailableFonts( CFDictionaryRef options ) ;
# 87 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
CTFontCollectionRef CTFontCollectionCreateWithFontDescriptors(
 CFArrayRef descriptors,
 CFDictionaryRef options ) ;
# 111 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
CTFontCollectionRef CTFontCollectionCreateCopyWithFontDescriptors(
 CTFontCollectionRef original,
 CFArrayRef descriptors,
 CFDictionaryRef options ) ;
# 130 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
CFArrayRef CTFontCollectionCreateMatchingFontDescriptors( CTFontCollectionRef collection ) ;
# 150 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
CFArrayRef CTFontCollectionCreateMatchingFontDescriptorsSortedWithCallback(
 CTFontCollectionRef collection,
 CTFontCollectionSortDescriptorsCallback sortCallback,
 void *refCon) ;
# 165 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontCollection.h" 3
CFTypeID CTFontCollectionGetTypeID( void ) ;


}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontDescriptor.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFontTraits.h" 1 3
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 1 3
# 16 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 2 3



extern "C" {






typedef const struct __CTFrame * CTFrameRef ;







CFTypeID CTFrameGetTypeID( void ) ;
# 59 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
enum
{
 kCTFrameProgressionTopToBottom = 0,
 kCTFrameProgressionRightToLeft = 1
};
typedef uint32_t CTFrameProgression ;
# 77 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
extern const CFStringRef kCTFrameProgressionAttributeName ;
# 98 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
CFRange CTFrameGetStringRange(
 CTFrameRef frame ) ;
# 121 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
CFRange CTFrameGetVisibleStringRange(
 CTFrameRef frame ) ;
# 133 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
CGPathRef CTFrameGetPath(
 CTFrameRef frame ) ;
# 155 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
CFDictionaryRef CTFrameGetFrameAttributes(
 CTFrameRef frame ) ;
# 177 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
CFArrayRef CTFrameGetLines(
 CTFrameRef frame ) ;
# 199 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 3
void CTFrameDraw(
 CTFrameRef frame,
 CGContextRef context ) ;



}
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFrame.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 2 3



extern "C" {






typedef const struct __CTLine * CTLineRef ;
# 47 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
enum
{
 kCTLineTruncationStart = 0,
 kCTLineTruncationEnd = 1,
 kCTLineTruncationMiddle = 2
};
typedef uint32_t CTLineTruncationType ;







CFTypeID CTLineGetTypeID( void ) ;
# 86 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CTLineRef CTLineCreateWithAttributedString(
 CFAttributedStringRef string ) ;
# 118 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CTLineRef CTLineCreateTruncatedLine(
 CTLineRef line,
 double width,
 CTLineTruncationType truncationType,
 CTLineRef truncationToken ) ;
# 148 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CTLineRef CTLineCreateJustifiedLine(
 CTLineRef line,
 CGFloat justificationFactor,
 double justificationWidth ) ;
# 171 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CFIndex CTLineGetGlyphCount(
 CTLineRef line ) ;
# 185 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CFArrayRef CTLineGetGlyphRuns(
 CTLineRef line ) ;
# 202 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CFRange CTLineGetStringRange(
 CTLineRef line ) ;
# 227 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
double CTLineGetPenOffsetForFlush(
 CTLineRef line,
 CGFloat flushFactor,
 double flushWidth ) ;
# 250 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
void CTLineDraw(
 CTLineRef line,
 CGContextRef context ) ;
# 276 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
CGRect CTLineGetImageBounds(
 CTLineRef line,
 CGContextRef context ) ;
# 304 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
double CTLineGetTypographicBounds(
 CTLineRef line,
 CGFloat* ascent,
 CGFloat* descent,
 CGFloat* leading ) ;
# 327 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 3
double CTLineGetTrailingWhitespaceWidth(
 CTLineRef line ) ;



}
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 2 3


extern "C" {






typedef const struct __CTTypesetter * CTTypesetterRef ;







CFTypeID CTTypesetterGetTypeID( void ) ;
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
CTTypesetterRef CTTypesetterCreateWithAttributedString(
 CFAttributedStringRef string ) ;
# 84 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
CTLineRef CTTypesetterCreateLine(
 CTTypesetterRef typesetter,
 CFRange stringRange ) ;
# 117 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
CFIndex CTTypesetterSuggestLineBreak(
 CTTypesetterRef typesetter,
 CFIndex startIndex,
 double width ) ;
# 152 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 3
CFIndex CTTypesetterSuggestClusterBreak(
 CTTypesetterRef typesetter,
 CFIndex startIndex,
 double width ) ;



}
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 2 3


extern "C" {






typedef const struct __CTFramesetter * CTFramesetterRef ;







CFTypeID CTFramesetterGetTypeID( void ) ;
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 3
CTFramesetterRef CTFramesetterCreateWithAttributedString(
 CFAttributedStringRef string ) ;
# 93 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 3
CTFrameRef CTFramesetterCreateFrame(
 CTFramesetterRef framesetter,
 CFRange stringRange,
 CGPathRef path,
 CFDictionaryRef frameAttributes ) ;
# 119 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFramesetter.h" 3
CTTypesetterRef CTFramesetterGetTypesetter(
 CTFramesetterRef framesetter ) ;



}
# 18 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTFont.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 2 3


extern "C" {






typedef const struct __CTGlyphInfo * CTGlyphInfoRef ;






CFTypeID CTGlyphInfoGetTypeID( void ) ;
# 60 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
enum
{
 kCTIdentityMappingCharacterCollection = 0,
 kCTAdobeCNS1CharacterCollection = 1,
 kCTAdobeGB1CharacterCollection = 2,
 kCTAdobeJapan1CharacterCollection = 3,
 kCTAdobeJapan2CharacterCollection = 4,
 kCTAdobeKorea1CharacterCollection = 5
};
typedef uint16_t CTCharacterCollection ;
# 98 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
CTGlyphInfoRef CTGlyphInfoCreateWithGlyphName(
 CFStringRef glyphName,
 CTFontRef font,
 CFStringRef baseString ) ;
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
CTGlyphInfoRef CTGlyphInfoCreateWithGlyph(
 CGGlyph glyph,
 CTFontRef font,
 CFStringRef baseString ) ;
# 154 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
CTGlyphInfoRef CTGlyphInfoCreateWithCharacterIdentifier(
 CGFontIndex cid,
 CTCharacterCollection collection,
 CFStringRef baseString ) ;
# 178 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
CFStringRef CTGlyphInfoGetGlyphName(
 CTGlyphInfoRef glyphInfo ) ;
# 196 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
CGFontIndex CTGlyphInfoGetCharacterIdentifier(
 CTGlyphInfoRef glyphInfo ) ;
# 216 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTGlyphInfo.h" 3
CTCharacterCollection CTGlyphInfoGetCharacterCollection(
 CTGlyphInfoRef glyphInfo ) ;



}
# 19 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTLine.h" 1 3
# 20 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 1 3
# 17 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
extern "C" {






typedef const struct __CTParagraphStyle * CTParagraphStyleRef ;







CFTypeID CTParagraphStyleGetTypeID( void ) ;
# 60 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
enum
{
 kCTLeftTextAlignment = 0,
 kCTRightTextAlignment = 1,
 kCTCenterTextAlignment = 2,
 kCTJustifiedTextAlignment = 3,
 kCTNaturalTextAlignment = 4
};
typedef uint8_t CTTextAlignment ;
# 101 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
enum
{
 kCTLineBreakByWordWrapping = 0,
 kCTLineBreakByCharWrapping = 1,
 kCTLineBreakByClipping = 2,
 kCTLineBreakByTruncatingHead = 3,
 kCTLineBreakByTruncatingTail = 4,
 kCTLineBreakByTruncatingMiddle = 5
};
typedef uint8_t CTLineBreakMode ;
# 127 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
enum
{
 kCTWritingDirectionNatural = -1,
 kCTWritingDirectionLeftToRight = 0,
 kCTWritingDirectionRightToLeft = 1
};
typedef int8_t CTWritingDirection ;
# 289 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
enum
{
 kCTParagraphStyleSpecifierAlignment = 0,
 kCTParagraphStyleSpecifierFirstLineHeadIndent = 1,
 kCTParagraphStyleSpecifierHeadIndent = 2,
 kCTParagraphStyleSpecifierTailIndent = 3,
 kCTParagraphStyleSpecifierTabStops = 4,
 kCTParagraphStyleSpecifierDefaultTabInterval = 5,
 kCTParagraphStyleSpecifierLineBreakMode = 6,
 kCTParagraphStyleSpecifierLineHeightMultiple = 7,
 kCTParagraphStyleSpecifierMaximumLineHeight = 8,
 kCTParagraphStyleSpecifierMinimumLineHeight = 9,
 kCTParagraphStyleSpecifierLineSpacing = 10,
 kCTParagraphStyleSpecifierParagraphSpacing = 11,
 kCTParagraphStyleSpecifierParagraphSpacingBefore = 12,
 kCTParagraphStyleSpecifierBaseWritingDirection = 13,

 kCTParagraphStyleSpecifierCount = 14
};
typedef uint32_t CTParagraphStyleSpecifier ;
# 328 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
typedef struct CTParagraphStyleSetting
{
 CTParagraphStyleSpecifier spec;
 size_t valueSize;
 const void* value;

} CTParagraphStyleSetting ;
# 370 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
CTParagraphStyleRef CTParagraphStyleCreate(
 const CTParagraphStyleSetting* settings,
 CFIndex settingCount ) ;
# 389 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
CTParagraphStyleRef CTParagraphStyleCreateCopy(
 CTParagraphStyleRef paragraphStyle ) ;
# 434 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 3
bool CTParagraphStyleGetValueForSpecifier(
 CTParagraphStyleRef paragraphStyle,
 CTParagraphStyleSpecifier spec,
 size_t valueBufferSize,
 void* valueBuffer ) ;



}
# 21 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGContext.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 2 3



extern "C" {






typedef const struct __CTRun * CTRunRef ;







CFTypeID CTRunGetTypeID( void ) ;
# 51 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
CFIndex CTRunGetGlyphCount(
 CTRunRef run ) ;
# 72 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
CFDictionaryRef CTRunGetAttributes(
 CTRunRef run ) ;
# 93 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
const CGGlyph* CTRunGetGlyphsPtr(
 CTRunRef run ) ;
# 114 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
void CTRunGetGlyphs(
 CTRunRef run,
 CFRange range,
 CGGlyph* buffer ) ;
# 139 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
const CGPoint* CTRunGetPositionsPtr(
 CTRunRef run ) ;
# 161 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
void CTRunGetPositions(
 CTRunRef run,
 CFRange range,
 CGPoint* buffer ) ;
# 187 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
const CFIndex* CTRunGetStringIndicesPtr(
 CTRunRef run ) ;
# 213 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
void CTRunGetStringIndices(
 CTRunRef run,
 CFRange range,
 CFIndex* buffer ) ;
# 231 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
CFRange CTRunGetStringRange(
 CTRunRef run ) ;
# 263 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
double CTRunGetTypographicBounds(
 CTRunRef run,
 CFRange range,
 CGFloat* ascent,
 CGFloat* descent,
 CGFloat* leading ) ;
# 293 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
CGRect CTRunGetImageBounds(
 CTRunRef run,
 CGContextRef context,
 CFRange range ) ;
# 313 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
CGAffineTransform CTRunGetTextMatrix(
 CTRunRef run ) ;
# 338 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTRun.h" 3
void CTRunDraw(
 CTRunRef run,
 CGContextRef context,
 CFRange range ) ;



}
# 22 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 1 3
# 14 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGColor.h" 1 3
# 15 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 2 3


extern "C" {
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTFontAttributeName ;
# 54 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTKernAttributeName ;
# 75 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTLigatureAttributeName ;
# 85 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTForegroundColorAttributeName ;
# 98 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTParagraphStyleAttributeName ;
# 113 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTUnderlineStyleAttributeName ;
# 125 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTVerticalFormsAttributeName ;
# 139 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
extern const CFStringRef kCTGlyphInfoAttributeName ;
# 151 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
enum
{
 kCTUnderlineStyleNone = 0x00,
 kCTUnderlineStyleSingle = 0x01,
 kCTUnderlineStyleThick = 0x02,
 kCTUnderlineStyleDouble = 0x09
};
typedef int32_t CTUnderlineStyle ;
# 170 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTStringAttributes.h" 3
enum
{
 kCTUnderlinePatternSolid = 0x0000,
 kCTUnderlinePatternDot = 0x0100,
 kCTUnderlinePatternDash = 0x0200,
 kCTUnderlinePatternDashDot = 0x0300,
 kCTUnderlinePatternDashDotDot = 0x0400
};
typedef int32_t CTUnderlineStyleModifiers ;



}
# 23 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 1 3
# 12 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTParagraphStyle.h" 1 3
# 13 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 2 3





extern "C" {
# 37 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
typedef const struct __CTTextTab * CTTextTabRef ;







CFTypeID CTTextTabGetTypeID( void ) ;
# 64 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
extern const CFStringRef kCTTabColumnTerminatorsAttributeName ;
# 92 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
CTTextTabRef CTTextTabCreate(
 CTTextAlignment alignment,
 double location,
 CFDictionaryRef options ) ;
# 112 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
CTTextAlignment CTTextTabGetAlignment(
 CTTextTabRef tab ) ;
# 126 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
double CTTextTabGetLocation(
 CTTextTabRef tab ) ;
# 141 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTextTab.h" 3
CFDictionaryRef CTTextTabGetOptions(
 CTTextTabRef tab ) ;



}
# 24 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CTTypesetter.h" 1 3
# 25 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 2 3



extern "C" {
# 50 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Headers/CoreText.h" 3
uint32_t CTGetCoreTextVersion( void ) ;




}
# 66 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3
# 1 "/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers/ColorSync.h" 1 3
# 67 "/System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h" 2 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSAppleEventDescriptor.h" 2 3

@class NSData;

@interface NSAppleEventDescriptor : NSObject<NSCopying> {
    @private
    AEDesc _desc;
    BOOL _hasValidDesc;
    char _padding[3];
}


+ (NSAppleEventDescriptor *)nullDescriptor;



+ (NSAppleEventDescriptor *)descriptorWithDescriptorType:(DescType)descriptorType bytes:(const void *)bytes length:(NSUInteger)byteCount;

+ (NSAppleEventDescriptor *)descriptorWithDescriptorType:(DescType)descriptorType data:(NSData *)data;



+ (NSAppleEventDescriptor *)descriptorWithBoolean:(Boolean)boolean;
+ (NSAppleEventDescriptor *)descriptorWithEnumCode:(OSType)enumerator;
+ (NSAppleEventDescriptor *)descriptorWithInt32:(SInt32)signedInt;
+ (NSAppleEventDescriptor *)descriptorWithTypeCode:(OSType)typeCode;




+ (NSAppleEventDescriptor *)descriptorWithString:(NSString *)string;



+ (NSAppleEventDescriptor *)appleEventWithEventClass:(AEEventClass)eventClass eventID:(AEEventID)eventID targetDescriptor:(NSAppleEventDescriptor *)targetDescriptor returnID:(AEReturnID)returnID transactionID:(AETransactionID)transactionID;
+ (NSAppleEventDescriptor *)listDescriptor;
+ (NSAppleEventDescriptor *)recordDescriptor;



- (id)initWithAEDescNoCopy:(const AEDesc *)aeDesc;



- (id)initWithDescriptorType:(DescType)descriptorType bytes:(const void *)bytes length:(NSUInteger)byteCount;
- (id)initWithDescriptorType:(DescType)descriptorType data:(NSData *)data;
- (id)initWithEventClass:(AEEventClass)eventClass eventID:(AEEventID)eventID targetDescriptor:(NSAppleEventDescriptor *)targetDescriptor returnID:(AEReturnID)returnID transactionID:(AETransactionID)transactionID;
- (id)initListDescriptor;
- (id)initRecordDescriptor;



- (const AEDesc *)aeDesc;



- (DescType)descriptorType;
- (NSData *)data;



- (Boolean)booleanValue;
- (OSType)enumCodeValue;
- (SInt32)int32Value;
- (OSType)typeCodeValue;




- (NSString *)stringValue;



- (AEEventClass)eventClass;
- (AEEventID)eventID;
- (AEReturnID)returnID;
- (AETransactionID)transactionID;


- (void)setParamDescriptor:(NSAppleEventDescriptor *)descriptor forKeyword:(AEKeyword)keyword;
- (NSAppleEventDescriptor *)paramDescriptorForKeyword:(AEKeyword)keyword;
- (void)removeParamDescriptorWithKeyword:(AEKeyword)keyword;


- (void)setAttributeDescriptor:(NSAppleEventDescriptor *)descriptor forKeyword:(AEKeyword)keyword;
- (NSAppleEventDescriptor *)attributeDescriptorForKeyword:(AEKeyword)keyword;


- (NSInteger)numberOfItems;


- (void)insertDescriptor:(NSAppleEventDescriptor *)descriptor atIndex:(NSInteger)index;
- (NSAppleEventDescriptor *)descriptorAtIndex:(NSInteger)index;

- (void)removeDescriptorAtIndex:(NSInteger)index;





- (void)setDescriptor:(NSAppleEventDescriptor *)descriptor forKeyword:(AEKeyword)keyword;
- (NSAppleEventDescriptor *)descriptorForKeyword:(AEKeyword)keyword;
- (void)removeDescriptorWithKeyword:(AEKeyword)keyword;


- (AEKeyword)keywordForDescriptorAtIndex:(NSInteger)index;


- (NSAppleEventDescriptor *)coerceToDescriptorType:(DescType)descriptorType;

@end
# 105 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSAppleEventManager.h" 1 3
# 10 "/System/Library/Frameworks/Foundation.framework/Headers/NSAppleEventManager.h" 3
@class NSAppleEventDescriptor;



typedef const struct __NSAppleEventManagerSuspension* NSAppleEventManagerSuspensionID;



extern const double NSAppleEventTimeOutDefault;
extern const double NSAppleEventTimeOutNone;

extern NSString *NSAppleEventManagerWillProcessFirstEventNotification;

@interface NSAppleEventManager : NSObject {
    @private
    BOOL _isPreparedForDispatch;
    char _padding[3];
}


+ (NSAppleEventManager *)sharedAppleEventManager;




- (void)setEventHandler:(id)handler andSelector:(SEL)handleEventSelector forEventClass:(AEEventClass)eventClass andEventID:(AEEventID)eventID;
- (void)removeEventHandlerForEventClass:(AEEventClass)eventClass andEventID:(AEEventID)eventID;



- (OSErr)dispatchRawAppleEvent:(const AppleEvent *)theAppleEvent withRawReply:(AppleEvent *)theReply handlerRefCon:(UInt32)handlerRefCon;




- (NSAppleEventDescriptor *)currentAppleEvent;


- (NSAppleEventDescriptor *)currentReplyAppleEvent;


- (NSAppleEventManagerSuspensionID)suspendCurrentAppleEvent;


- (NSAppleEventDescriptor *)appleEventForSuspensionID:(NSAppleEventManagerSuspensionID)suspensionID;


- (NSAppleEventDescriptor *)replyAppleEventForSuspensionID:(NSAppleEventManagerSuspensionID)suspensionID;


- (void)setCurrentAppleEventAndReplyEventWithSuspensionID:(NSAppleEventManagerSuspensionID)suspensionID;


- (void)resumeWithSuspensionID:(NSAppleEventManagerSuspensionID)suspensionID;



@end
# 106 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSAppleScript.h" 1 3
# 11 "/System/Library/Frameworks/Foundation.framework/Headers/NSAppleScript.h" 3
@class NSAppleEventDescriptor, NSDictionary, NSString, NSURL;


extern "C" NSString *const NSAppleScriptErrorMessage ;
extern "C" NSString *const NSAppleScriptErrorNumber ;
extern "C" NSString *const NSAppleScriptErrorAppName ;
extern "C" NSString *const NSAppleScriptErrorBriefMessage ;
extern "C" NSString *const NSAppleScriptErrorRange ;

@interface NSAppleScript : NSObject<NSCopying> {
    @private
    NSString *_source;
    unsigned int _compiledScriptID;
    void *_reserved1;
    void *_reserved2;
}


- (id)initWithContentsOfURL:(NSURL *)url error:(NSDictionary **)errorInfo;


- (id)initWithSource:(NSString *)source;


- (NSString *)source;


- (BOOL)isCompiled;


- (BOOL)compileAndReturnError:(NSDictionary **)errorInfo;


- (NSAppleEventDescriptor *)executeAndReturnError:(NSDictionary **)errorInfo;


- (NSAppleEventDescriptor *)executeAppleEvent:(NSAppleEventDescriptor *)event error:(NSDictionary **)errorInfo;

@end
# 107 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjectScripting.h" 1 3
# 11 "/System/Library/Frameworks/Foundation.framework/Headers/NSObjectScripting.h" 3
@class NSDictionary;

@interface NSObject(NSScripting)



- (NSDictionary *)scriptingProperties;



- (void)setScriptingProperties:(NSDictionary *)properties;

@end
# 108 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptClassDescription.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptClassDescription.h" 3
@class NSScriptCommandDescription;

@interface NSScriptClassDescription : NSClassDescription {
    @private
    NSString *_suiteName;
    NSString *_objcClassName;
    FourCharCode _appleEventCode;
    NSObject *_superclassNameOrDescription;
    NSArray *_attributeDescriptions;
    NSArray *_toOneRelationshipDescriptions;
    NSArray *_toManyRelationshipDescriptions;
    NSDictionary *_commandMethodSelectorsByName;
    id _moreVars;
}



- (id)initWithSuiteName:(NSString *)suiteName className:(NSString *)className dictionary:(NSDictionary *)classDeclaration;



- (NSString *)suiteName;
- (NSString *)className;



- (NSScriptClassDescription *)superclassDescription;



- (FourCharCode)appleEventCode;



- (BOOL)matchesAppleEventCode:(FourCharCode)appleEventCode;



- (BOOL)supportsCommand:(NSScriptCommandDescription *)commandDescription;



- (SEL)selectorForCommand:(NSScriptCommandDescription *)commandDescription;



- (NSString *)typeForKey:(NSString *)key;



- (NSScriptClassDescription *)classDescriptionForKey:(NSString *)key;



- (FourCharCode)appleEventCodeForKey:(NSString *)key;



- (BOOL)isReadOnlyKey:(NSString *)key;



- (NSString *)keyWithAppleEventCode:(FourCharCode)appleEventCode;





- (NSString *)defaultSubcontainerAttributeKey;



- (BOOL)isLocationRequiredToCreateForKey:(NSString *)toManyRelationshipKey;



@end

@interface NSObject(NSScriptClassDescription)



- (FourCharCode)classCode;



- (NSString *)className;

@end
# 109 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptCoercionHandler.h" 1 3






@interface NSScriptCoercionHandler : NSObject {
    @private
    id _coercers;
}

+ (NSScriptCoercionHandler *)sharedCoercionHandler;

- (id)coerceValue:(id)value toClass:(Class)toClass;

- (void)registerCoercer:(id)coercer selector:(SEL)selector toConvertFromClass:(Class)fromClass toClass:(Class)toClass;


@end
# 110 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptCommand.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptCommand.h" 3
@class NSAppleEventDescriptor, NSDictionary, NSMutableDictionary, NSScriptObjectSpecifier, NSScriptCommandDescription, NSString;


enum {
    NSNoScriptError = 0,
    NSReceiverEvaluationScriptError,
    NSKeySpecifierEvaluationScriptError,
    NSArgumentEvaluationScriptError,
    NSReceiversCantHandleCommandScriptError,
    NSRequiredArgumentsMissingScriptError,
    NSArgumentsWrongScriptError,
    NSUnknownKeyScriptError,
    NSInternalScriptError,
    NSOperationNotSupportedForKeyScriptError,
    NSCannotCreateScriptCommandError
};

@interface NSScriptCommand : NSObject <NSCoding> {


    @private
    NSScriptCommandDescription *_commandDescription;
    id _directParameter;
    NSScriptObjectSpecifier *_receiversSpecifier;
    id _evaluatedReceivers;
    NSMutableDictionary *_arguments;
    NSMutableDictionary *_evaluatedArguments;
    struct {
        unsigned int hasEvaluatedReceivers:1;
        unsigned int hasEvaluatedArguments:1;
        unsigned int RESERVED:30;
    } _flags;
    id _moreVars;
    void *_reserved;

}

- (id)initWithCommandDescription:(NSScriptCommandDescription *)commandDef;

- (NSScriptCommandDescription *)commandDescription;


- (void)setDirectParameter:(id)directParameter;
- (id)directParameter;


- (void)setReceiversSpecifier:(NSScriptObjectSpecifier *)receiversRef;
- (NSScriptObjectSpecifier *)receiversSpecifier;



- (id)evaluatedReceivers;


- (void)setArguments:(NSDictionary *)args;
- (NSDictionary *)arguments;
- (NSDictionary *)evaluatedArguments;


- (BOOL)isWellFormed;




- (id)performDefaultImplementation;



- (id)executeCommand;


- (void)setScriptErrorNumber:(int)errorNumber;
- (int)scriptErrorNumber;


- (void)setScriptErrorString:(NSString *)errorString;
- (NSString *)scriptErrorString;




+ (NSScriptCommand *)currentCommand;


- (NSAppleEventDescriptor *)appleEvent;


- (void)suspendExecution;





- (void)resumeExecutionWithResult:(id)result;



@end
# 111 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptCommandDescription.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptCommandDescription.h" 3
@class NSArray, NSDictionary, NSScriptCommand, NSString;

@interface NSScriptCommandDescription : NSObject<NSCoding> {
    @private
    NSString *_suiteName;
    NSString *_plistCommandName;
    FourCharCode _classAppleEventCode;
    FourCharCode _idAppleEventCode;
    NSString *_objcClassName;
    NSObject *_resultTypeNameOrDescription;
    FourCharCode _plistResultTypeAppleEventCode;
    id _moreVars;
}



- (id)initWithSuiteName:(NSString *)suiteName commandName:(NSString *)commandName dictionary:(NSDictionary *)commandDeclaration;



- (NSString *)suiteName;
- (NSString *)commandName;



- (FourCharCode)appleEventClassCode;
- (FourCharCode)appleEventCode;



- (NSString *)commandClassName;



- (NSString *)returnType;



- (FourCharCode)appleEventCodeForReturnType;



- (NSArray *)argumentNames;



- (NSString *)typeForArgumentWithName:(NSString *)argumentName;



- (FourCharCode)appleEventCodeForArgumentWithName:(NSString *)argumentName;



- (BOOL)isOptionalArgumentWithName:(NSString *)argumentName;



- (NSScriptCommand *)createCommandInstance;
- (NSScriptCommand *)createCommandInstanceWithZone:(NSZone *)zone;

@end
# 112 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptExecutionContext.h" 1 3






@class NSConnection;

@interface NSScriptExecutionContext : NSObject {
    @private
    id _topLevelObject;
    id _objectBeingTested;
    id _rangeContainerObject;

    NSConnection *_connection;
}

+ (NSScriptExecutionContext *)sharedScriptExecutionContext;

- (id)topLevelObject;
- (void)setTopLevelObject:(id)obj;

- (id)objectBeingTested;
- (void)setObjectBeingTested:(id)obj;

- (id)rangeContainerObject;
- (void)setRangeContainerObject:(id)obj;

@end
# 113 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptKeyValueCoding.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptKeyValueCoding.h" 3
@class NSString;

extern NSString *NSOperationNotSupportedForKeyException;


@interface NSObject(NSScriptKeyValueCoding)

- (id)valueAtIndex:(NSUInteger)index inPropertyWithKey:(NSString *)key;





- (id)valueWithName:(NSString *)name inPropertyWithKey:(NSString *)key;



- (id)valueWithUniqueID:(id)uniqueID inPropertyWithKey:(NSString *)key;





- (void)replaceValueAtIndex:(NSUInteger)index inPropertyWithKey:(NSString *)key withValue:(id)value;
- (void)insertValue:(id)value atIndex:(NSUInteger)index inPropertyWithKey:(NSString *)key;
- (void)removeValueAtIndex:(NSUInteger)index fromPropertyWithKey:(NSString *)key;
# 44 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptKeyValueCoding.h" 3
- (void)insertValue:(id)value inPropertyWithKey:(NSString *)key;




- (id)coerceValue:(id)value forKey:(NSString *)key;



@end
# 114 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptObjectSpecifiers.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptObjectSpecifiers.h" 3
@class NSArray, NSAppleEventDescriptor, NSScriptClassDescription, NSScriptWhoseTest, NSString;


enum {
    NSNoSpecifierError = 0,
    NSNoTopLevelContainersSpecifierError,
    NSContainerSpecifierError,
    NSUnknownKeySpecifierError,
    NSInvalidIndexSpecifierError,
    NSInternalSpecifierError,
    NSOperationNotSupportedForKeySpecifierError
};


enum {
    NSPositionAfter,
    NSPositionBefore,
    NSPositionBeginning,
    NSPositionEnd,
    NSPositionReplace
};
typedef NSUInteger NSInsertionPosition;

enum {
    NSRelativeAfter = 0,
    NSRelativeBefore
};
typedef NSUInteger NSRelativePosition;

enum {
    NSIndexSubelement = 0,
    NSEverySubelement = 1,
    NSMiddleSubelement = 2,
    NSRandomSubelement = 3,
    NSNoSubelement = 4
};
typedef NSUInteger NSWhoseSubelementIdentifier;





@interface NSScriptObjectSpecifier : NSObject <NSCoding> {
    @private
    NSScriptObjectSpecifier *_container;
    NSScriptObjectSpecifier *_child;
    NSString *_key;
    NSScriptClassDescription *_containerClassDescription;
    BOOL _containerIsObjectBeingTested;
    BOOL _containerIsRangeContainerObject;
    char _padding[2];
    NSAppleEventDescriptor *_descriptor;
    NSInteger _error;
}

- (id)initWithContainerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property;


- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property;


- (NSScriptObjectSpecifier *)childSpecifier;
- (void)setChildSpecifier:(NSScriptObjectSpecifier *)child;


- (NSScriptObjectSpecifier *)containerSpecifier;
- (void)setContainerSpecifier:(NSScriptObjectSpecifier *)subRef;


- (BOOL)containerIsObjectBeingTested;
- (void)setContainerIsObjectBeingTested:(BOOL)flag;

- (BOOL)containerIsRangeContainerObject;
- (void)setContainerIsRangeContainerObject:(BOOL)flag;



- (NSString *)key;
- (void)setKey:(NSString *)key;


- (NSScriptClassDescription *)containerClassDescription;
- (void)setContainerClassDescription:(NSScriptClassDescription *)classDesc;
- (NSScriptClassDescription *)keyClassDescription;

- (NSInteger *)indicesOfObjectsByEvaluatingWithContainer:(id)container count:(NSInteger *)count;


- (id)objectsByEvaluatingWithContainers:(id)containers;
- (id)objectsByEvaluatingSpecifier;

- (NSInteger)evaluationErrorNumber;
- (void)setEvaluationErrorNumber:(NSInteger)error;

- (NSScriptObjectSpecifier *)evaluationErrorSpecifier;

@end


@interface NSObject (NSScriptObjectSpecifiers)

- (NSScriptObjectSpecifier *)objectSpecifier;


- (NSArray *)indicesOfObjectsByEvaluatingObjectSpecifier:(NSScriptObjectSpecifier *)specifier;


@end




@interface NSIndexSpecifier : NSScriptObjectSpecifier {
    @private
    NSInteger _index;
}

- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property index:(NSInteger)index;

- (NSInteger)index;
- (void)setIndex:(NSInteger)index;

@end




@interface NSMiddleSpecifier : NSScriptObjectSpecifier {}

@end






@interface NSNameSpecifier : NSScriptObjectSpecifier {
    @private
    NSString *_name;
}

- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property name:(NSString *)name;

- (NSString *)name;
- (void)setName:(NSString *)name;

@end




@interface NSPositionalSpecifier : NSObject {
    @private
    NSScriptObjectSpecifier *_specifier;
    NSInsertionPosition _unadjustedPosition;
    NSScriptClassDescription *_insertionClassDescription;
    id _moreVars;
    void *_reserved0;
}


- (id)initWithPosition:(NSInsertionPosition)position objectSpecifier:(NSScriptObjectSpecifier *)specifier;




- (void)setInsertionClassDescription:(NSScriptClassDescription *)classDescription;




- (void)evaluate;


- (id)insertionContainer;


- (NSString *)insertionKey;


- (NSInteger)insertionIndex;




- (BOOL)insertionReplaces;



@end




@interface NSPropertySpecifier : NSScriptObjectSpecifier {}

@end




@interface NSRandomSpecifier : NSScriptObjectSpecifier {}

@end




@interface NSRangeSpecifier : NSScriptObjectSpecifier {
    @private
    NSScriptObjectSpecifier *_startSpec;
    NSScriptObjectSpecifier *_endSpec;
}

- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property startSpecifier:(NSScriptObjectSpecifier *)startSpec endSpecifier:(NSScriptObjectSpecifier *)endSpec;

- (NSScriptObjectSpecifier *)startSpecifier;
- (void)setStartSpecifier:(NSScriptObjectSpecifier *)startSpec;

- (NSScriptObjectSpecifier *)endSpecifier;
- (void)setEndSpecifier:(NSScriptObjectSpecifier *)endSpec;

@end


@interface NSRelativeSpecifier : NSScriptObjectSpecifier {
    @private
    NSRelativePosition _relativePosition;
    NSScriptObjectSpecifier *_baseSpecifier;
}

- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property relativePosition:(NSRelativePosition)relPos baseSpecifier:(NSScriptObjectSpecifier *)baseSpecifier;

- (NSRelativePosition)relativePosition;
- (void)setRelativePosition:(NSRelativePosition)relPos;

- (NSScriptObjectSpecifier *)baseSpecifier;
- (void)setBaseSpecifier:(NSScriptObjectSpecifier *)baseSpecifier;


@end






@interface NSUniqueIDSpecifier : NSScriptObjectSpecifier {
    @private
    id _uniqueID;
}

- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property uniqueID:(id)uniqueID;

- (id)uniqueID;
- (void)setUniqueID:(id)uniqueID;

@end
# 280 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptObjectSpecifiers.h" 3
@interface NSWhoseSpecifier : NSScriptObjectSpecifier {
    @private
    NSScriptWhoseTest *_test;
    NSWhoseSubelementIdentifier _startSubelementIdentifier;
    NSInteger _startSubelementIndex;
    NSWhoseSubelementIdentifier _endSubelementIdentifier;
    NSInteger _endSubelementIndex;
}

- (id)initWithContainerClassDescription:(NSScriptClassDescription *)classDesc containerSpecifier:(NSScriptObjectSpecifier *)container key:(NSString *)property test:(NSScriptWhoseTest *)test;

- (NSScriptWhoseTest *)test;
- (void)setTest:(NSScriptWhoseTest *)test;


- (NSWhoseSubelementIdentifier)startSubelementIdentifier;
- (void)setStartSubelementIdentifier:(NSWhoseSubelementIdentifier)subelement;

- (NSInteger)startSubelementIndex;
- (void)setStartSubelementIndex:(NSInteger)index;


- (NSWhoseSubelementIdentifier)endSubelementIdentifier;
- (void)setEndSubelementIdentifier:(NSWhoseSubelementIdentifier)subelement;

- (NSInteger)endSubelementIndex;
- (void)setEndSubelementIndex:(NSInteger)index;


@end
# 115 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptStandardSuiteCommands.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptStandardSuiteCommands.h" 3
@class NSDictionary;
@class NSScriptObjectSpecifier;
@class NSScriptClassDescription;


enum {
    NSSaveOptionsYes = 0,
    NSSaveOptionsNo,
    NSSaveOptionsAsk
};
typedef NSUInteger NSSaveOptions;

@interface NSCloneCommand : NSScriptCommand {
    @private
    NSScriptObjectSpecifier *_keySpecifier;
}

- (void)setReceiversSpecifier:(NSScriptObjectSpecifier *)receiversRef;


- (NSScriptObjectSpecifier *)keySpecifier;

@end


@interface NSCloseCommand : NSScriptCommand {}

- (NSSaveOptions)saveOptions;


@end


@interface NSCountCommand : NSScriptCommand {}

@end


@interface NSCreateCommand : NSScriptCommand {
    @private
    id _privateVars;
}

- (NSScriptClassDescription *)createClassDescription;


- (NSDictionary *)resolvedKeyDictionary;


@end


@interface NSDeleteCommand : NSScriptCommand {
    @private
    NSScriptObjectSpecifier *_keySpecifier;
}

- (void)setReceiversSpecifier:(NSScriptObjectSpecifier *)receiversRef;


- (NSScriptObjectSpecifier *)keySpecifier;

@end


@interface NSExistsCommand : NSScriptCommand {}

@end


@interface NSGetCommand : NSScriptCommand {}

@end


@interface NSMoveCommand : NSScriptCommand {
    @private
    NSScriptObjectSpecifier *_keySpecifier;
}

- (void)setReceiversSpecifier:(NSScriptObjectSpecifier *)receiversRef;


- (NSScriptObjectSpecifier *)keySpecifier;

@end


@interface NSQuitCommand : NSScriptCommand {}

- (NSSaveOptions)saveOptions;


@end


@interface NSSetCommand : NSScriptCommand {
    @private
    NSScriptObjectSpecifier *_keySpecifier;
}

- (void)setReceiversSpecifier:(NSScriptObjectSpecifier *)receiversRef;


- (NSScriptObjectSpecifier *)keySpecifier;

@end
# 116 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptSuiteRegistry.h" 1 3
# 9 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptSuiteRegistry.h" 3
@class NSArray, NSBundle, NSData, NSDictionary, NSMutableArray, NSMutableDictionary, NSMutableSet, NSScriptClassDescription, NSScriptCommandDescription;

@interface NSScriptSuiteRegistry : NSObject {
    @private
    BOOL _isLoadingSDEFFiles;
    char _reserved1[3];
    NSMutableSet *_seenBundles;
    NSMutableArray *_suiteDescriptionsBeingCollected;
    NSScriptClassDescription *_classDescriptionNeedingRegistration;
    NSMutableArray *_suiteDescriptions;
    NSScriptCommandDescription *_commandDescriptionNeedingRegistration;
    NSMutableDictionary *_cachedClassDescriptionsByAppleEventCode;
    NSMutableDictionary *_cachedCommandDescriptionsByAppleEventCodes;
    NSDictionary *_cachedSuiteDescriptionsByName;
    NSMutableDictionary *_complexTypeDescriptionsByName;
    NSMutableDictionary *_listTypeDescriptionsByName;
    unsigned int _nextComplexTypeAppleEventCode;
    void *_reserved2[4];
}



+ (NSScriptSuiteRegistry *)sharedScriptSuiteRegistry;
+ (void)setSharedScriptSuiteRegistry:(NSScriptSuiteRegistry *)registry;



- (void)loadSuitesFromBundle:(NSBundle *)bundle;



- (void)loadSuiteWithDictionary:(NSDictionary *)suiteDeclaration fromBundle:(NSBundle *)bundle;



- (void)registerClassDescription:(NSScriptClassDescription *)classDescription;
- (void)registerCommandDescription:(NSScriptCommandDescription *)commandDescription;



- (NSArray *)suiteNames;



- (FourCharCode)appleEventCodeForSuite:(NSString *)suiteName;



- (NSBundle *)bundleForSuite:(NSString *)suiteName;



- (NSDictionary *)classDescriptionsInSuite:(NSString *)suiteName;
- (NSDictionary *)commandDescriptionsInSuite:(NSString *)suiteName;



- (NSString *)suiteForAppleEventCode:(FourCharCode)appleEventCode;



- (NSScriptClassDescription *)classDescriptionWithAppleEventCode:(FourCharCode)appleEventCode;



- (NSScriptCommandDescription *)commandDescriptionWithAppleEventClass:(FourCharCode)appleEventClassCode andAppleEventCode:(FourCharCode)appleEventIDCode;



- (NSData *)aeteResource:(NSString *)languageName;

@end
# 117 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSScriptWhoseTests.h" 1 3






@class NSArray;
@class NSScriptObjectSpecifier;
@class NSString;


enum {
    NSEqualToComparison = 0,
    NSLessThanOrEqualToComparison,
    NSLessThanComparison,
    NSGreaterThanOrEqualToComparison,
    NSGreaterThanComparison,
    NSBeginsWithComparison,
    NSEndsWithComparison,
    NSContainsComparison
};
typedef NSUInteger NSTestComparisonOperation;

@interface NSScriptWhoseTest : NSObject <NSCoding> {}

- (BOOL)isTrue;

@end


@interface NSLogicalTest : NSScriptWhoseTest {
    @private
    int _operator;
    id _subTests;
}

- (id)initAndTestWithTests:(NSArray *)subTests;
- (id)initOrTestWithTests:(NSArray *)subTests;
- (id)initNotTestWithTest:(NSScriptWhoseTest *)subTest;

@end





@interface NSSpecifierTest : NSScriptWhoseTest {
    @private
    NSTestComparisonOperation _comparisonOperator;
    NSScriptObjectSpecifier *_object1;
    id _object2;
}

- (id)initWithObjectSpecifier:(NSScriptObjectSpecifier *)obj1 comparisonOperator:(NSTestComparisonOperation)compOp testObject:(id)obj2;

@end


@interface NSObject (NSComparisonMethods)
- (BOOL)isEqualTo:(id)object;

- (BOOL)isLessThanOrEqualTo:(id)object;

- (BOOL)isLessThan:(id)object;

- (BOOL)isGreaterThanOrEqualTo:(id)object;

- (BOOL)isGreaterThan:(id)object;

- (BOOL)isNotEqualTo:(id)object;

- (BOOL)doesContain:(id)object;


- (BOOL)isLike:(NSString *)object;



- (BOOL)isCaseInsensitiveLike:(NSString *)object;
@end


@interface NSObject (NSScriptingComparisonMethods)






- (BOOL)scriptingIsEqualTo:(id)object;
- (BOOL)scriptingIsLessThanOrEqualTo:(id)object;
- (BOOL)scriptingIsLessThan:(id)object;
- (BOOL)scriptingIsGreaterThanOrEqualTo:(id)object;
- (BOOL)scriptingIsGreaterThan:(id)object;

- (BOOL)scriptingBeginsWith:(id)object;
- (BOOL)scriptingEndsWith:(id)object;
- (BOOL)scriptingContains:(id)object;

@end
# 118 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
@class NSURLAuthenticationChallenge;
@class NSURLCredential;
@class NSURLProtectionSpace;
@class NSURLResponse;
@class NSError;
# 29 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
@protocol NSURLAuthenticationChallengeSender <NSObject>




- (void)useCredential:(NSURLCredential *)credential forAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;




- (void)continueWithoutCredentialForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;




- (void)cancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;

@end

@class NSURLAuthenticationChallengeInternal;
# 57 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
@interface NSURLAuthenticationChallenge : NSObject
{
@private
    NSURLAuthenticationChallengeInternal *_internal;
}
# 73 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
- (id)initWithProtectionSpace:(NSURLProtectionSpace *)space proposedCredential:(NSURLCredential *)credential previousFailureCount:(NSInteger)previousFailureCount failureResponse:(NSURLResponse *)response error:(NSError *)error sender:(id<NSURLAuthenticationChallengeSender>)sender;
# 83 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
- (id)initWithAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge sender:(id<NSURLAuthenticationChallengeSender>)sender;






- (NSURLProtectionSpace *)protectionSpace;
# 104 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
- (NSURLCredential *)proposedCredential;






- (NSInteger)previousFailureCount;
# 122 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
- (NSURLResponse *)failureResponse;
# 132 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLAuthenticationChallenge.h" 3
- (NSError *)error;







- (id<NSURLAuthenticationChallengeSender>)sender;

@end
# 120 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 3
@class NSString;
# 25 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 3
enum {
    NSURLCredentialPersistenceNone,
    NSURLCredentialPersistenceForSession,
    NSURLCredentialPersistencePermanent
};
typedef NSUInteger NSURLCredentialPersistence;

@class NSURLCredentialInternal;







@interface NSURLCredential : NSObject <NSCopying>
{
    @private
    NSURLCredentialInternal *_internal;
}
# 54 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 3
- (id)initWithUser:(NSString *)user password:(NSString *)password persistence:(NSURLCredentialPersistence)persistence;
# 64 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 3
+ (NSURLCredential *)credentialWithUser:(NSString *)user password:(NSString *)password persistence:(NSURLCredentialPersistence)persistence;






- (NSString *)user;
# 81 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 3
- (NSString *)password;
# 92 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredential.h" 3
- (BOOL)hasPassword;






- (NSURLCredentialPersistence)persistence;

@end
# 121 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 3
@class NSDictionary;
@class NSString;
@class NSURLCredential;
@class NSURLProtectionSpace;

@class NSURLCredentialStorageInternal;
# 29 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 3
@interface NSURLCredentialStorage : NSObject
{
    @private
    NSURLCredentialStorageInternal *_internal;
}






+ (NSURLCredentialStorage *)sharedCredentialStorage;







- (NSDictionary *)credentialsForProtectionSpace:(NSURLProtectionSpace *)space;
# 57 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 3
- (NSDictionary *)allCredentials;
# 68 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 3
- (void)setCredential:(NSURLCredential *)credential forProtectionSpace:(NSURLProtectionSpace *)space;
# 77 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 3
- (void)removeCredential:(NSURLCredential *)credential forProtectionSpace:(NSURLProtectionSpace *)space;






- (NSURLCredential *)defaultCredentialForProtectionSpace:(NSURLProtectionSpace *)space;
# 93 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCredentialStorage.h" 3
- (void)setDefaultCredential:(NSURLCredential *)credential forProtectionSpace:(NSURLProtectionSpace *)space;

@end






extern NSString *const NSURLCredentialStorageChangedNotification;
# 122 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtectionSpace.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtectionSpace.h" 3
@class NSString;





extern NSString * const NSURLProtectionSpaceHTTPProxy;





extern NSString * const NSURLProtectionSpaceHTTPSProxy;





extern NSString * const NSURLProtectionSpaceFTPProxy;





extern NSString * const NSURLProtectionSpaceSOCKSProxy;





extern NSString * const NSURLAuthenticationMethodDefault;






extern NSString * const NSURLAuthenticationMethodHTTPBasic;





extern NSString * const NSURLAuthenticationMethodHTTPDigest;





extern NSString * const NSURLAuthenticationMethodHTMLForm;


@class NSURLProtectionSpaceInternal;






@interface NSURLProtectionSpace : NSObject <NSCopying>
{
@private
    NSURLProtectionSpaceInternal *_internal;
}
# 94 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtectionSpace.h" 3
- (id)initWithHost:(NSString *)host port:(NSInteger)port protocol:(NSString *)protocol realm:(NSString *)realm authenticationMethod:(NSString *)authenticationMethod;
# 110 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtectionSpace.h" 3
- (id)initWithProxyHost:(NSString *)host port:(NSInteger)port type:(NSString *)type realm:(NSString *)realm authenticationMethod:(NSString *)authenticationMethod;
# 120 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtectionSpace.h" 3
- (NSString *)realm;






- (BOOL)receivesCredentialSecurely;






- (BOOL)isProxy;






- (NSString *)host;






- (NSInteger)port;






- (NSString *)proxyType;






- (NSString *)protocol;






- (NSString *)authenticationMethod;

@end
# 123 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 1 3
# 33 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
enum
{
    NSURLCacheStorageAllowed,
    NSURLCacheStorageAllowedInMemoryOnly,
    NSURLCacheStorageNotAllowed,
};
typedef NSUInteger NSURLCacheStoragePolicy;


@class NSCachedURLResponseInternal;
@class NSData;
@class NSDictionary;
@class NSURLRequest;
@class NSURLResponse;
# 55 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
@interface NSCachedURLResponse : NSObject <NSCoding, NSCopying>
{
    NSCachedURLResponseInternal *_internal;
}
# 72 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (id)initWithResponse:(NSURLResponse *)response data:(NSData *)data;
# 86 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (id)initWithResponse:(NSURLResponse *)response data:(NSData *)data userInfo:(NSDictionary *)userInfo storagePolicy:(NSURLCacheStoragePolicy)storagePolicy;






- (NSURLResponse *)response;






- (NSData *)data;






- (NSDictionary *)userInfo;






- (NSURLCacheStoragePolicy)storagePolicy;

@end


@class NSURLRequest;
@class NSURLCacheInternal;

@interface NSURLCache : NSObject
{
    @private
    NSURLCacheInternal *_internal;
}
# 151 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
+ (NSURLCache *)sharedURLCache;
# 164 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
+ (void)setSharedURLCache:(NSURLCache *)cache;
# 179 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (id)initWithMemoryCapacity:(NSUInteger)memoryCapacity diskCapacity:(NSUInteger)diskCapacity diskPath:(NSString *)path;
# 192 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request;
# 201 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request;
# 211 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (void)removeCachedResponseForRequest:(NSURLRequest *)request;






- (void)removeAllCachedResponses;






- (NSUInteger)memoryCapacity;






- (NSUInteger)diskCapacity;
# 242 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (void)setMemoryCapacity:(NSUInteger)memoryCapacity;
# 252 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (void)setDiskCapacity:(NSUInteger)diskCapacity;
# 262 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (NSUInteger)currentMemoryUsage;
# 272 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLCache.h" 3
- (NSUInteger)currentDiskUsage;

@end
# 124 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
@class NSCachedURLResponse;
@class NSData;
@class NSError;
@class NSURLAuthenticationChallenge;
@class NSURLConnectionInternal;
@class NSURLRequest;
@class NSURLResponse;
@class NSRunLoop;
# 39 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
@interface NSURLConnection : NSObject
{
    @private
    NSURLConnectionInternal *_internal;
}
# 61 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
+ (BOOL)canHandleRequest:(NSURLRequest *)request;
# 83 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
+ (NSURLConnection *)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;
# 107 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate;
# 126 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately ;





- (void)start ;
# 142 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)cancel;
# 160 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode ;
- (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode ;

@end
# 222 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
@interface NSObject (NSURLConnectionDelegate)
# 260 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response;
# 271 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;







- (void)connection:(NSURLConnection *)connection didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
# 296 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
# 316 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
# 328 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
# 341 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
# 360 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse;

@end
# 372 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
@interface NSURLConnection (NSURLConnectionSynchronousLoading)
# 398 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLConnection.h" 3
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;

@end
# 125 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 1 3
# 16 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
@class NSCachedURLResponse;
@class NSError;
@class NSMutableURLRequest;
@class NSURLAuthenticationChallenge;
@class NSURLConnection;
@class NSURLProtocol;
@class NSURLProtocolInternal;
@class NSURLRequest;
@class NSURLResponse;
# 68 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
@protocol NSURLProtocolClient <NSObject>
# 78 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)URLProtocol:(NSURLProtocol *)protocol wasRedirectedToRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse;
# 89 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)URLProtocol:(NSURLProtocol *)protocol cachedResponseIsValid:(NSCachedURLResponse *)cachedResponse;
# 102 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)URLProtocol:(NSURLProtocol *)protocol didReceiveResponse:(NSURLResponse *)response cacheStoragePolicy:(NSURLCacheStoragePolicy)policy;
# 114 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)URLProtocol:(NSURLProtocol *)protocol didLoadData:(NSData *)data;







- (void)URLProtocolDidFinishLoading:(NSURLProtocol *)protocol;
# 131 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)URLProtocol:(NSURLProtocol *)protocol didFailWithError:(NSError *)error;
# 143 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)URLProtocol:(NSURLProtocol *)protocol didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;







- (void)URLProtocol:(NSURLProtocol *)protocol didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;

@end
# 164 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
@interface NSURLProtocol : NSObject
{
    @private
    NSURLProtocolInternal *_internal;
}
# 183 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (id)initWithRequest:(NSURLRequest *)request cachedResponse:(NSCachedURLResponse *)cachedResponse client:(id <NSURLProtocolClient>)client;






- (id <NSURLProtocolClient>)client;






- (NSURLRequest *)request;






- (NSCachedURLResponse *)cachedResponse;
# 225 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (BOOL)canInitWithRequest:(NSURLRequest *)request;
# 245 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request;
# 256 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b;







- (void)startLoading;
# 274 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
- (void)stopLoading;
# 292 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (id)propertyForKey:(NSString *)key inRequest:(NSURLRequest *)request;
# 305 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (void)setProperty:(id)value forKey:(NSString *)key inRequest:(NSMutableURLRequest *)request;
# 316 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (void)removePropertyForKey:(NSString *)key inRequest:(NSMutableURLRequest *)request;
# 342 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (BOOL)registerClass:(Class)protocolClass;
# 351 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLProtocol.h" 3
+ (void)unregisterClass:(Class)protocolClass;

@end
# 126 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 1 3
# 16 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
@class NSData;
@class NSDictionary;
@class NSInputStream;
@class NSString;
@class NSURL;
@class NSURLRequestInternal;
# 100 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
enum
{
    NSURLRequestUseProtocolCachePolicy = 0,

    NSURLRequestReloadIgnoringLocalCacheData = 1,
    NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4,
    NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,

    NSURLRequestReturnCacheDataElseLoad = 2,
    NSURLRequestReturnCacheDataDontLoad = 3,

    NSURLRequestReloadRevalidatingCacheData = 5,
};
typedef NSUInteger NSURLRequestCachePolicy;
# 147 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
@interface NSURLRequest : NSObject <NSCoding, NSCopying, NSMutableCopying>
{
    @private
    NSURLRequestInternal *_internal;
}
# 163 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
+ (id)requestWithURL:(NSURL *)URL;
# 176 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
+ (id)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;
# 187 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (id)initWithURL:(NSURL *)URL;
# 202 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (id)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;






- (NSURL *)URL;






- (NSURLRequestCachePolicy)cachePolicy;
# 233 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (NSTimeInterval)timeoutInterval;
# 246 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (NSURL *)mainDocumentURL;

@end
# 281 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
@interface NSMutableURLRequest : NSURLRequest






- (void)setURL:(NSURL *)URL;






- (void)setCachePolicy:(NSURLRequestCachePolicy)policy;
# 312 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setTimeoutInterval:(NSTimeInterval)seconds;
# 328 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setMainDocumentURL:(NSURL *)URL;

@end
# 339 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
@interface NSURLRequest (NSHTTPURLRequest)






- (NSString *)HTTPMethod;
# 355 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (NSDictionary *)allHTTPHeaderFields;
# 367 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (NSString *)valueForHTTPHeaderField:(NSString *)field;
# 376 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (NSData *)HTTPBody;
# 391 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (NSInputStream *)HTTPBodyStream;
# 404 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (BOOL)HTTPShouldHandleCookies;

@end
# 415 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
@interface NSMutableURLRequest (NSMutableHTTPURLRequest)






- (void)setHTTPMethod:(NSString *)method;
# 437 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setAllHTTPHeaderFields:(NSDictionary *)headerFields;
# 449 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
# 465 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)addValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
# 474 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setHTTPBody:(NSData *)data;
# 487 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setHTTPBodyStream:(NSInputStream *)inputStream;
# 502 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLRequest.h" 3
- (void)setHTTPShouldHandleCookies:(BOOL)should;

@end
# 127 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
@class NSDictionary;
@class NSString;
@class NSURL;
@class NSURLRequest;
@class NSURLResponseInternal;
# 35 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
@interface NSURLResponse : NSObject <NSCoding, NSCopying>
{
    NSURLResponseInternal *_internal;
}
# 50 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
- (id)initWithURL:(NSURL *)URL MIMEType:(NSString *)MIMEType expectedContentLength:(NSInteger)length textEncodingName:(NSString *)name;






- (NSURL *)URL;
# 70 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
- (NSString *)MIMEType;
# 85 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
- (long long)expectedContentLength;
# 98 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
- (NSString *)textEncodingName;
# 112 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
- (NSString *)suggestedFilename;

@end



@class NSHTTPURLResponseInternal;
# 128 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
@interface NSHTTPURLResponse : NSURLResponse
{
    NSHTTPURLResponseInternal *_httpInternal;
}






- (NSInteger)statusCode;
# 151 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
- (NSDictionary *)allHeaderFields;
# 160 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLResponse.h" 3
+ (NSString *)localizedStringForStatusCode:(NSInteger)statusCode;

@end
# 128 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
@class NSArray;
@class NSDate;
@class NSDictionary;
@class NSString;
@class NSURL;





extern NSString * const NSHTTPCookieName;





extern NSString * const NSHTTPCookieValue;





extern NSString * const NSHTTPCookieOriginURL;





extern NSString * const NSHTTPCookieVersion;





extern NSString * const NSHTTPCookieDomain;





extern NSString * const NSHTTPCookiePath;





extern NSString * const NSHTTPCookieSecure;





extern NSString * const NSHTTPCookieExpires;





extern NSString * const NSHTTPCookieComment;





extern NSString * const NSHTTPCookieCommentURL;





extern NSString * const NSHTTPCookieDiscard;





extern NSString * const NSHTTPCookieMaximumAge;





extern NSString * const NSHTTPCookiePort;


@class NSHTTPCookieInternal;
# 111 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
@interface NSHTTPCookie : NSObject
{
@private
    NSHTTPCookieInternal * _cookiePrivate;
}
# 240 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (id)initWithProperties:(NSDictionary *)properties;
# 255 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
+ (id)cookieWithProperties:(NSDictionary *)properties;
# 265 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
+ (NSDictionary *)requestHeaderFieldsWithCookies:(NSArray *)cookies;
# 276 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
+ (NSArray *)cookiesWithResponseHeaderFields:(NSDictionary *)headerFields forURL:(NSURL *)URL;
# 290 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSDictionary *)properties;
# 299 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSUInteger)version;






- (NSString *)name;






- (NSString *)value;
# 324 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSDate *)expiresDate;
# 333 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (BOOL)isSessionOnly;
# 344 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSString *)domain;
# 354 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSString *)path;
# 363 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (BOOL)isSecure;
# 374 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSString *)comment;
# 385 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSURL *)commentURL;
# 398 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookie.h" 3
- (NSArray *)portList;

@end
# 129 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookieStorage.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookieStorage.h" 3
@class NSArray;
@class NSHTTPCookie;
@class NSURL;
# 27 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookieStorage.h" 3
enum {
    NSHTTPCookieAcceptPolicyAlways,
    NSHTTPCookieAcceptPolicyNever,
    NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain
};
typedef NSUInteger NSHTTPCookieAcceptPolicy;


@class NSHTTPCookieStorageInternal;
# 46 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookieStorage.h" 3
@interface NSHTTPCookieStorage : NSObject
{
    @private
    NSHTTPCookieStorageInternal *_internal;
}






+ (NSHTTPCookieStorage *)sharedHTTPCookieStorage;






- (NSArray *)cookies;







- (void)setCookie:(NSHTTPCookie *)cookie;





- (void)deleteCookie:(NSHTTPCookie *)cookie;
# 90 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookieStorage.h" 3
- (NSArray *)cookiesForURL:(NSURL *)URL;
# 109 "/System/Library/Frameworks/Foundation.framework/Headers/NSHTTPCookieStorage.h" 3
- (void)setCookies:(NSArray *)cookies forURL:(NSURL *)URL mainDocumentURL:(NSURL *)mainDocumentURL;







- (NSHTTPCookieAcceptPolicy)cookieAcceptPolicy;







- (void)setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)cookieAcceptPolicy;

@end







extern NSString * const NSHTTPCookieManagerAcceptPolicyChangedNotification;





extern NSString * const NSHTTPCookieManagerCookiesChangedNotification;
# 130 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 1 3
# 15 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
@class NSError;
@class NSString;
@class NSData;
@class NSURLAuthenticationChallenge;
@class NSURLDownloadInternal;
@class NSURLRequest;
@class NSURLResponse;







@interface NSURLDownload : NSObject
{
    @private
    NSURLDownloadInternal *_internal;
}
# 44 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
+ (BOOL)canResumeDownloadDecodedWithEncodingMIMEType:(NSString *)MIMEType;
# 53 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate;
# 63 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (id)initWithResumeData:(NSData *)resumeData delegate:(id)delegate path:(NSString *)path;





- (void)cancel;
# 82 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)setDestination:(NSString *)path allowOverwrite:(BOOL)allowOverwrite;






- (NSURLRequest *)request;
# 102 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (NSData *)resumeData;
# 112 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)setDeletesFileUponFailure:(BOOL)deletesFileUponFailure;






- (BOOL)deletesFileUponFailure;

@end





@interface NSObject (NSURLDownloadDelegate)






- (void)downloadDidBegin:(NSURLDownload *)download;
# 147 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (NSURLRequest *)download:(NSURLDownload *)download willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse;
# 158 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)download:(NSURLDownload *)download didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;







- (void)download:(NSURLDownload *)download didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
# 178 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)download:(NSURLDownload *)download didReceiveResponse:(NSURLResponse *)response;
# 191 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)download:(NSURLDownload *)download willResumeWithResponse:(NSURLResponse *)response fromByte:(long long)startingByte;
# 200 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)download:(NSURLDownload *)download didReceiveDataOfLength:(NSUInteger)length;
# 212 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (BOOL)download:(NSURLDownload *)download shouldDecodeSourceDataOfMIMEType:(NSString *)encodingType;
# 226 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)download:(NSURLDownload *)download decideDestinationWithSuggestedFilename:(NSString *)filename;







- (void)download:(NSURLDownload *)download didCreateDestination:(NSString *)path;
# 243 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)downloadDidFinish:(NSURLDownload *)download;
# 253 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLDownload.h" 3
- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error;

@end
# 131 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 1 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLError.h" 1 3
# 13 "/System/Library/Frameworks/Foundation.framework/Headers/NSURLError.h" 3
@class NSString;






extern NSString * const NSURLErrorDomain;






extern NSString * const NSErrorFailingURLStringKey;







enum
{
    NSURLErrorUnknown = -1,
    NSURLErrorCancelled = -999,
    NSURLErrorBadURL = -1000,
    NSURLErrorTimedOut = -1001,
    NSURLErrorUnsupportedURL = -1002,
    NSURLErrorCannotFindHost = -1003,
    NSURLErrorCannotConnectToHost = -1004,
    NSURLErrorNetworkConnectionLost = -1005,
    NSURLErrorDNSLookupFailed = -1006,
    NSURLErrorHTTPTooManyRedirects = -1007,
    NSURLErrorResourceUnavailable = -1008,
    NSURLErrorNotConnectedToInternet = -1009,
    NSURLErrorRedirectToNonExistentLocation = -1010,
    NSURLErrorBadServerResponse = -1011,
    NSURLErrorUserCancelledAuthentication = -1012,
    NSURLErrorUserAuthenticationRequired = -1013,
    NSURLErrorZeroByteResource = -1014,
    NSURLErrorFileDoesNotExist = -1100,
    NSURLErrorFileIsDirectory = -1101,
    NSURLErrorNoPermissionsToReadFile = -1102,
    NSURLErrorSecureConnectionFailed = -1200,
    NSURLErrorServerCertificateHasBadDate = -1201,
    NSURLErrorServerCertificateUntrusted = -1202,
    NSURLErrorServerCertificateHasUnknownRoot = -1203,
    NSURLErrorServerCertificateNotYetValid = -1204,
 NSURLErrorClientCertificateRejected = -1205,
    NSURLErrorCannotLoadFromNetwork = -2000,


    NSURLErrorCannotCreateFile = -3000,
    NSURLErrorCannotOpenFile = -3001,
    NSURLErrorCannotCloseFile = -3002,
    NSURLErrorCannotWriteToFile = -3003,
    NSURLErrorCannotRemoveFile = -3004,
    NSURLErrorCannotMoveFile = -3005,
    NSURLErrorDownloadDecodingFailedMidStream = -3006,
    NSURLErrorDownloadDecodingFailedToComplete =-3007,
};
# 132 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3

# 1 "/System/Library/Frameworks/Foundation.framework/Headers/FoundationErrors.h" 1 3
# 11 "/System/Library/Frameworks/Foundation.framework/Headers/FoundationErrors.h" 3
enum {

    NSFileNoSuchFileError = 4,
    NSFileLockingError = 255,
    NSFileReadUnknownError = 256,
    NSFileReadNoPermissionError = 257,
    NSFileReadInvalidFileNameError = 258,
    NSFileReadCorruptFileError = 259,
    NSFileReadNoSuchFileError = 260,
    NSFileReadInapplicableStringEncodingError = 261,
    NSFileReadUnsupportedSchemeError = 262,
    NSFileWriteUnknownError = 512,
    NSFileWriteNoPermissionError = 513,
    NSFileWriteInvalidFileNameError = 514,
    NSFileWriteInapplicableStringEncodingError = 517,
    NSFileWriteUnsupportedSchemeError = 518,
    NSFileWriteOutOfSpaceError = 640,


    NSKeyValueValidationError = 1024,
    NSFormattingError = 2048,
    NSUserCancelledError = 3072,



    NSExecutableNotLoadableError = 3584,
    NSExecutableArchitectureMismatchError = 3585,
    NSExecutableRuntimeMismatchError = 3586,
    NSExecutableLoadError = 3587,
    NSExecutableLinkError = 3588,



    NSFileErrorMinimum = 0,
    NSFileErrorMaximum = 1023,

    NSValidationErrorMinimum = 1024,
    NSValidationErrorMaximum = 2047,

    NSFormattingErrorMinimum = 2048,
    NSFormattingErrorMaximum = 2559


    ,
    NSExecutableErrorMinimum = 3584,
    NSExecutableErrorMaximum = 3839

};
# 134 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 2 3
# 13 "/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/AppKitDefines.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/AppKitErrors.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/AppKitErrors.h" 3
enum {
    NSTextReadInapplicableDocumentTypeError = 65806,
    NSTextWriteInapplicableDocumentTypeError = 66062,


    NSTextReadWriteErrorMinimum = 65792,
    NSTextReadWriteErrorMaximum = 66303,


    NSServiceApplicationNotFoundError = 66560,
    NSServiceApplicationLaunchFailedError = 66561,
    NSServiceRequestTimedOutError = 66562,
    NSServiceInvalidPasteboardDataError = 66563,
    NSServiceMalformedServiceDictionaryError = 66564,
    NSServiceMiscellaneousError = 66800,


    NSServiceErrorMaximum = 66817
};
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphicsContext.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphicsContext.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphics.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphics.h" 3
@class NSColor, NSView;




enum {
    NSCompositeClear = 0,
    NSCompositeCopy = 1,
    NSCompositeSourceOver = 2,
    NSCompositeSourceIn = 3,
    NSCompositeSourceOut = 4,
    NSCompositeSourceAtop = 5,
    NSCompositeDestinationOver = 6,
    NSCompositeDestinationIn = 7,
    NSCompositeDestinationOut = 8,
    NSCompositeDestinationAtop = 9,
    NSCompositeXOR = 10,
    NSCompositePlusDarker = 11,
    NSCompositeHighlight = 12,
    NSCompositePlusLighter = 13
};
typedef NSUInteger NSCompositingOperation;


enum {
    NSBackingStoreRetained = 0,
    NSBackingStoreNonretained = 1,
    NSBackingStoreBuffered = 2
};
typedef NSUInteger NSBackingStoreType;


enum {
    NSWindowAbove = 1,
    NSWindowBelow = -1,
    NSWindowOut = 0
};
typedef NSInteger NSWindowOrderingMode;


enum {
    NSFocusRingOnly = 0,
    NSFocusRingBelow = 1,
    NSFocusRingAbove = 2
};
typedef NSUInteger NSFocusRingPlacement;



enum {
    NSFocusRingTypeDefault = 0,
    NSFocusRingTypeNone = 1,
    NSFocusRingTypeExterior = 2
};
typedef NSUInteger NSFocusRingType;




extern "C" NSString *NSCalibratedWhiteColorSpace;
extern "C" NSString *NSCalibratedBlackColorSpace;
extern "C" NSString *NSCalibratedRGBColorSpace;
extern "C" NSString *NSDeviceWhiteColorSpace;
extern "C" NSString *NSDeviceBlackColorSpace;
extern "C" NSString *NSDeviceRGBColorSpace;
extern "C" NSString *NSDeviceCMYKColorSpace;
extern "C" NSString *NSNamedColorSpace;
extern "C" NSString *NSPatternColorSpace;
extern "C" NSString *NSCustomColorSpace;




typedef int NSWindowDepth;
extern "C" NSWindowDepth NSBestDepth (NSString *colorSpace, NSInteger bps, NSInteger bpp, BOOL planar, BOOL *exactMatch);
extern "C" BOOL NSPlanarFromDepth (NSWindowDepth depth);
extern "C" NSString *NSColorSpaceFromDepth (NSWindowDepth depth);
extern "C" NSInteger NSBitsPerSampleFromDepth(NSWindowDepth depth);
extern "C" NSInteger NSBitsPerPixelFromDepth(NSWindowDepth depth);
extern "C" NSInteger NSNumberOfColorComponents(NSString *colorSpaceName);
extern "C" const NSWindowDepth *NSAvailableWindowDepths (void);




extern "C" const CGFloat NSWhite;
extern "C" const CGFloat NSLightGray;
extern "C" const CGFloat NSDarkGray;
extern "C" const CGFloat NSBlack;




extern "C" NSString *NSDeviceResolution;
extern "C" NSString *NSDeviceColorSpaceName;
extern "C" NSString *NSDeviceBitsPerSample;
extern "C" NSString *NSDeviceIsScreen;
extern "C" NSString *NSDeviceIsPrinter;
extern "C" NSString *NSDeviceSize;




extern "C" void NSRectFill(NSRect aRect);
extern "C" void NSRectFillList(const NSRect *rects, NSInteger count);
extern "C" void NSRectFillListWithGrays(const NSRect *rects, const CGFloat *grays, NSInteger num);
extern "C" void NSRectFillListWithColors(const NSRect *rects, NSColor **colors, NSInteger num);
extern "C" void NSRectFillUsingOperation(NSRect aRect, NSCompositingOperation op);
extern "C" void NSRectFillListUsingOperation(const NSRect *rects, NSInteger count, NSCompositingOperation op);
extern "C" void NSRectFillListWithColorsUsingOperation(const NSRect *rects, NSColor **colors, NSInteger num, NSCompositingOperation op);
extern "C" void NSFrameRect(NSRect aRect);
extern "C" void NSFrameRectWithWidth(NSRect aRect, CGFloat frameWidth);
extern "C" void NSFrameRectWithWidthUsingOperation(NSRect aRect, CGFloat frameWidth, NSCompositingOperation op);
extern "C" void NSRectClip(NSRect aRect);
extern "C" void NSRectClipList(const NSRect *rects, NSInteger count);
extern "C" NSRect NSDrawTiledRects(NSRect boundsRect, NSRect clipRect, const NSRectEdge *sides, const CGFloat *grays, NSInteger count);
extern "C" void NSDrawGrayBezel(NSRect aRect, NSRect clipRect);
extern "C" void NSDrawGroove(NSRect aRect, NSRect clipRect);
extern "C" void NSDrawWhiteBezel(NSRect aRect, NSRect clipRect);
extern "C" void NSDrawButton(NSRect aRect, NSRect clipRect);
extern "C" void NSEraseRect(NSRect aRect);
extern "C" NSColor *NSReadPixel(NSPoint passedPoint);
extern "C" void NSDrawBitmap(NSRect rect, NSInteger width, NSInteger height, NSInteger bps, NSInteger spp, NSInteger bpp, NSInteger bpr, BOOL isPlanar, BOOL hasAlpha, NSString *colorSpaceName, const unsigned char *const data[5]);
extern "C" void NSCopyBits(NSInteger srcGState, NSRect srcRect, NSPoint destPoint);
extern "C" void NSHighlightRect(NSRect aRect);
extern "C" void NSBeep(void);
extern "C" void NSCountWindows(NSInteger *count);
extern "C" void NSWindowList(NSInteger size, NSInteger list[]);
extern "C" void NSCountWindowsForContext(NSInteger context, NSInteger *count);
extern "C" void NSWindowListForContext(NSInteger context, NSInteger size, NSInteger list[]);


extern "C" NSInteger NSGetWindowServerMemory(NSInteger context, NSInteger *virtualMemory, NSInteger *windowBackingMemory, NSString **windowDumpString);

extern "C" NSRect NSDrawColorTiledRects(NSRect boundsRect, NSRect clipRect, const NSRectEdge *sides, NSColor **colors, NSInteger count);
extern "C" void NSDrawDarkBezel(NSRect aRect, NSRect clipRect);
extern "C" void NSDrawLightBezel(NSRect aRect, NSRect clipRect);
extern "C" void NSDottedFrameRect(NSRect aRect);

extern "C" void NSDrawWindowBackground(NSRect aRect);
extern "C" void NSSetFocusRingStyle(NSFocusRingPlacement placement);
# 163 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphics.h" 3
extern "C" void NSDisableScreenUpdates(void) ;
extern "C" void NSEnableScreenUpdates(void) ;
# 178 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphics.h" 3
enum {


 NSAnimationEffectDisappearingItemDefault = 0,


 NSAnimationEffectPoof = 10
};
typedef NSUInteger NSAnimationEffect;

extern "C" void NSShowAnimationEffect(NSAnimationEffect animationEffect, NSPoint centerLocation, NSSize size, id animationDelegate, SEL didEndSelector, void *contextInfo) ;
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSGraphicsContext.h" 2 3



@class NSDictionary;
@class NSString;
@class NSWindow;
@class NSBitmapImageRep;


extern "C" NSString *NSGraphicsContextDestinationAttributeName;


extern "C" NSString *NSGraphicsContextRepresentationFormatAttributeName;


extern "C" NSString *NSGraphicsContextPSFormat;
extern "C" NSString *NSGraphicsContextPDFFormat;

enum {
   NSImageInterpolationDefault,
   NSImageInterpolationNone,
   NSImageInterpolationLow,
   NSImageInterpolationHigh
};
typedef NSUInteger NSImageInterpolation;


enum {
    NSColorRenderingIntentDefault,
    NSColorRenderingIntentAbsoluteColorimetric,
    NSColorRenderingIntentRelativeColorimetric,
    NSColorRenderingIntentPerceptual,
    NSColorRenderingIntentSaturation
};
typedef NSInteger NSColorRenderingIntent;


@interface NSGraphicsContext : NSObject {
}


+ (NSGraphicsContext *)graphicsContextWithAttributes:(NSDictionary *)attributes;


+ (NSGraphicsContext *)graphicsContextWithWindow:(NSWindow *)window;




+ (NSGraphicsContext *)graphicsContextWithBitmapImageRep:(NSBitmapImageRep *)bitmapRep;



+ (NSGraphicsContext *)graphicsContextWithGraphicsPort:(void *)graphicsPort flipped:(BOOL)initialFlippedState;



+ (NSGraphicsContext *)currentContext;
+ (void)setCurrentContext:(NSGraphicsContext *)context;


+ (BOOL)currentContextDrawingToScreen;



+ (void)saveGraphicsState;

+ (void)restoreGraphicsState;

+ (void)setGraphicsState:(NSInteger)gState;


- (NSDictionary *)attributes;


- (BOOL)isDrawingToScreen;


- (void)saveGraphicsState;
- (void)restoreGraphicsState;

- (void)flushGraphics;


- (void *)focusStack;
- (void)setFocusStack:(void *)stack;


- (void *)graphicsPort;




- (BOOL)isFlipped;

@end

@interface NSGraphicsContext(NSGraphicsContext_RenderingOptions)

- (void)setShouldAntialias:(BOOL)antialias;
- (BOOL)shouldAntialias;
- (void)setImageInterpolation:(NSImageInterpolation)interpolation;
- (NSImageInterpolation)imageInterpolation;


- (void)setPatternPhase:(NSPoint)phase;
- (NSPoint)patternPhase;


- (void)setCompositingOperation:(NSCompositingOperation)operation;
- (NSCompositingOperation)compositingOperation;


- (NSColorRenderingIntent)colorRenderingIntent;
- (void)setColorRenderingIntent:(NSColorRenderingIntent)renderingIntent;

@end


@class CIContext;
@interface NSGraphicsContext (NSQuartzCoreAdditions)
- (CIContext *)CIContext;
@end
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAccessibility.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSAccessibility.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSErrors.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSErrors.h" 3
@class NSString;



extern "C" NSString *NSTextLineTooLongException;
extern "C" NSString *NSTextNoSelectionException;
extern "C" NSString *NSWordTablesWriteException;
extern "C" NSString *NSWordTablesReadException;
extern "C" NSString *NSTextReadException;
extern "C" NSString *NSTextWriteException;
extern "C" NSString *NSPasteboardCommunicationException;
extern "C" NSString *NSPrintingCommunicationException;
extern "C" NSString *NSAbortModalException;
extern "C" NSString *NSAbortPrintingException;
extern "C" NSString *NSIllegalSelectorException;
extern "C" NSString *NSAppKitVirtualMemoryException;
extern "C" NSString *NSBadRTFDirectiveException;
extern "C" NSString *NSBadRTFFontTableException;
extern "C" NSString *NSBadRTFStyleSheetException;
extern "C" NSString *NSTypedStreamVersionException;
extern "C" NSString *NSTIFFException;
extern "C" NSString *NSPrintPackageException;
extern "C" NSString *NSBadRTFColorTableException;
extern "C" NSString *NSDraggingException;
extern "C" NSString *NSColorListIOException;
extern "C" NSString *NSColorListNotEditableException;
extern "C" NSString *NSBadBitmapParametersException;
extern "C" NSString *NSWindowServerCommunicationException;
extern "C" NSString *NSFontUnavailableException;
extern "C" NSString *NSPPDIncludeNotFoundException;
extern "C" NSString *NSPPDParseException;
extern "C" NSString *NSPPDIncludeStackOverflowException;
extern "C" NSString *NSPPDIncludeStackUnderflowException;
extern "C" NSString *NSRTFPropertyStackOverflowException;
extern "C" NSString *NSAppKitIgnoredException;
extern "C" NSString *NSBadComparisonException;
extern "C" NSString *NSImageCacheException;
extern "C" NSString *NSNibLoadingException;
extern "C" NSString *NSBrowserIllegalDelegateException;
extern "C" NSString *NSAccessibilityException;
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSAccessibility.h" 2 3



@class NSString, NSArray;
# 22 "/System/Library/Frameworks/AppKit.framework/Headers/NSAccessibility.h" 3
@interface NSObject (NSAccessibility)


- (NSArray *)accessibilityAttributeNames;
- (id)accessibilityAttributeValue:(NSString *)attribute;
- (BOOL)accessibilityIsAttributeSettable:(NSString *)attribute;
- (void)accessibilitySetValue:(id)value forAttribute:(NSString *)attribute;



- (NSArray *)accessibilityParameterizedAttributeNames;
- (id)accessibilityAttributeValue:(NSString *)attribute forParameter:(id)parameter;



- (NSArray *)accessibilityActionNames;
- (NSString *)accessibilityActionDescription:(NSString *)action;
- (void)accessibilityPerformAction:(NSString *)action;


- (BOOL)accessibilityIsIgnored;


- (id)accessibilityHitTest:(NSPoint)point;


- (id)accessibilityFocusedUIElement;

@end






@interface NSObject (NSAccessibilityAdditions)



- (BOOL)accessibilitySetOverrideValue:(id)value forAttribute:(NSString *)attribute;


@end



extern "C" NSString *NSAccessibilityRoleDescription(NSString *role, NSString *subrole)
    ;
extern "C" NSString *NSAccessibilityRoleDescriptionForUIElement(id element)
    ;
extern "C" NSString *NSAccessibilityActionDescription(NSString *action)
    ;



extern "C" void NSAccessibilityRaiseBadArgumentException(id element, NSString *attribute, id value)
    ;






extern "C" id NSAccessibilityUnignoredAncestor(id element);
extern "C" id NSAccessibilityUnignoredDescendant(id element);
extern "C" NSArray *NSAccessibilityUnignoredChildren(NSArray *originalChildren);
extern "C" NSArray *NSAccessibilityUnignoredChildrenForOnlyChild(id originalChild);







extern "C" void NSAccessibilityPostNotification(id element, NSString *notification);
# 107 "/System/Library/Frameworks/AppKit.framework/Headers/NSAccessibility.h" 3
extern "C" NSString *const NSAccessibilityErrorCodeExceptionInfo;







extern "C" NSString *const NSAccessibilityRoleAttribute;
extern "C" NSString *const NSAccessibilityRoleDescriptionAttribute;
extern "C" NSString *const NSAccessibilitySubroleAttribute;
extern "C" NSString *const NSAccessibilityHelpAttribute;
extern "C" NSString *const NSAccessibilityValueAttribute;
extern "C" NSString *const NSAccessibilityMinValueAttribute;
extern "C" NSString *const NSAccessibilityMaxValueAttribute;
extern "C" NSString *const NSAccessibilityEnabledAttribute;
extern "C" NSString *const NSAccessibilityFocusedAttribute;
extern "C" NSString *const NSAccessibilityParentAttribute;
extern "C" NSString *const NSAccessibilityChildrenAttribute;
extern "C" NSString *const NSAccessibilityWindowAttribute;
extern "C" NSString *const NSAccessibilityTopLevelUIElementAttribute
    ;
extern "C" NSString *const NSAccessibilitySelectedChildrenAttribute;
extern "C" NSString *const NSAccessibilityVisibleChildrenAttribute;
extern "C" NSString *const NSAccessibilityPositionAttribute;
extern "C" NSString *const NSAccessibilitySizeAttribute;
extern "C" NSString *const NSAccessibilityContentsAttribute;
extern "C" NSString *const NSAccessibilityTitleAttribute;
extern "C" NSString *const NSAccessibilityDescriptionAttribute
    ;
extern "C" NSString *const NSAccessibilityShownMenuAttribute
    ;


extern "C" NSString *const NSAccessibilityPreviousContentsAttribute;
extern "C" NSString *const NSAccessibilityNextContentsAttribute;
extern "C" NSString *const NSAccessibilityHeaderAttribute;
extern "C" NSString *const NSAccessibilityEditedAttribute;
extern "C" NSString *const NSAccessibilityTabsAttribute;
extern "C" NSString *const NSAccessibilityHorizontalScrollBarAttribute;
extern "C" NSString *const NSAccessibilityVerticalScrollBarAttribute;
extern "C" NSString *const NSAccessibilityOverflowButtonAttribute;
extern "C" NSString *const NSAccessibilityIncrementButtonAttribute;
extern "C" NSString *const NSAccessibilityDecrementButtonAttribute;
extern "C" NSString *const NSAccessibilityFilenameAttribute;
extern "C" NSString *const NSAccessibilityExpandedAttribute;
extern "C" NSString *const NSAccessibilitySelectedAttribute;
extern "C" NSString *const NSAccessibilitySplittersAttribute;
extern "C" NSString *const NSAccessibilityDocumentAttribute;
extern "C" NSString *const NSAccessibilityURLAttribute
    ;
extern "C" NSString *const NSAccessibilityIndexAttribute
    ;


extern "C" NSString *const NSAccessibilityTitleUIElementAttribute;
extern "C" NSString *const NSAccessibilityServesAsTitleForUIElementsAttribute
    ;
extern "C" NSString *const NSAccessibilityLinkedUIElementsAttribute
    ;



extern "C" NSString *const NSAccessibilitySelectedTextAttribute;
extern "C" NSString *const NSAccessibilitySelectedTextRangeAttribute;
extern "C" NSString *const NSAccessibilityNumberOfCharactersAttribute
    ;
extern "C" NSString *const NSAccessibilityVisibleCharacterRangeAttribute
    ;
extern "C" NSString *const NSAccessibilitySharedTextUIElementsAttribute
    ;
extern "C" NSString *const NSAccessibilitySharedCharacterRangeAttribute
    ;
extern "C" NSString *const NSAccessibilityInsertionPointLineNumberAttribute
    ;



extern "C" NSString *const NSAccessibilityLineForIndexParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityRangeForLineParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityStringForRangeParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityRangeForPositionParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityRangeForIndexParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityBoundsForRangeParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityRTFForRangeParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityStyleRangeForIndexParameterizedAttribute
    ;
extern "C" NSString *const NSAccessibilityAttributedStringForRangeParameterizedAttribute
    ;



extern "C" NSString *const NSAccessibilityFontTextAttribute
    ;
extern "C" NSString *const NSAccessibilityForegroundColorTextAttribute
    ;
extern "C" NSString *const NSAccessibilityBackgroundColorTextAttribute
    ;
extern "C" NSString *const NSAccessibilityUnderlineColorTextAttribute
    ;
extern "C" NSString *const NSAccessibilityStrikethroughColorTextAttribute
    ;
extern "C" NSString *const NSAccessibilityUnderlineTextAttribute
    ;
extern "C" NSString *const NSAccessibilitySuperscriptTextAttribute
    ;
extern "C" NSString *const NSAccessibilityStrikethroughTextAttribute
    ;
extern "C" NSString *const NSAccessibilityShadowTextAttribute
    ;
extern "C" NSString *const NSAccessibilityAttachmentTextAttribute
    ;
extern "C" NSString *const NSAccessibilityLinkTextAttribute
    ;
extern "C" NSString *const NSAccessibilityMisspelledTextAttribute
    ;

extern "C" NSString *const NSAccessibilityFontNameKey
    ;
extern "C" NSString *const NSAccessibilityFontFamilyKey
    ;
extern "C" NSString *const NSAccessibilityVisibleNameKey
    ;
extern "C" NSString *const NSAccessibilityFontSizeKey
    ;



extern "C" NSString *const NSAccessibilityMainAttribute;
extern "C" NSString *const NSAccessibilityMinimizedAttribute;
extern "C" NSString *const NSAccessibilityCloseButtonAttribute;
extern "C" NSString *const NSAccessibilityZoomButtonAttribute;
extern "C" NSString *const NSAccessibilityMinimizeButtonAttribute;
extern "C" NSString *const NSAccessibilityToolbarButtonAttribute;
extern "C" NSString *const NSAccessibilityProxyAttribute;
extern "C" NSString *const NSAccessibilityGrowAreaAttribute;
extern "C" NSString *const NSAccessibilityModalAttribute
    ;
extern "C" NSString *const NSAccessibilityDefaultButtonAttribute
    ;
extern "C" NSString *const NSAccessibilityCancelButtonAttribute
    ;


extern "C" NSString *const NSAccessibilityMenuBarAttribute;
extern "C" NSString *const NSAccessibilityWindowsAttribute;
extern "C" NSString *const NSAccessibilityFrontmostAttribute;
extern "C" NSString *const NSAccessibilityHiddenAttribute;
extern "C" NSString *const NSAccessibilityMainWindowAttribute;
extern "C" NSString *const NSAccessibilityFocusedWindowAttribute;
extern "C" NSString *const NSAccessibilityFocusedUIElementAttribute;

extern "C" NSString *const NSAccessibilityOrientationAttribute;
extern "C" NSString *const NSAccessibilityVerticalOrientationValue;
extern "C" NSString *const NSAccessibilityHorizontalOrientationValue;
extern "C" NSString *const NSAccessibilityColumnTitlesAttribute;

extern "C" NSString *const NSAccessibilitySearchButtonAttribute
    ;
extern "C" NSString *const NSAccessibilitySearchMenuAttribute
    ;
extern "C" NSString *const NSAccessibilityClearButtonAttribute
    ;



extern "C" NSString *const NSAccessibilityRowsAttribute;
extern "C" NSString *const NSAccessibilityVisibleRowsAttribute;
extern "C" NSString *const NSAccessibilitySelectedRowsAttribute;
extern "C" NSString *const NSAccessibilityColumnsAttribute;
extern "C" NSString *const NSAccessibilityVisibleColumnsAttribute;
extern "C" NSString *const NSAccessibilitySelectedColumnsAttribute;
extern "C" NSString *const NSAccessibilitySortDirectionAttribute
    ;


extern "C" NSString *const NSAccessibilityAscendingSortDirectionValue ;
extern "C" NSString *const NSAccessibilityDescendingSortDirectionValue ;
extern "C" NSString *const NSAccessibilityUnknownSortDirectionValue ;


extern "C" NSString *const NSAccessibilityDisclosingAttribute;
extern "C" NSString *const NSAccessibilityDisclosedRowsAttribute;
extern "C" NSString *const NSAccessibilityDisclosedByRowAttribute;
extern "C" NSString *const NSAccessibilityDisclosureLevelAttribute
    ;


extern "C" NSString *const NSAccessibilityAllowedValuesAttribute
    ;
extern "C" NSString *const NSAccessibilityLabelUIElementsAttribute
    ;
extern "C" NSString *const NSAccessibilityLabelValueAttribute
    ;


extern "C" NSString *const NSAccessibilityMatteHoleAttribute
    ;
extern "C" NSString *const NSAccessibilityMatteContentUIElementAttribute
    ;


extern "C" NSString *const NSAccessibilityMarkerUIElementsAttribute
    ;
extern "C" NSString *const NSAccessibilityMarkerValuesAttribute
    ;
extern "C" NSString *const NSAccessibilityMarkerGroupUIElementAttribute
    ;
extern "C" NSString *const NSAccessibilityUnitsAttribute
    ;
extern "C" NSString *const NSAccessibilityUnitDescriptionAttribute
    ;
extern "C" NSString *const NSAccessibilityMarkerTypeAttribute
    ;
extern "C" NSString *const NSAccessibilityMarkerTypeDescriptionAttribute
    ;


extern "C" NSString *const NSAccessibilityLeftTabStopMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityRightTabStopMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityCenterTabStopMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityDecimalTabStopMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityHeadIndentMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityTailIndentMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityFirstLineIndentMarkerTypeValue ;
extern "C" NSString *const NSAccessibilityUnknownMarkerTypeValue ;


extern "C" NSString *const NSAccessibilityInchesUnitValue ;
extern "C" NSString *const NSAccessibilityCentimetersUnitValue ;
extern "C" NSString *const NSAccessibilityPointsUnitValue ;
extern "C" NSString *const NSAccessibilityPicasUnitValue ;
extern "C" NSString *const NSAccessibilityUnknownUnitValue ;


extern "C" NSString *const NSAccessibilityPressAction;
extern "C" NSString *const NSAccessibilityIncrementAction;
extern "C" NSString *const NSAccessibilityDecrementAction;
extern "C" NSString *const NSAccessibilityConfirmAction;
extern "C" NSString *const NSAccessibilityPickAction;
extern "C" NSString *const NSAccessibilityCancelAction ;
extern "C" NSString *const NSAccessibilityRaiseAction ;
extern "C" NSString *const NSAccessibilityShowMenuAction ;
extern "C" NSString *const NSAccessibilityDeleteAction ;


extern "C" NSString *const NSAccessibilityMainWindowChangedNotification;
extern "C" NSString *const NSAccessibilityFocusedWindowChangedNotification;
extern "C" NSString *const NSAccessibilityFocusedUIElementChangedNotification;


extern "C" NSString *const NSAccessibilityApplicationActivatedNotification;
extern "C" NSString *const NSAccessibilityApplicationDeactivatedNotification;
extern "C" NSString *const NSAccessibilityApplicationHiddenNotification;
extern "C" NSString *const NSAccessibilityApplicationShownNotification;


extern "C" NSString *const NSAccessibilityWindowCreatedNotification;
extern "C" NSString *const NSAccessibilityWindowMovedNotification;
extern "C" NSString *const NSAccessibilityWindowResizedNotification;
extern "C" NSString *const NSAccessibilityWindowMiniaturizedNotification;
extern "C" NSString *const NSAccessibilityWindowDeminiaturizedNotification;


extern "C" NSString *const NSAccessibilityDrawerCreatedNotification ;
extern "C" NSString *const NSAccessibilitySheetCreatedNotification ;


extern "C" NSString *const NSAccessibilityUIElementDestroyedNotification;
extern "C" NSString *const NSAccessibilityValueChangedNotification;
extern "C" NSString *const NSAccessibilityTitleChangedNotification ;
extern "C" NSString *const NSAccessibilityResizedNotification ;
extern "C" NSString *const NSAccessibilityMovedNotification ;
extern "C" NSString *const NSAccessibilityCreatedNotification ;


extern "C" NSString *const NSAccessibilityHelpTagCreatedNotification ;
extern "C" NSString *const NSAccessibilitySelectedTextChangedNotification ;
extern "C" NSString *const NSAccessibilityRowCountChangedNotification ;
extern "C" NSString *const NSAccessibilitySelectedChildrenChangedNotification ;
extern "C" NSString *const NSAccessibilitySelectedRowsChangedNotification ;
extern "C" NSString *const NSAccessibilitySelectedColumnsChangedNotification ;



extern "C" NSString *const NSAccessibilityUnknownRole;
extern "C" NSString *const NSAccessibilityButtonRole;
extern "C" NSString *const NSAccessibilityRadioButtonRole;
extern "C" NSString *const NSAccessibilityCheckBoxRole;
extern "C" NSString *const NSAccessibilitySliderRole;
extern "C" NSString *const NSAccessibilityTabGroupRole;
extern "C" NSString *const NSAccessibilityTextFieldRole;
extern "C" NSString *const NSAccessibilityStaticTextRole;
extern "C" NSString *const NSAccessibilityTextAreaRole;
extern "C" NSString *const NSAccessibilityScrollAreaRole;
extern "C" NSString *const NSAccessibilityPopUpButtonRole;
extern "C" NSString *const NSAccessibilityMenuButtonRole;
extern "C" NSString *const NSAccessibilityTableRole;
extern "C" NSString *const NSAccessibilityApplicationRole;
extern "C" NSString *const NSAccessibilityGroupRole;
extern "C" NSString *const NSAccessibilityRadioGroupRole;
extern "C" NSString *const NSAccessibilityListRole;
extern "C" NSString *const NSAccessibilityScrollBarRole;
extern "C" NSString *const NSAccessibilityValueIndicatorRole;
extern "C" NSString *const NSAccessibilityImageRole;
extern "C" NSString *const NSAccessibilityMenuBarRole;
extern "C" NSString *const NSAccessibilityMenuRole;
extern "C" NSString *const NSAccessibilityMenuItemRole;
extern "C" NSString *const NSAccessibilityColumnRole;
extern "C" NSString *const NSAccessibilityRowRole;
extern "C" NSString *const NSAccessibilityToolbarRole;
extern "C" NSString *const NSAccessibilityBusyIndicatorRole;
extern "C" NSString *const NSAccessibilityProgressIndicatorRole;
extern "C" NSString *const NSAccessibilityWindowRole;
extern "C" NSString *const NSAccessibilityDrawerRole;
extern "C" NSString *const NSAccessibilitySystemWideRole;
extern "C" NSString *const NSAccessibilityOutlineRole;
extern "C" NSString *const NSAccessibilityIncrementorRole;
extern "C" NSString *const NSAccessibilityBrowserRole;
extern "C" NSString *const NSAccessibilityComboBoxRole;
extern "C" NSString *const NSAccessibilitySplitGroupRole;
extern "C" NSString *const NSAccessibilitySplitterRole;
extern "C" NSString *const NSAccessibilityColorWellRole;
extern "C" NSString *const NSAccessibilityGrowAreaRole;
extern "C" NSString *const NSAccessibilitySheetRole;
extern "C" NSString *const NSAccessibilityHelpTagRole ;
extern "C" NSString *const NSAccessibilityMatteRole ;
extern "C" NSString *const NSAccessibilityRulerRole ;
extern "C" NSString *const NSAccessibilityRulerMarkerRole ;
extern "C" NSString *const NSAccessibilitySortButtonRole ;
extern "C" NSString *const NSAccessibilityLinkRole ;
extern "C" NSString *const NSAccessibilityDisclosureTriangleRole ;


extern "C" NSString *const NSAccessibilityUnknownSubrole;
extern "C" NSString *const NSAccessibilityCloseButtonSubrole;
extern "C" NSString *const NSAccessibilityZoomButtonSubrole;
extern "C" NSString *const NSAccessibilityMinimizeButtonSubrole;
extern "C" NSString *const NSAccessibilityToolbarButtonSubrole;
extern "C" NSString *const NSAccessibilityTableRowSubrole;
extern "C" NSString *const NSAccessibilityOutlineRowSubrole;
extern "C" NSString *const NSAccessibilitySecureTextFieldSubrole;
extern "C" NSString *const NSAccessibilityStandardWindowSubrole ;
extern "C" NSString *const NSAccessibilityDialogSubrole ;
extern "C" NSString *const NSAccessibilitySystemDialogSubrole ;
extern "C" NSString *const NSAccessibilityFloatingWindowSubrole ;
extern "C" NSString *const NSAccessibilitySystemFloatingWindowSubrole ;
extern "C" NSString *const NSAccessibilityIncrementArrowSubrole ;
extern "C" NSString *const NSAccessibilityDecrementArrowSubrole ;
extern "C" NSString *const NSAccessibilityIncrementPageSubrole ;
extern "C" NSString *const NSAccessibilityDecrementPageSubrole ;
extern "C" NSString *const NSAccessibilitySearchFieldSubrole ;
extern "C" NSString *const NSAccessibilityTextAttachmentSubrole ;
extern "C" NSString *const NSAccessibilityTextLinkSubrole ;
# 15 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSActionCell.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSCell.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSText.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSView.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSResponder.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSResponder.h" 3
@class NSArray, NSError, NSEvent, NSMenu, NSUndoManager, NSWindow;

@interface NSResponder : NSObject <NSCoding>
{

    id _nextResponder;
}

- (NSResponder *)nextResponder;
- (void)setNextResponder:(NSResponder *)aResponder;
- (BOOL)tryToPerform:(SEL)anAction with:(id)anObject;
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent;
- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType;
- (void)mouseDown:(NSEvent *)theEvent;
- (void)rightMouseDown:(NSEvent *)theEvent;
- (void)otherMouseDown:(NSEvent *)theEvent;
- (void)mouseUp:(NSEvent *)theEvent;
- (void)rightMouseUp:(NSEvent *)theEvent;
- (void)otherMouseUp:(NSEvent *)theEvent;
- (void)mouseMoved:(NSEvent *)theEvent;
- (void)mouseDragged:(NSEvent *)theEvent;
- (void)scrollWheel:(NSEvent *)theEvent;
- (void)rightMouseDragged:(NSEvent *)theEvent;
- (void)otherMouseDragged:(NSEvent *)theEvent;
- (void)mouseEntered:(NSEvent *)theEvent;
- (void)mouseExited:(NSEvent *)theEvent;
- (void)keyDown:(NSEvent *)theEvent;
- (void)keyUp:(NSEvent *)theEvent;
- (void)flagsChanged:(NSEvent *)theEvent;

- (void)tabletPoint:(NSEvent *)theEvent;
- (void)tabletProximity:(NSEvent *)theEvent;


- (void)cursorUpdate:(NSEvent *)event;

- (void)noResponderFor:(SEL)eventSelector;
- (BOOL)acceptsFirstResponder;
- (BOOL)becomeFirstResponder;
- (BOOL)resignFirstResponder;

- (void)interpretKeyEvents:(NSArray *)eventArray;
- (void)flushBufferedKeyEvents;

- (void)setMenu:(NSMenu *)menu;
- (NSMenu *)menu;

- (void)showContextHelp:(id)sender;

- (void)helpRequested:(NSEvent *)eventPtr;


- (BOOL)shouldBeTreatedAsInkEvent:(NSEvent *)theEvent;

@end

@interface NSResponder(NSKeyboardUI)
- (BOOL)performMnemonic:(NSString *)theString;
@end

@interface NSResponder (NSStandardKeyBindingMethods)





- (void)insertText:(id)insertString;


- (void)doCommandBySelector:(SEL)aSelector;






- (void)moveForward:(id)sender;
- (void)moveRight:(id)sender;
- (void)moveBackward:(id)sender;
- (void)moveLeft:(id)sender;
- (void)moveUp:(id)sender;
- (void)moveDown:(id)sender;
- (void)moveWordForward:(id)sender;
- (void)moveWordBackward:(id)sender;
- (void)moveToBeginningOfLine:(id)sender;
- (void)moveToEndOfLine:(id)sender;
- (void)moveToBeginningOfParagraph:(id)sender;
- (void)moveToEndOfParagraph:(id)sender;
- (void)moveToEndOfDocument:(id)sender;
- (void)moveToBeginningOfDocument:(id)sender;
- (void)pageDown:(id)sender;
- (void)pageUp:(id)sender;
- (void)centerSelectionInVisibleArea:(id)sender;

- (void)moveBackwardAndModifySelection:(id)sender;
- (void)moveForwardAndModifySelection:(id)sender;
- (void)moveWordForwardAndModifySelection:(id)sender;
- (void)moveWordBackwardAndModifySelection:(id)sender;
- (void)moveUpAndModifySelection:(id)sender;
- (void)moveDownAndModifySelection:(id)sender;


- (void)moveWordRight:(id)sender;
- (void)moveWordLeft:(id)sender;
- (void)moveRightAndModifySelection:(id)sender;
- (void)moveLeftAndModifySelection:(id)sender;
- (void)moveWordRightAndModifySelection:(id)sender;
- (void)moveWordLeftAndModifySelection:(id)sender;


- (void)scrollPageUp:(id)sender;
- (void)scrollPageDown:(id)sender;
- (void)scrollLineUp:(id)sender;
- (void)scrollLineDown:(id)sender;



- (void)transpose:(id)sender;
- (void)transposeWords:(id)sender;



- (void)selectAll:(id)sender;
- (void)selectParagraph:(id)sender;
- (void)selectLine:(id)sender;
- (void)selectWord:(id)sender;



- (void)indent:(id)sender;
- (void)insertTab:(id)sender;
- (void)insertBacktab:(id)sender;
- (void)insertNewline:(id)sender;
- (void)insertParagraphSeparator:(id)sender;
- (void)insertNewlineIgnoringFieldEditor:(id)sender;
- (void)insertTabIgnoringFieldEditor:(id)sender;

- (void)insertLineBreak:(id)sender;
- (void)insertContainerBreak:(id)sender;




- (void)changeCaseOfLetter:(id)sender;
- (void)uppercaseWord:(id)sender;
- (void)lowercaseWord:(id)sender;
- (void)capitalizeWord:(id)sender;



- (void)deleteForward:(id)sender;
- (void)deleteBackward:(id)sender;

- (void)deleteBackwardByDecomposingPreviousCharacter:(id)sender;

- (void)deleteWordForward:(id)sender;
- (void)deleteWordBackward:(id)sender;
- (void)deleteToBeginningOfLine:(id)sender;
- (void)deleteToEndOfLine:(id)sender;
- (void)deleteToBeginningOfParagraph:(id)sender;
- (void)deleteToEndOfParagraph:(id)sender;

- (void)yank:(id)sender;



- (void)complete:(id)sender;



- (void)setMark:(id)sender;
- (void)deleteToMark:(id)sender;
- (void)selectToMark:(id)sender;
- (void)swapWithMark:(id)sender;




- (void)cancelOperation:(id)sender;

@end

@interface NSResponder(NSUndoSupport)
- (NSUndoManager *)undoManager;
@end



@interface NSResponder(NSErrorPresentation)
# 223 "/System/Library/Frameworks/AppKit.framework/Headers/NSResponder.h" 3
- (void)presentError:(NSError *)error modalForWindow:(NSWindow *)window delegate:(id)delegate didPresentSelector:(SEL)didPresentSelector contextInfo:(void *)contextInfo;







- (BOOL)presentError:(NSError *)error;





- (NSError *)willPresentError:(NSError *)error;

@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSView.h" 2 3




# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAnimation.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSAnimation.h" 3
@class NSArray, NSGraphicsContext, NSMutableArray, NSString, NSTimer;

enum {
    NSAnimationEaseInOut,
    NSAnimationEaseIn,
    NSAnimationEaseOut,
    NSAnimationLinear
};
typedef NSUInteger NSAnimationCurve;

enum {
    NSAnimationBlocking,
    NSAnimationNonblocking,
    NSAnimationNonblockingThreaded
};
typedef NSUInteger NSAnimationBlockingMode;

typedef float NSAnimationProgress;

extern NSString* NSAnimationProgressMarkNotification;
extern NSString* NSAnimationProgressMark;

@interface NSAnimation : NSObject <NSCopying, NSCoding> {
  @private
    NSTimeInterval _duration;
    NSAnimationProgress _currentProgress;
    float _framesPerSecond;
    id _delegate;
    NSTimer* _timer;
    NSTimeInterval _startTime;
    NSMutableArray* _progressMarks;
    NSAnimation* _startAnimation;
    NSAnimation* _stopAnimation;
    int _nextProgressMark;
    struct __aFlags {
 unsigned int delegateAnimationShouldStart:1;
 unsigned int delegateAnimationDidStop:1;
 unsigned int delegateAnimationDidEnd:1;
 unsigned int delegateAnimationValueForProgress:1;
 unsigned int delegateAnimationDidReachProgressMark:1;
 unsigned int animating:1;
 unsigned int blocking:1;
 unsigned int reserved:25;
    } _aFlags;
    struct __aSettings {
 unsigned int animationCurve:8;
 unsigned int animationBlockingMode:2;
 unsigned int reserved:22;
    } _aSettings;
    NSInteger _reserved1;
    NSInteger _reserved2;
    NSInteger _reserved3;
    NSInteger _reserved4;
}

- (id)initWithDuration:(NSTimeInterval)duration animationCurve:(NSAnimationCurve)animationCurve;

- (void)startAnimation;
- (void)stopAnimation;
- (BOOL)isAnimating;

- (NSAnimationProgress)currentProgress;
- (void)setCurrentProgress:(NSAnimationProgress)progress;

- (void)setDuration:(NSTimeInterval)duration;
- (NSTimeInterval)duration;

- (NSAnimationBlockingMode)animationBlockingMode;
- (void)setAnimationBlockingMode:(NSAnimationBlockingMode)animationBlockingMode;

- (void)setFrameRate:(float)framesPerSecond;
- (float)frameRate;

- (void)setAnimationCurve:(NSAnimationCurve)curve;
- (NSAnimationCurve)animationCurve;

- (float)currentValue;

- (void)setDelegate:(id)delegate;
- (id)delegate;

- (NSArray*)progressMarks;
- (void)setProgressMarks:(NSArray*)progressMarks;

- (void)addProgressMark:(NSAnimationProgress)progressMark;
- (void)removeProgressMark:(NSAnimationProgress)progressMark;

- (void)startWhenAnimation:(NSAnimation*)animation reachesProgress:(NSAnimationProgress)startProgress;
- (void)stopWhenAnimation:(NSAnimation*)animation reachesProgress:(NSAnimationProgress)stopProgress;

- (void)clearStartAnimation;
- (void)clearStopAnimation;

- (NSArray*)runLoopModesForAnimating;

@end

@interface NSObject (NSAnimationDelegate)
- (BOOL)animationShouldStart:(NSAnimation*)animation;
- (void)animationDidStop:(NSAnimation*)animation;
- (void)animationDidEnd:(NSAnimation*)animation;
- (float)animation:(NSAnimation*)animation valueForProgress:(NSAnimationProgress)progress;
- (void)animation:(NSAnimation*)animation didReachProgressMark:(NSAnimationProgress)progress;
@end



extern "C" NSString* NSViewAnimationTargetKey ;
extern "C" NSString* NSViewAnimationStartFrameKey ;
extern "C" NSString* NSViewAnimationEndFrameKey ;
extern "C" NSString* NSViewAnimationEffectKey ;
extern "C" NSString* NSViewAnimationFadeInEffect ;
extern "C" NSString* NSViewAnimationFadeOutEffect ;

@interface NSViewAnimation : NSAnimation {
  @private
    NSArray* _viewAnimations;
    CFMutableDictionaryRef _viewAnimationInfo;
    CFMutableDictionaryRef _windowAnimationInfo;
    NSUInteger _reserved4a;
    NSUInteger _reserved4b;
    NSUInteger _reserved4c;
    struct __vaFlags {
 unsigned int reserved:32;
    } _vaFlags;
    NSUInteger _reserved5;
    NSUInteger _reserved6;
    NSUInteger _reserved7;
    NSUInteger _reserved8;
}

- (id)initWithViewAnimations:(NSArray*)viewAnimations;

- (NSArray*)viewAnimations;
- (void)setViewAnimations:(NSArray*)viewAnimations;

@end



@protocol NSAnimatablePropertyContainer





- (id)animator;



- (NSDictionary *)animations;
- (void)setAnimations:(NSDictionary *)dict;



- (id)animationForKey:(NSString *)key;
# 190 "/System/Library/Frameworks/AppKit.framework/Headers/NSAnimation.h" 3
+ (id)defaultAnimationForKey:(NSString *)key;

@end

extern "C" NSString *NSAnimationTriggerOrderIn ;
extern "C" NSString *NSAnimationTriggerOrderOut ;
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSView.h" 2 3

@class NSBitmapImageRep, NSCursor, NSGraphicsContext, NSImage, NSPasteboard, NSScrollView, NSWindow, NSAttributedString;

@class CIFilter, LKLayer, NSDictionary, NSScreen, NSShadow, NSTrackingArea;


enum {
    NSViewNotSizable = 0,
    NSViewMinXMargin = 1,
    NSViewWidthSizable = 2,
    NSViewMaxXMargin = 4,
    NSViewMinYMargin = 8,
    NSViewHeightSizable = 16,
    NSViewMaxYMargin = 32
};

enum {
    NSNoBorder = 0,
    NSLineBorder = 1,
    NSBezelBorder = 2,
    NSGrooveBorder = 3
};
typedef NSUInteger NSBorderType;

typedef struct __VFlags {

 unsigned int rotatedFromBase:1;
 unsigned int rotatedOrScaledFromBase:1;
 unsigned int autosizing:6;
 unsigned int autoresizeSubviews:1;
 unsigned int wantsGState:1;
 unsigned int needsDisplay:1;
 unsigned int validGState:1;
 unsigned int newGState:1;
 unsigned int noVerticalAutosizing:1;
 unsigned int frameChangeNotesSuspended:1;
 unsigned int needsFrameChangeNote:1;
 unsigned int focusChangeNotesSuspended:1;
 unsigned int boundsChangeNotesSuspended:1;
 unsigned int needsBoundsChangeNote:1;
 unsigned int removingWithoutInvalidation:1;
        unsigned int interfaceStyle0:1;
 unsigned int needsDisplayForBounds:1;
 unsigned int specialArchiving:1;
 unsigned int interfaceStyle1:1;
 unsigned int retainCount:6;
 unsigned int retainCountOverMax:1;
 unsigned int aboutToResize:1;
# 86 "/System/Library/Frameworks/AppKit.framework/Headers/NSView.h" 3
} _VFlags;

typedef NSInteger NSTrackingRectTag;
typedef NSInteger NSToolTipTag;

@class _NSViewAuxiliary;

@interface NSView : NSResponder

<NSAnimatablePropertyContainer>

{

    NSRect _frame;
    NSRect _bounds;
    id _superview;
    id _subviews;
    NSWindow *_window;
    id _gState;
    id _frameMatrix;
    id _drawMatrix;
    id _dragTypes;
    _NSViewAuxiliary *_viewAuxiliary;
    _VFlags _vFlags;
    struct __VFlags2 {
 unsigned int nextKeyViewRefCount:14;
 unsigned int previousKeyViewRefCount:14;
 unsigned int isVisibleRect:1;
 unsigned int hasToolTip:1;
 unsigned int needsRealLockFocus:1;
 unsigned int menuWasSet:1;
    } _vFlags2;
}


- (id)initWithFrame:(NSRect)frameRect;

- (NSWindow *)window;
- (NSView *)superview;
- (NSArray *)subviews;
- (BOOL)isDescendantOf:(NSView *)aView;
- (NSView *)ancestorSharedWithView:(NSView *)aView;
- (NSView *)opaqueAncestor;

- (void)setHidden:(BOOL)flag;
- (BOOL)isHidden;
- (BOOL)isHiddenOrHasHiddenAncestor;

- (void)getRectsBeingDrawn:(const NSRect **)rects count:(NSInteger *)count;
- (BOOL)needsToDrawRect:(NSRect)aRect;
- (BOOL)wantsDefaultClipping;

- (void)addSubview:(NSView *)aView;
- (void)addSubview:(NSView *)aView positioned:(NSWindowOrderingMode)place relativeTo:(NSView *)otherView;
- (void)sortSubviewsUsingFunction:(NSComparisonResult (*)(id, id, void *))compare context:(void *)context;
- (void)viewWillMoveToWindow:(NSWindow *)newWindow;
- (void)viewDidMoveToWindow;
- (void)viewWillMoveToSuperview:(NSView *)newSuperview;
- (void)viewDidMoveToSuperview;
- (void)didAddSubview:(NSView *)subview;
- (void)willRemoveSubview:(NSView *)subview;
- (void)removeFromSuperview;
- (void)replaceSubview:(NSView *)oldView with:(NSView *)newView;
- (void)removeFromSuperviewWithoutNeedingDisplay;

- (void)setPostsFrameChangedNotifications:(BOOL)flag;
- (BOOL)postsFrameChangedNotifications;
- (void)resizeSubviewsWithOldSize:(NSSize)oldSize;
- (void)resizeWithOldSuperviewSize:(NSSize)oldSize;
- (void)setAutoresizesSubviews:(BOOL)flag;
- (BOOL)autoresizesSubviews;
- (void)setAutoresizingMask:(NSUInteger)mask;
- (NSUInteger)autoresizingMask;

- (void)setFrameOrigin:(NSPoint)newOrigin;
- (void)setFrameSize:(NSSize)newSize;
- (void)setFrame:(NSRect)frameRect;
- (NSRect)frame;
- (void)setFrameRotation:(CGFloat)angle;
- (CGFloat)frameRotation;

- (void)setFrameCenterRotation:(CGFloat)angle;
- (CGFloat)frameCenterRotation;


- (void)setBoundsOrigin:(NSPoint)newOrigin;
- (void)setBoundsSize:(NSSize)newSize;
- (void)setBoundsRotation:(CGFloat)angle;
- (CGFloat)boundsRotation;
- (void)translateOriginToPoint:(NSPoint)translation;
- (void)scaleUnitSquareToSize:(NSSize)newUnitSize;
- (void)rotateByAngle:(CGFloat)angle;
- (void)setBounds:(NSRect)aRect;
- (NSRect)bounds;

- (BOOL)isFlipped;
- (BOOL)isRotatedFromBase;
- (BOOL)isRotatedOrScaledFromBase;
- (BOOL)isOpaque;

- (NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView;
- (NSPoint)convertPoint:(NSPoint)aPoint toView:(NSView *)aView;
- (NSSize)convertSize:(NSSize)aSize fromView:(NSView *)aView;
- (NSSize)convertSize:(NSSize)aSize toView:(NSView *)aView;
- (NSRect)convertRect:(NSRect)aRect fromView:(NSView *)aView;
- (NSRect)convertRect:(NSRect)aRect toView:(NSView *)aView;
- (NSRect)centerScanRect:(NSRect)aRect;

- (BOOL)canDraw;
- (void)setNeedsDisplay:(BOOL)flag;
- (void)setNeedsDisplayInRect:(NSRect)invalidRect;
- (BOOL)needsDisplay;
- (void)lockFocus;
- (void)unlockFocus;
- (BOOL)lockFocusIfCanDraw;

- (BOOL)lockFocusIfCanDrawInContext:(NSGraphicsContext *)context;

+ (NSView *)focusView;
- (NSRect)visibleRect;

- (void)display;
- (void)displayIfNeeded;
- (void)displayIfNeededIgnoringOpacity;
- (void)displayRect:(NSRect)rect;
- (void)displayIfNeededInRect:(NSRect)rect;
- (void)displayRectIgnoringOpacity:(NSRect)rect;
- (void)displayIfNeededInRectIgnoringOpacity:(NSRect)rect;
- (void)drawRect:(NSRect)rect;

- (void)displayRectIgnoringOpacity:(NSRect)aRect inContext:(NSGraphicsContext *)context;

- (NSBitmapImageRep *)bitmapImageRepForCachingDisplayInRect:(NSRect)rect;
- (void)cacheDisplayInRect:(NSRect)rect toBitmapImageRep:(NSBitmapImageRep *)bitmapImageRep;


- (NSInteger)gState;
- (void)allocateGState;
- (void)releaseGState;
- (void)setUpGState;
- (void)renewGState;

- (void)scrollPoint:(NSPoint)aPoint;
- (BOOL)scrollRectToVisible:(NSRect)aRect;
- (BOOL)autoscroll:(NSEvent *)theEvent;
- (NSRect)adjustScroll:(NSRect)newVisible;
- (void)scrollRect:(NSRect)aRect by:(NSSize)delta;

- (NSView *)hitTest:(NSPoint)aPoint;
- (BOOL)mouse:(NSPoint)aPoint inRect:(NSRect)aRect;
- (id)viewWithTag:(NSInteger)aTag;
- (NSInteger)tag;
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent;
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent;
- (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent *)theEvent;
- (BOOL)needsPanelToBecomeKey;

- (BOOL)mouseDownCanMoveWindow;


- (void)addCursorRect:(NSRect)aRect cursor:(NSCursor *)anObj;
- (void)removeCursorRect:(NSRect)aRect cursor:(NSCursor *)anObj;
- (void)discardCursorRects;
- (void)resetCursorRects;

- (NSTrackingRectTag)addTrackingRect:(NSRect)aRect owner:(id)anObject userData:(void *)data assumeInside:(BOOL)flag;
- (void)removeTrackingRect:(NSTrackingRectTag)tag;


- (void)setWantsLayer:(BOOL)flag;
- (BOOL)wantsLayer;

- (void)setLayer:(LKLayer *)newLayer;
- (LKLayer *)layer;

- (void)setAlphaValue:(CGFloat)viewAlpha;
- (CGFloat)alphaValue;

- (void)setBackgroundFilters:(NSArray *)filters;
- (NSArray *)backgroundFilters;

- (void)setCompositingFilter:(CIFilter *)filter;
- (CIFilter *)compositingFilter;

- (void)setContentFilters:(NSArray *)filters;
- (NSArray *)contentFilters;

- (void)setShadow:(NSShadow *)shadow;
- (NSShadow *)shadow;



- (void)addTrackingArea:(NSTrackingArea *)trackingArea;
- (void)removeTrackingArea:(NSTrackingArea *)trackingArea;
- (NSArray *)trackingAreas;



- (void)updateTrackingAreas;



- (BOOL)shouldDrawColor;

- (void)setPostsBoundsChangedNotifications:(BOOL)flag;
- (BOOL)postsBoundsChangedNotifications;

- (NSScrollView *)enclosingScrollView;

- (NSMenu *)menuForEvent:(NSEvent *)event;
+ (NSMenu *)defaultMenu;

- (void)setToolTip:(NSString *)string;
- (NSString *)toolTip;
- (NSToolTipTag)addToolTipRect:(NSRect)aRect owner:(id)anObject userData:(void *)data;
- (void)removeToolTip:(NSToolTipTag)tag;
- (void)removeAllToolTips;



- (void)viewWillStartLiveResize;

- (void)viewDidEndLiveResize;

- (BOOL)inLiveResize;


- (BOOL)preservesContentDuringLiveResize;

- (NSRect)rectPreservedDuringLiveResize;

- (void)getRectsExposedDuringLiveResize:(NSRect[4])exposedRects count:(NSInteger *)count;

@end

@interface NSObject(NSToolTipOwner)
- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)data;
@end

@interface NSView(NSKeyboardUI)
- (BOOL)performMnemonic:(NSString *)theString;
- (void)setNextKeyView:(NSView *)next;
- (NSView *)nextKeyView;
- (NSView *)previousKeyView;
- (NSView *)nextValidKeyView;
- (NSView *)previousValidKeyView;


- (BOOL)canBecomeKeyView;


- (void)setKeyboardFocusRingNeedsDisplayInRect:(NSRect)rect;


- (void)setFocusRingType:(NSFocusRingType)focusRingType;
- (NSFocusRingType)focusRingType;
+ (NSFocusRingType)defaultFocusRingType;

@end

@interface NSView(NSPrinting)


- (void)writeEPSInsideRect:(NSRect)rect toPasteboard:(NSPasteboard *)pasteboard;
- (NSData *)dataWithEPSInsideRect:(NSRect)rect;
- (void)writePDFInsideRect:(NSRect)rect toPasteboard:(NSPasteboard *)pasteboard;
- (NSData *)dataWithPDFInsideRect:(NSRect)rect;


- (void)print:(id)sender;


- (BOOL)knowsPageRange:(NSRangePointer)range;
- (CGFloat)heightAdjustLimit;
- (CGFloat)widthAdjustLimit;
- (void)adjustPageWidthNew:(CGFloat *)newRight left:(CGFloat)oldLeft right:(CGFloat)oldRight limit:(CGFloat)rightLimit;
- (void)adjustPageHeightNew:(CGFloat *)newBottom top:(CGFloat)oldTop bottom:(CGFloat)oldBottom limit:(CGFloat)bottomLimit;
- (NSRect)rectForPage:(NSInteger)page;
- (NSPoint)locationOfPrintRect:(NSRect)aRect;
- (void)drawPageBorderWithSize:(NSSize)borderSize;

- (NSAttributedString *)pageHeader;
- (NSAttributedString *)pageFooter;



- (void)drawSheetBorderWithSize:(NSSize)borderSize;



- (NSString *)printJobTitle;
- (void)beginDocument;
- (void)endDocument;

- (void)beginPageInRect:(NSRect)aRect atPlacement:(NSPoint)location;
- (void)endPage;
@end


@interface NSView(NSDrag)
- (void)dragImage:(NSImage *)anImage at:(NSPoint)viewLocation offset:(NSSize)initialOffset event:(NSEvent *)event pasteboard:(NSPasteboard *)pboard source:(id)sourceObj slideBack:(BOOL)slideFlag;


- (NSArray *)registeredDraggedTypes;

- (void)registerForDraggedTypes:(NSArray *)newTypes;
- (void)unregisterDraggedTypes;

- (BOOL)dragFile:(NSString *)filename fromRect:(NSRect)rect slideBack:(BOOL)aFlag event:(NSEvent *)event;

- (BOOL)dragPromisedFilesOfTypes:(NSArray *)typeArray fromRect:(NSRect)rect source:(id)sourceObject slideBack:(BOOL)aFlag event:(NSEvent *)event;

@end


@interface NSView (NSFullScreenMode)
- (BOOL)enterFullScreenMode:(NSScreen *)screen withOptions:(NSDictionary *)options;
- (void)exitFullScreenModeWithOptions:(NSDictionary *)options;
- (BOOL)isInFullScreenMode;
@end


extern "C" NSString * const NSFullScreenModeAnimation;
extern "C" NSString * const NSFullScreenModeAllScreens;
extern "C" NSString * const NSFullScreenModeSetting;
extern "C" NSString * const NSFullScreenModeWindowLevel;




extern "C" NSString *NSViewFrameDidChangeNotification;
extern "C" NSString *NSViewFocusDidChangeNotification;
extern "C" NSString *NSViewBoundsDidChangeNotification;

extern "C" NSString *NSViewGlobalFrameDidChangeNotification;


extern "C" NSString *NSViewDidUpdateTrackingAreasNotification ;
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSText.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpellProtocol.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpellProtocol.h" 3
@protocol NSChangeSpelling
- (void)changeSpelling:(id)sender;
@end





@protocol NSIgnoreMisspelledWords
- (void)ignoreSpelling:(id)sender;
@end
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSText.h" 2 3

@class NSColor, NSFont, NSNotification;


enum {
    NSEnterCharacter = 0x0003,
    NSBackspaceCharacter = 0x0008,
    NSTabCharacter = 0x0009,
    NSNewlineCharacter = 0x000a,
    NSFormFeedCharacter = 0x000c,
    NSCarriageReturnCharacter = 0x000d,
    NSBackTabCharacter = 0x0019,
    NSDeleteCharacter = 0x007f,
    NSLineSeparatorCharacter = 0x2028,
    NSParagraphSeparatorCharacter = 0x2029
};


enum {
    NSLeftTextAlignment = 0,
    NSRightTextAlignment = 1,
    NSCenterTextAlignment = 2,
    NSJustifiedTextAlignment = 3,
    NSNaturalTextAlignment = 4
};
typedef NSUInteger NSTextAlignment;


enum {

    NSWritingDirectionNatural = -1,

    NSWritingDirectionLeftToRight = 0,
    NSWritingDirectionRightToLeft = 1
};
typedef NSInteger NSWritingDirection;



enum {
    NSIllegalTextMovement = 0,
    NSReturnTextMovement = 0x10,
    NSTabTextMovement = 0x11,
    NSBacktabTextMovement = 0x12,
    NSLeftTextMovement = 0x13,
    NSRightTextMovement = 0x14,
    NSUpTextMovement = 0x15,
    NSDownTextMovement = 0x16

    ,
    NSCancelTextMovement = 0x17,
    NSOtherTextMovement = 0

};

@interface NSText : NSView <NSChangeSpelling, NSIgnoreMisspelledWords> {

    id _ivars;
}

- (NSString *)string;
- (void)setString:(NSString *)string;

- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
- (void)replaceCharactersInRange:(NSRange)range withRTF:(NSData *)rtfData;
- (void)replaceCharactersInRange:(NSRange)range withRTFD:(NSData *)rtfdData;

- (NSData *)RTFFromRange:(NSRange)range;
- (NSData *)RTFDFromRange:(NSRange)range;

- (BOOL)writeRTFDToFile:(NSString *)path atomically:(BOOL)flag;
- (BOOL)readRTFDFromFile:(NSString *)path;

- (id)delegate;
- (void)setDelegate:(id)anObject;

- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;
- (BOOL)isSelectable;
- (void)setSelectable:(BOOL)flag;
- (BOOL)isRichText;
- (void)setRichText:(BOOL)flag;
- (BOOL)importsGraphics;
- (void)setImportsGraphics:(BOOL)flag;
- (BOOL)isFieldEditor;
- (void)setFieldEditor:(BOOL)flag;
- (BOOL)usesFontPanel;
- (void)setUsesFontPanel:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setDrawsBackground:(BOOL)flag;
- (NSColor *)backgroundColor;
- (void)setBackgroundColor:(NSColor *)color;

- (BOOL)isRulerVisible;

- (NSRange)selectedRange;
- (void)setSelectedRange:(NSRange)range;

- (void)scrollRangeToVisible:(NSRange)range;

- (void)setFont:(NSFont *)obj;
- (NSFont *)font;
- (void)setTextColor:(NSColor *)color;
- (NSColor *)textColor;
- (NSTextAlignment)alignment;
- (void)setAlignment:(NSTextAlignment)mode;

- (NSWritingDirection)baseWritingDirection;
- (void)setBaseWritingDirection:(NSWritingDirection)writingDirection;


- (void)setTextColor:(NSColor *)color range:(NSRange)range;
- (void)setFont:(NSFont *)font range:(NSRange)range;

- (NSSize)maxSize;
- (void)setMaxSize:(NSSize)newMaxSize;
- (NSSize)minSize;
- (void)setMinSize:(NSSize)newMinSize;

- (BOOL)isHorizontallyResizable;
- (void)setHorizontallyResizable:(BOOL)flag;
- (BOOL)isVerticallyResizable;
- (void)setVerticallyResizable:(BOOL)flag;

- (void)sizeToFit;

- (void)copy:(id)sender;
- (void)copyFont:(id)sender;
- (void)copyRuler:(id)sender;
- (void)cut:(id)sender;
- (void)delete:(id)sender;
- (void)paste:(id)sender;
- (void)pasteFont:(id)sender;
- (void)pasteRuler:(id)sender;
- (void)selectAll:(id)sender;
- (void)changeFont:(id)sender;
- (void)alignLeft:(id)sender;
- (void)alignRight:(id)sender;
- (void)alignCenter:(id)sender;
- (void)subscript:(id)sender;
- (void)superscript:(id)sender;
- (void)underline:(id)sender;
- (void)unscript:(id)sender;
- (void)showGuessPanel:(id)sender;
- (void)checkSpelling:(id)sender;
- (void)toggleRuler:(id)sender;

@end

@interface NSObject(NSTextDelegate)
- (BOOL)textShouldBeginEditing:(NSText *)textObject;
- (BOOL)textShouldEndEditing:(NSText *)textObject;
- (void)textDidBeginEditing:(NSNotification *)notification;
- (void)textDidEndEditing:(NSNotification *)notification;
- (void)textDidChange:(NSNotification *)notification;
@end


extern "C" NSString *NSTextDidBeginEditingNotification;
extern "C" NSString *NSTextDidEndEditingNotification;
extern "C" NSString *NSTextDidChangeNotification;
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSCell.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSParagraphStyle.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSParagraphStyle.h" 3
enum {
    NSLeftTabStopType = 0,
    NSRightTabStopType,
    NSCenterTabStopType,
    NSDecimalTabStopType
};
typedef NSUInteger NSTextTabType;

enum {
    NSLineBreakByWordWrapping = 0,
    NSLineBreakByCharWrapping,
    NSLineBreakByClipping,
    NSLineBreakByTruncatingHead,
    NSLineBreakByTruncatingTail,
    NSLineBreakByTruncatingMiddle
};
typedef NSUInteger NSLineBreakMode;




extern "C" NSString *NSTabColumnTerminatorsAttributeName ;


@interface NSTextTab : NSObject <NSCopying, NSCoding> {

    struct {
 NSTextAlignment alignment:4;
        unsigned int refCount:24;
        unsigned int unused:4;



    } _flags;
    CGFloat _location;
    id _reserved;
}
# 67 "/System/Library/Frameworks/AppKit.framework/Headers/NSParagraphStyle.h" 3
- (id)initWithTextAlignment:(NSTextAlignment)alignment location:(CGFloat)loc options:(NSDictionary *)options;

- (NSTextAlignment)alignment;
- (NSDictionary *)options;

- (id)initWithType:(NSTextTabType)type location:(CGFloat)loc;
- (CGFloat)location;
- (NSTextTabType)tabStopType;
@end

@interface NSParagraphStyle : NSObject <NSCopying, NSMutableCopying, NSCoding> {

    CGFloat _lineSpacing;
    CGFloat _paragraphSpacing;
    CGFloat _headIndent;
    CGFloat _tailIndent;
    CGFloat _firstLineHeadIndent;
    CGFloat _minimumLineHeight;
    CGFloat _maximumLineHeight;
    NSArray *_tabStops;
    struct {
 NSTextAlignment alignment:4;
        NSLineBreakMode lineBreakMode:4;
        unsigned int tabStopsIsMutable:1;
        unsigned int isNaturalDirection:1;
        unsigned int rightToLeftDirection:1;
        unsigned int fixedMultiple:2;
        unsigned int refCount:19;



    } _flags;
    CGFloat _defaultTabInterval;
    id _extraData;
}

+ (NSParagraphStyle *)defaultParagraphStyle;


+ (NSWritingDirection)defaultWritingDirectionForLanguage:(NSString *)languageName;


- (CGFloat)lineSpacing;
- (CGFloat)paragraphSpacing;
- (NSTextAlignment)alignment;



- (CGFloat)headIndent;
- (CGFloat)tailIndent;
- (CGFloat)firstLineHeadIndent;
- (NSArray *)tabStops;

- (CGFloat)minimumLineHeight;
- (CGFloat)maximumLineHeight;

- (NSLineBreakMode)lineBreakMode;


- (NSWritingDirection)baseWritingDirection;



- (CGFloat)lineHeightMultiple;
- (CGFloat)paragraphSpacingBefore;
- (CGFloat)defaultTabInterval;



- (NSArray *)textBlocks;
- (NSArray *)textLists;



- (float)hyphenationFactor;



- (float)tighteningFactorForTruncation;


- (NSInteger)headerLevel;


@end

@interface NSMutableParagraphStyle : NSParagraphStyle

- (void)setLineSpacing:(CGFloat)aFloat;
- (void)setParagraphSpacing:(CGFloat)aFloat;
- (void)setAlignment:(NSTextAlignment)alignment;
- (void)setFirstLineHeadIndent:(CGFloat)aFloat;
- (void)setHeadIndent:(CGFloat)aFloat;
- (void)setTailIndent:(CGFloat)aFloat;
- (void)setLineBreakMode:(NSLineBreakMode)mode;
- (void)setMinimumLineHeight:(CGFloat)aFloat;
- (void)setMaximumLineHeight:(CGFloat)aFloat;
- (void)addTabStop:(NSTextTab *)anObject;
- (void)removeTabStop:(NSTextTab *)anObject;
- (void)setTabStops:(NSArray *)array;
- (void)setParagraphStyle:(NSParagraphStyle *)obj;

- (void)setBaseWritingDirection:(NSWritingDirection)writingDirection;


- (void)setLineHeightMultiple:(CGFloat)aFloat;
- (void)setParagraphSpacingBefore:(CGFloat)aFloat;
- (void)setDefaultTabInterval:(CGFloat)aFloat;


- (void)setTextBlocks:(NSArray *)array;
- (void)setTextLists:(NSArray *)array;
- (void)setHyphenationFactor:(float)aFactor;
- (void)setTighteningFactorForTruncation:(float)aFactor;
- (void)setHeaderLevel:(NSInteger)level;

@end
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSCell.h" 2 3

@class NSAttributedString, NSEvent, NSFont, NSFormatter, NSImage, NSMenu, NSText, NSView;

enum {
    NSAnyType = 0,
    NSIntType = 1,
    NSPositiveIntType = 2,
    NSFloatType = 3,
    NSPositiveFloatType = 4,
    NSDoubleType = 6,
    NSPositiveDoubleType = 7
};

enum {
    NSNullCellType = 0,
    NSTextCellType = 1,
    NSImageCellType = 2
};
typedef NSUInteger NSCellType;

enum {
    NSCellDisabled = 0,
    NSCellState = 1,
    NSPushInCell = 2,
    NSCellEditable = 3,
    NSChangeGrayCell = 4,
    NSCellHighlighted = 5,
    NSCellLightsByContents = 6,
    NSCellLightsByGray = 7,
    NSChangeBackgroundCell = 8,
    NSCellLightsByBackground = 9,
    NSCellIsBordered = 10,
    NSCellHasOverlappingImage = 11,
    NSCellHasImageHorizontal = 12,
    NSCellHasImageOnLeftOrBottom = 13,
    NSCellChangesContents = 14,
    NSCellIsInsetButton = 15,
    NSCellAllowsMixedState = 16
};
typedef NSUInteger NSCellAttribute;

enum {
    NSNoImage = 0,
    NSImageOnly = 1,
    NSImageLeft = 2,
    NSImageRight = 3,
    NSImageBelow = 4,
    NSImageAbove = 5,
    NSImageOverlaps = 6
};
typedef NSUInteger NSCellImagePosition;

enum {
    NSScaleProportionally = 0,
    NSScaleToFit,
    NSScaleNone
};


enum {
    NSImageScaleProportionallyDown = 0,
    NSImageScaleAxesIndependently,
    NSImageScaleNone,
    NSImageScaleProportionallyUpOrDown
};

typedef NSUInteger NSImageScaling;

enum {
    NSMixedState = -1,
    NSOffState = 0,
    NSOnState = 1
};
typedef NSInteger NSCellStateValue;



enum {
    NSNoCellMask = 0,
    NSContentsCellMask = 1,
    NSPushInCellMask = 2,
    NSChangeGrayCellMask = 4,
    NSChangeBackgroundCellMask = 8
};

enum {
    NSDefaultControlTint = 0,

    NSBlueControlTint = 1,
    NSGraphiteControlTint = 6,

    NSClearControlTint = 7
};
typedef NSUInteger NSControlTint;

enum {
    NSRegularControlSize,
    NSSmallControlSize

    , NSMiniControlSize

};
typedef NSUInteger NSControlSize;

typedef struct __CFlags {
    unsigned int state:1;
    unsigned int highlighted:1;
    unsigned int disabled:1;
    unsigned int editable:1;
    NSCellType type:2;
    unsigned int vCentered:1;
    unsigned int hCentered:1;
    unsigned int bordered:1;
    unsigned int bezeled:1;
    unsigned int selectable:1;
    unsigned int scrollable:1;
    unsigned int continuous:1;
    unsigned int actOnMouseDown:1;
    unsigned int isLeaf:1;
    unsigned int invalidObjectValue:1;
    unsigned int invalidFont:1;
    NSLineBreakMode lineBreakMode:3;
    unsigned int reserved1:3;
    unsigned int actOnMouseDragged:1;
    unsigned int isLoaded:1;
    unsigned int reserved2:1;
    unsigned int dontActOnMouseUp:1;
    unsigned int isWhite:1;
    unsigned int useUserKeyEquivalent:1;
    unsigned int showsFirstResponder:1;
    unsigned int focusRingType:2;
    unsigned int wasSelectable:1;
    unsigned int hasInvalidObject:1;
    unsigned int allowsEditingTextAttributes:1;
    unsigned int importsGraphics:1;
    NSTextAlignment alignment:3;
    unsigned int reserved:8;
    unsigned int refusesFirstResponder:1;
    unsigned int needsHighlightedText:1;
    unsigned int dontAllowsUndo:1;
    unsigned int currentlyEditing:1;
    unsigned int allowsMixedState:1;
    unsigned int inMixedState:1;
    unsigned int sendsActionOnEndEditing:1;
    unsigned int inSendAction:1;
    unsigned int menuWasSet:1;
    unsigned int controlTint:3;
    unsigned int controlSize:2;
    unsigned int branchImageDisabled:1;
    unsigned int drawingInRevealover:1;
    unsigned int needsHighlightedTextHint:1;
} _CFlags;



@interface NSCell : NSObject <NSCopying, NSCoding>
{

    id _contents;
    _CFlags _cFlags;
@private


    id _support;
}


+ (BOOL)prefersTrackingUntilMouseUp;


- (id)initTextCell:(NSString *)aString;
- (id)initImageCell:(NSImage *)image;

- (NSView *)controlView;

- (void)setControlView:(NSView*)view;

- (NSCellType)type;
- (void)setType:(NSCellType)aType;
- (NSInteger)state;
- (void)setState:(NSInteger)value;
- (id)target;
- (void)setTarget:(id)anObject;
- (SEL)action;
- (void)setAction:(SEL)aSelector;
- (NSInteger)tag;
- (void)setTag:(NSInteger)anInt;
- (NSString*)title;
- (void)setTitle:(NSString*)aString;
- (BOOL)isOpaque;
- (BOOL)isEnabled;
- (void)setEnabled:(BOOL)flag;
- (NSInteger)sendActionOn:(NSInteger)mask;
- (BOOL)isContinuous;
- (void)setContinuous:(BOOL)flag;
- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;
- (BOOL)isSelectable;
- (void)setSelectable:(BOOL)flag;
- (BOOL)isBordered;
- (void)setBordered:(BOOL)flag;
- (BOOL)isBezeled;
- (void)setBezeled:(BOOL)flag;
- (BOOL)isScrollable;
- (void)setScrollable:(BOOL)flag;
- (BOOL)isHighlighted;
- (void)setHighlighted:(BOOL)flag;
- (NSTextAlignment)alignment;
- (void)setAlignment:(NSTextAlignment)mode;
- (BOOL)wraps;
- (void)setWraps:(BOOL)flag;
- (NSFont *)font;
- (void)setFont:(NSFont *)fontObj;
- (NSInteger)entryType;
- (void)setEntryType:(NSInteger)aType;
- (BOOL)isEntryAcceptable:(NSString *)aString;
- (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits;
- (NSString *)keyEquivalent;
- (void)setFormatter:(NSFormatter *)newFormatter;
- (id)formatter;
- (id)objectValue;
- (void)setObjectValue:(id <NSCopying>)obj;
- (BOOL)hasValidObjectValue;
- (NSString *)stringValue;
- (void)setStringValue:(NSString *)aString;
- (NSComparisonResult)compare:(id)otherCell;
- (int)intValue;
- (void)setIntValue:(int)anInt;
- (float)floatValue;
- (void)setFloatValue:(float)aFloat;
- (double)doubleValue;
- (void)setDoubleValue:(double)aDouble;
- (void)takeIntValueFrom:(id)sender;
- (void)takeFloatValueFrom:(id)sender;
- (void)takeDoubleValueFrom:(id)sender;
- (void)takeStringValueFrom:(id)sender;
- (void)takeObjectValueFrom:(id)sender;
- (NSImage *)image;
- (void)setImage:(NSImage *)image;
- (void)setControlTint:(NSControlTint)controlTint;
- (NSControlTint)controlTint;
- (void)setControlSize:(NSControlSize)size;
- (NSControlSize)controlSize;
- (id)representedObject;
- (void)setRepresentedObject:(id)anObject;
- (NSInteger)cellAttribute:(NSCellAttribute)aParameter;
- (void)setCellAttribute:(NSCellAttribute)aParameter to:(NSInteger)value;
- (NSRect)imageRectForBounds:(NSRect)theRect;
- (NSRect)titleRectForBounds:(NSRect)theRect;
- (NSRect)drawingRectForBounds:(NSRect)theRect;
- (NSSize)cellSize;
- (NSSize)cellSizeForBounds:(NSRect)aRect;
- (NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)calcDrawInfo:(NSRect)aRect;
- (NSText *)setUpFieldEditorAttributes:(NSText *)textObj;
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (NSInteger)mouseDownFlags;
- (void)getPeriodicDelay:(float *)delay interval:(float *)interval;
- (BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView;
- (BOOL)continueTracking:(NSPoint)lastPoint at:(NSPoint)currentPoint inView:(NSView *)controlView;
- (void)stopTracking:(NSPoint)lastPoint at:(NSPoint)stopPoint inView:(NSView *)controlView mouseIsUp:(BOOL)flag;
- (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView untilMouseUp:(BOOL)flag;
- (void)editWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject event:(NSEvent *)theEvent;
- (void)selectWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject start:(NSInteger)selStart length:(NSInteger)selLength;
- (void)endEditing:(NSText *)textObj;
- (void)resetCursorRect:(NSRect)cellFrame inView:(NSView *)controlView;

- (void)setMenu:(NSMenu *)aMenu;
- (NSMenu *)menu;
- (NSMenu *)menuForEvent:(NSEvent *)event inRect:(NSRect)cellFrame ofView:(NSView *)view;
+ (NSMenu *)defaultMenu;

- (void)setSendsActionOnEndEditing:(BOOL)flag;
- (BOOL)sendsActionOnEndEditing;


- (NSWritingDirection)baseWritingDirection;
- (void)setBaseWritingDirection:(NSWritingDirection)writingDirection;

- (void)setLineBreakMode:(NSLineBreakMode)mode;
- (NSLineBreakMode)lineBreakMode;

- (void)setAllowsUndo:(BOOL)allowsUndo;
- (BOOL)allowsUndo;



- (NSInteger)integerValue;
- (void)setIntegerValue:(NSInteger)anInteger;
- (void)takeIntegerValueFrom:(id)sender;


@end

@interface NSCell(NSKeyboardUI)
- (void)setRefusesFirstResponder:(BOOL)flag;
- (BOOL)refusesFirstResponder;
- (BOOL)acceptsFirstResponder;
- (void)setShowsFirstResponder:(BOOL)showFR;
- (BOOL)showsFirstResponder;
- (void)setMnemonicLocation:(NSUInteger)location;
- (NSUInteger)mnemonicLocation;
- (NSString *)mnemonic;
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;
- (void)performClick:(id)sender;


- (void)setFocusRingType:(NSFocusRingType)focusRingType;
- (NSFocusRingType)focusRingType;
+ (NSFocusRingType)defaultFocusRingType;


- (BOOL)wantsNotificationForMarkedText;

@end

@interface NSCell(NSCellAttributedStringMethods)
- (NSAttributedString *)attributedStringValue;
- (void)setAttributedStringValue:(NSAttributedString *)obj;

- (BOOL)allowsEditingTextAttributes;
- (void)setAllowsEditingTextAttributes:(BOOL)flag;
- (BOOL)importsGraphics;
- (void)setImportsGraphics:(BOOL)flag;
@end

@interface NSCell(NSCellMixedState)
- (void)setAllowsMixedState:(BOOL)flag;
- (BOOL)allowsMixedState;
- (NSInteger)nextState;
- (void)setNextState;
@end

extern "C" NSString *NSControlTintDidChangeNotification;





enum {

    NSCellHitNone = 0,

    NSCellHitContentArea = 1 << 0,

    NSCellHitEditableTextArea = 1 << 1,

    NSCellHitTrackableArea = 1 << 2,
};

@interface NSCell(NSCellHitTest)
# 382 "/System/Library/Frameworks/AppKit.framework/Headers/NSCell.h" 3
- (NSUInteger)hitTestForEvent:(NSEvent *)event inRect:(NSRect)cellFrame ofView:(NSView *)controlView;
@end

@interface NSCell(NSCellExpansion)


- (NSRect)expansionFrameWithFrame:(NSRect)cellFrame inView:(NSView *)view;



- (void)drawWithExpansionFrame:(NSRect)cellFrame inView:(NSView *)view;
@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSActionCell.h" 2 3

@interface NSActionCell : NSCell
{

    NSInteger _tag;
    id _target;
    SEL _action;
    id _controlView;
}

- (NSView *)controlView;

- (void)setControlView:(NSView*)view;

- (void)setFont:(NSFont *)fontObj;
- (void)setAlignment:(NSTextAlignment)mode;
- (void)setBordered:(BOOL)flag;
- (void)setBezeled:(BOOL)flag;
- (void)setEnabled:(BOOL)flag;
- (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits;
- (void)setImage:(NSImage *)image;
- (id)target;
- (void)setTarget:(id)anObject;
- (SEL)action;
- (void)setAction:(SEL)aSelector;
- (NSInteger)tag;
- (void)setTag:(NSInteger)anInt;
- (NSString *)stringValue;
- (int)intValue;
- (float)floatValue;
- (double)doubleValue;
- (void)setObjectValue:(id<NSCopying>)obj;


- (NSInteger)integerValue;


@end
# 16 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAlert.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSAlert.h" 3
@class NSTextField, NSPanel, NSArray, NSWindow, NSImage, NSButton, NSError;




enum {
    NSWarningAlertStyle = 0,
    NSInformationalAlertStyle = 1,
    NSCriticalAlertStyle = 2
};
typedef NSUInteger NSAlertStyle;

@interface NSAlert : NSObject
{
    @private

    NSTextField *_informationField;
    id _first;
    id _second;
    id _third;
    NSArray *_buttons;
    NSPanel *_panel;
    id _messageField;
    id _imageView;
    NSSize _minButtonSize;
    CGFloat _buttonSpacing;
    CGFloat _buttonPadding;
    CGFloat _messagePadding;
    CGFloat _buttonSpacingMaxX;
    CGFloat _buttonSpacingY;
    id _modalDelegate;
    NSWindow *_docWindow;
    SEL _didEndSelector;
    SEL _didDismissSelector;
    NSImage *_unbadgedImage;
    NSSize _defaultPanelSize;
    id _helpButton;
    id _delegate;
    NSAlertStyle _alertStyle;
    id _helpAnchor;
    BOOL _useNSLayout;
    BOOL _showsHelp;
    BOOL reserved[2];
    id reserved1;
    id reserved2;
}





+ (NSAlert *)alertWithError:(NSError *)error;




+ (NSAlert *)alertWithMessageText:(NSString *)message defaultButton:(NSString *)defaultButton alternateButton:(NSString *)alternateButton otherButton:(NSString *)otherButton informativeTextWithFormat:(NSString *)format, ...;

- (void)setMessageText:(NSString *)messageText;
- (void)setInformativeText:(NSString *)informativeText;

- (NSString *)messageText;
- (NSString *)informativeText;


- (void)setIcon:(NSImage *)icon;
- (NSImage *)icon;



- (NSButton *)addButtonWithTitle:(NSString *)title;

- (NSArray *)buttons;







enum {
 NSAlertFirstButtonReturn = 1000,
 NSAlertSecondButtonReturn = 1001,
 NSAlertThirdButtonReturn = 1002
};
# 105 "/System/Library/Frameworks/AppKit.framework/Headers/NSAlert.h" 3
- (void)setShowsHelp:(BOOL)showsHelp;
- (BOOL)showsHelp;

- (void)setHelpAnchor:(NSString *)anchor;
- (NSString *)helpAnchor;

- (void)setAlertStyle:(NSAlertStyle)style;
- (NSAlertStyle)alertStyle;

- (void)setDelegate:(id)delegate;
- (id)delegate;




- (void)setShowsSuppressionButton:(BOOL)flag;
- (BOOL)showsSuppressionButton;



- (NSButton *)suppressionButton;




- (void)setAccessoryView:(NSView *)view;
- (NSView *)accessoryView;



- (void)layout;




- (NSInteger)runModal;




- (void)beginSheetModalForWindow:(NSWindow *)window modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;


- (id)window;

@end

@interface NSObject(NSAlertDelegate)

- (BOOL)alertShowHelp:(NSAlert *)alert;
@end
# 17 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAnimationContext.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSAnimationContext.h" 3
@interface NSAnimationContext : NSObject
{
    NSTimeInterval _duration;
    id _reserved[5];
}
+ (void)beginGrouping;
+ (void)endGrouping;

+ (NSAnimationContext *)currentContext;

- (void)setDuration:(NSTimeInterval)duration;
- (NSTimeInterval)duration;
@end
# 18 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAppleScriptExtensions.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSAppleScriptExtensions.h" 3
@class NSAttributedString;




@interface NSAppleScript(NSExtensions)


- (NSAttributedString *)richTextSource;

@end
# 19 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSUserInterfaceValidation.h" 1 3
# 68 "/System/Library/Frameworks/AppKit.framework/Headers/NSUserInterfaceValidation.h" 3
@protocol NSValidatedUserInterfaceItem
- (SEL)action;
- (NSInteger)tag;
@end


@protocol NSUserInterfaceValidations
- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)anItem;
@end
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h" 2 3

@class NSDate, NSDictionary, NSError, NSException, NSNotification;
@class NSGraphicsContext, NSImage, NSPasteboard, NSWindow;

@class NSDockTile;


extern "C" const double NSAppKitVersionNumber;
# 34 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h" 3
extern "C" NSString *NSModalPanelRunLoopMode;
extern "C" NSString *NSEventTrackingRunLoopMode;


enum {
    NSRunStoppedResponse = (-1000),
    NSRunAbortedResponse = (-1001),
    NSRunContinuesResponse = (-1002)
};


enum {
    NSUpdateWindowsRunLoopOrdering = 500000
};

extern "C" id NSApp;


typedef struct _NSModalSession *NSModalSession;

typedef struct NSThreadPrivate _NSThreadPrivate;

@interface NSApplication : NSResponder <NSUserInterfaceValidations>
{

    NSEvent *_currentEvent;
    void *_windowList;
    id _keyWindow;
    id _mainWindow;
    id _delegate;
    id *_hiddenList;
    int _hiddenCount;
    NSInteger _context;
    void *_appleEventSuspensionID;
    id obsolete2;
    short _unusedApp;
    short _running;
    struct __appFlags {
 unsigned int _hidden:1;
 unsigned int _RESERVED1:1;
 unsigned int _active:1;
 unsigned int _hasBeenRun:1;
 unsigned int _doingUnhide:1;
 unsigned int _delegateReturnsValidRequestor:1;
 unsigned int _deactPending:1;
 unsigned int _invalidState:1;
 unsigned int _invalidEvent:1;
 unsigned int _postedWindowsNeedUpdateNote:1;
        unsigned int _wantsToActivate:1;
        unsigned int _doingHide:1;
 unsigned int _dontSendShouldTerminate:1;
        unsigned int _skipWin32DelayedRestoreKeyWindowAfterHide:1;
        unsigned int _finishedLaunching:1;
        unsigned int _hasEventDelegate:1;
        unsigned int _appDying:1;
        unsigned int _didNSOpenOrPrint:1;
        unsigned int _inDealloc:1;
        unsigned int _pendingDidFinish:1;
        unsigned int _hasKeyFocus:1;
        unsigned int _panelsNonactivating:1;
        unsigned int _hiddenOnLaunch:1;
        unsigned int _openStatus:2;
 unsigned int _batchOrdering:1;
 unsigned int _reserved:6;
    } _appFlags;
    id _mainMenu;
    id _appIcon;
    id _nameTable;
    id _eventDelegate;
    _NSThreadPrivate *_threadingSupport;
}

+ (NSApplication *)sharedApplication;
- (void)setDelegate:(id)anObject;
- (id)delegate;
- (NSGraphicsContext*)context;
- (void)hide:(id)sender;
- (void)unhide:(id)sender;
- (void)unhideWithoutActivation;
- (NSWindow *)windowWithWindowNumber:(NSInteger)windowNum;
- (NSWindow *)mainWindow;
- (NSWindow *)keyWindow;
- (BOOL)isActive;
- (BOOL)isHidden;
- (BOOL)isRunning;
- (void)deactivate;
- (void)activateIgnoringOtherApps:(BOOL)flag;

- (void)hideOtherApplications:(id)sender;
- (void)unhideAllApplications:(id)sender;

- (void)finishLaunching;
- (void)run;
- (NSInteger)runModalForWindow:(NSWindow *)theWindow;
- (void)stop:(id)sender;
- (void)stopModal;
- (void)stopModalWithCode:(NSInteger)returnCode;
- (void)abortModal;
- (NSWindow *)modalWindow;
- (NSModalSession)beginModalSessionForWindow:(NSWindow *)theWindow;
- (NSInteger)runModalSession:(NSModalSession)session;
- (void)endModalSession:(NSModalSession)session;
- (void)terminate:(id)sender;

enum {
      NSCriticalRequest = 0,
      NSInformationalRequest = 10
};
typedef NSUInteger NSRequestUserAttentionType;


- (NSInteger)requestUserAttention:(NSRequestUserAttentionType)requestType;
- (void)cancelUserAttentionRequest:(NSInteger)request;
# 156 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h" 3
- (void)beginSheet:(NSWindow *)sheet modalForWindow:(NSWindow *)docWindow modalDelegate:(id)modalDelegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;
- (void)endSheet:(NSWindow *)sheet;
- (void)endSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode;





- (NSInteger)runModalForWindow:(NSWindow *)theWindow relativeToWindow:(NSWindow *)docWindow;





- (NSModalSession)beginModalSessionForWindow:(NSWindow *)theWindow relativeToWindow:(NSWindow *)docWindow;
- (NSEvent *)nextEventMatchingMask:(NSUInteger)mask untilDate:(NSDate *)expiration inMode:(NSString *)mode dequeue:(BOOL)deqFlag;
- (void)discardEventsMatchingMask:(NSUInteger)mask beforeEvent:(NSEvent *)lastEvent;
- (void)postEvent:(NSEvent *)event atStart:(BOOL)flag;
- (NSEvent *)currentEvent;

- (void)sendEvent:(NSEvent *)theEvent;
- (void)preventWindowOrdering;
- (NSWindow *)makeWindowsPerform:(SEL)aSelector inOrder:(BOOL)flag;
- (NSArray *)windows;
- (void)setWindowsNeedUpdate:(BOOL)needUpdate;
- (void)updateWindows;

- (void)setMainMenu:(NSMenu *)aMenu;
- (NSMenu *)mainMenu;

- (void)setApplicationIconImage:(NSImage *)image;
- (NSImage *)applicationIconImage;


- (NSDockTile *)dockTile;


- (BOOL)sendAction:(SEL)theAction to:(id)theTarget from:(id)sender;
- (id)targetForAction:(SEL)theAction;
- (id)targetForAction:(SEL)theAction to:(id)theTarget from:(id)sender;
- (BOOL)tryToPerform:(SEL)anAction with:(id)anObject;
- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType;

- (void)reportException:(NSException *)theException;
+ (void)detachDrawingThread:(SEL)selector toTarget:(id)target withObject:(id)argument;


- (void)replyToApplicationShouldTerminate:(BOOL)shouldTerminate;


enum {
    NSApplicationDelegateReplySuccess = 0,
    NSApplicationDelegateReplyCancel = 1,
    NSApplicationDelegateReplyFailure = 2
};
typedef NSUInteger NSApplicationDelegateReply;


- (void)replyToOpenOrPrint:(NSApplicationDelegateReply)reply;



- (void)orderFrontCharacterPalette:(id)sender;

@end

@interface NSApplication(NSWindowsMenu)
- (void)setWindowsMenu:(NSMenu *)aMenu;
- (NSMenu *)windowsMenu;
- (void)arrangeInFront:(id)sender;
- (void)removeWindowsItem:(NSWindow *)win;
- (void)addWindowsItem:(NSWindow *)win title:(NSString *)aString filename:(BOOL)isFilename;
- (void)changeWindowsItem:(NSWindow *)win title:(NSString *)aString filename:(BOOL)isFilename;
- (void)updateWindowsItem:(NSWindow *)win;
- (void)miniaturizeAll:(id)sender;
@end

@interface NSObject(NSApplicationNotifications)
- (void)applicationWillFinishLaunching:(NSNotification *)notification;
- (void)applicationDidFinishLaunching:(NSNotification *)notification;
- (void)applicationWillHide:(NSNotification *)notification;
- (void)applicationDidHide:(NSNotification *)notification;
- (void)applicationWillUnhide:(NSNotification *)notification;
- (void)applicationDidUnhide:(NSNotification *)notification;
- (void)applicationWillBecomeActive:(NSNotification *)notification;
- (void)applicationDidBecomeActive:(NSNotification *)notification;
- (void)applicationWillResignActive:(NSNotification *)notification;
- (void)applicationDidResignActive:(NSNotification *)notification;
- (void)applicationWillUpdate:(NSNotification *)notification;
- (void)applicationDidUpdate:(NSNotification *)notification;
- (void)applicationWillTerminate:(NSNotification *)notification;
- (void)applicationDidChangeScreenParameters:(NSNotification *)notification;
@end


enum {
        NSTerminateCancel = 0,
        NSTerminateNow = 1,
        NSTerminateLater = 2
};
typedef NSUInteger NSApplicationTerminateReply;



enum {
    NSPrintingCancelled = 0,
    NSPrintingSuccess = 1,
    NSPrintingFailure = 3,
    NSPrintingReplyLater = 2
};
typedef NSUInteger NSApplicationPrintReply;


@interface NSObject(NSApplicationDelegate)







- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender;
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;

- (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames;

- (BOOL)application:(NSApplication *)sender openTempFile:(NSString *)filename;
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender;
- (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;
- (BOOL)application:(id)sender openFileWithoutUI:(NSString *)filename;
- (BOOL)application:(NSApplication *)sender printFile:(NSString *)filename;

- (NSApplicationPrintReply)application:(NSApplication *)application printFiles:(NSArray *)fileNames withSettings:(NSDictionary *)printSettings showPrintPanels:(BOOL)showPrintPanels;



- (void)application:(NSApplication *)sender printFiles:(NSArray *)filenames;

- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender;
- (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag;
- (NSMenu *)applicationDockMenu:(NSApplication *)sender;

- (NSError *)application:(NSApplication *)application willPresentError:(NSError *)error;

@end

@interface NSApplication(NSServicesMenu)
- (void)setServicesMenu:(NSMenu *)aMenu;
- (NSMenu *)servicesMenu;
- (void)registerServicesMenuSendTypes:(NSArray *)sendTypes returnTypes:(NSArray *)returnTypes;
@end

@interface NSObject(NSServicesRequests)
- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types;
- (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard;
@end

@interface NSApplication(NSServicesHandling)
- (void)setServicesProvider:(id)provider;
- (id)servicesProvider;
@end

@interface NSApplication(NSStandardAboutPanel)
- (void)orderFrontStandardAboutPanel:(id)sender;
- (void)orderFrontStandardAboutPanelWithOptions:(NSDictionary *)optionsDictionary;
# 346 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h" 3
@end




extern "C" int NSApplicationMain(int argc, const char *argv[]);




extern "C" BOOL NSApplicationLoad(void);



extern "C" BOOL NSShowsServicesMenuItem(NSString * itemName);


extern "C" NSInteger NSSetShowsServicesMenuItem(NSString * itemName, BOOL enabled);



extern "C" void NSUpdateDynamicServices(void);
extern "C" BOOL NSPerformService(NSString *itemName, NSPasteboard *pboard);

extern "C" void NSRegisterServicesProvider(id provider, NSString *name);
extern "C" void NSUnregisterServicesProvider(NSString *name);


extern "C" NSString *NSApplicationDidBecomeActiveNotification;
extern "C" NSString *NSApplicationDidHideNotification;
extern "C" NSString *NSApplicationDidFinishLaunchingNotification;
extern "C" NSString *NSApplicationDidResignActiveNotification;
extern "C" NSString *NSApplicationDidUnhideNotification;
extern "C" NSString *NSApplicationDidUpdateNotification;
extern "C" NSString *NSApplicationWillBecomeActiveNotification;
extern "C" NSString *NSApplicationWillHideNotification;
extern "C" NSString *NSApplicationWillFinishLaunchingNotification;
extern "C" NSString *NSApplicationWillResignActiveNotification;
extern "C" NSString *NSApplicationWillUnhideNotification;
extern "C" NSString *NSApplicationWillUpdateNotification;
extern "C" NSString *NSApplicationWillTerminateNotification;
extern "C" NSString *NSApplicationDidChangeScreenParametersNotification;
# 20 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSBox.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSBox.h" 3
@class NSFont;

enum {
    NSNoTitle = 0,
    NSAboveTop = 1,
    NSAtTop = 2,
    NSBelowTop = 3,
    NSAboveBottom = 4,
    NSAtBottom = 5,
    NSBelowBottom = 6
};
typedef NSUInteger NSTitlePosition;

enum {
    NSBoxPrimary = 0,
    NSBoxSecondary = 1,
    NSBoxSeparator = 2,
    NSBoxOldStyle = 3
};
typedef NSUInteger NSBoxType;

@interface NSBox : NSView
{

    id _titleCell;
    id _contentView;
    NSSize _offsets;
    NSRect _borderRect;
    NSRect _titleRect;
    struct __bFlags {
 NSBorderType borderType:2;
 NSTitlePosition titlePosition:3;
 unsigned int transparent:1;
        unsigned int boxType:2;
        unsigned int needsTile:1;
        unsigned int _RESERVED:23;
    } _bFlags;
    id _unused;
}

- (NSBorderType)borderType;
- (NSTitlePosition)titlePosition;
- (void)setBorderType:(NSBorderType)aType;
- (void)setBoxType:(NSBoxType)boxType;
- (NSBoxType)boxType;
- (void)setTitlePosition:(NSTitlePosition)aPosition;
- (NSString *)title;
- (void)setTitle:(NSString *)aString;
- (NSFont *)titleFont;
- (void)setTitleFont:(NSFont *)fontObj;
- (NSRect)borderRect;
- (NSRect)titleRect;
- (id)titleCell;
- (void)sizeToFit;
- (NSSize)contentViewMargins;
- (void)setContentViewMargins:(NSSize)offsetSize;
- (void)setFrameFromContentFrame:(NSRect)contentFrame;
- (id)contentView;
- (void)setContentView:(NSView *)aView;

@end

@interface NSBox(NSKeyboardUI)
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;
@end
# 21 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSControl.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSControl.h" 3
@class NSCell, NSFont, NSTextView, NSNotification, NSAttributedString, NSFormatter;

@interface NSControl : NSView
{

    NSInteger _tag;
    id _cell;
    struct __conFlags {
 unsigned int enabled:1;
 unsigned int ignoreMultiClick:1;
 unsigned int calcSize:1;
 unsigned int drawingAncestor:1;
        unsigned int ibReserved:1;
 unsigned int updateCellFocus:1;
        unsigned int deallocating:1;
 unsigned int reserved:25;
    } _conFlags;
}

+ (void)setCellClass:(Class)factoryId;
+ (Class)cellClass;

- (id)initWithFrame:(NSRect)frameRect;
- (void)sizeToFit;
- (void)calcSize;
- (id)cell;
- (void)setCell:(NSCell *)aCell;
- (id)selectedCell;
- (id)target;
- (void)setTarget:(id)anObject;
- (SEL)action;
- (void)setAction:(SEL)aSelector;
- (NSInteger)tag;
- (void)setTag:(NSInteger)anInt;
- (NSInteger)selectedTag;
- (void)setIgnoresMultiClick:(BOOL)flag;
- (BOOL)ignoresMultiClick;
- (NSInteger)sendActionOn:(NSInteger)mask;
- (BOOL)isContinuous;
- (void)setContinuous:(BOOL)flag;
- (BOOL)isEnabled;
- (void)setEnabled:(BOOL)flag;
- (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits;
- (NSTextAlignment)alignment;
- (void)setAlignment:(NSTextAlignment)mode;
- (NSFont *)font;
- (void)setFont:(NSFont *)fontObj;
- (void)setFormatter:(NSFormatter *)newFormatter;
- (id)formatter;
- (void)setObjectValue:(id<NSCopying>)obj;
- (void)setStringValue:(NSString *)aString;
- (void)setIntValue:(int)anInt;
- (void)setFloatValue:(float)aFloat;
- (void)setDoubleValue:(double)aDouble;
- (id)objectValue;
- (NSString *)stringValue;
- (int)intValue;
- (float)floatValue;
- (double)doubleValue;
- (void)setNeedsDisplay;
- (void)updateCell:(NSCell *)aCell;
- (void)updateCellInside:(NSCell *)aCell;
- (void)drawCellInside:(NSCell *)aCell;
- (void)drawCell:(NSCell *)aCell;
- (void)selectCell:(NSCell *)aCell;

- (BOOL)sendAction:(SEL)theAction to:(id)theTarget;
- (void)takeIntValueFrom:(id)sender;
- (void)takeFloatValueFrom:(id)sender;
- (void)takeDoubleValueFrom:(id)sender;
- (void)takeStringValueFrom:(id)sender;
- (void)takeObjectValueFrom:(id)sender;
- (NSText *)currentEditor;
- (BOOL)abortEditing;
- (void)validateEditing;
- (void)mouseDown:(NSEvent *)theEvent;


- (NSWritingDirection)baseWritingDirection;
- (void)setBaseWritingDirection:(NSWritingDirection)writingDirection;



- (NSInteger)integerValue;
- (void)setIntegerValue:(NSInteger)anInteger;
- (void)takeIntegerValueFrom:(id)sender;


@end

@interface NSControl(NSKeyboardUI)
- (void)performClick:sender;
- (void)setRefusesFirstResponder:(BOOL)flag;
- (BOOL)refusesFirstResponder;
@end

@interface NSObject(NSControlSubclassNotifications)

- (void)controlTextDidBeginEditing:(NSNotification *)obj;
- (void)controlTextDidEndEditing:(NSNotification *)obj;
- (void)controlTextDidChange:(NSNotification *)obj;

@end



@interface NSObject(NSControlSubclassDelegate)



- (BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor;
- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor;
- (BOOL)control:(NSControl *)control didFailToFormatString:(NSString *)string errorDescription:(NSString *)error;
- (void)control:(NSControl *)control didFailToValidatePartialString:(NSString *)string errorDescription:(NSString *)error;
- (BOOL)control:(NSControl *)control isValidObject:(id)obj;

- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector;

- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index;

@end


extern "C" NSString *NSControlTextDidBeginEditingNotification;
extern "C" NSString *NSControlTextDidEndEditingNotification;
extern "C" NSString *NSControlTextDidChangeNotification;

@interface NSControl(NSControlAttributedStringMethods)
- (NSAttributedString *)attributedStringValue;
- (void)setAttributedStringValue:(NSAttributedString *)obj;
@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSButtonCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSButtonCell.h" 3
@class NSAttributedString, NSFont, NSImage, NSSound;

enum {
    NSMomentaryLightButton = 0,
    NSPushOnPushOffButton = 1,
    NSToggleButton = 2,
    NSSwitchButton = 3,
    NSRadioButton = 4,
    NSMomentaryChangeButton = 5,
    NSOnOffButton = 6,
    NSMomentaryPushInButton = 7,




    NSMomentaryPushButton = 0,
    NSMomentaryLight = 7

};
typedef NSUInteger NSButtonType;

enum {

    NSRoundedBezelStyle = 1,
    NSRegularSquareBezelStyle = 2,
    NSThickSquareBezelStyle = 3,
    NSThickerSquareBezelStyle = 4,

    NSDisclosureBezelStyle = 5,

    NSShadowlessSquareBezelStyle = 6,
    NSCircularBezelStyle = 7,

    NSTexturedSquareBezelStyle = 8,
    NSHelpButtonBezelStyle = 9,


    NSSmallSquareBezelStyle = 10,
    NSTexturedRoundedBezelStyle = 11,
    NSRoundRectBezelStyle = 12,
    NSRecessedBezelStyle = 13,
    NSRoundedDisclosureBezelStyle = 14,




    NSSmallIconButtonBezelStyle = 2

};
typedef NSUInteger NSBezelStyle;

typedef struct __BCFlags {

    unsigned int pushIn:1;
    unsigned int changeContents:1;
    unsigned int changeBackground:1;
    unsigned int changeGray:1;
    unsigned int lightByContents:1;
    unsigned int lightByBackground:1;
    unsigned int lightByGray:1;
    unsigned int drawing:1;
    unsigned int bordered:1;
    unsigned int imageOverlaps:1;
    unsigned int horizontal:1;
    unsigned int bottomOrLeft:1;
    unsigned int imageAndText:1;
    unsigned int imageSizeDiff:1;
    unsigned int hasKeyEquivalentInsteadOfImage:1;
    unsigned int lastState:1;
    unsigned int transparent:1;
    unsigned int inset:2;
    unsigned int doesNotDimImage:1;
    unsigned int gradientType:3;
    unsigned int useButtonImageSource:1;
    unsigned int alternateMnemonicLocation:8;
# 109 "/System/Library/Frameworks/AppKit.framework/Headers/NSButtonCell.h" 3
} _BCFlags;

typedef struct __BCFlags2 {

    unsigned int keyEquivalentModifierMask:24;
    unsigned int reserved:2;
    unsigned int bezelStyle2:1;
    unsigned int mouseInside:1;
    unsigned int showsBorderOnlyWhileMouseInside:1;
    unsigned int bezelStyle:3;
# 127 "/System/Library/Frameworks/AppKit.framework/Headers/NSButtonCell.h" 3
} _BCFlags2;

@interface NSButtonCell : NSActionCell
{

    NSString *_altContents;
    id _sound;
    NSString *_keyEquivalent;
    _BCFlags2 _bcFlags2;
    unsigned short _periodicDelay;
    unsigned short _periodicInterval;
    _BCFlags _bcFlags;
    NSImage *_normalImage;
    id _alternateImageOrKeyEquivalentFont;
}


- (NSString *)title;
- (void)setTitle:(NSString *)aString;
- (NSString *)alternateTitle;
- (void)setAlternateTitle:(NSString *)aString;

- (NSImage *)alternateImage;
- (void)setAlternateImage:(NSImage *)image;
- (NSCellImagePosition)imagePosition;
- (void)setImagePosition:(NSCellImagePosition)aPosition;

- (NSImageScaling)imageScaling;
- (void)setImageScaling:(NSImageScaling)scaling;


- (NSInteger)highlightsBy;
- (void)setHighlightsBy:(NSInteger)aType;
- (NSInteger)showsStateBy;
- (void)setShowsStateBy:(NSInteger)aType;
- (void)setButtonType:(NSButtonType)aType;
- (BOOL)isOpaque;
- (void)setFont:(NSFont *)fontObj;
- (BOOL)isTransparent;
- (void)setTransparent:(BOOL)flag;
- (void)setPeriodicDelay:(float)delay interval:(float)interval;
- (void)getPeriodicDelay:(float *)delay interval:(float *)interval;
- (NSString *)keyEquivalent;
- (void)setKeyEquivalent:(NSString *)aKeyEquivalent;
- (NSUInteger)keyEquivalentModifierMask;
- (void)setKeyEquivalentModifierMask:(NSUInteger)mask;
- (NSFont *)keyEquivalentFont;
- (void)setKeyEquivalentFont:(NSFont *)fontObj;
- (void)setKeyEquivalentFont:(NSString *)fontName size:(CGFloat)fontSize;
- (void)performClick:(id)sender;


- (void)drawImage:(NSImage*)image withFrame:(NSRect)frame inView:(NSView*)controlView;
- (NSRect)drawTitle:(NSAttributedString*)title withFrame:(NSRect)frame inView:(NSView*)controlView;
- (void)drawBezelWithFrame:(NSRect)frame inView:(NSView*)controlView;

@end

@interface NSButtonCell(NSKeyboardUI)
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;
- (void)setAlternateTitleWithMnemonic:(NSString *)stringWithAmpersand;
- (void)setAlternateMnemonicLocation:(NSUInteger)location;
- (NSUInteger)alternateMnemonicLocation;
- (NSString *)alternateMnemonic;
@end
# 200 "/System/Library/Frameworks/AppKit.framework/Headers/NSButtonCell.h" 3
enum {
    NSGradientNone = 0,
    NSGradientConcaveWeak = 1,
    NSGradientConcaveStrong = 2,
    NSGradientConvexWeak = 3,
    NSGradientConvexStrong = 4
};
typedef NSUInteger NSGradientType;

@interface NSButtonCell(NSButtonCellExtensions)
- (NSGradientType)gradientType;
- (void)setGradientType:(NSGradientType)type;



- (void)setImageDimsWhenDisabled:(BOOL)flag;
- (BOOL)imageDimsWhenDisabled;

- (void) setShowsBorderOnlyWhileMouseInside:(BOOL)show;
- (BOOL) showsBorderOnlyWhileMouseInside;

- (void) mouseEntered:(NSEvent*)event;
- (void) mouseExited:(NSEvent*)event;


- (NSColor*)backgroundColor;
- (void)setBackgroundColor:(NSColor*)color;


@end

@interface NSButtonCell(NSButtonCellAttributedStringMethods)
- (NSAttributedString *)attributedTitle;
- (void)setAttributedTitle:(NSAttributedString *)obj;
- (NSAttributedString *)attributedAlternateTitle;
- (void)setAttributedAlternateTitle:(NSAttributedString *)obj;
@end

@interface NSButtonCell(NSButtonCellBezelStyles)

- (void) setBezelStyle:(NSBezelStyle)bezelStyle;
- (NSBezelStyle)bezelStyle;

@end

@interface NSButtonCell (NSButtonCellSoundExtensions)
- (void)setSound:(NSSound *)aSound;
- (NSSound *)sound;
@end
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h" 2 3


@class NSSound;

@interface NSButton : NSControl <NSUserInterfaceValidations>

- (NSString *)title;
- (void)setTitle:(NSString *)aString;
- (NSString *)alternateTitle;
- (void)setAlternateTitle:(NSString *)aString;
- (NSImage *)image;
- (void)setImage:(NSImage *)image;
- (NSImage *)alternateImage;
- (void)setAlternateImage:(NSImage *)image;
- (NSCellImagePosition)imagePosition;
- (void)setImagePosition:(NSCellImagePosition)aPosition;
- (void)setButtonType:(NSButtonType)aType;
- (NSInteger)state;
- (void)setState:(NSInteger)value;
- (BOOL)isBordered;
- (void)setBordered:(BOOL)flag;
- (BOOL)isTransparent;
- (void)setTransparent:(BOOL)flag;
- (void)setPeriodicDelay:(float)delay interval:(float)interval;
- (void)getPeriodicDelay:(float *)delay interval:(float *)interval;
- (NSString *)keyEquivalent;
- (void)setKeyEquivalent:(NSString *)charCode;
- (NSUInteger)keyEquivalentModifierMask;
- (void)setKeyEquivalentModifierMask:(NSUInteger)mask;
- (void)highlight:(BOOL)flag;
- (BOOL)performKeyEquivalent:(NSEvent *)key;

@end

@interface NSButton(NSKeyboardUI)
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;
@end

@interface NSButton(NSButtonAttributedStringMethods)
- (NSAttributedString *)attributedTitle;
- (void)setAttributedTitle:(NSAttributedString *)aString;
- (NSAttributedString *)attributedAlternateTitle;
- (void)setAttributedAlternateTitle:(NSAttributedString *)obj;
@end

@interface NSButton(NSButtonBezelStyles)
- (void) setBezelStyle:(NSBezelStyle)bezelStyle;
- (NSBezelStyle)bezelStyle;
@end

@interface NSButton(NSButtonMixedState)
- (void)setAllowsMixedState:(BOOL)flag;
- (BOOL)allowsMixedState;
- (void)setNextState;
@end

@interface NSButton(NSButtonBorder)
- (void) setShowsBorderOnlyWhileMouseInside:(BOOL)show;
- (BOOL) showsBorderOnlyWhileMouseInside;
@end

@interface NSButton (NSButtonSoundExtensions)
- (void)setSound:(NSSound *)aSound;
- (NSSound *)sound;
@end
# 22 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3


# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSClipView.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSClipView.h" 3
@class NSColor, NSNotification;

@interface NSClipView : NSView
{

    NSColor *_backgroundColor;
    NSView *_docView;
    NSRect _docRect;
    NSRect _oldDocFrame;
    NSCursor *_cursor;
    id _scrollAnimationHelper;
    struct __cvFlags {
 unsigned int isFlipped:1;
 unsigned int onlyUncovered:1;
 unsigned int reflectScroll:1;
 unsigned int usedByCell:1;
 unsigned int scrollClipTo:1;
 unsigned int noCopyOnScroll:1;
        unsigned int drawsBackground:1;
        unsigned int scrollInProgress:1;
        unsigned int skipRemoveSuperviewCheck:1;
        unsigned int animateCurrentScroll:1;
        unsigned int canAnimateScrolls:1;
        unsigned int nextScrollRelativeToCurrentPosition:1;
        unsigned int viewBoundsChangedOverridden:1;
        unsigned int viewFrameChangedOverridden:1;
        unsigned int RESERVED:18;
    } _cvFlags;
}

- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;
- (void)setDrawsBackground:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setDocumentView:(NSView *)aView;
- (id)documentView;
- (NSRect)documentRect;
- (void)setDocumentCursor:(NSCursor *)anObj;
- (NSCursor *)documentCursor;
- (NSRect)documentVisibleRect;
- (void)viewFrameChanged:(NSNotification *)notification;
- (void)viewBoundsChanged:(NSNotification *)notification;
- (void)setCopiesOnScroll:(BOOL)flag;
- (BOOL)copiesOnScroll;
- (BOOL)autoscroll:(NSEvent *)theEvent;
- (NSPoint)constrainScrollPoint:(NSPoint)newOrigin;
- (void)scrollToPoint:(NSPoint)newOrigin;

@end

@interface NSView(NSClipViewSuperview)
- (void)reflectScrolledClipView:(NSClipView *)aClipView;
- (void)scrollClipView:(NSClipView *)aClipView toPoint:(NSPoint)aPoint;
@end
# 25 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSFont.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSFont.h" 3
@class NSFontDescriptor, NSAffineTransform, NSGraphicsContext;




typedef unsigned int NSGlyph;

enum {
    NSControlGlyph = 0x00FFFFFF,
    NSNullGlyph = 0x0
};




extern "C" const CGFloat *NSFontIdentityMatrix;




enum {
    NSNativeShortGlyphPacking = 5
};
typedef NSUInteger NSMultibyteGlyphPacking;



enum {
    NSFontDefaultRenderingMode = 0,
    NSFontAntialiasedRenderingMode = 1,
    NSFontIntegerAdvancementsRenderingMode = 2,
    NSFontAntialiasedIntegerAdvancementsRenderingMode = 3
};
typedef NSUInteger NSFontRenderingMode;


@interface NSFont : NSObject <NSCopying, NSCoding> {

    NSString *_name;
    CGFloat _size;
    void *_reservedFont1;
    struct __fFlags {
        unsigned int _isScreenFont:1;
        unsigned int _systemFontType:8;
        unsigned int _reserved1:4;
        unsigned int _matrixIsIdentity:1;
        unsigned int _renderingMode:3;
        unsigned int _reserved2:15;
    } _fFlags;
    id _private;
}


+ (NSFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize;
+ (NSFont *)fontWithName:(NSString *)fontName matrix:(const CGFloat *)fontMatrix;



+ (NSFont *)fontWithDescriptor:(NSFontDescriptor *)fontDescriptor size:(CGFloat)fontSize;



+ (NSFont *)fontWithDescriptor:(NSFontDescriptor *)fontDescriptor textTransform:(NSAffineTransform *)textTransform;





+ (NSFont *)userFontOfSize:(CGFloat)fontSize;
+ (NSFont *)userFixedPitchFontOfSize:(CGFloat)fontSize;
+ (void)setUserFont:(NSFont *)aFont;
+ (void)setUserFixedPitchFont:(NSFont *)aFont;



+ (NSFont *)systemFontOfSize:(CGFloat)fontSize;
+ (NSFont *)boldSystemFontOfSize:(CGFloat)fontSize;
+ (NSFont *)labelFontOfSize:(CGFloat)fontSize;

+ (NSFont *)titleBarFontOfSize:(CGFloat)fontSize;
+ (NSFont *)menuFontOfSize:(CGFloat)fontSize;

+ (NSFont *)menuBarFontOfSize:(CGFloat)fontSize;

+ (NSFont *)messageFontOfSize:(CGFloat)fontSize;
+ (NSFont *)paletteFontOfSize:(CGFloat)fontSize;
+ (NSFont *)toolTipsFontOfSize:(CGFloat)fontSize;
+ (NSFont *)controlContentFontOfSize:(CGFloat)fontSize;



+ (CGFloat)systemFontSize;
+ (CGFloat)smallSystemFontSize;
+ (CGFloat)labelFontSize;


+ (CGFloat)systemFontSizeForControlSize:(NSControlSize)controlSize;



- (NSString *)fontName;
- (CGFloat)pointSize;
- (const CGFloat *)matrix;
- (NSString *)familyName;
- (NSString *)displayName;

- (NSFontDescriptor *)fontDescriptor;


- (NSAffineTransform *)textTransform;



- (NSUInteger)numberOfGlyphs;
- (NSStringEncoding)mostCompatibleStringEncoding;
- (NSGlyph)glyphWithName:(NSString *)aName;

- (NSCharacterSet *)coveredCharacterSet;





- (NSRect)boundingRectForFont;
- (NSSize)maximumAdvancement;

- (CGFloat)ascender;
- (CGFloat)descender;

- (CGFloat)leading;


- (CGFloat)underlinePosition;
- (CGFloat)underlineThickness;
- (CGFloat)italicAngle;
- (CGFloat)capHeight;
- (CGFloat)xHeight;
- (BOOL)isFixedPitch;


- (NSRect)boundingRectForGlyph:(NSGlyph)aGlyph;
- (NSSize)advancementForGlyph:(NSGlyph)ag;



- (void)getBoundingRects:(NSRectArray)bounds forGlyphs:(const NSGlyph *)glyphs count:(NSUInteger)glyphCount;
- (void)getAdvancements:(NSSizeArray)advancements forGlyphs:(const NSGlyph *)glyphs count:(NSUInteger)glyphCount;
- (void)getAdvancements:(NSSizeArray)advancements forPackedGlyphs:(const void *)packedGlyphs length:(NSUInteger)length;



- (void)set;

- (void)setInContext:(NSGraphicsContext *)graphicsContext;



- (NSFont *)printerFont;
- (NSFont *)screenFont;

- (NSFont *)screenFontWithRenderingMode:(NSFontRenderingMode)renderingMode;
- (NSFontRenderingMode)renderingMode;

@end




extern "C" NSInteger NSConvertGlyphsToPackedGlyphs(NSGlyph *glBuf, NSInteger count, NSMultibyteGlyphPacking packing, char *packedGlyphs);




extern "C" NSString *NSAntialiasThresholdChangedNotification ;



extern "C" NSString *NSFontSetChangedNotification ;






typedef enum _NSGlyphRelation {
    NSGlyphBelow = 1,
    NSGlyphAbove = 2
} NSGlyphRelation;



enum {
    NSOneByteGlyphPacking,
    NSJapaneseEUCGlyphPacking,
    NSAsciiWithDoubleByteEUCGlyphPacking,
    NSTwoByteGlyphPacking,
    NSFourByteGlyphPacking,
};

@interface NSFont (NSFontDeprecated)
+ (void)useFont:(NSString *)fontName;
- (CGFloat)widthOfString:(NSString *)string;
- (BOOL)isBaseFont;
- (NSDictionary *)afmDictionary;
- (BOOL)glyphIsEncoded:(NSGlyph)aGlyph;
- (CGFloat)defaultLineHeightForFont;
+ (NSArray *)preferredFontNames;
+ (void)setPreferredFontNames:(NSArray *)fontNameArray;
- (NSString *)encodingScheme;
- (NSMultibyteGlyphPacking) glyphPacking;


- (NSPoint)positionOfGlyph:(NSGlyph)curGlyph precededByGlyph:(NSGlyph)prevGlyph isNominal:(BOOL *)nominal;
- (NSInteger)positionsForCompositeSequence:(NSGlyph *)someGlyphs numberOfGlyphs:(NSInteger)numGlyphs pointArray:(NSPointArray)points;
- (NSPoint)positionOfGlyph:(NSGlyph)curGlyph struckOverGlyph:(NSGlyph)prevGlyph metricsExist:(BOOL *)exist;
- (NSPoint)positionOfGlyph:(NSGlyph)aGlyph struckOverRect:(NSRect)aRect metricsExist:(BOOL *)exist;
- (NSPoint)positionOfGlyph:(NSGlyph)aGlyph forCharacter:(unichar)aChar struckOverRect:(NSRect)aRect;
- (NSPoint)positionOfGlyph:(NSGlyph)thisGlyph withRelation:(NSGlyphRelation)rel toBaseGlyph:(NSGlyph)baseGlyph totalAdvancement:(NSSizePointer)adv metricsExist:(BOOL *)exist;
@end


extern "C" NSString *NSAFMFamilyName ;
extern "C" NSString *NSAFMFontName ;
extern "C" NSString *NSAFMFormatVersion ;
extern "C" NSString *NSAFMFullName ;
extern "C" NSString *NSAFMNotice ;
extern "C" NSString *NSAFMVersion ;
extern "C" NSString *NSAFMWeight ;
extern "C" NSString *NSAFMEncodingScheme ;
extern "C" NSString *NSAFMCharacterSet ;
extern "C" NSString *NSAFMCapHeight ;
extern "C" NSString *NSAFMXHeight ;
extern "C" NSString *NSAFMAscender ;
extern "C" NSString *NSAFMDescender ;
extern "C" NSString *NSAFMUnderlinePosition ;
extern "C" NSString *NSAFMUnderlineThickness ;
extern "C" NSString *NSAFMItalicAngle ;
extern "C" NSString *NSAFMMappingScheme ;
# 27 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontDescriptor.h" 1 3
# 21 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontDescriptor.h" 3
typedef uint32_t NSFontSymbolicTraits;







enum {
    NSFontUnknownClass = 0 << 28,
    NSFontOldStyleSerifsClass = 1 << 28,
    NSFontTransitionalSerifsClass = 2 << 28,
    NSFontModernSerifsClass = 3 << 28,
    NSFontClarendonSerifsClass = 4 << 28,
    NSFontSlabSerifsClass = 5 << 28,
    NSFontFreeformSerifsClass = 7 << 28,
    NSFontSansSerifClass = 8 << 28,
    NSFontOrnamentalsClass = 9 << 28,
    NSFontScriptsClass = 10 << 28,
    NSFontSymbolicClass = 12 << 28
};
typedef uint32_t NSFontFamilyClass;

enum {
    NSFontFamilyClassMask = 0xF0000000
};


enum {
    NSFontItalicTrait = (1 << 0),
    NSFontBoldTrait = (1 << 1),
    NSFontExpandedTrait = (1 << 5),
    NSFontCondensedTrait = (1 << 6),
    NSFontMonoSpaceTrait = (1 << 10),
    NSFontVerticalTrait = (1 << 11),
    NSFontUIOptimizedTrait = (1 << 12)
};


@class NSMutableDictionary, NSDictionary, NSArray, NSSet, NSAffineTransform;

@interface NSFontDescriptor: NSObject <NSCopying, NSCoding> {

    NSMutableDictionary *_attributes;
    id _reserved1;
    id _reserved2;
    id _reserved3;
    id _reserved4;
    id _reserved5;
}



- (NSString *)postscriptName;
- (CGFloat)pointSize;
- (NSAffineTransform *)matrix;
- (NSFontSymbolicTraits)symbolicTraits;

- (id)objectForKey:(NSString *)anAttribute;


- (NSDictionary *)fontAttributes;


+ (NSFontDescriptor *)fontDescriptorWithFontAttributes:(NSDictionary *)attributes;
+ (NSFontDescriptor *)fontDescriptorWithName:(NSString *)fontName size:(CGFloat)size;

+ (NSFontDescriptor *)fontDescriptorWithName:(NSString *)fontName matrix:(NSAffineTransform *)matrix;


- (id)initWithFontAttributes:(NSDictionary *)attributes;




- (NSArray *)matchingFontDescriptorsWithMandatoryKeys:(NSSet *)mandatoryKeys;



- (NSFontDescriptor *)matchingFontDescriptorWithMandatoryKeys:(NSSet *)mandatoryKeys ;

- (NSFontDescriptor *)fontDescriptorByAddingAttributes:(NSDictionary *)attributes;
- (NSFontDescriptor *)fontDescriptorWithSymbolicTraits:(NSFontSymbolicTraits)symbolicTraits;
- (NSFontDescriptor *)fontDescriptorWithSize:(CGFloat)newPointSize;
- (NSFontDescriptor *)fontDescriptorWithMatrix:(NSAffineTransform *)matrix;
- (NSFontDescriptor *)fontDescriptorWithFace:(NSString *)newFace;
- (NSFontDescriptor *)fontDescriptorWithFamily:(NSString *)newFamily;

@end




extern "C" NSString *NSFontFamilyAttribute ;
extern "C" NSString *NSFontNameAttribute ;
extern "C" NSString *NSFontFaceAttribute ;
extern "C" NSString *NSFontSizeAttribute ;
extern "C" NSString *NSFontVisibleNameAttribute ;

extern "C" NSString *NSFontMatrixAttribute ;
extern "C" NSString *NSFontVariationAttribute ;
extern "C" NSString *NSFontCharacterSetAttribute ;
extern "C" NSString *NSFontCascadeListAttribute ;
extern "C" NSString *NSFontTraitsAttribute ;
extern "C" NSString *NSFontFixedAdvanceAttribute ;
extern "C" NSString *NSFontFeatureSettingsAttribute ;

extern "C" NSString *NSFontColorAttribute ;




extern "C" NSString *NSFontSymbolicTrait ;



extern "C" NSString *NSFontWeightTrait ;



extern "C" NSString *NSFontWidthTrait ;



extern "C" NSString *NSFontSlantTrait ;




extern "C" NSString *NSFontVariationAxisIdentifierKey ;



extern "C" NSString *NSFontVariationAxisMinimumValueKey ;



extern "C" NSString *NSFontVariationAxisMaximumValueKey ;



extern "C" NSString *NSFontVariationAxisDefaultValueKey ;



extern "C" NSString *NSFontVariationAxisNameKey ;




extern "C" NSString *NSFontFeatureTypeIdentifierKey ;



extern "C" NSString *NSFontFeatureSelectorIdentifierKey ;
# 28 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontManager.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontManager.h" 3
@class NSArray, NSDictionary, NSFont, NSFontPanel, NSMenu, NSFontDescriptor;

typedef NSUInteger NSFontTraitMask;
# 23 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontManager.h" 3
enum {
    NSItalicFontMask = 0x00000001,
    NSBoldFontMask = 0x00000002,
    NSUnboldFontMask = 0x00000004,
    NSNonStandardCharacterSetFontMask = 0x00000008,
    NSNarrowFontMask = 0x00000010,
    NSExpandedFontMask = 0x00000020,
    NSCondensedFontMask = 0x00000040,
    NSSmallCapsFontMask = 0x00000080,
    NSPosterFontMask = 0x00000100,
    NSCompressedFontMask = 0x00000200,
    NSFixedPitchFontMask = 0x00000400,
    NSUnitalicFontMask = 0x01000000
};




enum {
   NSFontCollectionApplicationOnlyMask = 1 << 0
};





enum {
    NSNoFontChangeAction = 0,
    NSViaPanelFontAction = 1,
    NSAddTraitFontAction = 2,
    NSSizeUpFontAction = 3,
    NSSizeDownFontAction = 4,
    NSHeavierFontAction = 5,
    NSLighterFontAction = 6,
    NSRemoveTraitFontAction = 7
};
typedef NSUInteger NSFontAction;

@interface NSFontManager : NSObject
{

@private
    NSFontPanel * _panel;
    unsigned int _fmReserved1;
    SEL _action;
    id _actionOrigin;
    id _target;
    NSFont *_selFont;
    struct _fmFlags {
 unsigned int multipleFont:1;
 unsigned int disabled:1;
        unsigned int senderTagMode:2;
 unsigned int _RESERVED:12;
    } _fmFlags;
    unsigned short _fmReserved3;
    id _delegate;
    id _collections;
    id _hiddenCollections;
    NSUInteger _fmReserved4;
}

+ (void)setFontPanelFactory:(Class)factoryId;
+ (void)setFontManagerFactory:(Class)factoryId;
+ (NSFontManager *)sharedFontManager;

- (BOOL)isMultiple;
- (NSFont *)selectedFont;
- (void)setSelectedFont:(NSFont *)fontObj isMultiple:(BOOL)flag;
- (void)setFontMenu:(NSMenu *)newMenu;
- (NSMenu *)fontMenu:(BOOL)create;
- (NSFontPanel *)fontPanel:(BOOL)create;
- (NSFont *)fontWithFamily:(NSString *)family traits:(NSFontTraitMask)traits weight:(NSInteger)weight size:(CGFloat)size;
- (NSFontTraitMask)traitsOfFont:(NSFont *)fontObj;
- (NSInteger)weightOfFont:(NSFont *)fontObj;



- (NSArray *)availableFonts;
- (NSArray *)availableFontFamilies;
- (NSArray *)availableMembersOfFontFamily:(NSString *)fam;

- (NSFont *)convertFont:(NSFont *)fontObj;
- (NSFont *)convertFont:(NSFont *)fontObj toSize:(CGFloat)size;
- (NSFont *)convertFont:(NSFont *)fontObj toFace:(NSString *)typeface;
- (NSFont *)convertFont:(NSFont *)fontObj toFamily:(NSString *)family;
- (NSFont *)convertFont:(NSFont *)fontObj toHaveTrait:(NSFontTraitMask)trait;
- (NSFont *)convertFont:(NSFont *)fontObj toNotHaveTrait:(NSFontTraitMask)trait;
- (NSFont *)convertWeight:(BOOL)upFlag ofFont:(NSFont *)fontObj;
- (BOOL)isEnabled;
- (void)setEnabled:(BOOL)flag;
- (SEL)action;
- (void)setAction:(SEL)aSelector;
- (BOOL)sendAction;
- (void)setDelegate:(id)anObject;
- (id)delegate;

- (NSString *) localizedNameForFamily:(NSString *)family face:(NSString *)faceKey;


- (void)setSelectedAttributes:(NSDictionary *)attributes isMultiple:(BOOL)flag;
- (NSDictionary *)convertAttributes:(NSDictionary *)attributes;

- (NSArray *)availableFontNamesMatchingFontDescriptor:(NSFontDescriptor *)descriptor;

- (NSArray *)collectionNames;
- (NSArray *)fontDescriptorsInCollection:(NSString *)collectionNames;
- (BOOL)addCollection:(NSString *)collectionName options:(NSInteger)collectionOptions;
- (BOOL)removeCollection:(NSString *)collectionName;

- (void)addFontDescriptors:(NSArray *)descriptors toCollection:(NSString *)collectionName;
- (void)removeFontDescriptor:(NSFontDescriptor *)descriptor fromCollection:(NSString *)collection;





- (NSFontAction)currentFontAction;



- (NSFontTraitMask)convertFontTraits:(NSFontTraitMask)traits;

- (void)setTarget:(id)aTarget;
- (id)target;


@end

@interface NSFontManager(NSFontManagerMenuActionMethods)

- (BOOL)fontNamed:(NSString *)fName hasTraits:(NSFontTraitMask)someTraits;



- (NSArray *)availableFontNamesWithTraits:(NSFontTraitMask)someTraits;



- (void)addFontTrait:(id)sender;
- (void)removeFontTrait:(id)sender;
- (void)modifyFontViaPanel:(id)sender;
- (void)modifyFont:(id)sender;
- (void)orderFrontFontPanel:(id)sender;

- (void)orderFrontStylesPanel:(id)sender;


@end



@interface NSObject(NSFontManagerDelegate)
- (BOOL)fontManager:(id)sender willIncludeFont:(NSString *)fontName;
@end



@interface NSObject(NSFontManagerResponderMethod)
- (void)changeFont:(id)sender;
@end
# 29 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontPanel.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPanel.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h" 1 3
# 17 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h" 3
@class NSButton, NSButtonCell, NSColor, NSImage, NSPasteboard, NSScreen;
@class NSNotification, NSText, NSView, NSMutableSet, NSSet, NSDate;
@class NSToolbar, NSGraphicsContext;

@class NSDockTile;




enum {
    NSBorderlessWindowMask = 0,
    NSTitledWindowMask = 1 << 0,
    NSClosableWindowMask = 1 << 1,
    NSMiniaturizableWindowMask = 1 << 2,
    NSResizableWindowMask = 1 << 3

};




enum {
    NSTexturedBackgroundWindowMask = 1 << 8
};





enum {
    NSUnscaledWindowMask = 1 << 11
};



enum {
    NSUnifiedTitleAndToolbarWindowMask = 1 << 12
};




enum {
    NSDisplayWindowRunLoopOrdering = 600000,
    NSResetCursorRectsRunLoopOrdering = 700000
};



enum {
 NSWindowSharingNone = 0,
 NSWindowSharingReadOnly = 1,
 NSWindowSharingReadWrite = 2
};

typedef NSUInteger NSWindowSharingType;

enum {
 NSWindowBackingLocationDefault = 0,
 NSWindowBackingLocationVideoMemory = 1,
 NSWindowBackingLocationMainMemory = 2
};

typedef NSUInteger NSWindowBackingLocation;
# 97 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h" 3
enum {
    NSDirectSelection = 0,
    NSSelectingNext,
    NSSelectingPrevious
};
typedef NSUInteger NSSelectionDirection;



enum {
    NSWindowCloseButton,
    NSWindowMiniaturizeButton,
    NSWindowZoomButton,
    NSWindowToolbarButton,
    NSWindowDocumentIconButton
};
typedef NSUInteger NSWindowButton;


@class NSWindowAuxiliary;
@class NSEvent;
@class NSWindowController;

@interface NSWindow : NSResponder

<NSUserInterfaceValidations, NSAnimatablePropertyContainer>



{

    NSRect _frame;
    id _contentView;
    id _delegate;
    NSResponder *_firstResponder;
    NSView *_lastLeftHit;
    NSView *_lastRightHit;
    id _counterpart;
    id _fieldEditor;
    int _winEventMask;
    NSInteger _windowNum;
    int _level;
    NSColor *_backgroundColor;
    id _borderView;
    unsigned char _postingDisabled;
    unsigned char _styleMask;
    unsigned char _flushDisabled;
    unsigned char _reservedWindow1;
    void *_cursorRects;
    void *_trectTable;
    NSImage *_miniIcon;
    int _unused;
    NSMutableSet *_dragTypes;
    NSString *_representedFilename;
    NSSize *_sizeLimits;
    NSString *_frameSaveName;
    NSSet *_regDragTypes;
    struct __wFlags {
        unsigned int backing:2;
        unsigned int visible:1;
        unsigned int isMainWindow:1;
        unsigned int isKeyWindow:1;
        unsigned int hidesOnDeactivate:1;
        unsigned int dontFreeWhenClosed:1;
        unsigned int oneShot:1;
        unsigned int deferred:1;
        unsigned int cursorRectsDisabled:1;
        unsigned int haveFreeCursorRects:1;
        unsigned int validCursorRects:1;
        unsigned int docEdited:1;
        unsigned int dynamicDepthLimit:1;
        unsigned int worksWhenModal:1;
        unsigned int limitedBecomeKey:1;
        unsigned int needsFlush:1;
        unsigned int viewsNeedDisplay:1;
        unsigned int ignoredFirstMouse:1;
        unsigned int repostedFirstMouse:1;
        unsigned int windowDying:1;
        unsigned int tempHidden:1;
        unsigned int floatingPanel:1;
        unsigned int wantsToBeOnMainScreen:1;
        unsigned int optimizedDrawingOk:1;
        unsigned int optimizeDrawing:1;
        unsigned int titleIsRepresentedFilename:1;
        unsigned int excludedFromWindowsMenu:1;
        unsigned int depthLimit:4;
        unsigned int delegateReturnsValidRequestor:1;
        unsigned int lmouseupPending:1;
        unsigned int rmouseupPending:1;
        unsigned int wantsToDestroyRealWindow:1;
        unsigned int wantsToRegDragTypes:1;
        unsigned int sentInvalidateCursorRectsMsg:1;
        unsigned int avoidsActivation:1;
        unsigned int frameSavedUsingTitle:1;
        unsigned int didRegDragTypes:1;
        unsigned int delayedOneShot:1;
        unsigned int postedNeedsDisplayNote:1;
        unsigned int postedInvalidCursorRectsNote:1;
        unsigned int initialFirstResponderTempSet:1;
        unsigned int autodisplay:1;
        unsigned int tossedFirstEvent:1;
        unsigned int isImageCache:1;
        unsigned int interfaceStyle:3;
        unsigned int keyViewSelectionDirection:2;
        unsigned int defaultButtonCellKETemporarilyDisabled:1;
        unsigned int defaultButtonCellKEDisabled:1;
        unsigned int menuHasBeenSet:1;
        unsigned int wantsToBeModal:1;
        unsigned int showingModalFrame:1;
        unsigned int isTerminating:1;
        unsigned int win32MouseActivationInProgress:1;
        unsigned int makingFirstResponderForMouseDown:1;
        unsigned int needsZoom:1;
        unsigned int sentWindowNeedsDisplayMsg:1;
        unsigned int liveResizeActive:1;
    } _wFlags;
    id _defaultButtonCell;
    NSView *_initialFirstResponder;
    NSWindowAuxiliary *_auxiliaryStorage;
}

+ (NSRect)frameRectForContentRect:(NSRect)cRect styleMask:(NSUInteger)aStyle;
+ (NSRect)contentRectForFrameRect:(NSRect)fRect styleMask:(NSUInteger)aStyle;
+ (CGFloat)minFrameWidthWithTitle:(NSString *)aTitle styleMask:(NSUInteger)aStyle;
+ (NSWindowDepth)defaultDepthLimit;


- (NSRect)frameRectForContentRect:(NSRect)contentRect;
- (NSRect)contentRectForFrameRect:(NSRect)frameRect;


- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag;
- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag screen:(NSScreen *)screen;

- (NSString *)title;
- (void)setTitle:(NSString *)aString;





- (void)setRepresentedURL:(NSURL *)url;
- (NSURL *)representedURL;

- (NSString *)representedFilename;
- (void)setRepresentedFilename:(NSString *)aString;
- (void)setTitleWithRepresentedFilename:(NSString *)filename;
- (void)setExcludedFromWindowsMenu:(BOOL)flag;
- (BOOL)isExcludedFromWindowsMenu;
- (void)setContentView:(NSView *)aView;
- (id)contentView;
- (void)setDelegate:(id)anObject;
- (id)delegate;
- (NSInteger)windowNumber;
- (NSUInteger)styleMask;
- (NSText *)fieldEditor:(BOOL)createFlag forObject:(id)anObject;
- (void)endEditingFor:(id)anObject;

- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen;
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag;
- (void)setContentSize:(NSSize)aSize;
- (void)setFrameOrigin:(NSPoint)aPoint;
- (void)setFrameTopLeftPoint:(NSPoint)aPoint;
- (NSPoint)cascadeTopLeftFromPoint:(NSPoint)topLeftPoint;
- (NSRect)frame;




- (NSTimeInterval)animationResizeTime:(NSRect)newFrame;


- (void)setFrame:(NSRect)frameRect display:(BOOL)displayFlag animate:(BOOL)animateFlag;


- (void)setShowsResizeIndicator:(BOOL)show;
- (BOOL)showsResizeIndicator;

- (void)setResizeIncrements:(NSSize)increments;
- (NSSize)resizeIncrements;
- (void)setAspectRatio:(NSSize)ratio;
- (NSSize)aspectRatio;


- (void)setContentResizeIncrements:(NSSize)increments;
- (NSSize)contentResizeIncrements;
- (void)setContentAspectRatio:(NSSize)ratio;
- (NSSize)contentAspectRatio;


- (void)useOptimizedDrawing:(BOOL)flag;
- (void)disableFlushWindow;
- (void)enableFlushWindow;
- (BOOL)isFlushWindowDisabled;
- (void)flushWindow;
- (void)flushWindowIfNeeded;
- (void)setViewsNeedDisplay:(BOOL)flag;
- (BOOL)viewsNeedDisplay;
- (void)displayIfNeeded;
- (void)display;
- (void)setAutodisplay:(BOOL)flag;
- (BOOL)isAutodisplay;


- (BOOL)preservesContentDuringLiveResize;
- (void)setPreservesContentDuringLiveResize:(BOOL)flag;


- (void)update;
- (BOOL)makeFirstResponder:(NSResponder *)aResponder;
- (NSResponder *)firstResponder;
- (NSInteger)resizeFlags;
- (void)keyDown:(NSEvent *)theEvent;
- (void)close;
- (void)setReleasedWhenClosed:(BOOL)flag;
- (BOOL)isReleasedWhenClosed;
- (void)miniaturize:(id)sender;
- (void)deminiaturize:(id)sender;
- (BOOL)isZoomed;
- (void)zoom:(id)sender;
- (BOOL)isMiniaturized;
- (BOOL)tryToPerform:(SEL)anAction with:(id)anObject;
- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType;
- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;


- (void)setMovableByWindowBackground:(BOOL)flag;
- (BOOL)isMovableByWindowBackground;


- (void)setHidesOnDeactivate:(BOOL)flag;
- (BOOL)hidesOnDeactivate;


- (void)setCanHide:(BOOL)flag;
- (BOOL)canHide;

- (void)center;
- (void)makeKeyAndOrderFront:(id)sender;
- (void)orderFront:(id)sender;
- (void)orderBack:(id)sender;
- (void)orderOut:(id)sender;
- (void)orderWindow:(NSWindowOrderingMode)place relativeTo:(NSInteger)otherWin;
- (void)orderFrontRegardless;

- (void)setMiniwindowImage:(NSImage *)image;
- (void)setMiniwindowTitle:(NSString *)title;
- (NSImage *)miniwindowImage;
- (NSString *)miniwindowTitle;


- (NSDockTile *)dockTile;


- (void)setDocumentEdited:(BOOL)flag;
- (BOOL)isDocumentEdited;
- (BOOL)isVisible;
- (BOOL)isKeyWindow;
- (BOOL)isMainWindow;
- (BOOL)canBecomeKeyWindow;
- (BOOL)canBecomeMainWindow;
- (void)makeKeyWindow;
- (void)makeMainWindow;
- (void)becomeKeyWindow;
- (void)resignKeyWindow;
- (void)becomeMainWindow;
- (void)resignMainWindow;

- (BOOL)worksWhenModal;
- (NSPoint)convertBaseToScreen:(NSPoint)aPoint;
- (NSPoint)convertScreenToBase:(NSPoint)aPoint;
- (void)performClose:(id)sender;
- (void)performMiniaturize:(id)sender;
- (void)performZoom:(id)sender;
- (NSInteger)gState;
- (void)setOneShot:(BOOL)flag;
- (BOOL)isOneShot;
- (NSData *)dataWithEPSInsideRect:(NSRect)rect;
- (NSData *)dataWithPDFInsideRect:(NSRect)rect;
- (void)print:(id)sender;

- (void)disableCursorRects;
- (void)enableCursorRects;
- (void)discardCursorRects;
- (BOOL)areCursorRectsEnabled;
- (void)invalidateCursorRectsForView:(NSView *)aView;
- (void)resetCursorRects;


- (void)setAllowsToolTipsWhenApplicationIsInactive:(BOOL)allowWhenInactive;


- (BOOL)allowsToolTipsWhenApplicationIsInactive;



- (void)setBackingType:(NSBackingStoreType)bufferingType;
- (NSBackingStoreType)backingType;
- (void)setLevel:(NSInteger)newLevel;
- (NSInteger)level;
- (void)setDepthLimit:(NSWindowDepth)limit;
- (NSWindowDepth)depthLimit;
- (void)setDynamicDepthLimit:(BOOL)flag;
- (BOOL)hasDynamicDepthLimit;
- (NSScreen *)screen;
- (NSScreen *)deepestScreen;
- (BOOL)canStoreColor;
- (void)setHasShadow:(BOOL)hasShadow;
- (BOOL)hasShadow;

- (void)invalidateShadow;

- (void)setAlphaValue:(CGFloat)windowAlpha;
- (CGFloat)alphaValue;
- (void)setOpaque:(BOOL)isOpaque;
- (BOOL)isOpaque;





- (void)setSharingType:(NSWindowSharingType)type;
- (NSWindowSharingType)sharingType;



- (void)setPreferredBackingLocation:(NSWindowBackingLocation)backingLocation;


- (NSWindowBackingLocation)preferredBackingLocation;


- (NSWindowBackingLocation)backingLocation;




- (BOOL)displaysWhenScreenProfileChanges;
- (void)setDisplaysWhenScreenProfileChanges:(BOOL)flag;

- (void)disableScreenUpdatesUntilFlush;




- (BOOL)canBecomeVisibleWithoutLogin;
- (void)setCanBecomeVisibleWithoutLogin:(BOOL)flag;


- (NSString *)stringWithSavedFrame;
- (void)setFrameFromString:(NSString *)string;
- (void)saveFrameUsingName:(NSString *)name;

- (BOOL)setFrameUsingName:(NSString *)name force:(BOOL)force;
- (BOOL)setFrameUsingName:(NSString *)name;
- (BOOL)setFrameAutosaveName:(NSString *)name;
- (NSString *)frameAutosaveName;
+ (void)removeFrameUsingName:(NSString *)name;


- (void)cacheImageInRect:(NSRect)aRect;
- (void)restoreCachedImage;
- (void)discardCachedImage;

- (NSSize)minSize;
- (NSSize)maxSize;
- (void)setMinSize:(NSSize)size;
- (void)setMaxSize:(NSSize)size;

- (NSSize)contentMinSize;
- (NSSize)contentMaxSize;
- (void)setContentMinSize:(NSSize)size;
- (void)setContentMaxSize:(NSSize)size;

- (NSEvent *)nextEventMatchingMask:(NSUInteger)mask;
- (NSEvent *)nextEventMatchingMask:(NSUInteger)mask untilDate:(NSDate *)expiration inMode:(NSString *)mode dequeue:(BOOL)deqFlag;
- (void)discardEventsMatchingMask:(NSUInteger)mask beforeEvent:(NSEvent *)lastEvent;
- (void)postEvent:(NSEvent *)event atStart:(BOOL)flag;
- (NSEvent *)currentEvent;
- (void)setAcceptsMouseMovedEvents:(BOOL)flag;
- (BOOL)acceptsMouseMovedEvents;

- (void)setIgnoresMouseEvents:(BOOL)flag;
- (BOOL)ignoresMouseEvents;

- (NSDictionary *)deviceDescription;
- (void)sendEvent:(NSEvent *)theEvent;
- (NSPoint)mouseLocationOutsideOfEventStream;
+ (void)menuChanged:(NSMenu *)menu;

- (id)windowController;
- (void)setWindowController:(NSWindowController *)windowController;

- (BOOL)isSheet;
- (NSWindow *)attachedSheet;


+ (NSButton *)standardWindowButton:(NSWindowButton)b forStyleMask:(NSUInteger)styleMask;
- (NSButton *)standardWindowButton:(NSWindowButton)b;



- (void)addChildWindow:(NSWindow *)childWin ordered:(NSWindowOrderingMode)place;
- (void)removeChildWindow:(NSWindow *)childWin;
- (NSArray *)childWindows;

- (NSWindow *)parentWindow;
- (void)setParentWindow:(NSWindow *)window;





- (NSGraphicsContext *)graphicsContext;



- (CGFloat)userSpaceScaleFactor;


@end

@interface NSWindow(NSKeyboardUI)
- (void)setInitialFirstResponder:(NSView *)view;
- (NSView *)initialFirstResponder;
- (void)selectNextKeyView:(id)sender;
- (void)selectPreviousKeyView:(id)sender;
- (void)selectKeyViewFollowingView:(NSView *)aView;
- (void)selectKeyViewPrecedingView:(NSView *)aView;
- (NSSelectionDirection)keyViewSelectionDirection;
- (void)setDefaultButtonCell:(NSButtonCell *)defButt;
- (NSButtonCell *)defaultButtonCell;
- (void)disableKeyEquivalentForDefaultButtonCell;
- (void)enableKeyEquivalentForDefaultButtonCell;

- (void)setAutorecalculatesKeyViewLoop:(BOOL)flag;
- (BOOL)autorecalculatesKeyViewLoop;
- (void)recalculateKeyViewLoop;

@end

@interface NSWindow (NSToolbarSupport)
- (void)setToolbar:(NSToolbar*)toolbar;
- (NSToolbar *)toolbar;
- (void)toggleToolbarShown:(id)sender;
- (void)runToolbarCustomizationPalette:(id)sender;

- (void)setShowsToolbarButton:(BOOL)show;
- (BOOL)showsToolbarButton;

@end

@interface NSWindow(NSDrag)
- (void)dragImage:(NSImage *)anImage at:(NSPoint)baseLocation offset:(NSSize)initialOffset event:(NSEvent *)event pasteboard:(NSPasteboard *)pboard source:(id)sourceObj slideBack:(BOOL)slideFlag;

- (void)registerForDraggedTypes:(NSArray *)newTypes;
- (void)unregisterDraggedTypes;
@end

@interface NSWindow(NSCarbonExtensions)

- (NSWindow *)initWithWindowRef:(void * )windowRef;

- (void * )windowRef;
@end


@interface NSObject(NSWindowNotifications)
- (void)windowDidResize:(NSNotification *)notification;
- (void)windowDidExpose:(NSNotification *)notification;
- (void)windowWillMove:(NSNotification *)notification;
- (void)windowDidMove:(NSNotification *)notification;
- (void)windowDidBecomeKey:(NSNotification *)notification;
- (void)windowDidResignKey:(NSNotification *)notification;
- (void)windowDidBecomeMain:(NSNotification *)notification;
- (void)windowDidResignMain:(NSNotification *)notification;
- (void)windowWillClose:(NSNotification *)notification;
- (void)windowWillMiniaturize:(NSNotification *)notification;
- (void)windowDidMiniaturize:(NSNotification *)notification;
- (void)windowDidDeminiaturize:(NSNotification *)notification;
- (void)windowDidUpdate:(NSNotification *)notification;
- (void)windowDidChangeScreen:(NSNotification *)notification;

- (void)windowDidChangeScreenProfile:(NSNotification *)notification;

- (void)windowWillBeginSheet:(NSNotification *)notification;
- (void)windowDidEndSheet:(NSNotification *)notification;
@end

@interface NSObject(NSWindowDelegate)
- (BOOL)windowShouldClose:(id)sender;
- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client;
- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize;
- (NSRect)windowWillUseStandardFrame:(NSWindow *)window defaultFrame:(NSRect)newFrame;
- (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame;
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window;

- (NSRect)window:(NSWindow *)window willPositionSheet:(NSWindow *)sheet usingRect:(NSRect)rect;




- (BOOL)window:(NSWindow *)window shouldShowPopUpDocumentPathMenu:(NSMenu *)menu;



- (BOOL)window:(NSWindow *)window shouldDragDocumentWithEvent:(NSEvent *)event from:(NSPoint)dragImageLocation withPasteboard:(NSPasteboard *)pasteboard;

@end



extern "C" NSString *NSWindowDidBecomeKeyNotification;
extern "C" NSString *NSWindowDidBecomeMainNotification;
extern "C" NSString *NSWindowDidChangeScreenNotification;
extern "C" NSString *NSWindowDidDeminiaturizeNotification;
extern "C" NSString *NSWindowDidExposeNotification;
extern "C" NSString *NSWindowDidMiniaturizeNotification;
extern "C" NSString *NSWindowDidMoveNotification;
extern "C" NSString *NSWindowDidResignKeyNotification;
extern "C" NSString *NSWindowDidResignMainNotification;
extern "C" NSString *NSWindowDidResizeNotification;
extern "C" NSString *NSWindowDidUpdateNotification;
extern "C" NSString *NSWindowWillCloseNotification;
extern "C" NSString *NSWindowWillMiniaturizeNotification;
extern "C" NSString *NSWindowWillMoveNotification;
extern "C" NSString *NSWindowWillBeginSheetNotification;
extern "C" NSString *NSWindowDidEndSheetNotification;
extern "C" NSString *NSWindowDidChangeScreenProfileNotification ;
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSPanel.h" 2 3







extern "C" NSInteger NSRunAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...);
extern "C" NSInteger NSRunInformationalAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...);
extern "C" NSInteger NSRunCriticalAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...);





extern "C" NSInteger NSRunAlertPanelRelativeToWindow(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, NSWindow *docWindow, ...);
extern "C" NSInteger NSRunInformationalAlertPanelRelativeToWindow(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, NSWindow *docWindow, ...);
extern "C" NSInteger NSRunCriticalAlertPanelRelativeToWindow(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, NSWindow *docWindow, ...);
# 38 "/System/Library/Frameworks/AppKit.framework/Headers/NSPanel.h" 3
extern "C" void NSBeginAlertSheet(NSString *title, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, NSWindow *docWindow, id modalDelegate, SEL didEndSelector, SEL didDismissSelector, void *contextInfo, NSString *msg, ...);
extern "C" void NSBeginInformationalAlertSheet(NSString *title, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, NSWindow *docWindow, id modalDelegate, SEL didEndSelector, SEL didDismissSelector, void *contextInfo, NSString *msg, ...);
extern "C" void NSBeginCriticalAlertSheet(NSString *title, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, NSWindow *docWindow, id modalDelegate, SEL didEndSelector, SEL didDismissSelector, void *contextInfo, NSString *msg, ...);

extern "C" id NSGetAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...);
extern "C" id NSGetInformationalAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...);
extern "C" id NSGetCriticalAlertPanel(NSString *title, NSString *msg, NSString *defaultButton, NSString *alternateButton, NSString *otherButton, ...);

extern "C" void NSReleaseAlertPanel(id panel);






enum {
    NSAlertDefaultReturn = 1,
    NSAlertAlternateReturn = 0,
    NSAlertOtherReturn = -1,
    NSAlertErrorReturn = -2
};

enum {
    NSOKButton = 1,
    NSCancelButton = 0
};


enum {
    NSUtilityWindowMask = 1 << 4,
    NSDocModalWindowMask = 1 << 6
};


enum {
    NSNonactivatingPanelMask = 1 << 7
};


@interface NSPanel : NSWindow
{

}

- (BOOL)isFloatingPanel;
- (void)setFloatingPanel:(BOOL)flag;
- (BOOL)becomesKeyOnlyIfNeeded;
- (void)setBecomesKeyOnlyIfNeeded:(BOOL)flag;
- (BOOL)worksWhenModal;
- (void)setWorksWhenModal:(BOOL)flag;

@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSFontPanel.h" 2 3

@class NSFontPanel, NSMutableDictionary, NSFontManager, NSMutableArray, NSTableView, NSFontDescriptor, NSFont;



@interface NSObject (NSFontPanelValidationAdditions)
- (NSUInteger) validModesForFontPanel: (NSFontPanel *) fontPanel;
@end



@interface NSFontPanel : NSPanel {

    NSFontManager *_manager;

    id _familyList;
    id _faceList;
    id _sizeList;
    id _mainCollectionList;
    id _sizeField;
    id _sizeSlider;
    id _sizeSliderBox;
    id _preview;
    id _previewCaption;
    id _mainSplitView;
    id _mmCollectionList;
    id _mmFamilyList;
    id _mmFaceList;
    id _mmSizeList;
    id _extrasPopup;
    id _searchField;
    id _fixedListButton;
    id _sliderButton;
    id _accessoryView;
    struct __fpFlags {
        unsigned int multipleFont:1;
        unsigned int dirty:1;
        unsigned int amPreviewing:1;
        unsigned int alwaysPreview:1;
        unsigned int dontPreview:1;
 unsigned int setFontChange:1;
 unsigned int setFontAttributeChange:1;
 unsigned int sizeValueCacheIsValid:1;
 unsigned int sizeFieldIsRelative:1;
 unsigned int inittedCollPane:1;
 unsigned int inittedFavePane:1;
 unsigned int didInitialPaneSetup:1;
 unsigned int _inNewCol:1;
 unsigned int _delRespFamily:1;
 unsigned int _delRespFace:1;
 unsigned int _delRespSize:1;
 unsigned int _delRespColl:1;
 unsigned int _collectionDisabled;
 unsigned int _sizeDisabled;
 unsigned int _faceDisabled;
 unsigned int _lastFaceSelection;
        unsigned int showEffects:1;
        unsigned int RESERVED2:11;
    } _fpFlags;
    CGFloat _cachedSizeValue;
    id _separator;
    id _splitVue;
    id _regularModeBox;
    id _miniModeBox;
    id _modeBoxSuperview;
    id _collectionLabel;
    id _sizeLabel;
    id _faceLabel;
    id _familyLabel;
    id _sizeStyleButton;
    id _newSizeField;
    id _editSizeList;
    id _editSizeListBox;
    id _editSizeSliderBox;
    id _editSizeSliderMaxField;
    id _editSizeSliderMinField;
    id _sizeEditWindow;
    id _defaultCollection;
    id _defaultCollectionRep, _currentCollectionRep;
    id _availableSizes;
    id _collectionNames;
    int _lastPane;
    id _prevSelectedFontDescriptor;
    id _searchTimer;
    id _unused0;
    void *_carbonNotification;
    id _collectionRenameButton;
    id _reserved3[2];

    id _addCollectionButton;
    id _removeCollectionButton;
    id _previewBox;
    int _genCount;
    id _collectionsPboard;

    CGFloat _fontPanelPreviewHeight;
    id _typographyPanel;
    id _actionButton;
    id _fontEffectsBox;
    int _seqNumber;
    int _sizeStyle;
    id _targetObject;

    id _fpUnused[51];

}

+ (NSFontPanel *)sharedFontPanel;
+ (BOOL)sharedFontPanelExists;

- (NSView *)accessoryView;
- (void)setAccessoryView:(NSView *)aView;
- (void)setPanelFont:(NSFont *)fontObj isMultiple:(BOOL)flag;
- (NSFont *)panelConvertFont:(NSFont *)fontObj;
- (BOOL)worksWhenModal;
- (BOOL)isEnabled;
- (void)setEnabled:(BOOL)flag;



- (void) reloadDefaultFontFamilies;

@end





enum {
    NSFPPreviewButton = 131,
    NSFPRevertButton = 130,
    NSFPSetButton = 132,
    NSFPPreviewField = 128,
    NSFPSizeField = 129,
    NSFPSizeTitle = 133,
    NSFPCurrentField = 134
};



enum {
    NSFontPanelFaceModeMask = 1 << 0,
    NSFontPanelSizeModeMask = 1 << 1,
    NSFontPanelCollectionModeMask = 1 << 2,


    NSFontPanelUnderlineEffectModeMask = 1<<8,
    NSFontPanelStrikethroughEffectModeMask = 1<<9,
    NSFontPanelTextColorEffectModeMask = 1<< 10,
    NSFontPanelDocumentColorEffectModeMask = 1<<11,
    NSFontPanelShadowEffectModeMask = 1<<12,
    NSFontPanelAllEffectsModeMask = 0XFFF00,


    NSFontPanelStandardModesMask = 0xFFFF,
    NSFontPanelAllModesMask = 0xFFFFFFFF
};
# 30 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSForm.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMatrix.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSMatrix.h" 3
@class NSColor, NSMutableArray;



enum {
    NSRadioModeMatrix = 0,
    NSHighlightModeMatrix = 1,
    NSListModeMatrix = 2,
    NSTrackModeMatrix = 3
};
typedef NSUInteger NSMatrixMode;

typedef struct __MFlags {

    unsigned int highlightMode:1;
    unsigned int radioMode:1;
    unsigned int listMode:1;
    unsigned int allowEmptySel:1;
    unsigned int autoscroll:1;
    unsigned int selectionByRect:1;
    unsigned int drawsCellBackground:1;
    unsigned int drawsBackground:1;
    unsigned int autosizeCells:1;
    unsigned int drawingAncestor:1;
    unsigned int tabKeyTraversesCells:1;
    unsigned int tabKeyTraversesCellsExplicitlySet:1;
    unsigned int allowsIncrementalSearching:1;
    unsigned int currentlySelectingCell:1;
    unsigned int onlySetKeyCell:1;
    unsigned int changingSelectionWithKeyboard:1;
    unsigned int dontScroll:1;
    unsigned int refusesFirstResponder:1;
    unsigned int useSimpleTrackingMode:1;
    unsigned int checkForSimpleTrackingMode:1;
    unsigned int liveResizeImageCacheingEnabled:1;
    unsigned int hasCachedSubclassIsSafeForLiveResize:1;
    unsigned int subclassIsSafeForLiveResize:1;
    unsigned int tmpAllowNonVisibleCellsToBecomeFirstResponder:1;
    unsigned int needsRedrawBeforeFirstLiveResizeCache:1;
    unsigned int browserOptimizationsEnabled:1;
    unsigned int reservedMatrix:6;
# 81 "/System/Library/Frameworks/AppKit.framework/Headers/NSMatrix.h" 3
} _MFlags;

@interface NSMatrix : NSControl <NSUserInterfaceValidations>
{

    id _target;
    SEL _action;
    SEL _doubleAction;
    SEL _errorAction;
    id _delegate;
    id _selectedCell;
    NSInteger _selectedRow;
    NSInteger _selectedCol;
    NSInteger _numRows;
    NSInteger _numCols;
    NSSize _cellSize;
    NSSize _intercell;
    id _font;
    id _protoCell;
    id _cellClass;
    NSColor *_backgroundColor;
    id _private;
    NSMutableArray *_cells;
    _MFlags _mFlags;
}


- (id)initWithFrame:(NSRect)frameRect;
- (id)initWithFrame:(NSRect)frameRect mode:(NSInteger)aMode prototype:(NSCell *)aCell numberOfRows:(NSInteger)rowsHigh numberOfColumns:(NSInteger)colsWide;
- (id)initWithFrame:(NSRect)frameRect mode:(NSInteger)aMode cellClass:(Class)factoryId numberOfRows:(NSInteger)rowsHigh numberOfColumns:(NSInteger)colsWide;


- (void)setCellClass:(Class)factoryId;
- (Class)cellClass;
- (id)prototype;
- (void)setPrototype:(NSCell *)aCell;
- (NSCell *)makeCellAtRow:(NSInteger)row column:(NSInteger)col;
- (NSMatrixMode)mode;
- (void)setMode:(NSMatrixMode)aMode;
- (void)setAllowsEmptySelection:(BOOL)flag;
- (BOOL)allowsEmptySelection;
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;
- (NSArray *)cells;
- (void)sortUsingSelector:(SEL)comparator;
- (void)sortUsingFunction:(NSInteger (*)(id, id, void *))compare context:(void *)context;
- (id)selectedCell;
- (NSArray *)selectedCells;
- (NSInteger)selectedRow;
- (NSInteger)selectedColumn;
- (void)setSelectionByRect:(BOOL)flag;
- (BOOL)isSelectionByRect;
- (void)setSelectionFrom:(NSInteger)startPos to:(NSInteger)endPos anchor:(NSInteger)anchorPos highlight:(BOOL)lit;
- (void)deselectSelectedCell;
- (void)deselectAllCells;
- (void)selectCellAtRow:(NSInteger)row column:(NSInteger)col;
- (void)selectAll:(id)sender;
- (BOOL)selectCellWithTag:(NSInteger)anInt;
- (NSSize)cellSize;
- (void)setCellSize:(NSSize)aSize;
- (NSSize)intercellSpacing;
- (void)setIntercellSpacing:(NSSize)aSize;
- (void)setScrollable:(BOOL)flag;
- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;
- (void)setCellBackgroundColor:(NSColor *)color;
- (NSColor *)cellBackgroundColor;
- (void)setDrawsCellBackground:(BOOL)flag;
- (BOOL)drawsCellBackground;
- (void)setDrawsBackground:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setState:(NSInteger)value atRow:(NSInteger)row column:(NSInteger)col;
- (void)getNumberOfRows:(NSInteger *)rowCount columns:(NSInteger *)colCount;
- (NSInteger)numberOfRows;
- (NSInteger)numberOfColumns;
- (id)cellAtRow:(NSInteger)row column:(NSInteger)col;
- (NSRect)cellFrameAtRow:(NSInteger)row column:(NSInteger)col;
- (BOOL)getRow:(NSInteger *)row column:(NSInteger *)col ofCell:(NSCell *)aCell;
- (BOOL)getRow:(NSInteger *)row column:(NSInteger *)col forPoint:(NSPoint)aPoint;
- (void)renewRows:(NSInteger)newRows columns:(NSInteger)newCols;
- (void)putCell:(NSCell *)newCell atRow:(NSInteger)row column:(NSInteger)col;
- (void)addRow;
- (void)addRowWithCells:(NSArray *)newCells;
- (void)insertRow:(NSInteger)row;
- (void)insertRow:(NSInteger)row withCells:(NSArray *)newCells;
- (void)removeRow:(NSInteger)row;
- (void)addColumn;
- (void)addColumnWithCells:(NSArray *)newCells;
- (void)insertColumn:(NSInteger)column;
- (void)insertColumn:(NSInteger)column withCells:(NSArray *)newCells;
- (void)removeColumn:(NSInteger)col;
- (id)cellWithTag:(NSInteger)anInt;
- (SEL)doubleAction;
- (void)setDoubleAction:(SEL)aSelector;
- (void)setAutosizesCells:(BOOL)flag;
- (BOOL)autosizesCells;
- (void)sizeToCells;
- (void)setValidateSize:(BOOL)flag;
- (void)drawCellAtRow:(NSInteger)row column:(NSInteger)col;
- (void)highlightCell:(BOOL)flag atRow:(NSInteger)row column:(NSInteger)col;

- (void)setAutoscroll:(BOOL)flag;
- (BOOL)isAutoscroll;
- (void)scrollCellToVisibleAtRow:(NSInteger)row column:(NSInteger)col;
- (NSInteger)mouseDownFlags;
- (void)mouseDown:(NSEvent *)theEvent;
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent;
- (BOOL)sendAction;
- (void)sendDoubleAction;
- (id)delegate;
- (void)setDelegate:(id)anObject;
- (BOOL)textShouldBeginEditing:(NSText *)textObject;
- (BOOL)textShouldEndEditing:(NSText *)textObject;
- (void)textDidBeginEditing:(NSNotification *)notification;
- (void)textDidEndEditing:(NSNotification *)notification;
- (void)textDidChange:(NSNotification *)notification;
- (void)selectText:(id)sender;
- (id)selectTextAtRow:(NSInteger)row column:(NSInteger)col;
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent;
- (void)resetCursorRects;
- (void)setToolTip:(NSString *)toolTipString forCell:(NSCell *)cell;
- (NSString *)toolTipForCell:(NSCell *)cell;
@end

@interface NSMatrix(NSKeyboardUI)
- (void)setTabKeyTraversesCells:(BOOL)flag;
- (BOOL)tabKeyTraversesCells;
- (void)setKeyCell:(NSCell *)keyCell;
- (id)keyCell;
@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSForm.h" 2 3

@class NSFormCell;

@interface NSForm : NSMatrix

- (NSInteger)indexOfSelectedItem;
- (void)setEntryWidth:(CGFloat)width;
- (void)setInterlineSpacing:(CGFloat)spacing;
- (void)setBordered:(BOOL)flag;
- (void)setBezeled:(BOOL)flag;
- (void)setTitleAlignment:(NSTextAlignment)mode;
- (void)setTextAlignment:(NSInteger)mode;
- (void)setTitleFont:(NSFont *)fontObj;
- (void)setTextFont:(NSFont *)fontObj;
- (id)cellAtIndex:(NSInteger)index;
- (void)drawCellAtIndex:(NSInteger)index;
- (NSFormCell *)addEntry:(NSString *)title;
- (NSFormCell *)insertEntry:(NSString *)title atIndex:(NSInteger)index;
- (void)removeEntryAtIndex:(NSInteger)index;
- (NSInteger)indexOfCellWithTag:(NSInteger)aTag;
- (void)selectTextAtIndex:(NSInteger)index;
- (void)setFrameSize:(NSSize)newSize;

- (void)setTitleBaseWritingDirection:(NSWritingDirection)writingDirection;
- (void)setTextBaseWritingDirection:(NSWritingDirection)writingDirection;

@end
# 31 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSFormCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSFormCell.h" 3
@interface NSFormCell : NSActionCell
{

    CGFloat _titleWidth;
    id _titleCell;
    CGFloat _titleEndPoint;
}

- (id)initTextCell:(NSString *)aString;

- (CGFloat)titleWidth:(NSSize)aSize;
- (CGFloat)titleWidth;
- (void)setTitleWidth:(CGFloat)width;
- (NSString *)title;
- (void)setTitle:(NSString *)aString;
- (NSFont *)titleFont;
- (void)setTitleFont:(NSFont *)fontObj;
- (NSTextAlignment)titleAlignment;
- (void)setTitleAlignment:(NSTextAlignment)mode;
- (BOOL)isOpaque;


- (void)setPlaceholderString:(NSString*)string;
- (NSString*)placeholderString;
- (void)setPlaceholderAttributedString:(NSAttributedString*)string;
- (NSAttributedString*)placeholderAttributedString;



- (NSWritingDirection)titleBaseWritingDirection;
- (void)setTitleBaseWritingDirection:(NSWritingDirection)writingDirection;


@end

@interface NSFormCell(NSKeyboardUI)
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;
@end

@interface NSFormCell(NSFormCellAttributedStringMethods)
- (NSAttributedString *)attributedTitle;
- (void)setAttributedTitle:(NSAttributedString *)obj;
@end
# 32 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenu.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenu.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuItem.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuItem.h" 3
@class NSMenu;
@class NSImage, NSAttributedString, NSView;


@protocol NSMenuItem;

@interface NSMenuItem : NSObject <NSCopying, NSCoding, NSValidatedUserInterfaceItem> {

    @private
    NSMenu *_menu;
    NSString *_title;
    NSString *_keyEquivalent;
    NSUInteger _keyEquivalentModifierMask;
    NSInteger _mnemonicLocation;
    NSInteger _state;
    NSImage *_image;
    NSImage *_onStateImage;
    NSImage *_offStateImage;
    NSImage *_mixedStateImage;
    id _target;
    SEL _action;
    NSInteger _tag;
    id _extraData;
    struct __miFlags {
        unsigned int disabled:1;
        unsigned int isSeparator:1;
        unsigned int hidden:1;
        unsigned int alternate:1;
        unsigned int indent:4;
 unsigned int changed:16;
 unsigned int highlighted:1;
 unsigned int RESERVED:7;
    } _miFlags;
}

+ (void)setUsesUserKeyEquivalents:(BOOL)flag;
+ (BOOL)usesUserKeyEquivalents;

+ (NSMenuItem *)separatorItem;

- (id)initWithTitle:(NSString *)aString action:(SEL)aSelector keyEquivalent:(NSString *)charCode;

- (void)setMenu:(NSMenu *)menu;
- (NSMenu *)menu;



- (BOOL)hasSubmenu;
- (void)setSubmenu:(NSMenu *)submenu;
- (NSMenu *)submenu;

- (void)setTitle:(NSString *)aString;
- (NSString *)title;

- (void)setAttributedTitle:(NSAttributedString*)string;
- (NSAttributedString*)attributedTitle;


- (BOOL)isSeparatorItem;

- (void)setKeyEquivalent:(NSString *)aKeyEquivalent;
- (NSString *)keyEquivalent;
- (void)setKeyEquivalentModifierMask:(NSUInteger)mask;
- (NSUInteger)keyEquivalentModifierMask;

- (NSString *)userKeyEquivalent;

- (void)setMnemonicLocation:(NSUInteger)location;
- (NSUInteger)mnemonicLocation;
- (NSString *)mnemonic;
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;

- (void)setImage:(NSImage *)menuImage;
- (NSImage *)image;

- (void)setState:(NSInteger)state;
- (NSInteger)state;
- (void)setOnStateImage:(NSImage *)image;
- (NSImage *)onStateImage;
- (void)setOffStateImage:(NSImage *)image;
- (NSImage *)offStateImage;
- (void)setMixedStateImage:(NSImage *)image;
- (NSImage *)mixedStateImage;

- (void)setEnabled:(BOOL)flag;
- (BOOL)isEnabled;



- (void) setAlternate:(BOOL)isAlternate;
- (BOOL) isAlternate;

- (void) setIndentationLevel:(NSInteger)indentationLevel;
- (NSInteger) indentationLevel;


- (void)setTarget:(id)anObject;
- (id)target;
- (void)setAction:(SEL)aSelector;
- (SEL)action;

- (void)setTag:(NSInteger)anInt;
- (NSInteger)tag;

- (void)setRepresentedObject:(id)anObject;
- (id)representedObject;
# 128 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuItem.h" 3
- (void)setView:(NSView *)view;
- (NSView *)view;


- (BOOL)isHighlighted;


- (void)setHidden:(BOOL)hidden;
- (BOOL)isHidden;
- (BOOL)isHiddenOrHasHiddenAncestor;




- (void) setToolTip:(NSString*)toolTip;
- (NSString*)toolTip;


@end


@interface NSView (NSViewEnclosingMenuItem)

- (NSMenuItem *)enclosingMenuItem;
@end
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenu.h" 2 3

@class NSEvent, NSView, NSFont;
@class NSMenu;
@class NSMutableArray, NSArray;

@interface NSMenu : NSObject <NSCopying, NSCoding> {

    @private
    NSMenu *_supermenu;
    NSString *_title;
    id _itemArray;
    id _menuImpl;
    struct __mFlags {
        unsigned int noAutoenable:1;
        unsigned int menuChangedMessagesDisabled:1;
        unsigned int needsMenuChangedMessage:1;
        unsigned int suppressAutoenable:1;
        unsigned int disabled:1;
        unsigned int ownedByPopUp:1;
 unsigned int delegateNeedsUpdate:1;
 unsigned int delegateUpdateItem:1;
 unsigned int delegateHasKeyEquiv:1;
 unsigned int delegateHasAltKeyEquiv:1;
        unsigned int keyEquivalentMapIsDirty:1;
 unsigned int excludeMarkColumn:1;
 unsigned int isContextualMenu:1;
 unsigned int isAutoenablingItems:1;
        unsigned int RESERVED:18;

    } _mFlags;
    NSString *_name;
}

+ (void)setMenuZone:(NSZone *)aZone;
+ (NSZone *)menuZone;

+ (void)popUpContextMenu:(NSMenu*)menu withEvent:(NSEvent*)event forView:(NSView*)view;

+ (void)popUpContextMenu:(NSMenu*)menu withEvent:(NSEvent*)event forView:(NSView*)view withFont:(NSFont*)font;



+ (void)setMenuBarVisible:(BOOL)visible;
+ (BOOL)menuBarVisible;


- (id)initWithTitle:(NSString *)aTitle;

- (void)setTitle:(NSString *)aString;
- (NSString *)title;

- (void)setSupermenu:(NSMenu *)supermenu;
- (NSMenu *)supermenu;


- (void)insertItem:(NSMenuItem *)newItem atIndex:(NSInteger)index;
- (void)addItem:(NSMenuItem *)newItem;
- (NSMenuItem *)insertItemWithTitle:(NSString *)aString action:(SEL)aSelector keyEquivalent:(NSString *)charCode atIndex:(NSInteger)index;
- (NSMenuItem *)addItemWithTitle:(NSString *)aString action:(SEL)aSelector keyEquivalent:(NSString *)charCode;
- (void)removeItemAtIndex:(NSInteger)index;
- (void)removeItem:(NSMenuItem *)item;
- (void)setSubmenu:(NSMenu *)aMenu forItem:(NSMenuItem *)anItem;

- (NSArray *)itemArray;
- (NSInteger)numberOfItems;

- (NSInteger)indexOfItem:(NSMenuItem *)index;
- (NSInteger)indexOfItemWithTitle:(NSString *)aTitle;
- (NSInteger)indexOfItemWithTag:(NSInteger)aTag;
- (NSInteger)indexOfItemWithRepresentedObject:(id)object;
- (NSInteger)indexOfItemWithSubmenu:(NSMenu *)submenu;
- (NSInteger)indexOfItemWithTarget:(id)target andAction:(SEL)actionSelector;

- (NSMenuItem *)itemAtIndex:(NSInteger)index;
- (NSMenuItem *)itemWithTitle:(NSString *)aTitle;
- (NSMenuItem *)itemWithTag:(NSInteger)tag;

- (void)setAutoenablesItems:(BOOL)flag;
- (BOOL)autoenablesItems;

- (BOOL)performKeyEquivalent:(NSEvent *)theEvent;
- (void)update;

- (void)setMenuChangedMessagesEnabled:(BOOL)flag;
- (BOOL)menuChangedMessagesEnabled;

- (void)itemChanged:(NSMenuItem *)item;

- (void)helpRequested:(NSEvent *)eventPtr;

- (void)setMenuRepresentation:(id)menuRep;
- (id)menuRepresentation;

- (void)setContextMenuRepresentation:(id)menuRep;
- (id)contextMenuRepresentation;

- (void)setTearOffMenuRepresentation:(id)menuRep;
- (id)tearOffMenuRepresentation;

- (BOOL)isTornOff;


- (NSMenu *)attachedMenu;
- (BOOL)isAttached;
- (void)sizeToFit;
- (NSPoint)locationForSubmenu:(NSMenu *)aSubmenu;

- (void)performActionForItemAtIndex:(NSInteger)index;


- (void)setDelegate:(id)anObject;
- (id)delegate;



- (CGFloat)menuBarHeight;




- (void)cancelTracking;


- (NSMenuItem *)highlightedItem;

- (void)setShowsStateColumn:(BOOL)showsState;
- (BOOL)showsStateColumn;


@end

@interface NSMenu(NSSubmenuAction)
- (void)submenuAction:(id)sender;
@end

@interface NSObject(NSMenuValidation)
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem;
@end


@interface NSObject(NSMenuDelegate)
- (void)menuNeedsUpdate:(NSMenu*)menu;
- (NSInteger)numberOfItemsInMenu:(NSMenu*)menu;
- (BOOL)menu:(NSMenu*)menu updateItem:(NSMenuItem*)item atIndex:(NSInteger)index shouldCancel:(BOOL)shouldCancel;

- (BOOL)menuHasKeyEquivalent:(NSMenu*)menu forEvent:(NSEvent*)event target:(id*)target action:(SEL*)action;




- (void)menuWillOpen:(NSMenu *)menu;
- (void)menuDidClose:(NSMenu *)menu;


- (void)menu:(NSMenu *)menu willHighlightItem:(NSMenuItem *)item;


@end


extern "C" NSString *NSMenuWillSendActionNotification;
extern "C" NSString *NSMenuDidSendActionNotification;

extern "C" NSString *NSMenuDidAddItemNotification;
extern "C" NSString *NSMenuDidRemoveItemNotification;
extern "C" NSString *NSMenuDidChangeItemNotification;


extern "C" NSString *NSMenuDidBeginTrackingNotification ;
extern "C" NSString *NSMenuDidEndTrackingNotification ;
# 34 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColor.h" 1 3
# 33 "/System/Library/Frameworks/AppKit.framework/Headers/NSColor.h" 3
# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/CIColor.h" 1 3





# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/CIVector.h" 1 3
# 19 "/System/Library/Frameworks/QuartzCore.framework/Headers/CIVector.h" 3
@interface CIVector: NSObject <NSCopying, NSCoding>
{
    size_t _count;

    union {
 CGFloat vec[4];
 CGFloat *ptr;
    } _u;
}



+ (CIVector *)vectorWithValues:(const CGFloat *)values count:(size_t)count;

+ (CIVector *)vectorWithX:(CGFloat)x;
+ (CIVector *)vectorWithX:(CGFloat)x Y:(CGFloat)y;
+ (CIVector *)vectorWithX:(CGFloat)x Y:(CGFloat)y Z:(CGFloat)z;
+ (CIVector *)vectorWithX:(CGFloat)x Y:(CGFloat)y Z:(CGFloat)z W:(CGFloat)w;

+ (CIVector *)vectorWithString:(NSString *)representation;



- (id)initWithValues:(const CGFloat *)values count:(size_t)count;

- (id)initWithX:(CGFloat)x;
- (id)initWithX:(CGFloat)x Y:(CGFloat)y;
- (id)initWithX:(CGFloat)x Y:(CGFloat)y Z:(CGFloat)z;
- (id)initWithX:(CGFloat)x Y:(CGFloat)y Z:(CGFloat)z W:(CGFloat)w;

- (id)initWithString:(NSString *)representation;





- (CGFloat)valueAtIndex:(size_t)index;



- (size_t)count;



- (CGFloat)X;
- (CGFloat)Y;
- (CGFloat)Z;
- (CGFloat)W;





- (NSString *)stringRepresentation;

@end
# 7 "/System/Library/Frameworks/QuartzCore.framework/Headers/CIColor.h" 2 3

@interface CIColor : NSObject <NSCoding, NSCopying>
{
    void *_priv;
    void *_pad[3];
}



+ (CIColor *)colorWithCGColor:(CGColorRef)c;



+ (CIColor *)colorWithRed:(CGFloat)r green:(CGFloat)g blue:(CGFloat)b alpha:(CGFloat)a;
+ (CIColor *)colorWithRed:(CGFloat)r green:(CGFloat)g blue:(CGFloat)b;




+ (CIColor *)colorWithString:(NSString *)representation;



- (id)initWithCGColor:(CGColorRef)c;



- (size_t)numberOfComponents;



- (const CGFloat *)components;



- (CGFloat)alpha;



- (CGColorSpaceRef)colorSpace;



- (CGFloat)red;
- (CGFloat)green;
- (CGFloat)blue;



- (NSString *)stringRepresentation;

@end
# 34 "/System/Library/Frameworks/AppKit.framework/Headers/NSColor.h" 2 3


@class NSDictionary, NSPasteboard, NSImage, NSColorSpace;





@interface NSColor : NSObject <NSCopying, NSCoding>



+ (NSColor *)colorWithCalibratedWhite:(CGFloat)white alpha:(CGFloat)alpha;




+ (NSColor *)colorWithCalibratedHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha;
+ (NSColor *)colorWithCalibratedRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;




+ (NSColor *)colorWithDeviceWhite:(CGFloat)white alpha:(CGFloat)alpha;
+ (NSColor *)colorWithDeviceHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha;
+ (NSColor *)colorWithDeviceRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;
+ (NSColor *)colorWithDeviceCyan:(CGFloat)cyan magenta:(CGFloat)magenta yellow:(CGFloat)yellow black:(CGFloat)black alpha:(CGFloat)alpha;




+ (NSColor *)colorWithCatalogName:(NSString *)listName colorName:(NSString *)colorName;





+ (NSColor *)colorWithColorSpace:(NSColorSpace *)space components:(const CGFloat *)components count:(NSInteger)numberOfComponents;





+ (NSColor *)blackColor;
+ (NSColor *)darkGrayColor;
+ (NSColor *)lightGrayColor;
+ (NSColor *)whiteColor;
+ (NSColor *)grayColor;
+ (NSColor *)redColor;
+ (NSColor *)greenColor;
+ (NSColor *)blueColor;
+ (NSColor *)cyanColor;
+ (NSColor *)yellowColor;
+ (NSColor *)magentaColor;
+ (NSColor *)orangeColor;
+ (NSColor *)purpleColor;
+ (NSColor *)brownColor;
+ (NSColor *)clearColor;

+ (NSColor *)controlShadowColor;
+ (NSColor *)controlDarkShadowColor;
+ (NSColor *)controlColor;
+ (NSColor *)controlHighlightColor;
+ (NSColor *)controlLightHighlightColor;
+ (NSColor *)controlTextColor;
+ (NSColor *)controlBackgroundColor;
+ (NSColor *)selectedControlColor;
+ (NSColor *)secondarySelectedControlColor;
+ (NSColor *)selectedControlTextColor;
+ (NSColor *)disabledControlTextColor;
+ (NSColor *)textColor;
+ (NSColor *)textBackgroundColor;
+ (NSColor *)selectedTextColor;
+ (NSColor *)selectedTextBackgroundColor;
+ (NSColor *)gridColor;
+ (NSColor *)keyboardFocusIndicatorColor;
+ (NSColor *)windowBackgroundColor;

+ (NSColor *)scrollBarColor;
+ (NSColor *)knobColor;
+ (NSColor *)selectedKnobColor;

+ (NSColor *)windowFrameColor;
+ (NSColor *)windowFrameTextColor;

+ (NSColor *)selectedMenuItemColor;
+ (NSColor *)selectedMenuItemTextColor;

+ (NSColor *)highlightColor;
+ (NSColor *)shadowColor;

+ (NSColor *)headerColor;
+ (NSColor *)headerTextColor;


+ (NSColor *)alternateSelectedControlColor;
+ (NSColor *)alternateSelectedControlTextColor;



+ (NSArray *)controlAlternatingRowBackgroundColors;


- (NSColor *)highlightWithLevel:(CGFloat)val;
- (NSColor *)shadowWithLevel:(CGFloat)val;

+ (NSColor *)colorForControlTint:(NSControlTint)controlTint;


+ (NSControlTint) currentControlTint;





- (void)set;




- (void)setFill;
- (void)setStroke;




- (NSString *)colorSpaceName;
# 171 "/System/Library/Frameworks/AppKit.framework/Headers/NSColor.h" 3
- (NSColor *)colorUsingColorSpaceName:(NSString *)colorSpace;
- (NSColor *)colorUsingColorSpaceName:(NSString *)colorSpace device:(NSDictionary *)deviceDescription;





- (NSColor *)colorUsingColorSpace:(NSColorSpace *)space;





- (NSColor *)blendedColorWithFraction:(CGFloat)fraction ofColor:(NSColor *)color;




- (NSColor *)colorWithAlphaComponent:(CGFloat)alpha;






- (NSString *)catalogNameComponent;
- (NSString *)colorNameComponent;



- (NSString *)localizedCatalogNameComponent;
- (NSString *)localizedColorNameComponent;



- (CGFloat)redComponent;
- (CGFloat)greenComponent;
- (CGFloat)blueComponent;
- (void)getRed:(CGFloat *)red green:(CGFloat *)green blue:(CGFloat *)blue alpha:(CGFloat *)alpha;



- (CGFloat)hueComponent;
- (CGFloat)saturationComponent;
- (CGFloat)brightnessComponent;
- (void)getHue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha;




- (CGFloat)whiteComponent;
- (void)getWhite:(CGFloat *)white alpha:(CGFloat *)alpha;




- (CGFloat)cyanComponent;
- (CGFloat)magentaComponent;
- (CGFloat)yellowComponent;
- (CGFloat)blackComponent;
- (void)getCyan:(CGFloat *)cyan magenta:(CGFloat *)magenta yellow:(CGFloat *)yellow black:(CGFloat *)black alpha:(CGFloat *)alpha;





- (NSColorSpace *)colorSpace;
- (NSInteger)numberOfComponents;
- (void)getComponents:(CGFloat *)components;





- (CGFloat)alphaComponent;




+ (NSColor *)colorFromPasteboard:(NSPasteboard *)pasteBoard;
- (void)writeToPasteboard:(NSPasteboard *)pasteBoard;



+ (NSColor *)colorWithPatternImage:(NSImage*)image;
- (NSImage *)patternImage;



- (void)drawSwatchInRect:(NSRect)rect;






+ (void)setIgnoresAlpha:(BOOL)flag;
+ (BOOL)ignoresAlpha;

@end



@interface NSColor (NSQuartzCoreAdditions)
+ (NSColor *)colorWithCIColor:(CIColor *)color;
@end

@interface CIColor (NSAppKitAdditions)
- (id)initWithColor:(NSColor *)color;
@end


@interface NSCoder(NSAppKitColorExtensions)



- (NSColor *)decodeNXColor;

@end

extern "C" NSString *NSSystemColorsDidChangeNotification;
# 36 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorSpace.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorSpace.h" 3
@class NSData;




enum {
    NSUnknownColorSpaceModel = -1,
    NSGrayColorSpaceModel,
    NSRGBColorSpaceModel,
    NSCMYKColorSpaceModel,
    NSLABColorSpaceModel,
    NSDeviceNColorSpaceModel
};
typedef NSInteger NSColorSpaceModel;


@interface NSColorSpace : NSObject <NSCoding> {
    id _profile;
    struct {
 unsigned int colorSpaceID:8;
 unsigned int storageType:3;
 unsigned int replacedDuringUnarchiving:1;
 unsigned int :20;



    } _flags;
    void *__cgColorSpace;
    void *_reserved[5];
}

- (id)initWithICCProfileData:(NSData *)iccData;
- (NSData *)ICCProfileData;

- (id)initWithColorSyncProfile:(void * )prof;
- (void * )colorSyncProfile;

- (NSInteger)numberOfColorComponents;
- (NSColorSpaceModel)colorSpaceModel;
- (NSString *)localizedName;

+ (NSColorSpace *)genericRGBColorSpace;
+ (NSColorSpace *)genericGrayColorSpace;
+ (NSColorSpace *)genericCMYKColorSpace;
+ (NSColorSpace *)deviceRGBColorSpace;
+ (NSColorSpace *)deviceGrayColorSpace;
+ (NSColorSpace *)deviceCMYKColorSpace;

@end
# 37 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSBitmapImageRep.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSImageRep.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSImageRep.h" 3
@class NSArray, NSPasteboard, NSURL;



enum {
    NSImageRepMatchesDevice = 0
};

@interface NSImageRep : NSObject <NSCopying, NSCoding> {

    struct __repFlags {
 unsigned int hasAlpha:1;
 unsigned int isOpaque:1;
        unsigned int cacheParamsComputed:1;
        unsigned int cacheAlphaComputed:1;
        unsigned int loadState:2;
        unsigned int keepCacheWindow:1;
        unsigned int reserved:1;
        unsigned int bitsPerSample:8;
 unsigned int gsaved:16;
    } _repFlags;
    NSString *_colorSpaceName;
    NSSize _size;
    int _pixelsWide;
    int _pixelsHigh;
}



- (BOOL)draw;
- (BOOL)drawAtPoint:(NSPoint)point;
- (BOOL)drawInRect:(NSRect)rect;



- (void)setSize:(NSSize)aSize;
- (NSSize)size;
- (void)setAlpha:(BOOL)flag;
- (BOOL)hasAlpha;
- (void)setOpaque:(BOOL)flag;
- (BOOL)isOpaque;
- (void)setColorSpaceName:(NSString *)string;
- (NSString *)colorSpaceName;
- (void)setBitsPerSample:(NSInteger)anInt;
- (NSInteger)bitsPerSample;
- (void)setPixelsWide:(NSInteger)anInt;
- (NSInteger)pixelsWide;
- (void)setPixelsHigh:(NSInteger)anInt;
- (NSInteger)pixelsHigh;






+ (void)registerImageRepClass:(Class)imageRepClass;
+ (void)unregisterImageRepClass:(Class)imageRepClass;
+ (NSArray *)registeredImageRepClasses;

+ (Class)imageRepClassForType:(NSString *)type;

+ (Class)imageRepClassForData:(NSData *)data;



+ (BOOL)canInitWithData:(NSData *)data;





+ (NSArray *)imageUnfilteredTypes;



+ (NSArray *)imageTypes;





+ (BOOL)canInitWithPasteboard:(NSPasteboard *)pasteboard;



+ (NSArray *)imageRepsWithContentsOfFile:(NSString *)filename;
+ (id)imageRepWithContentsOfFile:(NSString *)filename;
+ (NSArray *)imageRepsWithContentsOfURL:(NSURL *)url;
+ (id)imageRepWithContentsOfURL:(NSURL *)url;
+ (NSArray *)imageRepsWithPasteboard:(NSPasteboard *)pasteboard;
+ (id)imageRepWithPasteboard:(NSPasteboard *)pasteboard;

@end

@interface NSImageRep(NSDeprecated)



+ (Class)imageRepClassForFileType:(NSString *)type;
+ (Class)imageRepClassForPasteboardType:(NSString *)type;
+ (NSArray *)imageFileTypes;
+ (NSArray *)imagePasteboardTypes;
+ (NSArray *)imageUnfilteredFileTypes;
+ (NSArray *)imageUnfilteredPasteboardTypes;

@end



extern "C" NSString *NSImageRepRegistryDidChangeNotification;
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSBitmapImageRep.h" 2 3

@class NSColor;

enum {
    NSTIFFCompressionNone = 1,
    NSTIFFCompressionCCITTFAX3 = 3,
    NSTIFFCompressionCCITTFAX4 = 4,
    NSTIFFCompressionLZW = 5,
    NSTIFFCompressionJPEG = 6,
    NSTIFFCompressionNEXT = 32766,
    NSTIFFCompressionPackBits = 32773,
    NSTIFFCompressionOldJPEG = 32865
};
typedef NSUInteger NSTIFFCompression;

enum {
    NSTIFFFileType,
    NSBMPFileType,
    NSGIFFileType,
    NSJPEGFileType,
    NSPNGFileType,

    NSJPEG2000FileType

};
typedef NSUInteger NSBitmapImageFileType;


enum {
    NSImageRepLoadStatusUnknownType = -1,
    NSImageRepLoadStatusReadingHeader = -2,
    NSImageRepLoadStatusWillNeedAllData = -3,
    NSImageRepLoadStatusInvalidData = -4,
    NSImageRepLoadStatusUnexpectedEOF = -5,
    NSImageRepLoadStatusCompleted = -6
};
typedef NSInteger NSImageRepLoadStatus;



enum {
    NSAlphaFirstBitmapFormat = 1 << 0,
    NSAlphaNonpremultipliedBitmapFormat = 1 << 1,
    NSFloatingPointSamplesBitmapFormat = 1 << 2
};
typedef NSUInteger NSBitmapFormat;


extern "C" NSString* NSImageCompressionMethod;
extern "C" NSString* NSImageCompressionFactor;
extern "C" NSString* NSImageDitherTransparency;
extern "C" NSString* NSImageRGBColorTable;
extern "C" NSString* NSImageInterlaced;
extern "C" NSString* NSImageColorSyncProfileData;
extern "C" NSString* NSImageFrameCount ;
extern "C" NSString* NSImageCurrentFrame ;
extern "C" NSString* NSImageCurrentFrameDuration ;
extern "C" NSString* NSImageLoopCount ;
extern "C" NSString* NSImageGamma ;
extern "C" NSString* NSImageProgressive ;
extern "C" NSString* NSImageEXIFData ;

@interface NSBitmapImageRep : NSImageRep {

    struct __bitmapRepFlags {
        unsigned int bitsPerPixel:8;
 unsigned int isPlanar:1;
 unsigned int explicitPlanes:1;
 unsigned int isUnpacked:1;
 unsigned int dataLoaded:1;
        unsigned int numColors:4;
        unsigned int memory:2;
        unsigned int compressionFactor:14;
        unsigned int imageNumber:8;
        unsigned int bitmapFormat:3;
        unsigned int reserved:1;
 unsigned int compression:20;
    } _moreRepFlags;
    unsigned int _bytesPerRow;
    unsigned char *_data;
    NSData *_tiffData;
    id _properties;
}

- (id)initWithFocusedViewRect:(NSRect)rect;

- (id)initWithBitmapDataPlanes:(unsigned char **)planes pixelsWide:(NSInteger)width pixelsHigh:(NSInteger)height bitsPerSample:(NSInteger)bps samplesPerPixel:(NSInteger)spp hasAlpha:(BOOL)alpha isPlanar:(BOOL)isPlanar colorSpaceName:(NSString *)colorSpaceName bytesPerRow:(NSInteger)rBytes bitsPerPixel:(NSInteger)pBits;

- (id)initWithBitmapDataPlanes:(unsigned char **)planes pixelsWide:(NSInteger)width pixelsHigh:(NSInteger)height bitsPerSample:(NSInteger)bps samplesPerPixel:(NSInteger)spp hasAlpha:(BOOL)alpha isPlanar:(BOOL)isPlanar colorSpaceName:(NSString *)colorSpaceName bitmapFormat:(NSBitmapFormat)bitmapFormat bytesPerRow:(NSInteger)rBytes bitsPerPixel:(NSInteger)pBits;


+ (NSArray *)imageRepsWithData:(NSData *)tiffData;

+ (id)imageRepWithData:(NSData *)tiffData;
- (id)initWithData:(NSData *)tiffData;

- (unsigned char *)bitmapData;
- (void)getBitmapDataPlanes:(unsigned char **)data;
- (BOOL)isPlanar;
- (NSInteger)samplesPerPixel;
- (NSInteger)bitsPerPixel;
- (NSInteger)bytesPerRow;
- (NSInteger)bytesPerPlane;
- (NSInteger)numberOfPlanes;

- (NSBitmapFormat)bitmapFormat;


- (void)getCompression:(NSTIFFCompression *)compression factor:(float *)factor;
- (void)setCompression:(NSTIFFCompression)compression factor:(float)factor;

- (NSData *)TIFFRepresentation;
- (NSData *)TIFFRepresentationUsingCompression:(NSTIFFCompression)comp factor:(float)factor;

+ (NSData *)TIFFRepresentationOfImageRepsInArray:(NSArray *)array;
+ (NSData *)TIFFRepresentationOfImageRepsInArray:(NSArray *)array usingCompression:(NSTIFFCompression)comp factor:(float)factor;

+ (void)getTIFFCompressionTypes:(const NSTIFFCompression **)list count:(NSInteger *)numTypes;
+ (NSString *)localizedNameForTIFFCompressionType:(NSTIFFCompression)compression;
- (BOOL)canBeCompressedUsing:(NSTIFFCompression)compression;





- (void)colorizeByMappingGray:(CGFloat)midPoint toColor:(NSColor *)midPointColor blackMapping:(NSColor *)shadowColor whiteMapping:(NSColor *)lightColor;


- (id)initForIncrementalLoad;
- (NSInteger)incrementalLoadFromData:(NSData*)data complete:(BOOL)complete;



- (void)setColor:(NSColor*)color atX:(NSInteger)x y:(NSInteger)y;
- (NSColor*)colorAtX:(NSInteger)x y:(NSInteger)y;

- (void)getPixel:(NSUInteger[])p atX:(NSInteger)x y:(NSInteger)y;
- (void)setPixel:(NSUInteger[])p atX:(NSInteger)x y:(NSInteger)y;

@end


@interface NSBitmapImageRep (NSBitmapImageFileTypeExtensions)

+ (NSData *)representationOfImageRepsInArray:(NSArray *)imageReps usingType:(NSBitmapImageFileType)storageType properties:(NSDictionary *)properties;

- (NSData *)representationUsingType:(NSBitmapImageFileType)storageType properties:(NSDictionary *)properties;

- (void)setProperty:(NSString *)property withValue:(id)value;
- (id)valueForProperty:(NSString *)property;

@end
# 38 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowser.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowser.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDragging.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSDragging.h" 3
@class NSImage, NSPasteboard, NSWindow, NSURL, NSArray;

typedef NSUInteger NSDragOperation;

enum {
    NSDragOperationNone = 0,
    NSDragOperationCopy = 1,
    NSDragOperationLink = 2,
    NSDragOperationGeneric = 4,
    NSDragOperationPrivate = 8,
    NSDragOperationAll_Obsolete = 15,
    NSDragOperationMove = 16,
    NSDragOperationDelete = 32,
    NSDragOperationEvery = (2147483647L * 2UL + 1UL)
};
# 35 "/System/Library/Frameworks/AppKit.framework/Headers/NSDragging.h" 3
@protocol NSDraggingInfo
- (NSWindow *)draggingDestinationWindow;
- (NSDragOperation)draggingSourceOperationMask;
- (NSPoint)draggingLocation;
- (NSPoint)draggedImageLocation;
- (NSImage *)draggedImage;
- (NSPasteboard *)draggingPasteboard;
- (id)draggingSource;
- (NSInteger)draggingSequenceNumber;
- (void)slideDraggedImageTo:(NSPoint)screenPoint;

- (NSArray *)namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination;

@end






@interface NSObject(NSDraggingDestination)
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender;
- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender;
- (void)draggingExited:(id <NSDraggingInfo>)sender;
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender;
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender;
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender;

- (void)draggingEnded:(id <NSDraggingInfo>)sender;


- (BOOL)wantsPeriodicDraggingUpdates;

@end






@interface NSObject(NSDraggingSource)
- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag;

- (NSArray *)namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination;

- (void)draggedImage:(NSImage *)image beganAt:(NSPoint)screenPoint;
- (void)draggedImage:(NSImage *)image endedAt:(NSPoint)screenPoint operation:(NSDragOperation)operation;
- (void)draggedImage:(NSImage *)image movedTo:(NSPoint)screenPoint;
- (BOOL)ignoreModifierKeysWhileDragging;


- (void)draggedImage:(NSImage *)image endedAt:(NSPoint)screenPoint deposited:(BOOL)flag;
@end
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowser.h" 2 3




@class NSMatrix, NSScroller, NSMutableArray, NSIndexSet;

typedef struct __Brflags {

    unsigned int allowsMultipleSelection:1;
    unsigned int allowsBranchSelection:1;
    unsigned int reuseColumns:1;
    unsigned int isTitled:1;
    unsigned int titleFromPrevious:1;
    unsigned int separateColumns:1;
    unsigned int delegateImplementsWillDisplayCell:1;
    unsigned int delegateSetsTitles:1;
    unsigned int delegateSelectsCellsByString:1;
    unsigned int delegateDoesNotCreateRowsInMatrix:1;
    unsigned int delegateValidatesColumns:1;
    unsigned int acceptArrowKeys:1;
    unsigned int dontDrawTitles:1;
    unsigned int sendActionOnArrowKeys:1;
    unsigned int prohibitEmptySel:1;
    unsigned int hasHorizontalScroller:1;
    unsigned int time:1;
    unsigned int allowsIncrementalSearching:1;
    unsigned int delegateSelectsCellsByRow:1;
    unsigned int disableCompositing:6;
    unsigned int refusesFirstResponder:1;
    unsigned int acceptsFirstMouse:1;
    unsigned int actionNeedsToBeSent:1;
    unsigned int usesSmallSizeTitleFont:1;
    unsigned int usesSmallScrollers:1;
    unsigned int prefersAllColumnUserResizing:1;
    unsigned int firstVisibleCalculationDisabled:1;
# 74 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowser.h" 3
} _Brflags;



enum {
    NSBrowserNoColumnResizing = 0,
    NSBrowserAutoColumnResizing = 1,
    NSBrowserUserColumnResizing = 2
};
typedef NSUInteger NSBrowserColumnResizingType;







enum { NSBrowserDropOn, NSBrowserDropAbove };
typedef NSUInteger NSBrowserDropOperation;



@interface NSBrowser : NSControl
{

    id _target;
    SEL _action;
    id _delegate;
    SEL _doubleAction;
    Class _matrixClass;
    id _cellPrototype;
    NSSize _columnSize;
    short _numberOfVisibleColumns;
    short _minColumnWidth;
    short _firstVisibleColumn;
    short _maxVisibleColumns;
    NSMutableArray *_titles;
    NSString *_pathSeparator;
    NSMutableArray *_columns;
    id _brAuxiliaryStorage;
    NSString *_firstColumnTitle;
    NSScroller *_scroller;
    _Brflags _brflags;
}

+ (Class)cellClass;

- (void)loadColumnZero;
- (BOOL)isLoaded;

- (void)setDoubleAction:(SEL)aSelector;
- (SEL)doubleAction;
- (void)setMatrixClass:(Class)factoryId;
- (Class)matrixClass;
- (void)setCellClass:(Class)factoryId;
- (void)setCellPrototype:(NSCell *)aCell;
- (id)cellPrototype;
- (void)setDelegate:(id)anObject;
- (id)delegate;
- (void)setReusesColumns:(BOOL)flag;
- (BOOL)reusesColumns;

- (void)setHasHorizontalScroller:(BOOL)flag;
- (BOOL)hasHorizontalScroller;
- (void)setSeparatesColumns:(BOOL)flag;
- (BOOL)separatesColumns;
- (void)setTitled:(BOOL)flag;
- (BOOL)isTitled;
- (void)setMinColumnWidth:(CGFloat)columnWidth;
- (CGFloat)minColumnWidth;

- (void)setMaxVisibleColumns:(NSInteger)columnCount;
- (NSInteger)maxVisibleColumns;


- (void)setAllowsMultipleSelection:(BOOL)flag;
- (BOOL)allowsMultipleSelection;
- (void)setAllowsBranchSelection:(BOOL)flag;
- (BOOL)allowsBranchSelection;
- (void)setAllowsEmptySelection:(BOOL)flag;
- (BOOL)allowsEmptySelection;
- (void)setTakesTitleFromPreviousColumn:(BOOL)flag;
- (BOOL)takesTitleFromPreviousColumn;

- (void)setAcceptsArrowKeys:(BOOL)flag;
- (BOOL)acceptsArrowKeys;
- (void)setSendsActionOnArrowKeys:(BOOL)flag;
- (BOOL)sendsActionOnArrowKeys;

- (void)setTitle:(NSString *)aString ofColumn:(NSInteger)column;
- (NSString *)titleOfColumn:(NSInteger)column;
- (void)setPathSeparator:(NSString *)newString;
- (NSString *)pathSeparator;
- (BOOL)setPath:(NSString *)path;
- (NSString *)path;
- (NSString *)pathToColumn:(NSInteger)column;

- (NSInteger)selectedColumn;
- (id)selectedCell;
- (id)selectedCellInColumn:(NSInteger)column;
- (NSArray *)selectedCells;
- (void)selectRow:(NSInteger)row inColumn:(NSInteger)column;
- (NSInteger)selectedRowInColumn:(NSInteger)column;





- (void)selectRowIndexes:(NSIndexSet *)indexes inColumn:(NSInteger)column;



- (NSIndexSet *)selectedRowIndexesInColumn:(NSInteger)column;



- (void)reloadColumn:(NSInteger)column;
- (void)validateVisibleColumns;
- (void)scrollColumnsRightBy:(NSInteger)shiftAmount;
- (void)scrollColumnsLeftBy:(NSInteger)shiftAmount;
- (void)scrollColumnToVisible:(NSInteger)column;

- (void)setLastColumn:(NSInteger)column;
- (NSInteger)lastColumn;
- (void)addColumn;
- (NSInteger)numberOfVisibleColumns;
- (NSInteger)firstVisibleColumn;
- (NSInteger)lastVisibleColumn;
- (NSInteger)columnOfMatrix:(NSMatrix *)matrix;
- (NSMatrix *)matrixInColumn:(NSInteger)column;
- (id)loadedCellAtRow:(NSInteger)row column:(NSInteger)col;
- (void)selectAll:(id)sender;
- (void)tile;
- (void)doClick:(id)sender;
- (void)doDoubleClick:(id)sender;
- (BOOL)sendAction;

- (NSRect)titleFrameOfColumn:(NSInteger)column;
- (void)drawTitleOfColumn:(NSInteger)column inRect:(NSRect)aRect;
- (CGFloat)titleHeight;
- (NSRect)frameOfColumn:(NSInteger)column;
- (NSRect)frameOfInsideOfColumn:(NSInteger)column;




- (CGFloat)columnWidthForColumnContentWidth:(CGFloat)columnContentWidth;
- (CGFloat)columnContentWidthForColumnWidth:(CGFloat)columnWidth;







- (void)setColumnResizingType:(NSBrowserColumnResizingType)columnResizingType;
- (NSBrowserColumnResizingType)columnResizingType;


- (void)setPrefersAllColumnUserResizing:(BOOL)prefersAllColumnResizing;
- (BOOL)prefersAllColumnUserResizing;


- (void)setWidth:(CGFloat)columnWidth ofColumn:(NSInteger)columnIndex;
- (CGFloat)widthOfColumn:(NSInteger)column;


- (void)setColumnsAutosaveName:(NSString *)name;
- (NSString *)columnsAutosaveName;


+ (void)removeSavedColumnsWithAutosaveName:(NSString *)name;






#pragma mark -
#pragma mark **** Drag and Drop Support ****



- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column withEvent:(NSEvent *)event;



- (NSImage *)draggingImageForRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column withEvent:(NSEvent *)event offset:(NSPointPointer)dragImageOffset;



- (void)setDraggingSourceOperationMask:(NSDragOperation)mask forLocal:(BOOL)isLocal;

#pragma mark -



- (BOOL)allowsTypeSelect;
- (void)setAllowsTypeSelect:(BOOL)value;



- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;



#pragma mark **** Deprecated NSBrowser methods ****


- (void)displayColumn:(NSInteger)column;


- (void)displayAllColumns;


- (void)scrollViaScroller:(NSScroller *)sender;


- (void)updateScroller;

#pragma mark -

@end





extern "C" NSString * NSBrowserColumnConfigurationDidChangeNotification ;




@interface NSObject(NSBrowserDelegate)

- (NSInteger)browser:(NSBrowser *)sender numberOfRowsInColumn:(NSInteger)column;
- (void)browser:(NSBrowser *)sender createRowsForColumn:(NSInteger)column inMatrix:(NSMatrix *)matrix;

- (void)browser:(NSBrowser *)sender willDisplayCell:(id)cell atRow:(NSInteger)row column:(NSInteger)column;

- (NSString *)browser:(NSBrowser *)sender titleOfColumn:(NSInteger)column;
- (BOOL)browser:(NSBrowser *)sender selectCellWithString:(NSString *)title inColumn:(NSInteger)column;
- (BOOL)browser:(NSBrowser *)sender selectRow:(NSInteger)row inColumn:(NSInteger)column;
- (BOOL)browser:(NSBrowser *)sender isColumnValid:(NSInteger)column;
- (void)browserWillScroll:(NSBrowser *)sender;
- (void)browserDidScroll:(NSBrowser *)sender;
# 332 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowser.h" 3
- (CGFloat)browser:(NSBrowser *)browser shouldSizeColumn:(NSInteger)columnIndex forUserResize:(BOOL)forUserResize toWidth:(CGFloat)suggestedWidth;





- (CGFloat)browser:(NSBrowser *)browser sizeToFitWidthOfColumn:(NSInteger)columnIndex;




- (void)browserColumnConfigurationDidChange:(NSNotification *)notification;
# 352 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowser.h" 3
- (BOOL)browser:(NSBrowser *)browser shouldShowCellExpansionForRow:(NSInteger)row column:(NSInteger)column;


#pragma mark -
#pragma mark **** Optional Drag and Drop Support Methods ****

#pragma mark ** Dragging Source Methods **



- (BOOL)browser:(NSBrowser *)browser writeRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column toPasteboard:(NSPasteboard *)pasteboard;



- (NSArray *)browser:(NSBrowser *)browser namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column;



- (BOOL)browser:(NSBrowser *)browser canDragRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column withEvent:(NSEvent *)event;



- (NSImage *)browser:(NSBrowser *)browser draggingImageForRowsWithIndexes:(NSIndexSet *)rowIndexes inColumn:(NSInteger)column withEvent:(NSEvent *)event offset:(NSPointPointer)dragImageOffset;

#pragma mark ** Dragging Destination Methods **







- (NSDragOperation)browser:(NSBrowser *)browser validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger *)row column:(NSInteger *)column dropOperation:(NSBrowserDropOperation *)dropOperation;



- (BOOL)browser:(NSBrowser *)browser acceptDrop:(id <NSDraggingInfo>)info atRow:(NSInteger)row column:(NSInteger)column dropOperation:(NSBrowserDropOperation)dropOperation;

#pragma mark -

#pragma mark **** Type Select Support ****




- (NSString *)browser:(NSBrowser *)browser typeSelectStringForRow:(NSInteger)row inColumn:(NSInteger)column;




- (BOOL)browser:(NSBrowser *)browser shouldTypeSelectForEvent:(NSEvent *)event withCurrentSearchString:(NSString *)searchString;




- (NSInteger)browser:(NSBrowser *)browser nextTypeSelectMatchFromRow:(NSInteger)startRow toRow:(NSInteger)endRow inColumn:(NSInteger)column forString:(NSString *)searchString;

#pragma mark -



@end
# 39 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowserCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSBrowserCell.h" 3
@class NSImage;

@interface NSBrowserCell : NSCell

+ (NSImage *)branchImage;
+ (NSImage *)highlightedBranchImage;

- (NSColor *)highlightColorInView:(NSView *)controlView;

- (BOOL)isLeaf;
- (void)setLeaf:(BOOL)flag;
- (BOOL)isLoaded;
- (void)setLoaded:(BOOL)flag;
- (void)reset;
- (void)set;
- (void)setImage:(NSImage *)image;
- (NSImage *)image;
- (void)setAlternateImage:(NSImage *)newAltImage;
- (NSImage *)alternateImage;

@end
# 40 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSCachedImageRep.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSCachedImageRep.h" 3
@class NSWindow;

@interface NSCachedImageRep : NSImageRep {

    NSPoint _origin;
    NSWindow *_window;
    void *_cache;
}


- (id)initWithWindow:(NSWindow *)win rect:(NSRect)rect;


- (id)initWithSize:(NSSize)size depth:(NSWindowDepth)depth separate:(BOOL)flag alpha:(BOOL)alpha;

- (NSWindow *)window;
- (NSRect)rect;

@end
# 41 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSCIImageRep.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSCIImageRep.h" 3
# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/CIImage.h" 1 3







# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/CVImageBuffer.h" 1 3
# 1 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 1 3
# 23 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 3
# 1 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 1 3
# 23 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
# 1 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 1 3
# 25 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 3
extern "C" {
# 36 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 3
typedef uint64_t CVOptionFlags;
# 60 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 3
struct CVSMPTETime
{
    SInt16 subframes;
    SInt16 subframeDivisor;
    UInt32 counter;
    UInt32 type;
    UInt32 flags;
    SInt16 hours;
    SInt16 minutes;
    SInt16 seconds;
    SInt16 frames;
};
typedef struct CVSMPTETime CVSMPTETime;
# 94 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 3
enum
{
    kCVSMPTETimeType24 = 0,
    kCVSMPTETimeType25 = 1,
    kCVSMPTETimeType30Drop = 2,
    kCVSMPTETimeType30 = 3,
    kCVSMPTETimeType2997 = 4,
    kCVSMPTETimeType2997Drop = 5,
    kCVSMPTETimeType60 = 6,
    kCVSMPTETimeType5994 = 7
};
# 114 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 3
enum
{
    kCVSMPTETimeValid = (1L << 0),
    kCVSMPTETimeRunning = (1L << 1)
};


enum {
    kCVTimeIsIndefinite = 1 << 0
};

typedef struct
{
    int64_t timeValue;
    int32_t timeScale;
    int32_t flags;
} CVTime;
# 159 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h" 3
typedef struct
{
    uint32_t version;
    int32_t videoTimeScale;
    int64_t videoTime;
    uint64_t hostTime;
    double rateScalar;
    int64_t videoRefreshPeriod;
    CVSMPTETime smpteTime;
    uint64_t flags;
    uint64_t reserved;
} CVTimeStamp;


enum
{
    kCVTimeStampVideoTimeValid = (1L << 0),
    kCVTimeStampHostTimeValid = (1L << 1),
    kCVTimeStampSMPTETimeValid = (1L << 2),
    kCVTimeStampVideoRefreshPeriodValid = (1L << 3),
    kCVTimeStampRateScalarValid = (1L << 4),


    kCVTimeStampTopField = (1L << 16),
    kCVTimeStampBottomField = (1L << 17)
};


enum
{
    kCVTimeStampVideoHostTimeValid = (kCVTimeStampVideoTimeValid | kCVTimeStampHostTimeValid),
    kCVTimeStampIsInterlaced = (kCVTimeStampTopField | kCVTimeStampBottomField)
};

extern const CVTime kCVZeroTime;
extern const CVTime kCVIndefiniteTime;


}
# 24 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 2 3
# 1 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVReturn.h" 1 3
# 24 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVReturn.h" 3
extern "C" {
# 51 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVReturn.h" 3
enum _CVReturn
{
    kCVReturnSuccess = 0,

    kCVReturnFirst = -6660,

    kCVReturnError = kCVReturnFirst,
    kCVReturnInvalidArgument = -6661,
    kCVReturnAllocationFailed = -6662,


    kCVReturnInvalidDisplay = -6670,
    kCVReturnDisplayLinkAlreadyRunning = -6671,
    kCVReturnDisplayLinkNotRunning = -6672,
    kCVReturnDisplayLinkCallbacksNotSet = -6673,


    kCVReturnInvalidPixelFormat = -6680,
    kCVReturnInvalidSize = -6681,
    kCVReturnInvalidPixelBufferAttributes = -6682,
    kCVReturnPixelBufferNotOpenGLCompatible = -6683,


    kCVReturnPoolAllocationFailed = -6690,
    kCVReturnInvalidPoolAttributes = -6691,

    kCVReturnLast = -6699

};
typedef int32_t CVReturn;


}
# 25 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 2 3





extern "C" {


#pragma mark CVBufferRef attribute keys



extern const CFStringRef kCVBufferPropagatedAttachmentsKey ;
extern const CFStringRef kCVBufferNonPropagatedAttachmentsKey ;

#pragma mark CVBufferRef attachment keys

extern const CFStringRef kCVBufferMovieTimeKey ;
extern const CFStringRef kCVBufferTimeValueKey ;
extern const CFStringRef kCVBufferTimeScaleKey ;


#pragma mark CVBufferRef

enum {
 kCVAttachmentMode_ShouldNotPropagate = 0,
 kCVAttachmentMode_ShouldPropagate = 1
};
typedef uint32_t CVAttachmentMode;






typedef struct __CVBuffer *CVBufferRef;
# 69 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
extern CVBufferRef CVBufferRetain(CVBufferRef buffer) ;






extern void CVBufferRelease(CVBufferRef buffer) ;

#pragma mark CVBufferAttachment
# 90 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
extern void CVBufferSetAttachment(CVBufferRef buffer, CFStringRef key, CFTypeRef value, CVAttachmentMode attachmentMode) ;
# 102 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
extern CFTypeRef CVBufferGetAttachment(CVBufferRef buffer, CFStringRef key, CVAttachmentMode *attachmentMode) ;
# 111 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
extern void CVBufferRemoveAttachment(CVBufferRef buffer, CFStringRef key) ;







extern void CVBufferRemoveAllAttachments(CVBufferRef buffer) ;
# 129 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
extern CFDictionaryRef CVBufferGetAttachments(CVBufferRef buffer, CVAttachmentMode attachmentMode) ;







extern void CVBufferSetAttachments(CVBufferRef buffer, CFDictionaryRef theAttachments, CVAttachmentMode attachmentMode) ;
# 147 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVBuffer.h" 3
extern void CVBufferPropagateAttachments(CVBufferRef sourceBuffer, CVBufferRef destinationBuffer) ;


}
# 24 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 2 3


extern "C" {


#pragma mark CVImageBufferRef attachment keys

extern const CFStringRef kCVImageBufferCGColorSpaceKey ;

extern const CFStringRef kCVImageBufferCleanApertureKey ;
extern const CFStringRef kCVImageBufferCleanApertureWidthKey ;
extern const CFStringRef kCVImageBufferCleanApertureHeightKey ;
extern const CFStringRef kCVImageBufferCleanApertureHorizontalOffsetKey ;
extern const CFStringRef kCVImageBufferCleanApertureVerticalOffsetKey ;
extern const CFStringRef kCVImageBufferPreferredCleanApertureKey ;

extern const CFStringRef kCVImageBufferFieldCountKey ;
extern const CFStringRef kCVImageBufferFieldDetailKey ;
extern const CFStringRef kCVImageBufferFieldDetailTemporalTopFirst ;
extern const CFStringRef kCVImageBufferFieldDetailTemporalBottomFirst ;
extern const CFStringRef kCVImageBufferFieldDetailSpatialFirstLineEarly ;
extern const CFStringRef kCVImageBufferFieldDetailSpatialFirstLineLate ;

extern const CFStringRef kCVImageBufferPixelAspectRatioKey ;
extern const CFStringRef kCVImageBufferPixelAspectRatioHorizontalSpacingKey ;
extern const CFStringRef kCVImageBufferPixelAspectRatioVerticalSpacingKey ;

extern const CFStringRef kCVImageBufferDisplayDimensionsKey ;
extern const CFStringRef kCVImageBufferDisplayWidthKey ;
extern const CFStringRef kCVImageBufferDisplayHeightKey ;

extern const CFStringRef kCVImageBufferGammaLevelKey ;
extern const CFStringRef kCVImageBufferYCbCrMatrixKey ;
extern const CFStringRef kCVImageBufferYCbCrMatrix_ITU_R_709_2 ;
extern const CFStringRef kCVImageBufferYCbCrMatrix_ITU_R_601_4 ;
extern const CFStringRef kCVImageBufferYCbCrMatrix_SMPTE_240M_1995 ;


#pragma mark CVImageBufferRef






typedef CVBufferRef CVImageBufferRef;
# 79 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 3
extern CGSize CVImageBufferGetEncodedSize(CVImageBufferRef imageBuffer) ;
# 89 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 3
extern CGSize CVImageBufferGetDisplaySize(CVImageBufferRef imageBuffer) ;
# 102 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 3
extern CGRect CVImageBufferGetCleanRect(CVImageBufferRef imageBuffer) ;
# 111 "/System/Library/Frameworks/CoreVideo.framework/Headers/CVImageBuffer.h" 3
extern CGColorSpaceRef CVImageBufferGetColorSpace(CVImageBufferRef imageBuffer) ;


}
# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/CVImageBuffer.h" 2 3
# 9 "/System/Library/Frameworks/QuartzCore.framework/Headers/CIImage.h" 2 3

@class NSData, NSURL, NSDictionary, CIContext, CIFilterShape, CIColor;

@interface CIImage : NSObject <NSCoding, NSCopying>
{
    void *_state;
    void *_priv;
}



typedef int CIFormat;

extern CIFormat kCIFormatARGB8 ;
extern CIFormat kCIFormatRGBA16 ;
extern CIFormat kCIFormatRGBAf ;






extern NSString *kCIImageColorSpace ;



+ (CIImage *)imageWithCGImage:(CGImageRef)image;
+ (CIImage *)imageWithCGImage:(CGImageRef)image options:(NSDictionary *)d;



+ (CIImage *)imageWithCGLayer:(CGLayerRef)layer;
+ (CIImage *)imageWithCGLayer:(CGLayerRef)layer options:(NSDictionary *)d;






+ (CIImage *)imageWithBitmapData:(NSData *)d bytesPerRow:(size_t)bpr
    size:(CGSize)size format:(CIFormat)f colorSpace:(CGColorSpaceRef)cs;







+ (CIImage *)imageWithTexture:(unsigned int)name size:(CGSize)size
    flipped:(BOOL)flag colorSpace:(CGColorSpaceRef)cs;

+ (CIImage *)imageWithContentsOfURL: (NSURL *)url;
+ (CIImage *)imageWithContentsOfURL: (NSURL *)url options:(NSDictionary *)d;

+ (CIImage *)imageWithData: (NSData *)data;
+ (CIImage *)imageWithData: (NSData *)data options:(NSDictionary *)d;



+ (CIImage *)imageWithCVImageBuffer:(CVImageBufferRef)imageBuffer;
+ (CIImage *)imageWithCVImageBuffer:(CVImageBufferRef)imageBuffer
    options:(NSDictionary *)dict;




+ (CIImage *)imageWithColor:(CIColor *)color;


+ (CIImage *)emptyImage;



- (id)initWithCGImage:(CGImageRef)image;
- (id)initWithCGImage:(CGImageRef)image options:(NSDictionary *)d;

- (id)initWithCGLayer:(CGLayerRef)layer;
- (id)initWithCGLayer:(CGLayerRef)layer options:(NSDictionary *)d;

- (id)initWithData:(NSData *)data;
- (id)initWithData:(NSData *)data options:(NSDictionary *)d;

- (id)initWithBitmapData:(NSData *)d bytesPerRow:(size_t)bpr size:(CGSize)size
    format:(CIFormat)f colorSpace:(CGColorSpaceRef)c;

- (id)initWithTexture:(unsigned int)name size:(CGSize)size flipped:(BOOL)flag
    colorSpace:(CGColorSpaceRef)cs;

- (id)initWithContentsOfURL: (NSURL *)url;
- (id)initWithContentsOfURL: (NSURL *)url options:(NSDictionary *)d;

- (id)initWithCVImageBuffer:(CVImageBufferRef)imageBuffer;
- (id)initWithCVImageBuffer:(CVImageBufferRef)imageBuffer
    options:(NSDictionary *)dict;

- (id)initWithColor:(CIColor *)color;




- (CIImage *)imageByApplyingTransform:(CGAffineTransform)matrix;



- (CIImage *)imageByCroppingToRect:(CGRect)r;



- (CGRect)extent;



- (CIFilterShape *)definition;

@end
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSCIImageRep.h" 2 3



@class NSBitmapImageRep;

@interface NSCIImageRep : NSImageRep
{
    CIImage *_ciImage;
}
+ (id)imageRepWithCIImage:(CIImage *)image;
- (id)initWithCIImage:(CIImage *)image;
- (CIImage *)CIImage;
@end

@interface CIImage (NSAppKitAdditions)
- (id)initWithBitmapImageRep:(NSBitmapImageRep *)bitmapImageRep;

- (void)drawInRect:(NSRect)rect fromRect:(NSRect)fromRect operation:(NSCompositingOperation)op fraction:(CGFloat)delta;
- (void)drawAtPoint:(NSPoint)point fromRect:(NSRect)fromRect operation:(NSCompositingOperation)op fraction:(CGFloat)delta;
@end
# 42 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorList.h" 1 3
# 19 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorList.h" 3
@class NSArray, NSMutableArray, NSColor, NSBundle;

@interface NSColorList : NSObject <NSCoding> {

    NSMutableArray *_keyArray;
    NSMutableArray *_colorArray;
    CFMutableDictionaryRef _keyToIndexTable;
    NSString *_name;
    NSString *_printerType;
    NSString *_fileName;
    struct _colorListFlags {
 unsigned int colorsLoaded:1;
 unsigned int editable:1;
 unsigned int hasDeviceSpecificLists:1;
 unsigned int dirty:1;
 unsigned int hasFrozen:1;
 unsigned int notificationsDisabled:1;
        unsigned int hasAttemptedLoadingBundleForDirectory:1;
 unsigned int isProfileBased:1;
 unsigned int :24;



    } _flags;
    id _clAuxiliaryStorage;
}



+ (NSArray *)availableColorLists;



+ (NSColorList *)colorListNamed:(NSString *)name;



- (id)initWithName:(NSString *)name;
- (id)initWithName:(NSString *)name fromFile:(NSString *)path;



- (NSString *)name;



- (void)setColor:(NSColor *)color forKey:(NSString *)key;



- (void)insertColor:(NSColor *)color key:(NSString *)key atIndex:(NSUInteger)loc;



- (void)removeColorWithKey:(NSString *)key;



- (NSColor *)colorWithKey:(NSString *)key;



- (NSArray *)allKeys;



- (BOOL)isEditable;



- (BOOL)writeToFile:(NSString *)path;



- (void)removeFile;

@end


extern "C" NSString *NSColorListDidChangeNotification;
# 43 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPanel.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPanel.h" 3
@class NSColorList, NSMutableArray;

typedef NSInteger NSColorPanelMode;

enum {


    NSNoModeColorPanel = -1,

    NSGrayModeColorPanel = 0,
    NSRGBModeColorPanel = 1,
    NSCMYKModeColorPanel = 2,
    NSHSBModeColorPanel = 3,
    NSCustomPaletteModeColorPanel = 4,
    NSColorListModeColorPanel = 5,
    NSWheelModeColorPanel = 6,

    NSCrayonModeColorPanel = 7

};

enum {
    NSColorPanelGrayModeMask = 0x00000001,
    NSColorPanelRGBModeMask = 0x00000002,
    NSColorPanelCMYKModeMask = 0x00000004,
    NSColorPanelHSBModeMask = 0x00000008,
    NSColorPanelCustomPaletteModeMask = 0x00000010,
    NSColorPanelColorListModeMask = 0x00000020,
    NSColorPanelWheelModeMask = 0x00000040,

    NSColorPanelCrayonModeMask = 0x00000080,

    NSColorPanelAllModesMask = 0x0000ffff
};



@interface NSColorPanel : NSPanel
{

    id _colorSwatch;
    id _reserved1;
    id _colorWell;
    NSMutableArray *_pickersWithLoadedViews;
    id _magnifyButton;
    id _middleView;
    id _opacitySlider;
    id _opacityText;
    id _opacityView;
    id _modalButtons;
    id _pickerView;
    id _customViewsList;
    id _customPickerList;
    id _currViewObject;
    id _boxAboveSwatch;
    id _target;
    id _accessoryView;
    SEL _action;
    NSSize _minColorPanelSize;
    NSSize _maxColorPanelSize;
    NSSize _reserved2;
    NSSize _reserved3;
    id _resizeDimple;
    BOOL _reserved5;
    BOOL _reserved6;
    BOOL _handlingOpacityMoveAction;
    BOOL _ignoreConstraints;
    BOOL _continuous;
    BOOL _allowColorSetting;
    BOOL _stillInitializing;
    id _opacityTextController;
}

+ (NSColorPanel *)sharedColorPanel;
+ (BOOL)sharedColorPanelExists;
+ (BOOL)dragColor:(NSColor *)color withEvent:(NSEvent *)theEvent fromView:(NSView *)sourceView;
+ (void)setPickerMask:(NSUInteger)mask;
+ (void)setPickerMode:(NSColorPanelMode)mode;

- (void)setAccessoryView:(NSView *)aView;
- (NSView *)accessoryView;
- (void)setContinuous:(BOOL)flag;
- (BOOL)isContinuous;
- (void)setShowsAlpha:(BOOL)flag;
- (BOOL)showsAlpha;
- (void)setMode:(NSColorPanelMode)mode;
- (NSColorPanelMode)mode;
- (void)setColor:(NSColor *)color;
- (NSColor *)color;
- (CGFloat)alpha;
- (void)setAction:(SEL)aSelector;
- (void)setTarget:(id)anObject;
- (void)attachColorList:(NSColorList *)colorList;
- (void)detachColorList:(NSColorList *)colorList;
@end

@interface NSApplication(NSColorPanel)
- (void)orderFrontColorPanel:(id)sender;
@end

@interface NSObject(NSColorPanelResponderMethod)
- (void)changeColor:(id)sender;
@end


extern "C" NSString *NSColorPanelColorDidChangeNotification;
# 44 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPicking.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPicking.h" 3
@class NSButtonCell, NSColor, NSColorPanel, NSColorList, NSImage, NSView;

@protocol NSColorPickingDefault
# 32 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPicking.h" 3
- (id)initWithPickerMask:(NSUInteger)mask colorPanel:(NSColorPanel *)owningColorPanel;



- (NSImage *)provideNewButtonImage;
- (void)insertNewButtonImage:(NSImage *)newButtonImage in:(NSButtonCell *)buttonCell;
- (void)viewSizeChanged:(id)sender;
- (void)alphaControlAddedOrRemoved:(id)sender;
- (void)attachColorList:(NSColorList *)colorList;
- (void)detachColorList:(NSColorList *)colorList;
- (void)setMode:(NSColorPanelMode)mode;





- (NSString *)buttonToolTip;



- (NSSize)minContentSize;



@end



@protocol NSColorPickingCustom <NSColorPickingDefault>



- (BOOL)supportsMode:(NSColorPanelMode)mode;



- (NSColorPanelMode)currentMode;



- (NSView *)provideNewView:(BOOL)initialRequest;



- (void)setColor:(NSColor *)newColor;
@end
# 45 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPicker.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorPicker.h" 3
@interface NSColorPicker : NSObject <NSColorPickingDefault>
{

    id _imageObject;
    NSColorPanel *_colorPanel;
    NSString *_buttonToolTip;
}
- (id)initWithPickerMask:(NSUInteger)mask colorPanel:(NSColorPanel *)owningColorPanel;
- (NSColorPanel *)colorPanel;
- (NSImage *)provideNewButtonImage;
- (void)insertNewButtonImage:(NSImage *)newButtonImage in:(NSButtonCell *)buttonCell;
- (void)viewSizeChanged:(id)sender;
- (void)attachColorList:(NSColorList *)colorList;
- (void)detachColorList:(NSColorList *)colorList;
- (void)setMode:(NSColorPanelMode)mode;

- (NSString *)buttonToolTip;

- (NSSize)minContentSize;
@end
# 46 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorWell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSColorWell.h" 3
@interface NSColorWell : NSControl
{

    NSColor *_color;
    id _target;
    SEL _action;
    struct __cwFlags {
 unsigned int isActive:1;
 unsigned int isBordered:1;
 unsigned int cantDraw:1;
 unsigned int isNotContinuous:1;
 unsigned int reservedColorWell:28;
    } _cwFlags;
}

- (void)deactivate;
- (void)activate:(BOOL)exclusive;
- (BOOL)isActive;

- (void)drawWellInside:(NSRect)insideRect;

- (BOOL)isBordered;
- (void)setBordered:(BOOL)flag;

- (void)takeColorFrom:(id)sender;
- (void)setColor:(NSColor *)color;
- (NSColor *)color;

@end
# 47 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSCursor.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSCursor.h" 3
@class NSColor, NSEvent, NSImage;



@interface NSCursor : NSObject <NSCoding> {

    NSPoint _hotSpot;
    struct _cursorFlags {
 unsigned int onMouseExited:1;
 unsigned int onMouseEntered:1;
        unsigned int cursorType:8;
 unsigned int :22;
    } _flags;
    id _image;
}

+ (NSCursor *)currentCursor;
+ (NSCursor *)arrowCursor;
+ (NSCursor *)IBeamCursor;

+ (NSCursor *)pointingHandCursor;
+ (NSCursor *)closedHandCursor;
+ (NSCursor *)openHandCursor;
+ (NSCursor *)resizeLeftCursor;
+ (NSCursor *)resizeRightCursor;
+ (NSCursor *)resizeLeftRightCursor;
+ (NSCursor *)resizeUpCursor;
+ (NSCursor *)resizeDownCursor;
+ (NSCursor *)resizeUpDownCursor;
+ (NSCursor *)crosshairCursor;
+ (NSCursor *)disappearingItemCursor;


- (id)initWithImage:(NSImage *)newImage hotSpot:(NSPoint)aPoint;
- (id)initWithImage:(NSImage *)newImage foregroundColorHint:(NSColor *)fg backgroundColorHint:(NSColor *)bg hotSpot:(NSPoint)hotSpot;

+ (void)hide;
+ (void)unhide;
+ (void)setHiddenUntilMouseMoves:(BOOL)flag;
+ (void)pop;

- (NSImage *)image;
- (NSPoint)hotSpot;
- (void)push;
- (void)pop;
- (void)set;
- (void)setOnMouseExited:(BOOL)flag;
- (void)setOnMouseEntered:(BOOL)flag;
- (BOOL)isSetOnMouseExited;
- (BOOL)isSetOnMouseEntered;
- (void)mouseEntered:(NSEvent *)theEvent;
- (void)mouseExited:(NSEvent *)theEvent;

@end
# 48 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSCustomImageRep.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSCustomImageRep.h" 3
@interface NSCustomImageRep : NSImageRep {

    SEL _drawMethod;
    id _drawObject;
    unsigned int _reserved;
}

- (id)initWithDrawSelector:(SEL)aMethod delegate:(id)anObject;
- (SEL)drawSelector;
- (id)delegate;

@end
# 49 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSNibDeclarations.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 2 3


@class NSArray, NSData, NSDate, NSDictionary, NSError, NSFileWrapper, NSMenuItem, NSPageLayout, NSPrintInfo, NSPrintOperation, NSSavePanel, NSUndoManager, NSURL, NSView, NSWindow, NSWindowController;

enum {



    NSChangeDone = 0,



    NSChangeUndone = 1,



    NSChangeCleared = 2,





    NSChangeReadOtherContents = 3,



    NSChangeAutosaved = 4



};
typedef NSUInteger NSDocumentChangeType;

enum {



    NSSaveOperation = 0,



    NSSaveAsOperation = 1,



    NSSaveToOperation = 2,





    NSAutosaveOperation = 3



};
typedef NSUInteger NSSaveOperationType;

@interface NSDocument : NSObject <NSUserInterfaceValidations> {
    @private
    NSWindow *_window;
    id _windowControllers;
    NSURL *_fileURL;
    NSString *_fileType;
    NSPrintInfo *_printInfo;
    long _changeCount;
    NSView *savePanelAccessory;
    id _displayName;
    void *_privateData;
    NSUndoManager *_undoManager;
    struct __docFlags {
        unsigned int inClose:1;
        unsigned int hasUndoManager:1;
        unsigned int isShowingPageLayout:1;
        unsigned int isRunningPrintOperation:1;
        unsigned int savePanelNameExtensionHidden:1;
        unsigned int reconciledToFileName:1;
        unsigned int checkingDisplayName:1;
 unsigned int readOtherContents:1;
 unsigned int RESERVED:24;
    } _docFlags;
    NSString *_savePanelSaveType;
}

#pragma mark *** Initialization ***





- (id)init;

#pragma mark *** Creation ***







- (id)initWithType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Opening ***







- (id)initWithContentsOfURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Reopening after Autosaving ***
# 136 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (id)initForURL:(NSURL *)absoluteDocumentURL withContentsOfURL:(NSURL *)absoluteDocumentContentsURL ofType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Attributes Applicable to Every Kind of Document ***






- (void)setFileType:(NSString *)typeName;
- (NSString *)fileType;







- (void)setFileURL:(NSURL *)absoluteURL;
- (NSURL *)fileURL;



- (void)setFileModificationDate:(NSDate *)modificationDate;
- (NSDate *)fileModificationDate;



#pragma mark *** Reverting ***



- (void)revertDocumentToSaved:(id)sender;







- (BOOL)revertToContentsOfURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Simple Reading and Writing ***
# 192 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError;





- (BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper ofType:(NSString *)typeName error:(NSError **)outError;





- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError;







- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError;





- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError;





- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Advanced Writing ***
# 244 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (BOOL)writeSafelyToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation error:(NSError **)outError;





- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation originalContentsURL:(NSURL *)absoluteOriginalContentsURL error:(NSError **)outError;







- (NSDictionary *)fileAttributesToWriteToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation originalContentsURL:(NSURL *)absoluteOriginalContentsURL error:(NSError **)outError;





- (BOOL)keepBackupFile;

#pragma mark *** Saving ***



- (void)saveDocument:(id)sender;



- (void)saveDocumentAs:(id)sender;



- (void)saveDocumentTo:(id)sender;
# 289 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (void)saveDocumentWithDelegate:(id)delegate didSaveSelector:(SEL)didSaveSelector contextInfo:(void *)contextInfo;
# 299 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (void)runModalSavePanelForSaveOperation:(NSSaveOperationType)saveOperation delegate:(id)delegate didSaveSelector:(SEL)didSaveSelector contextInfo:(void *)contextInfo;



- (BOOL)shouldRunSavePanelWithAccessoryView;



- (BOOL)prepareSavePanel:(NSSavePanel *)savePanel;



- (BOOL)fileNameExtensionWasHiddenInLastRunSavePanel;



- (NSString *)fileTypeFromLastRunSavePanel;
# 325 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (void)saveToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation delegate:(id)delegate didSaveSelector:(SEL)didSaveSelector contextInfo:(void *)contextInfo;





- (BOOL)saveToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation error:(NSError **)outError;



#pragma mark *** Autosaving ***





- (BOOL)hasUnautosavedChanges;
# 351 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (void)autosaveDocumentWithDelegate:(id)delegate didAutosaveSelector:(SEL)didAutosaveSelector contextInfo:(void *)contextInfo;



- (NSString *)autosavingFileType;



- (void)setAutosavedContentsFileURL:(NSURL *)absoluteURL;
- (NSURL *)autosavedContentsFileURL;



#pragma mark *** Closing ***







- (void)canCloseDocumentWithDelegate:(id)delegate shouldCloseSelector:(SEL)shouldCloseSelector contextInfo:(void *)contextInfo;



- (void)close;

#pragma mark *** Printing ***



- (void)runPageLayout:(id)sender;







- (void)runModalPageLayoutWithPrintInfo:(NSPrintInfo *)printInfo delegate:(id)delegate didRunSelector:(SEL)didRunSelector contextInfo:(void *)contextInfo;



- (BOOL)preparePageLayout:(NSPageLayout *)pageLayout;



- (BOOL)shouldChangePrintInfo:(NSPrintInfo *)newPrintInfo;



- (void)setPrintInfo:(NSPrintInfo *)printInfo;
- (NSPrintInfo *)printInfo;



- (void)printDocument:(id)sender;
# 419 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (void)printDocumentWithSettings:(NSDictionary *)printSettings showPrintPanel:(BOOL)showPrintPanel delegate:(id)delegate didPrintSelector:(SEL)didPrintSelector contextInfo:(void *)contextInfo;



- (NSPrintOperation *)printOperationWithSettings:(NSDictionary *)printSettings error:(NSError **)outError;







- (void)runModalPrintOperation:(NSPrintOperation *)printOperation delegate:(id)delegate didRunSelector:(SEL)didRunSelector contextInfo:(void *)contextInfo;

#pragma mark *** Change Management ***



- (BOOL)isDocumentEdited;



- (void)updateChangeCount:(NSDocumentChangeType)change;


- (void)setUndoManager:(NSUndoManager *)undoManager;
- (NSUndoManager *)undoManager;


- (void)setHasUndoManager:(BOOL)hasUndoManager;
- (BOOL)hasUndoManager;

#pragma mark *** Error Presentation ***
# 463 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (void)presentError:(NSError *)error modalForWindow:(NSWindow *)window delegate:(id)delegate didPresentSelector:(SEL)didPresentSelector contextInfo:(void *)contextInfo;
- (BOOL)presentError:(NSError *)error;
- (NSError *)willPresentError:(NSError *)error;



#pragma mark *** Windows and Window Controllers ***



- (void)makeWindowControllers;



- (NSString *)windowNibName;



- (void)windowControllerWillLoadNib:(NSWindowController *)windowController;
- (void)windowControllerDidLoadNib:(NSWindowController *)windowController;



- (void)setWindow:(NSWindow *)window;



- (void)addWindowController:(NSWindowController *)windowController;
- (void)removeWindowController:(NSWindowController *)windowController;



- (void)showWindows;



- (NSArray *)windowControllers;







- (void)shouldCloseWindowController:(NSWindowController *)windowController delegate:(id)delegate shouldCloseSelector:(SEL)shouldCloseSelector contextInfo:(void *)contextInfo;



- (NSString *)displayName;





- (NSWindow *)windowForSheet;



#pragma mark *** Types ***



+ (NSArray *)readableTypes;



+ (NSArray *)writableTypes;



+ (BOOL)isNativeType:(NSString *)type;
# 543 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (NSArray *)writableTypesForSaveOperation:(NSSaveOperationType)saveOperation;
# 553 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocument.h" 3
- (NSString *)fileNameExtensionForType:(NSString *)typeName saveOperation:(NSSaveOperationType)saveOperation;



#pragma mark *** Menu Item Validation ***



- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)anItem;

@end

@interface NSDocument(NSDeprecated)

#pragma mark *** Backward Compatibility ***



- (NSData *)dataRepresentationOfType:(NSString *)type;
- (NSDictionary *)fileAttributesToWriteToFile:(NSString *)fullDocumentPath ofType:(NSString *)documentTypeName saveOperation:(NSSaveOperationType)saveOperationType;
- (NSString *)fileName;
- (NSFileWrapper *)fileWrapperRepresentationOfType:(NSString *)type;
- (id)initWithContentsOfFile:(NSString *)absolutePath ofType:(NSString *)typeName;
- (id)initWithContentsOfURL:(NSURL *)absoluteURL ofType:(NSString *)typeName;
- (BOOL)loadDataRepresentation:(NSData *)data ofType:(NSString *)type;
- (BOOL)loadFileWrapperRepresentation:(NSFileWrapper *)wrapper ofType:(NSString *)type;
- (void)printShowingPrintPanel:(BOOL)flag;
- (BOOL)readFromFile:(NSString *)fileName ofType:(NSString *)type;
- (BOOL)readFromURL:(NSURL *)url ofType:(NSString *)type;
- (BOOL)revertToSavedFromFile:(NSString *)fileName ofType:(NSString *)type;
- (BOOL)revertToSavedFromURL:(NSURL *)url ofType:(NSString *)type;
- (NSInteger)runModalPageLayoutWithPrintInfo:(NSPrintInfo *)printInfo;
- (void)saveToFile:(NSString *)fileName saveOperation:(NSSaveOperationType)saveOperation delegate:(id)delegate didSaveSelector:(SEL)didSaveSelector contextInfo:(void *)contextInfo;
- (void)setFileName:(NSString *)fileName;
- (BOOL)writeToFile:(NSString *)fileName ofType:(NSString *)type;
- (BOOL)writeToFile:(NSString *)fullDocumentPath ofType:(NSString *)documentTypeName originalFile:(NSString *)fullOriginalDocumentPath saveOperation:(NSSaveOperationType)saveOperationType;
- (BOOL)writeToURL:(NSURL *)url ofType:(NSString *)type;
- (BOOL)writeWithBackupToFile:(NSString *)fullDocumentPath ofType:(NSString *)documentTypeName saveOperation:(NSSaveOperationType)saveOperationType;

@end
# 50 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocumentController.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocumentController.h" 3
@class NSArray, NSDocument, NSError, NSMenuItem, NSMutableArray, NSOpenPanel, NSURL, NSWindow;

@interface NSDocumentController : NSObject<NSCoding, NSUserInterfaceValidations> {
    @private
    id _documents;
    id _moreVars;
    NSArray *_cachedTypeDescriptions;
    NSMutableArray *_recents;
    int _recentsLimit;
}

#pragma mark *** The Shared Document Controller ***





+ (id)sharedDocumentController;



- (id)init;

#pragma mark *** Currently Open Documents ***



- (NSArray *)documents;



- (id)currentDocument;



- (NSString *)currentDirectory;







- (id)documentForURL:(NSURL *)absoluteURL;





- (id)documentForWindow:(NSWindow *)window;



- (void)addDocument:(NSDocument *)document;
- (void)removeDocument:(NSDocument *)document;

#pragma mark *** Document Creation ***



- (void)newDocument:(id)sender;







- (id)openUntitledDocumentAndDisplay:(BOOL)displayDocument error:(NSError **)outError;





- (id)makeUntitledDocumentOfType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Document Opening ***



- (void)openDocument:(id)sender;



- (NSArray *)URLsFromRunningOpenPanel;



- (NSInteger)runModalOpenPanel:(NSOpenPanel *)openPanel forTypes:(NSArray *)types;







- (id)openDocumentWithContentsOfURL:(NSURL *)absoluteURL display:(BOOL)displayDocument error:(NSError **)outError;





- (id)makeDocumentWithContentsOfURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Document Reopening ***





- (BOOL)reopenDocumentForURL:(NSURL *)absoluteDocumentURL withContentsOfURL:(NSURL *)absoluteDocumentContentsURL error:(NSError **)outError;



- (id)makeDocumentForURL:(NSURL *)absoluteDocumentURL withContentsOfURL:(NSURL *)absoluteDocumentContentsURL ofType:(NSString *)typeName error:(NSError **)outError;



#pragma mark *** Document Autosaving ***





- (void)setAutosavingDelay:(NSTimeInterval)autosavingDelay;
- (NSTimeInterval)autosavingDelay;



#pragma mark *** Document Saving ***



- (void)saveAllDocuments:(id)sender;

#pragma mark *** Document Closing ***



- (BOOL)hasEditedDocuments;





- (void)reviewUnsavedDocumentsWithAlertTitle:(NSString *)title cancellable:(BOOL)cancellable delegate:(id)delegate didReviewAllSelector:(SEL)didReviewAllSelector contextInfo:(void *)contextInfo;





- (void)closeAllDocumentsWithDelegate:(id)delegate didCloseAllSelector:(SEL)didCloseAllSelector contextInfo:(void *)contextInfo;

#pragma mark *** Error Presentation ***
# 181 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocumentController.h" 3
- (void)presentError:(NSError *)error modalForWindow:(NSWindow *)window delegate:(id)delegate didPresentSelector:(SEL)didPresentSelector contextInfo:(void *)contextInfo;
- (BOOL)presentError:(NSError *)error;
- (NSError *)willPresentError:(NSError *)error;



#pragma mark *** The Open Recent Menu ***





- (NSUInteger)maximumRecentDocumentCount;





- (void)clearRecentDocuments:(id)sender;



- (void)noteNewRecentDocument:(NSDocument *)document;



- (void)noteNewRecentDocumentURL:(NSURL *)absoluteURL;



- (NSArray *)recentDocumentURLs;

#pragma mark *** Document Types ***





- (NSString *)defaultType;





- (NSString *)typeForContentsOfURL:(NSURL *)inAbsoluteURL error:(NSError **)outError;



- (NSArray *)documentClassNames;





- (Class)documentClassForType:(NSString *)typeName;



- (NSString *)displayNameForType:(NSString *)typeName;

#pragma mark *** Menu Item Validation ***



- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)anItem;

@end

@interface NSDocumentController(NSDeprecated)

#pragma mark *** Backward Compatibility



- (NSArray *)fileExtensionsFromType:(NSString *)typeName;
- (NSString *)typeFromFileExtension:(NSString *)fileNameExtensionOrHFSFileType;



- (id)documentForFileName:(NSString *)fileName;
- (NSArray *)fileNamesFromRunningOpenPanel;
- (id)makeDocumentWithContentsOfFile:(NSString *)fileName ofType:(NSString *)type;
- (id)makeDocumentWithContentsOfURL:(NSURL *)url ofType:(NSString *)type;
- (id)makeUntitledDocumentOfType:(NSString *)type;
- (id)openDocumentWithContentsOfFile:(NSString *)fileName display:(BOOL)display;
- (id)openDocumentWithContentsOfURL:(NSURL *)url display:(BOOL)display;
- (id)openUntitledDocumentOfType:(NSString*)type display:(BOOL)display;
- (void)setShouldCreateUI:(BOOL)flag;
- (BOOL)shouldCreateUI;

@end
# 51 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSEPSImageRep.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSEPSImageRep.h" 3
@class NSPDFImageRep;

@interface NSEPSImageRep : NSImageRep {

    NSPoint _bBoxOrigin;
    NSData *_epsData;
    NSPDFImageRep* _pdfImageRep;
}

+ (id)imageRepWithData:(NSData *)epsData;
- (id)initWithData:(NSData *)epsData;

- (void)prepareGState;

- (NSData *)EPSRepresentation;

- (NSRect)boundingBox;

@end
# 53 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSEvent.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSEvent.h" 3
@class NSGraphicsContext, NSWindow, NSTrackingArea;

enum {
    NSLeftMouseDown = 1,
    NSLeftMouseUp = 2,
    NSRightMouseDown = 3,
    NSRightMouseUp = 4,
    NSMouseMoved = 5,
    NSLeftMouseDragged = 6,
    NSRightMouseDragged = 7,
    NSMouseEntered = 8,
    NSMouseExited = 9,
    NSKeyDown = 10,
    NSKeyUp = 11,
    NSFlagsChanged = 12,
    NSAppKitDefined = 13,
    NSSystemDefined = 14,
    NSApplicationDefined = 15,
    NSPeriodic = 16,
    NSCursorUpdate = 17,
    NSScrollWheel = 22,

    NSTabletPoint = 23,
    NSTabletProximity = 24,

    NSOtherMouseDown = 25,
    NSOtherMouseUp = 26,
    NSOtherMouseDragged = 27
};
typedef NSUInteger NSEventType;

enum {
    NSLeftMouseDownMask = 1 << NSLeftMouseDown,
    NSLeftMouseUpMask = 1 << NSLeftMouseUp,
    NSRightMouseDownMask = 1 << NSRightMouseDown,
    NSRightMouseUpMask = 1 << NSRightMouseUp,
    NSMouseMovedMask = 1 << NSMouseMoved,
    NSLeftMouseDraggedMask = 1 << NSLeftMouseDragged,
    NSRightMouseDraggedMask = 1 << NSRightMouseDragged,
    NSMouseEnteredMask = 1 << NSMouseEntered,
    NSMouseExitedMask = 1 << NSMouseExited,
    NSKeyDownMask = 1 << NSKeyDown,
    NSKeyUpMask = 1 << NSKeyUp,
    NSFlagsChangedMask = 1 << NSFlagsChanged,
    NSAppKitDefinedMask = 1 << NSAppKitDefined,
    NSSystemDefinedMask = 1 << NSSystemDefined,
    NSApplicationDefinedMask = 1 << NSApplicationDefined,
    NSPeriodicMask = 1 << NSPeriodic,
    NSCursorUpdateMask = 1 << NSCursorUpdate,
    NSScrollWheelMask = 1 << NSScrollWheel,

    NSTabletPointMask = 1 << NSTabletPoint,
    NSTabletProximityMask = 1 << NSTabletProximity,

    NSOtherMouseDownMask = 1 << NSOtherMouseDown,
    NSOtherMouseUpMask = 1 << NSOtherMouseUp,
    NSOtherMouseDraggedMask = 1 << NSOtherMouseDragged,
    NSAnyEventMask = (2147483647L * 2UL + 1UL)
};

static inline NSUInteger NSEventMaskFromType(NSEventType type) { return (1 << type); }


enum {
    NSAlphaShiftKeyMask = 1 << 16,
    NSShiftKeyMask = 1 << 17,
    NSControlKeyMask = 1 << 18,
    NSAlternateKeyMask = 1 << 19,
    NSCommandKeyMask = 1 << 20,
    NSNumericPadKeyMask = 1 << 21,
    NSHelpKeyMask = 1 << 22,
    NSFunctionKeyMask = 1 << 23,

    NSDeviceIndependentModifierFlagsMask = 0xffff0000UL

};



enum {
    NSUnknownPointingDevice = 0,
    NSPenPointingDevice = 1,
    NSCursorPointingDevice = 2,
    NSEraserPointingDevice = 3
};
typedef NSUInteger NSPointingDeviceType;


enum {
    NSPenTipMask = 0x0001,
    NSPenLowerSideMask = 0x0002,
    NSPenUpperSideMask = 0x0004
};


@interface NSEvent : NSObject <NSCopying, NSCoding> {

    NSEventType _type;
    NSPoint _location;
    unsigned int _modifierFlags;
    NSInteger _WSTimestamp;
    NSTimeInterval _timestamp;
    NSInteger _windowNumber;
    NSWindow *_window;
    NSGraphicsContext* _context;
    union {
        struct {
            int eventNumber;
            int clickCount;
            float pressure;
# 132 "/System/Library/Frameworks/AppKit.framework/Headers/NSEvent.h" 3
        } mouse;
        struct {
            NSString *keys;
            NSString *unmodKeys;
            unsigned short keyCode;
            BOOL isARepeat;



        } key;
        struct {
            int eventNumber;
            NSInteger trackingNumber;
            void *userData;



        } tracking;
        struct {
            CGFloat deltaX;
            CGFloat deltaY;
            CGFloat deltaZ;





        } scrollWheel;
        struct {
            int subtype;
            NSInteger data1;
            NSInteger data2;



        } misc;




    } _data;
    void *_eventRef;




}



- (NSEventType)type;
- (NSUInteger)modifierFlags;
- (NSTimeInterval)timestamp;
- (NSWindow *)window;
- (NSInteger)windowNumber;
- (NSGraphicsContext*)context;


- (NSInteger)clickCount;
- (NSInteger)buttonNumber;

- (NSInteger)eventNumber;



- (float)pressure;
- (NSPoint)locationInWindow;


- (CGFloat)deltaX;
- (CGFloat)deltaY;
- (CGFloat)deltaZ;


- (NSString *)characters;
- (NSString *)charactersIgnoringModifiers;

- (BOOL)isARepeat;

- (unsigned short)keyCode;


- (NSInteger)trackingNumber;
- (void *)userData;


- (NSTrackingArea *)trackingArea;




- (short)subtype;


- (NSInteger)data1;
- (NSInteger)data2;






- (const void * )eventRef;


+ (NSEvent *)eventWithEventRef:(const void * )eventRef;





- (NSUInteger)deviceID;



- (NSInteger)absoluteX;

- (NSInteger)absoluteY;

- (NSInteger)absoluteZ;

- (NSUInteger)buttonMask;

- (NSPoint)tilt;

- (float)rotation;

- (float)tangentialPressure;

- (id)vendorDefined;



- (NSUInteger)vendorID;

- (NSUInteger)tabletID;

- (NSUInteger)pointingDeviceID;

- (NSUInteger)systemTabletID;

- (NSUInteger)vendorPointingDeviceType;

- (NSUInteger)pointingDeviceSerialNumber;

- (unsigned long long)uniqueID;

- (NSUInteger)capabilityMask;

- (NSPointingDeviceType)pointingDeviceType;

- (BOOL)isEnteringProximity;




+ (void)startPeriodicEventsAfterDelay:(NSTimeInterval)delay withPeriod:(NSTimeInterval)period;
+ (void)stopPeriodicEvents;


+ (NSEvent *)mouseEventWithType:(NSEventType)type location:(NSPoint)location modifierFlags:(NSUInteger)flags timestamp:(NSTimeInterval)time windowNumber:(NSInteger)wNum context:(NSGraphicsContext*)context eventNumber:(NSInteger)eNum clickCount:(NSInteger)cNum pressure:(float)pressure;
+ (NSEvent *)keyEventWithType:(NSEventType)type location:(NSPoint)location modifierFlags:(NSUInteger)flags timestamp:(NSTimeInterval)time windowNumber:(NSInteger)wNum context:(NSGraphicsContext*)context characters:(NSString *)keys charactersIgnoringModifiers:(NSString *)ukeys isARepeat:(BOOL)flag keyCode:(unsigned short)code;
+ (NSEvent *)enterExitEventWithType:(NSEventType)type location:(NSPoint)location modifierFlags:(NSUInteger)flags timestamp:(NSTimeInterval)time windowNumber:(NSInteger)wNum context:(NSGraphicsContext*)context eventNumber:(NSInteger)eNum trackingNumber:(NSInteger)tNum userData:(void *)data;
+ (NSEvent *)otherEventWithType:(NSEventType)type location:(NSPoint)location modifierFlags:(NSUInteger)flags timestamp:(NSTimeInterval)time windowNumber:(NSInteger)wNum context:(NSGraphicsContext*)context subtype:(short)subtype data1:(NSInteger)d1 data2:(NSInteger)d2;


+ (NSPoint)mouseLocation;

@end



enum {
    NSUpArrowFunctionKey = 0xF700,
    NSDownArrowFunctionKey = 0xF701,
    NSLeftArrowFunctionKey = 0xF702,
    NSRightArrowFunctionKey = 0xF703,
    NSF1FunctionKey = 0xF704,
    NSF2FunctionKey = 0xF705,
    NSF3FunctionKey = 0xF706,
    NSF4FunctionKey = 0xF707,
    NSF5FunctionKey = 0xF708,
    NSF6FunctionKey = 0xF709,
    NSF7FunctionKey = 0xF70A,
    NSF8FunctionKey = 0xF70B,
    NSF9FunctionKey = 0xF70C,
    NSF10FunctionKey = 0xF70D,
    NSF11FunctionKey = 0xF70E,
    NSF12FunctionKey = 0xF70F,
    NSF13FunctionKey = 0xF710,
    NSF14FunctionKey = 0xF711,
    NSF15FunctionKey = 0xF712,
    NSF16FunctionKey = 0xF713,
    NSF17FunctionKey = 0xF714,
    NSF18FunctionKey = 0xF715,
    NSF19FunctionKey = 0xF716,
    NSF20FunctionKey = 0xF717,
    NSF21FunctionKey = 0xF718,
    NSF22FunctionKey = 0xF719,
    NSF23FunctionKey = 0xF71A,
    NSF24FunctionKey = 0xF71B,
    NSF25FunctionKey = 0xF71C,
    NSF26FunctionKey = 0xF71D,
    NSF27FunctionKey = 0xF71E,
    NSF28FunctionKey = 0xF71F,
    NSF29FunctionKey = 0xF720,
    NSF30FunctionKey = 0xF721,
    NSF31FunctionKey = 0xF722,
    NSF32FunctionKey = 0xF723,
    NSF33FunctionKey = 0xF724,
    NSF34FunctionKey = 0xF725,
    NSF35FunctionKey = 0xF726,
    NSInsertFunctionKey = 0xF727,
    NSDeleteFunctionKey = 0xF728,
    NSHomeFunctionKey = 0xF729,
    NSBeginFunctionKey = 0xF72A,
    NSEndFunctionKey = 0xF72B,
    NSPageUpFunctionKey = 0xF72C,
    NSPageDownFunctionKey = 0xF72D,
    NSPrintScreenFunctionKey = 0xF72E,
    NSScrollLockFunctionKey = 0xF72F,
    NSPauseFunctionKey = 0xF730,
    NSSysReqFunctionKey = 0xF731,
    NSBreakFunctionKey = 0xF732,
    NSResetFunctionKey = 0xF733,
    NSStopFunctionKey = 0xF734,
    NSMenuFunctionKey = 0xF735,
    NSUserFunctionKey = 0xF736,
    NSSystemFunctionKey = 0xF737,
    NSPrintFunctionKey = 0xF738,
    NSClearLineFunctionKey = 0xF739,
    NSClearDisplayFunctionKey = 0xF73A,
    NSInsertLineFunctionKey = 0xF73B,
    NSDeleteLineFunctionKey = 0xF73C,
    NSInsertCharFunctionKey = 0xF73D,
    NSDeleteCharFunctionKey = 0xF73E,
    NSPrevFunctionKey = 0xF73F,
    NSNextFunctionKey = 0xF740,
    NSSelectFunctionKey = 0xF741,
    NSExecuteFunctionKey = 0xF742,
    NSUndoFunctionKey = 0xF743,
    NSRedoFunctionKey = 0xF744,
    NSFindFunctionKey = 0xF745,
    NSHelpFunctionKey = 0xF746,
    NSModeSwitchFunctionKey = 0xF747
};


enum {
    NSWindowExposedEventType = 0,
    NSApplicationActivatedEventType = 1,
    NSApplicationDeactivatedEventType = 2,
    NSWindowMovedEventType = 4,
    NSScreenChangedEventType = 8,
    NSAWTEventType = 16
};

enum {
    NSPowerOffEventType = 1
};



enum {
    NSMouseEventSubtype = 0,
    NSTabletPointEventSubtype = 1,
    NSTabletProximityEventSubtype = 2
};
# 55 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSFileWrapper.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSFileWrapper.h" 3
@class NSData, NSDictionary, NSImage;

@interface NSFileWrapper : NSObject <NSCoding> {

  @private
    id _impl;
    NSString *_fileName;
    NSString *_preferredFileName;
    NSDictionary *_fileAttributes;
    NSImage *_image;
    id _subdocuments;
}



- (id)initDirectoryWithFileWrappers:(NSDictionary *)docs;


- (id)initRegularFileWithContents:(NSData *)data;


- (id)initSymbolicLinkWithDestination:(NSString *)path;


- (id)initWithPath:(NSString *)path;


- (id)initWithSerializedRepresentation:(NSData *)data;




- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)atomicFlag updateFilenames:(BOOL)updateFilenamesFlag;


- (NSData *)serializedRepresentation;


- (void)setFilename:(NSString *)filename;
- (NSString *)filename;


- (void)setPreferredFilename:(NSString *)filename;
- (NSString *)preferredFilename;


- (void)setFileAttributes:(NSDictionary *)attributes;
- (NSDictionary *)fileAttributes;


- (BOOL)isRegularFile;
- (BOOL)isDirectory;
- (BOOL)isSymbolicLink;


- (void)setIcon:(NSImage *)icon;
- (NSImage *)icon;


- (BOOL)needsToBeUpdatedFromPath:(NSString *)path;
- (BOOL)updateFromPath:(NSString *)path;






- (NSString *)addFileWrapper:(NSFileWrapper *)doc;


- (void)removeFileWrapper:(NSFileWrapper *)doc;


- (NSDictionary *)fileWrappers;


- (NSString *)keyForFileWrapper:(NSFileWrapper *)doc;


- (NSString *)addFileWithPath:(NSString *)path;
- (NSString *)addRegularFileWithContents:(NSData *)data preferredFilename:(NSString *)filename;
- (NSString *)addSymbolicLinkWithDestination:(NSString *)path preferredFilename:(NSString *)filename;






- (NSData *)regularFileContents;






- (NSString *)symbolicLinkDestination;


@end
# 56 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSHelpManager.h" 1 3
# 15 "/System/Library/Frameworks/AppKit.framework/Headers/NSHelpManager.h" 3
@class NSAttributedString, NSWindow;

@interface NSHelpManager : NSObject
{

    NSMapTable *_helpMapTable;
    NSMapTable *_keyMapTable;
    NSMapTable *_bundleMapTable;
    NSWindow *_helpWindow;
    NSWindow *_shadowWindow;
    NSWindow *_evtWindow;
    NSBundle *_helpBundle;
}

+ (NSHelpManager *)sharedHelpManager;
+ (void)setContextHelpModeActive:(BOOL)active;
+ (BOOL)isContextHelpModeActive;

- (void)setContextHelp:(NSAttributedString *)attrString forObject:(id)object;
- (void)removeContextHelpForObject:(id)object;
- (NSAttributedString *)contextHelpForObject:(id)object;

- (BOOL)showContextHelpForObject:(id)object locationHint:(NSPoint)pt;


- (void)openHelpAnchor:(NSString *)anchor inBook:(NSString *)book;
- (void)findString:(NSString *)query inBook:(NSString *)book;


@end





extern "C" NSString *NSContextHelpModeDidActivateNotification;
extern "C" NSString *NSContextHelpModeDidDeactivateNotification;





@interface NSBundle(NSBundleHelpExtension)
- (NSAttributedString *)contextHelpForKey:(NSString *)key;
@end





@interface NSApplication(NSApplicationHelpExtension)
- (void)activateContextHelpMode:(id)sender;

- (void)showHelp:(id)sender;
@end
# 57 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSGradient.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSGradient.h" 3
@class NSArray, NSBezierPath, NSColor, NSColorSpace;

typedef NSUInteger NSGradientDrawingOptions;

enum {
    NSGradientDrawsBeforeStartingLocation = (1 << 0),
    NSGradientDrawsAfterEndingLocation = (1 << 1),
};
# 50 "/System/Library/Frameworks/AppKit.framework/Headers/NSGradient.h" 3
@interface NSGradient : NSObject <NSCopying, NSCoding> {
    NSArray *_colorArray;
    NSColorSpace *_colorSpace;
    void *_functionRef;
    void *_componentArray;
    void *_reserved1;
    void *_reserved2;
    void *_reserved3;
}




- (id)initWithStartingColor:(NSColor *)startingColor endingColor:(NSColor *)endingColor;




- (id)initWithColors:(NSArray *)colorArray;
# 77 "/System/Library/Frameworks/AppKit.framework/Headers/NSGradient.h" 3
- (id)initWithColorsAndLocations:(NSColor *)firstColor, ...;




- (id)initWithColors:(NSArray *)colorArray atLocations:(const CGFloat *)locations colorSpace:(NSColorSpace *)colorSpace;






- (void)drawFromPoint:(NSPoint)startingPoint toPoint:(NSPoint)endingPoint options:(NSGradientDrawingOptions)options;




- (void)drawInRect:(NSRect)rect angle:(CGFloat)angle;




- (void)drawInBezierPath:(NSBezierPath *)path angle:(CGFloat)angle;






- (void)drawFromCenter:(NSPoint)startCenter radius:(CGFloat)startRadius toCenter:(NSPoint)endCenter radius:(CGFloat)endRadius options:(NSGradientDrawingOptions)options;






- (void)drawInRect:(NSRect)rect relativeCenterPosition:(NSPoint)relativeCenterPosition;






- (void)drawInBezierPath:(NSBezierPath *)path relativeCenterPosition:(NSPoint)relativeCenterPosition;
# 129 "/System/Library/Frameworks/AppKit.framework/Headers/NSGradient.h" 3
- (NSColorSpace *)colorSpace;



- (NSInteger)numberOfColorStops;



- (void)getColor:(NSColor **)color location:(CGFloat *)location atIndex:(NSInteger)index;






- (NSColor *)interpolatedColorAtLocation:(CGFloat)location;


@end
# 58 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSImage.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSImage.h" 3
@class NSArray, NSColor, NSImageRep, NSPasteboard, NSURL;



enum {
    NSImageLoadStatusCompleted,
    NSImageLoadStatusCancelled,
    NSImageLoadStatusInvalidData,
    NSImageLoadStatusUnexpectedEOF,
    NSImageLoadStatusReadError
};
typedef NSUInteger NSImageLoadStatus;

enum {
    NSImageCacheDefault,
    NSImageCacheAlways,
    NSImageCacheBySize,
    NSImageCacheNever
};
typedef NSUInteger NSImageCacheMode;



@interface NSImage : NSObject <NSCopying, NSCoding> {

    NSString *_name;
    NSSize _size;
    struct __imageFlags {
 unsigned int scalable:1;
 unsigned int dataRetained:1;
 unsigned int uniqueWindow:1;
 unsigned int sizeWasExplicitlySet:1;
 unsigned int builtIn:1;
 unsigned int needsToExpand:1;
 unsigned int useEPSOnResolutionMismatch:1;
 unsigned int colorMatchPreferred:1;
 unsigned int multipleResolutionMatching:1;
 unsigned int subImage:1;
 unsigned int archiveByName:1;
 unsigned int unboundedCacheDepth:1;
        unsigned int flipped:1;
        unsigned int aliased:1;
 unsigned int dirtied:1;
        unsigned int cacheMode:2;
        unsigned int focusedWhilePrinting:1;
        unsigned int imageEffectsRequested:1;
        unsigned int reserved1:13;
    } _flags;
    id _reps;
    NSColor *_color;
}

+ (id)imageNamed:(NSString *)name;

- (id)initWithSize:(NSSize)aSize;
- (id)initWithData:(NSData *)data;
- (id)initWithContentsOfFile:(NSString *)fileName;
- (id)initWithContentsOfURL:(NSURL *)url;
- (id)initByReferencingFile:(NSString *)fileName;

- (id)initByReferencingURL:(NSURL *)url;

- (id)initWithPasteboard:(NSPasteboard *)pasteboard;

- (void)setSize:(NSSize)aSize;
- (NSSize)size;
- (BOOL)setName:(NSString *)string;
- (NSString *)name;
- (void)setScalesWhenResized:(BOOL)flag;
- (BOOL)scalesWhenResized;
- (void)setDataRetained:(BOOL)flag;
- (BOOL)isDataRetained;
- (void)setCachedSeparately:(BOOL)flag;
- (BOOL)isCachedSeparately;
- (void)setCacheDepthMatchesImageDepth:(BOOL)flag;
- (BOOL)cacheDepthMatchesImageDepth;
- (void)setBackgroundColor:(NSColor *)aColor;
- (NSColor *)backgroundColor;
- (void)setUsesEPSOnResolutionMismatch:(BOOL)flag;
- (BOOL)usesEPSOnResolutionMismatch;
- (void)setPrefersColorMatch:(BOOL)flag;
- (BOOL)prefersColorMatch;
- (void)setMatchesOnMultipleResolution:(BOOL)flag;
- (BOOL)matchesOnMultipleResolution;
- (void)dissolveToPoint:(NSPoint)point fraction:(CGFloat)aFloat;
- (void)dissolveToPoint:(NSPoint)point fromRect:(NSRect)rect fraction:(CGFloat)aFloat;
- (void)compositeToPoint:(NSPoint)point operation:(NSCompositingOperation)op;
- (void)compositeToPoint:(NSPoint)point fromRect:(NSRect)rect operation:(NSCompositingOperation)op;
- (void)compositeToPoint:(NSPoint)point operation:(NSCompositingOperation)op fraction:(CGFloat)delta;
- (void)compositeToPoint:(NSPoint)point fromRect:(NSRect)rect operation:(NSCompositingOperation)op fraction:(CGFloat)delta;
- (void)drawAtPoint:(NSPoint)point fromRect:(NSRect)fromRect operation:(NSCompositingOperation)op fraction:(CGFloat)delta;
- (void)drawInRect:(NSRect)rect fromRect:(NSRect)fromRect operation:(NSCompositingOperation)op fraction:(CGFloat)delta;
- (BOOL)drawRepresentation:(NSImageRep *)imageRep inRect:(NSRect)rect;
- (void)recache;
- (NSData *)TIFFRepresentation;
- (NSData *)TIFFRepresentationUsingCompression:(NSTIFFCompression)comp factor:(float)aFloat;

- (NSArray *)representations;
- (void)addRepresentations:(NSArray *)imageReps;
- (void)addRepresentation:(NSImageRep *)imageRep;
- (void)removeRepresentation:(NSImageRep *)imageRep;

- (BOOL)isValid;
- (void)lockFocus;
- (void)lockFocusOnRepresentation:(NSImageRep *)imageRepresentation;
- (void)unlockFocus;

- (NSImageRep *)bestRepresentationForDevice:(NSDictionary *)deviceDescription;

- (void)setDelegate:(id)anObject;
- (id)delegate;


+ (NSArray *)imageTypes;
+ (NSArray *)imageUnfilteredTypes;


+ (BOOL)canInitWithPasteboard:(NSPasteboard *)pasteboard;

- (void)setFlipped:(BOOL)flag;
- (BOOL)isFlipped;


- (void)cancelIncrementalLoad;

-(void)setCacheMode:(NSImageCacheMode)mode;
-(NSImageCacheMode)cacheMode;
# 152 "/System/Library/Frameworks/AppKit.framework/Headers/NSImage.h" 3
- (NSRect)alignmentRect;
- (void)setAlignmentRect:(NSRect)rect;


@end

@interface NSImage(NSDeprecated)



+ (NSArray *)imageFileTypes;
+ (NSArray *)imagePasteboardTypes;
+ (NSArray *)imageUnfilteredFileTypes;
+ (NSArray *)imageUnfilteredPasteboardTypes;

@end

@interface NSObject(NSImageDelegate)
- (NSImage *)imageDidNotDraw:(id)sender inRect:(NSRect)aRect;


- (void)image:(NSImage*)image willLoadRepresentation:(NSImageRep*)rep;
- (void)image:(NSImage*)image didLoadRepresentationHeader:(NSImageRep*)rep;
- (void)image:(NSImage*)image didLoadPartOfRepresentation:(NSImageRep*)rep withValidRows:(NSInteger)rows;
- (void)image:(NSImage*)image didLoadRepresentation:(NSImageRep*)rep withStatus:(NSImageLoadStatus)status;

@end

@interface NSBundle(NSBundleImageExtension)
- (NSString *)pathForImageResource:(NSString *)name;
@end
# 60 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSImageCell.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSImageCell.h" 3
@class NSImage;

enum {
    NSImageAlignCenter = 0,
    NSImageAlignTop,
    NSImageAlignTopLeft,
    NSImageAlignTopRight,
    NSImageAlignLeft,
    NSImageAlignBottom,
    NSImageAlignBottomLeft,
    NSImageAlignBottomRight,
    NSImageAlignRight
};
typedef NSUInteger NSImageAlignment;

enum {
    NSImageFrameNone = 0,
    NSImageFramePhoto,
    NSImageFrameGrayBezel,
    NSImageFrameGroove,
    NSImageFrameButton
};
typedef NSUInteger NSImageFrameStyle;


@interface NSImageCell : NSCell <NSCopying, NSCoding>
{

    id _controlView;
    struct __ICFlags {
        unsigned int _unused:22;
        unsigned int _animates:1;
        unsigned int _align:4;
        unsigned int _scale:2;
        unsigned int _style:3;
    } _icFlags;
    struct _NSImageCellAnimationState *_animationState;
    NSImage *_scaledImage;
}

- (NSImageAlignment)imageAlignment;
- (void)setImageAlignment:(NSImageAlignment)newAlign;
- (NSImageScaling)imageScaling;
- (void)setImageScaling:(NSImageScaling)newScaling;
- (NSImageFrameStyle)imageFrameStyle;
- (void)setImageFrameStyle:(NSImageFrameStyle)newStyle;

@end
# 61 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSImageView.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSImageView.h" 3
@interface NSImageView : NSControl
{

    struct __IVFlags {
        unsigned int _unused:30;
        unsigned int _allowsCutCopyPaste:1;
        unsigned int _editable:1;
    } _ivFlags;
    id _target;
    SEL _action;
}


- (NSImage *)image;
- (void)setImage:(NSImage *)newImage;

- (NSImageAlignment)imageAlignment;
- (void)setImageAlignment:(NSImageAlignment)newAlign;
- (NSImageScaling)imageScaling;
- (void)setImageScaling:(NSImageScaling)newScaling;
- (NSImageFrameStyle)imageFrameStyle;
- (void)setImageFrameStyle:(NSImageFrameStyle)newStyle;
- (void)setEditable:(BOOL)yn;
- (BOOL)isEditable;


- (void)setAnimates:(BOOL)flag;
- (BOOL)animates;



- (BOOL)allowsCutCopyPaste;
- (void)setAllowsCutCopyPaste:(BOOL)allow;


@end
# 63 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSNib.h" 1 3
# 22 "/System/Library/Frameworks/AppKit.framework/Headers/NSNib.h" 3
@class NSArray, NSBundle, NSData, NSDictionary, NSIBObjectData, NSURL;

@interface NSNib : NSObject <NSCoding> {
   @private
    NSData *_data;
    NSArray *_images;
    NSArray *_sounds;
    NSBundle *_bundle;
    struct _NSNibFlags {
        unsigned int _isKeyed:1;
        unsigned int _reserved:31;
    } _flags;
    id reserved1;
    id reserved2;

}





- (id)initWithContentsOfURL:(NSURL *)nibFileURL;





- (id)initWithNibNamed:(NSString *)nibName bundle:(NSBundle *)bundle;
# 62 "/System/Library/Frameworks/AppKit.framework/Headers/NSNib.h" 3
- (BOOL)instantiateNibWithExternalNameTable:(NSDictionary *)externalNameTable;






- (BOOL)instantiateNibWithOwner:(id)owner topLevelObjects:(NSArray **)topLevelObjects;

@end






extern "C" NSString *NSNibOwner;



extern "C" NSString *NSNibTopLevelObjects;
# 64 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSNibLoading.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSNibLoading.h" 3
@class NSString, NSDictionary;

@interface NSBundle(NSNibLoading)

+ (BOOL)loadNibFile:(NSString *)fileName externalNameTable:(NSDictionary *)context withZone:(NSZone *)zone;


+ (BOOL)loadNibNamed:(NSString *)nibName owner:(id)owner;


- (BOOL)loadNibFile:(NSString *)fileName externalNameTable:(NSDictionary *)context withZone:(NSZone *)zone;


@end

@interface NSObject (NSNibAwaking)
- (void)awakeFromNib;
@end
# 65 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrinter.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrinter.h" 3
@class NSArray, NSDictionary, NSString;


enum {
    NSPrinterTableOK = 0,
    NSPrinterTableNotFound = 1,
    NSPrinterTableError = 2
};
typedef NSUInteger NSPrinterTableStatus;

@interface NSPrinter: NSObject<NSCopying, NSCoding> {
    @private
    NSString *_printerName;
    void *_printer;
    NSDictionary *_cachedDeviceDescription;
    int _ppdCreationNum;
    void *_ppdNodes;
    void *_ppdPriv;



    unsigned char _compatibilityPadding[20];

}


+ (NSArray *)printerNames;


+ (NSArray *)printerTypes;


+ (NSPrinter *)printerWithName:(NSString *)name;


+ (NSPrinter *)printerWithType:(NSString *)type;


- (NSString *)name;


- (NSString *)type;


- (NSInteger)languageLevel;


- (NSSize)pageSizeForPaper:(NSString *)paperName;


- (NSPrinterTableStatus)statusForTable:(NSString *)tableName;


- (BOOL)isKey:(NSString *)key inTable:(NSString *)table;
- (BOOL)booleanForKey:(NSString *)key inTable:(NSString *)table;
- (float)floatForKey:(NSString *)key inTable:(NSString *)table;
- (int)intForKey:(NSString *)key inTable:(NSString *)table;
- (NSRect)rectForKey:(NSString *)key inTable:(NSString *)table;
- (NSSize)sizeForKey:(NSString *)key inTable:(NSString *)table;
- (NSString *)stringForKey:(NSString *)key inTable:(NSString *)table;
- (NSArray *)stringListForKey:(NSString *)key inTable:(NSString *)table;


- (NSDictionary *)deviceDescription;


- (NSRect)imageRectForPaper:(NSString *)paperName;


- (BOOL)acceptsBinary;
- (BOOL)isColor;
- (BOOL)isFontAvailable:(NSString *)faceName;
- (BOOL)isOutputStackInReverseOrder;


+ (NSPrinter *)printerWithName:(NSString *)name domain:(NSString *)domain includeUnavailable:(BOOL)flag;
- (NSString *)domain;
- (NSString *)host;
- (NSString *)note;

@end
# 66 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpeechRecognizer.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpeechRecognizer.h" 3
@class NSArray, NSString;



@interface NSSpeechRecognizer : NSObject {
@private
    id _privateNSSpeechRecognizerVars;
}

- (id)init;

- (void)startListening;
- (void)stopListening;

- (id)delegate;
- (void)setDelegate:(id)anObject;

- (NSArray *)commands;
- (void)setCommands:(NSArray *)commands;

- (NSString *)displayedCommandsTitle;
- (void)setDisplayedCommandsTitle:(NSString *)title;

- (BOOL)listensInForegroundOnly;
- (void)setListensInForegroundOnly:(BOOL)flag;

- (BOOL)blocksOtherRecognizers;
- (void)setBlocksOtherRecognizers:(BOOL)flag;

@end

@interface NSObject (NSSpeechRecognizerDelegate)

- (void)speechRecognizer:(NSSpeechRecognizer *)sender didRecognizeCommand:(id)command;

@end
# 67 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpeechSynthesizer.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpeechSynthesizer.h" 3
@class NSArray, NSDictionary, NSString, NSURL, NSError;


extern "C" NSString *NSVoiceName ;
extern "C" NSString *NSVoiceIdentifier ;
extern "C" NSString *NSVoiceAge ;
extern "C" NSString *NSVoiceGender ;
extern "C" NSString *NSVoiceDemoText ;
extern "C" NSString *NSVoiceLanguage ;
extern "C" NSString *NSVoiceSupportedCharacters ;
extern "C" NSString *NSVoiceIndividuallySpokenCharacters ;

extern "C" NSString *NSVoiceGenderNeuter ;
extern "C" NSString *NSVoiceGenderMale ;
extern "C" NSString *NSVoiceGenderFemale ;



enum {
    NSSpeechImmediateBoundary = 0,
    NSSpeechWordBoundary,
    NSSpeechSentenceBoundary
};
typedef NSUInteger NSSpeechBoundary;




@interface NSSpeechSynthesizer : NSObject {
@private
    id _privateNSSpeechSynthesizerVars;
}

- (id)initWithVoice:(NSString *)voice;

- (BOOL)startSpeakingString:(NSString *)string;
- (BOOL)startSpeakingString:(NSString *)string toURL:(NSURL *)url;

- (BOOL)isSpeaking;
- (void)stopSpeaking;

- (void)stopSpeakingAtBoundary:(NSSpeechBoundary)boundary;
- (void)pauseSpeakingAtBoundary:(NSSpeechBoundary)boundary;
- (void)continueSpeaking;


- (id)delegate;
- (void)setDelegate:(id)anObject;
- (NSString *)voice;
- (BOOL)setVoice:(NSString *)voice;

- (float)rate;
- (void)setRate:(float)rate;
- (float)volume;
- (void)setVolume:(float)volume;

- (BOOL)usesFeedbackWindow;
- (void)setUsesFeedbackWindow:(BOOL)flag;


- (void)useSpeechDictionary:(NSDictionary*)speechDictionary;
- (NSString *)phonemesFromText:(NSString *)text;

- (id)objectForProperty:(NSString *)property error:(NSError **)outError;
- (BOOL)setObject:(id)object forProperty:(NSString *)property error:(NSError **)outError;


+ (BOOL)isAnyApplicationSpeaking;
+ (NSString *)defaultVoice;
+ (NSArray *)availableVoices;
+ (NSDictionary *)attributesForVoice:(NSString*)voice;

@end

@interface NSObject (NSSpeechSynthesizerDelegate)

- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender didFinishSpeaking:(BOOL)finishedSpeaking;
- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender willSpeakWord:(NSRange)characterRange ofString:(NSString *)string;
- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender willSpeakPhoneme:(short)phonemeOpcode;

- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender didFindError:(NSError *)error;
- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender didFindSyncMessage:(NSString *)message;

@end


extern "C" NSString *NSSpeechStatusProperty ;
extern "C" NSString *NSSpeechErrorsProperty ;
extern "C" NSString *NSSpeechInputModeProperty ;
extern "C" NSString *NSSpeechCharacterModeProperty ;
extern "C" NSString *NSSpeechNumberModeProperty ;
extern "C" NSString *NSSpeechRateProperty ;
extern "C" NSString *NSSpeechPitchBaseProperty ;
extern "C" NSString *NSSpeechPitchModProperty ;
extern "C" NSString *NSSpeechVolumeProperty ;
extern "C" NSString *NSSpeechSynthesizerInfoProperty ;
extern "C" NSString *NSSpeechRecentSyncProperty ;
extern "C" NSString *NSSpeechPhonemeSymbolsProperty ;
extern "C" NSString *NSSpeechCurrentVoiceProperty ;
extern "C" NSString *NSSpeechCommandDelimiterProperty ;
extern "C" NSString *NSSpeechResetProperty ;
extern "C" NSString *NSSpeechOutputToFileURLProperty ;


extern "C" NSString *NSSpeechModeTextProperty ;
extern "C" NSString *NSSpeechModePhonemeProperty ;


extern "C" NSString *NSSpeechModeNormalProperty ;
extern "C" NSString *NSSpeechModeLiteralProperty ;


extern "C" NSString *NSSpeechStatusOutputBusy ;
extern "C" NSString *NSSpeechStatusOutputPaused ;
extern "C" NSString *NSSpeechStatusNumberOfCharactersLeft ;
extern "C" NSString *NSSpeechStatusPhonemeCode ;


extern "C" NSString *NSSpeechErrorCount ;
extern "C" NSString *NSSpeechErrorOldestCode ;
extern "C" NSString *NSSpeechErrorOldestCharacterOffset ;
extern "C" NSString *NSSpeechErrorNewestCode ;
extern "C" NSString *NSSpeechErrorNewestCharacterOffset ;


extern "C" NSString *NSSpeechSynthesizerInfoIdentifier ;
extern "C" NSString *NSSpeechSynthesizerInfoVersion ;


extern "C" NSString *NSSpeechPhonemeInfoOpcode ;
extern "C" NSString *NSSpeechPhonemeInfoSymbol ;
extern "C" NSString *NSSpeechPhonemeInfoExample ;
extern "C" NSString *NSSpeechPhonemeInfoHiliteStart ;
extern "C" NSString *NSSpeechPhonemeInfoHiliteEnd ;


extern "C" NSString *NSSpeechCommandPrefix ;
extern "C" NSString *NSSpeechCommandSuffix ;


extern "C" NSString *NSSpeechDictionaryLanguage ;
extern "C" NSString *NSSpeechDictionaryModificationDate ;
extern "C" NSString *NSSpeechDictionaryPronunciations ;
extern "C" NSString *NSSpeechDictionaryAbreviations ;
extern "C" NSString *NSSpeechDictionaryEntrySpelling ;
extern "C" NSString *NSSpeechDictionaryEntryPhonemes ;
# 68 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpellChecker.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpellChecker.h" 3
@class NSArray, NSPanel, NSView;
# 20 "/System/Library/Frameworks/AppKit.framework/Headers/NSSpellChecker.h" 3
@interface NSSpellChecker : NSObject {



@private

    id _guessesBrowser;
    id _wordField;
    id _languagePopUp;
    id _guessesList;
    id _panel;
    id _userDictionaries;
    id _correctButton;
    id _guessButton;
    id _ignoreButton;
    id _accessoryView;
    id _dictionaryBrowser;
    NSString *_selectionString;
    id _spellServers;
    NSString *_lastGuess;

    struct __scFlags {
        unsigned int autoShowGuesses:1;
        unsigned int needDelayedGuess:1;
        unsigned int unignoreInProgress:1;
        unsigned int wordFieldEdited:1;
        unsigned int _reserved:28;
    } _scFlags;

    id _deleteButton;
    id _openButton;
    id _learnButton;
    id _forgetButton;

    void *_reservedSpellChecker1;
}


+ (NSSpellChecker *)sharedSpellChecker;
+ (BOOL)sharedSpellCheckerExists;


+ (NSInteger)uniqueSpellDocumentTag;


- (NSRange)checkSpellingOfString:(NSString *)stringToCheck startingAt:(NSInteger)startingOffset language:(NSString *)language wrap:(BOOL)wrapFlag inSpellDocumentWithTag:(NSInteger)tag wordCount:(NSInteger *)wordCount;

- (NSRange)checkSpellingOfString:(NSString *)stringToCheck startingAt:(NSInteger)startingOffset;


- (NSInteger)countWordsInString:(NSString *)stringToCount language:(NSString *)language;



- (NSRange)checkGrammarOfString:(NSString *)stringToCheck startingAt:(NSInteger)startingOffset language:(NSString *)language wrap:(BOOL)wrapFlag inSpellDocumentWithTag:(NSInteger)tag details:(NSArray **)details;



- (void)updateSpellingPanelWithMisspelledWord:(NSString *)word;



- (NSPanel *)spellingPanel;
- (NSView *)accessoryView;
- (void)setAccessoryView:(NSView *)aView;


- (void)ignoreWord:(NSString *)wordToIgnore inSpellDocumentWithTag:(NSInteger)tag;

- (NSArray *)ignoredWordsInSpellDocumentWithTag:(NSInteger)tag;
- (void)setIgnoredWords:(NSArray *)words inSpellDocumentWithTag:(NSInteger)tag;
- (NSArray *)guessesForWord:(NSString *)word;



- (NSArray *)completionsForPartialWordRange:(NSRange)range inString:(NSString *)string language:(NSString *)language inSpellDocumentWithTag:(NSInteger)tag;



- (void)closeSpellDocumentWithTag:(NSInteger)tag;


- (NSString *)language;
- (BOOL)setLanguage:(NSString *)language;

- (NSArray *)availableLanguages;



- (void)setWordFieldStringValue:(NSString *)aString;


- (void)learnWord:(NSString *)word;
- (void)forgetWord:(NSString *)word;

@end
# 69 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSplitView.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSSplitView.h" 3
@class NSNotification;

@interface NSSplitView : NSView {
    @private
    id _variables;
}



- (void)setIsPaneSplitter:(BOOL)flag;
- (BOOL)isPaneSplitter;



- (void)setVertical:(BOOL)flag;
- (BOOL)isVertical;



- (void)setDelegate:(id)delegate;
- (id)delegate;



- (void)adjustSubviews;



- (CGFloat)dividerThickness;



- (void)drawDividerInRect:(NSRect)rect;



- (BOOL)isSubviewCollapsed:(NSView *)subview;





- (void)setSubview:(NSView *)subview isCollapsed:(BOOL)isCollapsed;



- (void)setAutosaveName:(NSString *)autosaveName;
- (NSString *)autosaveName;






- (CGFloat)minPossiblePositionOfDividerAtIndex:(NSInteger)dividerIndex;
- (CGFloat)maxPossiblePositionOfDividerAtIndex:(NSInteger)dividerIndex;



- (void)setPosition:(CGFloat)position ofDividerAtIndex:(NSInteger)dividerIndex;



@end

@interface NSObject(NSSplitViewDelegate)



- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview;





- (BOOL)splitView:(NSSplitView *)splitView shouldCollapseSubview:(NSView *)subview forDoubleClickOnDividerAtIndex:(NSInteger)dividerIndex;







- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex;





- (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMaximumPosition ofSubviewAt:(NSInteger)dividerIndex;



- (CGFloat)splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex;





- (void)splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize;



- (void)splitViewWillResizeSubviews:(NSNotification *)notification;
- (void)splitViewDidResizeSubviews:(NSNotification *)notification;

@end



extern "C" NSString *NSSplitViewWillResizeSubviewsNotification;



extern "C" NSString *NSSplitViewDidResizeSubviewsNotification;
# 70 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenPanel.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSavePanel.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSSavePanel.h" 3
@class NSBox, NSMutableArray, NSNavView, NSTextField, NSTextView, NSView, NSURL;

enum {
    NSFileHandlingPanelCancelButton = NSCancelButton,
    NSFileHandlingPanelOKButton = NSOKButton,
};

typedef struct __SPFlags {
    unsigned int saveMode:1;
    unsigned int isExpanded:1;
    unsigned int allowsOtherFileTypes:1;
    unsigned int canCreateDirectories:1;
    unsigned int canSelectedHiddenExtension:1;
    unsigned int reserved:27;
} _SPFlags;

@class NSSavePanelAuxiliary;

@interface NSSavePanel : NSPanel {
    NSNavView *_navView;
    NSView *_accessoryView;
    NSArray *_allowedFileTypes;
    NSString *_validatedPosixName;
    NSString *_hiddenExtension;

    NSTextField *_messageTextField;
    NSView *_savePane;
    NSBox *_saveNavSeparatorBox;
    NSView *_savePaneTopPartsContainer;
    NSTextField *_nameField;
    NSTextField *_nameFieldLabel;
    NSButton *_expansionButton;
    NSView *_directoryPopUpContainer;
    id _directoryPopUp;
    NSTextField *_directoryPopUpLabel;
    NSBox *_navViewContainer;
    NSBox *_accessoryViewContainer;
    NSView *_bottomControlsContainer;
    NSButton *_hideExtensionButton;
    NSButton *_newFolderButton;
    NSButton *_cancelButton;
    NSButton *_okButton;

    id _filepathInputController;
    id _newFolderController;

    _SPFlags _spFlags;

    NSSavePanelAuxiliary *_spAuxiliaryStorage;

    char _reserved[5];

    void *_private;
}

+ (NSSavePanel *)savePanel;

- (NSURL *)URL;

- (NSString *)filename;

- (NSString *)directory;
- (void)setDirectory:(NSString *)path;

- (NSString *)requiredFileType;
- (void)setRequiredFileType:(NSString *)type;


- (NSArray *)allowedFileTypes;
- (void)setAllowedFileTypes:(NSArray *)types;

- (BOOL)allowsOtherFileTypes;
- (void)setAllowsOtherFileTypes:(BOOL)flag;


- (NSView *)accessoryView;
- (void)setAccessoryView:(NSView *)view;


- (id)delegate;

- (void)setDelegate:(id)delegate;

- (BOOL)isExpanded;


- (BOOL)canCreateDirectories;
- (void)setCanCreateDirectories:(BOOL)flag;



- (BOOL)canSelectHiddenExtension;

- (void)setCanSelectHiddenExtension:(BOOL)flag;
- (BOOL)isExtensionHidden;
- (void)setExtensionHidden:(BOOL)flag;

- (BOOL)treatsFilePackagesAsDirectories;
- (void)setTreatsFilePackagesAsDirectories:(BOOL)flag;

- (NSString *)prompt;
- (void)setPrompt:(NSString *)prompt;

- (NSString *)title;
- (void)setTitle:(NSString *)title;


- (NSString *)nameFieldLabel;
- (void)setNameFieldLabel:(NSString *)label;



- (NSString *)message;
- (void)setMessage:(NSString *)message;


- (void)validateVisibleColumns;


- (void)selectText:(id)sender;

@end


@interface NSSavePanel(NSSavePanelRuntime)

- (void)ok:(id)sender;
- (void)cancel:(id)sender;





- (void)beginSheetForDirectory:(NSString *)path file:(NSString *)name modalForWindow:(NSWindow *)docWindow modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;

- (NSInteger)runModalForDirectory:(NSString *)path file:(NSString *)name;
- (NSInteger)runModal;

@end


@interface NSObject(NSSavePanelDelegate)

- (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename;
- (NSComparisonResult)panel:(id)sender compareFilename:(NSString *)name1 with:(NSString *)name2 caseSensitive:(BOOL)caseSensitive;
- (BOOL)panel:(id)sender isValidFilename:(NSString *)filename;
- (NSString *)panel:(id)sender userEnteredFilename:(NSString *)filename confirmed:(BOOL)okFlag;
- (void)panel:(id)sender willExpand:(BOOL)expanding;

- (void)panel:(id)sender directoryDidChange:(NSString *)path;
- (void)panelSelectionDidChange:(id)sender;


@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenPanel.h" 2 3
@class NSArray;
@class NSString;
@class NSWindow;

@interface NSOpenPanel : NSSavePanel {
    char _reservedOpenPanel[4];
    void *_privateOpenPanel;
}

+ (NSOpenPanel *)openPanel;

- (NSArray *)URLs;
- (NSArray *)filenames;

- (BOOL)resolvesAliases;
- (void)setResolvesAliases:(BOOL)flag;

- (BOOL)canChooseDirectories;
- (void)setCanChooseDirectories:(BOOL)flag;

- (BOOL)allowsMultipleSelection;
- (void)setAllowsMultipleSelection:(BOOL)flag;

- (BOOL)canChooseFiles;
- (void)setCanChooseFiles:(BOOL)flag;

@end

@interface NSOpenPanel (NSOpenPanelRuntime)

- (void)beginSheetForDirectory:(NSString *)path file:(NSString *)name types:(NSArray *)fileTypes modalForWindow:(NSWindow *)docWindow modalDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;


- (void)beginForDirectory:(NSString *)path file:(NSString *)name types:(NSArray *)fileTypes modelessDelegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;


- (NSInteger)runModalForDirectory:(NSString *)path file:(NSString *)name types:(NSArray *)fileTypes;
- (NSInteger)runModalForTypes:(NSArray *)fileTypes;

@end
# 71 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPageLayout.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSPageLayout.h" 3
@class NSArray, NSMutableArray, NSPrintInfo, NSView, NSViewController, NSWindow, NSWindowController;

@interface NSPageLayout : NSObject {
    @private
    NSMutableArray *_accessoryControllers;
    NSPrintInfo *_originalPrintInfo;
    id _delegate;
    SEL _didEndSelector;
    void *_contextInfo;
    NSPrintInfo *_presentedPrintInfo;
    NSWindowController *_windowController;



    unsigned char _compatibilityPadding[156];

}



+ (NSPageLayout *)pageLayout;





- (void)addAccessoryController:(NSViewController *)accessoryController;
- (void)removeAccessoryController:(NSViewController *)accessoryController;
- (NSArray *)accessoryControllers;







- (void)beginSheetWithPrintInfo:(NSPrintInfo *)printInfo modalForWindow:(NSWindow *)docWindow delegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;



- (NSInteger)runModalWithPrintInfo:(NSPrintInfo *)printInfo;
- (NSInteger)runModal;



- (NSPrintInfo *)printInfo;

@end

@interface NSPageLayout(NSDeprecated)



- (void)setAccessoryView:(NSView *)accessoryView;
- (NSView *)accessoryView;



- (void)readPrintInfo;
- (void)writePrintInfo;

@end

@interface NSApplication(NSPageLayoutPanel)



- (void)runPageLayout:(id)sender;

@end
# 72 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPasteboard.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSPasteboard.h" 3
@class NSArray, NSData, NSFileWrapper, NSMutableDictionary;



extern "C" NSString *NSStringPboardType;
extern "C" NSString *NSFilenamesPboardType;
extern "C" NSString *NSPostScriptPboardType;
extern "C" NSString *NSTIFFPboardType;
extern "C" NSString *NSRTFPboardType;
extern "C" NSString *NSTabularTextPboardType;
extern "C" NSString *NSFontPboardType;
extern "C" NSString *NSRulerPboardType;
extern "C" NSString *NSFileContentsPboardType;
extern "C" NSString *NSColorPboardType;
extern "C" NSString *NSRTFDPboardType;
extern "C" NSString *NSHTMLPboardType;
extern "C" NSString *NSPICTPboardType;
extern "C" NSString *NSURLPboardType;
extern "C" NSString *NSPDFPboardType;
extern "C" NSString *NSVCardPboardType ;
extern "C" NSString *NSFilesPromisePboardType ;
extern "C" NSString *NSInkTextPboardType ;
extern "C" NSString *NSMultipleTextSelectionPboardType ;



extern "C" NSString *NSGeneralPboard;
extern "C" NSString *NSFontPboard;
extern "C" NSString *NSRulerPboard;
extern "C" NSString *NSFindPboard;
extern "C" NSString *NSDragPboard;


extern "C" NSString *NSCreateFilenamePboardType(NSString *fileType);
extern "C" NSString *NSCreateFileContentsPboardType(NSString *fileType);
extern "C" NSString *NSGetFileType(NSString *pboardType);
extern "C" NSArray *NSGetFileTypes(NSArray *pboardTypes);


@interface NSPasteboard : NSObject
{
    @private
    id _pboard;
    int _gen;
    id _owners;
    CFIndex _cachedTypeNameChangeCount;
    NSArray * _cachedTypeNames;
    NSMutableDictionary *_promiseTypeNamesByIdentifier;
    void * _reserved[5];
}

+ (NSPasteboard *)generalPasteboard;
+ (NSPasteboard *)pasteboardWithName:(NSString *)name;
+ (NSPasteboard *)pasteboardWithUniqueName;

+ (NSArray *)typesFilterableTo:(NSString *)type;

+ (NSPasteboard *)pasteboardByFilteringFile:(NSString *)filename;
+ (NSPasteboard *)pasteboardByFilteringData:(NSData *)data ofType:(NSString *)type;
+ (NSPasteboard *)pasteboardByFilteringTypesInPasteboard:(NSPasteboard *)pboard;

- (NSString *)name;

- (void)releaseGlobally;

- (NSInteger)declareTypes:(NSArray *)newTypes owner:(id)newOwner;
- (NSInteger)addTypes:(NSArray *)newTypes owner:(id)newOwner;
- (NSInteger)changeCount;

- (NSArray *)types;
- (NSString *)availableTypeFromArray:(NSArray *)types;

- (BOOL)setData:(NSData *)data forType:(NSString *)dataType;
- (NSData *)dataForType:(NSString *)dataType;

- (BOOL)setPropertyList:(id)plist forType:(NSString *)dataType;
- (id)propertyListForType:(NSString *)dataType;

- (BOOL)setString:(NSString *)string forType:(NSString *)dataType;
- (NSString *)stringForType:(NSString *)dataType;

@end

@interface NSPasteboard(NSFileContents)
- (BOOL)writeFileContents:(NSString *)filename;
- (NSString *)readFileContentsType:(NSString *)type toFile:(NSString *)filename;

- (BOOL)writeFileWrapper:(NSFileWrapper *)wrapper;
- (NSFileWrapper *)readFileWrapper;

@end

@interface NSURL(NSPasteboardSupport)
+ (NSURL *)URLFromPasteboard:(NSPasteboard *)pasteBoard;
- (void)writeToPasteboard:(NSPasteboard *)pasteBoard;
@end

@interface NSObject(NSPasteboardOwner)
- (void)pasteboard:(NSPasteboard *)sender provideDataForType:(NSString *)type;
- (void)pasteboardChangedOwner:(NSPasteboard *)sender;
@end
# 74 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPopUpButton.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSPopUpButton.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuItemCell.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuItemCell.h" 3
@class NSMenuView;


@interface NSMenuItemCell : NSButtonCell {

    @private
    id _extraData;
    NSSize _stateImageSize;
    NSSize _imageSize;
    NSSize _titleSize;
    NSSize _keyEquivalentSize;
    NSSize _size;
    struct __micFlags {
        unsigned int needsSizing:1;
        unsigned int reserved:1;
        unsigned int needsDisplay:1;
        unsigned int keyEquivGlyphWidth:16;
        unsigned int RESERVED:13;
    } _micFlags;
}

- (void)setMenuItem:(NSMenuItem *)item;
- (NSMenuItem *)menuItem;


- (void)setMenuView:(NSMenuView *)menuView;
- (NSMenuView *)menuView;


- (void)setNeedsSizing:(BOOL)flag;
- (BOOL)needsSizing;
- (void)calcSize;

- (void)setNeedsDisplay:(BOOL)flag;
- (BOOL)needsDisplay;

- (CGFloat)stateImageWidth;
- (CGFloat)imageWidth;
- (CGFloat)titleWidth;
- (CGFloat)keyEquivalentWidth;

- (NSRect)stateImageRectForBounds:(NSRect)cellFrame;
- (NSRect)titleRectForBounds:(NSRect)cellFrame;
- (NSRect)keyEquivalentRectForBounds:(NSRect)cellFrame;

- (void)drawSeparatorItemWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)drawStateImageWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)drawImageWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)drawTitleWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)drawKeyEquivalentWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)drawBorderAndBackgroundWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;

- (NSInteger)tag;

@end
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSPopUpButton.h" 2 3


@class NSMenu;

@interface NSPopUpButton : NSButton {

    @private
    struct __pbFlags {
        unsigned int needsPullsDownFromTemplate:1;
        unsigned int RESERVED:31;
    } _pbFlags;



}

- (id)initWithFrame:(NSRect)buttonFrame pullsDown:(BOOL)flag;


- (void)setMenu:(NSMenu *)menu;
- (NSMenu *)menu;


- (void)setPullsDown:(BOOL)flag;
- (BOOL)pullsDown;

- (void)setAutoenablesItems:(BOOL)flag;
- (BOOL)autoenablesItems;

- (void)setPreferredEdge:(NSRectEdge)edge;
- (NSRectEdge)preferredEdge;



- (void)addItemWithTitle:(NSString *)title;
- (void)addItemsWithTitles:(NSArray *)itemTitles;
- (void)insertItemWithTitle:(NSString *)title atIndex:(NSInteger)index;

- (void)removeItemWithTitle:(NSString *)title;
- (void)removeItemAtIndex:(NSInteger)index;
- (void)removeAllItems;



- (NSArray *)itemArray;
- (NSInteger)numberOfItems;

- (NSInteger)indexOfItem:(NSMenuItem *)item;
- (NSInteger)indexOfItemWithTitle:(NSString *)title;
- (NSInteger)indexOfItemWithTag:(NSInteger)tag;
- (NSInteger)indexOfItemWithRepresentedObject:(id)obj;
- (NSInteger)indexOfItemWithTarget:(id)target andAction:(SEL)actionSelector;

- (NSMenuItem *)itemAtIndex:(NSInteger)index;
- (NSMenuItem *)itemWithTitle:(NSString *)title;
- (NSMenuItem *)lastItem;



- (void)selectItem:(NSMenuItem *)item;
- (void)selectItemAtIndex:(NSInteger)index;
- (void)selectItemWithTitle:(NSString *)title;

- (BOOL)selectItemWithTag:(NSInteger)tag;

- (void)setTitle:(NSString *)aString;

- (NSMenuItem *)selectedItem;
- (NSInteger)indexOfSelectedItem;
- (void)synchronizeTitleAndSelectedItem;


- (NSString *)itemTitleAtIndex:(NSInteger)index;
- (NSArray *)itemTitles;
- (NSString *)titleOfSelectedItem;

@end


extern "C" NSString *NSPopUpButtonWillPopUpNotification;
# 75 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintAccessoryController.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSViewController.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSViewController.h" 3
@class NSArray, NSBundle, NSView;

@interface NSViewController : NSObject {
    @private
    NSString *_nibName;
    NSBundle *_nibBundle;
    id _representedObject;
    NSString *_title;
    NSView *view;
    NSArray *_topLevelObjects;
    void *_editors;
    id _autounbinder;
    id _reserved[4];
}



- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;



- (void)setRepresentedObject:(id)representedObject;
- (id)representedObject;



- (void)setTitle:(NSString *)title;
- (NSString *)title;



- (NSView *)view;



- (void)loadView;



- (NSString *)nibName;
- (NSBundle *)nibBundle;



- (void)setView:(NSView *)view;



- (void)commitEditingWithDelegate:(id)delegate didCommitSelector:(SEL)didCommitSelector contextInfo:(void *)contextInfo;
- (BOOL)commitEditing;
- (void)discardEditing;

@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintAccessoryController.h" 2 3

@class NSPrintInfo;





@interface NSPrintAccessoryController : NSViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil title:(NSString *)titleOrNil;
- (void)setPrintInfo:(NSPrintInfo *)printInfo;
- (NSPrintInfo *)printInfo;
@end
# 76 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintInfo.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintInfo.h" 3
@class NSMutableDictionary, NSPrinter;


enum {
    NSPortraitOrientation = 0,
    NSLandscapeOrientation = 1
};
typedef NSUInteger NSPrintingOrientation;


enum {
    NSAutoPagination = 0,
    NSFitPagination = 1,
    NSClipPagination = 2
};
typedef NSUInteger NSPrintingPaginationMode;


extern "C" NSString *NSPrintSpoolJob;
extern "C" NSString *NSPrintPreviewJob;
extern "C" NSString *NSPrintSaveJob;
extern "C" NSString *NSPrintCancelJob;


extern "C" NSString *NSPrintPaperName;
extern "C" NSString *NSPrintPaperSize;
extern "C" NSString *NSPrintOrientation;
extern "C" NSString *NSPrintScalingFactor;


extern "C" NSString *NSPrintLeftMargin;
extern "C" NSString *NSPrintRightMargin;
extern "C" NSString *NSPrintTopMargin;
extern "C" NSString *NSPrintBottomMargin;
extern "C" NSString *NSPrintHorizontallyCentered;
extern "C" NSString *NSPrintVerticallyCentered;
extern "C" NSString *NSPrintHorizontalPagination;
extern "C" NSString *NSPrintVerticalPagination;


extern "C" NSString *NSPrintPrinter;
extern "C" NSString *NSPrintCopies;
extern "C" NSString *NSPrintAllPages;
extern "C" NSString *NSPrintFirstPage;
extern "C" NSString *NSPrintLastPage;
extern "C" NSString *NSPrintMustCollate;
extern "C" NSString *NSPrintReversePageOrder;
extern "C" NSString *NSPrintJobDisposition;
extern "C" NSString *NSPrintSavePath;
extern "C" NSString *NSPrintPagesAcross ;
extern "C" NSString *NSPrintPagesDown ;
extern "C" NSString *NSPrintTime ;
extern "C" NSString *NSPrintDetailedErrorReporting ;
extern "C" NSString *NSPrintFaxNumber ;
extern "C" NSString *NSPrintPrinterName ;


extern "C" NSString *NSPrintHeaderAndFooter ;

@interface NSPrintInfo : NSObject<NSCopying, NSCoding> {
    @private
    NSMutableDictionary *_attributes;
    id _moreVars;
}


+ (void)setSharedPrintInfo:(NSPrintInfo *)printInfo;
+ (NSPrintInfo *)sharedPrintInfo;


- (id)initWithDictionary:(NSDictionary *)attributes;


- (NSMutableDictionary *)dictionary;


- (void)setPaperName:(NSString *)name;
- (void)setPaperSize:(NSSize)size;
- (void)setOrientation:(NSPrintingOrientation)orientation;
- (NSString *)paperName;
- (NSSize)paperSize;
- (NSPrintingOrientation)orientation;


- (void)setLeftMargin:(CGFloat)margin;
- (void)setRightMargin:(CGFloat)margin;
- (void)setTopMargin:(CGFloat)margin;
- (void)setBottomMargin:(CGFloat)margin;
- (CGFloat)leftMargin;
- (CGFloat)rightMargin;
- (CGFloat)topMargin;
- (CGFloat)bottomMargin;
- (void)setHorizontallyCentered:(BOOL)flag;
- (void)setVerticallyCentered:(BOOL)flag;
- (BOOL)isHorizontallyCentered;
- (BOOL)isVerticallyCentered;
- (void)setHorizontalPagination:(NSPrintingPaginationMode)mode;
- (void)setVerticalPagination:(NSPrintingPaginationMode)mode;
- (NSPrintingPaginationMode)horizontalPagination;
- (NSPrintingPaginationMode)verticalPagination;


- (void)setJobDisposition:(NSString *)disposition;
- (NSString *)jobDisposition;


- (void)setPrinter:(NSPrinter *)printer;
- (NSPrinter *)printer;


- (void)setUpPrintOperationDefaultValues;




- (NSRect)imageablePageBounds;






- (NSString *)localizedPaperName;




+ (NSPrinter *)defaultPrinter;


+ (void)setDefaultPrinter:(NSPrinter *)printer;


+ (NSSize)sizeForPaperName:(NSString *)name;

@end


extern "C" NSString *NSPrintFormName;
extern "C" NSString *NSPrintJobFeatures;
extern "C" NSString *NSPrintManualFeed;
extern "C" NSString *NSPrintPagesPerSheet;
extern "C" NSString *NSPrintPaperFeed;


extern "C" NSString *NSPrintFaxCoverSheetName;
extern "C" NSString *NSPrintFaxHighResolution;
extern "C" NSString *NSPrintFaxModem;
extern "C" NSString *NSPrintFaxReceiverNames;
extern "C" NSString *NSPrintFaxReceiverNumbers;
extern "C" NSString *NSPrintFaxReturnReceipt;
extern "C" NSString *NSPrintFaxSendTime;
extern "C" NSString *NSPrintFaxTrimPageEnds;
extern "C" NSString *NSPrintFaxUseCoverSheet;


extern "C" NSString *NSPrintFaxJob;
# 77 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintOperation.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintOperation.h" 3
@class NSMutableData, NSGraphicsContext, NSPrintPanel, NSPrintInfo, NSView, NSWindow;



enum {
    NSDescendingPageOrder = -1,
    NSSpecialPageOrder = 0,
    NSAscendingPageOrder = 1,
    NSUnknownPageOrder = 2
};
typedef NSInteger NSPrintingPageOrder;



extern "C" NSString *NSPrintOperationExistsException;

@interface NSPrintOperation : NSObject {
}



+ (NSPrintOperation *)printOperationWithView:(NSView *)view printInfo:(NSPrintInfo *)printInfo;
+ (NSPrintOperation *)PDFOperationWithView:(NSView *)view insideRect:(NSRect)rect toData:(NSMutableData *)data printInfo:(NSPrintInfo *)printInfo;
+ (NSPrintOperation *)PDFOperationWithView:(NSView *)view insideRect:(NSRect)rect toPath:(NSString *)path printInfo:(NSPrintInfo *)printInfo;
+ (NSPrintOperation *)EPSOperationWithView:(NSView *)view insideRect:(NSRect)rect toData:(NSMutableData *)data printInfo:(NSPrintInfo *)printInfo;
+ (NSPrintOperation *)EPSOperationWithView:(NSView *)view insideRect:(NSRect)rect toPath:(NSString *)path printInfo:(NSPrintInfo *)printInfo;



+ (NSPrintOperation *)printOperationWithView:(NSView *)view;
+ (NSPrintOperation *)PDFOperationWithView:(NSView *)view insideRect:(NSRect)rect toData:(NSMutableData *)data;
+ (NSPrintOperation *)EPSOperationWithView:(NSView *)view insideRect:(NSRect)rect toData:(NSMutableData *)data;



+ (NSPrintOperation *)currentOperation;
+ (void)setCurrentOperation:(NSPrintOperation *)operation;



- (BOOL)isCopyingOperation;





- (void)setShowsPrintPanel:(BOOL)flag;
- (BOOL)showsPrintPanel;
- (void)setShowsProgressPanel:(BOOL)flag;
- (BOOL)showsProgressPanel;





- (void)setPrintPanel:(NSPrintPanel *)panel;
- (NSPrintPanel *)printPanel;



- (void)setCanSpawnSeparateThread:(BOOL)canSpawnSeparateThread;
- (BOOL)canSpawnSeparateThread;



- (void)setPageOrder:(NSPrintingPageOrder)pageOrder;
- (NSPrintingPageOrder)pageOrder;







- (void)runOperationModalForWindow:(NSWindow *)docWindow delegate:(id)delegate didRunSelector:(SEL)didRunSelector contextInfo:(void *)contextInfo;



- (BOOL)runOperation;



- (NSView *)view;



- (NSPrintInfo *)printInfo;
- (void)setPrintInfo:(NSPrintInfo *)printInfo;



- (NSGraphicsContext *)context;



- (NSInteger)currentPage;



- (NSGraphicsContext *)createContext;
- (void)destroyContext;
- (BOOL)deliverResult;
- (void)cleanUpOperation;

@end

@interface NSPrintOperation(NSDeprecated)



- (void)setAccessoryView:(NSView *)view;
- (NSView *)accessoryView;

- (void)setJobStyleHint:(NSString *)hint;
- (NSString *)jobStyleHint;




- (void)setShowPanels:(BOOL)flag;
- (BOOL)showPanels;

@end
# 78 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintPanel.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSPrintPanel.h" 3
@class NSArray, NSMutableArray, NSPrintInfo, NSSet, NSView, NSViewController, NSWindow, NSWindowController;



enum {



    NSPrintPanelShowsCopies = 0x01,
    NSPrintPanelShowsPageRange = 0x02,
    NSPrintPanelShowsPaperSize = 0x04,
    NSPrintPanelShowsOrientation = 0x08,
    NSPrintPanelShowsScaling = 0x10,



    NSPrintPanelShowsPageSetupAccessory = 0x100,



    NSPrintPanelShowsNonSettingControls = 0x10000,





    NSPrintPanelShowsPreview = 0x20000

};
typedef NSInteger NSPrintPanelOptions;





extern "C" NSString *NSPrintPhotoJobStyleHint ;



extern "C" NSString *NSPrintPanelAccessorySummaryItemNameKey ;
extern "C" NSString *NSPrintPanelAccessorySummaryItemDescriptionKey ;



@protocol NSPrintPanelAccessorizing



- (NSArray *)localizedSummaryItems;

@optional



- (NSSet *)keyPathsForValuesAffectingPreview;

@end



@interface NSPrintPanel : NSObject {
    @private
    NSMutableArray *_accessoryControllers;
    id _previewController;
    NSView *_thumbnailView;
    NSInteger _options;
    NSString *_jobStyleHint;
    NSPrintInfo *_originalPrintInfo;
    id _delegate;
    SEL _didEndSelector;
    void *_contextInfo;
    NSPrintInfo *_presentedPrintInfo;
    NSWindowController *_windowController;



    unsigned char _compatibilityPadding[200];

}



+ (NSPrintPanel *)printPanel;





- (void)addAccessoryController:(NSViewController<NSPrintPanelAccessorizing> *)accessoryController;
- (void)removeAccessoryController:(NSViewController<NSPrintPanelAccessorizing> *)accessoryController;
- (NSArray *)accessoryControllers;



- (void)setOptions:(NSPrintPanelOptions)options;
- (NSPrintPanelOptions)options;



- (void)setDefaultButtonTitle:(NSString *)defaultButtonTitle;
- (NSString *)defaultButtonTitle;



- (void)setHelpAnchor:(NSString *)helpAnchor;
- (NSString *)helpAnchor;






- (void)setJobStyleHint:(NSString *)hint;
- (NSString *)jobStyleHint;







- (void)beginSheetWithPrintInfo:(NSPrintInfo *)printInfo modalForWindow:(NSWindow *)docWindow delegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo;




- (NSInteger)runModalWithPrintInfo:(NSPrintInfo *)printInfo;

- (NSInteger)runModal;





- (NSPrintInfo *)printInfo;



@end

@interface NSPrintPanel(NSDeprecated)



- (void)setAccessoryView:(NSView *)accessoryView;
- (NSView *)accessoryView;



- (void)updateFromPrintInfo;
- (void)finalWritePrintInfo;

@end
# 79 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3


# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSScreen.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSScreen.h" 3
@class NSArray;

typedef struct NSScreenAuxiliary NSScreenAuxiliaryOpaque;

@interface NSScreen : NSObject {

@private
    NSRect _frame;
    NSWindowDepth _depth;
    int _screenNumber;
    NSScreenAuxiliaryOpaque *_auxiliaryStorage;
}

+ (NSArray *)screens;
+ (NSScreen *)mainScreen;
+ (NSScreen *)deepestScreen;

- (NSWindowDepth)depth;
- (NSRect)frame;
- (NSRect)visibleFrame;
- (NSDictionary *)deviceDescription;

- (const NSWindowDepth *)supportedWindowDepths;




- (CGFloat)userSpaceScaleFactor;



@end
# 82 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSScrollView.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSScrollView.h" 3
@class NSColor, NSClipView, NSRulerView, NSScroller;

typedef struct __SFlags {

    unsigned int vScrollerRequired:1;
    unsigned int hScrollerRequired:1;
    unsigned int vScrollerStatus:1;
    unsigned int hScrollerStatus:1;
    unsigned int noDynamicScrolling:1;
    NSBorderType borderType:2;
    unsigned int oldRulerInstalled:1;
    unsigned int showRulers:1;
    unsigned int hasHorizontalRuler:1;
    unsigned int hasVerticalRuler:1;
    unsigned int needsTile:1;
    unsigned int doesNotDrawBackground:1;
    unsigned int skipRemoveSuperviewCheck:1;
    unsigned int focusRingNeedsRedisplay:1;
    unsigned int hasCustomLineBorderColor:1;
    unsigned int autohidesScrollers:1;
    unsigned int autoforwardsScrollWheelEvents:1;
    unsigned int RESERVED:14;
# 52 "/System/Library/Frameworks/AppKit.framework/Headers/NSScrollView.h" 3
} _SFlags;

@interface NSScrollView : NSView
{

    NSScroller *_vScroller;
    NSScroller *_hScroller;
    NSClipView *_contentView;
    NSClipView *_headerClipView;
    NSView * _cornerView;
    id _ruler;
    _SFlags _sFlags;
    void * _extraIvars;


    NSRulerView *_horizontalRuler;
    NSRulerView *_verticalRuler;
}

+ (NSSize)frameSizeForContentSize:(NSSize)cSize hasHorizontalScroller:(BOOL)hFlag hasVerticalScroller:(BOOL)vFlag borderType:(NSBorderType)aType;
+ (NSSize)contentSizeForFrameSize:(NSSize)fSize hasHorizontalScroller:(BOOL)hFlag hasVerticalScroller:(BOOL)vFlag borderType:(NSBorderType)aType;

- (NSRect)documentVisibleRect;
- (NSSize)contentSize;

- (void)setDocumentView:(NSView *)aView;
- (id)documentView;
- (void)setContentView:(NSClipView *)contentView;
- (NSClipView *)contentView;
- (void)setDocumentCursor:(NSCursor *)anObj;
- (NSCursor *)documentCursor;
- (void)setBorderType:(NSBorderType)aType;
- (NSBorderType)borderType;
- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;
- (void)setDrawsBackground:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setHasVerticalScroller:(BOOL)flag;
- (BOOL)hasVerticalScroller;
- (void)setHasHorizontalScroller:(BOOL)flag;
- (BOOL)hasHorizontalScroller;
- (void)setVerticalScroller:(NSScroller *)anObject;
- (NSScroller *)verticalScroller;
- (void)setHorizontalScroller:(NSScroller *)anObject;
- (NSScroller *)horizontalScroller;

- (BOOL)autohidesScrollers;
- (void)setAutohidesScrollers:(BOOL)flag;

- (void)setHorizontalLineScroll:(CGFloat)value;
- (void)setVerticalLineScroll:(CGFloat)value;
- (void)setLineScroll:(CGFloat)value;
- (CGFloat)horizontalLineScroll;
- (CGFloat)verticalLineScroll;
- (CGFloat)lineScroll;
- (void)setHorizontalPageScroll:(CGFloat)value;
- (void)setVerticalPageScroll:(CGFloat)value;
- (void)setPageScroll:(CGFloat)value;
- (CGFloat)horizontalPageScroll;
- (CGFloat)verticalPageScroll;
- (CGFloat)pageScroll;
- (void)setScrollsDynamically:(BOOL)flag;
- (BOOL)scrollsDynamically;
- (void)tile;
- (void)reflectScrolledClipView:(NSClipView *)cView;
- (void)scrollWheel:(NSEvent *)theEvent;
@end

@interface NSScrollView(NSRulerSupport)

+ (void)setRulerViewClass:(Class)rulerViewClass;
+ (Class)rulerViewClass;

- (void)setRulersVisible:(BOOL)flag;
- (BOOL)rulersVisible;

- (void)setHasHorizontalRuler:(BOOL)flag;
- (BOOL)hasHorizontalRuler;
- (void)setHasVerticalRuler:(BOOL)flag;
- (BOOL)hasVerticalRuler;

- (void)setHorizontalRulerView:(NSRulerView *)ruler;
- (NSRulerView *)horizontalRulerView;
- (void)setVerticalRulerView:(NSRulerView *)ruler;
- (NSRulerView *)verticalRulerView;

@end
# 83 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSScroller.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSScroller.h" 3
enum {
    NSScrollerArrowsMaxEnd = 0,
    NSScrollerArrowsMinEnd = 1,
    NSScrollerArrowsDefaultSetting = 0,
    NSScrollerArrowsNone = 2
};
typedef NSUInteger NSScrollArrowPosition;

enum {
    NSNoScrollerParts = 0,
    NSOnlyScrollerArrows = 1,
    NSAllScrollerParts = 2
};
typedef NSUInteger NSUsableScrollerParts;

enum {
    NSScrollerNoPart = 0,
    NSScrollerDecrementPage = 1,
    NSScrollerKnob = 2,
    NSScrollerIncrementPage = 3,
    NSScrollerDecrementLine = 4,
    NSScrollerIncrementLine = 5,
    NSScrollerKnobSlot = 6
};
typedef NSUInteger NSScrollerPart;

enum {
    NSScrollerIncrementArrow = 0,
    NSScrollerDecrementArrow = 1
};
typedef NSUInteger NSScrollerArrow;

@interface NSScroller : NSControl
{

    CGFloat _curValue;
    CGFloat _percent;
    CGFloat _knobSize;
    struct __sFlags2 {
        unsigned int hitPart:4;
        unsigned int controlSize:2;
        unsigned int inMaxEnd:1;
        unsigned int setFloatValueOverridden:1;
        unsigned int setFloatValueKnobProportionOverridden:1;
        unsigned int reserved:23;
    } _sFlags2;
    id _target;
    SEL _action;
    struct _sFlags {
 unsigned int isHoriz:1;
        NSScrollArrowPosition arrowsLoc:2;
        NSUsableScrollerParts partsUsable:2;
 unsigned int fine:1;
 unsigned int needsEnableFlush:1;
 unsigned int thumbing:1;
 unsigned int slotDrawn:1;
 unsigned int knobDrawn:1;
        unsigned int lit:1;
        unsigned int knobLit:1;
        unsigned int reserved:1;
        unsigned int controlTint:3;
 unsigned int repeatCount:16;
    } sFlags;
}

+ (CGFloat)scrollerWidth;
+ (CGFloat)scrollerWidthForControlSize:(NSControlSize)controlSize;

- (void)drawParts;
- (NSRect)rectForPart:(NSScrollerPart)partCode;
- (void)checkSpaceForParts;
- (NSUsableScrollerParts)usableParts;
- (void)setArrowsPosition:(NSScrollArrowPosition)where;
- (NSScrollArrowPosition)arrowsPosition;
- (void)setControlTint:(NSControlTint)controlTint;
- (NSControlTint)controlTint;
- (void)setControlSize:(NSControlSize)controlSize;
- (NSControlSize)controlSize;
- (void)drawArrow:(NSScrollerArrow)whichArrow highlight:(BOOL)flag;
- (void)drawKnob;
- (void)drawKnobSlotInRect:(NSRect)slotRect highlight:(BOOL)flag;
- (void)highlight:(BOOL)flag;
- (NSScrollerPart)testPart:(NSPoint)thePoint;
- (void)trackKnob:(NSEvent *)theEvent;
- (void)trackScrollButtons:(NSEvent *)theEvent;
- (NSScrollerPart)hitPart;
- (CGFloat)knobProportion;

- (void)setKnobProportion:(CGFloat)proportion;


@end

@interface NSScroller(NSDeprecated)


- (void)setFloatValue:(float)aFloat knobProportion:(CGFloat)proportion;
@end
# 84 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSegmentedControl.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSSegmentedControl.h" 3
@class NSImage;


enum {
    NSSegmentStyleAutomatic = 0,
    NSSegmentStyleRounded = 1,
    NSSegmentStyleTexturedRounded = 2,
    NSSegmentStyleRoundRect = 3,
    NSSegmentStyleTexturedSquare = 4,
    NSSegmentStyleCapsule = 5,
    NSSegmentStyleSmallSquare = 6
};

typedef NSInteger NSSegmentStyle;


@interface NSSegmentedControl : NSControl {
  @private
    NSInteger _reserved1;
    NSInteger _reserved2;
    NSInteger _reserved3;
    NSInteger _reserved4;
}

- (void)setSegmentCount:(NSInteger)count;
- (NSInteger)segmentCount;

- (void)setSelectedSegment:(NSInteger)selectedSegment;
- (NSInteger)selectedSegment;


- (BOOL)selectSegmentWithTag:(NSInteger)tag;


- (void)setWidth:(CGFloat)width forSegment:(NSInteger)segment;
- (CGFloat)widthForSegment:(NSInteger)segment;

- (void)setImage:(NSImage *)image forSegment:(NSInteger)segment;
- (NSImage *)imageForSegment:(NSInteger)segment;



- (void)setImageScaling:(NSImageScaling)scaling forSegment:(NSInteger)segment;
- (NSImageScaling)imageScalingForSegment:(NSInteger)segment;



- (void)setLabel:(NSString *)label forSegment:(NSInteger)segment;
- (NSString *)labelForSegment:(NSInteger)segment;

- (void)setMenu:(NSMenu *)menu forSegment:(NSInteger)segment;
- (NSMenu *)menuForSegment:(NSInteger)segment;

- (void)setSelected:(BOOL)selected forSegment:(NSInteger)segment;
- (BOOL)isSelectedForSegment:(NSInteger)segment;

- (void)setEnabled:(BOOL)enabled forSegment:(NSInteger)segment;
- (BOOL)isEnabledForSegment:(NSInteger)segment;


- (void)setSegmentStyle:(NSSegmentStyle)segmentStyle;
- (NSSegmentStyle)segmentStyle;


@end
# 85 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSegmentedCell.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSSegmentedCell.h" 3
enum {
    NSSegmentSwitchTrackingSelectOne = 0,
    NSSegmentSwitchTrackingSelectAny = 1,
    NSSegmentSwitchTrackingMomentary = 2
};
typedef NSUInteger NSSegmentSwitchTracking;

@class NSMutableArray;

@interface NSSegmentedCell : NSActionCell {
  @private
    NSMutableArray* _segmentItems;
    NSInteger _selectedSegment;
    NSInteger _keySegment;
    NSRect _lastBounds;
    struct {
 unsigned int trackingMode:3;
 unsigned int trimmedLabels:1;
 unsigned int drawing:1;
 unsigned int reserved1:2;
 unsigned int recalcToolTips:1;
        unsigned int usesWindowsStyle:1;
        unsigned int dontShowSelectedAndPressedAppearance:1;
 unsigned int style:8;
 unsigned int reserved:14;
    } _seFlags;
    NSInteger _reserved1;
    NSInteger _reserved2;
    NSInteger _reserved3;
    NSInteger _reserved4;
}



- (void)setSegmentCount:(NSInteger)count;
- (NSInteger)segmentCount;



- (void)setSelectedSegment:(NSInteger)selectedSegment;
- (NSInteger)selectedSegment;


- (BOOL)selectSegmentWithTag:(NSInteger)tag;




- (void)makeNextSegmentKey;
- (void)makePreviousSegmentKey;

- (void)setTrackingMode:(NSSegmentSwitchTracking)trackingMode;
- (NSSegmentSwitchTracking)trackingMode;






- (void)setWidth:(CGFloat)width forSegment:(NSInteger)segment;
- (CGFloat)widthForSegment:(NSInteger)segment;

- (void)setImage:(NSImage *)image forSegment:(NSInteger)segment;
- (NSImage *)imageForSegment:(NSInteger)segment;



- (void)setImageScaling:(NSImageScaling)scaling forSegment:(NSInteger)segment;
- (NSImageScaling)imageScalingForSegment:(NSInteger)segment;



- (void)setLabel:(NSString *)label forSegment:(NSInteger)segment;
- (NSString *)labelForSegment:(NSInteger)segment;

- (void)setSelected:(BOOL)selected forSegment:(NSInteger)segment;
- (BOOL)isSelectedForSegment:(NSInteger)segment;

- (void)setEnabled:(BOOL)enabled forSegment:(NSInteger)segment;
- (BOOL)isEnabledForSegment:(NSInteger)segment;

- (void)setMenu:(NSMenu *)menu forSegment:(NSInteger)segment;
- (NSMenu *)menuForSegment:(NSInteger)segment;

- (void)setToolTip:(NSString *)toolTip forSegment:(NSInteger)segment;
- (NSString *)toolTipForSegment:(NSInteger)segment;

- (void)setTag:(NSInteger)tag forSegment:(NSInteger)segment;
- (NSInteger)tagForSegment:(NSInteger)segment;



- (void)setSegmentStyle:(NSSegmentStyle)segmentStyle;
- (NSSegmentStyle)segmentStyle;




- (void)drawSegment:(NSInteger)segment inFrame:(NSRect)frame withView:(NSView *)controlView;

@end
# 86 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSlider.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSSlider.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSliderCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSSliderCell.h" 3
enum {
    NSTickMarkBelow = 0,
    NSTickMarkAbove = 1,
    NSTickMarkLeft = NSTickMarkAbove,
    NSTickMarkRight = NSTickMarkBelow
};
typedef NSUInteger NSTickMarkPosition;


enum {
    NSLinearSlider = 0,
    NSCircularSlider = 1
};
typedef NSUInteger NSSliderType;


@interface NSSliderCell : NSActionCell
{

    int _reserved[3];
    int _numberOfTickMarks;
    double _altIncValue;
    double _value;
    double _maxValue;
    double _minValue;
    NSRect _trackRect;
    struct __sliderCellFlags {
        unsigned int weAreVertical:1;
        unsigned int weAreVerticalSet:1;
        unsigned int reserved1:1;
        unsigned int isPressed:1;
        unsigned int allowsTickMarkValuesOnly:1;
        unsigned int tickMarkPosition:1;
        unsigned int sliderType:2;
        unsigned int drawing:1;
        unsigned int reserved2:23;
    } _scFlags;
}


+ (BOOL)prefersTrackingUntilMouseUp;


- (double)minValue;
- (void)setMinValue:(double)aDouble;
- (double)maxValue;
- (void)setMaxValue:(double)aDouble;
- (void)setAltIncrementValue:(double)incValue;
- (double)altIncrementValue;
- (NSInteger)isVertical;
- (void)setTitleColor:(NSColor *)newColor;
- (NSColor *)titleColor;
- (void)setTitleFont:(NSFont *)fontObj;
- (NSFont *)titleFont;
- (NSString *)title;
- (void)setTitle:(NSString *)aString;
- (void)setTitleCell:(NSCell *)aCell;
- (id)titleCell;
- (void)setKnobThickness:(CGFloat)aFloat;
- (CGFloat)knobThickness;
- (NSRect)knobRectFlipped:(BOOL)flipped;
- (void)drawKnob:(NSRect)knobRect;
- (void)drawKnob;
- (void)drawBarInside:(NSRect)aRect flipped:(BOOL)flipped;
- (NSRect)trackRect;


- (void) setSliderType:(NSSliderType)sliderType;
- (NSSliderType)sliderType;


@end

@interface NSSliderCell(NSTickMarkSupport)



- (void)setNumberOfTickMarks:(NSInteger)count;
- (NSInteger)numberOfTickMarks;



- (void)setTickMarkPosition:(NSTickMarkPosition)position;
- (NSTickMarkPosition)tickMarkPosition;




- (void)setAllowsTickMarkValuesOnly:(BOOL)yorn;
- (BOOL)allowsTickMarkValuesOnly;



- (double)tickMarkValueAtIndex:(NSInteger)index;



- (NSRect)rectOfTickMarkAtIndex:(NSInteger)index;




- (NSInteger)indexOfTickMarkAtPoint:(NSPoint)point;

- (double)closestTickMarkValueToValue:(double)value;

@end
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSSlider.h" 2 3

@interface NSSlider : NSControl

- (double)minValue;
- (void)setMinValue:(double)aDouble;
- (double)maxValue;
- (void)setMaxValue:(double)aDouble;
- (void)setAltIncrementValue:(double)incValue;
- (double)altIncrementValue;
- (void)setTitleCell:(NSCell *)aCell;
- (id)titleCell;
- (void)setTitleColor:(NSColor *)newColor;
- (NSColor *)titleColor;
- (void)setTitleFont:(NSFont *)fontObj;
- (NSFont *)titleFont;
- (NSString *)title;
- (void)setTitle:(NSString *)aString;
- (void)setKnobThickness:(CGFloat)aFloat;
- (CGFloat)knobThickness;
- (void)setImage:(NSImage *)backgroundImage;
- (NSImage *)image;
- (NSInteger)isVertical;
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent;

@end

@interface NSSlider(NSTickMarkSupport)



- (void)setNumberOfTickMarks:(NSInteger)count;
- (NSInteger)numberOfTickMarks;



- (void)setTickMarkPosition:(NSTickMarkPosition)position;
- (NSTickMarkPosition)tickMarkPosition;




- (void)setAllowsTickMarkValuesOnly:(BOOL)yorn;
- (BOOL)allowsTickMarkValuesOnly;



- (double)tickMarkValueAtIndex:(NSInteger)index;



- (NSRect)rectOfTickMarkAtIndex:(NSInteger)index;




- (NSInteger)indexOfTickMarkAtPoint:(NSPoint)point;

- (double)closestTickMarkValueToValue:(double)value;

@end
# 87 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3



# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextField.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextField.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextFieldCell.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextFieldCell.h" 3
enum {
    NSTextFieldSquareBezel = 0,
    NSTextFieldRoundedBezel = 1
};
typedef NSUInteger NSTextFieldBezelStyle;


@class NSColor;

@interface NSTextFieldCell : NSActionCell {

    NSColor *_backgroundColor;
    NSColor *_textColor;
    struct __tfFlags {
 unsigned int drawsBackground:1;
 unsigned int bezelStyle:3;
 unsigned int thcSortDirection:2;
 unsigned int thcSortPriority:4;
 unsigned int mini:1;
 unsigned int textColorIgnoresNormalDisableFlag:1;
 unsigned int textColorDisableFlag:1;
        unsigned int thcForceHighlightForSort:1;
 unsigned int invalidTextColor:1;
        unsigned int notificationForMarkedText:1;
 unsigned int reservedTextFieldCell:16;
    } _tfFlags;
}

- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;
- (void)setDrawsBackground:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setTextColor:(NSColor *)color;
- (NSColor *)textColor;
- (NSText *)setUpFieldEditorAttributes:(NSText *)textObj;


- (void)setBezelStyle:(NSTextFieldBezelStyle)style;
- (NSTextFieldBezelStyle)bezelStyle;



- (void)setPlaceholderString:(NSString*)string;
- (NSString*)placeholderString;
- (void)setPlaceholderAttributedString:(NSAttributedString*)string;
- (NSAttributedString*)placeholderAttributedString;



- (void)setWantsNotificationForMarkedText:(BOOL)flag;



- (NSArray *)allowedInputSourceLocales;
- (void)setAllowedInputSourceLocales:(NSArray *)localeIdentifiers;


@end
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextField.h" 2 3


@interface NSTextField : NSControl <NSUserInterfaceValidations>
{

    id _delegate;
    SEL _errorAction;
}

- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;
- (void)setDrawsBackground:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setTextColor:(NSColor *)color;
- (NSColor *)textColor;
- (BOOL)isBordered;
- (void)setBordered:(BOOL)flag;
- (BOOL)isBezeled;
- (void)setBezeled:(BOOL)flag;
- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;
- (BOOL)isSelectable;
- (void)setSelectable:(BOOL)flag;
- (void)selectText:(id)sender;
- (id)delegate;
- (void)setDelegate:(id)anObject;
- (BOOL)textShouldBeginEditing:(NSText *)textObject;
- (BOOL)textShouldEndEditing:(NSText *)textObject;
- (void)textDidBeginEditing:(NSNotification *)notification;
- (void)textDidEndEditing:(NSNotification *)notification;
- (void)textDidChange:(NSNotification *)notification;
- (BOOL)acceptsFirstResponder;


- (void)setBezelStyle:(NSTextFieldBezelStyle)style;
- (NSTextFieldBezelStyle)bezelStyle;

@end

@interface NSTextField(NSKeyboardUI)
- (void)setTitleWithMnemonic:(NSString *)stringWithAmpersand;
@end

@interface NSTextField(NSTextFieldAttributedStringMethods)
- (BOOL)allowsEditingTextAttributes;
- (void)setAllowsEditingTextAttributes:(BOOL)flag;
- (BOOL)importsGraphics;
- (void)setImportsGraphics:(BOOL)flag;
@end
# 91 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3


# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTokenField.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextContainer.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextContainer.h" 3
@class NSLayoutManager;
@class NSTextView;


enum {
    NSLineSweepLeft = 0,
    NSLineSweepRight = 1,
    NSLineSweepDown = 2,
    NSLineSweepUp = 3
};
typedef NSUInteger NSLineSweepDirection;


enum {
    NSLineDoesntMove = 0,
    NSLineMovesLeft = 1,
    NSLineMovesRight = 2,
    NSLineMovesDown = 3,
    NSLineMovesUp = 4
};
typedef NSUInteger NSLineMovementDirection;


@interface NSTextContainer : NSObject <NSCoding> {



  @private
    NSLayoutManager *_layoutManager;
    NSTextView *_textView;
    NSSize _size;
    CGFloat _lineFragmentPadding;
    struct __tcFlags {
        unsigned short widthTracksTextView:1;
        unsigned short heightTracksTextView:1;
        unsigned short observingFrameChanges:1;
        unsigned short _reserved:13;
    } _tcFlags;
}



- (id)initWithContainerSize:(NSSize)size;



- (NSLayoutManager *)layoutManager;
- (void)setLayoutManager:(NSLayoutManager *)layoutManager;


- (void)replaceLayoutManager:(NSLayoutManager *)newLayoutManager;


- (NSTextView *)textView;
- (void)setTextView:(NSTextView *)textView;


- (void)setWidthTracksTextView:(BOOL)flag;
- (BOOL)widthTracksTextView;
- (void)setHeightTracksTextView:(BOOL)flag;
- (BOOL)heightTracksTextView;




- (void)setContainerSize:(NSSize)size;
- (NSSize)containerSize;


- (void)setLineFragmentPadding:(CGFloat)pad;
- (CGFloat)lineFragmentPadding;




- (NSRect)lineFragmentRectForProposedRect:(NSRect)proposedRect sweepDirection:(NSLineSweepDirection)sweepDirection movementDirection:(NSLineMovementDirection)movementDirection remainingRect:(NSRectPointer)remainingRect;


- (BOOL)isSimpleRectangularTextContainer;




- (BOOL)containsPoint:(NSPoint)point;


@end
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSTokenField.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTokenFieldCell.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSTokenFieldCell.h" 3
@class NSMutableArray, NSMutableCharacterSet, NSMutableDictionary, NSTextContainer;

enum {
    NSDefaultTokenStyle,
    NSPlainTextTokenStyle,
    NSRoundedTokenStyle
};
typedef NSUInteger NSTokenStyle;


@interface NSTokenFieldCell : NSTextFieldCell {
    NSTimeInterval _completionDelay;
    NSTokenStyle _tokenStyle;
    id _delegate;
    NSMutableDictionary *_tokens;
    NSCharacterSet *_tokenizingCharacterSet;
    id _reserved1;
    BOOL _editingText;
    BOOL _lastTextChangeWasSelectionDeletion;
    BOOL _reserved;
    BOOL _editing;
    BOOL _inAutoCompleteTyping;
    BOOL _addingObject;
    id _spotlightedAttachment;
    id _layoutManager;
    NSTextContainer *_textContainer;
    NSRange _editingRange;
    NSMutableArray *_dirtyTokens;
    NSString *_lastTokenizingCharacter;

    NSUInteger _insertionGlyphIndexForDrag;
    id _reserved2;
    id _reserved3;
    id _reserved4;
}



- (void)setTokenStyle: (NSTokenStyle) style;
- (NSTokenStyle)tokenStyle;



- (void)setCompletionDelay: (NSTimeInterval) delay;
- (NSTimeInterval)completionDelay;
+ (NSTimeInterval)defaultCompletionDelay;

- (void)setTokenizingCharacterSet:(NSCharacterSet *)characterSet;
- (NSCharacterSet *)tokenizingCharacterSet;
+ (NSCharacterSet *)defaultTokenizingCharacterSet;

- (void)setDelegate:(id)anObject;
- (id)delegate;

@end

@interface NSObject (NSTokenFieldCellDelegate)





- (NSArray *)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell completionsForSubstring:(NSString *)substring indexOfToken:(NSInteger)tokenIndex indexOfSelectedItem:(NSInteger *)selectedIndex;




- (NSArray *)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell shouldAddObjects:(NSArray *)tokens atIndex:(NSUInteger)index;



- (NSString *)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell displayStringForRepresentedObject:(id)representedObject;
- (NSString *)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell editingStringForRepresentedObject:(id)representedObject;
- (id)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell representedObjectForEditingString: (NSString *)editingString;



- (BOOL)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell writeRepresentedObjects:(NSArray *)objects toPasteboard:(NSPasteboard *)pboard;


- (NSArray *)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell readFromPasteboard:(NSPasteboard *)pboard;


- (NSMenu *)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell menuForRepresentedObject:(id)representedObject;
- (BOOL)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell hasMenuForRepresentedObject:(id)representedObject;


- (NSTokenStyle)tokenFieldCell:(NSTokenFieldCell *)tokenFieldCell styleForRepresentedObject:(id)representedObject;

@end
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSTokenField.h" 2 3




@interface NSTokenField : NSTextField {
    BOOL _reserved1;
    BOOL _reserved2;
    BOOL _reserved3;
    BOOL _reserved4;

    NSTrackingRectTag _trackingRectTag;
    id _reserved5;
    id _reserved6;
    id _reserved7;
}



- (void)setTokenStyle: (NSTokenStyle) style;
- (NSTokenStyle)tokenStyle;

- (void)setCompletionDelay: (NSTimeInterval) delay;
- (NSTimeInterval)completionDelay;
+ (NSTimeInterval)defaultCompletionDelay;

- (void)setTokenizingCharacterSet:(NSCharacterSet *)characterSet;
- (NSCharacterSet *)tokenizingCharacterSet;
+ (NSCharacterSet *)defaultTokenizingCharacterSet;

@end

@interface NSObject (NSTokenFieldDelegate)





- (NSArray *)tokenField:(NSTokenField *)tokenField completionsForSubstring:(NSString *)substring indexOfToken:(NSInteger)tokenIndex indexOfSelectedItem:(NSInteger *)selectedIndex;




- (NSArray *)tokenField:(NSTokenField *)tokenField shouldAddObjects:(NSArray *)tokens atIndex:(NSUInteger)index;



- (NSString *)tokenField:(NSTokenField *)tokenField displayStringForRepresentedObject:(id)representedObject;
- (NSString *)tokenField:(NSTokenField *)tokenField editingStringForRepresentedObject:(id)representedObject;
- (id)tokenField:(NSTokenField *)tokenField representedObjectForEditingString: (NSString *)editingString;



- (BOOL)tokenField:(NSTokenField *)tokenField writeRepresentedObjects:(NSArray *)objects toPasteboard:(NSPasteboard *)pboard;


- (NSArray *)tokenField:(NSTokenField *)tokenField readFromPasteboard:(NSPasteboard *)pboard;


- (NSMenu *)tokenField:(NSTokenField *)tokenField menuForRepresentedObject:(id)representedObject;
- (BOOL)tokenField:(NSTokenField *)tokenField hasMenuForRepresentedObject:(id)representedObject;


- (NSTokenStyle)tokenField:(NSTokenField *)tokenField styleForRepresentedObject:(id)representedObject;

@end
# 94 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTrackingArea.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSTrackingArea.h" 3
@class NSDictionary;


enum {
    NSTrackingMouseEnteredAndExited = 0x01,
    NSTrackingMouseMoved = 0x02,
    NSTrackingCursorUpdate = 0x04,
};


enum {
    NSTrackingActiveWhenFirstResponder = 0x10,
    NSTrackingActiveInKeyWindow = 0x20,
    NSTrackingActiveInActiveApp = 0x40,
    NSTrackingActiveAlways = 0x80,
};


enum {
    NSTrackingAssumeInside = 0x100,
    NSTrackingInVisibleRect = 0x200,
    NSTrackingEnabledDuringMouseDrag = 0x400
};

typedef NSUInteger NSTrackingAreaOptions;

@interface NSTrackingArea : NSObject <NSCopying, NSCoding>
{
@private
    NSRect _rect;
    id _owner;
    NSDictionary * _userInfo;
    NSTrackingAreaOptions _options;
    NSInteger _privateFlags;
    void *_reserved;
}
- (NSTrackingArea *)initWithRect:(NSRect)rect options:(NSTrackingAreaOptions)options owner:(id)owner userInfo:(NSDictionary *)userInfo;
- (NSRect)rect;
- (NSTrackingAreaOptions)options;
- (id)owner;
- (NSDictionary *)userInfo;
@end
# 96 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3



# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindowController.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindowController.h" 3
@class NSArray, NSDocument, NSWindow;

@interface NSWindowController : NSResponder <NSCoding> {
    @private
    NSWindow *_window;
    NSString *_windowNibName;
    NSDocument *_document;
    NSArray *_topLevelObjects;
    id _owner;
    struct __wcFlags {
        unsigned int shouldCloseDocument:1;
        unsigned int shouldCascade:1;
        unsigned int nibIsLoaded:1;
        unsigned int nibNameIsPath:1;
        unsigned int RESERVED:28;
    } _wcFlags;
    id _autounbinder;
    void *_reserved;
}

- (id)initWithWindow:(NSWindow *)window;


- (id)initWithWindowNibName:(NSString *)windowNibName;
- (id)initWithWindowNibName:(NSString *)windowNibName owner:(id)owner;
- (id)initWithWindowNibPath:(NSString *)windowNibPath owner:(id)owner;






- (NSString *)windowNibName;


- (NSString *)windowNibPath;


- (id)owner;


- (void)setWindowFrameAutosaveName:(NSString *)name;
- (NSString *)windowFrameAutosaveName;


- (void)setShouldCascadeWindows:(BOOL)flag;
- (BOOL)shouldCascadeWindows;






- (id)document;


- (void)setDocument:(NSDocument *)document;


- (void)setDocumentEdited:(BOOL)dirtyFlag;


- (void)setShouldCloseDocument:(BOOL)flag;
- (BOOL)shouldCloseDocument;






- (void)setWindow:(NSWindow *)window;


- (NSWindow *)window;


- (void)synchronizeWindowTitleWithDocumentName;


- (NSString *)windowTitleForDocumentDisplayName:(NSString *)displayName;


- (void)close;


- (void)showWindow:(id)sender;






- (BOOL)isWindowLoaded;


- (void)windowWillLoad;
- (void)windowDidLoad;


- (void)loadWindow;


@end
# 100 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSWorkspace.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSWorkspace.h" 3
@class NSArray, NSError, NSImage, NSView, NSNotificationCenter, NSURL;


typedef NSUInteger NSWorkspaceLaunchOptions;
enum {
     NSWorkspaceLaunchAndPrint = 0x00000002,
     NSWorkspaceLaunchInhibitingBackgroundOnly = 0x00000080,
     NSWorkspaceLaunchWithoutAddingToRecents = 0x00000100,
     NSWorkspaceLaunchWithoutActivation = 0x00000200,
     NSWorkspaceLaunchAsync = 0x00010000,
     NSWorkspaceLaunchAllowingClassicStartup = 0x00020000,
     NSWorkspaceLaunchPreferringClassic = 0x00040000,
     NSWorkspaceLaunchNewInstance = 0x00080000,
     NSWorkspaceLaunchAndHide = 0x00100000,
     NSWorkspaceLaunchAndHideOthers = 0x00200000,

     NSWorkspaceLaunchDefault = NSWorkspaceLaunchAsync |
NSWorkspaceLaunchAllowingClassicStartup
};



typedef NSUInteger NSWorkspaceIconCreationOptions;
enum {
    NSExcludeQuickDrawElementsIconCreationOption = 1 << 1,
    NSExclude10_4ElementsIconCreationOption = 1 << 2
};


@interface NSWorkspace : NSObject {

  @private
    NSNotificationCenter *notificationCenter;

    int deviceStatusCount;
    int applicationStatusCount;

    void *_reservedWorkspace1;
}

+ (NSWorkspace *)sharedWorkspace;

- (NSNotificationCenter *)notificationCenter;

- (BOOL)openFile:(NSString *)fullPath;
- (BOOL)openFile:(NSString *)fullPath withApplication:(NSString *)appName;
- (BOOL)openFile:(NSString *)fullPath withApplication:(NSString *)appName andDeactivate:(BOOL)flag;

- (BOOL)openTempFile:(NSString *)fullPath;

- (BOOL)openFile:(NSString *)fullPath fromImage:(NSImage *)anImage at:(NSPoint)point inView:(NSView *)aView;

- (BOOL)openURL:(NSURL *)url;

- (BOOL)launchApplication:(NSString *)appName;
- (BOOL)launchApplication:(NSString *)appName showIcon:(BOOL)showIcon autolaunch:(BOOL)autolaunch;
- (NSString *)fullPathForApplication:(NSString *)appName;

- (BOOL)selectFile:(NSString *)fullPath inFileViewerRootedAtPath:(NSString *)rootFullpath;

- (void)findApplications;

- (void)noteFileSystemChanged;
- (void)noteFileSystemChanged:(NSString *)path;
- (BOOL)fileSystemChanged;
- (void)noteUserDefaultsChanged;
- (BOOL)userDefaultsChanged;

- (BOOL)getInfoForFile:(NSString *)fullPath application:(NSString **)appName type:(NSString **)type;
- (BOOL)isFilePackageAtPath:(NSString *)fullPath;

- (NSImage *)iconForFile:(NSString *)fullPath;
- (NSImage *)iconForFiles:(NSArray *)fullPaths;
- (NSImage *)iconForFileType:(NSString *)fileType;

- (BOOL)setIcon:(NSImage *)image forFile:(NSString *)fullPath options:(NSWorkspaceIconCreationOptions)options;


- (BOOL)getFileSystemInfoForPath:(NSString *)fullPath isRemovable:(BOOL *)removableFlag isWritable:(BOOL *)writableFlag isUnmountable:(BOOL *)unmountableFlag description:(NSString **)description type:(NSString **)fileSystemType;

- (BOOL)performFileOperation:(NSString *)operation source:(NSString *)source destination:(NSString *)destination files:(NSArray *)files tag:(NSInteger *)tag;

- (BOOL)unmountAndEjectDeviceAtPath:(NSString *)path;
- (NSInteger)extendPowerOffBy:(NSInteger)requested;

- (void)slideImage:(NSImage *)image from:(NSPoint)fromPoint to:(NSPoint)toPoint;

- (void)hideOtherApplications;

- (NSArray *)mountedLocalVolumePaths;
- (NSArray *)mountedRemovableMedia;
- (NSArray *)mountNewRemovableMedia;
- (void)checkForRemovableMedia;



- (NSString *)absolutePathForAppBundleWithIdentifier:(NSString *)bundleIdentifier;
- (BOOL)launchAppWithBundleIdentifier:(NSString *)bundleIdentifier options:(NSWorkspaceLaunchOptions)options additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor launchIdentifier:(NSNumber **)identifier;
- (BOOL)openURLs:(NSArray *)urls withAppBundleIdentifier:(NSString *)bundleIdentifier options:(NSWorkspaceLaunchOptions)options additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor launchIdentifiers:(NSArray **)identifiers;
# 126 "/System/Library/Frameworks/AppKit.framework/Headers/NSWorkspace.h" 3
- (NSArray *)launchedApplications;
- (NSDictionary *)activeApplication;
# 137 "/System/Library/Frameworks/AppKit.framework/Headers/NSWorkspace.h" 3
- (NSString *)typeOfFile:(NSString *)absoluteFilePath error:(NSError **)outError;





- (NSString *)localizedDescriptionForType:(NSString *)typeName;





- (NSString *)preferredFileNameExtensionForType:(NSString *)typeName;





- (BOOL)fileNameExtension:(NSString *)fileNameExtension isValidForType:(NSString *)typeName;







- (BOOL)type:(NSString *)firstTypeName conformsToType:(NSString *)secondTypeName;



@end



extern "C" NSString *NSWorkspaceDidLaunchApplicationNotification;
extern "C" NSString *NSWorkspaceDidMountNotification;
extern "C" NSString *NSWorkspaceDidPerformFileOperationNotification;
extern "C" NSString *NSWorkspaceDidTerminateApplicationNotification;
extern "C" NSString *NSWorkspaceDidUnmountNotification;
extern "C" NSString *NSWorkspaceWillLaunchApplicationNotification;
extern "C" NSString *NSWorkspaceWillPowerOffNotification;
extern "C" NSString *NSWorkspaceWillUnmountNotification;

extern "C" NSString *NSWorkspaceWillSleepNotification ;
extern "C" NSString *NSWorkspaceDidWakeNotification ;

extern "C" NSString *NSWorkspaceSessionDidBecomeActiveNotification ;
extern "C" NSString *NSWorkspaceSessionDidResignActiveNotification ;



extern "C" NSString *NSPlainFileType, *NSDirectoryFileType, *NSApplicationFileType;
extern "C" NSString *NSFilesystemFileType, *NSShellCommandFileType;



extern "C" NSString *NSWorkspaceMoveOperation;
extern "C" NSString *NSWorkspaceCopyOperation;
extern "C" NSString *NSWorkspaceLinkOperation;
extern "C" NSString *NSWorkspaceCompressOperation;
extern "C" NSString *NSWorkspaceDecompressOperation;
extern "C" NSString *NSWorkspaceEncryptOperation;
extern "C" NSString *NSWorkspaceDecryptOperation;
extern "C" NSString *NSWorkspaceDestroyOperation;
extern "C" NSString *NSWorkspaceRecycleOperation;
extern "C" NSString *NSWorkspaceDuplicateOperation;
# 101 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSComboBox.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSComboBox.h" 3
extern "C" NSString *NSComboBoxWillPopUpNotification;
extern "C" NSString *NSComboBoxWillDismissNotification;
extern "C" NSString *NSComboBoxSelectionDidChangeNotification;
extern "C" NSString *NSComboBoxSelectionIsChangingNotification;

@interface NSComboBox : NSTextField {

    id _dataSource;
}

- (BOOL)hasVerticalScroller;
- (void)setHasVerticalScroller:(BOOL)flag;
- (NSSize)intercellSpacing;
- (void)setIntercellSpacing:(NSSize)aSize;
- (CGFloat)itemHeight;
- (void)setItemHeight:(CGFloat)itemHeight;
- (NSInteger)numberOfVisibleItems;
- (void)setNumberOfVisibleItems:(NSInteger)visibleItems;


- (void)setButtonBordered:(BOOL)flag;
- (BOOL)isButtonBordered;


- (void)reloadData;
- (void)noteNumberOfItemsChanged;

- (void)setUsesDataSource:(BOOL)flag;
- (BOOL)usesDataSource;

- (void)scrollItemAtIndexToTop:(NSInteger)index;
- (void)scrollItemAtIndexToVisible:(NSInteger)index;

- (void)selectItemAtIndex:(NSInteger)index;
- (void)deselectItemAtIndex:(NSInteger)index;
- (NSInteger)indexOfSelectedItem;
- (NSInteger)numberOfItems;

- (BOOL)completes;
- (void)setCompletes:(BOOL)completes;


- (id)dataSource;
- (void)setDataSource:(id)aSource;


- (void)addItemWithObjectValue:(id)object;
- (void)addItemsWithObjectValues:(NSArray *)objects;
- (void)insertItemWithObjectValue:(id)object atIndex:(NSInteger)index;
- (void)removeItemWithObjectValue:(id)object;
- (void)removeItemAtIndex:(NSInteger)index;
- (void)removeAllItems;
- (void)selectItemWithObjectValue:(id)object;
- (id)itemObjectValueAtIndex:(NSInteger)index;
- (id)objectValueOfSelectedItem;
- (NSInteger)indexOfItemWithObjectValue:(id)object;
- (NSArray *)objectValues;

@end

@interface NSObject (NSComboBoxDataSource)
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;
- (NSUInteger)comboBox:(NSComboBox *)aComboBox indexOfItemWithStringValue:(NSString *)string;
- (NSString *)comboBox:(NSComboBox *)aComboBox completedString:(NSString *)string;
@end

@interface NSObject (NSComboBoxNotifications)
- (void)comboBoxWillPopUp:(NSNotification *)notification;
- (void)comboBoxWillDismiss:(NSNotification *)notification;
- (void)comboBoxSelectionDidChange:(NSNotification *)notification;
- (void)comboBoxSelectionIsChanging:(NSNotification *)notification;
@end
# 102 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSComboBoxCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSComboBoxCell.h" 3
@class NSButtonCell, NSTableView, NSMutableArray;

@interface NSComboBoxCell : NSTextFieldCell {

    id _delegate;
    id _dataSource;
    struct __cbcFlags {
        unsigned int usesDataSource:1;
        unsigned int completes:1;
 unsigned int buttonBordered:1;
        unsigned int popUpIsUp:1;
 unsigned int filteringEvents:1;
        unsigned int drawing:1;
        unsigned int synchronizingSelection:1;
        unsigned int subclassOverridesBoundsForButtonCell:1;
        unsigned int reserved:8;
 unsigned int visibleItems:16;
    } _cbcFlags;
    NSButtonCell *_buttonCell;
    NSTableView *_tableView;
    NSScrollView *_scrollView;
    NSWindow *_popUp;
    NSMutableArray *_popUpList;
    NSRect *_cellFrame;
    void *_reserved;
 }

- (BOOL)hasVerticalScroller;
- (void)setHasVerticalScroller:(BOOL)flag;
- (NSSize)intercellSpacing;
- (void)setIntercellSpacing:(NSSize)aSize;
- (CGFloat)itemHeight;
- (void)setItemHeight:(CGFloat)itemHeight;
- (NSInteger)numberOfVisibleItems;
- (void)setNumberOfVisibleItems:(NSInteger)visibleItems;


- (void)setButtonBordered:(BOOL)flag;
- (BOOL)isButtonBordered;


- (void)reloadData;
- (void)noteNumberOfItemsChanged;

- (void)setUsesDataSource:(BOOL)flag;
- (BOOL)usesDataSource;

- (void)scrollItemAtIndexToTop:(NSInteger)index;
- (void)scrollItemAtIndexToVisible:(NSInteger)index;

- (void)selectItemAtIndex:(NSInteger)index;
- (void)deselectItemAtIndex:(NSInteger)index;
- (NSInteger)indexOfSelectedItem;
- (NSInteger)numberOfItems;

- (BOOL)completes;
- (void)setCompletes:(BOOL)completes;
- (NSString *)completedString:(NSString *)string;


- (id)dataSource;
- (void)setDataSource:(id)aSource;


- (void)addItemWithObjectValue:(id)object;
- (void)addItemsWithObjectValues:(NSArray *)objects;
- (void)insertItemWithObjectValue:(id)object atIndex:(NSInteger)index;
- (void)removeItemWithObjectValue:(id)object;
- (void)removeItemAtIndex:(NSInteger)index;
- (void)removeAllItems;
- (void)selectItemWithObjectValue:(id)object;
- (id)itemObjectValueAtIndex:(NSInteger)index;
- (id)objectValueOfSelectedItem;
- (NSInteger)indexOfItemWithObjectValue:(id)object;
- (NSArray *)objectValues;

@end

@interface NSObject (NSComboBoxCellDataSource)
- (NSInteger)numberOfItemsInComboBoxCell:(NSComboBoxCell *)comboBoxCell;
- (id)comboBoxCell:(NSComboBoxCell *)aComboBoxCell objectValueForItemAtIndex:(NSInteger)index;
- (NSUInteger)comboBoxCell:(NSComboBoxCell *)aComboBoxCell indexOfItemWithStringValue:(NSString *)string;
- (NSString *)comboBoxCell:(NSComboBoxCell *)aComboBoxCell completedString:(NSString *)uncompletedString;
@end
# 103 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableColumn.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableColumn.h" 3
@class NSTableView;
@class NSCell;
@class NSImage;
@class NSSortDescriptor;

@interface NSTableColumn : NSObject <NSCoding>
{

    id _identifier;
    CGFloat _width;
    CGFloat _minWidth;
    CGFloat _maxWidth;
    NSTableView *_tableView;
    NSCell *_headerCell;
    NSCell *_dataCell;
    struct __colFlags {
        unsigned int oldIsResizable:1;
        unsigned int isEditable:1;
        unsigned int resizedPostingDisableCount:8;
        unsigned int canUseReorderResizeImageCache:1;
        unsigned int userResizingAllowed:1;
        unsigned int autoResizingAllowed:1;
        unsigned int hidden:1;
        unsigned int RESERVED:18;
    } _cFlags;
    id _tcAuxiliaryStorage;
}

- (id)initWithIdentifier:(id)identifier;

- (void)setIdentifier:(id)identifier;
- (id)identifier;
- (void)setTableView:(NSTableView *)tableView;
- (NSTableView *)tableView;
- (void)setWidth:(CGFloat)width;
- (CGFloat)width;
- (void)setMinWidth:(CGFloat)minWidth;
- (CGFloat)minWidth;
- (void)setMaxWidth:(CGFloat)maxWidth;
- (CGFloat)maxWidth;

- (void)setHeaderCell:(NSCell *)cell;
- (id)headerCell;



- (void)setDataCell:(NSCell *)cell;
- (id)dataCell;
- (id)dataCellForRow:(NSInteger)row;

- (void)setEditable:(BOOL)flag;
- (BOOL)isEditable;
- (void)sizeToFit;





- (void)setSortDescriptorPrototype:(NSSortDescriptor *)sortDescriptor;
- (NSSortDescriptor *)sortDescriptorPrototype;






- (void)setResizingMask:(NSUInteger)resizingMask;
- (NSUInteger)resizingMask;

enum {
    NSTableColumnNoResizing = 0,
    NSTableColumnAutoresizingMask = ( 1 << 0 ),
    NSTableColumnUserResizingMask = ( 1 << 1 ),
};






- (void)setHeaderToolTip:(NSString *)string;
- (NSString *)headerToolTip;



- (BOOL)isHidden;
- (void)setHidden:(BOOL)hidden;
# 107 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableColumn.h" 3
- (void)setResizable:(BOOL)flag;
- (BOOL)isResizable;

@end
# 104 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableHeaderCell.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableHeaderCell.h" 3
@interface NSTableHeaderCell : NSTextFieldCell {

}



- (void)drawSortIndicatorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView ascending:(BOOL)ascending priority:(NSInteger)priority;


- (NSRect)sortIndicatorRectForBounds:(NSRect)theRect;




@end
# 105 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableHeaderView.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableHeaderView.h" 3
@class NSTableView;
@class NSColor;
@class NSImage;
@class NSCursor;

@interface NSTableHeaderView : NSView
{

    NSTableView *_tableView;
    NSInteger _resizedColumn;
    NSInteger _draggedColumn;
    NSInteger _pressedColumn;
    NSImage *_headerDragImage;
    CGFloat _draggedDistance;
    BOOL _isColumnResizing;
    BOOL _showHandCursorFired;
    BOOL _toolTipRectsDirty;
    BOOL _reserved4;
    BOOL _skipDrawingSeparator;
    id _reserved;
}

- (void)setTableView:(NSTableView *)tableView;
- (NSTableView *)tableView;
- (NSInteger)draggedColumn;
- (CGFloat)draggedDistance;
- (NSInteger)resizedColumn;
- (NSRect)headerRectOfColumn:(NSInteger)column;
- (NSInteger)columnAtPoint:(NSPoint)point;

@end
# 106 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableView.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableView.h" 3
@class NSTableHeaderView;
@class NSTableColumn;
@class NSMutableArray;
@class NSIndexSet, NSMutableIndexSet;

typedef struct __TvFlags {

    unsigned int allowsColumnReordering:1;
    unsigned int allowsColumnResizing:1;
    unsigned int oldDrawsGridFlag:1;
    unsigned int allowsEmptySelection:1;
    unsigned int allowsMultipleSelection:1;
    unsigned int allowsColumnSelection:1;
    unsigned int selectionType:2;
    unsigned int changingLayout:1;
    unsigned int compareWidthWithSuperview:2;
    unsigned int delegateWillDisplayCell:1;
    unsigned int delegateShouldEditTableColumn:1;
    unsigned int delegateShouldSelectRow:1;
    unsigned int delegateShouldSelectTableColumn:1;
    unsigned int delegateSelectionShouldChangeInTableView:1;
    unsigned int oldAutoresizesAllColumnsToFit:1;
    unsigned int dataSourceSetObjectValue:1;
    unsigned int selectionPostingDisableCount:7;
    unsigned int movedPostingDisableCount:6;
    unsigned int refusesFirstResponder:1;
# 60 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableView.h" 3
} _TvFlags;



enum { NSTableViewDropOn, NSTableViewDropAbove };
typedef NSUInteger NSTableViewDropOperation;


@interface NSTableView : NSControl <NSUserInterfaceValidations>
{

    NSTableHeaderView *_headerView;
    NSView *_cornerView;
    NSMutableArray *_tableColumns;
    NSCell *_editingCell;
    id _delegate;
    id _dataSource;
    NSSize _intercellSpacing;
    CGFloat _rowHeight;
    NSInteger _lastSelectedColumn;
    NSInteger _lastSelectedRow;
    NSInteger _editingRow;
    NSInteger _editingColumn;
    NSMutableIndexSet *_selectedColumns;
    NSMutableIndexSet *_selectedRows;
    NSImage *_bodyDragImage;
    NSColor *_backgroundColor;
    NSColor *_gridColor;
    CGFloat _dragYPos;
    id _target;
    SEL _action;
    SEL _doubleAction;
    NSRect _rectOfLastColumn;
    NSInteger _lastCachedRectColumn;
    NSRect _rectOfLastRow;
    NSInteger _lastCachedRectRow;
    _TvFlags _tvFlags;
    id _reserved;
}

- (void)setDataSource:(id)aSource;
- (id)dataSource;
- (void)setDelegate:(id)delegate;
- (id)delegate;
- (void)setHeaderView:(NSTableHeaderView *)headerView;
- (NSTableHeaderView *)headerView;

- (void)setCornerView:(NSView *)cornerView;
- (NSView *)cornerView;

- (void)setAllowsColumnReordering:(BOOL)flag;
- (BOOL)allowsColumnReordering;



- (void)setAllowsColumnResizing:(BOOL)flag;
- (BOOL)allowsColumnResizing;





enum {


    NSTableViewNoColumnAutoresizing = 0,



    NSTableViewUniformColumnAutoresizingStyle,




    NSTableViewSequentialColumnAutoresizingStyle,
    NSTableViewReverseSequentialColumnAutoresizingStyle,





    NSTableViewLastColumnOnlyAutoresizingStyle,
    NSTableViewFirstColumnOnlyAutoresizingStyle
};
typedef NSUInteger NSTableViewColumnAutoresizingStyle;

- (void)setColumnAutoresizingStyle:(NSTableViewColumnAutoresizingStyle)style;
- (NSTableViewColumnAutoresizingStyle)columnAutoresizingStyle;






enum {
    NSTableViewGridNone = 0,
    NSTableViewSolidVerticalGridLineMask = 1 << 0,
    NSTableViewSolidHorizontalGridLineMask = 1 << 1
};

- (void)setGridStyleMask:(NSUInteger)gridType;
- (NSUInteger)gridStyleMask;


- (void)setIntercellSpacing:(NSSize)aSize;
- (NSSize)intercellSpacing;




- (void)setUsesAlternatingRowBackgroundColors:(BOOL)useAlternatingRowColors;
- (BOOL)usesAlternatingRowBackgroundColors;




- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;

- (void)setGridColor:(NSColor *)color;
- (NSColor *)gridColor;

- (void)setRowHeight:(CGFloat)rowHeight;
- (CGFloat)rowHeight;




- (void)noteHeightOfRowsWithIndexesChanged:(NSIndexSet *)indexSet;


- (NSArray *)tableColumns;
- (NSInteger)numberOfColumns;
- (NSInteger)numberOfRows;

- (void)addTableColumn:(NSTableColumn *)column;
- (void)removeTableColumn:(NSTableColumn *)column;
- (NSInteger)columnWithIdentifier:(id)identifier;
- (NSTableColumn *)tableColumnWithIdentifier:(id)identifier;

- (void)tile;
- (void)sizeToFit;
- (void)sizeLastColumnToFit;
- (void)scrollRowToVisible:(NSInteger)row;
- (void)scrollColumnToVisible:(NSInteger)column;
- (void)moveColumn:(NSInteger)column toColumn:(NSInteger)newIndex;

- (void)reloadData;
- (void)noteNumberOfRowsChanged;

- (NSInteger)editedColumn;
- (NSInteger)editedRow;
- (NSInteger)clickedColumn;
- (NSInteger)clickedRow;

- (void)setDoubleAction:(SEL)aSelector;
- (SEL)doubleAction;






- (void)setSortDescriptors:(NSArray *)array;
- (NSArray *)sortDescriptors;





- (void)setIndicatorImage:(NSImage *)anImage inTableColumn:(NSTableColumn *)tc;
- (NSImage *)indicatorImageInTableColumn:(NSTableColumn *)tc;



- (void)setHighlightedTableColumn:(NSTableColumn *)tc;
- (NSTableColumn *)highlightedTableColumn;





- (void)setVerticalMotionCanBeginDrag:(BOOL)flag;
- (BOOL)verticalMotionCanBeginDrag;






- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes atPoint:(NSPoint)mouseDownPoint;





- (NSImage *)dragImageForRowsWithIndexes:(NSIndexSet *)dragRows tableColumns:(NSArray *)tableColumns event:(NSEvent*)dragEvent offset:(NSPointPointer)dragImageOffset;



- (void)setDraggingSourceOperationMask:(NSDragOperation)mask forLocal:(BOOL)isLocal;




- (void)setDropRow:(NSInteger)row dropOperation:(NSTableViewDropOperation)op;





- (void)setAllowsMultipleSelection:(BOOL)flag;
- (BOOL)allowsMultipleSelection;
- (void)setAllowsEmptySelection:(BOOL)flag;
- (BOOL)allowsEmptySelection;
- (void)setAllowsColumnSelection:(BOOL)flag;
- (BOOL)allowsColumnSelection;
- (void)selectAll:(id)sender;
- (void)deselectAll:(id)sender;







- (void)selectColumnIndexes:(NSIndexSet *)indexes byExtendingSelection:(BOOL)extend;






- (void)selectRowIndexes:(NSIndexSet *)indexes byExtendingSelection:(BOOL)extend;

- (NSIndexSet *)selectedColumnIndexes;
- (NSIndexSet *)selectedRowIndexes;


- (void)deselectColumn:(NSInteger)column;
- (void)deselectRow:(NSInteger)row;
- (NSInteger)selectedColumn;
- (NSInteger)selectedRow;
- (BOOL)isColumnSelected:(NSInteger)column;
- (BOOL)isRowSelected:(NSInteger)row;
- (NSInteger)numberOfSelectedColumns;
- (NSInteger)numberOfSelectedRows;







- (BOOL)allowsTypeSelect;
- (void)setAllowsTypeSelect:(BOOL)value;

enum {


    NSTableViewSelectionHighlightStyleRegular = 0,


    NSTableViewSelectionHighlightStyleSourceList = 1,
};
typedef NSInteger NSTableViewSelectionHighlightStyle;



- (NSTableViewSelectionHighlightStyle)selectionHighlightStyle;
- (void)setSelectionHighlightStyle:(NSTableViewSelectionHighlightStyle)selectionHighlightStyle;





- (NSRect)rectOfColumn:(NSInteger)column;

- (NSRect)rectOfRow:(NSInteger)row;




- (NSIndexSet *)columnIndexesInRect:(NSRect)rect;


- (NSRange)rowsInRect:(NSRect)rect;

- (NSInteger)columnAtPoint:(NSPoint)point;

- (NSInteger)rowAtPoint:(NSPoint)point;



- (NSRect)frameOfCellAtColumn:(NSInteger)column row:(NSInteger)row;





- (NSCell *)preparedCellAtColumn:(NSInteger)column row:(NSInteger)row;






- (BOOL)textShouldBeginEditing:(NSText *)textObject;
- (BOOL)textShouldEndEditing:(NSText *)textObject;
- (void)textDidBeginEditing:(NSNotification *)notification;
- (void)textDidEndEditing:(NSNotification *)notification;
- (void)textDidChange:(NSNotification *)notification;




- (void)setAutosaveName:(NSString *)name;
- (NSString *)autosaveName;



- (void)setAutosaveTableColumns:(BOOL)save;
- (BOOL)autosaveTableColumns;




- (void)editColumn:(NSInteger)column row:(NSInteger)row withEvent:(NSEvent *)theEvent select:(BOOL)select;
- (void)drawRow:(NSInteger)row clipRect:(NSRect)clipRect;
- (void)highlightSelectionInClipRect:(NSRect)clipRect;
- (void)drawGridInClipRect:(NSRect)clipRect;

- (void)drawBackgroundInClipRect:(NSRect)clipRect;


@end

@interface NSObject(NSTableViewDelegate)

- (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;
- (BOOL)tableView:(NSTableView *)tableView shouldEditTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;
- (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTableView;



- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row;





- (NSIndexSet *)tableView:(NSTableView *)tableView selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes;



- (BOOL)tableView:(NSTableView *)tableView shouldSelectTableColumn:(NSTableColumn *)tableColumn;

- (void)tableView:(NSTableView *)tableView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn;
- (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn;
- (void)tableView:(NSTableView *)tableView didDragTableColumn:(NSTableColumn *)tableColumn;





- (NSString *)tableView:(NSTableView *)tableView toolTipForCell:(NSCell *)cell rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row mouseLocation:(NSPoint)mouseLocation;




- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row;







- (NSString *)tableView:(NSTableView *)tableView typeSelectStringForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;




- (NSInteger)tableView:(NSTableView *)tableView nextTypeSelectMatchFromRow:(NSInteger)startRow toRow:(NSInteger)endRow forString:(NSString *)searchString;




- (BOOL)tableView:(NSTableView *)tableView shouldTypeSelectForEvent:(NSEvent *)event withCurrentSearchString:(NSString *)searchString;




- (BOOL)tableView:(NSTableView *)tableView shouldShowCellExpansionForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;




- (BOOL)tableView:(NSTableView *)tableView shouldTrackCell:(NSCell *)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;






- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;




- (BOOL)tableView:(NSTableView *)tableView isGroupRow:(NSInteger)row;


@end




extern "C" NSString *NSTableViewSelectionDidChangeNotification;
extern "C" NSString *NSTableViewColumnDidMoveNotification;
extern "C" NSString *NSTableViewColumnDidResizeNotification;
extern "C" NSString *NSTableViewSelectionIsChangingNotification;

@interface NSObject(NSTableViewNotifications)
- (void)tableViewSelectionDidChange:(NSNotification *)notification;
- (void)tableViewColumnDidMove:(NSNotification *)notification;
- (void)tableViewColumnDidResize:(NSNotification *)notification;
- (void)tableViewSelectionIsChanging:(NSNotification *)notification;
@end

@interface NSObject(NSTableDataSource)


- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;



- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;






- (void)tableView:(NSTableView *)tableView sortDescriptorsDidChange:(NSArray *)oldDescriptors;
# 515 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableView.h" 3
- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard;




- (NSDragOperation)tableView:(NSTableView*)tableView validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation;



- (BOOL)tableView:(NSTableView*)tableView acceptDrop:(id <NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation;




- (NSArray *)tableView:(NSTableView *)tableView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedRowsWithIndexes:(NSIndexSet *)indexSet;
# 538 "/System/Library/Frameworks/AppKit.framework/Headers/NSTableView.h" 3
- (BOOL)tableView:(NSTableView *)tableView writeRows:(NSArray *)rows toPasteboard:(NSPasteboard *)pboard;
@end




@interface NSTableView (NSDeprecated)

- (void)setDrawsGrid:(BOOL)flag;

- (BOOL)drawsGrid;


- (void)selectColumn:(NSInteger)column byExtendingSelection:(BOOL)extend;

- (void)selectRow:(NSInteger)row byExtendingSelection:(BOOL)extend;

- (NSEnumerator *)selectedColumnEnumerator;

- (NSEnumerator *)selectedRowEnumerator;


- (NSImage*)dragImageForRows:(NSArray*)dragRows event:(NSEvent *)dragEvent dragImageOffset:(NSPointPointer)dragImageOffset;


- (void)setAutoresizesAllColumnsToFit:(BOOL)flag;
- (BOOL)autoresizesAllColumnsToFit;



- (NSRange)columnsInRect:(NSRect)rect;

@end
# 107 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSOutlineView.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSOutlineView.h" 3
@class NSButtonCell;
@class NSTableView;
@class NSTableHeaderView;
@class NSTableColumn;
@class NSMouseTracker;
@class NSNotification;
@class NSString;

typedef struct __OvFlags {

    unsigned int delegateWillDisplayCell:1;
    unsigned int delegateShouldEditTableColumn:1;
    unsigned int delegateShouldSelectItem:1;
    unsigned int delegateShouldSelectTableColumn:1;
    unsigned int delegateSelectionShouldChangeInOutlineView:1;
    unsigned int delegateShouldCollapseItem:1;
    unsigned int delegateShouldExpandItem:1;
    unsigned int autoresizesOutlineColumn:1;
    unsigned int autoSaveExpandItems:1;
    unsigned int enableExpandNotifications:1;
    unsigned int delegateWillDisplayOutlineCell:1;
    unsigned int removeChildInProgress:1;
    unsigned int selectionAdjustmentDisabled:1;
    unsigned int autoExpandFlashState:1;
    unsigned int compatCollapseForceClearsExpandState:1;
    unsigned int delegateHeightOfRowByItem:1;
    unsigned int delayRowEntryFreeDisabled:1;
    unsigned int numberOfRowsDataExpandEntered:1;
    unsigned int validDataSourceMethods:1;
    unsigned int reloadingData:1;
    unsigned int _reserved:12;
# 66 "/System/Library/Frameworks/AppKit.framework/Headers/NSOutlineView.h" 3
} _OVFlags;



enum { NSOutlineViewDropOnItemIndex = -1 };

@interface NSOutlineView : NSTableView {
  @private
    NSInteger _numberOfRows;
    struct __NSOVRowEntry *_rowEntryTree;
    CFMutableDictionaryRef _itemToEntryMap;
    NSInteger _unused2;
    NSInteger _unused3;
    NSInteger _unused1;
    NSTableColumn *_outlineTableColumn;
    BOOL _initedRows;
    BOOL _indentationMarkerInCell;
    NSInteger _indentationPerLevel;
    NSButtonCell *_outlineCell;
    NSRect _trackingOutlineFrame;
    NSMouseTracker *_tracker;
    id _unused4;
    _OVFlags _ovFlags;
    id _ovLock;
    long *_indentArray;
    long _originalWidth;
    id _expandSet;
    id _expandSetToExpandItemsInto;
    long _indentArraySize;
    NSButtonCell *_trackingOutlineCell;
    NSInteger _trackingRow;
    id _ovReserved;
}



- (void)setOutlineTableColumn: (NSTableColumn *)outlineTableColumn;
- (NSTableColumn *)outlineTableColumn;



- (BOOL)isExpandable:(id)item;



- (void)expandItem:(id)item expandChildren:(BOOL)expandChildren;



- (void)expandItem:(id)item;



- (void)collapseItem:(id)item collapseChildren:(BOOL)collapseChildren;



- (void)collapseItem:(id)item;



- (void)reloadItem:(id)item reloadChildren:(BOOL)reloadChildren;



- (void)reloadItem:(id)item;





- (id)parentForItem:(id)item;





- (id)itemAtRow:(NSInteger)row;
- (NSInteger)rowForItem:(id)item;



- (NSInteger)levelForItem:(id)item;
- (NSInteger)levelForRow:(NSInteger)row;
- (BOOL)isItemExpanded:(id)item;



- (void)setIndentationPerLevel:(CGFloat)indentationPerLevel;
- (CGFloat)indentationPerLevel;



- (void)setIndentationMarkerFollowsCell:(BOOL)drawInCell;
- (BOOL)indentationMarkerFollowsCell;

- (void)setAutoresizesOutlineColumn:(BOOL)resize;
- (BOOL)autoresizesOutlineColumn;





- (NSRect)frameOfOutlineCellAtRow:(NSInteger)row;
# 178 "/System/Library/Frameworks/AppKit.framework/Headers/NSOutlineView.h" 3
- (void)setDropItem:(id)item dropChildIndex:(NSInteger)index;



- (BOOL)shouldCollapseAutoExpandedItemsForDeposited:(BOOL)deposited;



- (BOOL)autosaveExpandedItems;
- (void)setAutosaveExpandedItems:(BOOL)save;

@end


@interface NSObject(NSOutlineViewDataSource)


- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item;
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item;
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item;
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item;



- (void)outlineView:(NSOutlineView *)outlineView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item;
- (id)outlineView:(NSOutlineView *)outlineView itemForPersistentObject:(id)object;
- (id)outlineView:(NSOutlineView *)outlineView persistentObjectForItem:(id)item;






- (void)outlineView:(NSOutlineView *)outlineView sortDescriptorsDidChange:(NSArray *)oldDescriptors;
# 220 "/System/Library/Frameworks/AppKit.framework/Headers/NSOutlineView.h" 3
- (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pasteboard;



- (NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id <NSDraggingInfo>)info proposedItem:(id)item proposedChildIndex:(NSInteger)index;



- (BOOL)outlineView:(NSOutlineView *)outlineView acceptDrop:(id <NSDraggingInfo>)info item:(id)item childIndex:(NSInteger)index;




- (NSArray *)outlineView:(NSOutlineView *)outlineView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedItems:(NSArray *)items;


@end

@interface NSObject(NSOutlineViewDelegate)


- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item;
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item;
- (BOOL)selectionShouldChangeInOutlineView:(NSOutlineView *)outlineView;



- (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectItem:(id)item;





- (NSIndexSet *)outlineView:(NSOutlineView *)outlineView selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes;



- (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectTableColumn:(NSTableColumn *)tableColumn;


- (void)outlineView:(NSOutlineView *)outlineView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn;
- (void)outlineView:(NSOutlineView *)outlineView didClickTableColumn:(NSTableColumn *)tableColumn;
- (void)outlineView:(NSOutlineView *)outlineView didDragTableColumn:(NSTableColumn *)tableColumn;






- (NSString *)outlineView:(NSOutlineView *)outlineView toolTipForCell:(NSCell *)cell rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)tableColumn item:(id)item mouseLocation:(NSPoint)mouseLocation;




- (CGFloat)outlineView:(NSOutlineView *)outlineView heightOfRowByItem:(id)item;







- (NSString *)outlineView:(NSOutlineView *)outlineView typeSelectStringForTableColumn:(NSTableColumn *)tableColumn item:(id)item;




- (id)outlineView:(NSOutlineView *)outlineView nextTypeSelectMatchFromItem:(id)startItem toItem:(id)endItem forString:(NSString *)searchString;




- (BOOL)outlineView:(NSOutlineView *)outlineView shouldTypeSelectForEvent:(NSEvent *)event withCurrentSearchString:(NSString *)searchString;




- (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowCellExpansionForTableColumn:(NSTableColumn *)tableColumn item:(id)item;




- (BOOL)outlineView:(NSOutlineView *)outlineView shouldTrackCell:(NSCell *)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item;






- (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item;




- (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item;






- (BOOL)outlineView:(NSOutlineView *)outlineView shouldExpandItem:(id)item;
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldCollapseItem:(id)item;
- (void)outlineView:(NSOutlineView *)outlineView willDisplayOutlineCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item;

@end



extern "C" NSString *NSOutlineViewSelectionDidChangeNotification;
extern "C" NSString *NSOutlineViewColumnDidMoveNotification;
extern "C" NSString *NSOutlineViewColumnDidResizeNotification;
extern "C" NSString *NSOutlineViewSelectionIsChangingNotification;

extern "C" NSString *NSOutlineViewItemWillExpandNotification;
extern "C" NSString *NSOutlineViewItemDidExpandNotification;
extern "C" NSString *NSOutlineViewItemWillCollapseNotification;
extern "C" NSString *NSOutlineViewItemDidCollapseNotification;

@interface NSObject(NSOutlineViewNotifications)
- (void)outlineViewSelectionDidChange:(NSNotification *)notification;
- (void)outlineViewColumnDidMove:(NSNotification *)notification;
- (void)outlineViewColumnDidResize:(NSNotification *)notification;
- (void)outlineViewSelectionIsChanging:(NSNotification *)notification;
- (void)outlineViewItemWillExpand:(NSNotification *)notification;
- (void)outlineViewItemDidExpand:(NSNotification *)notification;
- (void)outlineViewItemWillCollapse:(NSNotification *)notification;
- (void)outlineViewItemDidCollapse:(NSNotification *)notification;
@end
# 108 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAttributedString.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSAttributedString.h" 3
@class NSFileWrapper, NSURL, NSTextBlock, NSTextTable, NSTextList;



extern "C" NSString *NSFontAttributeName;
extern "C" NSString *NSParagraphStyleAttributeName;
extern "C" NSString *NSForegroundColorAttributeName;
extern "C" NSString *NSUnderlineStyleAttributeName;
extern "C" NSString *NSSuperscriptAttributeName;
extern "C" NSString *NSBackgroundColorAttributeName;
extern "C" NSString *NSAttachmentAttributeName;
extern "C" NSString *NSLigatureAttributeName;
extern "C" NSString *NSBaselineOffsetAttributeName;
extern "C" NSString *NSKernAttributeName;
extern "C" NSString *NSLinkAttributeName;

extern "C" NSString *NSStrokeWidthAttributeName ;
extern "C" NSString *NSStrokeColorAttributeName ;
extern "C" NSString *NSUnderlineColorAttributeName ;
extern "C" NSString *NSStrikethroughStyleAttributeName ;
extern "C" NSString *NSStrikethroughColorAttributeName ;
extern "C" NSString *NSShadowAttributeName ;
extern "C" NSString *NSObliquenessAttributeName ;
extern "C" NSString *NSExpansionAttributeName ;
extern "C" NSString *NSCursorAttributeName ;
extern "C" NSString *NSToolTipAttributeName ;



extern "C" NSString *NSCharacterShapeAttributeName;




extern "C" NSString *NSGlyphInfoAttributeName;




extern "C" NSString *NSMarkedClauseSegmentAttributeName ;



enum {
    NSUnderlineStyleNone = 0x00,
    NSUnderlineStyleSingle = 0x01,
    NSUnderlineStyleThick = 0x02,
    NSUnderlineStyleDouble = 0x09
};

enum {
    NSUnderlinePatternSolid = 0x0000,
    NSUnderlinePatternDot = 0x0100,
    NSUnderlinePatternDash = 0x0200,
    NSUnderlinePatternDashDot = 0x0300,
    NSUnderlinePatternDashDotDot = 0x0400
};

extern "C" NSUInteger NSUnderlineByWordMask;



extern "C" NSString *NSSpellingStateAttributeName ;




enum {
    NSSpellingStateSpellingFlag = (1 << 0),
    NSSpellingStateGrammarFlag = (1 << 1)
};





extern "C" NSString *NSPlainTextDocumentType;
extern "C" NSString *NSRTFTextDocumentType;
extern "C" NSString *NSRTFDTextDocumentType;
extern "C" NSString *NSMacSimpleTextDocumentType;
extern "C" NSString *NSHTMLTextDocumentType;
extern "C" NSString *NSDocFormatTextDocumentType ;
extern "C" NSString *NSWordMLTextDocumentType ;
extern "C" NSString *NSWebArchiveTextDocumentType ;
extern "C" NSString *NSOfficeOpenXMLTextDocumentType ;
extern "C" NSString *NSOpenDocumentTextDocumentType ;



extern "C" NSString *NSPaperSizeDocumentAttribute ;
extern "C" NSString *NSLeftMarginDocumentAttribute ;
extern "C" NSString *NSRightMarginDocumentAttribute ;
extern "C" NSString *NSTopMarginDocumentAttribute ;
extern "C" NSString *NSBottomMarginDocumentAttribute ;
extern "C" NSString *NSViewSizeDocumentAttribute ;
extern "C" NSString *NSViewZoomDocumentAttribute ;
extern "C" NSString *NSViewModeDocumentAttribute ;
extern "C" NSString *NSDocumentTypeDocumentAttribute ;
extern "C" NSString *NSReadOnlyDocumentAttribute ;
extern "C" NSString *NSConvertedDocumentAttribute ;
extern "C" NSString *NSCocoaVersionDocumentAttribute ;
extern "C" NSString *NSBackgroundColorDocumentAttribute ;
extern "C" NSString *NSHyphenationFactorDocumentAttribute ;
extern "C" NSString *NSDefaultTabIntervalDocumentAttribute ;
extern "C" NSString *NSCharacterEncodingDocumentAttribute ;



extern "C" NSString *NSTitleDocumentAttribute ;
extern "C" NSString *NSCompanyDocumentAttribute ;
extern "C" NSString *NSCopyrightDocumentAttribute ;
extern "C" NSString *NSSubjectDocumentAttribute ;
extern "C" NSString *NSAuthorDocumentAttribute ;
extern "C" NSString *NSKeywordsDocumentAttribute ;
extern "C" NSString *NSCommentDocumentAttribute ;
extern "C" NSString *NSEditorDocumentAttribute ;
extern "C" NSString *NSCreationTimeDocumentAttribute ;
extern "C" NSString *NSModificationTimeDocumentAttribute ;



extern "C" NSString *NSExcludedElementsDocumentAttribute ;
extern "C" NSString *NSTextEncodingNameDocumentAttribute ;
extern "C" NSString *NSPrefixSpacesDocumentAttribute ;



extern "C" NSString *NSDocumentTypeDocumentOption ;
extern "C" NSString *NSDefaultAttributesDocumentOption ;
extern "C" NSString *NSCharacterEncodingDocumentOption ;
extern "C" NSString *NSTextEncodingNameDocumentOption ;
extern "C" NSString *NSBaseURLDocumentOption ;
extern "C" NSString *NSTimeoutDocumentOption ;
extern "C" NSString *NSWebPreferencesDocumentOption ;
extern "C" NSString *NSWebResourceLoadDelegateDocumentOption ;
extern "C" NSString *NSTextSizeMultiplierDocumentOption ;




@interface NSAttributedString (NSAttributedStringKitAdditions)



- (NSDictionary *)fontAttributesInRange:(NSRange)range;



- (NSDictionary *)rulerAttributesInRange:(NSRange)range;

- (BOOL)containsAttachments;



- (NSUInteger)lineBreakBeforeIndex:(NSUInteger)location withinRange:(NSRange)aRange;

- (NSUInteger)lineBreakByHyphenatingBeforeIndex:(NSUInteger)location withinRange:(NSRange)aRange;


- (NSRange)doubleClickAtIndex:(NSUInteger)location;
- (NSUInteger)nextWordFromIndex:(NSUInteger)location forward:(BOOL)isForward;




- (NSURL *)URLAtIndex:(NSUInteger)location effectiveRange:(NSRangePointer)effectiveRange;





+ (NSArray *)textTypes;
+ (NSArray *)textUnfilteredTypes;





- (NSRange)rangeOfTextBlock:(NSTextBlock *)block atIndex:(NSUInteger)location;
- (NSRange)rangeOfTextTable:(NSTextTable *)table atIndex:(NSUInteger)location;
- (NSRange)rangeOfTextList:(NSTextList *)list atIndex:(NSUInteger)location;
- (NSInteger)itemNumberInTextList:(NSTextList *)list atIndex:(NSUInteger)location;







- (id)initWithURL:(NSURL *)url options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict error:(NSError **)error;
- (id)initWithData:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict error:(NSError **)error;




- (id)initWithPath:(NSString *)path documentAttributes:(NSDictionary **)dict;
- (id)initWithURL:(NSURL *)url documentAttributes:(NSDictionary **)dict;



- (id)initWithRTF:(NSData *)data documentAttributes:(NSDictionary **)dict;
- (id)initWithRTFD:(NSData *)data documentAttributes:(NSDictionary **)dict;
- (id)initWithHTML:(NSData *)data documentAttributes:(NSDictionary **)dict;
- (id)initWithHTML:(NSData *)data baseURL:(NSURL *)base documentAttributes:(NSDictionary **)dict;

- (id)initWithDocFormat:(NSData *)data documentAttributes:(NSDictionary **)dict;
- (id)initWithHTML:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict;




- (id)initWithRTFDFileWrapper:(NSFileWrapper *)wrapper documentAttributes:(NSDictionary **)dict;






- (NSData *)dataFromRange:(NSRange)range documentAttributes:(NSDictionary *)dict error:(NSError **)error;
- (NSFileWrapper *)fileWrapperFromRange:(NSRange)range documentAttributes:(NSDictionary *)dict error:(NSError **)error;




- (NSData *)RTFFromRange:(NSRange)range documentAttributes:(NSDictionary *)dict;
- (NSData *)RTFDFromRange:(NSRange)range documentAttributes:(NSDictionary *)dict;
- (NSFileWrapper *)RTFDFileWrapperFromRange:(NSRange)range documentAttributes:(NSDictionary *)dict;

- (NSData *)docFormatFromRange:(NSRange)range documentAttributes:(NSDictionary *)dict;


@end

@interface NSAttributedString(NSDeprecatedKitAdditions)



+ (NSArray *)textFileTypes;
+ (NSArray *)textPasteboardTypes;
+ (NSArray *)textUnfilteredFileTypes;
+ (NSArray *)textUnfilteredPasteboardTypes;

@end

@interface NSMutableAttributedString (NSMutableAttributedStringKitAdditions)






- (BOOL)readFromURL:(NSURL *)url options:(NSDictionary *)opts documentAttributes:(NSDictionary **)dict error:(NSError **)error;
- (BOOL)readFromData:(NSData *)data options:(NSDictionary *)opts documentAttributes:(NSDictionary **)dict error:(NSError **)error;




- (BOOL)readFromURL:(NSURL *)url options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict;

- (BOOL)readFromData:(NSData *)data options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict;




- (void)superscriptRange:(NSRange)range;
- (void)subscriptRange:(NSRange)range;
- (void)unscriptRange:(NSRange)range;
- (void)applyFontTraits:(NSFontTraitMask)traitMask range:(NSRange)range;
- (void)setAlignment:(NSTextAlignment)alignment range:(NSRange)range;

- (void)setBaseWritingDirection:(NSWritingDirection)writingDirection range:(NSRange)range;




- (void)fixAttributesInRange:(NSRange)range;
- (void)fixFontAttributeInRange:(NSRange)range;
- (void)fixParagraphStyleAttributeInRange:(NSRange)range;
- (void)fixAttachmentAttributeInRange:(NSRange)range;

@end



enum {
    NSNoUnderlineStyle = 0,
    NSSingleUnderlineStyle
};
extern "C" NSUInteger NSUnderlineStrikethroughMask;
# 109 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSLayoutManager.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSLayoutManager.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSGlyphGenerator.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSGlyphGenerator.h" 3
enum {
    NSShowControlGlyphs = (1 << 0),
    NSShowInvisibleGlyphs = (1 << 1),
    NSWantsBidiLevels = (1 << 2)
};

@protocol NSGlyphStorage
- (void)insertGlyphs:(const NSGlyph *)glyphs length:(NSUInteger)length forStartingGlyphAtIndex:(NSUInteger)glyphIndex characterIndex:(NSUInteger)charIndex;


- (void)setIntAttribute:(NSInteger)attributeTag value:(NSInteger)val forGlyphAtIndex:(NSUInteger)glyphIndex;

- (NSAttributedString *)attributedString;
- (NSUInteger)layoutOptions;
@end

@interface NSGlyphGenerator : NSObject
- (void)generateGlyphsForGlyphStorage:(id <NSGlyphStorage>)glyphStorage desiredNumberOfCharacters:(NSUInteger)nChars glyphIndex:(NSUInteger *)glyphIndex characterIndex:(NSUInteger *)charIndex;

+ (id) sharedGlyphGenerator;
@end
# 15 "/System/Library/Frameworks/AppKit.framework/Headers/NSLayoutManager.h" 2 3

@class NSTextStorage;
@class NSTypesetter;
@class NSTextContainer;
@class NSTextView;
@class NSWindow;
@class NSColor;
@class NSRulerView;
@class NSParagraphStyle;
@class NSRulerMarker;
@class NSBox;
@class NSTextField;
@class NSMatrix;
@class NSTabWell;
@class NSStorage;
@class NSRunStorage;
@class NSSortedArray;
@class NSView;
@class NSMutableArray;
@class NSEvent;
@class NSCell;
@class NSGlyphGenerator;
@class NSTextBlock;


enum {
    NSGlyphAttributeSoft = 0,
    NSGlyphAttributeElastic = 1,

    NSGlyphAttributeBidiLevel = 2,

    NSGlyphAttributeInscribe = 5
};


enum {
    NSGlyphInscribeBase = 0,
    NSGlyphInscribeBelow = 1,
    NSGlyphInscribeAbove = 2,
    NSGlyphInscribeOverstrike = 3,
    NSGlyphInscribeOverBelow = 4
};
typedef NSUInteger NSGlyphInscription;



enum {
    NSTypesetterLatestBehavior = -1,
    NSTypesetterOriginalBehavior = 0,
    NSTypesetterBehavior_10_2_WithCompatibility = 1,
    NSTypesetterBehavior_10_2 = 2,
    NSTypesetterBehavior_10_3 = 3

    ,
    NSTypesetterBehavior_10_4 = 4

};
typedef NSInteger NSTypesetterBehavior;



@interface NSLayoutManager : NSObject <NSCoding, NSGlyphStorage> {






  @private
    NSTextStorage *_textStorage;
    NSGlyphGenerator *_glyphGenerator;
    NSTypesetter *_typesetter;

    NSMutableArray *_textContainers;
    NSStorage *_containerUsedRects;

    NSStorage *_glyphs;
    NSRunStorage *_containerRuns;
    NSRunStorage *_fragmentRuns;
    NSRunStorage *_glyphLocations;
    NSRunStorage *_glyphRotationRuns;

    NSRect _extraLineFragmentRect;
    NSRect _extraLineFragmentUsedRect;
    NSTextContainer *_extraLineFragmentContainer;

    NSSortedArray *_glyphHoles;
    NSSortedArray *_layoutHoles;

    struct __lmFlags {
        unsigned int containersAreFull:1;
        unsigned int glyphsMightDrawOutsideLines:1;
        unsigned int backgroundLayoutEnabled:1;
        unsigned int resizingInProgress:1;
        unsigned int allowScreenFonts:1;
        unsigned int cachedRectArrayInUse:1;
        unsigned int displayInvalidationInProgress:1;
        unsigned int insertionPointNeedsUpdate:1;
        unsigned int layoutManagerInDirtyList:1;
        unsigned int usingGlyphCache:1;
        unsigned int showInvisibleCharacters:1;
        unsigned int showControlCharacters:1;
        unsigned int delegateRespondsToDidInvalidate:1;
        unsigned int delegateRespondsToDidComplete:1;
        unsigned int glyphFormat:2;
        unsigned int textStorageRespondsToIsEditing:1;
        unsigned int notifyEditedInProgress:1;
        unsigned int containersChanged:1;
        unsigned int isGeneratingGlyphs:1;
        unsigned int hasNonGeneratedGlyphData:1;
        unsigned int loggedBGLayoutException:1;
        unsigned int isLayoutRequestedFromSubthread:1;
        unsigned int defaultAttachmentScaling:2;
        unsigned int isInUILayoutMode:1;
        unsigned int seenRightToLeft:1;
        unsigned int ignoresViewTransformations:1;
        unsigned int needToFlushGlyph:1;
        unsigned int flipsIfNeeded:1;
        unsigned int allowNonContig:1;
        unsigned int useNonContig:1;
    } _lmFlags;

    id _delegate;


    unsigned short _textViewResizeDisableStack;
    unsigned short _displayInvalidationDisableStack;
    NSRange _deferredDisplayCharRange;


    NSTextView *_firstTextView;


    NSRect *_cachedRectArray;
    NSUInteger _cachedRectArrayCapacity;


    char *_glyphBuffer;
    NSUInteger _glyphBufferSize;


    NSRange _cachedLocationNominalGlyphRange;
    NSUInteger _cachedLocationGlyphIndex;
    NSPoint _cachedLocation;
    NSRange _cachedFontCharRange;
    NSFont *_cachedFont;


    NSUInteger _firstUnlaidGlyphIndex;
    NSUInteger _firstUnlaidCharIndex;


    NSBox *_rulerAccView;
    id _rulerAccViewAlignmentButtons;
    id _rulerAccViewSpacing;
    NSTabWell *_rulerAccViewLeftTabWell;
    NSTabWell *_rulerAccViewRightTabWell;
    NSTabWell *_rulerAccViewCenterTabWell;
    NSTabWell *_rulerAccViewDecimalTabWell;
    id _rulerAccViewStyles;
    id _rulerAccViewLists;

    NSRange _newlyFilledGlyphRange;

    id _extraData;
}



- (id)init;




- (NSTextStorage *)textStorage;
- (void)setTextStorage:(NSTextStorage *)textStorage;


- (NSAttributedString *)attributedString;


- (void)replaceTextStorage:(NSTextStorage *)newTextStorage;



- (NSGlyphGenerator *)glyphGenerator;
- (void)setGlyphGenerator:(NSGlyphGenerator *)glyphGenerator;



- (NSTypesetter *)typesetter;
- (void)setTypesetter:(NSTypesetter *)typesetter;


- (id)delegate;
- (void)setDelegate:(id)delegate;




- (NSArray *)textContainers;

- (void)addTextContainer:(NSTextContainer *)container;

- (void)insertTextContainer:(NSTextContainer *)container atIndex:(NSUInteger)index;

- (void)removeTextContainerAtIndex:(NSUInteger)index;


- (void)textContainerChangedGeometry:(NSTextContainer *)container;


- (void)textContainerChangedTextView:(NSTextContainer *)container;




- (void)setBackgroundLayoutEnabled:(BOOL)flag;
- (BOOL)backgroundLayoutEnabled;


- (void)setUsesScreenFonts:(BOOL)flag;
- (BOOL)usesScreenFonts;


- (void)setShowsInvisibleCharacters:(BOOL)flag;
- (BOOL)showsInvisibleCharacters;


- (void)setShowsControlCharacters:(BOOL)flag;
- (BOOL)showsControlCharacters;


- (void)setHyphenationFactor:(float)factor;
- (float)hyphenationFactor;


- (void)setDefaultAttachmentScaling:(NSImageScaling)scaling;
- (NSImageScaling)defaultAttachmentScaling;



- (void)setTypesetterBehavior:(NSTypesetterBehavior)theBehavior;
- (NSTypesetterBehavior)typesetterBehavior;




- (NSUInteger)layoutOptions;




- (void)setAllowsNonContiguousLayout:(BOOL)flag;
- (BOOL)allowsNonContiguousLayout;

- (BOOL)hasNonContiguousLayout;





- (void)invalidateGlyphsForCharacterRange:(NSRange)charRange changeInLength:(NSInteger)delta actualCharacterRange:(NSRangePointer)actualCharRange;



- (void)invalidateLayoutForCharacterRange:(NSRange)charRange actualCharacterRange:(NSRangePointer)actualCharRange;

- (void)invalidateLayoutForCharacterRange:(NSRange)charRange isSoft:(BOOL)flag actualCharacterRange:(NSRangePointer)actualCharRange;


- (void)invalidateDisplayForCharacterRange:(NSRange)charRange;
- (void)invalidateDisplayForGlyphRange:(NSRange)glyphRange;


- (void)textStorage:(NSTextStorage *)str edited:(NSUInteger)editedMask range:(NSRange)newCharRange changeInLength:(NSInteger)delta invalidatedRange:(NSRange)invalidatedCharRange;





- (void)ensureGlyphsForCharacterRange:(NSRange)charRange;
- (void)ensureGlyphsForGlyphRange:(NSRange)glyphRange;
- (void)ensureLayoutForCharacterRange:(NSRange)charRange;
- (void)ensureLayoutForGlyphRange:(NSRange)glyphRange;
- (void)ensureLayoutForTextContainer:(NSTextContainer *)container;
- (void)ensureLayoutForBoundingRect:(NSRect)bounds inTextContainer:(NSTextContainer *)container;
# 310 "/System/Library/Frameworks/AppKit.framework/Headers/NSLayoutManager.h" 3
- (void)insertGlyphs:(const NSGlyph *)glyphs length:(NSUInteger)length forStartingGlyphAtIndex:(NSUInteger)glyphIndex characterIndex:(NSUInteger)charIndex;



- (void)insertGlyph:(NSGlyph)glyph atGlyphIndex:(NSUInteger)glyphIndex characterIndex:(NSUInteger)charIndex;


- (void)replaceGlyphAtIndex:(NSUInteger)glyphIndex withGlyph:(NSGlyph)newGlyph;


- (void)deleteGlyphsInRange:(NSRange)glyphRange;


- (void)setCharacterIndex:(NSUInteger)charIndex forGlyphAtIndex:(NSUInteger)glyphIndex;


- (void)setIntAttribute:(NSInteger)attributeTag value:(NSInteger)val forGlyphAtIndex:(NSUInteger)glyphIndex;



- (void)invalidateGlyphsOnLayoutInvalidationForGlyphRange:(NSRange)glyphRange;





- (NSUInteger)numberOfGlyphs;


- (NSGlyph)glyphAtIndex:(NSUInteger)glyphIndex isValidIndex:(BOOL *)isValidIndex;
- (NSGlyph)glyphAtIndex:(NSUInteger)glyphIndex;
- (BOOL)isValidGlyphIndex:(NSUInteger)glyphIndex;



- (NSUInteger)characterIndexForGlyphAtIndex:(NSUInteger)glyphIndex;



- (NSUInteger)glyphIndexForCharacterAtIndex:(NSUInteger)charIndex;



- (NSInteger)intAttribute:(NSInteger)attributeTag forGlyphAtIndex:(NSUInteger)glyphIndex;


- (NSUInteger)getGlyphsInRange:(NSRange)glyphRange glyphs:(NSGlyph *)glyphBuffer characterIndexes:(NSUInteger *)charIndexBuffer glyphInscriptions:(NSGlyphInscription *)inscribeBuffer elasticBits:(BOOL *)elasticBuffer;

- (NSUInteger)getGlyphsInRange:(NSRange)glyphRange glyphs:(NSGlyph *)glyphBuffer characterIndexes:(NSUInteger *)charIndexBuffer glyphInscriptions:(NSGlyphInscription *)inscribeBuffer elasticBits:(BOOL *)elasticBuffer bidiLevels:(unsigned char *)bidiLevelBuffer;



- (NSUInteger)getGlyphs:(NSGlyph *)glyphArray range:(NSRange)glyphRange;






- (void)setTextContainer:(NSTextContainer *)container forGlyphRange:(NSRange)glyphRange;


- (void)setLineFragmentRect:(NSRect)fragmentRect forGlyphRange:(NSRange)glyphRange usedRect:(NSRect)usedRect;


- (void)setExtraLineFragmentRect:(NSRect)fragmentRect usedRect:(NSRect)usedRect textContainer:(NSTextContainer *)container;


- (void)setLocation:(NSPoint)location forStartOfGlyphRange:(NSRange)glyphRange;



- (void)setLocations:(NSPointArray)locations startingGlyphIndexes:(NSUInteger *)glyphIndexes count:(NSUInteger)count forGlyphRange:(NSRange)glyphRange;



- (void)setNotShownAttribute:(BOOL)flag forGlyphAtIndex:(NSUInteger)glyphIndex;


- (void)setDrawsOutsideLineFragment:(BOOL)flag forGlyphAtIndex:(NSUInteger)glyphIndex;


- (void)setAttachmentSize:(NSSize)attachmentSize forGlyphRange:(NSRange)glyphRange;






- (void)getFirstUnlaidCharacterIndex:(NSUInteger *)charIndex glyphIndex:(NSUInteger *)glyphIndex;
- (NSUInteger)firstUnlaidCharacterIndex;
- (NSUInteger)firstUnlaidGlyphIndex;





- (NSTextContainer *)textContainerForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange;


- (NSRect)usedRectForTextContainer:(NSTextContainer *)container;


- (NSRect)lineFragmentRectForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange;


- (NSRect)lineFragmentUsedRectForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange;



- (NSRect)lineFragmentRectForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange withoutAdditionalLayout:(BOOL)flag;
- (NSRect)lineFragmentUsedRectForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange withoutAdditionalLayout:(BOOL)flag;
- (NSTextContainer *)textContainerForGlyphAtIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange withoutAdditionalLayout:(BOOL)flag;



- (NSRect)extraLineFragmentRect;
- (NSRect)extraLineFragmentUsedRect;
- (NSTextContainer *)extraLineFragmentTextContainer;


- (NSPoint)locationForGlyphAtIndex:(NSUInteger)glyphIndex;


- (BOOL)notShownAttributeForGlyphAtIndex:(NSUInteger)glyphIndex;


- (BOOL)drawsOutsideLineFragmentForGlyphAtIndex:(NSUInteger)glyphIndex;


- (NSSize)attachmentSizeForGlyphAtIndex:(NSUInteger)glyphIndex;





- (void)setLayoutRect:(NSRect)rect forTextBlock:(NSTextBlock *)block glyphRange:(NSRange)glyphRange;
- (void)setBoundsRect:(NSRect)rect forTextBlock:(NSTextBlock *)block glyphRange:(NSRange)glyphRange;
- (NSRect)layoutRectForTextBlock:(NSTextBlock *)block glyphRange:(NSRange)glyphRange;
- (NSRect)boundsRectForTextBlock:(NSTextBlock *)block glyphRange:(NSRange)glyphRange;

- (NSRect)layoutRectForTextBlock:(NSTextBlock *)block atIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange;
- (NSRect)boundsRectForTextBlock:(NSTextBlock *)block atIndex:(NSUInteger)glyphIndex effectiveRange:(NSRangePointer)effectiveGlyphRange;







- (NSRange)glyphRangeForCharacterRange:(NSRange)charRange actualCharacterRange:(NSRangePointer)actualCharRange;


- (NSRange)characterRangeForGlyphRange:(NSRange)glyphRange actualGlyphRange:(NSRangePointer)actualGlyphRange;




- (NSRange)glyphRangeForTextContainer:(NSTextContainer *)container;


- (NSRange)rangeOfNominallySpacedGlyphsContainingIndex:(NSUInteger)glyphIndex;


- (NSRectArray)rectArrayForCharacterRange:(NSRange)charRange withinSelectedCharacterRange:(NSRange)selCharRange inTextContainer:(NSTextContainer *)container rectCount:(NSUInteger *)rectCount;
- (NSRectArray)rectArrayForGlyphRange:(NSRange)glyphRange withinSelectedGlyphRange:(NSRange)selGlyphRange inTextContainer:(NSTextContainer *)container rectCount:(NSUInteger *)rectCount;



- (NSRect)boundingRectForGlyphRange:(NSRange)glyphRange inTextContainer:(NSTextContainer *)container;


- (NSRange)glyphRangeForBoundingRect:(NSRect)bounds inTextContainer:(NSTextContainer *)container;
- (NSRange)glyphRangeForBoundingRectWithoutAdditionalLayout:(NSRect)bounds inTextContainer:(NSTextContainer *)container;


- (NSUInteger)glyphIndexForPoint:(NSPoint)point inTextContainer:(NSTextContainer *)container fractionOfDistanceThroughGlyph:(CGFloat *)partialFraction;
- (NSUInteger)glyphIndexForPoint:(NSPoint)point inTextContainer:(NSTextContainer *)container;
- (CGFloat)fractionOfDistanceThroughGlyphForPoint:(NSPoint)point inTextContainer:(NSTextContainer *)container;




- (NSUInteger)getLineFragmentInsertionPointsForCharacterAtIndex:(NSUInteger)charIndex alternatePositions:(BOOL)aFlag inDisplayOrder:(BOOL)dFlag positions:(CGFloat *)positions characterIndexes:(NSUInteger *)charIndexes;





- (NSDictionary *)temporaryAttributesAtCharacterIndex:(NSUInteger)charIndex effectiveRange:(NSRangePointer)effectiveCharRange;
- (void)setTemporaryAttributes:(NSDictionary *)attrs forCharacterRange:(NSRange)charRange;
- (void)addTemporaryAttributes:(NSDictionary *)attrs forCharacterRange:(NSRange)charRange;
- (void)removeTemporaryAttribute:(NSString *)attrName forCharacterRange:(NSRange)charRange;



- (id)temporaryAttribute:(NSString *)attrName atCharacterIndex:(NSUInteger)location effectiveRange:(NSRangePointer)range;
- (id)temporaryAttribute:(NSString *)attrName atCharacterIndex:(NSUInteger)location longestEffectiveRange:(NSRangePointer)range inRange:(NSRange)rangeLimit;
- (NSDictionary *)temporaryAttributesAtCharacterIndex:(NSUInteger)location longestEffectiveRange:(NSRangePointer)range inRange:(NSRange)rangeLimit;
- (void)addTemporaryAttribute:(NSString *)attrName value:(id)value forCharacterRange:(NSRange)charRange;





- (NSFont *)substituteFontForFont:(NSFont *)originalFont;



- (CGFloat)defaultLineHeightForFont:(NSFont *)theFont;

- (CGFloat)defaultBaselineOffsetForFont:(NSFont *)theFont;

- (BOOL)usesFontLeading;
- (void)setUsesFontLeading:(BOOL)flag;



@end

@interface NSLayoutManager (NSTextViewSupport)



- (NSArray *)rulerMarkersForTextView:(NSTextView *)view paragraphStyle:(NSParagraphStyle *)style ruler:(NSRulerView *)ruler;
- (NSView *)rulerAccessoryViewForTextView:(NSTextView *)view paragraphStyle:(NSParagraphStyle *)style ruler:(NSRulerView *)ruler enabled:(BOOL)isEnabled;




- (BOOL)layoutManagerOwnsFirstResponderInWindow:(NSWindow *)window;


- (NSTextView *)firstTextView;

- (NSTextView *)textViewForBeginningOfSelection;




- (void)drawBackgroundForGlyphRange:(NSRange)glyphsToShow atPoint:(NSPoint)origin;
- (void)drawGlyphsForGlyphRange:(NSRange)glyphsToShow atPoint:(NSPoint)origin;


- (void)showPackedGlyphs:(char *)glyphs length:(NSUInteger)glyphLen glyphRange:(NSRange)glyphRange atPoint:(NSPoint)point font:(NSFont *)font color:(NSColor *)color printingAdjustment:(NSSize)printingAdjustment;


- (void)showAttachmentCell:(NSCell *)cell inRect:(NSRect)rect characterIndex:(NSUInteger)attachmentIndex;


- (void)drawUnderlineForGlyphRange:(NSRange)glyphRange underlineType:(NSInteger)underlineVal baselineOffset:(CGFloat)baselineOffset lineFragmentRect:(NSRect)lineRect lineFragmentGlyphRange:(NSRange)lineGlyphRange containerOrigin:(NSPoint)containerOrigin;
- (void)underlineGlyphRange:(NSRange)glyphRange underlineType:(NSInteger)underlineVal lineFragmentRect:(NSRect)lineRect lineFragmentGlyphRange:(NSRange)lineGlyphRange containerOrigin:(NSPoint)containerOrigin;



- (void)drawStrikethroughForGlyphRange:(NSRange)glyphRange strikethroughType:(NSInteger)strikethroughVal baselineOffset:(CGFloat)baselineOffset lineFragmentRect:(NSRect)lineRect lineFragmentGlyphRange:(NSRange)lineGlyphRange containerOrigin:(NSPoint)containerOrigin;
- (void)strikethroughGlyphRange:(NSRange)glyphRange strikethroughType:(NSInteger)strikethroughVal lineFragmentRect:(NSRect)lineRect lineFragmentGlyphRange:(NSRange)lineGlyphRange containerOrigin:(NSPoint)containerOrigin;



@end

@interface NSObject (NSLayoutManagerDelegate)

- (void)layoutManagerDidInvalidateLayout:(NSLayoutManager *)sender;


- (void)layoutManager:(NSLayoutManager *)layoutManager didCompleteLayoutForTextContainer:(NSTextContainer *)textContainer atEnd:(BOOL)layoutFinishedFlag;



- (NSDictionary *)layoutManager:(NSLayoutManager *)layoutManager shouldUseTemporaryAttributes:(NSDictionary *)attrs forDrawingToScreen:(BOOL)toScreen atCharacterIndex:(NSUInteger)charIndex effectiveRange:(NSRangePointer)effectiveCharRange;



@end
# 110 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextStorage.h" 1 3
# 18 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextStorage.h" 3
@class NSLayoutManager;
@class NSMutableArray;



enum {
    NSTextStorageEditedAttributes = 1,
    NSTextStorageEditedCharacters = 2
};

@interface NSTextStorage : NSMutableAttributedString {

    NSRange _editedRange;
    NSInteger _editedDelta;
    struct {
 unsigned int editedMask:8;
        unsigned int :8;
        unsigned int disabled:16;



    } _flags;
    NSMutableArray *_layoutManagers;
    id _sideData;
}



- (void)addLayoutManager:(NSLayoutManager *)obj;
- (void)removeLayoutManager:(NSLayoutManager *)obj;
- (NSArray *)layoutManagers;



- (void)edited:(NSUInteger)editedMask range:(NSRange)range changeInLength:(NSInteger)delta;



- (void)processEditing;


- (void)invalidateAttributesInRange:(NSRange)range;


- (void)ensureAttributesAreFixedInRange:(NSRange)range;



- (BOOL)fixesAttributesLazily;



- (NSUInteger)editedMask;
- (NSRange)editedRange;
- (NSInteger)changeInLength;



- (void)setDelegate:(id)delegate;
- (id)delegate;

@end




@interface NSObject (NSTextStorageDelegate)



- (void)textStorageWillProcessEditing:(NSNotification *)notification;
- (void)textStorageDidProcessEditing:(NSNotification *)notification;

@end



extern "C" NSString *NSTextStorageWillProcessEditingNotification;
extern "C" NSString *NSTextStorageDidProcessEditingNotification;
# 112 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextView.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextView.h" 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSInputManager.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSInputManager.h" 3
@class NSArray, NSAttributedString, NSEvent, NSInputServer, NSImage;

@protocol NSTextInput

- (void) insertText:(id)aString;
- (void) doCommandBySelector:(SEL)aSelector;

- (void) setMarkedText:(id)aString selectedRange:(NSRange)selRange;

- (void) unmarkText;
- (BOOL) hasMarkedText;
- (NSInteger) conversationIdentifier;



- (NSAttributedString *) attributedSubstringFromRange:(NSRange)theRange;



- (NSRange) markedRange;



- (NSRange) selectedRange;



- (NSRect) firstRectForCharacterRange:(NSRange)theRange;



- (NSUInteger)characterIndexForPoint:(NSPoint)thePoint;



- (NSArray*) validAttributesForMarkedText;

@end

@interface NSInputManager : NSObject <NSTextInput> {

@private
    id _currentClient;
    id _server;
    id _bundleObj;
    id _keybindings;
    NSString *_trueName;
    NSString *_connectionName;
    NSString *_hostName;
    NSString *_procToExec;
    NSString *_visibleName;
    NSString *_bundleName;
    NSString *_language;
    NSImage *_image;
    unsigned int _flags;
    NSString *_keyBindingsName;
    int _reservedInputManager2;
}



+ (NSInputManager *) currentInputManager;



+ (void)cycleToNextInputLanguage:(id)sender;
+ (void)cycleToNextInputServerInLanguage:(id)sender;

- (NSInputManager *) initWithName:(NSString *)inputServerName host:(NSString *)hostName;

- (NSString *) localizedInputManagerName;




- (void) markedTextAbandoned:(id)cli;
- (void) markedTextSelectionChanged:(NSRange)newSel client:(id)cli;



- (BOOL) wantsToInterpretAllKeystrokes;

- (NSString*) language;

- (NSImage *) image;

- (NSInputServer *) server;



- (BOOL) wantsToHandleMouseEvents;

- (BOOL) handleMouseEvent:(NSEvent*)theMouseEvent;



- (BOOL) wantsToDelayTextChangeNotifications;
@end
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextView.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextAttachment.h" 1 3
# 19 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextAttachment.h" 3
@class NSFileWrapper;
@class NSLayoutManager;
@class NSTextAttachment;
@class NSTextContainer;

enum {
    NSAttachmentCharacter = 0xfffc
};



@protocol NSTextAttachmentCell <NSObject>
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (BOOL)wantsToTrackMouse;
- (void)highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView untilMouseUp:(BOOL)flag;
- (NSSize)cellSize;
- (NSPoint)cellBaselineOffset;
- (void)setAttachment:(NSTextAttachment *)anObject;
- (NSTextAttachment *)attachment;


- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView characterIndex:(NSUInteger)charIndex;
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView characterIndex:(NSUInteger)charIndex layoutManager:(NSLayoutManager *)layoutManager;
- (BOOL)wantsToTrackMouseForEvent:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView atCharacterIndex:(NSUInteger)charIndex;
- (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView atCharacterIndex:(NSUInteger)charIndex untilMouseUp:(BOOL)flag;
- (NSRect)cellFrameForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(NSRect)lineFrag glyphPosition:(NSPoint)position characterIndex:(NSUInteger)charIndex;
@end



@interface NSTextAttachmentCell : NSCell <NSTextAttachmentCell> {

    NSTextAttachment *_attachment;
}
@end


@interface NSTextAttachment : NSObject <NSCoding> {

    NSFileWrapper *_fileWrapper;
    id <NSTextAttachmentCell>_cell;
    struct {
        unsigned int cellWasExplicitlySet:1;
        unsigned int :31;
    } _flags;
}



- (id)initWithFileWrapper:(NSFileWrapper *)fileWrapper;



- (void)setFileWrapper:(NSFileWrapper *)fileWrapper;
- (NSFileWrapper *)fileWrapper;



- (id <NSTextAttachmentCell>)attachmentCell;
- (void)setAttachmentCell:(id <NSTextAttachmentCell>)cell;

@end




@interface NSAttributedString (NSAttributedStringAttachmentConveniences)

+ (NSAttributedString *)attributedStringWithAttachment:(NSTextAttachment *)attachment;

@end

@interface NSMutableAttributedString (NSMutableAttributedStringAttachmentConveniences)

- (void)updateAttachmentsFromPath:(NSString *)path;

@end
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextView.h" 2 3



# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextInputClient.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextInputClient.h" 3
@class NSArray;
@class NSAttributedString;

@protocol NSTextInputClient
@required


- (void)insertText:(id)aString replacementRange:(NSRange)replacementRange;



 - (void)doCommandBySelector:(SEL)aSelector;



- (void)setMarkedText:(id)aString selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange;



- (void)unmarkText;



- (NSRange)selectedRange;



- (NSRange)markedRange;



- (BOOL)hasMarkedText;



- (NSAttributedString *)attributedSubstringForProposedRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange;



- (NSArray*)validAttributesForMarkedText;



- (NSRect)firstRectForCharacterRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange;



- (NSUInteger)characterIndexForPoint:(NSPoint)aPoint;

@optional


- (NSAttributedString *)attributedString;



- (CGFloat)fractionOfDistanceThroughGlyphForPoint:(NSPoint)aPoint;



- (CGFloat)baselineDeltaForCharacterAtIndex:(NSUInteger)anIndex;



- (NSInteger)windowLevel;
@end
# 17 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextView.h" 2 3

@class NSTextContainer;
@class NSTextStorage;
@class NSLayoutManager;
@class NSRulerView;
@class NSRulerMarker;
@class NSUndoManager;
@class NSParagraphStyle;


enum {
    NSSelectByCharacter = 0,
    NSSelectByWord = 1,
    NSSelectByParagraph = 2
};
typedef NSUInteger NSSelectionGranularity;


enum {
    NSSelectionAffinityUpstream = 0,
    NSSelectionAffinityDownstream = 1
};
typedef NSUInteger NSSelectionAffinity;


enum {
    NSFindPanelActionShowFindPanel = 1,
    NSFindPanelActionNext = 2,
    NSFindPanelActionPrevious = 3,
    NSFindPanelActionReplaceAll = 4,
    NSFindPanelActionReplace = 5,
    NSFindPanelActionReplaceAndFind = 6,
    NSFindPanelActionSetFindString = 7,
    NSFindPanelActionReplaceAllInSelection = 8

    ,
    NSFindPanelActionSelectAll = 9,
    NSFindPanelActionSelectAllInSelection = 10

};
typedef NSUInteger NSFindPanelAction;



extern "C" NSString *NSFindPanelSearchOptionsPboardType ;

extern "C" NSString *NSFindPanelCaseInsensitiveSearch ;
extern "C" NSString *NSFindPanelSubstringMatch ;
extern "C" NSString *NSFindPanelRegularExpressionSyntax ;

enum {
    NSFindPanelSubstringMatchTypeContains = 0,
    NSFindPanelSubstringMatchTypeStartsWith = 1,
    NSFindPanelSubstringMatchTypeFullWord = 2,
    NSFindPanelSubstringMatchTypeEndsWith = 3
};
typedef NSUInteger NSFindPanelSubstringMatchType;

extern "C" NSString *NSFindPanelRegularExpressionSyntaxNone ;
extern "C" NSString *NSFindPanelRegularExpressionSyntaxSimple ;



extern "C" NSString *NSAllRomanInputSourcesLocaleIdentifier ;

@interface NSTextView : NSText <NSTextInput, NSUserInterfaceValidations

, NSTextInputClient

>



- (id)initWithFrame:(NSRect)frameRect textContainer:(NSTextContainer *)container;


- (id)initWithFrame:(NSRect)frameRect;




- (NSTextContainer *)textContainer;
- (void)setTextContainer:(NSTextContainer *)container;


- (void)replaceTextContainer:(NSTextContainer *)newContainer;


- (void)setTextContainerInset:(NSSize)inset;
- (NSSize)textContainerInset;


- (NSPoint)textContainerOrigin;
- (void)invalidateTextContainerOrigin;


- (NSLayoutManager *)layoutManager;
- (NSTextStorage *)textStorage;




- (void)insertText:(id)insertString;




- (void)setConstrainedFrameSize:(NSSize)desiredSize;





- (void)setAlignment:(NSTextAlignment)alignment range:(NSRange)range;

- (void)setBaseWritingDirection:(NSWritingDirection)writingDirection range:(NSRange)range;




- (void)turnOffKerning:(id)sender;
- (void)tightenKerning:(id)sender;
- (void)loosenKerning:(id)sender;
- (void)useStandardKerning:(id)sender;
- (void)turnOffLigatures:(id)sender;
- (void)useStandardLigatures:(id)sender;
- (void)useAllLigatures:(id)sender;
- (void)raiseBaseline:(id)sender;
- (void)lowerBaseline:(id)sender;
- (void)toggleTraditionalCharacterShape:(id)sender;

- (void)outline:(id)sender;





- (void)performFindPanelAction:(id)sender;





- (void)alignJustified:(id)sender;
- (void)changeColor:(id)sender;

- (void)changeAttributes:(id)sender;
- (void)changeDocumentBackgroundColor:(id)sender;
- (void)toggleBaseWritingDirection:(id)sender;


- (void)orderFrontSpacingPanel:(id)sender;
- (void)orderFrontLinkPanel:(id)sender;
- (void)orderFrontListPanel:(id)sender;
- (void)orderFrontTablePanel:(id)sender;




- (void)rulerView:(NSRulerView *)ruler didMoveMarker:(NSRulerMarker *)marker;
- (void)rulerView:(NSRulerView *)ruler didRemoveMarker:(NSRulerMarker *)marker;
- (void)rulerView:(NSRulerView *)ruler didAddMarker:(NSRulerMarker *)marker;
- (BOOL)rulerView:(NSRulerView *)ruler shouldMoveMarker:(NSRulerMarker *)marker;
- (BOOL)rulerView:(NSRulerView *)ruler shouldAddMarker:(NSRulerMarker *)marker;
- (CGFloat)rulerView:(NSRulerView *)ruler willMoveMarker:(NSRulerMarker *)marker toLocation:(CGFloat)location;
- (BOOL)rulerView:(NSRulerView *)ruler shouldRemoveMarker:(NSRulerMarker *)marker;
- (CGFloat)rulerView:(NSRulerView *)ruler willAddMarker:(NSRulerMarker *)marker atLocation:(CGFloat)location;
- (void)rulerView:(NSRulerView *)ruler handleMouseDown:(NSEvent *)event;



- (void)setNeedsDisplayInRect:(NSRect)rect avoidAdditionalLayout:(BOOL)flag;


- (BOOL)shouldDrawInsertionPoint;
- (void)drawInsertionPointInRect:(NSRect)rect color:(NSColor *)color turnedOn:(BOOL)flag;


- (void)drawViewBackgroundInRect:(NSRect)rect;





- (void)updateRuler;
- (void)updateFontPanel;

- (void)updateDragTypeRegistration;

- (NSRange)selectionRangeForProposedRange:(NSRange)proposedCharRange granularity:(NSSelectionGranularity)granularity;



- (void)clickedOnLink:(id)link atIndex:(NSUInteger)charIndex;




- (void)startSpeaking:(id)sender;
- (void)stopSpeaking:(id)sender;




- (NSUInteger)characterIndexForInsertionAtPoint:(NSPoint)point;



@end


@interface NSTextView (NSCompletion)



- (void)complete:(id)sender;


- (NSRange)rangeForUserCompletion;


- (NSArray *)completionsForPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index;


- (void)insertCompletion:(NSString *)word forPartialWordRange:(NSRange)charRange movement:(NSInteger)movement isFinal:(BOOL)flag;

@end


@interface NSTextView (NSPasteboard)
# 258 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextView.h" 3
- (NSArray *)writablePasteboardTypes;


- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard type:(NSString *)type;


- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types;



- (NSArray *)readablePasteboardTypes;


- (NSString *)preferredPasteboardTypeFromArray:(NSArray *)availableTypes restrictedToTypesFromArray:(NSArray *)allowedTypes;


- (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard type:(NSString *)type;


- (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard;


+ (void)registerForServices;


- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType;


- (void)pasteAsPlainText:(id)sender;
- (void)pasteAsRichText:(id)sender;


@end

@interface NSTextView (NSDragging)

- (BOOL)dragSelectionWithEvent:(NSEvent *)event offset:(NSSize)mouseOffset slideBack:(BOOL)slideBack;


- (NSImage *)dragImageForSelectionWithEvent:(NSEvent *)event origin:(NSPointPointer)origin;


- (NSArray *)acceptableDragTypes;


- (NSDragOperation)dragOperationForDraggingInfo:(id <NSDraggingInfo>)dragInfo type:(NSString *)type;


- (void)cleanUpAfterDragOperation;


@end

@interface NSTextView (NSSharing)






- (NSArray *)selectedRanges;
- (void)setSelectedRanges:(NSArray *)ranges affinity:(NSSelectionAffinity)affinity stillSelecting:(BOOL)stillSelectingFlag;
- (void)setSelectedRanges:(NSArray *)ranges;



- (void)setSelectedRange:(NSRange)charRange affinity:(NSSelectionAffinity)affinity stillSelecting:(BOOL)stillSelectingFlag;
- (NSSelectionAffinity)selectionAffinity;
- (NSSelectionGranularity)selectionGranularity;
- (void)setSelectionGranularity:(NSSelectionGranularity)granularity;

- (void)setSelectedTextAttributes:(NSDictionary *)attributeDictionary;
- (NSDictionary *)selectedTextAttributes;


- (void)setInsertionPointColor:(NSColor *)color;
- (NSColor *)insertionPointColor;

- (void)updateInsertionPointStateAndRestartTimer:(BOOL)restartFlag;

- (void)setMarkedTextAttributes:(NSDictionary *)attributeDictionary;
- (NSDictionary *)markedTextAttributes;



- (void)setLinkTextAttributes:(NSDictionary *)attributeDictionary;
- (NSDictionary *)linkTextAttributes;




- (BOOL)displaysLinkToolTips;
- (void)setDisplaysLinkToolTips:(BOOL)flag;






- (BOOL)acceptsGlyphInfo;
- (void)setAcceptsGlyphInfo:(BOOL)flag;




- (void)setRulerVisible:(BOOL)flag;
- (BOOL)usesRuler;
- (void)setUsesRuler:(BOOL)flag;

- (void)setContinuousSpellCheckingEnabled:(BOOL)flag;
- (BOOL)isContinuousSpellCheckingEnabled;
- (void)toggleContinuousSpellChecking:(id)sender;

- (NSInteger)spellCheckerDocumentTag;


- (void)setGrammarCheckingEnabled:(BOOL)flag;
- (BOOL)isGrammarCheckingEnabled;
- (void)toggleGrammarChecking:(id)sender;


- (void)setSpellingState:(NSInteger)value range:(NSRange)charRange;



- (NSDictionary *)typingAttributes;
- (void)setTypingAttributes:(NSDictionary *)attrs;



- (BOOL)shouldChangeTextInRanges:(NSArray *)affectedRanges replacementStrings:(NSArray *)replacementStrings;
- (NSArray *)rangesForUserTextChange;
- (NSArray *)rangesForUserCharacterAttributeChange;
- (NSArray *)rangesForUserParagraphAttributeChange;


- (BOOL)shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString;
- (void)didChangeText;

- (NSRange)rangeForUserTextChange;
- (NSRange)rangeForUserCharacterAttributeChange;
- (NSRange)rangeForUserParagraphAttributeChange;


- (void)setUsesFindPanel:(BOOL)flag;
- (BOOL)usesFindPanel;

- (void)setAllowsDocumentBackgroundColorChange:(BOOL)flag;
- (BOOL)allowsDocumentBackgroundColorChange;

- (void)setDefaultParagraphStyle:(NSParagraphStyle *)paragraphStyle;
- (NSParagraphStyle *)defaultParagraphStyle;


- (void)setAllowsUndo:(BOOL)flag;
- (BOOL)allowsUndo;


- (void)breakUndoCoalescing;




- (BOOL)allowsImageEditing;
- (void)setAllowsImageEditing:(BOOL)flag;


- (void)showFindIndicatorForRange:(NSRange)charRange;





- (id)delegate;
- (void)setDelegate:(id)anObject;
- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;
- (BOOL)isSelectable;
- (void)setSelectable:(BOOL)flag;
- (BOOL)isRichText;
- (void)setRichText:(BOOL)flag;
- (BOOL)importsGraphics;
- (void)setImportsGraphics:(BOOL)flag;
- (BOOL)drawsBackground;
- (void)setDrawsBackground:(BOOL)flag;
- (NSColor *)backgroundColor;
- (void)setBackgroundColor:(NSColor *)color;
- (BOOL)isFieldEditor;
- (void)setFieldEditor:(BOOL)flag;
- (BOOL)usesFontPanel;
- (void)setUsesFontPanel:(BOOL)flag;
- (BOOL)isRulerVisible;
- (void)setSelectedRange:(NSRange)charRange;




- (BOOL)smartInsertDeleteEnabled;
- (void)setSmartInsertDeleteEnabled:(BOOL)flag;
- (NSRange)smartDeleteRangeForProposedRange:(NSRange)proposedCharRange;

- (void)toggleSmartInsertDelete:(id)sender;


- (void)smartInsertForString:(NSString *)pasteString replacingRange:(NSRange)charRangeToReplace beforeString:(NSString **)beforeString afterString:(NSString **)afterString;
- (NSString *)smartInsertBeforeStringForString:(NSString *)pasteString replacingRange:(NSRange)charRangeToReplace;
- (NSString *)smartInsertAfterStringForString:(NSString *)pasteString replacingRange:(NSRange)charRangeToReplace;



- (void)setAutomaticQuoteSubstitutionEnabled:(BOOL)flag;
- (BOOL)isAutomaticQuoteSubstitutionEnabled;
- (void)toggleAutomaticQuoteSubstitution:(id)sender;
- (void)setAutomaticLinkDetectionEnabled:(BOOL)flag;
- (BOOL)isAutomaticLinkDetectionEnabled;
- (void)toggleAutomaticLinkDetection:(id)sender;






- (NSArray *)allowedInputSourceLocales;
- (void)setAllowedInputSourceLocales:(NSArray *)localeIdentifiers;

@end



@interface NSObject (NSTextViewDelegate)

- (BOOL)textView:(NSTextView *)textView clickedOnLink:(id)link atIndex:(NSUInteger)charIndex;


- (void)textView:(NSTextView *)textView clickedOnCell:(id <NSTextAttachmentCell>)cell inRect:(NSRect)cellFrame atIndex:(NSUInteger)charIndex;


- (void)textView:(NSTextView *)textView doubleClickedOnCell:(id <NSTextAttachmentCell>)cell inRect:(NSRect)cellFrame atIndex:(NSUInteger)charIndex;


- (void)textView:(NSTextView *)view draggedCell:(id <NSTextAttachmentCell>)cell inRect:(NSRect)rect event:(NSEvent *)event atIndex:(NSUInteger)charIndex;


- (NSArray *)textView:(NSTextView *)view writablePasteboardTypesForCell:(id <NSTextAttachmentCell>)cell atIndex:(NSUInteger)charIndex;


- (BOOL)textView:(NSTextView *)view writeCell:(id <NSTextAttachmentCell>)cell atIndex:(NSUInteger)charIndex toPasteboard:(NSPasteboard *)pboard type:(NSString *)type ;


- (NSRange)textView:(NSTextView *)textView willChangeSelectionFromCharacterRange:(NSRange)oldSelectedCharRange toCharacterRange:(NSRange)newSelectedCharRange;



- (NSArray *)textView:(NSTextView *)textView willChangeSelectionFromCharacterRanges:(NSArray *)oldSelectedCharRanges toCharacterRanges:(NSArray *)newSelectedCharRanges;


- (BOOL)textView:(NSTextView *)textView shouldChangeTextInRanges:(NSArray *)affectedRanges replacementStrings:(NSArray *)replacementStrings;


- (NSDictionary *)textView:(NSTextView *)textView shouldChangeTypingAttributes:(NSDictionary *)oldTypingAttributes toAttributes:(NSDictionary *)newTypingAttributes;



- (void)textViewDidChangeSelection:(NSNotification *)notification;


- (void)textViewDidChangeTypingAttributes:(NSNotification *)notification;

- (NSString *)textView:(NSTextView *)textView willDisplayToolTip:(NSString *)tooltip forCharacterAtIndex:(NSUInteger)characterIndex;


- (NSArray *)textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index;



- (BOOL)textView:(NSTextView *)textView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString;


- (BOOL)textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector;


- (NSInteger)textView:(NSTextView *)textView shouldSetSpellingState:(NSInteger)value range:(NSRange)affectedCharRange;





- (BOOL)textView:(NSTextView *)textView clickedOnLink:(id)link;
- (void)textView:(NSTextView *)textView clickedOnCell:(id <NSTextAttachmentCell>)cell inRect:(NSRect)cellFrame;
- (void)textView:(NSTextView *)textView doubleClickedOnCell:(id <NSTextAttachmentCell>)cell inRect:(NSRect)cellFrame;
- (void)textView:(NSTextView *)view draggedCell:(id <NSTextAttachmentCell>)cell inRect:(NSRect)rect event:(NSEvent *)event;
- (NSUndoManager *)undoManagerForTextView:(NSTextView *)view;

@end

extern "C" NSString *NSTextViewWillChangeNotifyingTextViewNotification;


extern "C" NSString *NSTextViewDidChangeSelectionNotification;


extern "C" NSString *NSTextViewDidChangeTypingAttributesNotification ;
# 113 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3



# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSInputServer.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSInputServer.h" 3
@protocol NSInputServiceProvider

- (void) insertText:(id)aString client:(id)sender;
- (void) doCommandBySelector:(SEL)aSelector client:(id)sender;
- (void) markedTextAbandoned:(id)sender;
- (void) markedTextSelectionChanged:(NSRange)newSel client:(id)sender;
- (void) terminate:(id)sender;



- (BOOL) canBeDisabled;



- (BOOL) wantsToInterpretAllKeystrokes;


- (BOOL) wantsToHandleMouseEvents;



- (BOOL) wantsToDelayTextChangeNotifications;



- (void) inputClientBecomeActive:(id)sender;
- (void) inputClientResignActive:(id)sender;



- (void) inputClientEnabled:(id)sender;
- (void) inputClientDisabled:(id)sender;



- (void) activeConversationWillChange:(id)sender fromOldConversation:(NSInteger)oldConversation;
- (void) activeConversationChanged:(id)sender toNewConversation:(NSInteger)newConversation;

@end



@protocol NSInputServerMouseTracker
- (BOOL) mouseDownOnCharacterIndex:(NSUInteger)theIndex atCoordinate:(NSPoint)thePoint withModifier:(NSUInteger)theFlags client:(id)sender;
- (BOOL) mouseDraggedOnCharacterIndex:(NSUInteger)theIndex atCoordinate:(NSPoint)thePoint withModifier:(NSUInteger)theFlags client:(id)sender;
- (void) mouseUpOnCharacterIndex:(NSUInteger)theIndex atCoordinate:(NSPoint)thePoint withModifier:(NSUInteger)theFlags client:(id)sender;
@end

@interface NSInputServer : NSObject <NSInputServiceProvider, NSInputServerMouseTracker> {
    NSString *_name;
    id _delegate;
}

- initWithDelegate:(id)aDelegate name:(NSString *)name;
@end
# 117 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSStringDrawing.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSStringDrawing.h" 3
@interface NSString(NSStringDrawing)

- (NSSize)sizeWithAttributes:(NSDictionary *)attrs;
- (void)drawAtPoint:(NSPoint)point withAttributes:(NSDictionary *)attrs;
- (void)drawInRect:(NSRect)rect withAttributes:(NSDictionary *)attrs;

@end

@interface NSAttributedString(NSStringDrawing)

- (NSSize)size;
- (void)drawAtPoint:(NSPoint)point;
- (void)drawInRect:(NSRect)rect;

@end


enum {
    NSStringDrawingUsesLineFragmentOrigin = (1 << 0),
    NSStringDrawingUsesFontLeading = (1 << 1),
    NSStringDrawingDisableScreenFontSubstitution = (1 << 2),
    NSStringDrawingUsesDeviceMetrics = (1 << 3),
    NSStringDrawingOneShot = (1 << 4)
};
typedef NSInteger NSStringDrawingOptions;

@interface NSString (NSExtendedStringDrawing)


- (void)drawWithRect:(NSRect)rect options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes;



- (NSRect)boundingRectWithSize:(NSSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes;
@end

@interface NSAttributedString (NSExtendedStringDrawing)
- (void)drawWithRect:(NSRect)rect options:(NSStringDrawingOptions)options;
- (NSRect)boundingRectWithSize:(NSSize)size options:(NSStringDrawingOptions)options;
@end
# 118 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSRulerMarker.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSRulerMarker.h" 3
@class NSEvent, NSImage, NSRulerView;

@interface NSRulerMarker : NSObject <NSCopying, NSCoding> {

    NSRulerView *_ruler;
    CGFloat _location;
    NSImage *_image;
    NSPoint _imageOrigin;

    struct __rFlags {
        unsigned int movable:1;
        unsigned int removable:1;
        unsigned int dragging:1;
        unsigned int pinned:1;
        unsigned int _reserved:28;
    } _rFlags;

    id _representedObject;
}



- (id)initWithRulerView:(NSRulerView *)ruler markerLocation:(CGFloat)location image:(NSImage *)image imageOrigin:(NSPoint)imageOrigin;




- (NSRulerView *)ruler;



- (void)setMarkerLocation:(CGFloat)location;
- (CGFloat)markerLocation;


- (void)setImage:(NSImage *)image;
- (NSImage *)image;


- (void)setImageOrigin:(NSPoint)imageOrigin;
- (NSPoint)imageOrigin;


- (void)setMovable:(BOOL)flag;
- (void)setRemovable:(BOOL)flag;
- (BOOL)isMovable;
- (BOOL)isRemovable;


- (BOOL)isDragging;


- (void)setRepresentedObject:(id <NSCopying>)representedObject;
- (id <NSCopying>)representedObject;




- (NSRect)imageRectInRuler;


- (CGFloat)thicknessRequiredInRuler;


- (void)drawRect:(NSRect)rect;


- (BOOL)trackMouse:(NSEvent *)mouseDownEvent adding:(BOOL)isAdding;


@end
# 119 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSRulerView.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSRulerView.h" 3
@class NSScrollView, NSRulerMarker, NSMutableArray;


enum {
    NSHorizontalRuler,
    NSVerticalRuler
};
typedef NSUInteger NSRulerOrientation;

@interface NSRulerView : NSView {

  @private
    NSScrollView *_scrollView;
    NSRulerOrientation _orientation;

    NSString *_units;
    CGFloat _originOffset;

    CGFloat _ruleThickness;
    CGFloat _thicknessForMarkers;
    CGFloat _thicknessForAccessoryView;

    NSView *_clientView;
    NSMutableArray *_markers;
    NSView *_accessoryView;


    NSDictionary *_cachedHashDict;
    CGFloat _cachedDocViewToRulerConversion;


    NSPoint _cachedContentBoundsOrigin;


    NSRulerMarker *_draggingMarker;

    id _reservedRulerView1;
}



+ (void)registerUnitWithName:(NSString *)unitName abbreviation:(NSString *)abbreviation unitToPointsConversionFactor:(CGFloat)conversionFactor stepUpCycle:(NSArray *)stepUpCycle stepDownCycle:(NSArray *)stepDownCycle;



- (id)initWithScrollView:(NSScrollView *)scrollView orientation:(NSRulerOrientation)orientation;




- (void)setScrollView:(NSScrollView *)scrollView;
- (NSScrollView *)scrollView;


- (void)setOrientation:(NSRulerOrientation)orientation;
- (NSRulerOrientation)orientation;





- (CGFloat)baselineLocation;


- (CGFloat)requiredThickness;


- (void)setRuleThickness:(CGFloat)thickness;
- (CGFloat)ruleThickness;


- (void)setReservedThicknessForMarkers:(CGFloat)thickness;
- (CGFloat)reservedThicknessForMarkers;


- (void)setReservedThicknessForAccessoryView:(CGFloat)thickness;
- (CGFloat)reservedThicknessForAccessoryView;




- (void)setMeasurementUnits:(NSString *)unitName;
- (NSString *)measurementUnits;


- (void)setOriginOffset:(CGFloat)offset;
- (CGFloat)originOffset;




- (void)setClientView:(NSView *)client;
- (NSView *)clientView;

- (void)setMarkers:(NSArray *)markers;
- (void)addMarker:(NSRulerMarker *)marker;
- (void)removeMarker:(NSRulerMarker *)marker;
- (NSArray *)markers;


- (BOOL)trackMarker:(NSRulerMarker *)marker withMouseEvent:(NSEvent *)event;


- (void)setAccessoryView:(NSView *)accessory;
- (NSView *)accessoryView;


- (void)moveRulerlineFromLocation:(CGFloat)oldLocation toLocation:(CGFloat)newLocation;




- (void)invalidateHashMarks;


- (void)drawHashMarksAndLabelsInRect:(NSRect)rect;


- (void)drawMarkersInRect:(NSRect)rect;




- (BOOL)isFlipped;


@end


@interface NSView (NSRulerMarkerClientViewDelegation)

- (BOOL)rulerView:(NSRulerView *)ruler shouldMoveMarker:(NSRulerMarker *)marker;


- (CGFloat)rulerView:(NSRulerView *)ruler willMoveMarker:(NSRulerMarker *)marker toLocation:(CGFloat)location;


- (void)rulerView:(NSRulerView *)ruler didMoveMarker:(NSRulerMarker *)marker;


- (BOOL)rulerView:(NSRulerView *)ruler shouldRemoveMarker:(NSRulerMarker *)marker;


- (void)rulerView:(NSRulerView *)ruler didRemoveMarker:(NSRulerMarker *)marker;


- (BOOL)rulerView:(NSRulerView *)ruler shouldAddMarker:(NSRulerMarker *)marker;


- (CGFloat)rulerView:(NSRulerView *)ruler willAddMarker:(NSRulerMarker *)marker atLocation:(CGFloat)location;


- (void)rulerView:(NSRulerView *)ruler didAddMarker:(NSRulerMarker *)marker;


- (void)rulerView:(NSRulerView *)ruler handleMouseDown:(NSEvent *)event;


- (void)rulerView:(NSRulerView *)ruler willSetClientView:(NSView *)newClient;


@end
# 120 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSecureTextField.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSSecureTextField.h" 3
@interface NSSecureTextField : NSTextField {

}
@end

@interface NSSecureTextFieldCell : NSTextFieldCell {

    @private
    BOOL _echosBullets;
}

- (void)setEchosBullets:(BOOL)flag;
- (BOOL)echosBullets;

@end
# 121 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSInterfaceStyle.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSInterfaceStyle.h" 3
enum {
    NSNoInterfaceStyle = 0,
    NSNextStepInterfaceStyle = 1,
    NSWindows95InterfaceStyle = 2,
    NSMacintoshInterfaceStyle = 3
};
typedef NSUInteger NSInterfaceStyle;

extern "C" NSInterfaceStyle NSInterfaceStyleForKey(NSString *key, NSResponder *responder);


@interface NSResponder (NSInterfaceStyle)
- (NSInterfaceStyle)interfaceStyle;
- (void)setInterfaceStyle:(NSInterfaceStyle)interfaceStyle;

@end



extern "C" NSString *NSInterfaceStyleDefault;
# 122 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSProgressIndicator.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSProgressIndicator.h" 3
struct __NSProgressIndicatorThreadInfo;
typedef struct __NSProgressIndicatorThreadInfo _NSProgressIndicatorThreadInfo;
# 25 "/System/Library/Frameworks/AppKit.framework/Headers/NSProgressIndicator.h" 3
enum {
    NSProgressIndicatorPreferredThickness = 14,
    NSProgressIndicatorPreferredSmallThickness = 10,
    NSProgressIndicatorPreferredLargeThickness = 18,
    NSProgressIndicatorPreferredAquaThickness = 12
};
typedef NSUInteger NSProgressIndicatorThickness;



enum {
    NSProgressIndicatorBarStyle = 0,
    NSProgressIndicatorSpinningStyle = 1
};
typedef NSUInteger NSProgressIndicatorStyle;





@interface NSProgressIndicator : NSView
{
@private

    BOOL _isBezeled;
    BOOL _isIndeterminate;
    BOOL _threadedAnimation;

    double _minimum;
    double _maximum;


    double _value;

    int _animationIndex;
    NSTimeInterval _animationDelay;

    id _timer;

    id _animationThreadLock;

    id _cachedImage;
    id _cachedImageLock;

    volatile struct __progressIndicatorFlags {
        unsigned int isSpinning:1;
        unsigned int isVector:1;
        unsigned int isLocked:1;
        unsigned int controlTint:3;
        unsigned int controlSize:2;
 unsigned int style:1;
        unsigned int _delayedStartup:1;
        unsigned int _orderOutForResize:1;
        unsigned int _lastImageIndex:4;
  unsigned int hideWhenStopped:1;
        unsigned int RESERVED:16;
    } _progressIndicatorFlags;


    id _NSProgressIndicatorReserved1;
}



- (BOOL)isIndeterminate;
- (void)setIndeterminate:(BOOL)flag;

- (BOOL)isBezeled;
- (void)setBezeled:(BOOL)flag;

- (NSControlTint)controlTint;
- (void)setControlTint:(NSControlTint)tint;

- (NSControlSize)controlSize;
- (void)setControlSize:(NSControlSize)size;



- (double)doubleValue;
- (void)setDoubleValue:(double)doubleValue;

- (void)incrementBy:(double)delta;

- (double)minValue;
- (double)maxValue;
- (void)setMinValue:(double)newMinimum;
- (void)setMaxValue:(double)newMaximum;



- (NSTimeInterval)animationDelay;
- (void)setAnimationDelay:(NSTimeInterval)delay;

- (BOOL)usesThreadedAnimation;
- (void)setUsesThreadedAnimation:(BOOL)threadedAnimation;

- (void)startAnimation:(id)sender;
- (void)stopAnimation:(id)sender;

- (void)animate:(id)sender;



- (void) setStyle: (NSProgressIndicatorStyle) style;
- (NSProgressIndicatorStyle) style;



- (void) sizeToFit;

- (BOOL) isDisplayedWhenStopped;
- (void) setDisplayedWhenStopped: (BOOL) isDisplayed;


@end
# 124 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTabView.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSTabView.h" 3
@class NSArray, NSFont, NSTabViewItem;



enum {
    NSTopTabsBezelBorder = 0,
    NSLeftTabsBezelBorder = 1,
    NSBottomTabsBezelBorder = 2,
    NSRightTabsBezelBorder = 3,
    NSNoTabsBezelBorder = 4,
    NSNoTabsLineBorder = 5,
    NSNoTabsNoBorder = 6
};
typedef NSUInteger NSTabViewType;

@interface NSTabView : NSView
{
    @private



    id _tabViewItems;
    NSTabViewItem *_selectedTabViewItem;
    NSFont *_font;
    NSTabViewType _tabViewType;
    BOOL _allowTruncatedLabels;
    id _delegate;



    BOOL _tabViewUnusedBOOL1;

    BOOL _drawsBackground;
    NSTabViewItem *_pressedTabViewItem;
    NSInteger _endTabWidth;
    NSInteger _maxOverlap;
    CGFloat _tabHeight;
    NSTabViewItem *_tabViewItemWithKeyView;
    NSView *_originalNextKeyView;
    struct __NSTabViewDelegateRespondTo {
        unsigned int shouldSelectTabViewItem:1;
        unsigned int willSelectTabViewItem:1;
        unsigned int didSelectTabViewItem:1;
        unsigned int didChangeNumberOfTabViewItems:1;
        unsigned int reserved:28;
    } _delegateRespondTo;

    struct __NSTabViewFlags {
        unsigned int needsLayout:1;
        unsigned int controlTint:3;
        unsigned int controlSize:2;
        unsigned int wiringNibConnections:1;
        unsigned int wiringInteriorLastKeyView:1;
        unsigned int originalNextKeyViewChanged:1;
 unsigned int liveResizeSkippedResetToolTips:1;
        unsigned int reserved:22;
    } _flags;



    NSTabViewItem *_focusedTabViewItem;
    void *_tabViewUnused2;
}



- (void)selectTabViewItem:(NSTabViewItem *)tabViewItem;
- (void)selectTabViewItemAtIndex:(NSInteger)index;
- (void)selectTabViewItemWithIdentifier:(id)identifier;
- (void)takeSelectedTabViewItemFromSender:(id)sender;



- (void)selectFirstTabViewItem:(id)sender;
- (void)selectLastTabViewItem:(id)sender;
- (void)selectNextTabViewItem:(id)sender;
- (void)selectPreviousTabViewItem:(id)sender;



- (NSTabViewItem *)selectedTabViewItem;
- (NSFont *)font;
- (NSTabViewType)tabViewType;
- (NSArray *)tabViewItems;
- (BOOL)allowsTruncatedLabels;
- (NSSize)minimumSize;
- (BOOL)drawsBackground;
- (NSControlTint)controlTint;
- (NSControlSize)controlSize;



- (void)setFont:(NSFont *)font;
- (void)setTabViewType:(NSTabViewType)tabViewType;
- (void)setAllowsTruncatedLabels:(BOOL)allowTruncatedLabels;
- (void)setDrawsBackground:(BOOL)flag;
- (void)setControlTint:(NSControlTint)controlTint;
- (void)setControlSize:(NSControlSize)controlSize;



- (void)addTabViewItem:(NSTabViewItem *)tabViewItem;
- (void)insertTabViewItem:(NSTabViewItem *)tabViewItem atIndex:(NSInteger)index;
- (void)removeTabViewItem:(NSTabViewItem *)tabViewItem;



- (void)setDelegate:(id)anObject;
- (id)delegate;



- (NSTabViewItem *)tabViewItemAtPoint:(NSPoint)point;



- (NSRect)contentRect;



- (NSInteger)numberOfTabViewItems;
- (NSInteger)indexOfTabViewItem:(NSTabViewItem *)tabViewItem;
- (NSTabViewItem *)tabViewItemAtIndex:(NSInteger)index;
- (NSInteger)indexOfTabViewItemWithIdentifier:(id)identifier;

@end





@interface NSObject(NSTabViewDelegate)
- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem;
- (void)tabView:(NSTabView *)tabView willSelectTabViewItem:(NSTabViewItem *)tabViewItem;
- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem;
- (void)tabViewDidChangeNumberOfTabViewItems:(NSTabView *)TabView;
@end
# 125 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTabViewItem.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSTabViewItem.h" 3
@class NSColor, NSTabView, NSView;

enum {
    NSSelectedTab = 0,
    NSBackgroundTab = 1,
    NSPressedTab = 2
};
typedef NSUInteger NSTabState;

@interface NSTabViewItem : NSObject <NSCoding>
{
    @private



    id _identifier;
    NSString *_label;
    NSView *_view;
    NSView *_initialFirstResponder;
    NSColor *_color;
    NSTabView *_tabView;



    NSTabState _tabState;
    NSView *_lastKeyView;

    struct __tviFlags {
 unsigned int hasCustomColor:1;
 unsigned int labelSizeIsValid:1;
 unsigned int autoGeneratedIFR:1;
 unsigned int isTabDisabled:1;
 unsigned int RESERVED:28;
    } _tviFlags;

    NSSize _labelSize;
    NSRect _tabRect;
    NSToolTipTag _tabToolTipTag;
    id _auxiliaryStorage;
}



- (id)initWithIdentifier:(id)identifier;



- (id)identifier;
- (id)view;
- (id)initialFirstResponder;
- (NSString *)label;
- (NSColor *)color;
- (NSTabState)tabState;
- (NSTabView *)tabView;



- (void)setIdentifier:(id)identifier;
- (void)setLabel:(NSString *)label;
- (void)setColor:(NSColor *)color;
- (void)setView:(NSView *)view;
- (void)setInitialFirstResponder:(NSView *)view;





- (void)drawLabel:(BOOL)shouldTruncateLabel inRect:(NSRect)labelRect;



- (NSSize)sizeOfLabel:(BOOL)computeMin;

@end
# 126 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuView.h" 1 3
# 16 "/System/Library/Frameworks/AppKit.framework/Headers/NSMenuView.h" 3
@class NSScreen;

@interface NSMenuView : NSView {

    @private
    NSMenu *_menu;
    NSMutableArray *_cells;
    CGFloat _stateImageWidth;
    CGFloat _imageAndTitleWidth;
    CGFloat _keyEquivalentWidth;
    CGFloat *_extents;
    unsigned _extentsCapacity;
    int _highlightedItemIndex;
    void *_submenuPopupTimer;
    NSMenuView *_attachedMenuView;
    CGFloat _scrollArrowHeight;
    CGFloat _maxWinHeight;
    NSFont *_font;
    NSSize _minSize;
    CGFloat _horizontalEdgePad;
    void *trackingState;
    id _scrollingView;
    struct __mvFlags {
        unsigned int needsSizing:1;
        unsigned int releasingWindow:1;
        unsigned int isHorizontal:1;
        unsigned int disableSizing:1;
        unsigned int attachedSubmenuWhileMouseWasUp:1;
        unsigned int needsToCreateCells:1;
        unsigned int allowsTearOffs:1;
        unsigned int isTearOff:1;
        unsigned int keyEquivGlyphWidth:16;
        unsigned int disableResize:1;
        unsigned int savedHODState:1;
        unsigned int drawCenter:1;
        unsigned int RESERVED:5;
    } _mvFlags;
}

+ (CGFloat)menuBarHeight;

- (id)initWithFrame:(NSRect)frame;
- (id)initAsTearOff;

- (void)setMenu:(NSMenu *)menu;
- (NSMenu *)menu;

- (void)itemChanged:(NSNotification *)notification;
- (void)itemAdded:(NSNotification *)notification;
- (void)itemRemoved:(NSNotification *)notification;

- (void)update;

- (void)setHorizontal:(BOOL)flag;
- (BOOL)isHorizontal;

- (void)setFont:(NSFont *)font;
- (NSFont *)font;

- (NSRect)innerRect;
- (NSRect)rectOfItemAtIndex:(NSInteger)index;
- (NSInteger)indexOfItemAtPoint:(NSPoint)point;
- (void)setNeedsDisplayForItemAtIndex:(NSInteger)index;

- (void)setHighlightedItemIndex:(NSInteger)index;
- (NSInteger)highlightedItemIndex;

- (CGFloat)stateImageOffset;
- (CGFloat)stateImageWidth;
- (CGFloat)imageAndTitleOffset;
- (CGFloat)imageAndTitleWidth;
- (CGFloat)keyEquivalentOffset;
- (CGFloat)keyEquivalentWidth;

- (void)setMenuItemCell:(NSMenuItemCell *)cell forItemAtIndex:(NSInteger)index;
- (NSMenuItemCell *)menuItemCellForItemAtIndex:(NSInteger)index;

- (NSMenuView *)attachedMenuView;

- (void)setNeedsSizing:(BOOL)flag;
- (BOOL)needsSizing;

- (void)sizeToFit;
- (NSMenu *)attachedMenu;
- (BOOL)isAttached;
- (BOOL)isTornOff;
- (NSPoint)locationForSubmenu:(NSMenu *)aSubmenu;

- (void)setWindowFrameForAttachingToRect:(NSRect)screenRect onScreen:(NSScreen *)screen preferredEdge:(NSRectEdge)edge popUpSelectedItem:(NSInteger)selectedItemIndex;
- (void)detachSubmenu;
- (void)attachSubmenuForItemAtIndex:(NSInteger)index;

- (void)performActionWithHighlightingForItemAtIndex:(NSInteger)index;

- (BOOL)trackWithEvent:(NSEvent *)event;

- (CGFloat)horizontalEdgePadding;
- (void)setHorizontalEdgePadding:(CGFloat)pad;


@end
# 127 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPopUpButtonCell.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSPopUpButtonCell.h" 3
@class NSMenu;

enum {
    NSPopUpNoArrow = 0,
    NSPopUpArrowAtCenter = 1,
    NSPopUpArrowAtBottom = 2
};
typedef NSUInteger NSPopUpArrowPosition;

@interface NSPopUpButtonCell : NSMenuItemCell {

    @private
    NSMenu *_menu;
    int _selectedIndex;
    struct __pbcFlags {
        unsigned int pullsDown:1;
        unsigned int preferredEdge:3;
        unsigned int menuIsAttached:1;
        unsigned int usesItemFromMenu:1;
        unsigned int altersStateOfSelectedItem:1;
        unsigned int decoding:1;
        unsigned int arrowPosition:2;
        unsigned int ignoreMenuLayout:1;
        unsigned int drawing:1;
        unsigned int RESERVED:20;
    } _pbcFlags;



}

- (id)initTextCell:(NSString *)stringValue pullsDown:(BOOL)pullDown;


- (void)setMenu:(NSMenu *)menu;
- (NSMenu *)menu;



- (void)setPullsDown:(BOOL)flag;
- (BOOL)pullsDown;

- (void)setAutoenablesItems:(BOOL)flag;
- (BOOL)autoenablesItems;

- (void)setPreferredEdge:(NSRectEdge)edge;
- (NSRectEdge)preferredEdge;


- (void)setUsesItemFromMenu:(BOOL)flag;
- (BOOL)usesItemFromMenu;


- (void)setAltersStateOfSelectedItem:(BOOL)flag;
- (BOOL)altersStateOfSelectedItem;



- (void)addItemWithTitle:(NSString *)title;
- (void)addItemsWithTitles:(NSArray *)itemTitles;
- (void)insertItemWithTitle:(NSString *)title atIndex:(NSInteger)index;

- (void)removeItemWithTitle:(NSString *)title;
- (void)removeItemAtIndex:(NSInteger)index;
- (void)removeAllItems;



- (NSArray *)itemArray;
- (NSInteger)numberOfItems;

- (NSInteger)indexOfItem:(NSMenuItem *)item;
- (NSInteger)indexOfItemWithTitle:(NSString *)title;
- (NSInteger)indexOfItemWithTag:(NSInteger)tag;
- (NSInteger)indexOfItemWithRepresentedObject:(id)obj;
- (NSInteger)indexOfItemWithTarget:(id)target andAction:(SEL)actionSelector;

- (NSMenuItem *)itemAtIndex:(NSInteger)index;
- (NSMenuItem *)itemWithTitle:(NSString *)title;
- (NSMenuItem *)lastItem;



- (void)selectItem:(NSMenuItem *)item;
- (void)selectItemAtIndex:(NSInteger)index;
- (void)selectItemWithTitle:(NSString *)title;

- (BOOL)selectItemWithTag:(NSInteger)tag;

- (void)setTitle:(NSString *)aString;

- (NSMenuItem *)selectedItem;
- (NSInteger)indexOfSelectedItem;
- (void)synchronizeTitleAndSelectedItem;



- (NSString *)itemTitleAtIndex:(NSInteger)index;
- (NSArray *)itemTitles;
- (NSString *)titleOfSelectedItem;

- (void)attachPopUpWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
- (void)dismissPopUp;
- (void)performClickWithFrame:(NSRect)frame inView:(NSView *)controlView;


- (NSPopUpArrowPosition)arrowPosition;
- (void)setArrowPosition:(NSPopUpArrowPosition)position;


- (id)objectValue;
- (void)setObjectValue:(id)obj;

@end



extern "C" NSString *NSPopUpButtonCellWillPopUpNotification;
# 129 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSAffineTransform.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSAffineTransform.h" 3
@class NSBezierPath;

@interface NSAffineTransform (NSAppKitAdditons)

- (NSBezierPath *)transformBezierPath:(NSBezierPath *)aPath;


- (void)set;
- (void)concat;
@end
# 130 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSBezierPath.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSBezierPath.h" 3
@class NSAffineTransform;

enum {
    NSButtLineCapStyle = 0,
    NSRoundLineCapStyle = 1,
    NSSquareLineCapStyle = 2
};
typedef NSUInteger NSLineCapStyle;

enum {
    NSMiterLineJoinStyle = 0,
    NSRoundLineJoinStyle = 1,
    NSBevelLineJoinStyle = 2
};
typedef NSUInteger NSLineJoinStyle;

enum {
    NSNonZeroWindingRule = 0,
    NSEvenOddWindingRule = 1
};
typedef NSUInteger NSWindingRule;

enum {
    NSMoveToBezierPathElement,
    NSLineToBezierPathElement,
    NSCurveToBezierPathElement,
    NSClosePathBezierPathElement
};
typedef NSUInteger NSBezierPathElement;

@interface NSBezierPath : NSObject <NSCopying, NSCoding>
{
    @private
    int _state;
    NSInteger _segmentCount;
    NSInteger _segmentMax;
    struct PATHSEGMENT *_head;
    NSInteger _lastSubpathIndex;
    NSInteger _elementCount;
    CGFloat _lineWidth;
    NSRect _bounds;
    NSRect _controlPointBounds;
    unsigned char _flags;
    CGFloat _miterLimit;
    CGFloat _flatness;
    CGFloat *_dashedLinePattern;
    NSUInteger _dashedLineCount;
    CGFloat _dashedLinePhase;
}



+ (NSBezierPath *)bezierPath;
+ (NSBezierPath *)bezierPathWithRect:(NSRect)rect;
+ (NSBezierPath *)bezierPathWithOvalInRect:(NSRect)rect;

+ (NSBezierPath *)bezierPathWithRoundedRect:(NSRect)rect xRadius:(CGFloat)xRadius yRadius:(CGFloat)yRadius;




+ (void)fillRect:(NSRect)rect;
+ (void)strokeRect:(NSRect)rect;
+ (void)clipRect:(NSRect)rect;
+ (void)strokeLineFromPoint:(NSPoint)point1 toPoint:(NSPoint)point2;
+ (void)drawPackedGlyphs:(const char *)packedGlyphs atPoint:(NSPoint)point;



+ (void)setDefaultMiterLimit:(CGFloat)limit;
+ (CGFloat)defaultMiterLimit;
+ (void)setDefaultFlatness:(CGFloat)flatness;
+ (CGFloat)defaultFlatness;

+ (void)setDefaultWindingRule:(NSWindingRule)windingRule;
+ (NSWindingRule)defaultWindingRule;
+ (void)setDefaultLineCapStyle:(NSLineCapStyle)lineCapStyle;
+ (NSLineCapStyle)defaultLineCapStyle;
+ (void)setDefaultLineJoinStyle:(NSLineJoinStyle)lineJoinStyle;
+ (NSLineJoinStyle)defaultLineJoinStyle;
+ (void)setDefaultLineWidth:(CGFloat)lineWidth;
+ (CGFloat)defaultLineWidth;



- (void)moveToPoint:(NSPoint)point;
- (void)lineToPoint:(NSPoint)point;
- (void)curveToPoint:(NSPoint)endPoint
       controlPoint1:(NSPoint)controlPoint1
       controlPoint2:(NSPoint)controlPoint2;
- (void)closePath;

- (void)removeAllPoints;



- (void)relativeMoveToPoint:(NSPoint)point;
- (void)relativeLineToPoint:(NSPoint)point;
- (void)relativeCurveToPoint:(NSPoint)endPoint
        controlPoint1:(NSPoint)controlPoint1
        controlPoint2:(NSPoint)controlPoint2;



- (CGFloat)lineWidth;
- (void)setLineWidth:(CGFloat)lineWidth;
- (NSLineCapStyle)lineCapStyle;
- (void)setLineCapStyle:(NSLineCapStyle)lineCapStyle;
- (NSLineJoinStyle)lineJoinStyle;
- (void)setLineJoinStyle:(NSLineJoinStyle)lineJoinStyle;
- (NSWindingRule)windingRule;
- (void)setWindingRule:(NSWindingRule)windingRule;
- (CGFloat)miterLimit;
- (void)setMiterLimit:(CGFloat)miterLimit;
- (CGFloat)flatness;
- (void)setFlatness:(CGFloat)flatness;
- (void)getLineDash:(CGFloat *)pattern count:(NSInteger *)count phase:(CGFloat *)phase;
- (void)setLineDash:(const CGFloat *)pattern count:(NSInteger)count phase:(CGFloat)phase;



- (void)stroke;
- (void)fill;
- (void)addClip;
- (void)setClip;



- (NSBezierPath *)bezierPathByFlatteningPath;
- (NSBezierPath *)bezierPathByReversingPath;



- (void)transformUsingAffineTransform:(NSAffineTransform *)transform;



- (BOOL)isEmpty;
- (NSPoint)currentPoint;
- (NSRect)controlPointBounds;
- (NSRect)bounds;



- (NSInteger)elementCount;





- (NSBezierPathElement)elementAtIndex:(NSInteger)index
       associatedPoints:(NSPointArray)points;

- (NSBezierPathElement)elementAtIndex:(NSInteger)index;
- (void)setAssociatedPoints:(NSPointArray)points atIndex:(NSInteger)index;



- (void)appendBezierPath:(NSBezierPath *)path;
- (void)appendBezierPathWithRect:(NSRect)rect;
- (void)appendBezierPathWithPoints:(NSPointArray)points count:(NSInteger)count;
- (void)appendBezierPathWithOvalInRect:(NSRect)rect;
- (void)appendBezierPathWithArcWithCenter:(NSPoint)center radius:(CGFloat)radius
          startAngle:(CGFloat)startAngle
     endAngle:(CGFloat)endAngle
    clockwise:(BOOL)clockwise;

- (void)appendBezierPathWithArcWithCenter:(NSPoint)center radius:(CGFloat)radius
          startAngle:(CGFloat)startAngle
     endAngle:(CGFloat)endAngle;
- (void)appendBezierPathWithArcFromPoint:(NSPoint)point1
     toPoint:(NSPoint)point2
      radius:(CGFloat)radius;
- (void)appendBezierPathWithGlyph:(NSGlyph)glyph inFont:(NSFont *)font;
- (void)appendBezierPathWithGlyphs:(NSGlyph *)glyphs count:(NSInteger)count
       inFont:(NSFont *)font;
- (void)appendBezierPathWithPackedGlyphs:(const char *)packedGlyphs;


- (void)appendBezierPathWithRoundedRect:(NSRect)rect xRadius:(CGFloat)xRadius yRadius:(CGFloat)yRadius;



- (BOOL)containsPoint:(NSPoint)point;


- (BOOL)cachesBezierPath;
- (void)setCachesBezierPath:(BOOL)flag;

@end
# 131 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPICTImageRep.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSPICTImageRep.h" 3
@interface NSPICTImageRep : NSImageRep
{

    NSPoint _pictOrigin;
    NSData* _pictData;
    unsigned int _reserved1;
    unsigned int _reserved2;
}

+ (id)imageRepWithData:(NSData*)pictData;
- (id)initWithData:(NSData*)pictData;

- (NSData*) PICTRepresentation;
- (NSRect) boundingBox;

@end
# 132 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSStatusBar.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSStatusBar.h" 3
@class NSColor;
@class NSFont;
@class NSStatusItem;
@class NSMutableArray;




@interface NSStatusBar : NSObject
{
 @private
    NSMutableArray* _actions;
    void *_fReserved1;
    void *_fReserved2;
    void *_fReserved3;
}

+ (NSStatusBar*) systemStatusBar;

- (NSStatusItem*) statusItemWithLength:(CGFloat)length;
- (void) removeStatusItem:(NSStatusItem*)item;

- (BOOL) isVertical;
- (CGFloat) thickness;

@end
# 133 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h" 3
@class NSAttributedString;
@class NSImage;
@class NSMenu;
@class NSStatusBar;
@class NSString;
@class NSView;
@class NSWindow;

typedef struct {
    unsigned int customView:1;
    unsigned int highlightMode:1;
    unsigned int hasAlternateImage:1;
    unsigned int reserved:29;
} _SBIFlags;


@interface NSStatusItem : NSObject
{
 @private
    NSStatusBar* _fStatusBar;
    CGFloat _fLength;
    NSWindow* _fWindow;
    NSView* _fView;
    int _fPriority;
    _SBIFlags _fFlags;
    id _fReserved1;
    id _fReserved2;
    id _fReserved3;
    id _fReserved4;
}

- (NSStatusBar* )statusBar;

- (CGFloat)length;
- (void)setLength:(CGFloat)length;

@end

@interface NSStatusItem (NSStatusItemCommon)

- (SEL)action;
- (void)setAction:(SEL)action;


- (SEL)doubleAction;
- (void)setDoubleAction:(SEL)action;


- (id)target;
- (void)setTarget:(id)target;

- (NSString* )title;
- (void)setTitle:(NSString*)title;

- (NSAttributedString* )attributedTitle;
- (void)setAttributedTitle:(NSAttributedString*)title;

- (NSImage* )image;
- (void)setImage:(NSImage*)image;


- (NSImage *)alternateImage;
- (void)setAlternateImage:(NSImage*)image;


- (NSMenu* )menu;
- (void)setMenu:(NSMenu*)menu;

- (BOOL)isEnabled;
- (void)setEnabled:(BOOL)enabled;

- (NSString* )toolTip;
- (void)setToolTip:(NSString*)toolTip;

- (void)setHighlightMode:(BOOL)highlightMode;
- (BOOL)highlightMode;

- (NSInteger)sendActionOn:(NSInteger)mask;


- (void)popUpStatusItemMenu:(NSMenu*)menu;
- (void)drawStatusBarBackgroundInRect:(NSRect)rect withHighlight:(BOOL)highlight;


@end

@interface NSStatusItem (NSStatusItemView)

- (NSView* )view;
- (void)setView:(NSView*)view;

@end
# 134 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSound.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSSound.h" 3
@class NSData, NSURL, NSPasteboard;

extern "C" NSString * const NSSoundPboardType;

@interface NSSound : NSObject <NSCopying, NSCoding> {
@private
    id _delegate;
    void *_info;
    void *_reserved[7];
}

+ (id)soundNamed:(NSString *)name;


- (id)initWithContentsOfURL:(NSURL *)url byReference:(BOOL)byRef;


- (id)initWithContentsOfFile:(NSString *)path byReference:(BOOL)byRef;

- (id)initWithData:(NSData *)data;




- (BOOL)setName:(NSString *)string;
- (NSString *)name;


+ (BOOL)canInitWithPasteboard:(NSPasteboard *)pasteboard;

+ (NSArray*)soundUnfilteredTypes;

- (id)initWithPasteboard:(NSPasteboard *)pasteboard;
- (void)writeToPasteboard:(NSPasteboard *)pasteboard;


- (BOOL)play;
- (BOOL)pause;
- (BOOL)resume;
- (BOOL)stop;
- (BOOL)isPlaying;

- (id)delegate;
- (void)setDelegate:(id)aDelegate;




- (NSTimeInterval)duration;




- (void)setVolume:(float)volume;
- (float)volume;





- (NSTimeInterval)currentTime;






- (void)setCurrentTime:(NSTimeInterval)seconds;







- (void)setLoops:(BOOL)val;



- (BOOL)loops;



@end

@interface NSSound(NSDeprecated)



+ (NSArray *)soundUnfilteredFileTypes;
+ (NSArray *)soundUnfilteredPasteboardTypes;

@end

@interface NSObject (NSSoundDelegateMethods)

- (void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool;

@end

@interface NSBundle (NSBundleSoundExtensions)

- (NSString *)pathForSoundResource:(NSString *)name;


@end
# 135 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMovie.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSMovie.h" 3
@class NSArray, NSPasteboard, NSURL;

@interface NSMovie : NSObject <NSCopying, NSCoding> {
  @private
    void* _movie;
    NSURL* _url;
    struct {
 int dispose:1;
 int reserved:31;
    } _movieFlags;
    long _reserved1;
    long _reserved2;
}

- (id) initWithMovie:(void* )movie;
- (id) initWithURL:(NSURL*)url byReference:(BOOL)byRef;
- (id) initWithPasteboard:(NSPasteboard*)pasteboard;

- (void* )QTMovie;
- (NSURL*)URL;

+ (NSArray*) movieUnfilteredFileTypes;
+ (NSArray*) movieUnfilteredPasteboardTypes;
+ (BOOL) canInitWithPasteboard:(NSPasteboard*)pasteboard;

@end
# 136 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSMovieView.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSMovieView.h" 3
@class NSMovie;

enum {
    NSQTMovieNormalPlayback,
    NSQTMovieLoopingPlayback,
    NSQTMovieLoopingBackAndForthPlayback
};
typedef NSUInteger NSQTMovieLoopMode;

typedef struct __MVFlags {
    unsigned int editable:1;
    NSQTMovieLoopMode loopMode:3;
    unsigned int playsEveryFrame:1;
    unsigned int playsSelectionOnly:1;
    unsigned int controllerVisible:1;
    unsigned int reserved:25;
} _MVFlags;

@interface NSMovieView : NSView <NSUserInterfaceValidations>
{
  @protected
    NSMovie* _fMovie;
    float _fRate;
    float _fVolume;
    _MVFlags _fFlags;

    void* _fAuxData;
    unsigned long _fReserved1;
    unsigned long _fReserved2;
    unsigned long _fReserved3;
}

- (void) setMovie:(NSMovie*)movie;
- (NSMovie*) movie;

- (void* ) movieController;
- (NSRect) movieRect;



- (void)start:(id)sender;
- (void)stop:(id)sender;
- (BOOL)isPlaying;

- (void)gotoPosterFrame:(id)sender;
- (void)gotoBeginning:(id)sender;
- (void)gotoEnd:(id)sender;
- (void)stepForward:(id)sender;
- (void)stepBack:(id)sender;

- (void)setRate:(float)rate;
- (float)rate;



- (void)setVolume:(float)volume;
- (float)volume;
- (void)setMuted:(BOOL)mute;
- (BOOL)isMuted;



- (void)setLoopMode:(NSQTMovieLoopMode)mode;
- (NSQTMovieLoopMode)loopMode;
- (void)setPlaysSelectionOnly:(BOOL)flag;
- (BOOL)playsSelectionOnly;
- (void)setPlaysEveryFrame:(BOOL)flag;
- (BOOL)playsEveryFrame;



- (void)showController:(BOOL)show adjustingSize:(BOOL)adjustSize;
- (BOOL)isControllerVisible;



- (void)resizeWithMagnification:(CGFloat)magnification;
- (NSSize)sizeForMagnification:(CGFloat)magnification;



- (void)setEditable:(BOOL)editable;
- (BOOL)isEditable;

- (void)cut:(id)sender;
- (void)copy:(id)sender;
- (void)paste:(id)sender;

- (void)delete:(id)sender;

- (void)selectAll:(id)sender;

- (void)clear:(id)sender;

@end
# 137 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPDFImageRep.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSPDFImageRep.h" 3
@interface NSPDFImageRep : NSImageRep
{
  @private
    NSData* _pdfData;
    int _reserved1;
    int _reserved2;

    id _private;
}

+ (id)imageRepWithData:(NSData*)pdfData;
- (id)initWithData:(NSData*)pdfData;

- (NSData*)PDFRepresentation;
- (NSRect)bounds;

- (void) setCurrentPage:(NSInteger)page;
- (NSInteger) currentPage;
- (NSInteger) pageCount;

@end
# 138 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSQuickDrawView.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSQuickDrawView.h" 3
@interface NSQuickDrawView : NSView
{
@private
    void* _qdPort;
    void* _savePort;
    BOOL _synchToView;
}

- (void*) qdPort;

@end
# 139 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDrawer.h" 1 3
# 16 "/System/Library/Frameworks/AppKit.framework/Headers/NSDrawer.h" 3
@class NSArray;
@class NSLock;
@class NSView;
@class NSWindow;
@class NSNotification;

enum {
    NSDrawerClosedState = 0,
    NSDrawerOpeningState = 1,
    NSDrawerOpenState = 2,
    NSDrawerClosingState = 3
};
typedef NSUInteger NSDrawerState;

@interface NSDrawer : NSResponder
{

    NSDrawerState _drawerState;
    NSDrawerState _drawerNextState;
    NSRectEdge _drawerEdge;
    NSRectEdge _drawerNextEdge;
    NSRectEdge _drawerPreferredEdge;
    float _drawerPercent;
    float _drawerPercentSaved;
    CGFloat _drawerLeadingOffset;
    CGFloat _drawerTrailingOffset;
    NSLock *_drawerLock;
    NSWindow *_drawerWindow;
    NSWindow *_drawerParentWindow;
    NSWindow *_drawerNextParentWindow;
    NSString *_drawerSaveName;
    CFAbsoluteTime _drawerStartTime;
    CFTimeInterval _drawerTotalTime;
    CFRunLoopRef _drawerLoop;
    CFRunLoopTimerRef _drawerTimer;
    id _drawerDelegate;
    unsigned int _drawerFlags;
    CFRunLoopObserverRef _drawerObserver;
}

- (id)initWithContentSize:(NSSize)contentSize preferredEdge:(NSRectEdge)edge;

- (void)setParentWindow:(NSWindow *)parent;
- (NSWindow *)parentWindow;
- (void)setContentView:(NSView *)aView;
- (NSView *)contentView;
- (void)setPreferredEdge:(NSRectEdge)edge;
- (NSRectEdge)preferredEdge;
- (void)setDelegate:(id)anObject;
- (id)delegate;

- (void)open;
- (void)openOnEdge:(NSRectEdge)edge;
- (void)close;

- (void)open:(id)sender;
- (void)close:(id)sender;
- (void)toggle:(id)sender;

- (NSInteger)state;
- (NSRectEdge)edge;

- (void)setContentSize:(NSSize)size;
- (NSSize)contentSize;
- (void)setMinContentSize:(NSSize)size;
- (NSSize)minContentSize;
- (void)setMaxContentSize:(NSSize)size;
- (NSSize)maxContentSize;

- (void)setLeadingOffset:(CGFloat)offset;
- (CGFloat)leadingOffset;
- (void)setTrailingOffset:(CGFloat)offset;
- (CGFloat)trailingOffset;

@end

@interface NSWindow(Drawers)

- (NSArray *)drawers;

@end

@interface NSObject(NSDrawerNotifications)
- (void)drawerWillOpen:(NSNotification *)notification;
- (void)drawerDidOpen:(NSNotification *)notification;
- (void)drawerWillClose:(NSNotification *)notification;
- (void)drawerDidClose:(NSNotification *)notification;
@end

@interface NSObject(NSDrawerDelegate)
- (BOOL)drawerShouldOpen:(NSDrawer *)sender;
- (BOOL)drawerShouldClose:(NSDrawer *)sender;
- (NSSize)drawerWillResizeContents:(NSDrawer *)sender toSize:(NSSize)contentSize;
@end


extern "C" NSString *NSDrawerWillOpenNotification;
extern "C" NSString *NSDrawerDidOpenNotification;
extern "C" NSString *NSDrawerWillCloseNotification;
extern "C" NSString *NSDrawerDidCloseNotification;
# 140 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 1 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 3
# 1 "/System/Library/Frameworks/OpenGL.framework/Headers/gl.h" 1 3




extern "C" {
# 40 "/System/Library/Frameworks/OpenGL.framework/Headers/gl.h" 3
typedef unsigned int GLenum;
typedef unsigned char GLboolean;
typedef unsigned int GLbitfield;
typedef signed char GLbyte;
typedef short GLshort;
typedef int GLint;
typedef int GLsizei;
typedef unsigned char GLubyte;
typedef unsigned short GLushort;
typedef unsigned int GLuint;
typedef float GLfloat;
typedef float GLclampf;
typedef double GLdouble;
typedef double GLclampd;
typedef void GLvoid;

typedef long GLintptr;
typedef long GLsizeiptr;



    typedef char GLchar;



# 1 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 1 3
# 9 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern "C" {
# 166 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
typedef char GLcharARB;
typedef void *GLhandleARB;



typedef long GLintptrARB;
typedef long GLsizeiptrARB;
# 2608 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glActiveTextureARB (GLenum);
extern void glClientActiveTextureARB (GLenum);
extern void glMultiTexCoord1dARB (GLenum, GLdouble);
extern void glMultiTexCoord1dvARB (GLenum, const GLdouble *);
extern void glMultiTexCoord1fARB (GLenum, GLfloat);
extern void glMultiTexCoord1fvARB (GLenum, const GLfloat *);
extern void glMultiTexCoord1iARB (GLenum, GLint);
extern void glMultiTexCoord1ivARB (GLenum, const GLint *);
extern void glMultiTexCoord1sARB (GLenum, GLshort);
extern void glMultiTexCoord1svARB (GLenum, const GLshort *);
extern void glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble);
extern void glMultiTexCoord2dvARB (GLenum, const GLdouble *);
extern void glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat);
extern void glMultiTexCoord2fvARB (GLenum, const GLfloat *);
extern void glMultiTexCoord2iARB (GLenum, GLint, GLint);
extern void glMultiTexCoord2ivARB (GLenum, const GLint *);
extern void glMultiTexCoord2sARB (GLenum, GLshort, GLshort);
extern void glMultiTexCoord2svARB (GLenum, const GLshort *);
extern void glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble);
extern void glMultiTexCoord3dvARB (GLenum, const GLdouble *);
extern void glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat);
extern void glMultiTexCoord3fvARB (GLenum, const GLfloat *);
extern void glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint);
extern void glMultiTexCoord3ivARB (GLenum, const GLint *);
extern void glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort);
extern void glMultiTexCoord3svARB (GLenum, const GLshort *);
extern void glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
extern void glMultiTexCoord4dvARB (GLenum, const GLdouble *);
extern void glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
extern void glMultiTexCoord4fvARB (GLenum, const GLfloat *);
extern void glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint);
extern void glMultiTexCoord4ivARB (GLenum, const GLint *);
extern void glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort);
extern void glMultiTexCoord4svARB (GLenum, const GLshort *);
# 2652 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glLoadTransposeMatrixfARB (const GLfloat *);
extern void glLoadTransposeMatrixdARB (const GLdouble *);
extern void glMultTransposeMatrixfARB (const GLfloat *);
extern void glMultTransposeMatrixdARB (const GLdouble *);
# 2664 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glSampleCoverageARB (GLclampf, GLboolean);
extern void glSamplePassARB (GLenum);
# 2679 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
extern void glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
extern void glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *);
extern void glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
extern void glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
extern void glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *);
extern void glGetCompressedTexImageARB (GLenum, GLint, GLvoid *);
# 2702 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glWeightbvARB(GLint, const GLbyte *);
extern void glWeightsvARB(GLint, const GLshort *);
extern void glWeightivARB(GLint, const GLint *);
extern void glWeightfvARB(GLint, const GLfloat *);
extern void glWeightdvARB(GLint, const GLdouble *);
extern void glWeightubvARB(GLint, const GLubyte *);
extern void glWeightusvARB(GLint, const GLushort *);
extern void glWeightuivARB(GLint, const GLuint *);
extern void glWeightPointerARB(GLint, GLenum, GLsizei, const GLvoid *);
extern void glVertexBlendARB(GLint);
# 2734 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glWindowPos2dARB (GLdouble, GLdouble);
extern void glWindowPos2dvARB (const GLdouble *);
extern void glWindowPos2fARB (GLfloat, GLfloat);
extern void glWindowPos2fvARB (const GLfloat *);
extern void glWindowPos2iARB (GLint, GLint);
extern void glWindowPos2ivARB (const GLint *);
extern void glWindowPos2sARB (GLshort, GLshort);
extern void glWindowPos2svARB (const GLshort *);
extern void glWindowPos3dARB (GLdouble, GLdouble, GLdouble);
extern void glWindowPos3dvARB (const GLdouble *);
extern void glWindowPos3fARB (GLfloat, GLfloat, GLfloat);
extern void glWindowPos3fvARB (const GLfloat *);
extern void glWindowPos3iARB (GLint, GLint, GLint);
extern void glWindowPos3ivARB (const GLint *);
extern void glWindowPos3sARB (GLshort, GLshort, GLshort);
extern void glWindowPos3svARB (const GLshort *);
# 2764 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glGenQueriesARB(GLsizei n, GLuint *ids);
extern void glDeleteQueriesARB(GLsizei n, const GLuint *ids);
extern GLboolean glIsQueryARB(GLuint id);
extern void glBeginQueryARB(GLenum target, GLuint id);
extern void glEndQueryARB(GLenum target);
extern void glGetQueryivARB(GLenum target, GLenum pname, GLint *params);
extern void glGetQueryObjectivARB(GLuint id, GLenum pname, GLint *params);
extern void glGetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params);
# 2780 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glPointParameterfARB(GLenum pname, GLfloat param);
extern void glPointParameterfvARB(GLenum pname, const GLfloat *params);
# 2816 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBindProgramARB(GLenum target, GLuint program);
extern void glDeleteProgramsARB(GLsizei n, const GLuint *programs);
extern void glGenProgramsARB(GLsizei n, GLuint *programs);
extern GLboolean glIsProgramARB(GLuint program);

extern void glProgramEnvParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void glProgramEnvParameter4dvARB(GLenum target, GLuint index, const GLdouble *params);
extern void glProgramEnvParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void glProgramEnvParameter4fvARB(GLenum target, GLuint index, const GLfloat *params);
extern void glProgramLocalParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void glProgramLocalParameter4dvARB(GLenum target, GLuint index, const GLdouble *params);
extern void glProgramLocalParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void glProgramLocalParameter4fvARB(GLenum target, GLuint index, const GLfloat *params);

extern void glGetProgramEnvParameterdvARB(GLenum target, GLuint index, GLdouble *params);
extern void glGetProgramEnvParameterfvARB(GLenum target, GLuint index, GLfloat *params);

extern void glProgramEnvParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat *params);
extern void glProgramLocalParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat *params);


extern void glGetProgramLocalParameterdvARB(GLenum target, GLuint index, GLdouble *params);
extern void glGetProgramLocalParameterfvARB(GLenum target, GLuint index, GLfloat *params);

extern void glProgramStringARB(GLenum target, GLenum format, GLsizei len, const GLvoid *string);
extern void glGetProgramStringARB(GLenum target, GLenum pname, GLvoid *string);

extern void glGetProgramivARB(GLenum target, GLenum pname, GLint *params);
# 2899 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glVertexAttrib1dARB(GLuint index, GLdouble x);
extern void glVertexAttrib1dvARB(GLuint index, const GLdouble *v);
extern void glVertexAttrib1fARB(GLuint index, GLfloat x);
extern void glVertexAttrib1fvARB(GLuint index, const GLfloat *v);
extern void glVertexAttrib1sARB(GLuint index, GLshort x);
extern void glVertexAttrib1svARB(GLuint index, const GLshort *v);
extern void glVertexAttrib2dARB(GLuint index, GLdouble x, GLdouble y);
extern void glVertexAttrib2dvARB(GLuint index, const GLdouble *v);
extern void glVertexAttrib2fARB(GLuint index, GLfloat x, GLfloat y);
extern void glVertexAttrib2fvARB(GLuint index, const GLfloat *v);
extern void glVertexAttrib2sARB(GLuint index, GLshort x, GLshort y);
extern void glVertexAttrib2svARB(GLuint index, const GLshort *v);
extern void glVertexAttrib3dARB(GLuint index, GLdouble x, GLdouble y, GLdouble z);
extern void glVertexAttrib3dvARB(GLuint index, const GLdouble *v);
extern void glVertexAttrib3fARB(GLuint index, GLfloat x, GLfloat y, GLfloat z);
extern void glVertexAttrib3fvARB(GLuint index, const GLfloat *v);
extern void glVertexAttrib3sARB(GLuint index, GLshort x, GLshort y, GLshort z);
extern void glVertexAttrib3svARB(GLuint index, const GLshort *v);
extern void glVertexAttrib4NbvARB(GLuint index, const GLbyte *v);
extern void glVertexAttrib4NivARB(GLuint index, const GLint *v);
extern void glVertexAttrib4NsvARB(GLuint index, const GLshort *v);
extern void glVertexAttrib4NubARB(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
extern void glVertexAttrib4NubvARB(GLuint index, const GLubyte *v);
extern void glVertexAttrib4NuivARB(GLuint index, const GLuint *v);
extern void glVertexAttrib4NusvARB(GLuint index, const GLushort *v);
extern void glVertexAttrib4bvARB(GLuint index, const GLbyte *v);
extern void glVertexAttrib4dARB(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void glVertexAttrib4dvARB(GLuint index, const GLdouble *v);
extern void glVertexAttrib4fARB(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void glVertexAttrib4fvARB(GLuint index, const GLfloat *v);
extern void glVertexAttrib4ivARB(GLuint index, const GLint *v);
extern void glVertexAttrib4sARB(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
extern void glVertexAttrib4svARB(GLuint index, const GLshort *v);
extern void glVertexAttrib4ubvARB(GLuint index, const GLubyte *v);
extern void glVertexAttrib4uivARB(GLuint index, const GLuint *v);
extern void glVertexAttrib4usvARB(GLuint index, const GLushort *v);
extern void glVertexAttribPointerARB(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);

extern void glDisableVertexAttribArrayARB(GLuint index);
extern void glEnableVertexAttribArrayARB(GLuint index);

extern void glGetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid **pointer);
extern void glGetVertexAttribdvARB(GLuint index, GLenum pname, GLdouble *params);
extern void glGetVertexAttribfvARB(GLuint index, GLenum pname, GLfloat *params);
extern void glGetVertexAttribivARB(GLuint index, GLenum pname, GLint *params);
# 2990 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glDeleteObjectARB(GLhandleARB obj);
extern GLhandleARB glGetHandleARB(GLenum pname);
extern void glDetachObjectARB(GLhandleARB containerObj, GLhandleARB attachedObj);
extern GLhandleARB glCreateShaderObjectARB(GLenum shaderType);
extern void glShaderSourceARB(GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length);
extern void glCompileShaderARB(GLhandleARB shaderObj);
extern GLhandleARB glCreateProgramObjectARB(void);
extern void glAttachObjectARB(GLhandleARB containerObj, GLhandleARB obj);
extern void glLinkProgramARB(GLhandleARB programObj);
extern void glUseProgramObjectARB(GLhandleARB programObj);
extern void glValidateProgramARB(GLhandleARB programObj);
extern void glUniform1fARB(GLint location, GLfloat v0);
extern void glUniform2fARB(GLint location, GLfloat v0, GLfloat v1);
extern void glUniform3fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
extern void glUniform4fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
extern void glUniform1iARB(GLint location, GLint v0);
extern void glUniform2iARB(GLint location, GLint v0, GLint v1);
extern void glUniform3iARB(GLint location, GLint v0, GLint v1, GLint v2);
extern void glUniform4iARB(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
extern void glUniform1fvARB(GLint location, GLsizei count, const GLfloat *value);
extern void glUniform2fvARB(GLint location, GLsizei count, const GLfloat *value);
extern void glUniform3fvARB(GLint location, GLsizei count, const GLfloat *value);
extern void glUniform4fvARB(GLint location, GLsizei count, const GLfloat *value);
extern void glUniform1ivARB(GLint location, GLsizei count, const GLint *value);
extern void glUniform2ivARB(GLint location, GLsizei count, const GLint *value);
extern void glUniform3ivARB(GLint location, GLsizei count, const GLint *value);
extern void glUniform4ivARB(GLint location, GLsizei count, const GLint *value);
extern void glUniformMatrix2fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix3fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix4fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glGetObjectParameterfvARB(GLhandleARB obj, GLenum pname, GLfloat *params);
extern void glGetObjectParameterivARB(GLhandleARB obj, GLenum pname, GLint *params);
extern void glGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
extern void glGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
extern GLint glGetUniformLocationARB(GLhandleARB programObj, const GLcharARB *name);
extern void glGetActiveUniformARB(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
extern void glGetUniformfvARB(GLhandleARB programObj, GLint location, GLfloat *params);
extern void glGetUniformivARB(GLhandleARB programObj, GLint location, GLint *params);
extern void glGetShaderSourceARB(GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
# 3038 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBindAttribLocationARB(GLhandleARB programObj, GLuint index, const GLcharARB *name);
extern void glGetActiveAttribARB(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
extern GLint glGetAttribLocationARB(GLhandleARB programObj, const GLcharARB *name);
# 3058 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBindBufferARB(GLenum target, GLuint buffer);
extern void glDeleteBuffersARB(GLsizei n, const GLuint *buffers);
extern void glGenBuffersARB(GLsizei n, GLuint *buffers);
extern GLboolean glIsBufferARB(GLuint buffer);
extern void glBufferDataARB(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
extern void glBufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
extern void glGetBufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
extern GLvoid *glMapBufferARB(GLenum target, GLenum access);
extern GLboolean glUnmapBufferARB(GLenum target);
extern void glGetBufferParameterivARB(GLenum target, GLenum pname, GLint *params);
extern void glGetBufferPointervARB(GLenum target, GLenum pname, GLvoid **params);
# 3077 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glDrawBuffersARB(GLsizei n, const GLenum *bufs);







extern void glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf);
# 3237 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBlendEquationEXT (GLenum);
# 3259 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
extern void glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
extern void glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *);
extern void glGetColorTableParameterivEXT (GLenum, GLenum, GLint *);
extern void glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *);
# 3288 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glLockArraysEXT (GLint, GLsizei);
extern void glUnlockArraysEXT (void);
# 3307 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);
# 3357 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte);
extern void glSecondaryColor3bvEXT (const GLbyte *);
extern void glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble);
extern void glSecondaryColor3dvEXT (const GLdouble *);
extern void glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat);
extern void glSecondaryColor3fvEXT (const GLfloat *);
extern void glSecondaryColor3iEXT (GLint, GLint, GLint);
extern void glSecondaryColor3ivEXT (const GLint *);
extern void glSecondaryColor3sEXT (GLshort, GLshort, GLshort);
extern void glSecondaryColor3svEXT (const GLshort *);
extern void glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte);
extern void glSecondaryColor3ubvEXT (const GLubyte *);
extern void glSecondaryColor3uiEXT (GLuint, GLuint, GLuint);
extern void glSecondaryColor3uivEXT (const GLuint *);
extern void glSecondaryColor3usEXT (GLushort, GLushort, GLushort);
extern void glSecondaryColor3usvEXT (const GLushort *);
extern void glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *);
# 3390 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glMultiDrawArraysEXT (GLenum, const GLint *, const GLsizei *, GLsizei);
extern void glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);
# 3403 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glFogCoordfEXT (GLfloat);
extern void glFogCoordfvEXT (const GLfloat *);
extern void glFogCoorddEXT (GLdouble);
extern void glFogCoorddvEXT (const GLdouble *);
extern void glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *);
# 3465 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum);
# 3619 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glActiveStencilFaceEXT(GLenum face);







extern void glDepthBoundsEXT(GLclampd zmin, GLclampd zmax);







extern void glBlendEquationSeparateEXT(GLenum modeRGB, GLenum modeAlpha);
# 3659 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern GLboolean glIsRenderbufferEXT(GLuint renderbuffer);
extern void glBindRenderbufferEXT(GLenum target, GLuint renderbuffer);
extern void glDeleteRenderbuffersEXT(GLsizei n, const GLuint *renderbuffers);
extern void glGenRenderbuffersEXT(GLsizei n, GLuint *renderbuffers);
extern void glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
extern void glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint *params);
extern GLboolean glIsFramebufferEXT(GLuint framebuffer);
extern void glBindFramebufferEXT(GLenum target, GLuint framebuffer);
extern void glDeleteFramebuffersEXT(GLsizei n, const GLuint *framebuffers);
extern void glGenFramebuffersEXT(GLsizei n, GLuint *framebuffers);
extern GLenum glCheckFramebufferStatusEXT(GLenum target);
extern void glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
extern void glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
extern void glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
extern void glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
extern void glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint *params);
extern void glGenerateMipmapEXT(GLenum target);







extern void glBlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);







extern void glRenderbufferStorageMultisampleEXT(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
# 3701 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glTextureRangeAPPLE(GLenum target, GLsizei length, const GLvoid *pointer);
extern void glGetTexParameterPointervAPPLE(GLenum target, GLenum pname, GLvoid **params);
# 3712 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glVertexArrayRangeAPPLE(GLsizei length, const GLvoid *pointer);
extern void glFlushVertexArrayRangeAPPLE(GLsizei length, const GLvoid *pointer);
extern void glVertexArrayParameteriAPPLE(GLenum pname, GLint param);
# 3725 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBindVertexArrayAPPLE(GLuint id);
extern void glDeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids);
extern void glGenVertexArraysAPPLE(GLsizei n, GLuint *ids);
extern GLboolean glIsVertexArrayAPPLE(GLuint id);
# 3743 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glGenFencesAPPLE(GLsizei n, GLuint *fences);
extern void glDeleteFencesAPPLE(GLsizei n, const GLuint *fences);
extern void glSetFenceAPPLE(GLuint fence);
extern GLboolean glIsFenceAPPLE(GLuint fence);
extern GLboolean glTestFenceAPPLE(GLuint fence);
extern void glFinishFenceAPPLE(GLuint fence);
extern GLboolean glTestObjectAPPLE(GLenum object, GLuint name);
extern void glFinishObjectAPPLE(GLenum object, GLuint name);
# 3762 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glElementPointerAPPLE(GLenum type, const GLvoid *pointer);
extern void glDrawElementArrayAPPLE(GLenum mode, GLint first, GLsizei count);
extern void glDrawRangeElementArrayAPPLE(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
extern void glMultiDrawElementArrayAPPLE(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
extern void glMultiDrawRangeElementArrayAPPLE(GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
# 3776 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glFlushRenderAPPLE(void);
extern void glFinishRenderAPPLE(void);
extern void glSwapAPPLE(void);
# 3792 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glEnableVertexAttribAPPLE(GLuint index, GLenum pname);
extern void glDisableVertexAttribAPPLE(GLuint index, GLenum pname);
extern GLboolean glIsVertexAttribEnabledAPPLE(GLuint index, GLenum pname);
extern void glMapVertexAttrib1dAPPLE(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
extern void glMapVertexAttrib1fAPPLE(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
extern void glMapVertexAttrib2dAPPLE(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
extern void glMapVertexAttrib2fAPPLE(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
# 3807 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glBufferParameteriAPPLE(GLenum target, GLenum pname, GLint param);
extern void glFlushMappedBufferRangeAPPLE(GLenum target, GLintptr offset, GLsizeiptr size);
# 3817 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern GLenum glObjectPurgeableAPPLE(GLenum object, GLuint name, GLenum option);
extern GLenum glObjectUnpurgeableAPPLE(GLenum object, GLuint name, GLenum option);
# 3827 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glPNTrianglesiATI(GLenum pname, GLint param);
extern void glPNTrianglesfATI(GLenum pname, GLfloat param);







extern void glBlendEquationSeparateATI(GLenum equationRGB, GLenum equationAlpha);
# 3845 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glStencilOpSeparateATI(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
extern void glStencilFuncSeparateATI(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
# 3855 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glPNTrianglesiATIX(GLenum pname, GLint param);
extern void glPNTrianglesfATIX(GLenum pname, GLfloat param);
# 3963 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glCombinerParameterfvNV (GLenum, const GLfloat *);
extern void glCombinerParameterfNV (GLenum, GLfloat);
extern void glCombinerParameterivNV (GLenum, const GLint *);
extern void glCombinerParameteriNV (GLenum, GLint);
extern void glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum);
extern void glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean);
extern void glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum);
extern void glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *);
extern void glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *);
extern void glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *);
extern void glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *);
extern void glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *);
extern void glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *);
# 3984 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *);
extern void glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *);
# 4128 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
extern void glPointParameteriNV(GLenum pname, GLint param);
extern void glPointParameterivNV(GLenum pname, const GLint *params);
# 4568 "/System/Library/Frameworks/OpenGL.framework/Headers/glext.h" 3
}
# 66 "/System/Library/Frameworks/OpenGL.framework/Headers/gl.h" 2 3
# 2427 "/System/Library/Frameworks/OpenGL.framework/Headers/gl.h" 3
extern void glAccum (GLenum op, GLfloat value);
extern void glAlphaFunc (GLenum func, GLclampf ref);
extern GLboolean glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences);
extern void glArrayElement (GLint i);
extern void glBegin (GLenum mode);
extern void glBindTexture (GLenum target, GLuint texture);
extern void glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);
extern void glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
extern void glBlendEquation (GLenum mode);
extern void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
extern void glBlendFunc (GLenum sfactor, GLenum dfactor);
extern void glCallList (GLuint list);
extern void glCallLists (GLsizei n, GLenum type, const GLvoid *lists);
extern void glClear (GLbitfield mask);
extern void glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
extern void glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
extern void glClearDepth (GLclampd depth);
extern void glClearIndex (GLfloat c);
extern void glClearStencil (GLint s);
extern void glClipPlane (GLenum plane, const GLdouble *equation);
extern void glColor3b (GLbyte red, GLbyte green, GLbyte blue);
extern void glColor3bv (const GLbyte *v);
extern void glColor3d (GLdouble red, GLdouble green, GLdouble blue);
extern void glColor3dv (const GLdouble *v);
extern void glColor3f (GLfloat red, GLfloat green, GLfloat blue);
extern void glColor3fv (const GLfloat *v);
extern void glColor3i (GLint red, GLint green, GLint blue);
extern void glColor3iv (const GLint *v);
extern void glColor3s (GLshort red, GLshort green, GLshort blue);
extern void glColor3sv (const GLshort *v);
extern void glColor3ub (GLubyte red, GLubyte green, GLubyte blue);
extern void glColor3ubv (const GLubyte *v);
extern void glColor3ui (GLuint red, GLuint green, GLuint blue);
extern void glColor3uiv (const GLuint *v);
extern void glColor3us (GLushort red, GLushort green, GLushort blue);
extern void glColor3usv (const GLushort *v);
extern void glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha);
extern void glColor4bv (const GLbyte *v);
extern void glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
extern void glColor4dv (const GLdouble *v);
extern void glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
extern void glColor4fv (const GLfloat *v);
extern void glColor4i (GLint red, GLint green, GLint blue, GLint alpha);
extern void glColor4iv (const GLint *v);
extern void glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha);
extern void glColor4sv (const GLshort *v);
extern void glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
extern void glColor4ubv (const GLubyte *v);
extern void glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha);
extern void glColor4uiv (const GLuint *v);
extern void glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha);
extern void glColor4usv (const GLushort *v);
extern void glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
extern void glColorMaterial (GLenum face, GLenum mode);
extern void glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
extern void glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
extern void glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
extern void glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params);
extern void glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params);
extern void glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
extern void glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
extern void glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params);
extern void glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params);
extern void glConvolutionParameteri (GLenum target, GLenum pname, GLint params);
extern void glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params);
extern void glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
extern void glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
extern void glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
extern void glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
extern void glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
extern void glCopyTexImage1D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
extern void glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
extern void glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
extern void glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
extern void glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
extern void glCullFace (GLenum mode);
extern void glDeleteLists (GLuint list, GLsizei range);
extern void glDeleteTextures (GLsizei n, const GLuint *textures);
extern void glDepthFunc (GLenum func);
extern void glDepthMask (GLboolean flag);
extern void glDepthRange (GLclampd zNear, GLclampd zFar);
extern void glDisable (GLenum cap);
extern void glDisableClientState (GLenum array);
extern void glDrawArrays (GLenum mode, GLint first, GLsizei count);
extern void glDrawBuffer (GLenum mode);
extern void glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
extern void glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
extern void glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
extern void glEdgeFlag (GLboolean flag);
extern void glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer);
extern void glEdgeFlagv (const GLboolean *flag);
extern void glEnable (GLenum cap);
extern void glEnableClientState (GLenum array);
extern void glEnd (void);
extern void glEndList (void);
extern void glEvalCoord1d (GLdouble u);
extern void glEvalCoord1dv (const GLdouble *u);
extern void glEvalCoord1f (GLfloat u);
extern void glEvalCoord1fv (const GLfloat *u);
extern void glEvalCoord2d (GLdouble u, GLdouble v);
extern void glEvalCoord2dv (const GLdouble *u);
extern void glEvalCoord2f (GLfloat u, GLfloat v);
extern void glEvalCoord2fv (const GLfloat *u);
extern void glEvalMesh1 (GLenum mode, GLint i1, GLint i2);
extern void glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);
extern void glEvalPoint1 (GLint i);
extern void glEvalPoint2 (GLint i, GLint j);
extern void glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer);
extern void glFinish (void);
extern void glFlush (void);
extern void glFogf (GLenum pname, GLfloat param);
extern void glFogfv (GLenum pname, const GLfloat *params);
extern void glFogi (GLenum pname, GLint param);
extern void glFogiv (GLenum pname, const GLint *params);
extern void glFrontFace (GLenum mode);
extern void glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
extern GLuint glGenLists (GLsizei range);
extern void glGenTextures (GLsizei n, GLuint *textures);
extern void glGetBooleanv (GLenum pname, GLboolean *params);
extern void glGetClipPlane (GLenum plane, GLdouble *equation);
extern void glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table);
extern void glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params);
extern void glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params);
extern void glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image);
extern void glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params);
extern void glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params);
extern void glGetDoublev (GLenum pname, GLdouble *params);
extern GLenum glGetError (void);
extern void glGetFloatv (GLenum pname, GLfloat *params);
extern void glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
extern void glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params);
extern void glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params);
extern void glGetIntegerv (GLenum pname, GLint *params);
extern void glGetLightfv (GLenum light, GLenum pname, GLfloat *params);
extern void glGetLightiv (GLenum light, GLenum pname, GLint *params);
extern void glGetMapdv (GLenum target, GLenum query, GLdouble *v);
extern void glGetMapfv (GLenum target, GLenum query, GLfloat *v);
extern void glGetMapiv (GLenum target, GLenum query, GLint *v);
extern void glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params);
extern void glGetMaterialiv (GLenum face, GLenum pname, GLint *params);
extern void glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
extern void glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params);
extern void glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params);
extern void glGetPixelMapfv (GLenum map, GLfloat *values);
extern void glGetPixelMapuiv (GLenum map, GLuint *values);
extern void glGetPixelMapusv (GLenum map, GLushort *values);
extern void glGetPointerv (GLenum pname, GLvoid* *params);
extern void glGetPolygonStipple (GLubyte *mask);
extern void glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
extern const GLubyte * glGetString (GLenum name);
extern void glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params);
extern void glGetTexEnviv (GLenum target, GLenum pname, GLint *params);
extern void glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params);
extern void glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params);
extern void glGetTexGeniv (GLenum coord, GLenum pname, GLint *params);
extern void glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
extern void glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params);
extern void glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params);
extern void glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
extern void glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
extern void glHint (GLenum target, GLenum mode);
extern void glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
extern void glIndexMask (GLuint mask);
extern void glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
extern void glIndexd (GLdouble c);
extern void glIndexdv (const GLdouble *c);
extern void glIndexf (GLfloat c);
extern void glIndexfv (const GLfloat *c);
extern void glIndexi (GLint c);
extern void glIndexiv (const GLint *c);
extern void glIndexs (GLshort c);
extern void glIndexsv (const GLshort *c);
extern void glIndexub (GLubyte c);
extern void glIndexubv (const GLubyte *c);
extern void glInitNames (void);
extern void glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer);
extern GLboolean glIsEnabled (GLenum cap);
extern GLboolean glIsList (GLuint list);
extern GLboolean glIsTexture (GLuint texture);
extern void glLightModelf (GLenum pname, GLfloat param);
extern void glLightModelfv (GLenum pname, const GLfloat *params);
extern void glLightModeli (GLenum pname, GLint param);
extern void glLightModeliv (GLenum pname, const GLint *params);
extern void glLightf (GLenum light, GLenum pname, GLfloat param);
extern void glLightfv (GLenum light, GLenum pname, const GLfloat *params);
extern void glLighti (GLenum light, GLenum pname, GLint param);
extern void glLightiv (GLenum light, GLenum pname, const GLint *params);
extern void glLineStipple (GLint factor, GLushort pattern);
extern void glLineWidth (GLfloat width);
extern void glListBase (GLuint base);
extern void glLoadIdentity (void);
extern void glLoadMatrixd (const GLdouble *m);
extern void glLoadMatrixf (const GLfloat *m);
extern void glLoadName (GLuint name);
extern void glLogicOp (GLenum opcode);
extern void glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
extern void glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
extern void glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
extern void glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
extern void glMapGrid1d (GLint un, GLdouble u1, GLdouble u2);
extern void glMapGrid1f (GLint un, GLfloat u1, GLfloat u2);
extern void glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
extern void glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
extern void glMaterialf (GLenum face, GLenum pname, GLfloat param);
extern void glMaterialfv (GLenum face, GLenum pname, const GLfloat *params);
extern void glMateriali (GLenum face, GLenum pname, GLint param);
extern void glMaterialiv (GLenum face, GLenum pname, const GLint *params);
extern void glMatrixMode (GLenum mode);
extern void glMinmax (GLenum target, GLenum internalformat, GLboolean sink);
extern void glMultMatrixd (const GLdouble *m);
extern void glMultMatrixf (const GLfloat *m);
extern void glNewList (GLuint list, GLenum mode);
extern void glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz);
extern void glNormal3bv (const GLbyte *v);
extern void glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz);
extern void glNormal3dv (const GLdouble *v);
extern void glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz);
extern void glNormal3fv (const GLfloat *v);
extern void glNormal3i (GLint nx, GLint ny, GLint nz);
extern void glNormal3iv (const GLint *v);
extern void glNormal3s (GLshort nx, GLshort ny, GLshort nz);
extern void glNormal3sv (const GLshort *v);
extern void glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
extern void glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
extern void glPassThrough (GLfloat token);
extern void glPixelMapfv (GLenum map, GLint mapsize, const GLfloat *values);
extern void glPixelMapuiv (GLenum map, GLint mapsize, const GLuint *values);
extern void glPixelMapusv (GLenum map, GLint mapsize, const GLushort *values);
extern void glPixelStoref (GLenum pname, GLfloat param);
extern void glPixelStorei (GLenum pname, GLint param);
extern void glPixelTransferf (GLenum pname, GLfloat param);
extern void glPixelTransferi (GLenum pname, GLint param);
extern void glPixelZoom (GLfloat xfactor, GLfloat yfactor);
extern void glPointSize (GLfloat size);
extern void glPolygonMode (GLenum face, GLenum mode);
extern void glPolygonOffset (GLfloat factor, GLfloat units);
extern void glPolygonStipple (const GLubyte *mask);
extern void glPopAttrib (void);
extern void glPopClientAttrib (void);
extern void glPopMatrix (void);
extern void glPopName (void);
extern void glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities);
extern void glPushAttrib (GLbitfield mask);
extern void glPushClientAttrib (GLbitfield mask);
extern void glPushMatrix (void);
extern void glPushName (GLuint name);
extern void glRasterPos2d (GLdouble x, GLdouble y);
extern void glRasterPos2dv (const GLdouble *v);
extern void glRasterPos2f (GLfloat x, GLfloat y);
extern void glRasterPos2fv (const GLfloat *v);
extern void glRasterPos2i (GLint x, GLint y);
extern void glRasterPos2iv (const GLint *v);
extern void glRasterPos2s (GLshort x, GLshort y);
extern void glRasterPos2sv (const GLshort *v);
extern void glRasterPos3d (GLdouble x, GLdouble y, GLdouble z);
extern void glRasterPos3dv (const GLdouble *v);
extern void glRasterPos3f (GLfloat x, GLfloat y, GLfloat z);
extern void glRasterPos3fv (const GLfloat *v);
extern void glRasterPos3i (GLint x, GLint y, GLint z);
extern void glRasterPos3iv (const GLint *v);
extern void glRasterPos3s (GLshort x, GLshort y, GLshort z);
extern void glRasterPos3sv (const GLshort *v);
extern void glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void glRasterPos4dv (const GLdouble *v);
extern void glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void glRasterPos4fv (const GLfloat *v);
extern void glRasterPos4i (GLint x, GLint y, GLint z, GLint w);
extern void glRasterPos4iv (const GLint *v);
extern void glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w);
extern void glRasterPos4sv (const GLshort *v);
extern void glReadBuffer (GLenum mode);
extern void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
extern void glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
extern void glRectdv (const GLdouble *v1, const GLdouble *v2);
extern void glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
extern void glRectfv (const GLfloat *v1, const GLfloat *v2);
extern void glRecti (GLint x1, GLint y1, GLint x2, GLint y2);
extern void glRectiv (const GLint *v1, const GLint *v2);
extern void glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2);
extern void glRectsv (const GLshort *v1, const GLshort *v2);
extern GLint glRenderMode (GLenum mode);
extern void glResetHistogram (GLenum target);
extern void glResetMinmax (GLenum target);
extern void glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
extern void glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
extern void glScaled (GLdouble x, GLdouble y, GLdouble z);
extern void glScalef (GLfloat x, GLfloat y, GLfloat z);
extern void glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
extern void glSelectBuffer (GLsizei size, GLuint *buffer);
extern void glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
extern void glShadeModel (GLenum mode);
extern void glStencilFunc (GLenum func, GLint ref, GLuint mask);
extern void glStencilMask (GLuint mask);
extern void glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
extern void glTexCoord1d (GLdouble s);
extern void glTexCoord1dv (const GLdouble *v);
extern void glTexCoord1f (GLfloat s);
extern void glTexCoord1fv (const GLfloat *v);
extern void glTexCoord1i (GLint s);
extern void glTexCoord1iv (const GLint *v);
extern void glTexCoord1s (GLshort s);
extern void glTexCoord1sv (const GLshort *v);
extern void glTexCoord2d (GLdouble s, GLdouble t);
extern void glTexCoord2dv (const GLdouble *v);
extern void glTexCoord2f (GLfloat s, GLfloat t);
extern void glTexCoord2fv (const GLfloat *v);
extern void glTexCoord2i (GLint s, GLint t);
extern void glTexCoord2iv (const GLint *v);
extern void glTexCoord2s (GLshort s, GLshort t);
extern void glTexCoord2sv (const GLshort *v);
extern void glTexCoord3d (GLdouble s, GLdouble t, GLdouble r);
extern void glTexCoord3dv (const GLdouble *v);
extern void glTexCoord3f (GLfloat s, GLfloat t, GLfloat r);
extern void glTexCoord3fv (const GLfloat *v);
extern void glTexCoord3i (GLint s, GLint t, GLint r);
extern void glTexCoord3iv (const GLint *v);
extern void glTexCoord3s (GLshort s, GLshort t, GLshort r);
extern void glTexCoord3sv (const GLshort *v);
extern void glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q);
extern void glTexCoord4dv (const GLdouble *v);
extern void glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q);
extern void glTexCoord4fv (const GLfloat *v);
extern void glTexCoord4i (GLint s, GLint t, GLint r, GLint q);
extern void glTexCoord4iv (const GLint *v);
extern void glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q);
extern void glTexCoord4sv (const GLshort *v);
extern void glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
extern void glTexEnvf (GLenum target, GLenum pname, GLfloat param);
extern void glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params);
extern void glTexEnvi (GLenum target, GLenum pname, GLint param);
extern void glTexEnviv (GLenum target, GLenum pname, const GLint *params);
extern void glTexGend (GLenum coord, GLenum pname, GLdouble param);
extern void glTexGendv (GLenum coord, GLenum pname, const GLdouble *params);
extern void glTexGenf (GLenum coord, GLenum pname, GLfloat param);
extern void glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params);
extern void glTexGeni (GLenum coord, GLenum pname, GLint param);
extern void glTexGeniv (GLenum coord, GLenum pname, const GLint *params);
extern void glTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
extern void glTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
extern void glTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
extern void glTexParameterf (GLenum target, GLenum pname, GLfloat param);
extern void glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
extern void glTexParameteri (GLenum target, GLenum pname, GLint param);
extern void glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
extern void glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
extern void glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
extern void glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
extern void glTranslated (GLdouble x, GLdouble y, GLdouble z);
extern void glTranslatef (GLfloat x, GLfloat y, GLfloat z);
extern void glVertex2d (GLdouble x, GLdouble y);
extern void glVertex2dv (const GLdouble *v);
extern void glVertex2f (GLfloat x, GLfloat y);
extern void glVertex2fv (const GLfloat *v);
extern void glVertex2i (GLint x, GLint y);
extern void glVertex2iv (const GLint *v);
extern void glVertex2s (GLshort x, GLshort y);
extern void glVertex2sv (const GLshort *v);
extern void glVertex3d (GLdouble x, GLdouble y, GLdouble z);
extern void glVertex3dv (const GLdouble *v);
extern void glVertex3f (GLfloat x, GLfloat y, GLfloat z);
extern void glVertex3fv (const GLfloat *v);
extern void glVertex3i (GLint x, GLint y, GLint z);
extern void glVertex3iv (const GLint *v);
extern void glVertex3s (GLshort x, GLshort y, GLshort z);
extern void glVertex3sv (const GLshort *v);
extern void glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void glVertex4dv (const GLdouble *v);
extern void glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void glVertex4fv (const GLfloat *v);
extern void glVertex4i (GLint x, GLint y, GLint z, GLint w);
extern void glVertex4iv (const GLint *v);
extern void glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w);
extern void glVertex4sv (const GLshort *v);
extern void glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
extern void glViewport (GLint x, GLint y, GLsizei width, GLsizei height);

extern void glSampleCoverage (GLclampf value, GLboolean invert);
extern void glSamplePass (GLenum pass);

extern void glLoadTransposeMatrixf (const GLfloat *m);
extern void glLoadTransposeMatrixd (const GLdouble *m);
extern void glMultTransposeMatrixf (const GLfloat *m);
extern void glMultTransposeMatrixd (const GLdouble *m);

extern void glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
extern void glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
extern void glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
extern void glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
extern void glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
extern void glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
extern void glGetCompressedTexImage (GLenum target, GLint lod, GLvoid *img);

extern void glActiveTexture (GLenum texture);
extern void glClientActiveTexture (GLenum texture);
extern void glMultiTexCoord1d (GLenum target, GLdouble s);
extern void glMultiTexCoord1dv (GLenum target, const GLdouble *v);
extern void glMultiTexCoord1f (GLenum target, GLfloat s);
extern void glMultiTexCoord1fv (GLenum target, const GLfloat *v);
extern void glMultiTexCoord1i (GLenum target, GLint s);
extern void glMultiTexCoord1iv (GLenum target, const GLint *v);
extern void glMultiTexCoord1s (GLenum target, GLshort s);
extern void glMultiTexCoord1sv (GLenum target, const GLshort *v);
extern void glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t);
extern void glMultiTexCoord2dv (GLenum target, const GLdouble *v);
extern void glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t);
extern void glMultiTexCoord2fv (GLenum target, const GLfloat *v);
extern void glMultiTexCoord2i (GLenum target, GLint s, GLint t);
extern void glMultiTexCoord2iv (GLenum target, const GLint *v);
extern void glMultiTexCoord2s (GLenum target, GLshort s, GLshort t);
extern void glMultiTexCoord2sv (GLenum target, const GLshort *v);
extern void glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r);
extern void glMultiTexCoord3dv (GLenum target, const GLdouble *v);
extern void glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r);
extern void glMultiTexCoord3fv (GLenum target, const GLfloat *v);
extern void glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r);
extern void glMultiTexCoord3iv (GLenum target, const GLint *v);
extern void glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r);
extern void glMultiTexCoord3sv (GLenum target, const GLshort *v);
extern void glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
extern void glMultiTexCoord4dv (GLenum target, const GLdouble *v);
extern void glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
extern void glMultiTexCoord4fv (GLenum target, const GLfloat *v);
extern void glMultiTexCoord4i (GLenum target, GLint, GLint s, GLint t, GLint r);
extern void glMultiTexCoord4iv (GLenum target, const GLint *v);
extern void glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
extern void glMultiTexCoord4sv (GLenum target, const GLshort *v);

extern void glFogCoordf (GLfloat coord);
extern void glFogCoordfv (const GLfloat *coord);
extern void glFogCoordd (GLdouble coord);
extern void glFogCoorddv (const GLdouble * coord);
extern void glFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer);

extern void glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue);
extern void glSecondaryColor3bv (const GLbyte *v);
extern void glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue);
extern void glSecondaryColor3dv (const GLdouble *v);
extern void glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue);
extern void glSecondaryColor3fv (const GLfloat *v);
extern void glSecondaryColor3i (GLint red, GLint green, GLint blue);
extern void glSecondaryColor3iv (const GLint *v);
extern void glSecondaryColor3s (GLshort red, GLshort green, GLshort blue);
extern void glSecondaryColor3sv (const GLshort *v);
extern void glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue);
extern void glSecondaryColor3ubv (const GLubyte *v);
extern void glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue);
extern void glSecondaryColor3uiv (const GLuint *v);
extern void glSecondaryColor3us (GLushort red, GLushort green, GLushort blue);
extern void glSecondaryColor3usv (const GLushort *v);
extern void glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);

extern void glPointParameterf (GLenum pname, GLfloat param);
extern void glPointParameterfv (GLenum pname, const GLfloat *params);
extern void glPointParameteri (GLenum pname, GLint param);
extern void glPointParameteriv (GLenum pname, const GLint *params);

extern void glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);

extern void glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
extern void glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);

extern void glWindowPos2d (GLdouble x, GLdouble y);
extern void glWindowPos2dv (const GLdouble *v);
extern void glWindowPos2f (GLfloat x, GLfloat y);
extern void glWindowPos2fv (const GLfloat *v);
extern void glWindowPos2i (GLint x, GLint y);
extern void glWindowPos2iv (const GLint *v);
extern void glWindowPos2s (GLshort x, GLshort y);
extern void glWindowPos2sv (const GLshort *v);
extern void glWindowPos3d (GLdouble x, GLdouble y, GLdouble z);
extern void glWindowPos3dv (const GLdouble *v);
extern void glWindowPos3f (GLfloat x, GLfloat y, GLfloat z);
extern void glWindowPos3fv (const GLfloat *v);
extern void glWindowPos3i (GLint x, GLint y, GLint z);
extern void glWindowPos3iv (const GLint *v);
extern void glWindowPos3s (GLshort x, GLshort y, GLshort z);
extern void glWindowPos3sv (const GLshort *v);

extern void glGenQueries(GLsizei n, GLuint *ids);
extern void glDeleteQueries(GLsizei n, const GLuint *ids);
extern GLboolean glIsQuery(GLuint id);
extern void glBeginQuery(GLenum target, GLuint id);
extern void glEndQuery(GLenum target);
extern void glGetQueryiv(GLenum target, GLenum pname, GLint *params);
extern void glGetQueryObjectiv(GLuint id, GLenum pname, GLint *params);
extern void glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);

extern void glBindBuffer (GLenum target, GLuint buffer);
extern void glDeleteBuffers (GLsizei n, const GLuint *buffers);
extern void glGenBuffers (GLsizei n, GLuint *buffers);
extern GLboolean glIsBuffer (GLuint buffer);
extern void glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
extern void glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
extern void glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
extern GLvoid * glMapBuffer (GLenum target, GLenum access);
extern GLboolean glUnmapBuffer (GLenum target);
extern void glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
extern void glGetBufferPointerv (GLenum target, GLenum pname, GLvoid **params);

extern void glDrawBuffers (GLsizei n, const GLenum *bufs);
extern void glVertexAttrib1d (GLuint index, GLdouble x);
extern void glVertexAttrib1dv (GLuint index, const GLdouble *v);
extern void glVertexAttrib1f (GLuint index, GLfloat x);
extern void glVertexAttrib1fv (GLuint index, const GLfloat *v);
extern void glVertexAttrib1s (GLuint index, GLshort x);
extern void glVertexAttrib1sv (GLuint index, const GLshort *v);
extern void glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y);
extern void glVertexAttrib2dv (GLuint index, const GLdouble *v);
extern void glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
extern void glVertexAttrib2fv (GLuint index, const GLfloat *v);
extern void glVertexAttrib2s (GLuint index, GLshort x, GLshort y);
extern void glVertexAttrib2sv (GLuint index, const GLshort *v);
extern void glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);
extern void glVertexAttrib3dv (GLuint index, const GLdouble *v);
extern void glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
extern void glVertexAttrib3fv (GLuint index, const GLfloat *v);
extern void glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z);
extern void glVertexAttrib3sv (GLuint index, const GLshort *v);
extern void glVertexAttrib4Nbv (GLuint index, const GLbyte *v);
extern void glVertexAttrib4Niv (GLuint index, const GLint *v);
extern void glVertexAttrib4Nsv (GLuint index, const GLshort *v);
extern void glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
extern void glVertexAttrib4Nubv (GLuint index, const GLubyte *v);
extern void glVertexAttrib4Nuiv (GLuint index, const GLuint *v);
extern void glVertexAttrib4Nusv (GLuint index, const GLushort *v);
extern void glVertexAttrib4bv (GLuint index, const GLbyte *v);
extern void glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void glVertexAttrib4dv (GLuint index, const GLdouble *v);
extern void glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void glVertexAttrib4fv (GLuint index, const GLfloat *v);
extern void glVertexAttrib4iv (GLuint index, const GLint *v);
extern void glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
extern void glVertexAttrib4sv (GLuint index, const GLshort *v);
extern void glVertexAttrib4ubv (GLuint index, const GLubyte *v);
extern void glVertexAttrib4uiv (GLuint index, const GLuint *v);
extern void glVertexAttrib4usv (GLuint index, const GLushort *v);
extern void glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
extern void glEnableVertexAttribArray (GLuint index);
extern void glDisableVertexAttribArray (GLuint index);
extern void glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params);
extern void glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
extern void glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
extern void glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid* *pointer);
extern void glDeleteShader (GLuint shader);
extern void glDetachShader (GLuint program, GLuint shader);
extern GLuint glCreateShader (GLenum type);
extern void glShaderSource (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length);
extern void glCompileShader (GLuint shader);
extern GLuint glCreateProgram (void);
extern void glAttachShader (GLuint program, GLuint shader);
extern void glLinkProgram (GLuint program);
extern void glUseProgram (GLuint program);
extern void glDeleteProgram (GLuint program);
extern void glValidateProgram (GLuint program);
extern void glUniform1f (GLint location, GLfloat v0);
extern void glUniform2f (GLint location, GLfloat v0, GLfloat v1);
extern void glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
extern void glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
extern void glUniform1i (GLint location, GLint v0);
extern void glUniform2i (GLint location, GLint v0, GLint v1);
extern void glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
extern void glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
extern void glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
extern void glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
extern void glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
extern void glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
extern void glUniform1iv (GLint location, GLsizei count, const GLint *value);
extern void glUniform2iv (GLint location, GLsizei count, const GLint *value);
extern void glUniform3iv (GLint location, GLsizei count, const GLint *value);
extern void glUniform4iv (GLint location, GLsizei count, const GLint *value);
extern void glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern GLboolean glIsShader (GLuint shader);
extern GLboolean glIsProgram (GLuint program);
extern void glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
extern void glGetProgramiv (GLuint program, GLenum pname, GLint *params);
extern void glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
extern void glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
extern void glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
extern GLint glGetUniformLocation (GLuint program, const GLchar *name);
extern void glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
extern void glGetUniformfv (GLuint program, GLint location, GLfloat *params);
extern void glGetUniformiv (GLuint program, GLint location, GLint *params);
extern void glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
extern void glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
extern void glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
extern GLint glGetAttribLocation (GLuint program, const GLchar *name);
extern void glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
extern void glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
extern void glStencilMaskSeparate (GLenum face, GLuint mask);

extern void glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
extern void glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);





}
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 2 3

@class NSData, NSView, NSScreen;
# 21 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 3
typedef enum {
 NSOpenGLGOFormatCacheSize = 501,
 NSOpenGLGOClearFormatCache = 502,
 NSOpenGLGORetainRenderers = 503,
 NSOpenGLGOResetLibrary = 504
} NSOpenGLGlobalOption;





extern void NSOpenGLSetOption(NSOpenGLGlobalOption pname, GLint param);
extern void NSOpenGLGetOption(NSOpenGLGlobalOption pname, GLint *param);




extern void NSOpenGLGetVersion(GLint *major, GLint *minor);
# 49 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 3
enum {
 NSOpenGLPFAAllRenderers = 1,
 NSOpenGLPFADoubleBuffer = 5,
 NSOpenGLPFAStereo = 6,
 NSOpenGLPFAAuxBuffers = 7,
 NSOpenGLPFAColorSize = 8,
 NSOpenGLPFAAlphaSize = 11,
 NSOpenGLPFADepthSize = 12,
 NSOpenGLPFAStencilSize = 13,
 NSOpenGLPFAAccumSize = 14,
 NSOpenGLPFAMinimumPolicy = 51,
 NSOpenGLPFAMaximumPolicy = 52,
 NSOpenGLPFAOffScreen = 53,
 NSOpenGLPFAFullScreen = 54,
 NSOpenGLPFASampleBuffers = 55,
 NSOpenGLPFASamples = 56,
 NSOpenGLPFAAuxDepthStencil = 57,
 NSOpenGLPFAColorFloat = 58,

 NSOpenGLPFAMultisample = 59,
 NSOpenGLPFASupersample = 60,
 NSOpenGLPFASampleAlpha = 61,

 NSOpenGLPFARendererID = 70,
 NSOpenGLPFASingleRenderer = 71,
 NSOpenGLPFANoRecovery = 72,
 NSOpenGLPFAAccelerated = 73,
 NSOpenGLPFAClosestPolicy = 74,
 NSOpenGLPFARobust = 75,
 NSOpenGLPFABackingStore = 76,
 NSOpenGLPFAMPSafe = 78,
 NSOpenGLPFAWindow = 80,
 NSOpenGLPFAMultiScreen = 81,
 NSOpenGLPFACompliant = 83,
 NSOpenGLPFAScreenMask = 84,
 NSOpenGLPFAPixelBuffer = 90,
 NSOpenGLPFAVirtualScreenCount = 128
};
typedef uint32_t NSOpenGLPixelFormatAttribute;





typedef struct _CGLPixelFormatObject NSOpenGLPixelFormatAuxiliary;

@interface NSOpenGLPixelFormat : NSObject <NSCoding>
{
@private
    NSOpenGLPixelFormatAuxiliary* _pixelFormatAuxiliary;
    NSData* _pixelAttributes;
    NSInteger _reserved1;
    NSInteger _reserved2;
    NSInteger _reserved3;
}

- (id)initWithAttributes:(NSOpenGLPixelFormatAttribute*)attribs;
- (id)initWithData:(NSData*)attribs;

- (NSData*)attributes;
- (void)setAttributes:(NSData*)attribs;

- (void)getValues:(GLint *)vals forAttribute:(NSOpenGLPixelFormatAttribute)attrib forVirtualScreen:(GLint)screen;
- (GLint)numberOfVirtualScreens;


- (void *)CGLPixelFormatObj;


@end






@interface NSOpenGLPixelBuffer : NSObject
{
@private
    struct _CGLPBufferObject *_pixelBufferAuxiliary;
    void *_reserved1;
    void *_reserved2;
}
# 141 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 3
- (id)initWithTextureTarget:(GLenum)target textureInternalFormat:(GLenum)format textureMaxMipMapLevel:(GLint)maxLevel pixelsWide:(GLsizei)pixelsWide pixelsHigh:(GLsizei)pixelsHigh;
- (GLsizei)pixelsWide;
- (GLsizei)pixelsHigh;
- (GLenum)textureTarget;
- (GLenum)textureInternalFormat;
- (GLint)textureMaxMipMapLevel;
@end
# 158 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 3
typedef enum {
 NSOpenGLCPSwapRectangle = 200,
 NSOpenGLCPSwapRectangleEnable = 201,
 NSOpenGLCPRasterizationEnable = 221,
 NSOpenGLCPSwapInterval = 222,

 NSOpenGLCPSurfaceOrder = 235,
 NSOpenGLCPSurfaceOpacity = 236,

 NSOpenGLCPStateValidation = 301
} NSOpenGLContextParameter;





typedef struct _CGLContextObject NSOpenGLContextAuxiliary;

@interface NSOpenGLContext : NSObject
{
@private
 NSView *_view;
 NSOpenGLContextAuxiliary *_contextAuxiliary;
}


- (id)initWithFormat:(NSOpenGLPixelFormat *)format shareContext:(NSOpenGLContext *)share;


- (void)setView:(NSView *)view;
- (NSView *)view;
- (void)setFullScreen;
- (void)setOffScreen:(void *)baseaddr width:(GLsizei)width height:(GLsizei)height rowbytes:(GLint)rowbytes;
- (void)clearDrawable;
- (void)update;


- (void)flushBuffer;


- (void)makeCurrentContext;
+ (void)clearCurrentContext;
+ (NSOpenGLContext *)currentContext;


- (void)copyAttributesFromContext:(NSOpenGLContext *)context withMask:(GLbitfield)mask;


- (void)setValues:(const GLint *)vals forParameter:(NSOpenGLContextParameter)param;
- (void)getValues:(GLint *)vals forParameter:(NSOpenGLContextParameter)param;




- (void)setCurrentVirtualScreen:(GLint)screen;
- (GLint)currentVirtualScreen;


- (void)createTexture:(GLenum)target fromView:(NSView *)view internalFormat:(GLenum)format;




- (void *)CGLContextObj;
# 232 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h" 3
- (void)setPixelBuffer:(NSOpenGLPixelBuffer *)pixelBuffer cubeMapFace:(GLenum)face mipMapLevel:(GLint)level currentVirtualScreen:(GLint)screen;
- (NSOpenGLPixelBuffer *)pixelBuffer;
- (GLenum)pixelBufferCubeMapFace;
- (GLint)pixelBufferMipMapLevel;





- (void)setTextureImageToPixelBuffer:(NSOpenGLPixelBuffer *)pixelBuffer colorBuffer:(GLenum)source;


@end
# 141 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGLView.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSOpenGLView.h" 3
@class NSOpenGLContext, NSOpenGLPixelFormat;

@interface NSOpenGLView : NSView {
  @private
    NSOpenGLContext* _openGLContext;
    NSOpenGLPixelFormat* _pixelFormat;
    NSInteger _reserved1;
    NSInteger _reserved2;
    NSInteger _reserved3;
}

+ (NSOpenGLPixelFormat*)defaultPixelFormat;

- (id)initWithFrame:(NSRect)frameRect pixelFormat:(NSOpenGLPixelFormat*)format;

- (void)setOpenGLContext:(NSOpenGLContext*)context;
- (NSOpenGLContext*)openGLContext;
- (void)clearGLContext;

- (void)update;
- (void)reshape;

- (void)setPixelFormat:(NSOpenGLPixelFormat*)pixelFormat;
- (NSOpenGLPixelFormat*)pixelFormat;


- (void)prepareOpenGL;

@end
# 142 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplicationScripting.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSApplicationScripting.h" 3
@interface NSApplication(NSScripting)


- (NSArray *)orderedDocuments;


- (NSArray *)orderedWindows;

@end

@interface NSObject(NSApplicationScriptingDelegation)


- (BOOL)application:(NSApplication *)sender delegateHandlesKey:(NSString *)key;

@end
# 143 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocumentScripting.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSDocumentScripting.h" 3
@class NSCloseCommand;
@class NSScriptCommand;
@class NSScriptObjectSpecifier;
@class NSString;

@interface NSDocument (NSScripting)

- (NSString *)lastComponentOfFileName;
- (void)setLastComponentOfFileName:(NSString *)str;

- (id)handleSaveScriptCommand:(NSScriptCommand *)command;
- (id)handleCloseScriptCommand:(NSCloseCommand *)command;
- (id)handlePrintScriptCommand:(NSScriptCommand *)command;

- (NSScriptObjectSpecifier *)objectSpecifier;

@end
# 144 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextStorageScripting.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextStorageScripting.h" 3
@interface NSTextStorage (Scripting)

- (NSArray *)attributeRuns;
- (void)setAttributeRuns:(NSArray *)attributeRuns;

- (NSArray *)paragraphs;
- (void)setParagraphs:(NSArray *)paragraphs;

- (NSArray *)words;
- (void)setWords:(NSArray *)words;

- (NSArray *)characters;
- (void)setCharacters:(NSArray *)characters;

- (NSFont *)font;
- (void)setFont:(NSFont *)font;

- (NSColor *)foregroundColor;
- (void)setForegroundColor:(NSColor *)color;

@end
# 145 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSToolbar.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSToolbar.h" 3
@class NSArray, NSDictionary, NSMutableArray, NSNotification, NSString, NSToolbarItem, NSWindow;

enum { NSToolbarDisplayModeDefault, NSToolbarDisplayModeIconAndLabel, NSToolbarDisplayModeIconOnly, NSToolbarDisplayModeLabelOnly };
typedef NSUInteger NSToolbarDisplayMode;

enum { NSToolbarSizeModeDefault, NSToolbarSizeModeRegular, NSToolbarSizeModeSmall };
typedef NSUInteger NSToolbarSizeMode;

@interface NSToolbar : NSObject {
@private
    NSString * _toolbarIdentifier;

    NSMutableArray * _currentItems;
    NSMutableArray * _currentItemIdentifiers;

    NSDictionary * _initPListDatabase;
    id _initPListTarget;

    NSString * _selectedItemIdentifier;
    void * _metrics;

    id _delegate;
    NSWindow * _window;
    id _configPalette;
    id _toolbarView;
    NSInteger _syncPostEnabledCount;

    struct __tbFlags {
 unsigned int allowsUserCustomization:1;
 unsigned int autosavesUsingIdentifier:1;
 unsigned int initialConfigurationDone:1;
 unsigned int shouldHideAfterCustomization:1;
        unsigned int delegateDefaultItemIdentifiers:1;
        unsigned int delegateAllowedItemIdentifiers:1;
        unsigned int delegateItemWithItemIdentifier:1;
 unsigned int delegateNotificationsEnabled:1;
        unsigned int prefersToBeShown:1;
        unsigned int loadItemsImmediately:1;
        unsigned int currentItemsContainsPlaceholder:1;
        unsigned int customizationPanelIsRunning:1;
        unsigned int usesCustomSheetWidth:1;
        unsigned int clickAndDragPerformsCustomization:1;
        unsigned int showsNoContextMenu:1;
        unsigned int firstMoveableItemIndex:6;
        unsigned int keyboardLoopNeedsUpdating:1;
        unsigned int showHideDuringConfigurationChangeDisabled:1;
 unsigned int displayMode:2;
 unsigned int sizeMode:2;
 unsigned int doNotShowBaselineSeparator:1;
        unsigned int hideWithoutResizingWindowHint:1;
        unsigned int autovalidatesItemsDisabled:1;
        unsigned int inAutovalidation:1;
 unsigned int loadedMetrics:1;
    } _tbFlags;

    NSInteger _customizationSheetWidth;
    id _tbReserved;
}

- (id)initWithIdentifier:(NSString *)identifier;


- (void)insertItemWithItemIdentifier:(NSString *)itemIdentifier atIndex:(NSInteger)index;
- (void)removeItemAtIndex:(NSInteger)index;


- (void)setDelegate:(id)delegate;
- (id)delegate;


- (void)setVisible:(BOOL)shown;
- (BOOL)isVisible;


- (void)runCustomizationPalette:(id)sender;
- (BOOL)customizationPaletteIsRunning;





- (void)setDisplayMode:(NSToolbarDisplayMode)displayMode;
- (NSToolbarDisplayMode)displayMode;


- (void)setSelectedItemIdentifier:(NSString *)itemIdentifier;
- (NSString *)selectedItemIdentifier;




- (void)setSizeMode:(NSToolbarSizeMode)sizeMode;
- (NSToolbarSizeMode)sizeMode;





- (void)setShowsBaselineSeparator:(BOOL)flag;
- (BOOL)showsBaselineSeparator;


- (void)setAllowsUserCustomization:(BOOL)allowCustomization;
- (BOOL)allowsUserCustomization;





- (NSString *)identifier;


- (NSArray *)items;


- (NSArray *)visibleItems;





- (void)setAutosavesConfiguration:(BOOL)flag;
- (BOOL)autosavesConfiguration;


- (void)setConfigurationFromDictionary:(NSDictionary *)configDict;
- (NSDictionary *)configurationDictionary;





- (void)validateVisibleItems;



@end

@interface NSObject (NSToolbarDelegate)

- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag;


- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar;


- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar;



- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar;



@end


@interface NSObject (NSToolbarNotifications)

- (void)toolbarWillAddItem: (NSNotification *)notification;


- (void)toolbarDidRemoveItem: (NSNotification *)notification;


@end



extern "C" NSString *NSToolbarWillAddItemNotification;
extern "C" NSString *NSToolbarDidRemoveItemNotification;
# 146 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSToolbarItem.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSToolbarItem.h" 3
@class NSToolbarItemViewer, NSMenuItem, NSView, NSImage;

@interface NSToolbarItem : NSObject <NSCopying, NSValidatedUserInterfaceItem> {
@private
    NSToolbar * _toolbar;
    NSImage * _image;
    NSString * _itemIdentifier;

    NSString * _label;
    NSTextAlignment _labelAlignment;
    NSString * _paletteLabel;

    NSString * _toolTip;
    NSMenuItem * _menuItemRep;
    NSInteger _tag;

    struct __tbiFlags {
 unsigned int viewRespondsToIsEnabled:1;
 unsigned int viewRespondsToSetEnabled:1;
 unsigned int viewRespondsToTag:1;
 unsigned int viewRespondsToSetTag:1;
 unsigned int viewRespondsToAction:1;
 unsigned int viewRespondsToSetAction:1;
 unsigned int viewRespondsToTarget:1;
 unsigned int viewRespondsToSetTarget:1;
        unsigned int viewRespondsToImage:1;
        unsigned int viewRespondsToSetImage:1;
 unsigned int isEnabled:1;
 unsigned int isUserRemovable:1;
 unsigned int menuHasBeenSet:1;
        unsigned int menuRepIsDefault:1;
        unsigned int viewHasBeenLoaded:1;
        unsigned int drawingForDragImage:1;
        unsigned int isCustomItemType:1;
 unsigned int hasValidatedAutoModeConfiguration:1;
 unsigned int useAutoModeConfiguration:1;
        unsigned int hasNonDefaultPrioritySetting:1;
        unsigned int autovalidationDisabled:1;
        unsigned int tagHasBeenSet:1;
 unsigned int sizeHasBeenSet:1;
 unsigned int RESERVED:9;
    } _tbiFlags;
    NSArray * _allPossibleLabelsToFit;

    id _itemViewer;
    NSView * _view;
    NSSize _minSize;
    NSSize _maxSize;



}

- (id)initWithItemIdentifier:(NSString *)itemIdentifier;


- (NSString *)itemIdentifier;
- (NSToolbar *)toolbar;




- (void)setLabel:(NSString *)label;
- (NSString *)label;


- (void)setPaletteLabel:(NSString *)paletteLabel;
- (NSString *)paletteLabel;


- (void)setToolTip:(NSString*)toolTip;
- (NSString *)toolTip;


- (void)setMenuFormRepresentation:(NSMenuItem *)menuItem;
- (NSMenuItem *)menuFormRepresentation;


- (void)setTag:(NSInteger)tag;
- (NSInteger)tag;


- (void)setTarget:(id)target;
- (id)target;


- (void)setAction:(SEL)action;
- (SEL)action;


- (void)setEnabled:(BOOL)enabled;
- (BOOL)isEnabled;


- (void)setImage:(NSImage*)image;
- (NSImage *)image;


- (void)setView:(NSView *)view;
- (NSView *)view;


- (void)setMinSize:(NSSize)size;
- (NSSize)minSize;


- (void)setMaxSize:(NSSize)size;
- (NSSize)maxSize;




enum {
   NSToolbarItemVisibilityPriorityStandard = 0,
   NSToolbarItemVisibilityPriorityLow = -1000,
   NSToolbarItemVisibilityPriorityHigh = 1000,
   NSToolbarItemVisibilityPriorityUser = 2000
};

- (void)setVisibilityPriority:(NSInteger)visibilityPriority;
- (NSInteger)visibilityPriority;






- (void)validate;




- (void)setAutovalidates:(BOOL)resistance;
- (BOOL)autovalidates;







- (BOOL)allowsDuplicatesInToolbar;


@end


@interface NSObject (NSToolbarItemValidation)
- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem;


@end




extern "C" NSString *NSToolbarSeparatorItemIdentifier;
extern "C" NSString *NSToolbarSpaceItemIdentifier;
extern "C" NSString *NSToolbarFlexibleSpaceItemIdentifier;

extern "C" NSString *NSToolbarShowColorsItemIdentifier;
extern "C" NSString *NSToolbarShowFontsItemIdentifier;
extern "C" NSString *NSToolbarCustomizeToolbarItemIdentifier;
extern "C" NSString *NSToolbarPrintItemIdentifier;
# 147 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindowScripting.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSWindowScripting.h" 3
@class NSCloseCommand;
@class NSScriptCommand;

@interface NSWindow(NSScripting)


- (BOOL)hasCloseBox;
- (BOOL)hasTitleBar;
- (BOOL)isFloatingPanel;
- (BOOL)isMiniaturizable;
- (BOOL)isModalPanel;
- (BOOL)isResizable;
- (BOOL)isZoomable;
- (NSInteger)orderedIndex;


- (void)setIsMiniaturized:(BOOL)flag;
- (void)setIsVisible:(BOOL)flag;
- (void)setIsZoomed:(BOOL)flag;
- (void)setOrderedIndex:(NSInteger)index;


- (id)handleCloseScriptCommand:(NSCloseCommand *)command;
- (id)handlePrintScriptCommand:(NSScriptCommand *)command;
- (id)handleSaveScriptCommand:(NSScriptCommand *)command;

@end
# 148 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSStepper.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSStepper.h" 3
@interface NSStepper : NSControl {
  @private
    unsigned int _reserved1;
    unsigned int _reserved2;
    unsigned int _reserved3;
    unsigned int _reserved4;
}

- (double)minValue;
- (void)setMinValue:(double)minValue;

- (double)maxValue;
- (void)setMaxValue:(double)maxValue;

- (double)increment;
- (void)setIncrement:(double)increment;

- (BOOL)valueWraps;
- (void)setValueWraps:(BOOL)valueWraps;

- (BOOL)autorepeat;
- (void)setAutorepeat:(BOOL)autorepeat;

@end
# 149 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSStepperCell.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSStepperCell.h" 3
@interface NSStepperCell : NSActionCell {
  @private
    double _value;
    double _minValue;
    double _maxValue;
    double _increment;
    struct {
        unsigned int valueWraps:1;
        unsigned int autorepeat:1;
        unsigned int drawing:1;
        unsigned int reserved:29;
    } _stFlags;
    unsigned int _reserved1;
    unsigned int _reserved2;
    unsigned int _reserved3;
    unsigned int _reserved4;
}

- (double)minValue;
- (void)setMinValue:(double)minValue;

- (double)maxValue;
- (void)setMaxValue:(double)maxValue;

- (double)increment;
- (void)setIncrement:(double)increment;

- (BOOL)valueWraps;
- (void)setValueWraps:(BOOL)valueWraps;

- (BOOL)autorepeat;
- (void)setAutorepeat:(BOOL)autorepeat;

@end
# 150 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSGlyphInfo.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSGlyphInfo.h" 3
enum {
    NSIdentityMappingCharacterCollection = 0,
    NSAdobeCNS1CharacterCollection = 1,
    NSAdobeGB1CharacterCollection = 2,
    NSAdobeJapan1CharacterCollection = 3,
    NSAdobeJapan2CharacterCollection = 4,
    NSAdobeKorea1CharacterCollection = 5,
};
typedef NSUInteger NSCharacterCollection;

@interface NSGlyphInfo : NSObject <NSCopying, NSCoding> {
    NSString *_baseString;
}


+ (NSGlyphInfo *)glyphInfoWithGlyphName:(NSString *)glyphName forFont:(NSFont *)font baseString:(NSString *)theString;


+ (NSGlyphInfo *)glyphInfoWithGlyph:(NSGlyph)glyph forFont:(NSFont *)font baseString:(NSString *)theString;


+ (NSGlyphInfo *)glyphInfoWithCharacterIdentifier:(NSUInteger)cid collection:(NSCharacterCollection)characterCollection baseString:(NSString *)theString;


- (NSString *)glyphName;


- (NSUInteger)characterIdentifier;


- (NSCharacterCollection)characterCollection;
@end
# 151 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSShadow.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSShadow.h" 3
@class NSColor;



@interface NSShadow : NSObject <NSCopying, NSCoding> {

    NSUInteger _shadowFlags;
    NSSize _shadowOffset;
    CGFloat _shadowBlurRadius;
    NSColor *_shadowColor;
    CGFloat _reservedFloat[3];
    void *_reserved;
}

- (id)init;

- (NSSize)shadowOffset;
- (void)setShadowOffset:(NSSize)offset;

- (CGFloat)shadowBlurRadius;
- (void)setShadowBlurRadius:(CGFloat)val;

- (NSColor *)shadowColor;
- (void)setShadowColor:(NSColor *)color;

- (void)set;

@end
# 152 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSATSTypesetter.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTypesetter.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSTypesetter.h" 3
enum {
    NSTypesetterZeroAdvancementAction = (1 << 0),
    NSTypesetterWhitespaceAction = (1 << 1),
    NSTypesetterHorizontalTabAction = (1 << 2),
    NSTypesetterLineBreakAction = (1 << 3),
    NSTypesetterParagraphBreakAction = (1 << 4),
    NSTypesetterContainerBreakAction = (1 << 5)
};
typedef NSUInteger NSTypesetterControlCharacterAction;


@interface NSTypesetter : NSObject {



    unsigned _reserved[2];

}






- (BOOL)usesFontLeading;
- (void)setUsesFontLeading:(BOOL)flag;



- (NSTypesetterBehavior)typesetterBehavior;
- (void)setTypesetterBehavior:(NSTypesetterBehavior)behavior;



- (float)hyphenationFactor;
- (void)setHyphenationFactor:(float)factor;




- (CGFloat)lineFragmentPadding;
- (void)setLineFragmentPadding:(CGFloat)padding;


- (NSFont *)substituteFontForFont:(NSFont *)originalFont;




- (NSTextTab *)textTabForGlyphLocation:(CGFloat)glyphLocation writingDirection:(NSWritingDirection)direction maxLocation:(CGFloat)maxLocation;




- (BOOL)bidiProcessingEnabled;
- (void)setBidiProcessingEnabled:(BOOL)flag;


- (void)setAttributedString:(NSAttributedString *)attrString;
- (NSAttributedString *)attributedString;
- (void)setParagraphGlyphRange:(NSRange)paragraphRange separatorGlyphRange:(NSRange)paragraphSeparatorRange;
- (NSRange)paragraphGlyphRange;
- (NSRange)paragraphSeparatorGlyphRange;
- (NSRange)paragraphCharacterRange;
- (NSRange)paragraphSeparatorCharacterRange;




- (NSUInteger)layoutParagraphAtPoint:(NSPointPointer)lineFragmentOrigin;


- (void)beginParagraph;
- (void)endParagraph;
- (void)beginLineWithGlyphAtIndex:(NSUInteger)glyphIndex;
- (void)endLineWithGlyphRange:(NSRange)lineGlyphRange;


- (CGFloat)lineSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(NSRect)rect;
- (CGFloat)paragraphSpacingBeforeGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(NSRect)rect;
- (CGFloat)paragraphSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(NSRect)rect;




- (void)getLineFragmentRect:(NSRectPointer)lineFragmentRect usedRect:(NSRectPointer)lineFragmentUsedRect forParagraphSeparatorGlyphRange:(NSRange)paragraphSeparatorGlyphRange atProposedOrigin:(NSPoint)lineOrigin;




- (NSDictionary *)attributesForExtraLineFragment;




- (NSTypesetterControlCharacterAction)actionForControlCharacterAtIndex:(NSUInteger)charIndex;



- (NSLayoutManager *)layoutManager;
- (NSArray *)textContainers;
- (NSTextContainer *)currentTextContainer;
- (NSParagraphStyle *)currentParagraphStyle;



- (void)setHardInvalidation:(BOOL)flag forGlyphRange:(NSRange)glyphRange;




- (void)layoutGlyphsInLayoutManager:(NSLayoutManager *)layoutManager startingAtGlyphIndex:(NSUInteger)startGlyphIndex maxNumberOfLineFragments:(NSUInteger)maxNumLines nextGlyphIndex:(NSUInteger *)nextGlyph;



+ (NSSize)printingAdjustmentInLayoutManager:(NSLayoutManager *)layoutMgr forNominallySpacedGlyphRange:(NSRange)nominallySpacedGlyphsRange packedGlyphs:(const unsigned char *)packedGlyphs count:(NSUInteger)packedGlyphsCount;

- (CGFloat)baselineOffsetInLayoutManager:(NSLayoutManager *)layoutMgr glyphIndex:(NSUInteger)glyphIndex;



+ (id)sharedSystemTypesetter;

+ (id)sharedSystemTypesetterForBehavior:(NSTypesetterBehavior)theBehavior;
+ (NSTypesetterBehavior)defaultTypesetterBehavior;

@end



@interface NSTypesetter (NSLayoutPhaseInterface)

- (void)willSetLineFragmentRect:(NSRectPointer)lineRect forGlyphRange:(NSRange)glyphRange usedRect:(NSRectPointer)usedRect baselineOffset:(CGFloat *)baselineOffset;

- (BOOL)shouldBreakLineByWordBeforeCharacterAtIndex:(NSUInteger)charIndex;
- (BOOL)shouldBreakLineByHyphenatingBeforeCharacterAtIndex:(NSUInteger)charIndex;

- (float)hyphenationFactorForGlyphAtIndex:(NSUInteger)glyphIndex;
- (UTF32Char)hyphenCharacterForGlyphAtIndex:(NSUInteger)glyphIndex;

- (NSRect)boundingBoxForControlGlyphAtIndex:(NSUInteger)glyphIndex forTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(NSRect)proposedRect glyphPosition:(NSPoint)glyphPosition characterIndex:(NSUInteger)charIndex;
@end


@interface NSTypesetter (NSGlyphStorageInterface)

- (NSRange)characterRangeForGlyphRange:(NSRange)glyphRange actualGlyphRange:(NSRangePointer)actualGlyphRange;
- (NSRange)glyphRangeForCharacterRange:(NSRange)charRange actualCharacterRange:(NSRangePointer)actualCharRange;


- (NSUInteger)getGlyphsInRange:(NSRange)glyphsRange glyphs:(NSGlyph *)glyphBuffer characterIndexes:(NSUInteger *)charIndexBuffer glyphInscriptions:(NSGlyphInscription *)inscribeBuffer elasticBits:(BOOL *)elasticBuffer bidiLevels:(unsigned char *)bidiLevelBuffer;




- (void)getLineFragmentRect:(NSRectPointer)lineFragmentRect usedRect:(NSRectPointer)lineFragmentUsedRect remainingRect:(NSRectPointer)remainingRect forStartingGlyphAtIndex:(NSUInteger)startingGlyphIndex proposedRect:(NSRect)proposedRect lineSpacing:(CGFloat)lineSpacing paragraphSpacingBefore:(CGFloat)paragraphSpacingBefore paragraphSpacingAfter:(CGFloat)paragraphSpacingAfter;


- (void)setLineFragmentRect:(NSRect)fragmentRect forGlyphRange:(NSRange)glyphRange usedRect:(NSRect)usedRect baselineOffset:(CGFloat)baselineOffset;
- (void)substituteGlyphsInRange:(NSRange)glyphRange withGlyphs:(NSGlyph *)glyphs;
- (void)insertGlyph:(NSGlyph)glyph atGlyphIndex:(NSUInteger)glyphIndex characterIndex:(NSUInteger)characterIndex;
- (void)deleteGlyphsInRange:(NSRange)glyphRange;
- (void)setNotShownAttribute:(BOOL)flag forGlyphRange:(NSRange)glyphRange;
- (void)setDrawsOutsideLineFragment:(BOOL)flag forGlyphRange:(NSRange)glyphRange;
- (void)setLocation:(NSPoint)location withAdvancements:(const CGFloat *)advancements forStartOfGlyphRange:(NSRange)glyphRange;
- (void)setAttachmentSize:(NSSize)attachmentSize forGlyphRange:(NSRange)glyphRange;
- (void)setBidiLevels:(const uint8_t *)levels forGlyphRange:(NSRange)glyphRange;
@end



# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSimpleHorizontalTypesetter.h" 1 3
# 17 "/System/Library/Frameworks/AppKit.framework/Headers/NSSimpleHorizontalTypesetter.h" 3
@class NSTextContainer;
@class NSTextStorage;
@class NSParagraphStyle;

typedef enum _NSLayoutStatus {
    NSLayoutNotDone = 0,
    NSLayoutDone,
    NSLayoutCantFit,
    NSLayoutOutOfGlyphs
} NSLayoutStatus;


typedef enum _NSGlyphLayoutMode {
    NSGlyphLayoutAtAPoint = 0,
    NSGlyphLayoutAgainstAPoint,
    NSGlyphLayoutWithPrevious
} NSGlyphLayoutMode;


typedef enum _NSLayoutDirection {
    NSLayoutLeftToRight = 0,
    NSLayoutRightToLeft
} NSLayoutDirection;





typedef NSPoint (*_NSPositionOfGlyphMethod)(NSFont *obj, SEL sel, NSGlyph cur, NSGlyph prev, BOOL *isNominal);



typedef struct _NSTypesetterGlyphInfo {
    NSPoint curLocation;
    float extent;
    float belowBaseline;
    float aboveBaseline;
    unsigned glyphCharacterIndex;
    NSFont *font;
    NSSize attachmentSize;
    struct {
 unsigned int defaultPositioning:1;
 unsigned int dontShow:1;
 unsigned int isAttachment:1;
    } _giflags;
} NSTypesetterGlyphInfo;







@interface NSSimpleHorizontalTypesetter : NSTypesetter {


    NSLayoutManager *layoutManager;
    NSTextStorage *textStorage;


    unsigned firstGlyphIndex;
    unsigned curGlyphIndex;
    unsigned firstInvalidGlyphIndex;


    NSTypesetterGlyphInfo *glyphs;
    NSGlyph *glyphCache;
    NSGlyphInscription *glyphInscriptionCache;
    unsigned *glyphCharacterIndexCache;
    BOOL *glyphElasticCache;

    NSSize glyphLocationOffset;

    float curMaxGlyphLocation;
    unsigned lastFixedGlyphIndex;
    unsigned sizeOfGlyphInfo;


    NSGlyph curGlyph;
    NSGlyphInscription curGlyphInscription;
    unsigned curCharacterIndex;
@private
    unsigned previousGlyph;
    unsigned previousBaseGlyphIndex;
    unsigned previousBaseGlyph;
    NSFont *previousFont;
    float curGlyphOffset;
    BOOL curGlyphOffsetOutOfDate;
    BOOL curGlyphIsAControlGlyph;
    BOOL containerBreakAfterCurGlyph;
    BOOL wrapAfterCurGlyph;
    float curSpaceAfter;
    float previousSpaceAfter;
    NSGlyphLayoutMode glyphLayoutMode;
    float curGlyphExtentAboveLocation;
    float curGlyphExtentBelowLocation;
    NSLayoutDirection curLayoutDirection;
    NSTextAlignment curTextAlignment;


@public
    NSFont *curFont;
    NSRect curFontBoundingBox;
    BOOL curFontIsFixedPitch;
    NSPoint curFontAdvancement;
    _NSPositionOfGlyphMethod curFontPositionOfGlyphMethod;
@private
    NSDictionary *attrs;
    NSRange attrsRange;
    float curBaselineOffset;
    float curMinBaselineDistance;
    float curMaxBaselineDistance;
    int curSuperscript;
    NSParagraphStyle *curParaStyle;
    NSTextContainer *curContainer;
    unsigned curContainerIndex;
    float curContainerLineFragmentPadding;
    BOOL curContainerIsSimpleRectangular;
    NSSize curContainerSize;
    float curMinLineHeight;
    float curMaxLineHeight;


    NSString *textString;


    unsigned capacityOfGlyphs;

    BOOL busy;

    struct {
 unsigned _glyphPostLay:1;
 unsigned _fragPostLay:1;
 unsigned _useItal:1;
        unsigned _curFontIsDefaultFace:1;
        unsigned _tabState:2;
        unsigned _tabType:2;
        unsigned _tabEOL:1;
 unsigned reserved:23;
    } _tsFlags;

@public

    unsigned char *glyphBidiLevelCache;
    unsigned char curBidiLevel;

@private
    unsigned char previousBidiLevel;
    unsigned char _reservedChars[2];
    unsigned _reserved2[6];
}

+ (id)sharedInstance;



- (NSLayoutManager *)currentLayoutManager;
- (NSTextContainer *)currentContainer;
- (NSParagraphStyle *)currentParagraphStyle;
- (NSTextStorage *)currentTextStorage;
- (NSTypesetterGlyphInfo *)baseOfTypesetterGlyphInfo;
- (NSUInteger)sizeOfTypesetterGlyphInfo;
- (NSUInteger)capacityOfTypesetterGlyphInfo;
- (NSUInteger)firstGlyphIndexOfCurrentLineFragment;



- (void)layoutGlyphsInLayoutManager:(NSLayoutManager *)layoutManager startingAtGlyphIndex:(NSUInteger)startGlyphIndex maxNumberOfLineFragments:(NSUInteger)maxNumLines nextGlyphIndex:(NSUInteger *)nextGlyph;



- (NSLayoutStatus)layoutGlyphsInHorizontalLineFragment:(NSRect *)lineFragmentRect baseline:(float *)baseline;



- (void)clearGlyphCache;
- (void)fillAttributesCache;
- (void)clearAttributesCache;



- (NSUInteger)growGlyphCaches:(NSUInteger)desiredCapacity fillGlyphInfo:(BOOL)fillGlyphInfo;



- (void)updateCurGlyphOffset;



- (void)insertGlyph:(NSGlyph)glyph atGlyphIndex:(NSUInteger)glyphIndex characterIndex:(NSUInteger)charIndex;

- (NSLayoutStatus)layoutControlGlyphForLineFragment:(NSRect)lineFrag;
- (void)layoutTab;

- (void)breakLineAtIndex:(NSUInteger)location;
- (NSUInteger)glyphIndexToBreakLineByHyphenatingWordAtIndex:(NSUInteger)charIndex;
- (NSUInteger)glyphIndexToBreakLineByWordWrappingAtIndex:(NSUInteger)charIndex;
- (void)layoutTab;
- (NSLayoutStatus)layoutControlGlyphForLineFragment:(NSRect)lineFrag;

- (void)fullJustifyLineAtGlyphIndex:(NSUInteger)glyphIndexForLineBreak;

@end



@interface NSSimpleHorizontalTypesetter(NSTypesetterSubclassExtensions)



- (void)typesetterLaidOneGlyph:(NSTypesetterGlyphInfo *)gl;



- (void) willSetLineFragmentRect:(NSRect *)aRect forGlyphRange:(NSRange)aRange usedRect:(NSRect *)bRect;

@end
# 186 "/System/Library/Frameworks/AppKit.framework/Headers/NSTypesetter.h" 2 3
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSATSTypesetter.h" 2 3



@interface NSATSTypesetter : NSTypesetter {

    NSAttributedString *attributedString;

    NSRange paragraphGlyphRange;

    NSRange paragraphSeparatorGlyphRange;

    CGFloat lineFragmentPadding;


    NSLayoutManager *layoutManager;
    NSArray *textContainers;


    NSTextContainer *currentTextContainer;
    NSUInteger currentTextContainerIndex;
    NSSize currentTextContainerSize;


    NSParagraphStyle *currentParagraphStyle;

@private
    void *_atsReserved[8];
    id _private;
}


+ (id)sharedTypesetter;
@end


@interface NSATSTypesetter (NSPantherCompatibility)


- (NSRect)lineFragmentRectForProposedRect:(NSRect)proposedRect remainingRect:(NSRectPointer)remainingRect;
@end





@interface NSATSTypesetter (NSPrimitiveInterface)


- (BOOL)usesFontLeading;
- (void)setUsesFontLeading:(BOOL)flag;
- (NSTypesetterBehavior)typesetterBehavior;
- (void)setTypesetterBehavior:(NSTypesetterBehavior)behavior;
- (float)hyphenationFactor;
- (void)setHyphenationFactor:(float)factor;


- (CGFloat)lineFragmentPadding;
- (void)setLineFragmentPadding:(CGFloat)padding;


- (NSFont *)substituteFontForFont:(NSFont *)originalFont;


- (NSTextTab *)textTabForGlyphLocation:(CGFloat)glyphLocation writingDirection:(NSWritingDirection)direction maxLocation:(CGFloat)maxLocation;


- (BOOL)bidiProcessingEnabled;
- (void)setBidiProcessingEnabled:(BOOL)flag;


- (void)setAttributedString:(NSAttributedString *)attrString;
- (NSAttributedString *)attributedString;
- (void)setParagraphGlyphRange:(NSRange)paragraphRange separatorGlyphRange:(NSRange)paragraphSeparatorRange;
- (NSRange)paragraphGlyphRange;
- (NSRange)paragraphSeparatorGlyphRange;


- (NSUInteger)layoutParagraphAtPoint:(NSPoint *)lineFragmentOrigin;


- (CGFloat)lineSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(NSRect)rect;
- (CGFloat)paragraphSpacingBeforeGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(NSRect)rect;
- (CGFloat)paragraphSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(NSRect)rect;




- (NSLayoutManager *)layoutManager;
- (NSTextContainer *)currentTextContainer;


- (void)setHardInvalidation:(BOOL)flag forGlyphRange:(NSRange)glyphRange;



- (void)getLineFragmentRect:(NSRect *)lineFragmentRect usedRect:(NSRect *)lineFragmentUsedRect forParagraphSeparatorGlyphRange:(NSRange)paragraphSeparatorGlyphRange atProposedOrigin:(NSPoint)lineOrigin;
@end


@interface NSATSTypesetter (NSLayoutPhaseInterface)

- (void)willSetLineFragmentRect:(NSRect *)lineRect forGlyphRange:(NSRange)glyphRange usedRect:(NSRect *)usedRect baselineOffset:(CGFloat *)baselineOffset;

- (BOOL)shouldBreakLineByWordBeforeCharacterAtIndex:(NSUInteger)charIndex;
- (BOOL)shouldBreakLineByHyphenatingBeforeCharacterAtIndex:(NSUInteger)charIndex;

- (float)hyphenationFactorForGlyphAtIndex:(NSUInteger)glyphIndex;
- (UTF32Char)hyphenCharacterForGlyphAtIndex:(NSUInteger)glyphIndex;

- (NSRect)boundingBoxForControlGlyphAtIndex:(NSUInteger)glyphIndex forTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(NSRect)proposedRect glyphPosition:(NSPoint)glyphPosition characterIndex:(NSUInteger)charIndex;
@end


@interface NSATSTypesetter (NSGlyphStorageInterface)

- (NSRange)characterRangeForGlyphRange:(NSRange)glyphRange actualGlyphRange:(NSRangePointer)actualGlyphRange;
- (NSRange)glyphRangeForCharacterRange:(NSRange)charRange actualCharacterRange:(NSRangePointer)actualCharRange;


- (NSUInteger)getGlyphsInRange:(NSRange)glyphsRange glyphs:(NSGlyph *)glyphBuffer characterIndexes:(NSUInteger *)charIndexBuffer glyphInscriptions:(NSGlyphInscription *)inscribeBuffer elasticBits:(BOOL *)elasticBuffer;


- (void)setLineFragmentRect:(NSRect)fragmentRect forGlyphRange:(NSRange)glyphRange usedRect:(NSRect)usedRect baselineOffset:(CGFloat)baselineOffset;
- (void)substituteGlyphsInRange:(NSRange)glyphRange withGlyphs:(NSGlyph *)glyphs;
- (void)insertGlyph:(NSGlyph)glyph atGlyphIndex:(NSUInteger)glyphIndex characterIndex:(NSUInteger)characterIndex;
- (void)deleteGlyphsInRange:(NSRange)glyphRange;
- (void)setNotShownAttribute:(BOOL)flag forGlyphRange:(NSRange)glyphRange;
- (void)setDrawsOutsideLineFragment:(BOOL)flag forGlyphRange:(NSRange)glyphRange;
- (void)setLocation:(NSPoint)location withAdvancements:(const CGFloat *)advancements forStartOfGlyphRange:(NSRange)glyphRange;
- (void)setAttachmentSize:(NSSize)attachmentSize forGlyphRange:(NSRange)glyphRange;
- (void)setBidiLevels:(const uint8_t *)levels forGlyphRange:(NSRange)glyphRange;
@end
# 153 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSearchField.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSSearchField.h" 3
@interface NSSearchField : NSTextField {
  @private
    unsigned int _reserved1;
    unsigned int _reserved2;
    unsigned int _reserved3;
    unsigned int _reserved4;
}

- (void) setRecentSearches:(NSArray*)searches;
- (NSArray*) recentSearches;


- (void) setRecentsAutosaveName:(NSString*)string;
- (NSString*) recentsAutosaveName;


@end
# 155 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSSearchFieldCell.h" 1 3
# 26 "/System/Library/Frameworks/AppKit.framework/Headers/NSSearchFieldCell.h" 3
@class NSButtonCell, NSMenu, NSMutableArray, NSTimer;

@interface NSSearchFieldCell : NSTextFieldCell {
  @private
    struct __sfFlags {
 unsigned int sendsWholeSearchString:1;
 unsigned int maximumRecents:8;
 unsigned int cancelVisible:1;
 unsigned int drawSize:2;
 unsigned int disableText:1;
 unsigned int menuTracking:1;
 unsigned int deferredUpdate:1;
 unsigned int sendsImmediately:1;
 unsigned int reserved:16;
    } _sfFlags;
    NSButtonCell* _searchButtonCell;
    NSButtonCell* _cancelButtonCell;
    NSMenu* _searchMenuTemplate;
    NSString* _recentsAutosaveName;
    NSMutableArray* _recentSearches;
    NSMenu* _searchMenu;
    NSTimer* _partialStringTimer;
    unsigned int _reserved1;
    unsigned int _reserved2;
    unsigned int _reserved3;
    unsigned int _reserved4;
}

- (NSButtonCell*) searchButtonCell;
- (void) setSearchButtonCell:(NSButtonCell*)cell;


- (NSButtonCell*) cancelButtonCell;
- (void) setCancelButtonCell:(NSButtonCell*)cell;


- (void) resetSearchButtonCell;
- (void) resetCancelButtonCell;


- (NSRect) searchTextRectForBounds:(NSRect)rect;
- (NSRect) searchButtonRectForBounds:(NSRect)rect;
- (NSRect) cancelButtonRectForBounds:(NSRect)rect;


- (void) setSearchMenuTemplate:(NSMenu*)menu;
- (NSMenu*)searchMenuTemplate;


- (void) setSendsWholeSearchString:(BOOL)flag;
- (BOOL) sendsWholeSearchString;


- (void) setMaximumRecents:(NSInteger)maxRecents;
- (NSInteger) maximumRecents;


- (void) setRecentSearches:(NSArray*)searches;
- (NSArray*) recentSearches;


- (void) setRecentsAutosaveName:(NSString*)string;
- (NSString*) recentsAutosaveName;



- (BOOL) sendsSearchStringImmediately;
- (void) setSendsSearchStringImmediately:(BOOL)flag;


@end
# 156 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSController.h" 1 3







# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSKeyValueBinding.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSKeyValueBinding.h" 3
@class NSArray, NSDictionary, NSString;

extern "C" id NSMultipleValuesMarker;
extern "C" id NSNoSelectionMarker;
extern "C" id NSNotApplicableMarker;

extern "C" BOOL NSIsControllerMarker(id object);


extern "C" NSString *NSObservedObjectKey ;
extern "C" NSString *NSObservedKeyPathKey ;
extern "C" NSString *NSOptionsKey ;

@interface NSObject (NSKeyValueBindingCreation)

+ (void)exposeBinding:(NSString *)binding;
- (NSArray *)exposedBindings;
- (Class)valueClassForBinding:(NSString *)binding;



- (void)bind:(NSString *)binding toObject:(id)observable withKeyPath:(NSString *)keyPath options:(NSDictionary *)options;
- (void)unbind:(NSString *)binding;




- (NSDictionary *)infoForBinding:(NSString *)binding;


@end

@interface NSObject (NSPlaceholders)

+ (void)setDefaultPlaceholder:(id)placeholder forMarker:(id)marker withBinding:(NSString *)binding;
+ (id)defaultPlaceholderForMarker:(id)marker withBinding:(NSString *)binding;

@end


@interface NSObject (NSEditorRegistration)

- (void)objectDidBeginEditing:(id)editor;
- (void)objectDidEndEditing:(id)editor;

@end


@interface NSObject (NSEditor)

- (void)discardEditing;
- (BOOL)commitEditing;
# 74 "/System/Library/Frameworks/AppKit.framework/Headers/NSKeyValueBinding.h" 3
- (void)commitEditingWithDelegate:(id)delegate didCommitSelector:(SEL)didCommitSelector contextInfo:(void *)contextInfo;



@end


extern "C" NSString *NSAlignmentBinding ;
extern "C" NSString *NSAlternateImageBinding ;
extern "C" NSString *NSAlternateTitleBinding ;
extern "C" NSString *NSAnimateBinding ;
extern "C" NSString *NSAnimationDelayBinding ;
extern "C" NSString *NSArgumentBinding ;
extern "C" NSString *NSAttributedStringBinding ;
extern "C" NSString *NSContentArrayBinding ;
extern "C" NSString *NSContentArrayForMultipleSelectionBinding ;
extern "C" NSString *NSContentBinding ;
extern "C" NSString *NSContentDictionaryBinding ;
extern "C" NSString *NSContentHeightBinding ;
extern "C" NSString *NSContentObjectBinding ;
extern "C" NSString *NSContentObjectsBinding ;
extern "C" NSString *NSContentSetBinding ;
extern "C" NSString *NSContentValuesBinding ;
extern "C" NSString *NSContentWidthBinding ;
extern "C" NSString *NSCriticalValueBinding ;
extern "C" NSString *NSDataBinding ;
extern "C" NSString *NSDisplayPatternTitleBinding ;
extern "C" NSString *NSDisplayPatternValueBinding ;
extern "C" NSString *NSDocumentEditedBinding ;
extern "C" NSString *NSDoubleClickArgumentBinding ;
extern "C" NSString *NSDoubleClickTargetBinding ;
extern "C" NSString *NSEditableBinding ;
extern "C" NSString *NSEnabledBinding ;
extern "C" NSString *NSExcludedKeysBinding ;
extern "C" NSString *NSFilterPredicateBinding ;
extern "C" NSString *NSFontBinding ;
extern "C" NSString *NSFontBoldBinding ;
extern "C" NSString *NSFontFamilyNameBinding ;
extern "C" NSString *NSFontItalicBinding ;
extern "C" NSString *NSFontNameBinding ;
extern "C" NSString *NSFontSizeBinding ;
extern "C" NSString *NSHeaderTitleBinding ;
extern "C" NSString *NSHiddenBinding ;
extern "C" NSString *NSImageBinding ;
extern "C" NSString *NSIncludedKeysBinding ;
extern "C" NSString *NSInitialKeyBinding ;
extern "C" NSString *NSInitialValueBinding ;
extern "C" NSString *NSIsIndeterminateBinding ;
extern "C" NSString *NSLabelBinding ;
extern "C" NSString *NSLocalizedKeyDictionaryBinding ;
extern "C" NSString *NSManagedObjectContextBinding ;
extern "C" NSString *NSMaximumRecentsBinding ;
extern "C" NSString *NSMaxValueBinding ;
extern "C" NSString *NSMaxWidthBinding ;
extern "C" NSString *NSMinValueBinding ;
extern "C" NSString *NSMinWidthBinding ;
extern "C" NSString *NSMixedStateImageBinding ;
extern "C" NSString *NSOffStateImageBinding ;
extern "C" NSString *NSOnStateImageBinding ;
extern "C" NSString *NSPredicateBinding ;
extern "C" NSString *NSRecentSearchesBinding ;
extern "C" NSString *NSRepresentedFilenameBinding ;
extern "C" NSString *NSRowHeightBinding ;
extern "C" NSString *NSSelectedIdentifierBinding ;
extern "C" NSString *NSSelectedIndexBinding ;
extern "C" NSString *NSSelectedLabelBinding ;
extern "C" NSString *NSSelectedObjectBinding ;
extern "C" NSString *NSSelectedObjectsBinding ;
extern "C" NSString *NSSelectedTagBinding ;
extern "C" NSString *NSSelectedValueBinding ;
extern "C" NSString *NSSelectedValuesBinding ;
extern "C" NSString *NSSelectionIndexesBinding ;
extern "C" NSString *NSSelectionIndexPathsBinding ;
extern "C" NSString *NSSortDescriptorsBinding ;
extern "C" NSString *NSTargetBinding ;
extern "C" NSString *NSTextColorBinding ;
extern "C" NSString *NSTitleBinding ;
extern "C" NSString *NSToolTipBinding ;
extern "C" NSString *NSValueBinding ;
extern "C" NSString *NSValuePathBinding ;
extern "C" NSString *NSValueURLBinding ;
extern "C" NSString *NSVisibleBinding ;
extern "C" NSString *NSWarningValueBinding ;
extern "C" NSString *NSWidthBinding ;


extern "C" NSString *NSAllowsEditingMultipleValuesSelectionBindingOption ;
extern "C" NSString *NSAllowsNullArgumentBindingOption ;
extern "C" NSString *NSAlwaysPresentsApplicationModalAlertsBindingOption ;
extern "C" NSString *NSConditionallySetsEditableBindingOption ;
extern "C" NSString *NSConditionallySetsEnabledBindingOption ;
extern "C" NSString *NSConditionallySetsHiddenBindingOption ;
extern "C" NSString *NSContinuouslyUpdatesValueBindingOption ;
extern "C" NSString *NSCreatesSortDescriptorBindingOption ;
extern "C" NSString *NSDeletesObjectsOnRemoveBindingsOption ;
extern "C" NSString *NSDisplayNameBindingOption ;
extern "C" NSString *NSDisplayPatternBindingOption ;
extern "C" NSString *NSContentPlacementTagBindingOption ;
extern "C" NSString *NSHandlesContentAsCompoundValueBindingOption ;
extern "C" NSString *NSInsertsNullPlaceholderBindingOption ;
extern "C" NSString *NSInvokesSeparatelyWithArrayObjectsBindingOption ;
extern "C" NSString *NSMultipleValuesPlaceholderBindingOption ;
extern "C" NSString *NSNoSelectionPlaceholderBindingOption ;
extern "C" NSString *NSNotApplicablePlaceholderBindingOption ;
extern "C" NSString *NSNullPlaceholderBindingOption ;
extern "C" NSString *NSRaisesForNotApplicableKeysBindingOption ;
extern "C" NSString *NSPredicateFormatBindingOption ;
extern "C" NSString *NSSelectorNameBindingOption ;
extern "C" NSString *NSSelectsAllWhenSettingContentBindingOption ;
extern "C" NSString *NSValidatesImmediatelyBindingOption ;
extern "C" NSString *NSValueTransformerNameBindingOption ;
extern "C" NSString *NSValueTransformerBindingOption ;
# 9 "/System/Library/Frameworks/AppKit.framework/Headers/NSController.h" 2 3




@class NSMutableArray, NSMutableDictionary, NSMutableSet;

@interface NSController : NSObject <NSCoding> {
@private
    void *_reserved;
    void *_reserved2;
    int _specialPurposeType;
    id _bindingAdaptor;
    NSMutableArray *_editors;
    NSMutableArray *_declaredKeys;
    NSMutableDictionary *_dependentKeyToModelKeyTable;
    NSMutableDictionary *_modelKeyToDependentKeyTable;
    NSMutableArray *_modelKeysToRefreshEachTime;
    struct __bindingsControllerFlags {
        unsigned int _alwaysPresentsApplicationModalAlerts:1;
        unsigned int _refreshesAllModelKeys:1;
        unsigned int _multipleObservedModelObjects:1;
        unsigned int _isEditing:1;
        unsigned int _reservedController:28;
    } _bindingsControllerFlags;
    NSMutableDictionary *_reservedOther;
@protected
    id _modelObservingTracker;
    id _expectedObservingInfo;
    id _singleValueAccessor;
}

- (void)objectDidBeginEditing:(id)editor;
- (void)objectDidEndEditing:(id)editor;
- (void)discardEditing;
- (BOOL)commitEditing;
- (void)commitEditingWithDelegate:(id)delegate didCommitSelector:(SEL)didCommitSelector contextInfo:(void *)contextInfo;
- (BOOL)isEditing;

@end
# 157 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSObjectController.h" 1 3
# 10 "/System/Library/Frameworks/AppKit.framework/Headers/NSObjectController.h" 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSFetchRequest.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSFetchRequest.h" 3
@class NSArray;
@class NSEntityDescription;
@class NSManagedObjectModel;
@class NSPredicate;
@class NSString;

@interface NSFetchRequest : NSObject <NSCoding, NSCopying> {
@private
 void *_reserved;
 void *_reserved2;
 void *_reserved3;
 void *_reserved4;
    NSEntityDescription *_entity;
    NSPredicate *_predicate;
    NSArray *_sortDescriptors;
    unsigned int _inUseCounter;
    unsigned int _fetchLimit;
    NSArray *_affectedStores;
    NSArray *_relationshipKeyPathsForPrefetching;
    struct _fetchRequestFlags {
        unsigned int autoDistinct:1;
        unsigned int includesSubentities:1;
        unsigned int includesPropertyValues:1;
        unsigned int resultType:3;
        unsigned int returnsObjectsAsFaults:1;
        unsigned int _RESERVED:25;
    } _flags;
}

- (NSEntityDescription *)entity;
- (void)setEntity:(NSEntityDescription *)entity;

- (NSPredicate *)predicate;
- (void)setPredicate:(NSPredicate *)predicate;

- (NSArray *)sortDescriptors;
- (void)setSortDescriptors:(NSArray *)sortDescriptors;

- (NSUInteger)fetchLimit;
- (void)setFetchLimit:(NSUInteger)limit;

- (NSArray *)affectedStores;
- (void)setAffectedStores:(NSArray *)stores;





enum {
    NSManagedObjectResultType = 0x00,
    NSManagedObjectIDResultType = 0x01,
};
typedef NSUInteger NSFetchRequestResultType;




- (NSFetchRequestResultType)resultType;
- (void)setResultType:(NSFetchRequestResultType)type;




- (BOOL)includesSubentities;
- (void)setIncludesSubentities:(BOOL)yesNo;




- (BOOL)includesPropertyValues;
- (void)setIncludesPropertyValues:(BOOL)yesNo;




- (BOOL)returnsObjectsAsFaults;
- (void)setReturnsObjectsAsFaults:(BOOL)yesNo;




- (NSArray *)relationshipKeyPathsForPrefetching;
- (void)setRelationshipKeyPathsForPrefetching:(NSArray *)keys;



@end
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSObjectController.h" 2 3



@class NSArray, NSPredicate, NSManagedObjectContext, NSError;

@interface NSObjectController : NSController {
@private
    void *_reserved3;
    id _managedProxy;
    struct __objectControllerFlags {
        unsigned int _editable:1;
        unsigned int _automaticallyPreparesContent:1;
        unsigned int _hasLoadedData:1;
        unsigned int _explicitlyCannotAdd:1;
        unsigned int _explicitlyCannotRemove:1;
        unsigned int _isUsingManagedProxy:1;
        unsigned int _hasFetched:1;
        unsigned int _reservedObjectController:25;
    } _objectControllerFlags;
    NSString *_objectClassName;
    Class _objectClass;
    NSArray *_contentObjectArray;
@protected
    id _content;
    id _objectHandler;
}

- (id)initWithContent:(id)content;

- (void)setContent:(id)content;
- (id)content;

- (id)selection;
- (NSArray *)selectedObjects;

- (void)setAutomaticallyPreparesContent:(BOOL)flag;
- (BOOL)automaticallyPreparesContent;
- (void)prepareContent;

- (void)setObjectClass:(Class)objectClass;
- (Class)objectClass;
- (id)newObject;
- (void)addObject:(id)object;
- (void)removeObject:(id)object;

- (void)setEditable:(BOOL)flag;
- (BOOL)isEditable;
- (void)add:(id)sender;
- (BOOL)canAdd;
- (void)remove:(id)sender;
- (BOOL)canRemove;
- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item;

@end



@interface NSObjectController (NSManagedController)

- (NSManagedObjectContext *)managedObjectContext;
- (void)setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext;

- (NSString *)entityName;
- (void)setEntityName:(NSString *)entityName;
- (NSPredicate *)fetchPredicate;
- (void)setFetchPredicate:(NSPredicate *)predicate;

- (BOOL)fetchWithRequest:(NSFetchRequest *)fetchRequest merge:(BOOL)merge error:(NSError **)error;

- (void)fetch:(id)sender;

@end
# 158 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSArrayController.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSArrayController.h" 3
@class NSArray, NSIndexSet, NSMutableArray, NSMutableIndexSet;

@interface NSArrayController : NSObjectController {
@private
 void *_reserved4;
    void *_reserved5;
 id _rearrangementExtensions;
    NSMutableArray *_temporaryWorkObjects;
    struct __arrayControllerFlags {
        unsigned int _avoidsEmptySelection:1;
        unsigned int _preservesSelection:1;
        unsigned int _selectsInsertedObjects:1;
        unsigned int _alwaysUsesMultipleValuesMarker:1;
        unsigned int _refreshesAllModelObjects:1;
        unsigned int _filterRestrictsInsertion:1;
        unsigned int _overridesArrangeObjects:1;
        unsigned int _overridesDidChangeArrangementCriteria:1;
        unsigned int _explicitlyCannotInsert:1;
        unsigned int _generatedEmptyArray:1;
        unsigned int _isObservingKeyPathsThroughArrangedObjects:1;
        unsigned int _arrangedObjectsIsMutable:1;
        unsigned int _clearsFilterPredicateOnInsertion:1;
        unsigned int _skipSortingAfterFetch:1;
        unsigned int _automaticallyRearrangesObjects:1;
        unsigned int _reservedArrayController:17;
    } _arrayControllerFlags;
    NSUInteger _observedIndexHint;
    NSMutableIndexSet *_selectionIndexes;
    NSMutableArray *_objects;
    NSArray *_selectedObjects;
    NSArray *_arrangedObjects;
}

- (void)rearrangeObjects;


- (void)setAutomaticallyRearrangesObjects:(BOOL)flag;
- (BOOL)automaticallyRearrangesObjects;

- (NSArray *)automaticRearrangementKeyPaths;
- (void)didChangeArrangementCriteria;


- (void)setSortDescriptors:(NSArray *)sortDescriptors;
- (NSArray *)sortDescriptors;


- (void)setFilterPredicate:(NSPredicate *)filterPredicate;
- (NSPredicate *)filterPredicate;



- (void)setClearsFilterPredicateOnInsertion:(BOOL)flag;
- (BOOL)clearsFilterPredicateOnInsertion;


- (NSArray *)arrangeObjects:(NSArray *)objects;
- (id)arrangedObjects;

- (void)setAvoidsEmptySelection:(BOOL)flag;
- (BOOL)avoidsEmptySelection;
- (void)setPreservesSelection:(BOOL)flag;
- (BOOL)preservesSelection;
- (void)setSelectsInsertedObjects:(BOOL)flag;
- (BOOL)selectsInsertedObjects;




- (void)setAlwaysUsesMultipleValuesMarker:(BOOL)flag;
- (BOOL)alwaysUsesMultipleValuesMarker;




- (BOOL)setSelectionIndexes:(NSIndexSet *)indexes;
- (NSIndexSet *)selectionIndexes;
- (BOOL)setSelectionIndex:(NSUInteger)index;
- (NSUInteger)selectionIndex;
- (BOOL)addSelectionIndexes:(NSIndexSet *)indexes;
- (BOOL)removeSelectionIndexes:(NSIndexSet *)indexes;

- (BOOL)setSelectedObjects:(NSArray *)objects;
- (NSArray *)selectedObjects;
- (BOOL)addSelectedObjects:(NSArray *)objects;
- (BOOL)removeSelectedObjects:(NSArray *)objects;

- (void)add:(id)sender;
- (void)remove:(id)sender;
- (void)insert:(id)sender;
- (BOOL)canInsert;
- (void)selectNext:(id)sender;
- (void)selectPrevious:(id)sender;
- (BOOL)canSelectNext;
- (BOOL)canSelectPrevious;

- (void)addObject:(id)object;
- (void)addObjects:(NSArray *)objects;
- (void)insertObject:(id)object atArrangedObjectIndex:(NSUInteger)index;
- (void)insertObjects:(NSArray *)objects atArrangedObjectIndexes:(NSIndexSet *)indexes;
- (void)removeObjectAtArrangedObjectIndex:(NSUInteger)index;
- (void)removeObjectsAtArrangedObjectIndexes:(NSIndexSet *)indexes;
- (void)removeObject:(id)object;
- (void)removeObjects:(NSArray *)objects;

@end
# 159 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDictionaryController.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSDictionaryController.h" 3
@class NSDictionary;





@interface NSObject (NSDictionaryControllerKeyValuePair)

- (void)setLocalizedKey:(NSString *)localizedKey;
- (NSString *)localizedKey;
- (void)setKey:(NSString *)key;
- (NSString *)key;
- (void)setValue:(id)value;
- (id)value;
- (BOOL)isExplicitlyIncluded;

@end

@interface NSDictionaryController : NSArrayController {
@private
    void *_reserved6;
    void *_reserved7;
    void *_reserved8;
 id _contentDictionary;
 NSString *_initialKey;
 id _initialValue;
 NSUInteger _minimumInsertionKeyIndex;
 NSString *_localizedKeyStringsFileName;
 NSDictionary *_localizedKeyForKeyDictionary;
 NSDictionary *_keyForLocalizedKeyDictionary;
 NSArray *_includedKeys;
 NSArray *_excludedKeys;
    struct __dictionaryControllerFlags {
        unsigned int _deepCopiesValues:1;
        unsigned int _suppressBuildingDictionary:1;
        unsigned int _reservedDictionaryController:30;
    } _dictionaryControllerFlags;
}

- (id)newObject;


- (void)setInitialKey:(NSString *)key;
- (NSString *)initialKey;
- (void)setInitialValue:(id)value;
- (id)initialValue;


- (void)setIncludedKeys:(NSArray *)keys;
- (NSArray *)includedKeys;
- (void)setExcludedKeys:(NSArray *)keys;
- (NSArray *)excludedKeys;


- (void)setLocalizedKeyDictionary:(NSDictionary *)dictionary;
- (NSDictionary *)localizedKeyDictionary;
- (void)setLocalizedKeyTable:(NSString *)stringsFileName;
- (NSString *)localizedKeyTable;

@end
# 160 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTreeNode.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSTreeNode.h" 3
@class NSArray, NSMutableArray, NSIndexPath, NSTreeController;

@interface NSTreeNode : NSObject {
    id _childNodesProxy;
    id _representedObject;
    id _reserved1;
    id _reserved2;
    NSMutableArray *_childNodes;
    NSTreeNode *_parentNode;
        struct __NSTreeNodeFlags {
            unsigned int ignoreObserving:1;
            unsigned int reserved:31;
        } _NSTreeNodeFlags;
}

+ (id)treeNodeWithRepresentedObject:(id)modelObject;
- (id)initWithRepresentedObject:(id)modelObject;

- (id)representedObject;


- (NSIndexPath *)indexPath;
- (BOOL)isLeaf;

- (NSArray *)childNodes;
- (NSMutableArray *)mutableChildNodes;
- (NSTreeNode *)descendantNodeAtIndexPath:(NSIndexPath *)indexPath;

- (NSTreeNode *)parentNode;


- (void)sortWithSortDescriptors:(NSArray *)sortDescriptors recursively:(BOOL)recursively;

@end
# 161 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTreeController.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSTreeController.h" 3
@class NSTreeNode;




@interface NSTreeController : NSObjectController {
    void *_treeControllerReserved1;
    NSArray *_modeObservingKeyPaths;
    void *_observedIndexPathHint;
    id _arrangedObjects;
    id _rootNode;
    id _selectionIndexPaths;
    struct __treeControllerFlags {
        unsigned int _avoidsEmptySelection:1;
        unsigned int _preservesSelection:1;
        unsigned int _selectsInsertedObjects:1;
        unsigned int _explicitlyCannotInsert:1;
        unsigned int _explicitlyCannotInsertChild:1;
        unsigned int _explicitlyCannotAddChild:1;
        unsigned int _alwaysUsesMultipleValuesMarker:1;
        unsigned int _reservedTreeController:25;
    } _treeControllerFlags;
    NSArray *_selectedObjects;
    NSString *_childrenKeyPath;
    NSString *_countKeyPath;
    NSString *_leafKeyPath;
    NSArray *_sortDescriptors;
}

- (void)rearrangeObjects;


- (id)arrangedObjects;

- (void)setChildrenKeyPath:(NSString *)keyPath;
- (NSString *)childrenKeyPath;
- (void)setCountKeyPath:(NSString *)keyPath;
- (NSString *)countKeyPath;
- (void)setLeafKeyPath:(NSString *)keyPath;
- (NSString *)leafKeyPath;

- (void)setSortDescriptors:(NSArray *)sortDescriptors;
- (NSArray *)sortDescriptors;

- (id)content;
- (void)setContent:(id)content;

- (void)add:(id)sender;
- (void)remove:(id)sender;
- (void)addChild:(id)sender;
- (void)insert:(id)sender;
- (void)insertChild:(id)sender;

- (BOOL)canInsert;
- (BOOL)canInsertChild;
- (BOOL)canAddChild;

- (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath;
- (void)insertObjects:(NSArray *)objects atArrangedObjectIndexPaths:(NSArray *)indexPaths;
- (void)removeObjectAtArrangedObjectIndexPath:(NSIndexPath *)indexPath;
- (void)removeObjectsAtArrangedObjectIndexPaths:(NSArray *)indexPaths;


- (void)setAvoidsEmptySelection:(BOOL)flag;
- (BOOL)avoidsEmptySelection;
- (void)setPreservesSelection:(BOOL)flag;
- (BOOL)preservesSelection;
- (void)setSelectsInsertedObjects:(BOOL)flag;
- (BOOL)selectsInsertedObjects;
- (void)setAlwaysUsesMultipleValuesMarker:(BOOL)flag;
- (BOOL)alwaysUsesMultipleValuesMarker;



- (NSArray *)selectedObjects;

- (BOOL)setSelectionIndexPaths:(NSArray *)indexPaths;
- (NSArray *)selectionIndexPaths;
- (BOOL)setSelectionIndexPath:(NSIndexPath *)indexPath;
- (NSIndexPath *)selectionIndexPath;
- (BOOL)addSelectionIndexPaths:(NSArray *)indexPaths;
- (BOOL)removeSelectionIndexPaths:(NSArray *)indexPaths;


- (NSArray *)selectedNodes;

- (void)moveNode:(NSTreeNode *)node toIndexPath:(NSIndexPath *)indexPath;
- (void)moveNodes:(NSArray *)nodes toIndexPath:(NSIndexPath *)startingIndexPath;

- (NSString *)childrenKeyPathForNode:(NSTreeNode *)node;
- (NSString *)countKeyPathForNode:(NSTreeNode *)node;
- (NSString *)leafKeyPathForNode:(NSTreeNode *)node;



@end
# 162 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSUserDefaultsController.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSUserDefaultsController.h" 3
@class NSDictionary, NSUserDefaults;

@interface NSUserDefaultsController : NSController {
@private
 void *_reserved3;
 void *_reserved4;
    NSUserDefaults *_defaults;
    NSMutableDictionary *_valueBuffer;
    NSDictionary *_initialValues;
    struct __userDefaultsControllerFlags {
        unsigned int _sharedInstance:1;
        unsigned int _appliesImmediately:1;
        unsigned int _reservedUserDefaultsController:30;
    } _userDefaultsControllerFlags;
}

+ (id)sharedUserDefaultsController;

- (id)initWithDefaults:(NSUserDefaults *)defaults initialValues:(NSDictionary *)initialValues;

- (NSUserDefaults *)defaults;
- (void)setInitialValues:(NSDictionary *)initialValues;
- (NSDictionary *)initialValues;

- (void)setAppliesImmediately:(BOOL)flag;
- (BOOL)appliesImmediately;


- (BOOL)hasUnappliedChanges;


- (id)values;

- (void)revert:(id)sender;
- (void)save:(id)sender;
- (void)revertToInitialValues:(id)sender;

@end
# 163 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextList.h" 1 3
# 12 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextList.h" 3
enum {
    NSTextListPrependEnclosingMarker = (1 << 0)
};

@interface NSTextList : NSObject <NSCoding, NSCopying> {

    NSString *_markerFormat;
    NSUInteger _listFlags;
    void *_listPrimary;
    void *_listSecondary;
}

- (id)initWithMarkerFormat:(NSString *)format options:(NSUInteger)mask;
- (NSString *)markerFormat;
- (NSUInteger)listOptions;
- (NSString *)markerForItemNumber:(NSInteger)itemNum;

@end
# 165 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextTable.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSTextTable.h" 3
@class NSTextTable;
@class NSLayoutManager;
@class NSTextContainer;




enum {
    NSTextBlockAbsoluteValueType = 0,
    NSTextBlockPercentageValueType = 1
};
typedef NSUInteger NSTextBlockValueType;


enum {
    NSTextBlockWidth = 0,
    NSTextBlockMinimumWidth = 1,
    NSTextBlockMaximumWidth = 2,
    NSTextBlockHeight = 4,
    NSTextBlockMinimumHeight = 5,
    NSTextBlockMaximumHeight = 6
};
typedef NSUInteger NSTextBlockDimension;


enum {
    NSTextBlockPadding = -1,
    NSTextBlockBorder = 0,
    NSTextBlockMargin = 1
};
typedef NSInteger NSTextBlockLayer;


enum {
    NSTextBlockTopAlignment = 0,
    NSTextBlockMiddleAlignment = 1,
    NSTextBlockBottomAlignment = 2,
    NSTextBlockBaselineAlignment = 3
};
typedef NSUInteger NSTextBlockVerticalAlignment;


enum {
    NSTextTableAutomaticLayoutAlgorithm = 0,
    NSTextTableFixedLayoutAlgorithm = 1
};
typedef NSUInteger NSTextTableLayoutAlgorithm;


@interface NSTextBlock : NSObject <NSCoding, NSCopying> {

    void *_propVals;
    NSUInteger _propMask;
    NSUInteger _typeMask;
    id _primParamVal;
    id _otherParamVals;
    void *_blockPrimary;
    void *_blockSecondary;
}

- (id)init;


- (void)setValue:(CGFloat)val type:(NSTextBlockValueType)type forDimension:(NSTextBlockDimension)dimension;
- (CGFloat)valueForDimension:(NSTextBlockDimension)dimension;
- (NSTextBlockValueType)valueTypeForDimension:(NSTextBlockDimension)dimension;


- (void)setContentWidth:(CGFloat)val type:(NSTextBlockValueType)type;
- (CGFloat)contentWidth;
- (NSTextBlockValueType)contentWidthValueType;


- (void)setWidth:(CGFloat)val type:(NSTextBlockValueType)type forLayer:(NSTextBlockLayer)layer edge:(NSRectEdge)edge;
- (void)setWidth:(CGFloat)val type:(NSTextBlockValueType)type forLayer:(NSTextBlockLayer)layer;
- (CGFloat)widthForLayer:(NSTextBlockLayer)layer edge:(NSRectEdge)edge;
- (NSTextBlockValueType)widthValueTypeForLayer:(NSTextBlockLayer)layer edge:(NSRectEdge)edge;


- (void)setVerticalAlignment:(NSTextBlockVerticalAlignment)alignment;
- (NSTextBlockVerticalAlignment)verticalAlignment;


- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;
- (void)setBorderColor:(NSColor *)color forEdge:(NSRectEdge)edge;
- (void)setBorderColor:(NSColor *)color;
- (NSColor *)borderColorForEdge:(NSRectEdge)edge;


- (NSRect)rectForLayoutAtPoint:(NSPoint)startingPoint inRect:(NSRect)rect textContainer:(NSTextContainer *)textContainer characterRange:(NSRange)charRange;
- (NSRect)boundsRectForContentRect:(NSRect)contentRect inRect:(NSRect)rect textContainer:(NSTextContainer *)textContainer characterRange:(NSRange)charRange;


- (void)drawBackgroundWithFrame:(NSRect)frameRect inView:(NSView *)controlView characterRange:(NSRange)charRange layoutManager:(NSLayoutManager *)layoutManager;

@end


@interface NSTextTableBlock : NSTextBlock {
    NSTextTable *_table;
    NSInteger _rowNum;
    NSInteger _colNum;
    NSInteger _rowSpan;
    NSInteger _colSpan;
    void *_tableBlockPrimary;
    void *_tableBlockSecondary;
}

- (id)initWithTable:(NSTextTable *)table startingRow:(NSInteger)row rowSpan:(NSInteger)rowSpan startingColumn:(NSInteger)col columnSpan:(NSInteger)colSpan;


- (NSTextTable *)table;
- (NSInteger)startingRow;
- (NSInteger)rowSpan;
- (NSInteger)startingColumn;
- (NSInteger)columnSpan;

@end


@interface NSTextTable : NSTextBlock {
    NSUInteger _numCols;
    NSUInteger _tableFlags;
    id _lcache;
    void *_tablePrimary;
    void *_tableSecondary;
}


- (NSUInteger)numberOfColumns;
- (void)setNumberOfColumns:(NSUInteger)numCols;
- (NSTextTableLayoutAlgorithm)layoutAlgorithm;
- (void)setLayoutAlgorithm:(NSTextTableLayoutAlgorithm)algorithm;
- (BOOL)collapsesBorders;
- (void)setCollapsesBorders:(BOOL)flag;
- (BOOL)hidesEmptyCells;
- (void)setHidesEmptyCells:(BOOL)flag;


- (NSRect)rectForBlock:(NSTextTableBlock *)block layoutAtPoint:(NSPoint)startingPoint inRect:(NSRect)rect textContainer:(NSTextContainer *)textContainer characterRange:(NSRange)charRange;
- (NSRect)boundsRectForBlock:(NSTextTableBlock *)block contentRect:(NSRect)contentRect inRect:(NSRect)rect textContainer:(NSTextContainer *)textContainer characterRange:(NSRange)charRange;
- (void)drawBackgroundForBlock:(NSTextTableBlock *)block withFrame:(NSRect)frameRect inView:(NSView *)controlView characterRange:(NSRange)charRange layoutManager:(NSLayoutManager *)layoutManager;

@end
# 166 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDatePickerCell.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSDatePickerCell.h" 3
enum {
    NSTextFieldAndStepperDatePickerStyle = 0,
    NSClockAndCalendarDatePickerStyle = 1,
    NSTextFieldDatePickerStyle = 2
};
typedef NSUInteger NSDatePickerStyle;

enum {
    NSSingleDateMode = 0,
    NSRangeDateMode = 1
};
typedef NSUInteger NSDatePickerMode;

typedef NSUInteger NSDatePickerElementFlags;
enum {

    NSHourMinuteDatePickerElementFlag = 0x000c,
    NSHourMinuteSecondDatePickerElementFlag = 0x000e,
    NSTimeZoneDatePickerElementFlag = 0x0010,


    NSYearMonthDatePickerElementFlag = 0x00c0,
    NSYearMonthDayDatePickerElementFlag = 0x00e0,
    NSEraDatePickerElementFlag = 0x0100,
};

@class NSCalendar, NSLocale, NSTimeZone;

@interface NSDatePickerCell : NSActionCell
{
@private
    NSTimeInterval _timeInterval;
    NSDate *_minDate;
    NSDate *_maxDate;
    struct __dateCellFlags {
 unsigned int elements:16;
 unsigned int controlStyle:3;
 unsigned int controlMode:2;
        unsigned int trackingHand:2;
        unsigned int displayedMonth:4;
 unsigned int drawsBackground:1;
        unsigned int digitsEntered:2;
 unsigned int reserved:2;
    } _dcFlags;
    id _delegate;
    NSCalendar *_calendar;
    NSLocale *_locale;
    NSTimeZone *_timeZone;
    NSColor *_backgroundColor;
    NSColor *_textColor;
    int _indexOfSelectedSubfield;
    int _displayedYear;
    id _reserved1;
    id _reserved2;
    id _reserved3;
    id _reserved4;
}

#pragma mark *** Appearance Control ***

- (NSDatePickerStyle)datePickerStyle;
- (void)setDatePickerStyle:(NSDatePickerStyle)newStyle;

- (BOOL)drawsBackground;
- (void)setDrawsBackground:(BOOL)flag;

- (NSColor *)backgroundColor;
- (void)setBackgroundColor:(NSColor *)color;

- (NSColor *)textColor;
- (void)setTextColor:(NSColor *)color;

#pragma mark *** Range Mode Control ***

- (NSDatePickerMode)datePickerMode;
- (void)setDatePickerMode:(NSDatePickerMode)newMode;

#pragma mark *** Date Presentation Control ***

- (NSDatePickerElementFlags)datePickerElements;
- (void)setDatePickerElements:(NSDatePickerElementFlags)elementFlags;

- (NSCalendar *)calendar;
- (void)setCalendar:(NSCalendar *)newCalendar;

- (NSLocale *)locale;
- (void)setLocale:(NSLocale *)newLocale;

- (NSTimeZone *)timeZone;
- (void)setTimeZone:(NSTimeZone *)newTimeZone;

#pragma mark *** Object Value Access ***

- (NSDate *)dateValue;
- (void)setDateValue:(NSDate *)newStartDate;

- (NSTimeInterval)timeInterval;
- (void)setTimeInterval:(NSTimeInterval)newTimeInterval;

#pragma mark *** Constraints on Displayable/Selectable Range ***

- (NSDate *)minDate;
- (void)setMinDate:(NSDate *)date;

- (NSDate *)maxDate;
- (void)setMaxDate:(NSDate *)date;

#pragma mark *** Delegate ***

- (id)delegate;
- (void)setDelegate:(id)anObject;

@end

@interface NSObject (NSDatePickerCellDelegate)
- (void)datePickerCell:(NSDatePickerCell *)aDatePickerCell validateProposedDateValue:(NSDate **)proposedDateValue timeInterval:(NSTimeInterval *)proposedTimeInterval;
@end
# 167 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSDatePicker.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSDatePicker.h" 3
@class NSCalendar, NSLocale, NSTimeZone;

@interface NSDatePicker : NSControl
{
}

#pragma mark *** Appearance Control ***

- (NSDatePickerStyle)datePickerStyle;
- (void)setDatePickerStyle:(NSDatePickerStyle)newStyle;

- (BOOL)isBezeled;
- (void)setBezeled:(BOOL)flag;

- (BOOL)isBordered;
- (void)setBordered:(BOOL)flag;

- (BOOL)drawsBackground;
- (void)setDrawsBackground:(BOOL)flag;

- (NSColor *)backgroundColor;
- (void)setBackgroundColor:(NSColor *)color;

- (NSColor *)textColor;
- (void)setTextColor:(NSColor *)color;

#pragma mark *** Range Mode Control ***

- (NSDatePickerMode)datePickerMode;
- (void)setDatePickerMode:(NSDatePickerMode)newMode;

#pragma mark *** Date Presentation Control ***

- (NSDatePickerElementFlags)datePickerElements;
- (void)setDatePickerElements:(NSDatePickerElementFlags)elementFlags;

- (NSCalendar *)calendar;
- (void)setCalendar:(NSCalendar *)newCalendar;

- (NSLocale *)locale;
- (void)setLocale:(NSLocale *)newLocale;

- (NSTimeZone *)timeZone;
- (void)setTimeZone:(NSTimeZone *)newTimeZone;

#pragma mark *** Object Value Access ***

- (NSDate *)dateValue;
- (void)setDateValue:(NSDate *)newStartDate;

- (NSTimeInterval)timeInterval;
- (void)setTimeInterval:(NSTimeInterval)newTimeInterval;

#pragma mark *** Constraints on Displayable/Selectable Range ***

- (NSDate *)minDate;
- (void)setMinDate:(NSDate *)date;

- (NSDate *)maxDate;
- (void)setMaxDate:(NSDate *)date;

#pragma mark *** Delegate ***

- (id)delegate;
- (void)setDelegate:(id)anObject;

@end
# 168 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSLevelIndicatorCell.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSLevelIndicatorCell.h" 3
enum {
    NSRelevancyLevelIndicatorStyle,
    NSContinuousCapacityLevelIndicatorStyle,
    NSDiscreteCapacityLevelIndicatorStyle,
    NSRatingLevelIndicatorStyle
};
typedef NSUInteger NSLevelIndicatorStyle;

@interface NSLevelIndicatorCell : NSActionCell {
  @private
    double _value;
    double _minValue;
    double _maxValue;
    double _warningValue;
    double _criticalValue;
    int _numberOfTickMarks;
    int _numberOfMajorTickMarks;
    struct {
 unsigned int indicatorStyle:4;
        unsigned int tickMarkPosition:1;
 unsigned int reserved:27;
    } _liFlags;
    NSRect _cellFrame;
    int _reserved1;
    int _reserved2;
    int _reserved3;
    int _reserved4;
}

- (id)initWithLevelIndicatorStyle:(NSLevelIndicatorStyle)levelIndicatorStyle;

- (NSLevelIndicatorStyle)levelIndicatorStyle;
- (void)setLevelIndicatorStyle:(NSLevelIndicatorStyle)levelIndicatorStyle;

- (double)minValue;
- (void)setMinValue:(double)minValue;

- (double)maxValue;
- (void)setMaxValue:(double)maxValue;

- (double)warningValue;
- (void)setWarningValue:(double)warningValue;

- (double)criticalValue;
- (void)setCriticalValue:(double)criticalValue;

- (void)setTickMarkPosition:(NSTickMarkPosition)position;
- (NSTickMarkPosition)tickMarkPosition;

- (void)setNumberOfTickMarks:(NSInteger)count;
- (NSInteger)numberOfTickMarks;

- (void)setNumberOfMajorTickMarks:(NSInteger)count;
- (NSInteger)numberOfMajorTickMarks;

- (NSRect)rectOfTickMarkAtIndex:(NSInteger)index;
- (double)tickMarkValueAtIndex:(NSInteger)index;

- (void)setImage:(NSImage*)image;

@end
# 169 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSLevelIndicator.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSLevelIndicator.h" 3
@interface NSLevelIndicator : NSControl {
}

- (double)minValue;
- (void)setMinValue:(double)minValue;

- (double)maxValue;
- (void)setMaxValue:(double)maxValue;

- (double)warningValue;
- (void)setWarningValue:(double)warningValue;

- (double)criticalValue;
- (void)setCriticalValue:(double)criticalValue;

- (NSTickMarkPosition)tickMarkPosition;
- (void)setTickMarkPosition:(NSTickMarkPosition)position;

- (NSInteger)numberOfTickMarks;
- (void)setNumberOfTickMarks:(NSInteger)count;

- (NSInteger)numberOfMajorTickMarks;
- (void)setNumberOfMajorTickMarks:(NSInteger)count;

- (double)tickMarkValueAtIndex:(NSInteger)index;
- (NSRect)rectOfTickMarkAtIndex:(NSInteger)index;

@end
# 170 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3

# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPersistentDocument.h" 1 3
# 11 "/System/Library/Frameworks/AppKit.framework/Headers/NSPersistentDocument.h" 3
@class NSManagedObjectModel, NSManagedObjectContext;

@interface NSPersistentDocument : NSDocument {
@private
    NSManagedObjectModel *_managedObjectModel;
    NSManagedObjectContext *_managedObjectContext;
 id _store;
    void *_reserved;
    void *_reserved2;
    void *_reserved3;
    void *_reserved4;
}


- (NSManagedObjectContext *)managedObjectContext;
- (void)setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext;

- (id)managedObjectModel;




- (BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url ofType:(NSString *)fileType modelConfiguration:(NSString *)configuration storeOptions:(NSDictionary *)storeOptions error:(NSError **)error;



- (NSString *)persistentStoreTypeForFileType:(NSString *)fileType;

- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation originalContentsURL:(NSURL *)absoluteOriginalContentsURL error:(NSError **)error;

- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)error;

- (BOOL)revertToContentsOfURL:(NSURL *)inAbsoluteURL ofType:(NSString *)inTypeName error:(NSError **)outError;

@end

@interface NSPersistentDocument (NSPersistentDocumentDeprecated)

- (BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url ofType:(NSString *)fileType error:(NSError **)error;

@end
# 172 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSRuleEditor.h" 1 3
# 37 "/System/Library/Frameworks/AppKit.framework/Headers/NSRuleEditor.h" 3
@class NSMutableArray, NSIndexSet, NSView, NSPredicate, NSString, NSViewAnimation, NSTimer;

enum {
    NSRuleEditorNestingModeSingle,
    NSRuleEditorNestingModeList,
    NSRuleEditorNestingModeCompound,
    NSRuleEditorNestingModeSimple
};

typedef NSUInteger NSRuleEditorNestingMode;

enum {
    NSRuleEditorRowTypeSimple,
    NSRuleEditorRowTypeCompound
};

typedef NSUInteger NSRuleEditorRowType;

@interface NSRuleEditor : NSControl {
    @private
    id _ruleDataSource;
    id _ruleDelegate;

    NSIndexSet *_draggingRows;

    NSMutableArray *_rowCache;

    NSView *_slicesHolder;
    NSMutableArray *_slices;
    CGFloat _sliceHeight;
    CGFloat _alignmentGridWidth;
    NSInteger _subviewIndexOfDropLine;
    id _dropLineView;
    NSViewAnimation *_currentAnimation;

    NSTimer *_frameTimer;

    NSString *_stringsFileName;
    id _standardLocalizer;
    id _headerLocalizer;

    NSPredicate *_predicate;
    NSInteger _nestingMode;
    struct {
 unsigned elideUpdating:1;
 unsigned lastAlternateKeyValue:1;
 unsigned extendedDelegateCalls:1;
 unsigned editable:1;
 unsigned settingSize:1;
 unsigned suppressKeyDown:1;
 unsigned dropWasSuccessful:1;
 unsigned delegateWantsValidation:1;
 unsigned disallowEmpty:1;
 unsigned reserved:23;
    } _ruleEditorFlags;

    NSString *_typeKeyPath;
    NSString *_itemsKeyPath;
    NSString *_valuesKeyPath;
    NSString *_subrowsArrayKeyPath;

    Class _rowClass;

    id _boundArrayOwner;
    NSString *_boundArrayKeyPath;

    NSWindow *_oldWindow;

    NSInteger _lastRow;

    id _ruleReserved;
}




- (void)setDelegate:delegate;
- (id)delegate;


- (void)setFormattingStringsFilename:(NSString *)stringsFilename;
- (NSString *)formattingStringsFilename;


- (void)setFormattingDictionary:(NSDictionary *)dictionary;
- (NSDictionary *)formattingDictionary;


- (void)reloadCriteria;


- (void)setNestingMode:(NSRuleEditorNestingMode)mode;
- (NSRuleEditorNestingMode)nestingMode;


- (void)setRowHeight:(CGFloat)height;
- (CGFloat)rowHeight;


- (void)setEditable:(BOOL)editable;
- (BOOL)isEditable;


- (void)setCanRemoveAllRows:(BOOL)val;
- (BOOL)canRemoveAllRows;




- (NSPredicate *)predicate;


- (void)reloadPredicate;


- (NSPredicate *)predicateForRow:(NSInteger)row;




- (NSInteger)numberOfRows;


- (NSIndexSet *)subrowIndexesForRow:(NSInteger)rowIndex;


- (NSArray *)criteriaForRow:(NSInteger)row;


- (NSArray *)displayValuesForRow:(NSInteger)row;


- (NSInteger)rowForDisplayValue:(id)displayValue;


- (NSRuleEditorRowType)rowTypeForRow:(NSInteger)rowIndex;


- (NSInteger)parentRowForRow:(NSInteger)rowIndex;




- (void)addRow:(id)sender;


- (void)insertRowAtIndex:(NSInteger)rowIndex withType:(NSRuleEditorRowType)rowType asSubrowOfRow:(NSInteger)parentRow animate:(BOOL)shouldAnimate;


- (void)setCriteria:(NSArray *)criteria andDisplayValues:(NSArray *)values forRowAtIndex:(NSInteger)rowIndex;


- (void)removeRowAtIndex:(NSInteger)rowIndex;


- (void)removeRowsAtIndexes:(NSIndexSet *)rowIndexes includeSubrows:(BOOL)includeSubrows;


- (NSIndexSet *)selectedRowIndexes;


- (void)selectRowIndexes:(NSIndexSet *)indexes byExtendingSelection:(BOOL)extend;




- (void)setRowClass:(Class)rowClass;
- (Class)rowClass;


- (void)setRowTypeKeyPath:(NSString *)keyPath;
- (NSString *)rowTypeKeyPath;


- (void)setSubrowsKeyPath:(NSString *)keyPath;
- (NSString *)subrowsKeyPath;


- (void)setCriteriaKeyPath:(NSString *)keyPath;
- (NSString *)criteriaKeyPath;


- (void)setDisplayValuesKeyPath:(NSString *)keyPath;
- (NSString *)displayValuesKeyPath;




- (void)viewDidMoveToWindow;

@end


@interface NSObject (NSRuleEditorDelegateMethods)




- (NSInteger)ruleEditor:(NSRuleEditor *)editor numberOfChildrenForCriterion:(id)criterion withRowType:(NSRuleEditorRowType)rowType;


- (id)ruleEditor:(NSRuleEditor *)editor child:(NSInteger)index forCriterion:(id)criterion withRowType:(NSRuleEditorRowType)rowType;


- (id)ruleEditor:(NSRuleEditor *)editor displayValueForCriterion:(id)criterion inRow:(NSInteger)row;





- (NSDictionary *)ruleEditor:(NSRuleEditor *)editor predicatePartsForCriterion:(id)criterion withDisplayValue:(id)value inRow:(NSInteger)row;


- (void)ruleEditorRowsDidChange:(NSNotification *)notification;

@end



extern "C" NSString * const NSRuleEditorPredicateLeftExpression;
extern "C" NSString * const NSRuleEditorPredicateRightExpression;
extern "C" NSString * const NSRuleEditorPredicateComparisonModifier;
extern "C" NSString * const NSRuleEditorPredicateOptions;
extern "C" NSString * const NSRuleEditorPredicateOperatorType;
extern "C" NSString * const NSRuleEditorPredicateCustomSelector;

extern "C" NSString * const NSRuleEditorPredicateCompoundType;




extern "C" NSString *const NSRuleEditorRowsDidChangeNotification;
# 173 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPredicateEditor.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSPredicateEditor.h" 3
@class NSPredicateTemplate;

@interface NSPredicateEditor : NSRuleEditor {
    id _allTemplates;

    NSArray *_rootItems;
    NSArray *_rootHeaderItems;

    id _predicateTarget;
    SEL _predicateAction;

    struct {
 unsigned reserved:32;
    } _peFlags;

    id _predicateEditorReserved[3];
}



- (void)setRowTemplates:(NSArray *)rowTemplates;



- (NSArray *)rowTemplates;

@end
# 174 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPredicateEditorRowTemplate.h" 1 3
# 13 "/System/Library/Frameworks/AppKit.framework/Headers/NSPredicateEditorRowTemplate.h" 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSAttributeDescription.h" 1 3
# 10 "/System/Library/Frameworks/CoreData.framework/Headers/NSAttributeDescription.h" 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSPropertyDescription.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSPropertyDescription.h" 3
@class NSArray;
@class NSDictionary;
@class NSEntityDescription;
@class NSMutableArray;
@class NSMutableDictionary;
@class NSString;


@interface NSPropertyDescription : NSObject <NSCoding, NSCopying> {
@private
 void *_reserved;
 NSString *_versionHashModifier;
 NSData *_versionHash;
    NSEntityDescription *_entity;
    NSString *_name;
    NSArray *_validationPredicates;
    NSArray *_validationWarnings;
    struct __propertyDescriptionFlags {
        unsigned int _isReadOnly:1;
        unsigned int _isTransient:1;
        unsigned int _isOptional:1;
        unsigned int _isIndexed:1;
        unsigned int _reservedPropertyDescription:28;
    } _propertyDescriptionFlags;
    NSMutableDictionary *_mappings;
    NSMutableDictionary *_userInfo;
 long _entitysReferenceIDForProperty;
}

- (NSEntityDescription *)entity;

- (NSString *)name;
- (void)setName:(NSString *)name;


- (BOOL)isOptional;
- (void)setOptional:(BOOL)flag;


- (BOOL)isTransient;
- (void)setTransient:(BOOL)flag;


- (NSArray *)validationPredicates;
- (NSArray *)validationWarnings;
- (void)setValidationPredicates:(NSArray *)validationPredicates withValidationWarnings:(NSArray *)validationWarnings;

- (NSDictionary *)userInfo;
- (void)setUserInfo:(NSDictionary *)dictionary;





- (BOOL)isIndexed;
- (void)setIndexed:(BOOL)flag;



- (NSData *)versionHash;



- (NSString *)versionHashModifier;
- (void)setVersionHashModifier:(NSString *)modifierString;



@end
# 11 "/System/Library/Frameworks/CoreData.framework/Headers/NSAttributeDescription.h" 2 3

@class NSEntityDescription;
@class NSString;


 enum {
    NSUndefinedAttributeType = 0,
    NSInteger16AttributeType = 100,
    NSInteger32AttributeType = 200,
    NSInteger64AttributeType = 300,
    NSDecimalAttributeType = 400,
    NSDoubleAttributeType = 500,
    NSFloatAttributeType = 600,
    NSStringAttributeType = 700,
    NSBooleanAttributeType = 800,
    NSDateAttributeType = 900,
    NSBinaryDataAttributeType = 1000,



    NSTransformableAttributeType = 1800

};

typedef NSUInteger NSAttributeType;


@interface NSAttributeDescription : NSPropertyDescription {
@private
 Class _attributeValueClass;
 NSString *_valueTransformerName;
    NSAttributeType _type;
    NSString *_attributeValueClassName;
    struct __attributeDescriptionFlags {
        unsigned int _useForLocking:1;
        unsigned int _reservedAttributeDescription:31;
    } _attributeDescriptionFlags;
    id _defaultValue;
}


- (NSAttributeType)attributeType;
- (void)setAttributeType:(NSAttributeType)type;

- (NSString *)attributeValueClassName;
- (void)setAttributeValueClassName:(NSString *)className;

- (id)defaultValue;
- (void)setDefaultValue:(id)value;





- (NSData *)versionHash;



- (NSString *)valueTransformerName;
- (void)setValueTransformerName:(NSString *)string;



@end
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSPredicateEditorRowTemplate.h" 2 3

@class NSPredicate, NSArray, NSEntityDescription;

@interface NSPredicateEditorRowTemplate : NSObject <NSCoding, NSCopying> {
    @private
    NSInteger _templateType;
    NSUInteger _predicateOptions;
    NSUInteger _predicateModifier;
    NSUInteger _leftAttributeType;
    NSUInteger _rightAttributeType;
    NSArray *_views;

    struct {
 unsigned leftIsWildcard:1;
 unsigned rightIsWildcard:1;
 unsigned reserved:30;
    } _ptFlags;

    id _patternReserved;
}



- (double)matchForPredicate:(NSPredicate *)predicate;



- (NSArray *)templateViews;



- (void)setPredicate:(NSPredicate *)predicate;


- (NSPredicate *)predicateWithSubpredicates:(NSArray *)subpredicates;



- (NSArray *)displayableSubpredicatesOfPredicate:(NSPredicate *)predicate;



- (id)initWithLeftExpressions:(NSArray *)leftExpressions rightExpressions:(NSArray *)rightExpressions modifier:(NSComparisonPredicateModifier)modifier operators:(NSArray *)operators options:(NSUInteger)options;



- (id)initWithLeftExpressions:(NSArray *)leftExpressions rightExpressionAttributeType:(NSAttributeType)attributeType modifier:(NSComparisonPredicateModifier)modifier operators:(NSArray *)operators options:(NSUInteger)options;



- (id)initWithCompoundTypes:(NSArray *)compoundTypes;



- (NSArray *)leftExpressions;
- (NSArray *)rightExpressions;
- (NSAttributeType)rightExpressionAttributeType;
- (NSComparisonPredicateModifier)modifier;
- (NSArray *)operators;
- (NSUInteger)options;
- (NSArray *)compoundTypes;



+ (NSArray *)templatesWithAttributeKeyPaths:(NSArray *)keyPaths inEntityDescription:(NSEntityDescription *)entityDescription;

@end
# 175 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathCell.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathCell.h" 3
@class NSString, NSImage, NSMutableArray, NSArray, NSAnimation, NSPathComponentCell, NSURL, NSPopUpButtonCell, NSNotification, NSOpenPanel;
# 34 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathCell.h" 3
enum {


    NSPathStyleStandard,



    NSPathStyleNavigationBar,



    NSPathStylePopUp,
};

typedef NSInteger NSPathStyle;

@interface NSPathCell : NSActionCell {
@private
    NSColor *_backgroundColor;
    NSMutableArray *_borderColors;
    NSMutableArray *_cells;
    NSPathComponentCell *_clickedCell;
    NSPathComponentCell *_hoveredCell;
    NSPopUpButtonCell *_popUpButtonCell;
    NSRect _currentRect;
    NSAnimation *_animation;
    NSArray *_allowedTypes;
    SEL _doubleAction;
    id _delegate;
    struct {
        unsigned int reserved:32;
    } _piFlags;
    NSPathStyle _pathStyle;
    id _aux;
}



- (NSPathStyle)pathStyle;
- (void)setPathStyle:(NSPathStyle)style;



- (NSURL *)URL;
- (void)setURL:(NSURL *)url;



- (void)setObjectValue:(id <NSCopying>)obj;



- (NSArray *)allowedTypes;
- (void)setAllowedTypes:(NSArray *)allowedTypes;



- (id)delegate;
- (void)setDelegate:(id)value;



+ (Class)pathComponentCellClass;



- (NSArray *)pathComponentCells;



- (void)setPathComponentCells:(NSArray *)cells;



- (NSRect)rectOfPathComponentCell:(NSPathComponentCell *)cell withFrame:(NSRect)frame inView:(NSView *)view;



- (NSPathComponentCell *)pathComponentCellAtPoint:(NSPoint)point withFrame:(NSRect)frame inView:(NSView *)view;



- (NSPathComponentCell *)clickedPathComponentCell;



- (void)mouseEntered:(NSEvent *)event withFrame:(NSRect)frame inView:(NSView *)view;
- (void)mouseExited:(NSEvent *)event withFrame:(NSRect)frame inView:(NSView *)view;



- (SEL)doubleAction;
- (void)setDoubleAction:(SEL)action;



- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;



- (void)setPlaceholderString:(NSString *)string;
- (NSString *)placeholderString;

- (void)setPlaceholderAttributedString:(NSAttributedString *)string;
- (NSAttributedString *)placeholderAttributedString;


- (void)setControlSize:(NSControlSize)size;

@end

@protocol NSPathCellDelegate <NSObject>

@optional



- (void)pathCell:(NSPathCell *)pathCell willDisplayOpenPanel:(NSOpenPanel *)openPanel;



- (void)pathCell:(NSPathCell *)pathCell willPopUpMenu:(NSMenu *)menu;

@end
# 176 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathControl.h" 1 3
# 16 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathControl.h" 3
@class NSMutableArray, NSPathComponentCell, NSOpenPanel;
# 27 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathControl.h" 3
@interface NSPathControl : NSControl {
@private
    NSDragOperation _draggingSourceOperationMaskForLocal;
    NSDragOperation _draggingSourceOperationMaskForNonLocal;
    NSDragOperation _dropOperation;
    id _delegate;
    id _aux;
}




- (NSURL *)URL;
- (void)setURL:(NSURL *)url;

- (SEL)doubleAction;
- (void)setDoubleAction:(SEL)action;

- (NSPathStyle)pathStyle;
- (void)setPathStyle:(NSPathStyle)style;

- (NSPathComponentCell *)clickedPathComponentCell;

- (NSArray *)pathComponentCells;
- (void)setPathComponentCells:(NSArray *)cells;



- (void)setBackgroundColor:(NSColor *)color;
- (NSColor *)backgroundColor;



- (id)delegate;
- (void)setDelegate:(id)delegate;




- (void)setDraggingSourceOperationMask:(NSDragOperation)mask forLocal:(BOOL)isLocal;

@end


@protocol NSPathControlDelegate <NSObject>

@optional



- (BOOL)pathControl:(NSPathControl *)pathControl shouldDragPathComponentCell:(NSPathComponentCell *)pathComponentCell withPasteboard:(NSPasteboard *)pasteboard;





- (NSDragOperation)pathControl:(NSPathControl *)pathControl validateDrop:(id <NSDraggingInfo>)info;






- (BOOL)pathControl:(NSPathControl *)pathControl acceptDrop:(id <NSDraggingInfo>)info;






- (void)pathControl:(NSPathControl *)pathControl willDisplayOpenPanel:(NSOpenPanel *)openPanel;



- (void)pathControl:(NSPathControl *)pathControl willPopUpMenu:(NSMenu *)menu;

@end
# 177 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 1 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathComponentCell.h" 1 3
# 14 "/System/Library/Frameworks/AppKit.framework/Headers/NSPathComponentCell.h" 3
@class NSImage, NSString, NSURL;




@interface NSPathComponentCell : NSTextFieldCell {
@private
    NSImage *_image;

    CGFloat _fullWidth;

    CGFloat _resizedWidth;

    CGFloat _currentWidth;
    NSURL *_url;
    struct {
        unsigned int shouldDrawArrow:1;
        unsigned int drawsAsNavigationBar:1;
        unsigned int isFirstItem:1;
        unsigned int isLastItem:1;
        unsigned int reserved:28;
    } _flags;
    id _aux;
}



- (NSImage *)image;
- (void)setImage:(NSImage *)value;



- (NSURL *)URL;
- (void)setURL:(NSURL *)url;

@end
# 178 "/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h" 2 3
# 14 "/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 1 3
# 10 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/CoreDataDefines.h" 1 3
# 70 "/System/Library/Frameworks/CoreData.framework/Headers/CoreDataDefines.h" 3
extern "C" double NSCoreDataVersionNumber;
# 11 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/CoreDataErrors.h" 1 3
# 18 "/System/Library/Frameworks/CoreData.framework/Headers/CoreDataErrors.h" 3
extern "C" NSString * const NSDetailedErrorsKey;

extern "C" NSString * const NSValidationObjectErrorKey;
extern "C" NSString * const NSValidationKeyErrorKey;
extern "C" NSString * const NSValidationPredicateErrorKey;
extern "C" NSString * const NSValidationValueErrorKey;

extern "C" NSString * const NSAffectedStoresErrorKey;
extern "C" NSString * const NSAffectedObjectsErrorKey;


extern "C" NSString * const NSSQLiteErrorDomain;


enum {
    NSManagedObjectValidationError = 1550,
    NSValidationMultipleErrorsError = 1560,
    NSValidationMissingMandatoryPropertyError = 1570,
    NSValidationRelationshipLacksMinimumCountError = 1580,
    NSValidationRelationshipExceedsMaximumCountError = 1590,
    NSValidationRelationshipDeniedDeleteError = 1600,
    NSValidationNumberTooLargeError = 1610,
    NSValidationNumberTooSmallError = 1620,
    NSValidationDateTooLateError = 1630,
    NSValidationDateTooSoonError = 1640,
    NSValidationInvalidDateError = 1650,
    NSValidationStringTooLongError = 1660,
    NSValidationStringTooShortError = 1670,
    NSValidationStringPatternMatchingError = 1680,

    NSManagedObjectContextLockingError = 132000,
    NSPersistentStoreCoordinatorLockingError = 132010,

    NSManagedObjectReferentialIntegrityError = 133000,
    NSManagedObjectExternalRelationshipError = 133010,
    NSManagedObjectMergeError = 133020,

    NSPersistentStoreInvalidTypeError = 134000,
    NSPersistentStoreTypeMismatchError = 134010,
    NSPersistentStoreIncompatibleSchemaError = 134020,
    NSPersistentStoreSaveError = 134030,
    NSPersistentStoreIncompleteSaveError = 134040,


    NSCoreDataError = 134060,
    NSPersistentStoreOperationError = 134070,
    NSPersistentStoreOpenError = 134080,
    NSPersistentStoreTimeoutError = 134090,

    NSPersistentStoreIncompatibleVersionHashError = 134100,
    NSMigrationError = 134110,
    NSMigrationCancelledError = 134120,
    NSMigrationMissingSourceModelError = 134130,
    NSMigrationMissingMappingModelError = 134140,
    NSMigrationManagerSourceStoreError = 134150,
    NSMigrationManagerDestinationStoreError = 134160,
    NSEntityMigrationPolicyError = 134170,

    NSSQLiteError = 134180


};
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3


# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSEntityDescription.h" 1 3
# 13 "/System/Library/Frameworks/CoreData.framework/Headers/NSEntityDescription.h" 3
@class NSArray;
@class NSDictionary;
@class NSManagedObjectModel;
@class NSMutableDictionary;
@class NSString;
@class NSManagedObjectContext;
@class NSManagedObject;


@interface NSEntityDescription : NSObject <NSCoding, NSCopying, NSFastEnumeration> {
@private
 void *_reserved;
 void *_reserved2;
 NSString *_versionHashModifier;
 NSData *_versionHash;
    NSManagedObjectModel *_model;
    NSString *_classNameForEntity;
    Class _instanceClass;
    NSString *_name;
    NSEntityDescription *_rootentity;
    NSEntityDescription *_superentity;
    NSMutableDictionary *_subentities;
    NSMutableDictionary *_properties;
    id _propertyMapping;
    NSRange *_propertyRanges;
    struct __entityDescriptionFlags {
        unsigned int _isAbstract:1;
        unsigned int _shouldValidateOnSave:1;
        unsigned int _isImmutable:1;
        unsigned int _isFlattened:1;
        unsigned int _reservedEntityDescription:28;
    } _entityDescriptionFlags;
    NSMutableDictionary *_mappings;
    NSMutableDictionary *_userInfo;
    id _flattenedSubentities;
    id** _kvcPropertyAccessors;
    long _modelsReferenceIDForEntity;
}

+ (NSEntityDescription *)entityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;
+ (id)insertNewObjectForEntityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;

- (NSManagedObjectModel *)managedObjectModel;
- (NSString *)managedObjectClassName;
- (void)setManagedObjectClassName:(NSString *)name;

- (NSString *)name;
- (void)setName:(NSString *)name;

- (BOOL)isAbstract;
- (void)setAbstract:(BOOL)flag;
- (NSDictionary *)subentitiesByName;
- (NSArray *)subentities;
- (void)setSubentities:(NSArray *)array;
- (NSEntityDescription *)superentity;

- (NSDictionary *)propertiesByName;
- (NSArray *)properties;
- (void)setProperties:(NSArray *)properties;

- (NSDictionary *)userInfo;
- (void)setUserInfo:(NSDictionary *)dictionary;


- (NSDictionary *)attributesByName;
- (NSDictionary *)relationshipsByName;
- (NSArray *)relationshipsWithDestinationEntity:(NSEntityDescription *)entity;






- (BOOL)isKindOfEntity:(NSEntityDescription *)entity;



- (NSData *)versionHash;



- (NSString *)versionHashModifier;
- (void)setVersionHashModifier:(NSString *)modifierString;



@end
# 15 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSFetchedPropertyDescription.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSFetchedPropertyDescription.h" 3
@class NSFetchRequest;


@interface NSFetchedPropertyDescription : NSPropertyDescription {
@private
 void *_reserved5;
 void *_reserved6;
    NSFetchRequest *_fetchRequest;
    NSString *_lazyFetchRequestEntityName;
}


- (NSFetchRequest *)fetchRequest;
- (void)setFetchRequest:(NSFetchRequest *)fetchRequest;

@end
# 16 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3

# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSRelationshipDescription.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSRelationshipDescription.h" 3
@class NSEntityDescription;

 enum {
    NSNoActionDeleteRule,
    NSNullifyDeleteRule,
    NSCascadeDeleteRule,
    NSDenyDeleteRule
} ;

typedef NSUInteger NSDeleteRule;


@interface NSRelationshipDescription : NSPropertyDescription {
@private
 void *_reserved5;
 void *_reserved6;
    NSEntityDescription *_destinationEntity;
    NSString *_lazyDestinationEntityName;
    NSRelationshipDescription *_inverseRelationship;
    NSString *_lazyInverseRelationshipName;
    unsigned int _maxCount;
    unsigned int _minCount;
    NSDeleteRule _deleteRule;
}

- (NSEntityDescription *)destinationEntity;
- (void)setDestinationEntity:(NSEntityDescription *)entity;
- (NSRelationshipDescription *)inverseRelationship;
- (void)setInverseRelationship:(NSRelationshipDescription *)relationship;


- (NSUInteger)maxCount;
- (void)setMaxCount:(NSUInteger)maxCount;
- (NSUInteger)minCount;
- (void)setMinCount:(NSUInteger)minCount;

- (NSDeleteRule)deleteRule;
- (void)setDeleteRule:(NSDeleteRule)rule;

- (BOOL)isToMany;





- (NSData *)versionHash;



@end
# 18 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3

# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSFetchRequestExpression.h" 1 3
# 13 "/System/Library/Frameworks/CoreData.framework/Headers/NSFetchRequestExpression.h" 3
enum {
    NSFetchRequestExpressionType = 50
};

@interface NSFetchRequestExpression : NSExpression {
@private
    void* _reserved1;
    void* _reserved2;
    void* _reserved3;
    void* _reserved4;
    NSExpression* _fetchRequest;
    NSExpression* _managedObjectContext;
    struct _fetchExpressionFlags {
        unsigned int isCountOnly:1;
        unsigned int _RESERVED:31;
    } _flags;
}



+ (NSExpression*)expressionForFetch:(NSExpression*)fetch context:(NSExpression*)context countOnly:(BOOL)countFlag;




- (NSExpression *)requestExpression;




- (NSExpression *)contextExpression;




- (BOOL)isCountOnlyRequest;

@end
# 20 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectModel.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectModel.h" 3
@class NSArray;
@class NSDictionary;
@class NSEntityDescription;
@class NSFetchRequest;
@class NSMutableDictionary;
@class NSString;
@class NSURL;


@interface NSManagedObjectModel : NSObject <NSCoding, NSCopying, NSFastEnumeration> {
@private
 void *_reserved;
 void *_reserved2;
    id _localizationPolicy;
    NSMutableDictionary *_entities;
    NSMutableDictionary *_configurations;
    NSMutableDictionary *_fetchRequestTemplates;
 NSSet *_versionIdentifiers;
    struct __managedObjectModelFlags {
        unsigned int _isInUse:1;
        unsigned int _isImmutable:1;
        unsigned int _reservedEntityDescription:30;
    } _managedObjectModelFlags;
}

+ (NSManagedObjectModel *)mergedModelFromBundles:(NSArray *)bundles;

+ (NSManagedObjectModel *)modelByMergingModels:(NSArray *)models;

- (id)init;
- (id)initWithContentsOfURL:(NSURL *)url;

- (NSDictionary *)entitiesByName;
- (NSArray *)entities;
- (void)setEntities:(NSArray *)entities;

- (NSArray *)configurations;
- (NSArray *)entitiesForConfiguration:(NSString *)configuration;
- (void)setEntities:(NSArray *)entities forConfiguration:(NSString *)configuration;


- (void)setFetchRequestTemplate:(NSFetchRequest *)fetchRequestTemplate forName:(NSString *)name;
- (NSFetchRequest *)fetchRequestTemplateForName:(NSString *)name;
- (NSFetchRequest *)fetchRequestFromTemplateWithName:(NSString *)name substitutionVariables:(NSDictionary *)variables;
# 72 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectModel.h" 3
- (NSDictionary *)localizationDictionary;
- (void)setLocalizationDictionary:(NSDictionary *)localizationDictionary;





+ (NSManagedObjectModel *)mergedModelFromBundles:(NSArray *)bundles forStoreMetadata:(NSDictionary *)metadata;




+ (NSManagedObjectModel *)modelByMergingModels:(NSArray *)models forStoreMetadata:(NSDictionary *)metadata;




- (NSDictionary *)fetchRequestTemplatesByName;



- (NSSet *)versionIdentifiers;
- (void)setVersionIdentifiers:(NSSet *)identifiers;




- (BOOL)isConfiguration:(NSString *)configuration compatibleWithStoreMetadata:(NSDictionary *)metadata;




- (NSDictionary *)entityVersionHashesByName;



@end
# 21 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3

# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObject.h" 1 3
# 13 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObject.h" 3
@class NSDictionary;
@class NSEntityDescription;
@class NSError;
@class NSManagedObjectContext;
@class NSManagedObjectID;
@class NSString;

@interface NSManagedObject : NSObject {
@private
    NSManagedObjectID* _cd_objectID;
    id _cd_faultHandler;
    NSManagedObjectContext* _cd_managedObjectContext;
    id _cd_rawData;
    id* _cd_snapshots;
    id _cd_queueReference;
    u_int32_t _cd_stateFlags;
    int32_t _cd_rc;
    id _cd_observationInfo;
    u_int32_t _cd_lockingInfo;
    id _cd_entity;
}


- (id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context;


- (NSManagedObjectContext *)managedObjectContext;
- (NSEntityDescription *)entity;
- (NSManagedObjectID *)objectID;


- (BOOL)isInserted;
- (BOOL)isUpdated;
- (BOOL)isDeleted;


- (BOOL)isFault;



- (BOOL) hasFaultForRelationshipNamed:(NSString *)key;




- (void)willAccessValueForKey:(NSString *)key;
- (void)didAccessValueForKey:(NSString *)key;


- (void)willChangeValueForKey:(NSString *)key;
- (void)didChangeValueForKey:(NSString *)key;
- (void)willChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects;
- (void)didChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects;


- (void)setObservationInfo:(void *)inObservationInfo;
- (void *)observationInfo;


- (void)awakeFromFetch;


- (void)awakeFromInsert;


- (void)willSave;


- (void)didSave;



- (void) willTurnIntoFault;



- (void)didTurnIntoFault;





- (id)valueForKey:(NSString *)key;


- (void)setValue:(id)value forKey:(NSString *)key;


- (id)primitiveValueForKey:(NSString *)key;
- (void)setPrimitiveValue:(id)value forKey:(NSString *)key;


- (NSDictionary *)committedValuesForKeys:(NSArray *)keys;


- (NSDictionary *)changedValues;



- (BOOL)validateValue:(id *)value forKey:(NSString *)key error:(NSError **)error;
- (BOOL)validateForDelete:(NSError **)error;
- (BOOL)validateForInsert:(NSError **)error;
- (BOOL)validateForUpdate:(NSError **)error;

@end
# 23 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectID.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectID.h" 3
@class NSPersistentStore;
@class NSEntityDescription;
@class NSURL;


@interface NSManagedObjectID : NSObject <NSCopying> {
}

- (NSEntityDescription *)entity;
- (NSPersistentStore *)persistentStore;

- (BOOL)isTemporaryID;

- (NSURL *)URIRepresentation;

@end
# 24 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectContext.h" 1 3
# 17 "/System/Library/Frameworks/CoreData.framework/Headers/NSManagedObjectContext.h" 3
@class NSArray;
@class NSDictionary;
@class NSError;
@class NSFetchRequest;
@class NSManagedObject;
@class NSManagedObjectID;
@class NSMutableArray;
@class NSMutableDictionary;
@class NSMutableSet;
@class NSPersistentStore;
@class NSPersistentStoreCoordinator;
@class NSRecursiveLock;
@class NSSet;
@class NSString;
@class NSUndoManager;

extern "C" NSString * const NSManagedObjectContextDidSaveNotification;


extern "C" NSString * const NSManagedObjectContextObjectsDidChangeNotification;


extern "C" NSString * const NSInsertedObjectsKey;
extern "C" NSString * const NSUpdatedObjectsKey;
extern "C" NSString * const NSDeletedObjectsKey;
extern "C" NSString * const NSRefreshedObjectsKey;
extern "C" NSString * const NSInvalidatedObjectsKey;
extern "C" NSString * const NSInvalidatedAllObjectsKey;



extern "C" id NSErrorMergePolicy;


extern "C" id NSMergeByPropertyStoreTrumpMergePolicy;


extern "C" id NSMergeByPropertyObjectTrumpMergePolicy;


extern "C" id NSOverwriteMergePolicy;


extern "C" id NSRollbackMergePolicy;


@interface NSManagedObjectContext : NSObject <NSCoding, NSLocking> {
@private
  int32_t _spinLock;
  NSPersistentStoreCoordinator *_objectStore;
  NSUndoManager *_undoManager;
  NSMutableArray *_children;
  struct _managedObjectContextFlags {
      unsigned int _registeredForCallback:1;
      unsigned int _propagatesDeletesAtEndOfEvent:1;
      unsigned int _exhaustiveValidation:1;
      unsigned int _processingChanges:1;
      unsigned int _useCommittedSnapshot:1;
      unsigned int _registeredUndoTransactionID:1;
      unsigned int _retainsAllRegisteredObjects:1;
      unsigned int _savingInProgress:1;
      unsigned int _wasDisposed:1;
      unsigned int _unprocessedChangesPending:1;
      unsigned int _isDirty:1;
      unsigned int _ignoreUndoCheckpoints:1;
      unsigned int _reservedFlags:20;
  } _flags;
  NSMutableSet *_unprocessedChanges;
  NSMutableSet *_unprocessedDeletes;
  NSMutableSet *_unprocessedInserts;
  NSMutableSet *_insertedObjects;
  NSMutableSet *_deletedObjects;
  NSMutableSet *_changedObjects;
  NSMutableSet *_lockedObjects;
  NSMutableSet *_refreshedObjects;
  id _infoByGID;
  id *_cachedObsInfoByEntity;
  short _undoTransactionID;
  NSRecursiveLock *_lock;
  int _lockCount;
  int _objectStoreLockCount;
  NSTimeInterval _fetchTimestamp;
  id _delegate;
  id _referenceQueue;
  int _ignoreChangeNotification;
  id _mergePolicy;
  int32_t _cd_rc;
  struct _managedObjectContextEditorFlags {
      unsigned int _isEditing:1;
      unsigned int _reservedManagedObjectContext:31;
  } _managedObjectContextEditorFlags;
  id _editors;
  id* _debuggingRecords;
  void *_reserved1;
  void *_reserved2;
}


- (void)setPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator;
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator;

- (void)setUndoManager:(NSUndoManager *)undoManager;
- (NSUndoManager *)undoManager;
- (BOOL)hasChanges;


- (NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectID;


- (NSManagedObject *)objectWithID:(NSManagedObjectID *)objectID;


- (NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error;




- (NSUInteger) countForFetchRequest: (NSFetchRequest *)request error: (NSError **)error;



- (void)insertObject:(NSManagedObject *)object;
- (void)deleteObject:(NSManagedObject *)object;


- (void)refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag;


- (void)detectConflictsForObject:(NSManagedObject *)object;


- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;


- (void)processPendingChanges;


- (void)assignObject:(id)object toPersistentStore:(NSPersistentStore *)store;

- (NSSet *)insertedObjects;
- (NSSet *)updatedObjects;
- (NSSet *)deletedObjects;
- (NSSet *)registeredObjects;

- (void)undo;
- (void)redo;
- (void)reset;
- (void)rollback;
- (BOOL)save:(NSError **)error;

- (void)lock;
- (void)unlock;
- (BOOL)tryLock;


- (BOOL)propagatesDeletesAtEndOfEvent;
- (void)setPropagatesDeletesAtEndOfEvent:(BOOL)flag;


- (BOOL)retainsRegisteredObjects;
- (void)setRetainsRegisteredObjects:(BOOL)flag;


- (NSTimeInterval)stalenessInterval;
- (void)setStalenessInterval:(NSTimeInterval)expiration;

- (void)setMergePolicy:(id)mergePolicy;
- (id)mergePolicy;





- (BOOL)obtainPermanentIDsForObjects:(NSArray *)objects error:(NSError **)error;




- (void)mergeChangesFromContextDidSaveNotification:(NSNotification *)notification;



@end
# 25 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSPersistentStoreCoordinator.h" 1 3
# 14 "/System/Library/Frameworks/CoreData.framework/Headers/NSPersistentStoreCoordinator.h" 3
@class NSArray;
@class NSMutableArray;
@class NSDictionary;
@class NSError;
@class NSManagedObjectID;
@class NSManagedObjectModel;
@class NSPersistentStore;
@class NSMutableDictionary;
@class NSString;
@class NSURL;


extern "C" NSString * const NSSQLiteStoreType;
extern "C" NSString * const NSXMLStoreType;
extern "C" NSString * const NSBinaryStoreType;
extern "C" NSString * const NSInMemoryStoreType;




extern "C" NSString * const NSStoreTypeKey;


extern "C" NSString * const NSStoreUUIDKey;


extern "C" NSString * const NSPersistentStoreCoordinatorStoresDidChangeNotification;




extern "C" NSString * const NSAddedPersistentStoresKey;
extern "C" NSString * const NSRemovedPersistentStoresKey;


extern "C" NSString * const NSUUIDChangedPersistentStoresKey;




extern "C" NSString * const NSReadOnlyPersistentStoreOption;


extern "C" NSString * const NSValidateXMLStoreOption;







extern "C" NSString * const NSPersistentStoreTimeoutOption;



extern "C" NSString * const NSSQLitePragmasOption;



extern "C" NSString * const NSIgnorePersistentStoreVersioningOption;



extern "C" NSString * const NSMigratePersistentStoresAutomaticallyOption;



extern "C" NSString * const NSStoreModelVersionHashesKey;



extern "C" NSString * const NSStoreModelVersionIdentifiersKey;



extern "C" NSString * const NSPersistentStoreOSCompatibility;




@interface NSPersistentStoreCoordinator : NSObject <NSLocking> {
@private
    void *_reserved;
    void *_reserved2;
    void *_reserved3;
    void *_reserved4;
    NSManagedObjectModel *_managedObjectModel;
    NSRecursiveLock* _coreLock;
    NSMutableArray *_persistentStores;
}





+ (NSDictionary *)registeredStoreTypes;



+ (void)registerStoreClass:(Class)storeClass forStoreType:(NSString *)storeType;



+ (NSDictionary *)metadataForPersistentStoreOfType:(NSString *)storeType URL:(NSURL *)url error:(NSError **)error;
+ (BOOL)setMetadata:(NSDictionary *)metadata forPersistentStoreOfType:(NSString *)storeType URL:(NSURL*)url error:(NSError **)error;







- (void)setMetadata:(NSDictionary *)metadata forPersistentStore:(NSPersistentStore *)store;



- (NSDictionary *)metadataForPersistentStore:(NSPersistentStore *)store;

- (id)initWithManagedObjectModel:(NSManagedObjectModel *)model;

- (NSManagedObjectModel *)managedObjectModel;

- (NSArray *)persistentStores;
- (NSPersistentStore *)persistentStoreForURL:(NSURL *)URL;
- (NSURL *)URLForPersistentStore:(NSPersistentStore *)store;





- (BOOL)setURL:(NSURL*)url forPersistentStore:(NSPersistentStore *)store;





- (NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(NSString *)configuration URL:(NSURL *)storeURL options:(NSDictionary *)options error:(NSError **)error;
- (BOOL)removePersistentStore:(NSPersistentStore *)store error:(NSError **)error;




- (NSPersistentStore *)migratePersistentStore:(NSPersistentStore *)store toURL:(NSURL *)URL options:(NSDictionary *)options withType:(NSString *)storeType error:(NSError **)error;



- (NSManagedObjectID *)managedObjectIDForURIRepresentation:(NSURL *)url;

- (void)lock;
- (void)unlock;
- (BOOL)tryLock;




+ (NSDictionary *)metadataForPersistentStoreWithURL:(NSURL *)url error:(NSError **)error;

@end
# 26 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3

# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSPersistentStore.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSPersistentStore.h" 3
@class NSPersistentStoreCoordinator;

@interface NSPersistentStore : NSObject {
    @private
    NSPersistentStoreCoordinator *_coordinator;
    NSString *_configurationName;
    NSURL *_url;
    NSDictionary *_options;
    NSMutableDictionary *_oidFactories;
    id _defaultFaultHandler;
    struct _objectStoreFlags {
        unsigned int isReadOnly:1;
        unsigned int cleanOnRemove:1;
        unsigned int _RESERVED:30;
    } _flags;
 void *_reserved1;
 void *_reserved2;
 void *_reserved3;
}



+ (NSDictionary *)metadataForPersistentStoreWithURL:(NSURL *)url error:(NSError **)error;
+ (BOOL)setMetadata:(NSDictionary *)metadata forPersistentStoreWithURL:(NSURL*)url error:(NSError **)error;


- (id)initWithPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)root configurationName:(NSString *)name URL:(NSURL *)url options:(NSDictionary *)options ;


- (NSPersistentStoreCoordinator*) persistentStoreCoordinator;

- (NSString *)configurationName;
- (NSDictionary *)options;

- (NSURL *)URL;
- (void)setURL:(NSURL *)url;

- (NSString *)identifier;
- (void)setIdentifier:(NSString *)identifier;

- (NSString *)type;

- (BOOL)isReadOnly;
- (void)setReadOnly:(BOOL)flag;

- (NSDictionary *)metadata;
- (void)setMetadata:(NSDictionary *)storeMetadata;


- (void)didAddToPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator;



- (void)willRemoveFromPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator;

@end
# 28 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSAtomicStore.h" 1 3
# 12 "/System/Library/Frameworks/CoreData.framework/Headers/NSAtomicStore.h" 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSAtomicStoreCacheNode.h" 1 3
# 16 "/System/Library/Frameworks/CoreData.framework/Headers/NSAtomicStoreCacheNode.h" 3
@interface NSAtomicStoreCacheNode : NSObject {
    @private
    NSManagedObjectID *_objectID;
    u_int32_t __versionNumber;
 NSMutableDictionary *_propertyCache;
 void *_reserved1;
}


- (id)initWithObjectID:(NSManagedObjectID *)moid;


- (NSManagedObjectID*)objectID;



- (NSMutableDictionary *)propertyCache;



- (void)setPropertyCache:(NSMutableDictionary *)propertyCache;






- (id)valueForKey:(id)key;



- (void)setValue:(id)value forKey:(id)key;

@end
# 13 "/System/Library/Frameworks/CoreData.framework/Headers/NSAtomicStore.h" 2 3


@interface NSAtomicStore : NSPersistentStore {
 @private
    NSMutableDictionary *_nodeCache;
    NSMutableDictionary *_entityCache;
    NSMutableDictionary *_storeMetadata;
 void *_reserved4;
 void *_reserved5;
}


- (id)initWithPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator configurationName:(NSString *)configurationName URL:(NSURL *)url options:(NSDictionary *)options;


- (BOOL)load:(NSError **)error;


- (BOOL)save:(NSError **)error;


- (NSAtomicStoreCacheNode *)newCacheNodeForManagedObject:(NSManagedObject *)managedObject;


- (void)updateCacheNode:(NSAtomicStoreCacheNode *)node fromManagedObject:(NSManagedObject *)managedObject;


- (NSSet *)cacheNodes;


- (void)addCacheNodes:(NSSet *)cacheNodes;


- (void)willRemoveCacheNodes:(NSSet *)cacheNodes;


- (NSAtomicStoreCacheNode *)cacheNodeForObjectID:(NSManagedObjectID *)objectID;


- (NSManagedObjectID *)objectIDForEntity:(NSEntityDescription *)entity referenceObject:(id)data;





- (id)newReferenceObjectForManagedObject:(NSManagedObject *)managedObject;


- (id)referenceObjectForObjectID:(NSManagedObjectID *)objectID;

@end
# 29 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3


# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSEntityMigrationPolicy.h" 1 3
# 13 "/System/Library/Frameworks/CoreData.framework/Headers/NSEntityMigrationPolicy.h" 3
extern "C" NSString * const NSMigrationManagerKey;
extern "C" NSString * const NSMigrationSourceObjectKey;
extern "C" NSString * const NSMigrationDestinationObjectKey;
extern "C" NSString * const NSMigrationEntityMappingKey;
extern "C" NSString * const NSMigrationPropertyMappingKey;

@class NSManagedObject;
@class NSEntityMapping;
@class NSMigrationManager;



@interface NSEntityMigrationPolicy : NSObject




- (BOOL)beginEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;




- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;




- (BOOL)endInstanceCreationForEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;




- (BOOL)createRelationshipsForDestinationInstance:(NSManagedObject *)dInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;




- (BOOL)endRelationshipCreationForEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;




- (BOOL)performCustomValidationForEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;




- (BOOL)endEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error;

@end
# 32 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSMappingModel.h" 1 3
# 10 "/System/Library/Frameworks/CoreData.framework/Headers/NSMappingModel.h" 3
@class NSManagedObjectModel;




@interface NSMappingModel: NSObject {
    @private
    void *_reserved;
    void *_reserved1;
    void *_reserved2;
    NSMutableArray *_entityMappings;
    NSMutableDictionary *_entityMappingsByName;
    struct __modelMappingFlags {
        unsigned int _isInUse:1;
        unsigned int _reservedModelMapping:31;
    } _modelMappingFlags;

}




+ (NSMappingModel *)mappingModelFromBundles:(NSArray *)bundles forSourceModel:(NSManagedObjectModel *)sourceModel destinationModel:(NSManagedObjectModel *)destinationModel;



- (id)initWithContentsOfURL:(NSURL *)url;




- (NSArray *)entityMappings;
- (void)setEntityMappings:(NSArray *)mappings;




- (NSDictionary *)entityMappingsByName;

@end
# 33 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSEntityMapping.h" 1 3
# 16 "/System/Library/Frameworks/CoreData.framework/Headers/NSEntityMapping.h" 3
@class NSEntityDescription;
@class NSEntityMapping;



enum {
    NSUndefinedEntityMappingType = 0x00,
    NSCustomEntityMappingType = 0x01,
    NSAddEntityMappingType = 0x02,
    NSRemoveEntityMappingType = 0x03,
    NSCopyEntityMappingType = 0x04,
    NSTransformEntityMappingType = 0x05,
};
typedef NSUInteger NSEntityMappingType;


@interface NSEntityMapping : NSObject {

@private
    void *_reserved;
    void *_reserved1;
    void *_reserved2;
    NSString *_name;
    NSEntityMappingType _mappingType;
    NSString *_sourceEntityName;
    NSData *_sourceEntityVersionHash;
    NSString *_destinationEntityName;
    NSData *_destinationEntityVersionHash;
    NSExpression *_sourceExpression;
    NSDictionary *_userInfo;
    NSString *_entityMigrationPolicyClassName;
    NSMutableArray *_attributeMappings;
    NSMutableArray *_relationshipMappings;

    struct __entityMappingFlags {
        unsigned int _isInUse:1;
        unsigned int _reservedEntityMapping:31;
    } _entityMappingFlags;

}



- (NSString *)name;
- (void)setName:(NSString *)name;




- (NSEntityMappingType)mappingType;
- (void)setMappingType:(NSEntityMappingType)type;




- (NSString *)sourceEntityName;
- (void)setSourceEntityName:(NSString *)name;




- (NSData *)sourceEntityVersionHash;
- (void)setSourceEntityVersionHash:(NSData *)vhash;




- (NSString *)destinationEntityName;
- (void)setDestinationEntityName:(NSString *)name;




- (NSData *)destinationEntityVersionHash;
- (void)setDestinationEntityVersionHash:(NSData *)vhash;




- (NSArray *)attributeMappings;
- (void)setAttributeMappings:(NSArray *)mappings;




- (NSArray *)relationshipMappings;
- (void)setRelationshipMappings:(NSArray *)mappings;




- (NSExpression *)sourceExpression;
- (void)setSourceExpression:(NSExpression *)source;




- (NSDictionary *)userInfo;
- (void)setUserInfo:(NSDictionary *)dict;




- (NSString *)entityMigrationPolicyClassName;
- (void)setEntityMigrationPolicyClassName:(NSString *)name;

@end
# 34 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSPropertyMapping.h" 1 3
# 9 "/System/Library/Frameworks/CoreData.framework/Headers/NSPropertyMapping.h" 3
@class NSExpression;



@interface NSPropertyMapping : NSObject {
    @private
    void *_reserved;
    void *_reserved1;
    void *_reserved2;
    NSString *_name;
    NSExpression *_valueExpression;
    NSDictionary *_userInfo;
    struct __propertyMappingFlags {
        unsigned int _isInUse:1;
        unsigned int _reservedPropertyMapping:31;
    } _propertyMappingFlags;

}



- (NSString *)name;
- (void)setName:(NSString *)name;




- (NSExpression *)valueExpression;
- (void)setValueExpression:(NSExpression *)expression;




- (NSDictionary *)userInfo;
- (void)setUserInfo:(NSDictionary *)userInfo;

@end
# 35 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 1 "/System/Library/Frameworks/CoreData.framework/Headers/NSMigrationManager.h" 1 3
# 14 "/System/Library/Frameworks/CoreData.framework/Headers/NSMigrationManager.h" 3
@class NSEntityDescription;
@class NSEntityMapping;
@class NSManagedObjectContext;
@class NSManagedObjectModel;
@class NSMappingModel;
@class NSMigrationContext;



@interface NSMigrationManager : NSObject {
    @private
    NSManagedObjectModel *_sourceModel;
    NSDictionary *_sourceEntitiesByVersionHash;
    NSManagedObjectModel *_destinationModel;
    NSDictionary *_destinationEntitiesByVersionHash;
    NSMappingModel *_mappingModel;
    NSManagedObjectContext *_sourceManagedObjectContext;
    NSManagedObjectContext *_destinationManagedObjectContext;
    NSMigrationContext *_migrationContext;
    NSDictionary *_userInfo;
}




- (id)initWithSourceModel:(NSManagedObjectModel *)sourceModel destinationModel:(NSManagedObjectModel *)destinationModel;




- (BOOL)migrateStoreFromURL:(NSURL *)sourceURL type:(NSString *)sStoreType options:(NSDictionary *)sOptions withMappingModel:(NSMappingModel *)mappings toDestinationURL:(NSURL *)dURL destinationType:(NSString *)dStoreType destinationOptions:(NSDictionary *)dOptions error:(NSError **)error;




- (void)reset;




- (NSMappingModel *)mappingModel;
- (NSManagedObjectModel *)sourceModel;
- (NSManagedObjectModel *)destinationModel;




- (NSManagedObjectContext *)sourceContext;
- (NSManagedObjectContext *)destinationContext;




- (NSEntityDescription *)sourceEntityForEntityMapping:(NSEntityMapping *)mEntity;
- (NSEntityDescription *)destinationEntityForEntityMapping:(NSEntityMapping *)mEntity;




- (void)associateSourceInstance:(NSManagedObject *)sourceInstance withDestinationInstance:(NSManagedObject *)destinationInstance forEntityMapping:(NSEntityMapping *)entityMapping;




 - (NSArray *)destinationInstancesForEntityMappingNamed:(NSString *)mappingName sourceInstances:(NSArray*)sourceInstances;



- (NSArray *)sourceInstancesForEntityMappingNamed:(NSString *)mappingName destinationInstances:(NSArray *)destinationInstances;




- (NSEntityMapping *)currentEntityMapping;
- (float)migrationProgress;




- (NSDictionary *)userInfo;
- (void)setUserInfo:(NSDictionary *)dict;



- (void)cancelMigrationWithError:(NSError *)error;

@end
# 35 "/System/Library/Frameworks/CoreData.framework/Headers/CoreData.h" 2 3
# 14 "/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h" 2 3
# 11 "test.mm" 2
# 1 "CasAnimation.h" 1
# 9 "CasAnimation.h"
# 1 "CasEngine.h" 1
# 10 "CasEngine.h"
# 1 "/System/Library/Frameworks/OpenGL.framework/Headers/CGLMacro.h" 1 3







# 1 "/System/Library/Frameworks/OpenGL.framework/Headers/CGLTypes.h" 1 3
# 9 "/System/Library/Frameworks/OpenGL.framework/Headers/CGLTypes.h" 3
extern "C" {






typedef struct _CGLContextObject *CGLContextObj;
typedef struct _CGLPixelFormatObject *CGLPixelFormatObj;
typedef struct _CGLRendererInfoObject *CGLRendererInfoObj;
typedef struct _CGLPBufferObject *CGLPBufferObj;




typedef enum _CGLPixelFormatAttribute {
 kCGLPFAAllRenderers = 1,
 kCGLPFADoubleBuffer = 5,
 kCGLPFAStereo = 6,
 kCGLPFAAuxBuffers = 7,
 kCGLPFAColorSize = 8,
 kCGLPFAAlphaSize = 11,
 kCGLPFADepthSize = 12,
 kCGLPFAStencilSize = 13,
 kCGLPFAAccumSize = 14,
 kCGLPFAMinimumPolicy = 51,
 kCGLPFAMaximumPolicy = 52,
 kCGLPFAOffScreen = 53,
 kCGLPFAFullScreen = 54,
 kCGLPFASampleBuffers = 55,
 kCGLPFASamples = 56,
 kCGLPFAAuxDepthStencil = 57,
 kCGLPFAColorFloat = 58,
 kCGLPFAMultisample = 59,
 kCGLPFASupersample = 60,
 kCGLPFASampleAlpha = 61,

 kCGLPFARendererID = 70,
 kCGLPFASingleRenderer = 71,
 kCGLPFANoRecovery = 72,
 kCGLPFAAccelerated = 73,
 kCGLPFAClosestPolicy = 74,
 kCGLPFARobust = 75,
 kCGLPFABackingStore = 76,
 kCGLPFAMPSafe = 78,
 kCGLPFAWindow = 80,
 kCGLPFAMultiScreen = 81,
 kCGLPFACompliant = 83,
 kCGLPFADisplayMask = 84,
 kCGLPFAPBuffer = 90,
 kCGLPFARemotePBuffer = 91,
 kCGLPFAOpenGLES20 = 95,
 kCGLPFAVirtualScreenCount = 128
} CGLPixelFormatAttribute;




typedef enum _CGLRendererProperty {
 kCGLRPOffScreen = 53,
 kCGLRPFullScreen = 54,
 kCGLRPRendererID = 70,
 kCGLRPAccelerated = 73,
 kCGLRPRobust = 75,
 kCGLRPBackingStore = 76,
 kCGLRPMPSafe = 78,
 kCGLRPWindow = 80,
 kCGLRPMultiScreen = 81,
 kCGLRPCompliant = 83,
 kCGLRPDisplayMask = 84,
 kCGLRPBufferModes = 100,
 kCGLRPColorModes = 103,
 kCGLRPAccumModes = 104,
 kCGLRPDepthModes = 105,
 kCGLRPStencilModes = 106,
 kCGLRPMaxAuxBuffers = 107,
 kCGLRPMaxSampleBuffers = 108,
 kCGLRPMaxSamples = 109,
 kCGLRPSampleModes = 110,
 kCGLRPSampleAlpha = 111,
 kCGLRPVideoMemory = 120,
 kCGLRPTextureMemory = 121,
 kCGLRPGPUVertProcCapable = 122,
 kCGLRPGPUFragProcCapable = 123,
 kCGLRPRendererCount = 128
} CGLRendererProperty;




typedef enum _CGLContextEnable {
 kCGLCESwapRectangle = 201,
 kCGLCESwapLimit = 203,
 kCGLCERasterization = 221,
 kCGLCEStateValidation = 301,
 kCGLCESurfaceBackingSize = 305,
 kCGLCEDisplayListOptimization = 307,
 kCGLCEMPEngine = 313
} CGLContextEnable;




typedef enum _CGLContextParameter {
 kCGLCPSwapRectangle = 200,
 kCGLCPSwapInterval = 222,
 kCGLCPDispatchTableSize = 224,

 kCGLCPClientStorage = 226,
 kCGLCPSurfaceTexture = 228,






 kCGLCPSurfaceOrder = 235,
 kCGLCPSurfaceOpacity = 236,



 kCGLCPSurfaceBackingSize = 304,

 kCGLCPSurfaceSurfaceVolatile = 306,
 kCGLCPReclaimResources = 308,
 kCGLCPCurrentRendererID = 309,
 kCGLCPGPUVertexProcessing = 310,
 kCGLCPGPUFragmentProcessing = 311,
} CGLContextParameter;




typedef enum _CGLGlobalOption {
 kCGLGOFormatCacheSize = 501,
 kCGLGOClearFormatCache = 502,
 kCGLGORetainRenderers = 503,
 kCGLGOResetLibrary = 504,

 kCGLGOUseErrorHandler = 505,
} CGLGlobalOption;




typedef enum _CGLError {
 kCGLNoError = 0,
 kCGLBadAttribute = 10000,
 kCGLBadProperty = 10001,
 kCGLBadPixelFormat = 10002,
 kCGLBadRendererInfo = 10003,
 kCGLBadContext = 10004,
 kCGLBadDrawable = 10005,
 kCGLBadDisplay = 10006,
 kCGLBadState = 10007,
 kCGLBadValue = 10008,
 kCGLBadMatch = 10009,
 kCGLBadEnumeration = 10010,
 kCGLBadOffScreen = 10011,
 kCGLBadFullScreen = 10012,
 kCGLBadWindow = 10013,
 kCGLBadAddress = 10014,
 kCGLBadCodeModule = 10015,
 kCGLBadAlloc = 10016,
 kCGLBadConnection = 10017
} CGLError;
# 245 "/System/Library/Frameworks/OpenGL.framework/Headers/CGLTypes.h" 3
}
# 9 "/System/Library/Frameworks/OpenGL.framework/Headers/CGLMacro.h" 2 3
# 1 "/System/Library/Frameworks/OpenGL.framework/Headers/CGLContext.h" 1 3







# 1 "/System/Library/Frameworks/OpenGL.framework/Headers/gliContext.h" 1 3
# 9 "/System/Library/Frameworks/OpenGL.framework/Headers/gliContext.h" 3
extern "C" {






typedef struct __GLIContextRec *GLIContext;



}
# 9 "/System/Library/Frameworks/OpenGL.framework/Headers/CGLContext.h" 2 3
# 1 "/System/Library/Frameworks/OpenGL.framework/Headers/gliDispatch.h" 1 3
# 13 "/System/Library/Frameworks/OpenGL.framework/Headers/gliDispatch.h" 3
extern "C" {





typedef struct __GLIFunctionDispatchRec
{
 void (*accum)(GLIContext ctx, GLenum op, GLfloat value);
 void (*alpha_func)(GLIContext ctx, GLenum func, GLclampf ref);
 GLboolean (*are_textures_resident)(GLIContext ctx, GLsizei n, const GLuint *textures, GLboolean *residences);
 void (*array_element)(GLIContext ctx, GLint i);
 void (*begin)(GLIContext ctx, GLenum mode);
 void (*bind_texture)(GLIContext ctx, GLenum target, GLuint texture);
 void (*bitmap)(GLIContext ctx, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);
 void (*blend_func)(GLIContext ctx, GLenum sfactor, GLenum dfactor);
 void (*call_list)(GLIContext ctx, GLuint list);
 void (*call_lists)(GLIContext ctx, GLsizei n, GLenum type, const GLvoid *lists);
 void (*clear)(GLIContext ctx, GLbitfield mask);
 void (*clear_accum)(GLIContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
 void (*clear_color)(GLIContext ctx, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
 void (*clear_depth)(GLIContext ctx, GLclampd depth);
 void (*clear_index)(GLIContext ctx, GLfloat c);
 void (*clear_stencil)(GLIContext ctx, GLint s);
 void (*clip_plane)(GLIContext ctx, GLenum plane, const GLdouble *equation);
 void (*color3b)(GLIContext ctx, GLbyte red, GLbyte green, GLbyte blue);
 void (*color3bv)(GLIContext ctx, const GLbyte *v);
 void (*color3d)(GLIContext ctx, GLdouble red, GLdouble green, GLdouble blue);
 void (*color3dv)(GLIContext ctx, const GLdouble *v);
 void (*color3f)(GLIContext ctx, GLfloat red, GLfloat green, GLfloat blue);
 void (*color3fv)(GLIContext ctx, const GLfloat *v);
 void (*color3i)(GLIContext ctx, GLint red, GLint green, GLint blue);
 void (*color3iv)(GLIContext ctx, const GLint *v);
 void (*color3s)(GLIContext ctx, GLshort red, GLshort green, GLshort blue);
 void (*color3sv)(GLIContext ctx, const GLshort *v);
 void (*color3ub)(GLIContext ctx, GLubyte red, GLubyte green, GLubyte blue);
 void (*color3ubv)(GLIContext ctx, const GLubyte *v);
 void (*color3ui)(GLIContext ctx, GLuint red, GLuint green, GLuint blue);
 void (*color3uiv)(GLIContext ctx, const GLuint *v);
 void (*color3us)(GLIContext ctx, GLushort red, GLushort green, GLushort blue);
 void (*color3usv)(GLIContext ctx, const GLushort *v);
 void (*color4b)(GLIContext ctx, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha);
 void (*color4bv)(GLIContext ctx, const GLbyte *v);
 void (*color4d)(GLIContext ctx, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
 void (*color4dv)(GLIContext ctx, const GLdouble *v);
 void (*color4f)(GLIContext ctx, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
 void (*color4fv)(GLIContext ctx, const GLfloat *v);
 void (*color4i)(GLIContext ctx, GLint red, GLint green, GLint blue, GLint alpha);
 void (*color4iv)(GLIContext ctx, const GLint *v);
 void (*color4s)(GLIContext ctx, GLshort red, GLshort green, GLshort blue, GLshort alpha);
 void (*color4sv)(GLIContext ctx, const GLshort *v);
 void (*color4ub)(GLIContext ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
 void (*color4ubv)(GLIContext ctx, const GLubyte *v);
 void (*color4ui)(GLIContext ctx, GLuint red, GLuint green, GLuint blue, GLuint alpha);
 void (*color4uiv)(GLIContext ctx, const GLuint *v);
 void (*color4us)(GLIContext ctx, GLushort red, GLushort green, GLushort blue, GLushort alpha);
 void (*color4usv)(GLIContext ctx, const GLushort *v);
 void (*color_mask)(GLIContext ctx, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
 void (*color_material)(GLIContext ctx, GLenum face, GLenum mode);
 void (*color_pointer)(GLIContext ctx, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
 void (*copy_pixels)(GLIContext ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
 void (*copy_tex_image1D)(GLIContext ctx, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border);
 void (*copy_tex_image2D)(GLIContext ctx, GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
 void (*copy_tex_sub_image1D)(GLIContext ctx, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
 void (*copy_tex_sub_image2D)(GLIContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
 void (*cull_face)(GLIContext ctx, GLenum mode);
 void (*delete_lists)(GLIContext ctx, GLuint list, GLsizei range);
 void (*delete_textures)(GLIContext ctx, GLsizei n, const GLuint *textures);
 void (*depth_func)(GLIContext ctx, GLenum func);
 void (*depth_mask)(GLIContext ctx, GLboolean flag);
 void (*depth_range)(GLIContext ctx, GLclampd zNear, GLclampd zFar);
 void (*disable)(GLIContext ctx, GLenum cap);
 void (*disable_client_state)(GLIContext ctx, GLenum array);
 void (*draw_arrays)(GLIContext ctx, GLenum mode, GLint first, GLsizei count);
 void (*draw_buffer)(GLIContext ctx, GLenum mode);
 void (*draw_elements)(GLIContext ctx, GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
 void (*draw_pixels)(GLIContext ctx, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
 void (*edge_flag)(GLIContext ctx, GLboolean flag);
 void (*edge_flag_pointer)(GLIContext ctx, GLsizei stride, const GLvoid *pointer);
 void (*edge_flagv)(GLIContext ctx, const GLboolean *flag);
 void (*enable)(GLIContext ctx, GLenum cap);
 void (*enable_client_state)(GLIContext ctx, GLenum array);
 void (*end)(GLIContext ctx);
 void (*end_list)(GLIContext ctx);
 void (*eval_coord1d)(GLIContext ctx, GLdouble u);
 void (*eval_coord1dv)(GLIContext ctx, const GLdouble *u);
 void (*eval_coord1f)(GLIContext ctx, GLfloat u);
 void (*eval_coord1fv)(GLIContext ctx, const GLfloat *u);
 void (*eval_coord2d)(GLIContext ctx, GLdouble u, GLdouble v);
 void (*eval_coord2dv)(GLIContext ctx, const GLdouble *u);
 void (*eval_coord2f)(GLIContext ctx, GLfloat u, GLfloat v);
 void (*eval_coord2fv)(GLIContext ctx, const GLfloat *u);
 void (*eval_mesh1)(GLIContext ctx, GLenum mode, GLint i1, GLint i2);
 void (*eval_mesh2)(GLIContext ctx, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);
 void (*eval_point1)(GLIContext ctx, GLint i);
 void (*eval_point2)(GLIContext ctx, GLint i, GLint j);
 void (*feedback_buffer)(GLIContext ctx, GLsizei size, GLenum type, GLfloat *buffer);
 void (*finish)(GLIContext ctx);
 void (*flush)(GLIContext ctx);
 void (*fogf)(GLIContext ctx, GLenum pname, GLfloat param);
 void (*fogfv)(GLIContext ctx, GLenum pname, const GLfloat *params);
 void (*fogi)(GLIContext ctx, GLenum pname, GLint param);
 void (*fogiv)(GLIContext ctx, GLenum pname, const GLint *params);
 void (*front_face)(GLIContext ctx, GLenum mode);
 void (*frustum)(GLIContext ctx, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
 GLuint (*gen_lists)(GLIContext ctx, GLsizei range);
 void (*gen_textures)(GLIContext ctx, GLsizei n, GLuint *textures);
 void (*get_booleanv)(GLIContext ctx, GLenum pname, GLboolean *params);
 void (*get_clip_plane)(GLIContext ctx, GLenum plane, GLdouble *equation);
 void (*get_doublev)(GLIContext ctx, GLenum pname, GLdouble *params);
 GLenum (*get_error)(GLIContext ctx);
 void (*get_floatv)(GLIContext ctx, GLenum pname, GLfloat *params);
 void (*get_integerv)(GLIContext ctx, GLenum pname, GLint *params);
 void (*get_lightfv)(GLIContext ctx, GLenum light, GLenum pname, GLfloat *params);
 void (*get_lightiv)(GLIContext ctx, GLenum light, GLenum pname, GLint *params);
 void (*get_mapdv)(GLIContext ctx, GLenum target, GLenum query, GLdouble *v);
 void (*get_mapfv)(GLIContext ctx, GLenum target, GLenum query, GLfloat *v);
 void (*get_mapiv)(GLIContext ctx, GLenum target, GLenum query, GLint *v);
 void (*get_materialfv)(GLIContext ctx, GLenum face, GLenum pname, GLfloat *params);
 void (*get_materialiv)(GLIContext ctx, GLenum face, GLenum pname, GLint *params);
 void (*get_pixel_mapfv)(GLIContext ctx, GLenum map, GLfloat *values);
 void (*get_pixel_mapuiv)(GLIContext ctx, GLenum map, GLuint *values);
 void (*get_pixel_mapusv)(GLIContext ctx, GLenum map, GLushort *values);
 void (*get_pointerv)(GLIContext ctx, GLenum pname, GLvoid* *params);
 void (*get_polygon_stipple)(GLIContext ctx, GLubyte *mask);
 const GLubyte* (*get_string)(GLIContext ctx, GLenum name);
 void (*get_tex_envfv)(GLIContext ctx, GLenum target, GLenum pname, GLfloat *params);
 void (*get_tex_enviv)(GLIContext ctx, GLenum target, GLenum pname, GLint *params);
 void (*get_tex_gendv)(GLIContext ctx, GLenum coord, GLenum pname, GLdouble *params);
 void (*get_tex_genfv)(GLIContext ctx, GLenum coord, GLenum pname, GLfloat *params);
 void (*get_tex_geniv)(GLIContext ctx, GLenum coord, GLenum pname, GLint *params);
 void (*get_tex_image)(GLIContext ctx, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
 void (*get_tex_level_parameterfv)(GLIContext ctx, GLenum target, GLint level, GLenum pname, GLfloat *params);
 void (*get_tex_level_parameteriv)(GLIContext ctx, GLenum target, GLint level, GLenum pname, GLint *params);
 void (*get_tex_parameterfv)(GLIContext ctx, GLenum target, GLenum pname, GLfloat *params);
 void (*get_tex_parameteriv)(GLIContext ctx, GLenum target, GLenum pname, GLint *params);
 void (*hint)(GLIContext ctx, GLenum target, GLenum mode);
 void (*index_mask)(GLIContext ctx, GLuint mask);
 void (*index_pointer)(GLIContext ctx, GLenum type, GLsizei stride, const GLvoid *pointer);
 void (*indexd)(GLIContext ctx, GLdouble c);
 void (*indexdv)(GLIContext ctx, const GLdouble *c);
 void (*indexf)(GLIContext ctx, GLfloat c);
 void (*indexfv)(GLIContext ctx, const GLfloat *c);
 void (*indexi)(GLIContext ctx, GLint c);
 void (*indexiv)(GLIContext ctx, const GLint *c);
 void (*indexs)(GLIContext ctx, GLshort c);
 void (*indexsv)(GLIContext ctx, const GLshort *c);
 void (*indexub)(GLIContext ctx, GLubyte c);
 void (*indexubv)(GLIContext ctx, const GLubyte *c);
 void (*init_names)(GLIContext ctx);
 void (*interleaved_arrays)(GLIContext ctx, GLenum format, GLsizei stride, const GLvoid *pointer);
 GLboolean (*is_enabled)(GLIContext ctx, GLenum cap);
 GLboolean (*is_list)(GLIContext ctx, GLuint list);
 GLboolean (*is_texture)(GLIContext ctx, GLuint texture);
 void (*light_modelf)(GLIContext ctx, GLenum pname, GLfloat param);
 void (*light_modelfv)(GLIContext ctx, GLenum pname, const GLfloat *params);
 void (*light_modeli)(GLIContext ctx, GLenum pname, GLint param);
 void (*light_modeliv)(GLIContext ctx, GLenum pname, const GLint *params);
 void (*lightf)(GLIContext ctx, GLenum light, GLenum pname, GLfloat param);
 void (*lightfv)(GLIContext ctx, GLenum light, GLenum pname, const GLfloat *params);
 void (*lighti)(GLIContext ctx, GLenum light, GLenum pname, GLint param);
 void (*lightiv)(GLIContext ctx, GLenum light, GLenum pname, const GLint *params);
 void (*line_stipple)(GLIContext ctx, GLint factor, GLushort pattern);
 void (*line_width)(GLIContext ctx, GLfloat width);
 void (*list_base)(GLIContext ctx, GLuint base);
 void (*load_identity)(GLIContext ctx);
 void (*load_matrixd)(GLIContext ctx, const GLdouble *m);
 void (*load_matrixf)(GLIContext ctx, const GLfloat *m);
 void (*load_name)(GLIContext ctx, GLuint name);
 void (*logic_op)(GLIContext ctx, GLenum opcode);
 void (*map1d)(GLIContext ctx, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
 void (*map1f)(GLIContext ctx, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
 void (*map2d)(GLIContext ctx, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
 void (*map2f)(GLIContext ctx, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
 void (*map_grid1d)(GLIContext ctx, GLint un, GLdouble u1, GLdouble u2);
 void (*map_grid1f)(GLIContext ctx, GLint un, GLfloat u1, GLfloat u2);
 void (*map_grid2d)(GLIContext ctx, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
 void (*map_grid2f)(GLIContext ctx, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
 void (*materialf)(GLIContext ctx, GLenum face, GLenum pname, GLfloat param);
 void (*materialfv)(GLIContext ctx, GLenum face, GLenum pname, const GLfloat *params);
 void (*materiali)(GLIContext ctx, GLenum face, GLenum pname, GLint param);
 void (*materialiv)(GLIContext ctx, GLenum face, GLenum pname, const GLint *params);
 void (*matrix_mode)(GLIContext ctx, GLenum mode);
 void (*mult_matrixd)(GLIContext ctx, const GLdouble *m);
 void (*mult_matrixf)(GLIContext ctx, const GLfloat *m);
 void (*new_list)(GLIContext ctx, GLuint list, GLenum mode);
 void (*normal3b)(GLIContext ctx, GLbyte nx, GLbyte ny, GLbyte nz);
 void (*normal3bv)(GLIContext ctx, const GLbyte *v);
 void (*normal3d)(GLIContext ctx, GLdouble nx, GLdouble ny, GLdouble nz);
 void (*normal3dv)(GLIContext ctx, const GLdouble *v);
 void (*normal3f)(GLIContext ctx, GLfloat nx, GLfloat ny, GLfloat nz);
 void (*normal3fv)(GLIContext ctx, const GLfloat *v);
 void (*normal3i)(GLIContext ctx, GLint nx, GLint ny, GLint nz);
 void (*normal3iv)(GLIContext ctx, const GLint *v);
 void (*normal3s)(GLIContext ctx, GLshort nx, GLshort ny, GLshort nz);
 void (*normal3sv)(GLIContext ctx, const GLshort *v);
 void (*normal_pointer)(GLIContext ctx, GLenum type, GLsizei stride, const GLvoid *pointer);
 void (*ortho)(GLIContext ctx, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
 void (*pass_through)(GLIContext ctx, GLfloat token);
 void (*pixel_mapfv)(GLIContext ctx, GLenum map, GLsizei mapsize, const GLfloat *values);
 void (*pixel_mapuiv)(GLIContext ctx, GLenum map, GLsizei mapsize, const GLuint *values);
 void (*pixel_mapusv)(GLIContext ctx, GLenum map, GLsizei mapsize, const GLushort *values);
 void (*pixel_storef)(GLIContext ctx, GLenum pname, GLfloat param);
 void (*pixel_storei)(GLIContext ctx, GLenum pname, GLint param);
 void (*pixel_transferf)(GLIContext ctx, GLenum pname, GLfloat param);
 void (*pixel_transferi)(GLIContext ctx, GLenum pname, GLint param);
 void (*pixel_zoom)(GLIContext ctx, GLfloat xfactor, GLfloat yfactor);
 void (*point_size)(GLIContext ctx, GLfloat size);
 void (*polygon_mode)(GLIContext ctx, GLenum face, GLenum mode);
 void (*polygon_offset)(GLIContext ctx, GLfloat factor, GLfloat units);
 void (*polygon_stipple)(GLIContext ctx, const GLubyte *mask);
 void (*pop_attrib)(GLIContext ctx);
 void (*pop_client_attrib)(GLIContext ctx);
 void (*pop_matrix)(GLIContext ctx);
 void (*pop_name)(GLIContext ctx);
 void (*prioritize_textures)(GLIContext ctx, GLsizei n, const GLuint *textures, const GLclampf *priorities);
 void (*push_attrib)(GLIContext ctx, GLbitfield mask);
 void (*push_client_attrib)(GLIContext ctx, GLbitfield mask);
 void (*push_matrix)(GLIContext ctx);
 void (*push_name)(GLIContext ctx, GLuint name);
 void (*raster_pos2d)(GLIContext ctx, GLdouble x, GLdouble y);
 void (*raster_pos2dv)(GLIContext ctx, const GLdouble *v);
 void (*raster_pos2f)(GLIContext ctx, GLfloat x, GLfloat y);
 void (*raster_pos2fv)(GLIContext ctx, const GLfloat *v);
 void (*raster_pos2i)(GLIContext ctx, GLint x, GLint y);
 void (*raster_pos2iv)(GLIContext ctx, const GLint *v);
 void (*raster_pos2s)(GLIContext ctx, GLshort x, GLshort y);
 void (*raster_pos2sv)(GLIContext ctx, const GLshort *v);
 void (*raster_pos3d)(GLIContext ctx, GLdouble x, GLdouble y, GLdouble z);
 void (*raster_pos3dv)(GLIContext ctx, const GLdouble *v);
 void (*raster_pos3f)(GLIContext ctx, GLfloat x, GLfloat y, GLfloat z);
 void (*raster_pos3fv)(GLIContext ctx, const GLfloat *v);
 void (*raster_pos3i)(GLIContext ctx, GLint x, GLint y, GLint z);
 void (*raster_pos3iv)(GLIContext ctx, const GLint *v);
 void (*raster_pos3s)(GLIContext ctx, GLshort x, GLshort y, GLshort z);
 void (*raster_pos3sv)(GLIContext ctx, const GLshort *v);
 void (*raster_pos4d)(GLIContext ctx, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
 void (*raster_pos4dv)(GLIContext ctx, const GLdouble *v);
 void (*raster_pos4f)(GLIContext ctx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 void (*raster_pos4fv)(GLIContext ctx, const GLfloat *v);
 void (*raster_pos4i)(GLIContext ctx, GLint x, GLint y, GLint z, GLint w);
 void (*raster_pos4iv)(GLIContext ctx, const GLint *v);
 void (*raster_pos4s)(GLIContext ctx, GLshort x, GLshort y, GLshort z, GLshort w);
 void (*raster_pos4sv)(GLIContext ctx, const GLshort *v);
 void (*read_buffer)(GLIContext ctx, GLenum mode);
 void (*read_pixels)(GLIContext ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
 void (*rectd)(GLIContext ctx, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
 void (*rectdv)(GLIContext ctx, const GLdouble *v1, const GLdouble *v2);
 void (*rectf)(GLIContext ctx, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
 void (*rectfv)(GLIContext ctx, const GLfloat *v1, const GLfloat *v2);
 void (*recti)(GLIContext ctx, GLint x1, GLint y1, GLint x2, GLint y2);
 void (*rectiv)(GLIContext ctx, const GLint *v1, const GLint *v2);
 void (*rects)(GLIContext ctx, GLshort x1, GLshort y1, GLshort x2, GLshort y2);
 void (*rectsv)(GLIContext ctx, const GLshort *v1, const GLshort *v2);
 GLint (*render_mode)(GLIContext ctx, GLenum mode);
 void (*rotated)(GLIContext ctx, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
 void (*rotatef)(GLIContext ctx, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
 void (*scaled)(GLIContext ctx, GLdouble x, GLdouble y, GLdouble z);
 void (*scalef)(GLIContext ctx, GLfloat x, GLfloat y, GLfloat z);
 void (*scissor)(GLIContext ctx, GLint x, GLint y, GLsizei width, GLsizei height);
 void (*select_buffer)(GLIContext ctx, GLsizei size, GLuint *buffer);
 void (*shade_model)(GLIContext ctx, GLenum mode);
 void (*stencil_func)(GLIContext ctx, GLenum func, GLint ref, GLuint mask);
 void (*stencil_mask)(GLIContext ctx, GLuint mask);
 void (*stencil_op)(GLIContext ctx, GLenum fail, GLenum zfail, GLenum zpass);
 void (*tex_coord1d)(GLIContext ctx, GLdouble s);
 void (*tex_coord1dv)(GLIContext ctx, const GLdouble *v);
 void (*tex_coord1f)(GLIContext ctx, GLfloat s);
 void (*tex_coord1fv)(GLIContext ctx, const GLfloat *v);
 void (*tex_coord1i)(GLIContext ctx, GLint s);
 void (*tex_coord1iv)(GLIContext ctx, const GLint *v);
 void (*tex_coord1s)(GLIContext ctx, GLshort s);
 void (*tex_coord1sv)(GLIContext ctx, const GLshort *v);
 void (*tex_coord2d)(GLIContext ctx, GLdouble s, GLdouble t);
 void (*tex_coord2dv)(GLIContext ctx, const GLdouble *v);
 void (*tex_coord2f)(GLIContext ctx, GLfloat s, GLfloat t);
 void (*tex_coord2fv)(GLIContext ctx, const GLfloat *v);
 void (*tex_coord2i)(GLIContext ctx, GLint s, GLint t);
 void (*tex_coord2iv)(GLIContext ctx, const GLint *v);
 void (*tex_coord2s)(GLIContext ctx, GLshort s, GLshort t);
 void (*tex_coord2sv)(GLIContext ctx, const GLshort *v);
 void (*tex_coord3d)(GLIContext ctx, GLdouble s, GLdouble t, GLdouble r);
 void (*tex_coord3dv)(GLIContext ctx, const GLdouble *v);
 void (*tex_coord3f)(GLIContext ctx, GLfloat s, GLfloat t, GLfloat r);
 void (*tex_coord3fv)(GLIContext ctx, const GLfloat *v);
 void (*tex_coord3i)(GLIContext ctx, GLint s, GLint t, GLint r);
 void (*tex_coord3iv)(GLIContext ctx, const GLint *v);
 void (*tex_coord3s)(GLIContext ctx, GLshort s, GLshort t, GLshort r);
 void (*tex_coord3sv)(GLIContext ctx, const GLshort *v);
 void (*tex_coord4d)(GLIContext ctx, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
 void (*tex_coord4dv)(GLIContext ctx, const GLdouble *v);
 void (*tex_coord4f)(GLIContext ctx, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
 void (*tex_coord4fv)(GLIContext ctx, const GLfloat *v);
 void (*tex_coord4i)(GLIContext ctx, GLint s, GLint t, GLint r, GLint q);
 void (*tex_coord4iv)(GLIContext ctx, const GLint *v);
 void (*tex_coord4s)(GLIContext ctx, GLshort s, GLshort t, GLshort r, GLshort q);
 void (*tex_coord4sv)(GLIContext ctx, const GLshort *v);
 void (*tex_coord_pointer)(GLIContext ctx, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
 void (*tex_envf)(GLIContext ctx, GLenum target, GLenum pname, GLfloat param);
 void (*tex_envfv)(GLIContext ctx, GLenum target, GLenum pname, const GLfloat *params);
 void (*tex_envi)(GLIContext ctx, GLenum target, GLenum pname, GLint param);
 void (*tex_enviv)(GLIContext ctx, GLenum target, GLenum pname, const GLint *params);
 void (*tex_gend)(GLIContext ctx, GLenum coord, GLenum pname, GLdouble param);
 void (*tex_gendv)(GLIContext ctx, GLenum coord, GLenum pname, const GLdouble *params);
 void (*tex_genf)(GLIContext ctx, GLenum coord, GLenum pname, GLfloat param);
 void (*tex_genfv)(GLIContext ctx, GLenum coord, GLenum pname, const GLfloat *params);
 void (*tex_geni)(GLIContext ctx, GLenum coord, GLenum pname, GLint param);
 void (*tex_geniv)(GLIContext ctx, GLenum coord, GLenum pname, const GLint *params);
 void (*tex_image1D)(GLIContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
 void (*tex_image2D)(GLIContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
 void (*tex_parameterf)(GLIContext ctx, GLenum target, GLenum pname, GLfloat param);
 void (*tex_parameterfv)(GLIContext ctx, GLenum target, GLenum pname, const GLfloat *params);
 void (*tex_parameteri)(GLIContext ctx, GLenum target, GLenum pname, GLint param);
 void (*tex_parameteriv)(GLIContext ctx, GLenum target, GLenum pname, const GLint *params);
 void (*tex_sub_image1D)(GLIContext ctx, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
 void (*tex_sub_image2D)(GLIContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
 void (*translated)(GLIContext ctx, GLdouble x, GLdouble y, GLdouble z);
 void (*translatef)(GLIContext ctx, GLfloat x, GLfloat y, GLfloat z);
 void (*vertex2d)(GLIContext ctx, GLdouble x, GLdouble y);
 void (*vertex2dv)(GLIContext ctx, const GLdouble *v);
 void (*vertex2f)(GLIContext ctx, GLfloat x, GLfloat y);
 void (*vertex2fv)(GLIContext ctx, const GLfloat *v);
 void (*vertex2i)(GLIContext ctx, GLint x, GLint y);
 void (*vertex2iv)(GLIContext ctx, const GLint *v);
 void (*vertex2s)(GLIContext ctx, GLshort x, GLshort y);
 void (*vertex2sv)(GLIContext ctx, const GLshort *v);
 void (*vertex3d)(GLIContext ctx, GLdouble x, GLdouble y, GLdouble z);
 void (*vertex3dv)(GLIContext ctx, const GLdouble *v);
 void (*vertex3f)(GLIContext ctx, GLfloat x, GLfloat y, GLfloat z);
 void (*vertex3fv)(GLIContext ctx, const GLfloat *v);
 void (*vertex3i)(GLIContext ctx, GLint x, GLint y, GLint z);
 void (*vertex3iv)(GLIContext ctx, const GLint *v);
 void (*vertex3s)(GLIContext ctx, GLshort x, GLshort y, GLshort z);
 void (*vertex3sv)(GLIContext ctx, const GLshort *v);
 void (*vertex4d)(GLIContext ctx, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
 void (*vertex4dv)(GLIContext ctx, const GLdouble *v);
 void (*vertex4f)(GLIContext ctx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 void (*vertex4fv)(GLIContext ctx, const GLfloat *v);
 void (*vertex4i)(GLIContext ctx, GLint x, GLint y, GLint z, GLint w);
 void (*vertex4iv)(GLIContext ctx, const GLint *v);
 void (*vertex4s)(GLIContext ctx, GLshort x, GLshort y, GLshort z, GLshort w);
 void (*vertex4sv)(GLIContext ctx, const GLshort *v);
 void (*vertex_pointer)(GLIContext ctx, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
 void (*viewport)(GLIContext ctx, GLint x, GLint y, GLsizei width, GLsizei height);
 void (*blend_func_separate)(GLIContext ctx, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
 void (*blend_color)(GLIContext ctx, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
 void (*blend_equation)(GLIContext ctx, GLenum mode);
 void (*lock_arrays_EXT)(GLIContext ctx, GLint first, GLsizei count);
 void (*unlock_arrays_EXT)(GLIContext ctx);
 void (*client_active_texture)(GLIContext ctx, GLenum target);
 void (*active_texture)(GLIContext ctx, GLenum target);
 void (*multi_tex_coord1d)(GLIContext ctx, GLenum target, GLdouble s);
 void (*multi_tex_coord1dv)(GLIContext ctx, GLenum target, const GLdouble *v);
 void (*multi_tex_coord1f)(GLIContext ctx, GLenum target, GLfloat s);
 void (*multi_tex_coord1fv)(GLIContext ctx, GLenum target, const GLfloat *v);
 void (*multi_tex_coord1i)(GLIContext ctx, GLenum target, GLint s);
 void (*multi_tex_coord1iv)(GLIContext ctx, GLenum target, const GLint *v);
 void (*multi_tex_coord1s)(GLIContext ctx, GLenum target, GLshort s);
 void (*multi_tex_coord1sv)(GLIContext ctx, GLenum target, const GLshort *v);
 void (*multi_tex_coord2d)(GLIContext ctx, GLenum target, GLdouble s, GLdouble t);
 void (*multi_tex_coord2dv)(GLIContext ctx, GLenum target, const GLdouble *v);
 void (*multi_tex_coord2f)(GLIContext ctx, GLenum target, GLfloat s, GLfloat t);
 void (*multi_tex_coord2fv)(GLIContext ctx, GLenum target, const GLfloat *v);
 void (*multi_tex_coord2i)(GLIContext ctx, GLenum target, GLint s, GLint t);
 void (*multi_tex_coord2iv)(GLIContext ctx, GLenum target, const GLint *v);
 void (*multi_tex_coord2s)(GLIContext ctx, GLenum target, GLshort s, GLshort t);
 void (*multi_tex_coord2sv)(GLIContext ctx, GLenum target, const GLshort *v);
 void (*multi_tex_coord3d)(GLIContext ctx, GLenum target, GLdouble s, GLdouble t, GLdouble r);
 void (*multi_tex_coord3dv)(GLIContext ctx, GLenum target, const GLdouble *v);
 void (*multi_tex_coord3f)(GLIContext ctx, GLenum target, GLfloat s, GLfloat t, GLfloat r);
 void (*multi_tex_coord3fv)(GLIContext ctx, GLenum target, const GLfloat *v);
 void (*multi_tex_coord3i)(GLIContext ctx, GLenum target, GLint s, GLint t, GLint r);
 void (*multi_tex_coord3iv)(GLIContext ctx, GLenum target, const GLint *v);
 void (*multi_tex_coord3s)(GLIContext ctx, GLenum target, GLshort s, GLshort t, GLshort r);
 void (*multi_tex_coord3sv)(GLIContext ctx, GLenum target, const GLshort *v);
 void (*multi_tex_coord4d)(GLIContext ctx, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
 void (*multi_tex_coord4dv)(GLIContext ctx, GLenum target, const GLdouble *v);
 void (*multi_tex_coord4f)(GLIContext ctx, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
 void (*multi_tex_coord4fv)(GLIContext ctx, GLenum target, const GLfloat *v);
 void (*multi_tex_coord4i)(GLIContext ctx, GLenum target, GLint s, GLint t, GLint r, GLint q);
 void (*multi_tex_coord4iv)(GLIContext ctx, GLenum target, const GLint *v);
 void (*multi_tex_coord4s)(GLIContext ctx, GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
 void (*multi_tex_coord4sv)(GLIContext ctx, GLenum target, const GLshort *v);
 void (*load_transpose_matrixd)(GLIContext ctx, const GLdouble *m);
 void (*load_transpose_matrixf)(GLIContext ctx, const GLfloat *m);
 void (*mult_transpose_matrixd)(GLIContext ctx, const GLdouble *m);
 void (*mult_transpose_matrixf)(GLIContext ctx, const GLfloat *m);
 void (*compressed_tex_image3D)(GLIContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
 void (*compressed_tex_image2D)(GLIContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
 void (*compressed_tex_image1D)(GLIContext ctx, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
 void (*compressed_tex_sub_image3D)(GLIContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
 void (*compressed_tex_sub_image2D)(GLIContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
 void (*compressed_tex_sub_image1D)(GLIContext ctx, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
 void (*get_compressed_tex_image)(GLIContext ctx, GLenum target, GLint level, GLvoid *img);
 void (*secondary_color3b)(GLIContext ctx, GLbyte red, GLbyte green, GLbyte blue);
 void (*secondary_color3bv)(GLIContext ctx, const GLbyte *v);
 void (*secondary_color3d)(GLIContext ctx, GLdouble red, GLdouble green, GLdouble blue);
 void (*secondary_color3dv)(GLIContext ctx, const GLdouble *v);
 void (*secondary_color3f)(GLIContext ctx, GLfloat red, GLfloat green, GLfloat blue);
 void (*secondary_color3fv)(GLIContext ctx, const GLfloat *v);
 void (*secondary_color3i)(GLIContext ctx, GLint red, GLint green, GLint blue);
 void (*secondary_color3iv)(GLIContext ctx, const GLint *v);
 void (*secondary_color3s)(GLIContext ctx, GLshort red, GLshort green, GLshort blue);
 void (*secondary_color3sv)(GLIContext ctx, const GLshort *v);
 void (*secondary_color3ub)(GLIContext ctx, GLubyte red, GLubyte green, GLubyte blue);
 void (*secondary_color3ubv)(GLIContext ctx, const GLubyte *v);
 void (*secondary_color3ui)(GLIContext ctx, GLuint red, GLuint green, GLuint blue);
 void (*secondary_color3uiv)(GLIContext ctx, const GLuint *v);
 void (*secondary_color3us)(GLIContext ctx, GLushort red, GLushort green, GLushort blue);
 void (*secondary_color3usv)(GLIContext ctx, const GLushort *v);
 void (*secondary_color_pointer)(GLIContext ctx, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
 void (*vertex_array_range_EXT)(GLIContext ctx, GLsizei count, const GLvoid *pointer);
 void (*flush_vertex_array_range_EXT)(GLIContext ctx, GLsizei count, const GLvoid *pointer);
 void (*draw_range_elements)(GLIContext ctx, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
 void (*color_table)(GLIContext ctx, GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
 void (*color_table_parameterfv)(GLIContext ctx, GLenum target, GLenum pname, const GLfloat *params);
 void (*color_table_parameteriv)(GLIContext ctx, GLenum target, GLenum pname, const GLint *params);
 void (*copy_color_table)(GLIContext ctx, GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
 void (*get_color_table)(GLIContext ctx, GLenum target, GLenum format, GLenum type, GLvoid *table);
 void (*get_color_table_parameterfv)(GLIContext ctx, GLenum target, GLenum pname, GLfloat *params);
 void (*get_color_table_parameteriv)(GLIContext ctx, GLenum target, GLenum pname, GLint *params);
 void (*color_sub_table)(GLIContext ctx, GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
 void (*copy_color_sub_table)(GLIContext ctx, GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
 void (*convolution_filter1D)(GLIContext ctx, GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
 void (*convolution_filter2D)(GLIContext ctx, GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
 void (*convolution_parameterf)(GLIContext ctx, GLenum target, GLenum pname, GLfloat params);
 void (*convolution_parameterfv)(GLIContext ctx, GLenum target, GLenum pname, const GLfloat *params);
 void (*convolution_parameteri)(GLIContext ctx, GLenum target, GLenum pname, GLint params);
 void (*convolution_parameteriv)(GLIContext ctx, GLenum target, GLenum pname, const GLint *params);
 void (*copy_convolution_filter1D)(GLIContext ctx, GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
 void (*copy_convolution_filter2D)(GLIContext ctx, GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
 void (*get_convolution_filter)(GLIContext ctx, GLenum target, GLenum format, GLenum type, GLvoid *image);
 void (*get_convolution_parameterfv)(GLIContext ctx, GLenum target, GLenum pname, GLfloat *params);
 void (*get_convolution_parameteriv)(GLIContext ctx, GLenum target, GLenum pname, GLint *params);
 void (*get_separable_filter)(GLIContext ctx, GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
 void (*separable_filter2D)(GLIContext ctx, GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
 void (*get_histogram)(GLIContext ctx, GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
 void (*get_histogram_parameterfv)(GLIContext ctx, GLenum target, GLenum pname, GLfloat *params);
 void (*get_histogram_parameteriv)(GLIContext ctx, GLenum target, GLenum pname, GLint *params);
 void (*get_minmax)(GLIContext ctx, GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
 void (*get_minmax_parameterfv)(GLIContext ctx, GLenum target, GLenum pname, GLfloat *params);
 void (*get_minmax_parameteriv)(GLIContext ctx, GLenum target, GLenum pname, GLint *params);
 void (*histogram)(GLIContext ctx, GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
 void (*minmax)(GLIContext ctx, GLenum target, GLenum internalformat, GLboolean sink);
 void (*reset_histogram)(GLIContext ctx, GLenum target);
 void (*reset_minmax)(GLIContext ctx, GLenum target);
 void (*tex_image3D)(GLIContext ctx, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
 void (*tex_sub_image3D)(GLIContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
 void (*copy_tex_sub_image3D)(GLIContext ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
 void (*combiner_parameterfv_NV)(GLIContext ctx, GLenum pname, const GLfloat *params);
 void (*combiner_parameterf_NV)(GLIContext ctx, GLenum pname, GLfloat param);
 void (*combiner_parameteriv_NV)(GLIContext ctx, GLenum pname, const GLint *params);
 void (*combiner_parameteri_NV)(GLIContext ctx, GLenum pname, GLint param);
 void (*combiner_input_NV)(GLIContext ctx, GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
 void (*combiner_output_NV)(GLIContext ctx, GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
 void (*final_combiner_input_NV)(GLIContext ctx, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
 void (*get_combiner_input_parameterfv_NV)(GLIContext ctx, GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
 void (*get_combiner_input_parameteriv_NV)(GLIContext ctx, GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
 void (*get_combiner_output_parameterfv_NV)(GLIContext ctx, GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
 void (*get_combiner_output_parameteriv_NV)(GLIContext ctx, GLenum stage, GLenum portion, GLenum pname, GLint *params);
 void (*get_final_combiner_input_parameterfv_NV)(GLIContext ctx, GLenum variable, GLenum pname, GLfloat *params);
 void (*get_final_combiner_input_parameteriv_NV)(GLIContext ctx, GLenum variable, GLenum pname, GLint *params);
 void (*combiner_stage_parameterfv_NV)(GLIContext ctx, GLenum stage, GLenum pname, const GLfloat *params);
 void (*get_combiner_stage_parameterfv_NV)(GLIContext ctx, GLenum stage, GLenum pname, GLfloat *params);
 void (*texture_range_APPLE)(GLIContext ctx, GLenum target, GLsizei length, const GLvoid *pointer);
 void (*get_tex_parameter_pointerv_APPLE)(GLIContext ctx, GLenum target, GLenum pname, GLvoid **params);
 void (*blend_equation_separate_EXT)(GLIContext ctx, GLenum equationRGB, GLenum equationAlpha);
 void (*sample_coverage)(GLIContext ctx, GLclampf value, GLboolean invert);
 void (*sample_pass)(GLIContext ctx, GLenum mode);
 void (*pn_trianglesi_ATI)(GLIContext ctx, GLenum pname, GLint param);
 void (*pn_trianglesf_ATI)(GLIContext ctx, GLenum pname, GLfloat param);
 void (*gen_fences_APPLE)(GLIContext ctx, GLsizei n, GLuint *fences);
 void (*delete_fences_APPLE)(GLIContext ctx, GLsizei n, const GLuint *fences);
 void (*set_fence_APPLE)(GLIContext ctx, GLuint fence);
 GLboolean (*is_fence_APPLE)(GLIContext ctx, GLuint fence);
 GLboolean (*test_fence_APPLE)(GLIContext ctx, GLuint fence);
 void (*finish_fence_APPLE)(GLIContext ctx, GLuint fence);
 GLboolean (*test_object_APPLE)(GLIContext ctx, GLenum object, GLuint name);
 void (*finish_object_APPLE)(GLIContext ctx, GLenum object, GLuint name);
 void (*bind_program_ARB)(GLIContext ctx, GLenum target, GLuint program);
 void (*delete_programs_ARB)(GLIContext ctx, GLsizei n, const GLuint *programs);
 void (*gen_programs_ARB)(GLIContext ctx, GLsizei n, GLuint *programs);
 GLboolean (*is_program_ARB)(GLIContext ctx, GLuint program);
 void (*vertex_attrib1s_ARB)(GLIContext ctx, GLuint index, GLshort x);
 void (*vertex_attrib1f_ARB)(GLIContext ctx, GLuint index, GLfloat x);
 void (*vertex_attrib1d_ARB)(GLIContext ctx, GLuint index, GLdouble x);
 void (*vertex_attrib2s_ARB)(GLIContext ctx, GLuint index, GLshort x, GLshort y);
 void (*vertex_attrib2f_ARB)(GLIContext ctx, GLuint index, GLfloat x, GLfloat y);
 void (*vertex_attrib2d_ARB)(GLIContext ctx, GLuint index, GLdouble x, GLdouble y);
 void (*vertex_attrib3s_ARB)(GLIContext ctx, GLuint index, GLshort x, GLshort y, GLshort z);
 void (*vertex_attrib3f_ARB)(GLIContext ctx, GLuint index, GLfloat x, GLfloat y, GLfloat z);
 void (*vertex_attrib3d_ARB)(GLIContext ctx, GLuint index, GLdouble x, GLdouble y, GLdouble z);
 void (*vertex_attrib4s_ARB)(GLIContext ctx, GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
 void (*vertex_attrib4f_ARB)(GLIContext ctx, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 void (*vertex_attrib4d_ARB)(GLIContext ctx, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
 void (*vertex_attrib4Nub_ARB)(GLIContext ctx, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
 void (*vertex_attrib1sv_ARB)(GLIContext ctx, GLuint index, const GLshort *v);
 void (*vertex_attrib1fv_ARB)(GLIContext ctx, GLuint index, const GLfloat *v);
 void (*vertex_attrib1dv_ARB)(GLIContext ctx, GLuint index, const GLdouble *v);
 void (*vertex_attrib2sv_ARB)(GLIContext ctx, GLuint index, const GLshort *v);
 void (*vertex_attrib2fv_ARB)(GLIContext ctx, GLuint index, const GLfloat *v);
 void (*vertex_attrib2dv_ARB)(GLIContext ctx, GLuint index, const GLdouble *v);
 void (*vertex_attrib3sv_ARB)(GLIContext ctx, GLuint index, const GLshort *v);
 void (*vertex_attrib3fv_ARB)(GLIContext ctx, GLuint index, const GLfloat *v);
 void (*vertex_attrib3dv_ARB)(GLIContext ctx, GLuint index, const GLdouble *v);
 void (*vertex_attrib4bv_ARB)(GLIContext ctx, GLuint index, const GLbyte *v);
 void (*vertex_attrib4sv_ARB)(GLIContext ctx, GLuint index, const GLshort *v);
 void (*vertex_attrib4iv_ARB)(GLIContext ctx, GLuint index, const GLint *v);
 void (*vertex_attrib4ubv_ARB)(GLIContext ctx, GLuint index, const GLubyte *v);
 void (*vertex_attrib4usv_ARB)(GLIContext ctx, GLuint index, const GLushort *v);
 void (*vertex_attrib4uiv_ARB)(GLIContext ctx, GLuint index, const GLuint *v);
 void (*vertex_attrib4fv_ARB)(GLIContext ctx, GLuint index, const GLfloat *v);
 void (*vertex_attrib4dv_ARB)(GLIContext ctx, GLuint index, const GLdouble *v);
 void (*vertex_attrib4Nbv_ARB)(GLIContext ctx, GLuint index, const GLbyte *v);
 void (*vertex_attrib4Nsv_ARB)(GLIContext ctx, GLuint index, const GLshort *v);
 void (*vertex_attrib4Niv_ARB)(GLIContext ctx, GLuint index, const GLint *v);
 void (*vertex_attrib4Nubv_ARB)(GLIContext ctx, GLuint index, const GLubyte *v);
 void (*vertex_attrib4Nusv_ARB)(GLIContext ctx, GLuint index, const GLushort *v);
 void (*vertex_attrib4Nuiv_ARB)(GLIContext ctx, GLuint index, const GLuint *v);
 void (*vertex_attrib_pointer_ARB)(GLIContext ctx, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
 void (*enable_vertex_attrib_array_ARB)(GLIContext ctx, GLuint index);
 void (*disable_vertex_attrib_array_ARB)(GLIContext ctx, GLuint index);
 void (*get_vertex_attribdv_ARB)(GLIContext ctx, GLuint index, GLenum pname, GLdouble *params);
 void (*get_vertex_attribfv_ARB)(GLIContext ctx, GLuint index, GLenum pname, GLfloat *params);
 void (*get_vertex_attribiv_ARB)(GLIContext ctx, GLuint index, GLenum pname, GLint *params);
 void (*get_vertex_attrib_pointerv_ARB)(GLIContext ctx, GLuint index, GLenum pname, GLvoid **pointer);
 void (*program_env_parameter4d_ARB)(GLIContext ctx, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
 void (*program_env_parameter4dv_ARB)(GLIContext ctx, GLenum target, GLuint index, const GLdouble *params);
 void (*program_env_parameter4f_ARB)(GLIContext ctx, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 void (*program_env_parameter4fv_ARB)(GLIContext ctx, GLenum target, GLuint index, const GLfloat *params);
 void (*program_local_parameter4d_ARB)(GLIContext ctx, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
 void (*program_local_parameter4dv_ARB)(GLIContext ctx, GLenum target, GLuint index, const GLdouble *params);
 void (*program_local_parameter4f_ARB)(GLIContext ctx, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 void (*program_local_parameter4fv_ARB)(GLIContext ctx, GLenum target, GLuint index, const GLfloat *params);
 void (*get_program_env_parameterdv_ARB)(GLIContext ctx, GLenum target, GLuint index, GLdouble *params);
 void (*get_program_env_parameterfv_ARB)(GLIContext ctx, GLenum target, GLuint index, GLfloat *params);
 void (*get_program_local_parameterdv_ARB)(GLIContext ctx, GLenum target, GLuint index, GLdouble *params);
 void (*get_program_local_parameterfv_ARB)(GLIContext ctx, GLenum target, GLuint index, GLfloat *params);
 void (*program_string_ARB)(GLIContext ctx, GLenum target, GLenum format, GLsizei len, const GLvoid* string);
 void (*get_program_string_ARB)(GLIContext ctx, GLenum target, GLenum pname, GLvoid *string);
 void (*get_programiv_ARB)(GLIContext ctx, GLenum target, GLenum pname, GLint *params);
 void (*enable_vertex_attrib_ARB)(GLIContext ctx, GLuint index, GLenum pname);
 void (*disable_vertex_attrib_ARB)(GLIContext ctx, GLuint index, GLenum pname);
 GLboolean (*is_vertex_attrib_enabled_ARB)(GLIContext ctx, GLuint index, GLenum pname);
 void (*map_vertex_attrib1d_ARB)(GLIContext ctx, GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
 void (*map_vertex_attrib1f_ARB)(GLIContext ctx, GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
 void (*map_vertex_attrib2d_ARB)(GLIContext ctx, GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
 void (*map_vertex_attrib2f_ARB)(GLIContext ctx, GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
 void (*point_parameterf)(GLIContext ctx, GLenum pname, GLfloat param);
 void (*point_parameterfv)(GLIContext ctx, GLenum pname, const GLfloat *params);
 void (*point_parameteri)(GLIContext ctx, GLenum pname, GLint param);
 void (*point_parameteriv)(GLIContext ctx, GLenum pname, const GLint *params);
 void (*fog_coordf)(GLIContext ctx, GLfloat coord);
 void (*fog_coordfv)(GLIContext ctx, const GLfloat *coord);
 void (*fog_coordd)(GLIContext ctx, GLdouble coord);
 void (*fog_coorddv)(GLIContext ctx, const GLdouble *coord);
 void (*fog_coord_pointer)(GLIContext ctx, GLenum type, GLsizei stride, const GLvoid *pointer);
 void (*vertex_array_parameteri_EXT)(GLIContext ctx, GLenum pname, GLint param);
 void (*bind_vertex_array_EXT)(GLIContext ctx, GLuint id);
 void (*delete_vertex_arrays_EXT)(GLIContext ctx, GLsizei n, const GLuint *ids);
 void (*gen_vertex_arrays_EXT)(GLIContext ctx, GLsizei n, GLuint *ids);
 GLboolean (*is_vertex_array_EXT)(GLIContext ctx, GLuint id);
 void (*element_pointer_APPLE)(GLIContext ctx, GLenum type, const GLvoid *pointer);
 void (*draw_element_array_APPLE)(GLIContext ctx, GLenum mode, GLint first, GLsizei count);
 void (*draw_range_element_array_APPLE)(GLIContext ctx, GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
 void (*weightbv_ARB)(GLIContext ctx, GLint size, const GLbyte *weights);
 void (*weightsv_ARB)(GLIContext ctx, GLint size, const GLshort *weights);
 void (*weightiv_ARB)(GLIContext ctx, GLint size, const GLint *weights);
 void (*weightfv_ARB)(GLIContext ctx, GLint size, const GLfloat *weights);
 void (*weightdv_ARB)(GLIContext ctx, GLint size, const GLdouble *weights);
 void (*weightubv_ARB)(GLIContext ctx, GLint size, const GLubyte *weights);
 void (*weightusv_ARB)(GLIContext ctx, GLint size, const GLushort *weights);
 void (*weightuiv_ARB)(GLIContext ctx, GLint size, const GLuint *weights);
 void (*weight_pointer_ARB)(GLIContext ctx, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
 void (*vertex_blend_ARB)(GLIContext ctx, GLint count);
 void (*multi_draw_arrays)(GLIContext ctx, GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
 void (*multi_draw_elements)(GLIContext ctx, GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount);
 void (*window_pos2d) (GLIContext ctx, GLdouble x, GLdouble y);
 void (*window_pos2dv) (GLIContext ctx, const GLdouble *v);
 void (*window_pos2f) (GLIContext ctx, GLfloat x, GLfloat y);
 void (*window_pos2fv) (GLIContext ctx, const GLfloat *v);
 void (*window_pos2i) (GLIContext ctx, GLint x, GLint y);
 void (*window_pos2iv) (GLIContext ctx, const GLint *v);
 void (*window_pos2s) (GLIContext ctx, GLshort x, GLshort y);
 void (*window_pos2sv) (GLIContext ctx, const GLshort *v);
 void (*window_pos3d) (GLIContext ctx, GLdouble x, GLdouble y, GLdouble z);
 void (*window_pos3dv) (GLIContext ctx, const GLdouble *v);
 void (*window_pos3f) (GLIContext ctx, GLfloat x, GLfloat y, GLfloat z);
 void (*window_pos3fv) (GLIContext ctx, const GLfloat *v);
 void (*window_pos3i) (GLIContext ctx, GLint x, GLint y, GLint z);
 void (*window_pos3iv) (GLIContext ctx, const GLint *v);
 void (*window_pos3s) (GLIContext ctx, GLshort x, GLshort y, GLshort z);
 void (*window_pos3sv) (GLIContext ctx, const GLshort *v);
 void (*active_stencil_face_EXT) (GLIContext ctx, GLenum face);
 void (*stencil_op_separate_ATI) (GLIContext ctx, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
 void (*stencil_func_separate_ATI) (GLIContext ctx, GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
 void (*flush_render_APPLE) (GLIContext ctx);
 void (*finish_render_APPLE) (GLIContext ctx);
 void (*swap_APPLE)(GLIContext ctx);
 void (*delete_object_ARB) (GLIContext ctx, GLhandleARB obj);
 GLhandleARB (*get_handle_ARB) (GLIContext ctx, GLenum pname);
 void (*detach_object_ARB) (GLIContext ctx, GLhandleARB containerObj, GLhandleARB attachedObj);
 GLhandleARB (*create_shader_object_ARB) (GLIContext ctx, GLenum shaderType);
 void (*shader_source_ARB) (GLIContext ctx, GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length);
 void (*compile_shader_ARB) (GLIContext ctx, GLhandleARB shaderObj);
 GLhandleARB (*create_program_object_ARB) (GLIContext ctx);
 void (*attach_object_ARB) (GLIContext ctx, GLhandleARB containerObj, GLhandleARB obj);
 void (*link_program_ARB) (GLIContext ctx, GLhandleARB programObj);
 void (*use_program_object_ARB) (GLIContext ctx, GLhandleARB programObj);
 void (*validate_program_ARB) (GLIContext ctx, GLhandleARB programObj);
 void (*uniform1f_ARB) (GLIContext ctx, GLint location, GLfloat v0);
 void (*uniform2f_ARB) (GLIContext ctx, GLint location, GLfloat v0, GLfloat v1);
 void (*uniform3f_ARB) (GLIContext ctx, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
 void (*uniform4f_ARB) (GLIContext ctx, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
 void (*uniform1i_ARB) (GLIContext ctx, GLint location, GLint v0);
 void (*uniform2i_ARB) (GLIContext ctx, GLint location, GLint v0, GLint v1);
 void (*uniform3i_ARB) (GLIContext ctx, GLint location, GLint v0, GLint v1, GLint v2);
 void (*uniform4i_ARB) (GLIContext ctx, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
 void (*uniform1fv_ARB) (GLIContext ctx, GLint location, GLsizei count, const GLfloat *value);
 void (*uniform2fv_ARB) (GLIContext ctx, GLint location, GLsizei count, const GLfloat *value);
 void (*uniform3fv_ARB) (GLIContext ctx, GLint location, GLsizei count, const GLfloat *value);
 void (*uniform4fv_ARB) (GLIContext ctx, GLint location, GLsizei count, const GLfloat *value);
 void (*uniform1iv_ARB) (GLIContext ctx, GLint location, GLsizei count, const GLint *value);
 void (*uniform2iv_ARB) (GLIContext ctx, GLint location, GLsizei count, const GLint *value);
 void (*uniform3iv_ARB) (GLIContext ctx, GLint location, GLsizei count, const GLint *value);
 void (*uniform4iv_ARB) (GLIContext ctx, GLint location, GLsizei count, const GLint *value);
 void (*uniform_matrix2fv_ARB) (GLIContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
 void (*uniform_matrix3fv_ARB) (GLIContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
 void (*uniform_matrix4fv_ARB) (GLIContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
 void (*get_object_parameterfv_ARB) (GLIContext ctx, GLhandleARB obj, GLenum pname, GLfloat *params);
 void (*get_object_parameteriv_ARB) (GLIContext ctx, GLhandleARB obj, GLenum pname, GLint *params);
 void (*get_info_log_ARB) (GLIContext ctx, GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
 void (*get_attached_objects_ARB) (GLIContext ctx, GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
 GLint (*get_uniform_location_ARB) (GLIContext ctx, GLhandleARB programObj, const GLcharARB *name);
 void (*get_active_uniform_ARB) (GLIContext ctx, GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
 void (*get_uniformfv_ARB) (GLIContext ctx, GLhandleARB programObj, GLint location, GLfloat *params);
 void (*get_uniformiv_ARB) (GLIContext ctx, GLhandleARB programObj, GLint location, GLint *params);
 void (*get_shader_source_ARB) (GLIContext ctx, GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
 void (*bind_attrib_location_ARB) (GLIContext ctx, GLhandleARB programObj, GLuint index, const GLcharARB *name);
 void (*get_active_attrib_ARB) (GLIContext ctx, GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
 GLint (*get_attrib_location_ARB) (GLIContext ctx, GLhandleARB programObj, const GLcharARB *name);
 void (*pad) (GLIContext ctx);
 void (*gen_queries) (GLIContext ctx, GLsizei n, GLuint *ids);
 void (*delete_queries) (GLIContext ctx, GLsizei n, const GLuint *ids);
 GLboolean (*is_query) (GLIContext ctx, GLuint id);
 void (*begin_query) (GLIContext ctx, GLenum target, GLuint id);
 void (*end_query) (GLIContext ctx, GLenum target);
 void (*get_queryiv) (GLIContext ctx, GLenum target, GLenum pname, GLint *params);
 void (*get_query_objectiv) (GLIContext ctx, GLuint id, GLenum pname, GLint *params);
 void (*get_query_objectuiv) (GLIContext ctx, GLuint id, GLenum pname, GLuint *params);
 void (*bind_buffer) (GLIContext ctx, GLenum target, GLuint buffer);
 void (*delete_buffers) (GLIContext ctx, GLsizei n, const GLuint *buffers);
 void (*gen_buffers) (GLIContext ctx, GLsizei n, GLuint *buffers);
 GLboolean (*is_buffer) (GLIContext ctx, GLuint buffer);
 void (*buffer_data) (GLIContext ctx, GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
 void (*buffer_sub_data) (GLIContext ctx, GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
 void (*get_buffer_sub_data) (GLIContext ctx, GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
 GLvoid *(*map_buffer) (GLIContext ctx, GLenum target, GLenum access);
 GLboolean (*unmap_buffer) (GLIContext ctx, GLenum target);
 void (*get_buffer_parameteriv) (GLIContext ctx, GLenum target, GLenum pname, GLint *params);
 void (*get_buffer_pointerv) (GLIContext ctx, GLenum target, GLenum pname, GLvoid **params);
 void (*depth_bounds_EXT) (GLIContext ctx, GLclampd zmin, GLclampd zmax);
 void (*draw_buffers_ARB) (GLIContext ctx, GLsizei n, const GLenum *bufs);

 GLboolean (*is_shader) (GLIContext ctx, GLuint shader);
 GLboolean (*is_program) (GLIContext ctx, GLuint program);
 void (*get_shaderiv) (GLIContext ctx, GLuint shader, GLenum pname, GLint *params);
 void (*get_programiv) (GLIContext ctx, GLuint program, GLenum pname, GLint *params);
 void (*get_shader_info_log) (GLIContext ctx, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
 void (*get_program_info_log) (GLIContext ctx, GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);

 void (*stencil_func_separate) (GLIContext ctx, GLenum face, GLenum func, GLint ref, GLuint mask);
 void (*stencil_mask_separate) (GLIContext ctx, GLenum face, GLuint mask);

 void (*multi_draw_element_array_APPLE)(GLIContext ctx, GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
 void (*multi_draw_range_element_array_APPLE)(GLIContext ctx, GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);


 GLboolean (*is_renderbuffer_EXT) (GLIContext ctx, GLuint renderbuffer);
 void (*bind_renderbuffer_EXT) (GLIContext ctx, GLenum target, GLuint renderbuffer);
 void (*delete_renderbuffers_EXT) (GLIContext ctx, GLsizei n, const GLuint *renderbuffers);
 void (*gen_renderbuffers_EXT) (GLIContext ctx, GLsizei n, GLuint *renderbuffers);
 void (*renderbuffer_storage_EXT) (GLIContext ctx, GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
 void (*get_renderbuffer_parameteriv_EXT) (GLIContext ctx, GLenum target, GLenum pname, GLint *params);
 GLboolean (*is_framebuffer_EXT) (GLIContext ctx, GLuint framebuffer);
 void (*bind_framebuffer_EXT) (GLIContext ctx, GLenum target, GLuint framebuffer);
 void (*delete_framebuffers_EXT) (GLIContext ctx, GLsizei n, const GLuint *framebuffers);
 void (*gen_framebuffers_EXT) (GLIContext ctx, GLsizei n, GLuint *framebuffers);
 GLenum (*check_framebuffer_status_EXT) (GLIContext ctx, GLenum target);
 void (*framebuffer_texture1D_EXT) (GLIContext ctx, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
 void (*framebuffer_texture2D_EXT) (GLIContext ctx, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
 void (*framebuffer_texture3D_EXT) (GLIContext ctx, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
 void (*framebuffer_renderbuffer_EXT) (GLIContext ctx, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
 void (*get_framebuffer_attachment_parameteriv_EXT) (GLIContext ctx, GLenum target, GLenum attachment, GLenum pname, GLint *params);
 void (*generate_mipmap_EXT) (GLIContext ctx, GLenum target);

 void (*buffer_parameteri_APPLE) (GLIContext ctx, GLenum target, GLenum pname, GLint param);
 void (*flush_mapped_buffer_range_APPLE) (GLIContext ctx, GLenum target, GLintptrARB offset, GLsizeiptrARB size);

 void (*program_env_parameters4fv_EXT)(GLIContext ctx, GLenum target, GLuint index, GLsizei count, const GLfloat *params);
 void (*program_local_parameters4fv_EXT)(GLIContext ctx, GLenum target, GLuint index, GLsizei count, const GLfloat *params);

 GLenum (*object_purgeable_APPLE)(GLIContext ctx, GLenum object, GLuint name, GLenum option);
 GLenum (*object_unpurgeable_APPLE)(GLIContext ctx, GLenum object, GLuint name, GLenum option);


 void (*shader_binary_OES)(GLIContext ctx, GLint n, GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLint length);
 void (*get_shader_precision_format_OES)(GLIContext ctx, GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
 void (*release_shader_compiler_OES)(GLIContext ctx);
 void (*get_renderbuffer_storage_formatsiv_OES)(GLIContext ctx, GLenum target, int n, GLint *listofformats, GLint *numsupportedformats);


 void (*uniform_matrix2x3fv) (GLIContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
 void (*uniform_matrix3x2fv) (GLIContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
 void (*uniform_matrix2x4fv) (GLIContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
 void (*uniform_matrix4x2fv) (GLIContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
 void (*uniform_matrix3x4fv) (GLIContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
 void (*uniform_matrix4x3fv) (GLIContext ctx, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);


 void (*blit_framebuffer_EXT) (GLIContext ctx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
 void (*renderbuffer_storage_multisample_EXT) (GLIContext ctx, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
} GLIFunctionDispatch;


}
# 10 "/System/Library/Frameworks/OpenGL.framework/Headers/CGLContext.h" 2 3


extern "C" {






typedef struct _CGLPrivateObject *CGLPrivateObj;




struct _CGLContextObject {
 GLIContext rend;
 GLIFunctionDispatch disp;
 CGLPrivateObj priv;
 void *stak;
};



}
# 10 "/System/Library/Frameworks/OpenGL.framework/Headers/CGLMacro.h" 2 3
# 11 "CasEngine.h" 2
# 1 "FusionObject.h" 1
# 25 "FusionObject.h"
       

# 1 "Fusion.h" 1
# 25 "Fusion.h"
       






typedef const struct OpaqueJSContext* JSContextRef;
typedef struct OpaqueJSValue* JSObjectRef;

namespace Fusion {




}







# 1 "FusionMacos.h" 1
# 25 "FusionMacos.h"
       


# 1 "/usr/include/pthread.h" 1 3 4
# 57 "/usr/include/pthread.h" 3 4
# 1 "/usr/include/pthread_impl.h" 1 3 4
# 58 "/usr/include/pthread.h" 2 3 4

# 1 "/usr/include/sched.h" 1 3 4
# 30 "/usr/include/sched.h" 3 4
extern "C" {




struct sched_param { int sched_priority; char __opaque[4]; };


extern int sched_yield(void);
extern int sched_get_priority_min(int);
extern int sched_get_priority_max(int);
}
# 60 "/usr/include/pthread.h" 2 3 4
# 148 "/usr/include/pthread.h" 3 4
extern "C" {
# 244 "/usr/include/pthread.h" 3 4
int pthread_atfork(void (*)(void), void (*)(void),
                      void (*)(void));
int pthread_attr_destroy(pthread_attr_t *);
int pthread_attr_getdetachstate(const pthread_attr_t *,
          int *);
int pthread_attr_getguardsize(const pthread_attr_t * ,
                                      size_t * );
int pthread_attr_getinheritsched(const pthread_attr_t * ,
           int * );
int pthread_attr_getschedparam(const pthread_attr_t * ,
                                     struct sched_param * );
int pthread_attr_getschedpolicy(const pthread_attr_t * ,
          int * );
int pthread_attr_getscope(const pthread_attr_t * , int * );
int pthread_attr_getstack(const pthread_attr_t * ,
                                      void ** , size_t * );
int pthread_attr_getstackaddr(const pthread_attr_t * ,
                                      void ** );
int pthread_attr_getstacksize(const pthread_attr_t * ,
                                      size_t * );
int pthread_attr_init(pthread_attr_t *);
int pthread_attr_setdetachstate(pthread_attr_t *,
          int );
int pthread_attr_setguardsize(pthread_attr_t *, size_t );
int pthread_attr_setinheritsched(pthread_attr_t *,
           int );
int pthread_attr_setschedparam(pthread_attr_t * ,
                                     const struct sched_param * );
int pthread_attr_setschedpolicy(pthread_attr_t *,
          int );
int pthread_attr_setscope(pthread_attr_t *, int);
int pthread_attr_setstack(pthread_attr_t *,
                                      void *, size_t );
int pthread_attr_setstackaddr(pthread_attr_t *,
                                      void *);
int pthread_attr_setstacksize(pthread_attr_t *, size_t );
int pthread_cancel(pthread_t ) __asm("_" "pthread_cancel" "$UNIX2003");

int pthread_cond_broadcast(pthread_cond_t *);
int pthread_cond_destroy(pthread_cond_t *);
int pthread_cond_init(pthread_cond_t * ,
                            const pthread_condattr_t * ) __asm("_" "pthread_cond_init" "$UNIX2003");
int pthread_cond_signal(pthread_cond_t *);
int pthread_cond_timedwait(pthread_cond_t * ,
     pthread_mutex_t * ,
     const struct timespec * ) __asm("_" "pthread_cond_timedwait" "$UNIX2003");
int pthread_cond_wait(pthread_cond_t * ,
       pthread_mutex_t * ) __asm("_" "pthread_cond_wait" "$UNIX2003");
int pthread_condattr_destroy(pthread_condattr_t *);
int pthread_condattr_init(pthread_condattr_t *);
int pthread_condattr_getpshared(const pthread_condattr_t * ,
   int * );
int pthread_condattr_setpshared(pthread_condattr_t *,
   int );
int pthread_create(pthread_t * ,
                         const pthread_attr_t * ,
                         void *(*)(void *),
                         void * );
int pthread_detach(pthread_t );
int pthread_equal(pthread_t ,
   pthread_t );
void pthread_exit(void *) __attribute__((__noreturn__));
int pthread_getconcurrency(void);
int pthread_getschedparam(pthread_t , int * , struct sched_param * );
void *pthread_getspecific(pthread_key_t );
int pthread_join(pthread_t , void **) __asm("_" "pthread_join" "$UNIX2003");
int pthread_key_create(pthread_key_t *, void (*)(void *));
int pthread_key_delete(pthread_key_t );
int pthread_mutex_destroy(pthread_mutex_t *);
int pthread_mutex_getprioceiling(const pthread_mutex_t * , int * );
int pthread_mutex_init(pthread_mutex_t * , const pthread_mutexattr_t * );
int pthread_mutex_lock(pthread_mutex_t *);
int pthread_mutex_setprioceiling(pthread_mutex_t * , int, int * );
int pthread_mutex_trylock(pthread_mutex_t *);
int pthread_mutex_unlock(pthread_mutex_t *);
int pthread_mutexattr_destroy(pthread_mutexattr_t *) __asm("_" "pthread_mutexattr_destroy" "$UNIX2003");
int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t * , int * );
int pthread_mutexattr_getprotocol(const pthread_mutexattr_t * , int * );
int pthread_mutexattr_getpshared(const pthread_mutexattr_t * , int * );
int pthread_mutexattr_gettype(const pthread_mutexattr_t * , int * );
int pthread_mutexattr_init(pthread_mutexattr_t *);
int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *, int);
int pthread_mutexattr_setprotocol(pthread_mutexattr_t *, int);
int pthread_mutexattr_setpshared(pthread_mutexattr_t *, int );
int pthread_mutexattr_settype(pthread_mutexattr_t *, int);
int pthread_once(pthread_once_t *, void (*)(void));
int pthread_rwlock_destroy(pthread_rwlock_t * ) __asm("_" "pthread_rwlock_destroy" "$UNIX2003");
int pthread_rwlock_init(pthread_rwlock_t * , const pthread_rwlockattr_t * ) __asm("_" "pthread_rwlock_init" "$UNIX2003");
int pthread_rwlock_rdlock(pthread_rwlock_t *) __asm("_" "pthread_rwlock_rdlock" "$UNIX2003");
int pthread_rwlock_tryrdlock(pthread_rwlock_t *) __asm("_" "pthread_rwlock_tryrdlock" "$UNIX2003");
int pthread_rwlock_trywrlock(pthread_rwlock_t *) __asm("_" "pthread_rwlock_trywrlock" "$UNIX2003");
int pthread_rwlock_wrlock(pthread_rwlock_t *) __asm("_" "pthread_rwlock_wrlock" "$UNIX2003");
int pthread_rwlock_unlock(pthread_rwlock_t *) __asm("_" "pthread_rwlock_unlock" "$UNIX2003");
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *);
int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t * ,
   int * );
int pthread_rwlockattr_init(pthread_rwlockattr_t *);
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *,
   int );
pthread_t pthread_self(void);

int pthread_setcancelstate(int , int *) __asm("_" "pthread_setcancelstate" "$UNIX2003");
int pthread_setcanceltype(int , int *) __asm("_" "pthread_setcanceltype" "$UNIX2003");
int pthread_setconcurrency(int);
int pthread_setschedparam(pthread_t ,
    int ,
                                const struct sched_param *);
int pthread_setspecific(pthread_key_t ,
         const void *);
void pthread_testcancel(void) __asm("_" "pthread_testcancel" "$UNIX2003");



int pthread_is_threaded_np(void);


int pthread_main_np(void);


mach_port_t pthread_mach_thread_np(pthread_t);
size_t pthread_get_stacksize_np(pthread_t);
void * pthread_get_stackaddr_np(pthread_t);


int pthread_cond_signal_thread_np(pthread_cond_t *, pthread_t);


int pthread_cond_timedwait_relative_np(pthread_cond_t *,
     pthread_mutex_t *,
     const struct timespec *);


int pthread_create_suspended_np(pthread_t *,
                         const pthread_attr_t *,
                         void *(*)(void *),
                         void *);
int pthread_kill(pthread_t, int);
int pthread_sigmask(int, const sigset_t *, sigset_t *) __asm("_" "pthread_sigmask" "$UNIX2003");
void pthread_yield_np(void);

}
# 29 "FusionMacos.h" 2


# 1 "/usr/include/c++/4.0.0/cctype" 1 3
# 46 "/usr/include/c++/4.0.0/cctype" 3
       
# 47 "/usr/include/c++/4.0.0/cctype" 3

# 1 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++config.h" 1 3
# 35 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++config.h" 3
# 1 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/os_defines.h" 1 3
# 36 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++config.h" 2 3
# 64 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++config.h" 3
namespace __gnu_debug_def { }

namespace __gnu_debug
{
  using namespace __gnu_debug_def;
}
# 49 "/usr/include/c++/4.0.0/cctype" 2 3
# 66 "/usr/include/c++/4.0.0/cctype" 3
namespace std
{
  using ::isalnum;
  using ::isalpha;
  using ::iscntrl;
  using ::isdigit;
  using ::isgraph;
  using ::islower;
  using ::isprint;
  using ::ispunct;
  using ::isspace;
  using ::isupper;
  using ::isxdigit;
  using ::tolower;
  using ::toupper;
}
# 32 "FusionMacos.h" 2
# 1 "/usr/include/sys/stat.h" 1 3 4
# 73 "/usr/include/sys/stat.h" 3 4
# 1 "/usr/include/sys/_structs.h" 1 3 4
# 74 "/usr/include/sys/stat.h" 2 3 4
# 151 "/usr/include/sys/stat.h" 3 4
struct ostat {
 __uint16_t st_dev;
 ino_t st_ino;
 mode_t st_mode;
 nlink_t st_nlink;
 __uint16_t st_uid;
 __uint16_t st_gid;
 __uint16_t st_rdev;
 __int32_t st_size;
 struct timespec st_atimespec;
 struct timespec st_mtimespec;
 struct timespec st_ctimespec;
 __int32_t st_blksize;
 __int32_t st_blocks;
 __uint32_t st_flags;
 __uint32_t st_gen;
};
# 227 "/usr/include/sys/stat.h" 3 4
struct stat {
 dev_t st_dev;
 ino_t st_ino;
 mode_t st_mode;
 nlink_t st_nlink;
 uid_t st_uid;
 gid_t st_gid;
 dev_t st_rdev;

 struct timespec st_atimespec;
 struct timespec st_mtimespec;
 struct timespec st_ctimespec;
# 247 "/usr/include/sys/stat.h" 3 4
 off_t st_size;
 blkcnt_t st_blocks;
 blksize_t st_blksize;
 __uint32_t st_flags;
 __uint32_t st_gen;
 __int32_t st_lspare;
 __int64_t st_qspare[2];
};





struct stat64 { dev_t st_dev; mode_t st_mode; nlink_t st_nlink; __darwin_ino64_t st_ino; uid_t st_uid; gid_t st_gid; dev_t st_rdev; struct timespec st_atimespec; struct timespec st_mtimespec; struct timespec st_ctimespec; struct timespec st_birthtimespec; off_t st_size; blkcnt_t st_blocks; blksize_t st_blksize; __uint32_t st_flags; __uint32_t st_gen; __int32_t st_lspare; __int64_t st_qspare[2]; };
# 423 "/usr/include/sys/stat.h" 3 4
extern "C" {

int chmod(const char *, mode_t) __asm("_" "chmod" "$UNIX2003");
int fchmod(int, mode_t) __asm("_" "fchmod" "$UNIX2003");
int fstat(int, struct stat *) ;
int lstat(const char *, struct stat *) ;
int mkdir(const char *, mode_t);
int mkfifo(const char *, mode_t);
int stat(const char *, struct stat *) ;
int mknod(const char *, mode_t, dev_t);
mode_t umask(mode_t);







int chflags(const char *, __uint32_t);
int chmodx_np(const char *, filesec_t);
int fchflags(int, __uint32_t);
int fchmodx_np(int, filesec_t);
int fstatx_np(int, struct stat *, filesec_t) ;
int lchflags(const char *, __uint32_t);
int lchmod(const char *, mode_t);
int lstatx_np(const char *, struct stat *, filesec_t) ;
int mkdirx_np(const char *, filesec_t);
int mkfifox_np(const char *, filesec_t);
int statx_np(const char *, struct stat *, filesec_t) ;
int umaskx_np(filesec_t);

int fstatx64_np(int, struct stat64 *, filesec_t);
int lstatx64_np(const char *, struct stat64 *, filesec_t);
int statx64_np(const char *, struct stat64 *, filesec_t);
int fstat64(int, struct stat64 *);
int lstat64(const char *, struct stat64 *);
int stat64(const char *, struct stat64 *);


}
# 33 "FusionMacos.h" 2
# 51 "FusionMacos.h"
namespace Fusion {







 typedef pthread_t threadid_t;
# 71 "FusionMacos.h"
 typedef pthread_key_t tlskey_t;


 inline tlskey_t tlsAlloc() { tlskey_t key; pthread_key_create(&key, __null); return key; }
 inline bool tlsFree(tlskey_t k) { return pthread_key_delete(k) == 0; }
 inline bool tlsSetValue(tlskey_t k, void* d) { return pthread_setspecific(k, d) == 0; }
 inline void* tlsGetValue(tlskey_t k) { return pthread_getspecific(k); }

}
# 49 "Fusion.h" 2




# 1 "/usr/include/c++/4.0.0/cassert" 1 3
# 46 "/usr/include/c++/4.0.0/cassert" 3
       
# 47 "/usr/include/c++/4.0.0/cassert" 3

# 1 "/usr/include/assert.h" 1 3 4
# 75 "/usr/include/assert.h" 3 4
extern "C" {
void __assert_rtn(const char *, const char *, int, const char *) __attribute__((__noreturn__));
void __eprintf(const char *, const char *, unsigned, const char *) __attribute__((__noreturn__));
}
# 48 "/usr/include/c++/4.0.0/cassert" 2 3
# 54 "Fusion.h" 2
# 1 "/usr/include/c++/4.0.0/cstdio" 1 3
# 47 "/usr/include/c++/4.0.0/cstdio" 3
       
# 48 "/usr/include/c++/4.0.0/cstdio" 3


# 1 "/usr/include/c++/4.0.0/cstddef" 1 3
# 46 "/usr/include/c++/4.0.0/cstddef" 3
       
# 47 "/usr/include/c++/4.0.0/cstddef" 3



namespace std
{
  using ::ptrdiff_t;
  using ::size_t;
}
# 51 "/usr/include/c++/4.0.0/cstdio" 2 3
# 97 "/usr/include/c++/4.0.0/cstdio" 3
namespace std
{
  using ::FILE;
  using ::fpos_t;

  using ::clearerr;
  using ::fclose;
  using ::feof;
  using ::ferror;
  using ::fflush;
  using ::fgetc;
  using ::fgetpos;
  using ::fgets;
  using ::fopen;
  using ::fprintf;
  using ::fputc;
  using ::fputs;
  using ::fread;
  using ::freopen;
  using ::fscanf;
  using ::fseek;
  using ::fsetpos;
  using ::ftell;
  using ::fwrite;
  using ::getc;
  using ::getchar;
  using ::gets;
  using ::perror;
  using ::printf;
  using ::putc;
  using ::putchar;
  using ::puts;
  using ::remove;
  using ::rename;
  using ::rewind;
  using ::scanf;
  using ::setbuf;
  using ::setvbuf;
  using ::sprintf;
  using ::sscanf;
  using ::tmpfile;
  using ::tmpnam;
  using ::ungetc;
  using ::vfprintf;
  using ::vprintf;
  using ::vsprintf;
}
# 153 "/usr/include/c++/4.0.0/cstdio" 3
namespace __gnu_cxx
{
# 167 "/usr/include/c++/4.0.0/cstdio" 3
  using ::snprintf;
  using ::vfscanf;
  using ::vscanf;
  using ::vsnprintf;
  using ::vsscanf;

}

namespace std
{
  using __gnu_cxx::snprintf;
  using __gnu_cxx::vfscanf;
  using __gnu_cxx::vscanf;
  using __gnu_cxx::vsnprintf;
  using __gnu_cxx::vsscanf;
}
# 55 "Fusion.h" 2
# 1 "/usr/include/c++/4.0.0/cstdlib" 1 3
# 47 "/usr/include/c++/4.0.0/cstdlib" 3
       
# 48 "/usr/include/c++/4.0.0/cstdlib" 3
# 90 "/usr/include/c++/4.0.0/cstdlib" 3
namespace std
{

  using ::div_t;
  using ::ldiv_t;

  using ::abort;
  using ::abs;
  using ::atexit;
  using ::atof;
  using ::atoi;
  using ::atol;
  using ::bsearch;
  using ::calloc;
  using ::div;
  using ::exit;
  using ::free;
  using ::getenv;
  using ::labs;
  using ::ldiv;
  using ::malloc;

  using ::mblen;
  using ::mbstowcs;
  using ::mbtowc;

  using ::qsort;
  using ::rand;
  using ::realloc;
  using ::srand;
  using ::strtod;
  using ::strtol;
  using ::strtoul;
  using ::system;

  using ::wcstombs;
  using ::wctomb;


  inline long
  abs(long __i) { return labs(__i); }

  inline ldiv_t
  div(long __i, long __j) { return ldiv(__i, __j); }
# 143 "/usr/include/c++/4.0.0/cstdlib" 3
}
# 156 "/usr/include/c++/4.0.0/cstdlib" 3
namespace __gnu_cxx
{

  using ::lldiv_t;





  using ::_Exit;


  inline long long
  abs(long long __x) { return __x >= 0 ? __x : -__x; }

  inline long long
  llabs(long long __x) { return __x >= 0 ? __x : -__x; }


  inline lldiv_t
  div(long long __n, long long __d)
  { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }

  inline lldiv_t
  lldiv(long long __n, long long __d)
  { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
# 192 "/usr/include/c++/4.0.0/cstdlib" 3
  using ::atoll;
  using ::strtoll;
  using ::strtoull;

  using ::strtof;
  using ::strtold;
}

namespace std
{

  using __gnu_cxx::lldiv_t;

  using __gnu_cxx::_Exit;
  using __gnu_cxx::abs;
  using __gnu_cxx::llabs;

  using __gnu_cxx::div;
  using __gnu_cxx::lldiv;

  using __gnu_cxx::atoll;
  using __gnu_cxx::strtof;
  using __gnu_cxx::strtoll;
  using __gnu_cxx::strtoull;
  using __gnu_cxx::strtold;
}
# 56 "Fusion.h" 2
# 1 "/usr/include/c++/4.0.0/cstring" 1 3
# 47 "/usr/include/c++/4.0.0/cstring" 3
       
# 48 "/usr/include/c++/4.0.0/cstring" 3
# 77 "/usr/include/c++/4.0.0/cstring" 3
namespace std
{
  using ::memcpy;
  using ::memmove;
  using ::strcpy;
  using ::strncpy;
  using ::strcat;
  using ::strncat;
  using ::memcmp;
  using ::strcmp;
  using ::strcoll;
  using ::strncmp;
  using ::strxfrm;
  using ::strcspn;
  using ::strspn;
  using ::strtok;
  using ::memset;
  using ::strerror;
  using ::strlen;

  using ::memchr;

  inline void*
  memchr(void* __p, int __c, size_t __n)
  { return memchr(const_cast<const void*>(__p), __c, __n); }

  using ::strchr;

  inline char*
  strchr(char* __s1, int __n)
  { return __builtin_strchr(const_cast<const char*>(__s1), __n); }

  using ::strpbrk;

  inline char*
  strpbrk(char* __s1, const char* __s2)
  { return __builtin_strpbrk(const_cast<const char*>(__s1), __s2); }

  using ::strrchr;

  inline char*
  strrchr(char* __s1, int __n)
  { return __builtin_strrchr(const_cast<const char*>(__s1), __n); }

  using ::strstr;

  inline char*
  strstr(char* __s1, const char* __s2)
  { return __builtin_strstr(const_cast<const char*>(__s1), __s2); }
}
# 57 "Fusion.h" 2
# 67 "Fusion.h"
namespace Fusion {
# 84 "Fusion.h"
 enum ResultType { OK=0,
      FAILED=1001,
      BADPOINTER=1002,
      BADARGUMENT=1003,
      NOTPROCESSED=1004,
      NOTFOUND=1005,
      NOTENOUGHDATA=1006,
      FINISHED=1007,
      NOT_IMPLEMENTED_YET=1008,
      NOT_IMPLEMENTED=1009,
      NO_CHANGE=1010,


      BADDEV=1011,
      DEVNOTSUP=1012,
      PROTNOTSUP=1013,
      BADFILENAME=1014,
      MUSTBEWRITESTRING=1015,




      PERM = 1,
      NOENT = 2,
      SRCH = 3,
      INTR = 4,
      IO = 5,
      NXIO = 6,
      TOOBIG = 7,
      NOEXEC = 8,
      BADF = 9,
      CHILD = 10,
      AGAIN = 11,
      NOMEM = 12,
      ACCES = 13,
      FAULT = 14,
      BUSY = 16,
      EXIST = 17,
      XDEV = 18,
      _NODEV = 19,
      NOTDIR = 20,
      ISDIR = 21,
      INVAL = 22,
      NFILE = 23,
      MFILE = 24,
      NOTTY = 25,
      FBIG = 27,
      NOSPC = 28,
      SPIPE = 29,
      ROFS = 30,
      MLINK = 31,
      PIPE = 32,
      DOM = 33,
      RANGE = 34,
      DEADLK = 36,
      NAMETOOLONG = 38,
      NOLCK = 39,
      NOSYS = 40,
      NOTEMPTY = 41,
      ILSEQ = 42
     };



 enum LogLevelType { L_OFF=0,
      L_ERROR,
      L_WARNING,
      L_INFO,
      L_DEBUG,
      L_REPORT };



 enum HintType { HINT_STRING,
     HINT_NUMBER,
     HINT_BOOLEAN,
     HINT_VEC2F,
     HINT_VEC3F,
     HINT_VEC4F,
     HINT_ROTATION,
     HINT_COLOR3F,
     HINT_COLOR4F,
     HINT_MATRIX,
     HINT_NONE };

 enum SeekType { ST_SET, ST_END, ST_CUR };



 class UString;
 class String;
 class Value;
 class Id;
 class Args;
 class DataStream;
 class Loader;
 class Object;
 class Base;
 class Engine;
 class IDataStreamHandlerFactory;
 class Rotation;
 class Vec2f;
 class Vec3f;
 class Vec4f;
 class Color3f;
 class Color4f;

}
# 28 "FusionObject.h" 2
# 1 "FusionValue.h" 1
# 25 "FusionValue.h"
       


# 1 "FusionString.h" 1
# 26 "FusionString.h"
       

# 1 "/usr/include/c++/4.0.0/string" 1 3
# 42 "/usr/include/c++/4.0.0/string" 3
       
# 43 "/usr/include/c++/4.0.0/string" 3


# 1 "/usr/include/c++/4.0.0/bits/stringfwd.h" 1 3
# 42 "/usr/include/c++/4.0.0/bits/stringfwd.h" 3
       
# 43 "/usr/include/c++/4.0.0/bits/stringfwd.h" 3



namespace std
{
  template<typename _Alloc>
    class allocator;

  template<class _CharT>
    struct char_traits;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
           typename _Alloc = allocator<_CharT> >
    class basic_string;

  template<> struct char_traits<char>;

  typedef basic_string<char> string;


  template<> struct char_traits<wchar_t>;

  typedef basic_string<wchar_t> wstring;

}
# 46 "/usr/include/c++/4.0.0/string" 2 3
# 1 "/usr/include/c++/4.0.0/bits/char_traits.h" 1 3
# 43 "/usr/include/c++/4.0.0/bits/char_traits.h" 3
       
# 44 "/usr/include/c++/4.0.0/bits/char_traits.h" 3


# 1 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 1 3
# 66 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
# 1 "/usr/include/c++/4.0.0/climits" 1 3
# 47 "/usr/include/c++/4.0.0/climits" 3
       
# 48 "/usr/include/c++/4.0.0/climits" 3
# 67 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 2 3


# 1 "/usr/include/c++/4.0.0/iosfwd" 1 3
# 42 "/usr/include/c++/4.0.0/iosfwd" 3
       
# 43 "/usr/include/c++/4.0.0/iosfwd" 3


# 1 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++locale.h" 1 3
# 39 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++locale.h" 3
       
# 40 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++locale.h" 3

# 1 "/usr/include/c++/4.0.0/clocale" 1 3
# 47 "/usr/include/c++/4.0.0/clocale" 3
       
# 48 "/usr/include/c++/4.0.0/clocale" 3







namespace std
{
  using ::lconv;
  using ::setlocale;
  using ::localeconv;
}
# 42 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++locale.h" 2 3





namespace std
{
  typedef int* __c_locale;





  template<typename _Tv>
    int
    __convert_from_v(char* __out,
       const int __size __attribute__((__unused__)),
       const char* __fmt,
       _Tv __v, const __c_locale&, int __prec)
    {
      char* __old = std::setlocale(4, __null);
      char* __sav = __null;
      if (std::strcmp(__old, "C"))
 {
   __sav = new char[std::strlen(__old) + 1];
   std::strcpy(__sav, __old);
   std::setlocale(4, "C");
 }


      const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);




      if (__sav)
 {
   std::setlocale(4, __sav);
   delete [] __sav;
 }
      return __ret;
    }
}
# 46 "/usr/include/c++/4.0.0/iosfwd" 2 3
# 1 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++io.h" 1 3
# 37 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++io.h" 3
# 1 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/gthr.h" 1 3
# 33 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/gthr.h" 3
#pragma GCC visibility push(default)
# 114 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/gthr.h" 3
# 1 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/gthr-default.h" 1 3
# 46 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/gthr-default.h" 3
typedef pthread_key_t __gthread_key_t;
typedef pthread_once_t __gthread_once_t;
typedef pthread_mutex_t __gthread_mutex_t;
typedef pthread_mutex_t __gthread_recursive_mutex_t;
# 116 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/gthr-default.h" 3
static inline int
__gthread_active_p (void)
{
  return 1;
}
# 473 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/gthr-default.h" 3
static inline int
__gthread_once (__gthread_once_t *once, void (*func) (void))
{
  if (__gthread_active_p ())
    return pthread_once (once, func);
  else
    return -1;
}

static inline int
__gthread_key_create (__gthread_key_t *key, void (*dtor) (void *))
{
  return pthread_key_create (key, dtor);
}

static inline int
__gthread_key_delete (__gthread_key_t key)
{
  return pthread_key_delete (key);
}

static inline void *
__gthread_getspecific (__gthread_key_t key)
{
  return pthread_getspecific (key);
}

static inline int
__gthread_setspecific (__gthread_key_t key, const void *ptr)
{
  return pthread_setspecific (key, ptr);
}

static inline int
__gthread_mutex_lock (__gthread_mutex_t *mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_lock (mutex);
  else
    return 0;
}

static inline int
__gthread_mutex_trylock (__gthread_mutex_t *mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_trylock (mutex);
  else
    return 0;
}

static inline int
__gthread_mutex_unlock (__gthread_mutex_t *mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_unlock (mutex);
  else
    return 0;
}


static inline int
__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *mutex)
{
  if (__gthread_active_p ())
    {
      pthread_mutexattr_t attr;
      int r;

      r = pthread_mutexattr_init (&attr);
      if (!r)
 r = pthread_mutexattr_settype (&attr, 2);
      if (!r)
 r = pthread_mutex_init (mutex, &attr);
      if (!r)
 r = pthread_mutexattr_destroy (&attr);
      return r;
    }
}


static inline int
__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex)
{
  return __gthread_mutex_lock (mutex);
}

static inline int
__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex)
{
  return __gthread_mutex_trylock (mutex);
}

static inline int
__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex)
{
  return __gthread_mutex_unlock (mutex);
}
# 115 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/gthr.h" 2 3







#pragma GCC visibility pop
# 38 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++io.h" 2 3

namespace std
{
  typedef __gthread_mutex_t __c_lock;


  typedef FILE __c_file;



  struct __ios_flags
  {
    typedef short __int_type;

    static const __int_type _S_boolalpha = 0x0001;
    static const __int_type _S_dec = 0x0002;
    static const __int_type _S_fixed = 0x0004;
    static const __int_type _S_hex = 0x0008;
    static const __int_type _S_internal = 0x0010;
    static const __int_type _S_left = 0x0020;
    static const __int_type _S_oct = 0x0040;
    static const __int_type _S_right = 0x0080;
    static const __int_type _S_scientific = 0x0100;
    static const __int_type _S_showbase = 0x0200;
    static const __int_type _S_showpoint = 0x0400;
    static const __int_type _S_showpos = 0x0800;
    static const __int_type _S_skipws = 0x1000;
    static const __int_type _S_unitbuf = 0x2000;
    static const __int_type _S_uppercase = 0x4000;
    static const __int_type _S_adjustfield = 0x0020 | 0x0080 | 0x0010;
    static const __int_type _S_basefield = 0x0002 | 0x0040 | 0x0008;
    static const __int_type _S_floatfield = 0x0100 | 0x0004;


    static const __int_type _S_badbit = 0x01;
    static const __int_type _S_eofbit = 0x02;
    static const __int_type _S_failbit = 0x04;


    static const __int_type _S_app = 0x01;
    static const __int_type _S_ate = 0x02;
    static const __int_type _S_bin = 0x04;
    static const __int_type _S_in = 0x08;
    static const __int_type _S_out = 0x10;
    static const __int_type _S_trunc = 0x20;
  };
}
# 47 "/usr/include/c++/4.0.0/iosfwd" 2 3


# 1 "/usr/include/c++/4.0.0/bits/postypes.h" 1 3
# 44 "/usr/include/c++/4.0.0/bits/postypes.h" 3
       
# 45 "/usr/include/c++/4.0.0/bits/postypes.h" 3

# 1 "/usr/include/c++/4.0.0/cwchar" 1 3
# 47 "/usr/include/c++/4.0.0/cwchar" 3
       
# 48 "/usr/include/c++/4.0.0/cwchar" 3



# 1 "/usr/include/c++/4.0.0/ctime" 1 3
# 47 "/usr/include/c++/4.0.0/ctime" 3
       
# 48 "/usr/include/c++/4.0.0/ctime" 3
# 64 "/usr/include/c++/4.0.0/ctime" 3
namespace std
{
  using ::clock_t;
  using ::time_t;
  using ::tm;

  using ::clock;
  using ::difftime;
  using ::mktime;
  using ::time;
  using ::asctime;
  using ::ctime;
  using ::gmtime;
  using ::localtime;
  using ::strftime;
}
# 52 "/usr/include/c++/4.0.0/cwchar" 2 3


# 1 "/usr/include/wchar.h" 1 3 4
# 83 "/usr/include/wchar.h" 3 4
typedef __darwin_mbstate_t mbstate_t;
# 114 "/usr/include/wchar.h" 3 4
# 1 "/usr/include/_wctype.h" 1 3 4
# 52 "/usr/include/_wctype.h" 3 4
typedef __darwin_wctype_t wctype_t;
# 71 "/usr/include/_wctype.h" 3 4
static inline int
iswalnum(wint_t _wc)
{
 return (__istype(_wc, 0x00000100L|0x00000400L));
}

static inline int
iswalpha(wint_t _wc)
{
 return (__istype(_wc, 0x00000100L));
}

static inline int
iswcntrl(wint_t _wc)
{
 return (__istype(_wc, 0x00000200L));
}

static inline int
iswctype(wint_t _wc, wctype_t _charclass)
{
 return (__istype(_wc, _charclass));
}

static inline int
iswdigit(wint_t _wc)
{
 return (__isctype(_wc, 0x00000400L));
}

static inline int
iswgraph(wint_t _wc)
{
 return (__istype(_wc, 0x00000800L));
}

static inline int
iswlower(wint_t _wc)
{
 return (__istype(_wc, 0x00001000L));
}

static inline int
iswprint(wint_t _wc)
{
 return (__istype(_wc, 0x00040000L));
}

static inline int
iswpunct(wint_t _wc)
{
 return (__istype(_wc, 0x00002000L));
}

static inline int
iswspace(wint_t _wc)
{
 return (__istype(_wc, 0x00004000L));
}

static inline int
iswupper(wint_t _wc)
{
 return (__istype(_wc, 0x00008000L));
}

static inline int
iswxdigit(wint_t _wc)
{
 return (__isctype(_wc, 0x00010000L));
}

static inline wint_t
towlower(wint_t _wc)
{
        return (__tolower(_wc));
}

static inline wint_t
towupper(wint_t _wc)
{
        return (__toupper(_wc));
}
# 176 "/usr/include/_wctype.h" 3 4
extern "C" {
wctype_t
 wctype(const char *);
}
# 115 "/usr/include/wchar.h" 2 3 4

extern "C" {
wint_t btowc(int);
wint_t fgetwc(FILE *);
wchar_t *fgetws(wchar_t * , int, FILE * );
wint_t fputwc(wchar_t, FILE *);
int fputws(const wchar_t * , FILE * );
int fwide(FILE *, int);
int fwprintf(FILE * , const wchar_t * , ...) __asm("_" "fwprintf" "$LDBLStub");
int fwscanf(FILE * , const wchar_t * , ...) __asm("_" "fwscanf" "$LDBLStub");
wint_t getwc(FILE *);
wint_t getwchar(void);
size_t mbrlen(const char * , size_t, mbstate_t * );
size_t mbrtowc(wchar_t * , const char * , size_t,
     mbstate_t * );
int mbsinit(const mbstate_t *);
size_t mbsrtowcs(wchar_t * , const char ** , size_t,
     mbstate_t * );
wint_t putwc(wchar_t, FILE *);
wint_t putwchar(wchar_t);
int swprintf(wchar_t * , size_t, const wchar_t * ,
     ...) __asm("_" "swprintf" "$LDBLStub");
int swscanf(const wchar_t * , const wchar_t * , ...) __asm("_" "swscanf" "$LDBLStub");
wint_t ungetwc(wint_t, FILE *);
int vfwprintf(FILE * , const wchar_t * ,
     __darwin_va_list) __asm("_" "vfwprintf" "$LDBLStub");
int vswprintf(wchar_t * , size_t, const wchar_t * ,
     __darwin_va_list) __asm("_" "vswprintf" "$LDBLStub");
int vwprintf(const wchar_t * , __darwin_va_list) __asm("_" "vwprintf" "$LDBLStub");
size_t wcrtomb(char * , wchar_t, mbstate_t * );
wchar_t *wcscat(wchar_t * , const wchar_t * );
wchar_t *wcschr(const wchar_t *, wchar_t);
int wcscmp(const wchar_t *, const wchar_t *);
int wcscoll(const wchar_t *, const wchar_t *);
wchar_t *wcscpy(wchar_t * , const wchar_t * );
size_t wcscspn(const wchar_t *, const wchar_t *);
size_t wcsftime(wchar_t * , size_t, const wchar_t * ,
     const struct tm * ) __asm("_" "wcsftime" "$UNIX2003");
size_t wcslen(const wchar_t *);
wchar_t *wcsncat(wchar_t * , const wchar_t * , size_t);
int wcsncmp(const wchar_t *, const wchar_t *, size_t);
wchar_t *wcsncpy(wchar_t * , const wchar_t * , size_t);
wchar_t *wcspbrk(const wchar_t *, const wchar_t *);
wchar_t *wcsrchr(const wchar_t *, wchar_t);
size_t wcsrtombs(char * , const wchar_t ** , size_t,
     mbstate_t * );
size_t wcsspn(const wchar_t *, const wchar_t *);
wchar_t *wcsstr(const wchar_t * , const wchar_t * );
size_t wcsxfrm(wchar_t * , const wchar_t * , size_t);
int wctob(wint_t);
double wcstod(const wchar_t * , wchar_t ** );
wchar_t *wcstok(wchar_t * , const wchar_t * ,
     wchar_t ** );
long wcstol(const wchar_t * , wchar_t ** , int);
unsigned long
  wcstoul(const wchar_t * , wchar_t ** , int);
wchar_t *wmemchr(const wchar_t *, wchar_t, size_t);
int wmemcmp(const wchar_t *, const wchar_t *, size_t);
wchar_t *wmemcpy(wchar_t * , const wchar_t * , size_t);
wchar_t *wmemmove(wchar_t *, const wchar_t *, size_t);
wchar_t *wmemset(wchar_t *, wchar_t, size_t);
int wprintf(const wchar_t * , ...) __asm("_" "wprintf" "$LDBLStub");
int wscanf(const wchar_t * , ...) __asm("_" "wscanf" "$LDBLStub");


int vfwscanf(FILE * , const wchar_t * ,
     __darwin_va_list) __asm("_" "vfwscanf" "$LDBLStub");
int vswscanf(const wchar_t * , const wchar_t * ,
     __darwin_va_list) __asm("_" "vswscanf" "$LDBLStub");
int vwscanf(const wchar_t * , __darwin_va_list) __asm("_" "vwscanf" "$LDBLStub");
float wcstof(const wchar_t * , wchar_t ** );
long double
 wcstold(const wchar_t * , wchar_t ** ) __asm("_" "wcstold" "$LDBLStub");

long long
 wcstoll(const wchar_t * , wchar_t ** , int);
unsigned long long
 wcstoull(const wchar_t * , wchar_t ** , int);

int wcswidth(const wchar_t *, size_t);
int wcwidth(wchar_t);



size_t mbsnrtowcs(wchar_t * , const char ** , size_t,
     size_t, mbstate_t * );
size_t wcslcat(wchar_t *, const wchar_t *, size_t);
size_t wcslcpy(wchar_t *, const wchar_t *, size_t);
size_t wcsnrtombs(char * , const wchar_t ** , size_t,
     size_t, mbstate_t * );






}
# 55 "/usr/include/c++/4.0.0/cwchar" 2 3
# 69 "/usr/include/c++/4.0.0/cwchar" 3
namespace std
{
  using ::mbstate_t;
}
# 141 "/usr/include/c++/4.0.0/cwchar" 3
namespace std
{
  using ::wint_t;

  using ::btowc;
  using ::fgetwc;
  using ::fgetws;
  using ::fputwc;
  using ::fputws;
  using ::fwide;
  using ::fwprintf;
  using ::fwscanf;
  using ::getwc;
  using ::getwchar;
  using ::mbrlen;
  using ::mbrtowc;
  using ::mbsinit;
  using ::mbsrtowcs;
  using ::putwc;
  using ::putwchar;
  using ::swprintf;
  using ::swscanf;
  using ::ungetwc;
  using ::vfwprintf;

  using ::vfwscanf;

  using ::vswprintf;

  using ::vswscanf;

  using ::vwprintf;

  using ::vwscanf;

  using ::wcrtomb;
  using ::wcscat;
  using ::wcscmp;
  using ::wcscoll;
  using ::wcscpy;
  using ::wcscspn;
  using ::wcsftime;
  using ::wcslen;
  using ::wcsncat;
  using ::wcsncmp;
  using ::wcsncpy;
  using ::wcsrtombs;
  using ::wcsspn;
  using ::wcstod;

  using ::wcstof;

  using ::wcstok;
  using ::wcstol;
  using ::wcstoul;
  using ::wcsxfrm;
  using ::wctob;
  using ::wmemcmp;
  using ::wmemcpy;
  using ::wmemmove;
  using ::wmemset;
  using ::wprintf;
  using ::wscanf;

  using ::wcschr;

  inline wchar_t*
  wcschr(wchar_t* __p, wchar_t __c)
  { return wcschr(const_cast<const wchar_t*>(__p), __c); }

  using ::wcspbrk;

  inline wchar_t*
  wcspbrk(wchar_t* __s1, wchar_t* __s2)
  { return wcspbrk(const_cast<const wchar_t*>(__s1), __s2); }

  using ::wcsrchr;

  inline wchar_t*
  wcsrchr(wchar_t* __p, wchar_t __c)
  { return wcsrchr(const_cast<const wchar_t*>(__p), __c); }

  using ::wcsstr;

  inline wchar_t*
  wcsstr(wchar_t* __s1, const wchar_t* __s2)
  { return wcsstr(const_cast<const wchar_t*>(__s1), __s2); }

  using ::wmemchr;

  inline wchar_t*
  wmemchr(wchar_t* __p, wchar_t __c, size_t __n)
  { return wmemchr(const_cast<const wchar_t*>(__p), __c, __n); }
}







namespace __gnu_cxx
{





  using ::wcstold;
# 258 "/usr/include/c++/4.0.0/cwchar" 3
  using ::wcstoll;
  using ::wcstoull;

}

namespace std
{
  using __gnu_cxx::wcstold;
  using __gnu_cxx::wcstoll;
  using __gnu_cxx::wcstoull;
}
# 47 "/usr/include/c++/4.0.0/bits/postypes.h" 2 3





namespace std
{
# 72 "/usr/include/c++/4.0.0/bits/postypes.h" 3
  typedef int64_t streamoff;





  typedef ptrdiff_t streamsize;

  template<typename _StateT>
    class fpos;
# 94 "/usr/include/c++/4.0.0/bits/postypes.h" 3
  template<typename _StateT>
    class fpos
    {
    private:
      streamoff _M_off;
      _StateT _M_state;

    public:




      fpos()
      : _M_off(0), _M_state() { }
# 116 "/usr/include/c++/4.0.0/bits/postypes.h" 3
      fpos(streamoff __off)
      : _M_off(__off), _M_state() { }


      operator streamoff() const { return _M_off; }


      void
      state(_StateT __st)
      { _M_state = __st; }


      _StateT
      state() const
      { return _M_state; }






      bool
      operator==(const fpos& __other) const
      { return _M_off == __other._M_off; }


      bool
      operator!=(const fpos& __other) const
      { return _M_off != __other._M_off; }





      fpos&
      operator+=(streamoff __off)
      {
 _M_off += __off;
 return *this;
      }





      fpos&
      operator-=(streamoff __off)
      {
 _M_off -= __off;
 return *this;
      }







      fpos
      operator+(streamoff __off) const
      {
 fpos __pos(*this);
 __pos += __off;
 return __pos;
      }







      fpos
      operator-(streamoff __off) const
      {
 fpos __pos(*this);
 __pos -= __off;
 return __pos;
      }






      streamoff
      operator-(const fpos& __other) const
      { return _M_off - __other._M_off; }
    };





  typedef fpos<mbstate_t> streampos;

  typedef fpos<mbstate_t> wstreampos;
}
# 50 "/usr/include/c++/4.0.0/iosfwd" 2 3
# 1 "/usr/include/c++/4.0.0/bits/functexcept.h" 1 3
# 41 "/usr/include/c++/4.0.0/bits/functexcept.h" 3
# 1 "/usr/include/c++/4.0.0/exception_defines.h" 1 3
# 42 "/usr/include/c++/4.0.0/bits/functexcept.h" 2 3

namespace std
{

  void
  __throw_bad_exception(void) __attribute__((__noreturn__));


  void
  __throw_bad_alloc(void) __attribute__((__noreturn__));


  void
  __throw_bad_cast(void) __attribute__((__noreturn__));

  void
  __throw_bad_typeid(void) __attribute__((__noreturn__));


  void
  __throw_logic_error(const char* __s) __attribute__((__noreturn__));

  void
  __throw_domain_error(const char* __s) __attribute__((__noreturn__));

  void
  __throw_invalid_argument(const char* __s) __attribute__((__noreturn__));

  void
  __throw_length_error(const char* __s) __attribute__((__noreturn__));

  void
  __throw_out_of_range(const char* __s) __attribute__((__noreturn__));

  void
  __throw_runtime_error(const char* __s) __attribute__((__noreturn__));

  void
  __throw_range_error(const char* __s) __attribute__((__noreturn__));

  void
  __throw_overflow_error(const char* __s) __attribute__((__noreturn__));

  void
  __throw_underflow_error(const char* __s) __attribute__((__noreturn__));


  void
  __throw_ios_failure(const char* __s) __attribute__((__noreturn__));
}
# 51 "/usr/include/c++/4.0.0/iosfwd" 2 3

namespace std
{
  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_ios;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_streambuf;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_istream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_ostream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_iostream;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
     typename _Alloc = allocator<_CharT> >
    class basic_stringbuf;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
    typename _Alloc = allocator<_CharT> >
    class basic_istringstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
    typename _Alloc = allocator<_CharT> >
    class basic_ostringstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
    typename _Alloc = allocator<_CharT> >
    class basic_stringstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_filebuf;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_ifstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_ofstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_fstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class istreambuf_iterator;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class ostreambuf_iterator;



  class ios_base;
# 135 "/usr/include/c++/4.0.0/iosfwd" 3
  typedef basic_ios<char> ios;
  typedef basic_streambuf<char> streambuf;
  typedef basic_istream<char> istream;
  typedef basic_ostream<char> ostream;
  typedef basic_iostream<char> iostream;
  typedef basic_stringbuf<char> stringbuf;
  typedef basic_istringstream<char> istringstream;
  typedef basic_ostringstream<char> ostringstream;
  typedef basic_stringstream<char> stringstream;
  typedef basic_filebuf<char> filebuf;
  typedef basic_ifstream<char> ifstream;
  typedef basic_ofstream<char> ofstream;
  typedef basic_fstream<char> fstream;


  typedef basic_ios<wchar_t> wios;
  typedef basic_streambuf<wchar_t> wstreambuf;
  typedef basic_istream<wchar_t> wistream;
  typedef basic_ostream<wchar_t> wostream;
  typedef basic_iostream<wchar_t> wiostream;
  typedef basic_stringbuf<wchar_t> wstringbuf;
  typedef basic_istringstream<wchar_t> wistringstream;
  typedef basic_ostringstream<wchar_t> wostringstream;
  typedef basic_stringstream<wchar_t> wstringstream;
  typedef basic_filebuf<wchar_t> wfilebuf;
  typedef basic_ifstream<wchar_t> wifstream;
  typedef basic_ofstream<wchar_t> wofstream;
  typedef basic_fstream<wchar_t> wfstream;


}
# 70 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 2 3
# 1 "/usr/include/c++/4.0.0/bits/stl_pair.h" 1 3
# 64 "/usr/include/c++/4.0.0/bits/stl_pair.h" 3
namespace std
{

  template<class _T1, class _T2>
    struct pair
    {
      typedef _T1 first_type;
      typedef _T2 second_type;

      _T1 first;
      _T2 second;





      pair()
      : first(), second() { }


      pair(const _T1& __a, const _T2& __b)
      : first(__a), second(__b) { }


      template<class _U1, class _U2>
        pair(const pair<_U1, _U2>& __p)
 : first(__p.first), second(__p.second) { }
    };


  template<class _T1, class _T2>
    inline bool
    operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return __x.first == __y.first && __x.second == __y.second; }


  template<class _T1, class _T2>
    inline bool
    operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return __x.first < __y.first
      || (!(__y.first < __x.first) && __x.second < __y.second); }


  template<class _T1, class _T2>
    inline bool
    operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return !(__x == __y); }


  template<class _T1, class _T2>
    inline bool
    operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return __y < __x; }


  template<class _T1, class _T2>
    inline bool
    operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return !(__y < __x); }


  template<class _T1, class _T2>
    inline bool
    operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return !(__x < __y); }
# 142 "/usr/include/c++/4.0.0/bits/stl_pair.h" 3
  template<class _T1, class _T2>
    inline pair<_T1, _T2>
    make_pair(_T1 __x, _T2 __y)
    { return pair<_T1, _T2>(__x, __y); }
}
# 71 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 2 3
# 1 "/usr/include/c++/4.0.0/bits/cpp_type_traits.h" 1 3
# 41 "/usr/include/c++/4.0.0/bits/cpp_type_traits.h" 3
       
# 42 "/usr/include/c++/4.0.0/bits/cpp_type_traits.h" 3
# 75 "/usr/include/c++/4.0.0/bits/cpp_type_traits.h" 3
namespace __gnu_internal
{
  typedef char __one;
  typedef char __two[2];

  template<typename _Tp>
  __one __test_type(int _Tp::*);
  template<typename _Tp>
  __two& __test_type(...);
}


namespace __gnu_cxx
{
  template<typename _Iterator, typename _Container>
    class __normal_iterator;
}

struct __true_type { };
struct __false_type { };

namespace std
{
  template<bool>
    struct __truth_type
    { typedef __false_type __type; };

  template<>
    struct __truth_type<true>
    { typedef __true_type __type; };

  template<class _Sp, class _Tp>
    struct __traitor
    {
      enum { __value = _Sp::__value || _Tp::__value };
      typedef typename __truth_type<__value>::__type __type;
    };


  template<typename, typename>
    struct __are_same
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };

  template<typename _Tp>
    struct __are_same<_Tp, _Tp>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };


  template<typename, bool>
    struct __enable_if
    {
    };

  template<typename _Tp>
    struct __enable_if<_Tp, true>
    {
      typedef _Tp __type;
    };


  template<typename _Tp>
    struct __is_void
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };

  template<>
    struct __is_void<void>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };




  template<typename _Tp>
    struct __is_integer
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };




  template<>
    struct __is_integer<bool>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<char>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<signed char>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<unsigned char>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };


  template<>
    struct __is_integer<wchar_t>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };


  template<>
    struct __is_integer<short>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<unsigned short>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<int>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<unsigned int>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<long>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<unsigned long>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<long long>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<unsigned long long>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };




  template<typename _Tp>
    struct __is_floating
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };


  template<>
    struct __is_floating<float>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_floating<double>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_floating<long double>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };




  template<typename _Tp>
    struct __is_pointer
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };

  template<typename _Tp>
    struct __is_pointer<_Tp*>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };




  template<typename _Tp>
    struct __is_normal_iterator
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };

  template<typename _Iterator, typename _Container>
    struct __is_normal_iterator< __gnu_cxx::__normal_iterator<_Iterator,
             _Container> >
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };




  template<typename _Tp>
    struct __is_arithmetic
    : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> >
    { };




  template<typename _Tp>
    struct __is_fundamental
    : public __traitor<__is_void<_Tp>, __is_arithmetic<_Tp> >
    { };




  template<typename _Tp>
    struct __is_scalar
    : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> >
    { };




  template<typename _Tp>
    struct __is_pod
    {
      enum
 {
   __value = (sizeof(__gnu_internal::__test_type<_Tp>(0))
       != sizeof(__gnu_internal::__one))
 };
    };

}
# 72 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 2 3
# 1 "/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h" 1 3
# 67 "/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h" 3
       
# 68 "/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h" 3

namespace std
{
# 80 "/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h" 3
  struct input_iterator_tag {};

  struct output_iterator_tag {};

  struct forward_iterator_tag : public input_iterator_tag {};


  struct bidirectional_iterator_tag : public forward_iterator_tag {};


  struct random_access_iterator_tag : public bidirectional_iterator_tag {};
# 104 "/usr/include/c++/4.0.0/bits/stl_iterator_base_types.h" 3
  template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,
           typename _Pointer = _Tp*, typename _Reference = _Tp&>
    struct iterator
    {

      typedef _Category iterator_category;

      typedef _Tp value_type;

      typedef _Distance difference_type;

      typedef _Pointer pointer;

      typedef _Reference reference;
    };







  template<typename _Iterator>
    struct iterator_traits
    {
      typedef typename _Iterator::iterator_category iterator_category;
      typedef typename _Iterator::value_type value_type;
      typedef typename _Iterator::difference_type difference_type;
      typedef typename _Iterator::pointer pointer;
      typedef typename _Iterator::reference reference;
    };

  template<typename _Tp>
    struct iterator_traits<_Tp*>
    {
      typedef random_access_iterator_tag iterator_category;
      typedef _Tp value_type;
      typedef ptrdiff_t difference_type;
      typedef _Tp* pointer;
      typedef _Tp& reference;
    };

  template<typename _Tp>
    struct iterator_traits<const _Tp*>
    {
      typedef random_access_iterator_tag iterator_category;
      typedef _Tp value_type;
      typedef ptrdiff_t difference_type;
      typedef const _Tp* pointer;
      typedef const _Tp& reference;
    };







  template<typename _Iter>
    inline typename iterator_traits<_Iter>::iterator_category
    __iterator_category(const _Iter&)
    { return typename iterator_traits<_Iter>::iterator_category(); }

}
# 73 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 2 3
# 1 "/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h" 1 3
# 67 "/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h" 3
       
# 68 "/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h" 3
# 1 "/usr/include/c++/4.0.0/bits/concept_check.h" 1 3
# 38 "/usr/include/c++/4.0.0/bits/concept_check.h" 3
       
# 39 "/usr/include/c++/4.0.0/bits/concept_check.h" 3
# 69 "/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h" 2 3

namespace std
{
  template<typename _InputIterator>
    inline typename iterator_traits<_InputIterator>::difference_type
    __distance(_InputIterator __first, _InputIterator __last,
               input_iterator_tag)
    {

     

      typename iterator_traits<_InputIterator>::difference_type __n = 0;
      while (__first != __last)
 {
   ++__first;
   ++__n;
 }
      return __n;
    }

  template<typename _RandomAccessIterator>
    inline typename iterator_traits<_RandomAccessIterator>::difference_type
    __distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
               random_access_iterator_tag)
    {

     

      return __last - __first;
    }
# 112 "/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h" 3
  template<typename _InputIterator>
    inline typename iterator_traits<_InputIterator>::difference_type
    distance(_InputIterator __first, _InputIterator __last)
    {

      return std::__distance(__first, __last,
        std::__iterator_category(__first));
    }

  template<typename _InputIterator, typename _Distance>
    inline void
    __advance(_InputIterator& __i, _Distance __n, input_iterator_tag)
    {

     
      while (__n--)
 ++__i;
    }

  template<typename _BidirectionalIterator, typename _Distance>
    inline void
    __advance(_BidirectionalIterator& __i, _Distance __n,
              bidirectional_iterator_tag)
    {

     

      if (__n > 0)
        while (__n--)
   ++__i;
      else
        while (__n++)
   --__i;
    }

  template<typename _RandomAccessIterator, typename _Distance>
    inline void
    __advance(_RandomAccessIterator& __i, _Distance __n,
              random_access_iterator_tag)
    {

     

      __i += __n;
    }
# 170 "/usr/include/c++/4.0.0/bits/stl_iterator_base_funcs.h" 3
  template<typename _InputIterator, typename _Distance>
    inline void
    advance(_InputIterator& __i, _Distance __n)
    {

      std::__advance(__i, __n, std::__iterator_category(__i));
    }
}
# 74 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 2 3
# 1 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 1 3
# 68 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
namespace std
{
# 89 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
  template<typename _Iterator>
    class reverse_iterator
    : public iterator<typename iterator_traits<_Iterator>::iterator_category,
        typename iterator_traits<_Iterator>::value_type,
        typename iterator_traits<_Iterator>::difference_type,
        typename iterator_traits<_Iterator>::pointer,
                      typename iterator_traits<_Iterator>::reference>
    {
    protected:
      _Iterator current;

    public:
      typedef _Iterator iterator_type;
      typedef typename iterator_traits<_Iterator>::difference_type
              difference_type;
      typedef typename iterator_traits<_Iterator>::reference reference;
      typedef typename iterator_traits<_Iterator>::pointer pointer;

    public:






      reverse_iterator() : current() { }




      explicit
      reverse_iterator(iterator_type __x) : current(__x) { }




      reverse_iterator(const reverse_iterator& __x)
      : current(__x.current) { }





      template<typename _Iter>
        reverse_iterator(const reverse_iterator<_Iter>& __x)
 : current(__x.base()) { }




      iterator_type
      base() const
      { return current; }






      reference
      operator*() const
      {
 _Iterator __tmp = current;
 return *--__tmp;
      }






      pointer
      operator->() const
      { return &(operator*()); }






      reverse_iterator&
      operator++()
      {
 --current;
 return *this;
      }






      reverse_iterator
      operator++(int)
      {
 reverse_iterator __tmp = *this;
 --current;
 return __tmp;
      }






      reverse_iterator&
      operator--()
      {
 ++current;
 return *this;
      }






      reverse_iterator operator--(int)
      {
 reverse_iterator __tmp = *this;
 ++current;
 return __tmp;
      }






      reverse_iterator
      operator+(difference_type __n) const
      { return reverse_iterator(current - __n); }






      reverse_iterator&
      operator+=(difference_type __n)
      {
 current -= __n;
 return *this;
      }






      reverse_iterator
      operator-(difference_type __n) const
      { return reverse_iterator(current + __n); }






      reverse_iterator&
      operator-=(difference_type __n)
      {
 current += __n;
 return *this;
      }






      reference
      operator[](difference_type __n) const
      { return *(*this + __n); }
    };
# 275 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
  template<typename _Iterator>
    inline bool
    operator==(const reverse_iterator<_Iterator>& __x,
        const reverse_iterator<_Iterator>& __y)
    { return __x.base() == __y.base(); }

  template<typename _Iterator>
    inline bool
    operator<(const reverse_iterator<_Iterator>& __x,
       const reverse_iterator<_Iterator>& __y)
    { return __y.base() < __x.base(); }

  template<typename _Iterator>
    inline bool
    operator!=(const reverse_iterator<_Iterator>& __x,
        const reverse_iterator<_Iterator>& __y)
    { return !(__x == __y); }

  template<typename _Iterator>
    inline bool
    operator>(const reverse_iterator<_Iterator>& __x,
       const reverse_iterator<_Iterator>& __y)
    { return __y < __x; }

  template<typename _Iterator>
    inline bool
    operator<=(const reverse_iterator<_Iterator>& __x,
  const reverse_iterator<_Iterator>& __y)
    { return !(__y < __x); }

  template<typename _Iterator>
    inline bool
    operator>=(const reverse_iterator<_Iterator>& __x,
        const reverse_iterator<_Iterator>& __y)
    { return !(__x < __y); }

  template<typename _Iterator>
    inline typename reverse_iterator<_Iterator>::difference_type
    operator-(const reverse_iterator<_Iterator>& __x,
       const reverse_iterator<_Iterator>& __y)
    { return __y.base() - __x.base(); }

  template<typename _Iterator>
    inline reverse_iterator<_Iterator>
    operator+(typename reverse_iterator<_Iterator>::difference_type __n,
       const reverse_iterator<_Iterator>& __x)
    { return reverse_iterator<_Iterator>(__x.base() - __n); }
# 335 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
  template<typename _Container>
    class back_insert_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _Container* container;

    public:

      typedef _Container container_type;


      explicit
      back_insert_iterator(_Container& __x) : container(&__x) { }
# 361 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
      back_insert_iterator&
      operator=(typename _Container::const_reference __value)
      {
 container->push_back(__value);
 return *this;
      }


      back_insert_iterator&
      operator*()
      { return *this; }


      back_insert_iterator&
      operator++()
      { return *this; }


      back_insert_iterator
      operator++(int)
      { return *this; }
    };
# 395 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
  template<typename _Container>
    inline back_insert_iterator<_Container>
    back_inserter(_Container& __x)
    { return back_insert_iterator<_Container>(__x); }
# 410 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
  template<typename _Container>
    class front_insert_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _Container* container;

    public:

      typedef _Container container_type;


      explicit front_insert_iterator(_Container& __x) : container(&__x) { }
# 435 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
      front_insert_iterator&
      operator=(typename _Container::const_reference __value)
      {
 container->push_front(__value);
 return *this;
      }


      front_insert_iterator&
      operator*()
      { return *this; }


      front_insert_iterator&
      operator++()
      { return *this; }


      front_insert_iterator
      operator++(int)
      { return *this; }
    };
# 469 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
  template<typename _Container>
    inline front_insert_iterator<_Container>
    front_inserter(_Container& __x)
    { return front_insert_iterator<_Container>(__x); }
# 488 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
  template<typename _Container>
    class insert_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _Container* container;
      typename _Container::iterator iter;

    public:

      typedef _Container container_type;





      insert_iterator(_Container& __x, typename _Container::iterator __i)
      : container(&__x), iter(__i) {}
# 530 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
      insert_iterator&
      operator=(const typename _Container::const_reference __value)
      {
 iter = container->insert(iter, __value);
 ++iter;
 return *this;
      }


      insert_iterator&
      operator*()
      { return *this; }


      insert_iterator&
      operator++()
      { return *this; }


      insert_iterator&
      operator++(int)
      { return *this; }
    };
# 565 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
  template<typename _Container, typename _Iterator>
    inline insert_iterator<_Container>
    inserter(_Container& __x, _Iterator __i)
    {
      return insert_iterator<_Container>(__x,
      typename _Container::iterator(__i));
    }
}

namespace __gnu_cxx
{







  using std::iterator_traits;
  using std::iterator;
  template<typename _Iterator, typename _Container>
    class __normal_iterator
    {
    protected:
      _Iterator _M_current;

    public:
      typedef typename iterator_traits<_Iterator>::iterator_category
                                                             iterator_category;
      typedef typename iterator_traits<_Iterator>::value_type value_type;
      typedef typename iterator_traits<_Iterator>::difference_type
                                                             difference_type;
      typedef typename iterator_traits<_Iterator>::reference reference;
      typedef typename iterator_traits<_Iterator>::pointer pointer;

      __normal_iterator() : _M_current(_Iterator()) { }

      explicit
      __normal_iterator(const _Iterator& __i) : _M_current(__i) { }


      template<typename _Iter>
        inline __normal_iterator(const __normal_iterator<_Iter,
     _Container>& __i)
 : _M_current(__i.base()) { }


      reference
      operator*() const
      { return *_M_current; }

      pointer
      operator->() const
      { return _M_current; }

      __normal_iterator&
      operator++()
      {
 ++_M_current;
 return *this;
      }

      __normal_iterator
      operator++(int)
      { return __normal_iterator(_M_current++); }


      __normal_iterator&
      operator--()
      {
 --_M_current;
 return *this;
      }

      __normal_iterator
      operator--(int)
      { return __normal_iterator(_M_current--); }


      reference
      operator[](const difference_type& __n) const
      { return _M_current[__n]; }

      __normal_iterator&
      operator+=(const difference_type& __n)
      { _M_current += __n; return *this; }

      __normal_iterator
      operator+(const difference_type& __n) const
      { return __normal_iterator(_M_current + __n); }

      __normal_iterator&
      operator-=(const difference_type& __n)
      { _M_current -= __n; return *this; }

      __normal_iterator
      operator-(const difference_type& __n) const
      { return __normal_iterator(_M_current - __n); }

      const _Iterator&
      base() const
      { return _M_current; }
    };
# 678 "/usr/include/c++/4.0.0/bits/stl_iterator.h" 3
  template<typename _IteratorL, typename _IteratorR, typename _Container>
    inline bool
    operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
        const __normal_iterator<_IteratorR, _Container>& __rhs)
    { return __lhs.base() == __rhs.base(); }

  template<typename _Iterator, typename _Container>
    inline bool
    operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
        const __normal_iterator<_Iterator, _Container>& __rhs)
    { return __lhs.base() == __rhs.base(); }

  template<typename _IteratorL, typename _IteratorR, typename _Container>
    inline bool
    operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs,
        const __normal_iterator<_IteratorR, _Container>& __rhs)
    { return __lhs.base() != __rhs.base(); }

  template<typename _Iterator, typename _Container>
    inline bool
    operator!=(const __normal_iterator<_Iterator, _Container>& __lhs,
        const __normal_iterator<_Iterator, _Container>& __rhs)
    { return __lhs.base() != __rhs.base(); }


  template<typename _IteratorL, typename _IteratorR, typename _Container>
    inline bool
    operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
       const __normal_iterator<_IteratorR, _Container>& __rhs)
    { return __lhs.base() < __rhs.base(); }

  template<typename _Iterator, typename _Container>
    inline bool
    operator<(const __normal_iterator<_Iterator, _Container>& __lhs,
       const __normal_iterator<_Iterator, _Container>& __rhs)
    { return __lhs.base() < __rhs.base(); }

  template<typename _IteratorL, typename _IteratorR, typename _Container>
    inline bool
    operator>(const __normal_iterator<_IteratorL, _Container>& __lhs,
       const __normal_iterator<_IteratorR, _Container>& __rhs)
    { return __lhs.base() > __rhs.base(); }

  template<typename _Iterator, typename _Container>
    inline bool
    operator>(const __normal_iterator<_Iterator, _Container>& __lhs,
       const __normal_iterator<_Iterator, _Container>& __rhs)
    { return __lhs.base() > __rhs.base(); }

  template<typename _IteratorL, typename _IteratorR, typename _Container>
    inline bool
    operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
        const __normal_iterator<_IteratorR, _Container>& __rhs)
    { return __lhs.base() <= __rhs.base(); }

  template<typename _Iterator, typename _Container>
    inline bool
    operator<=(const __normal_iterator<_Iterator, _Container>& __lhs,
        const __normal_iterator<_Iterator, _Container>& __rhs)
    { return __lhs.base() <= __rhs.base(); }

  template<typename _IteratorL, typename _IteratorR, typename _Container>
    inline bool
    operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs,
        const __normal_iterator<_IteratorR, _Container>& __rhs)
    { return __lhs.base() >= __rhs.base(); }

  template<typename _Iterator, typename _Container>
    inline bool
    operator>=(const __normal_iterator<_Iterator, _Container>& __lhs,
        const __normal_iterator<_Iterator, _Container>& __rhs)
    { return __lhs.base() >= __rhs.base(); }





  template<typename _IteratorL, typename _IteratorR, typename _Container>
    inline typename __normal_iterator<_IteratorL, _Container>::difference_type
    operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
       const __normal_iterator<_IteratorR, _Container>& __rhs)
    { return __lhs.base() - __rhs.base(); }

  template<typename _Iterator, typename _Container>
    inline __normal_iterator<_Iterator, _Container>
    operator+(typename __normal_iterator<_Iterator, _Container>::difference_type
       __n, const __normal_iterator<_Iterator, _Container>& __i)
    { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
}
# 75 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 2 3

# 1 "/usr/include/c++/4.0.0/debug/debug.h" 1 3
# 272 "/usr/include/c++/4.0.0/debug/debug.h" 3
# 1 "/usr/include/c++/4.0.0/cassert" 1 3
# 46 "/usr/include/c++/4.0.0/cassert" 3
       
# 47 "/usr/include/c++/4.0.0/cassert" 3

# 1 "/usr/include/assert.h" 1 3 4
# 75 "/usr/include/assert.h" 3 4
extern "C" {
void __assert_rtn(const char *, const char *, int, const char *) __attribute__((__noreturn__));
void __eprintf(const char *, const char *, unsigned, const char *) __attribute__((__noreturn__));
}
# 48 "/usr/include/c++/4.0.0/cassert" 2 3
# 273 "/usr/include/c++/4.0.0/debug/debug.h" 2 3





namespace __gnu_debug
{
  template<typename _Iterator, typename _Sequence>
    class _Safe_iterator;


  inline bool
  __check_singular_aux(const void*) { return false; }



  template<typename _Iterator>
    inline bool
    __check_singular(_Iterator& __x)
    { return __gnu_debug::__check_singular_aux(&__x); }


  template<typename _Tp>
    inline bool
    __check_singular(const _Tp* __ptr)
    { return __ptr == 0; }


  template<typename _Iterator, typename _Sequence>
    inline bool
    __check_singular(const _Safe_iterator<_Iterator, _Sequence>& __x)
    { return __x._M_singular(); }



  template<typename _Iterator>
    inline bool
    __check_dereferenceable(_Iterator&)
    { return true; }


  template<typename _Tp>
    inline bool
    __check_dereferenceable(const _Tp* __ptr)
    { return __ptr; }


  template<typename _Iterator, typename _Sequence>
    inline bool
    __check_dereferenceable(const _Safe_iterator<_Iterator, _Sequence>& __x)
    { return __x._M_dereferenceable(); }




  template<typename _RandomAccessIterator>
    inline bool
    __valid_range_aux2(const _RandomAccessIterator& __first,
         const _RandomAccessIterator& __last,
         std::random_access_iterator_tag)
    { return __last - __first >= 0; }





  template<typename _InputIterator>
    inline bool
    __valid_range_aux2(const _InputIterator&, const _InputIterator&,
         std::input_iterator_tag)
    { return true; }





  template<typename _Integral>
    inline bool
    __valid_range_aux(const _Integral&, const _Integral&, __true_type)
    { return true; }




  template<typename _InputIterator>
    inline bool
    __valid_range_aux(const _InputIterator& __first,
        const _InputIterator& __last, __false_type)
  {
    typedef typename std::iterator_traits<_InputIterator>::iterator_category
      _Category;
    return __gnu_debug::__valid_range_aux2(__first, __last, _Category());
  }






  template<typename _InputIterator>
    inline bool
    __valid_range(const _InputIterator& __first, const _InputIterator& __last)
    {
      typedef typename std::__is_integer<_InputIterator>::__type _Integral;
      return __gnu_debug::__valid_range_aux(__first, __last, _Integral());
    }


  template<typename _Iterator, typename _Sequence>
    inline bool
    __valid_range(const _Safe_iterator<_Iterator, _Sequence>& __first,
    const _Safe_iterator<_Iterator, _Sequence>& __last)
    { return __first._M_valid_range(__last); }





  template<typename _InputIterator>
    inline _InputIterator
    __check_valid_range(const _InputIterator& __first,
   const _InputIterator& __last)
    {
      ;
      return __first;
    }


  template<typename _CharT, typename _Integer>
    inline const _CharT*
    __check_string(const _CharT* __s, const _Integer& __n)
    {



      return __s;
    }


  template<typename _CharT>
    inline const _CharT*
    __check_string(const _CharT* __s)
    {



      return __s;
    }



  template<typename _InputIterator>
    inline bool
    __check_sorted_aux(const _InputIterator&, const _InputIterator&,
                       std::input_iterator_tag)
    { return true; }



  template<typename _ForwardIterator>
    inline bool
    __check_sorted_aux(_ForwardIterator __first, _ForwardIterator __last,
                       std::forward_iterator_tag)
    {
      if (__first == __last)
        return true;

      _ForwardIterator __next = __first;
      for (++__next; __next != __last; __first = __next, ++__next) {
        if (*__next < *__first)
          return false;
      }

      return true;
    }



  template<typename _InputIterator, typename _Predicate>
    inline bool
    __check_sorted_aux(const _InputIterator&, const _InputIterator&,
                       _Predicate, std::input_iterator_tag)
    { return true; }



  template<typename _ForwardIterator, typename _Predicate>
    inline bool
    __check_sorted_aux(_ForwardIterator __first, _ForwardIterator __last,
                       _Predicate __pred, std::forward_iterator_tag)
    {
      if (__first == __last)
        return true;

      _ForwardIterator __next = __first;
      for (++__next; __next != __last; __first = __next, ++__next) {
        if (__pred(*__next, *__first))
          return false;
      }

      return true;
    }


  template<typename _InputIterator>
    inline bool
    __check_sorted(const _InputIterator& __first, const _InputIterator& __last)
    {
      typedef typename std::iterator_traits<_InputIterator>::iterator_category
        _Category;
      return __gnu_debug::__check_sorted_aux(__first, __last, _Category());
    }

  template<typename _InputIterator, typename _Predicate>
    inline bool
    __check_sorted(const _InputIterator& __first, const _InputIterator& __last,
                   _Predicate __pred)
    {
      typedef typename std::iterator_traits<_InputIterator>::iterator_category
        _Category;
      return __gnu_debug::__check_sorted_aux(__first, __last, __pred,
          _Category());
    }




  template<typename _ForwardIterator, typename _Tp>
    inline bool
    __check_partitioned(_ForwardIterator __first, _ForwardIterator __last,
   const _Tp& __value)
    {
      while (__first != __last && *__first < __value)
 ++__first;
      while (__first != __last && !(*__first < __value))
 ++__first;
      return __first == __last;
    }


  template<typename _ForwardIterator, typename _Tp, typename _Pred>
    inline bool
    __check_partitioned(_ForwardIterator __first, _ForwardIterator __last,
   const _Tp& __value, _Pred __pred)
    {
      while (__first != __last && __pred(*__first, __value))
 ++__first;
      while (__first != __last && !__pred(*__first, __value))
 ++__first;
      return __first == __last;
    }
}
# 77 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 2 3

namespace std
{
# 90 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _Tp>
    inline void
    swap(_Tp& __a, _Tp& __b)
    {

     

      const _Tp __tmp = __a;
      __a = __b;
      __b = __tmp;
    }




  template<bool _BoolType>
    struct __iter_swap
    {
      template<typename _ForwardIterator1, typename _ForwardIterator2>
        static void
        iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
        {
          typedef typename iterator_traits<_ForwardIterator1>::value_type
            _ValueType1;
          const _ValueType1 __tmp = *__a;
          *__a = *__b;
          *__b = __tmp;
 }
    };

  template<>
    struct __iter_swap<true>
    {
      template<typename _ForwardIterator1, typename _ForwardIterator2>
        static void
        iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
        {
          swap(*__a, *__b);
        }
    };
# 140 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2>
    inline void
    iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
    {
      typedef typename iterator_traits<_ForwardIterator1>::value_type
 _ValueType1;
      typedef typename iterator_traits<_ForwardIterator2>::value_type
 _ValueType2;


     

     

     

     


      typedef typename iterator_traits<_ForwardIterator1>::reference
 _ReferenceType1;
      typedef typename iterator_traits<_ForwardIterator2>::reference
 _ReferenceType2;
      std::__iter_swap<__are_same<_ValueType1, _ValueType2>::__value &&
 __are_same<_ValueType1 &, _ReferenceType1>::__value &&
 __are_same<_ValueType2 &, _ReferenceType2>::__value>::
 iter_swap(__a, __b);
    }
# 182 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _Tp>
    inline const _Tp&
    min(const _Tp& __a, const _Tp& __b)
    {

     

      if (__b < __a)
 return __b;
      return __a;
    }
# 204 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _Tp>
    inline const _Tp&
    max(const _Tp& __a, const _Tp& __b)
    {

     

      if (__a < __b)
 return __b;
      return __a;
    }
# 226 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _Tp, typename _Compare>
    inline const _Tp&
    min(const _Tp& __a, const _Tp& __b, _Compare __comp)
    {

      if (__comp(__b, __a))
 return __b;
      return __a;
    }
# 246 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _Tp, typename _Compare>
    inline const _Tp&
    max(const _Tp& __a, const _Tp& __b, _Compare __comp)
    {

      if (__comp(__a, __b))
 return __b;
      return __a;
    }







  template<bool, typename>
    struct __copy
    {
      template<typename _II, typename _OI>
        static _OI
        copy(_II __first, _II __last, _OI __result)
        {
   for (; __first != __last; ++__result, ++__first)
     *__result = *__first;
   return __result;
 }
    };

  template<bool _BoolType>
    struct __copy<_BoolType, random_access_iterator_tag>
    {
      template<typename _II, typename _OI>
        static _OI
        copy(_II __first, _II __last, _OI __result)
        {
   typedef typename iterator_traits<_II>::difference_type _Distance;
   for(_Distance __n = __last - __first; __n > 0; --__n)
     {
       *__result = *__first;
       ++__first;
       ++__result;
     }
   return __result;
 }
    };

  template<>
    struct __copy<true, random_access_iterator_tag>
    {
      template<typename _Tp>
        static _Tp*
        copy(const _Tp* __first, const _Tp* __last, _Tp* __result)
        {
   std::memmove(__result, __first, sizeof(_Tp) * (__last - __first));
   return __result + (__last - __first);
 }
    };

  template<typename _II, typename _OI>
    inline _OI
    __copy_aux(_II __first, _II __last, _OI __result)
    {
      typedef typename iterator_traits<_II>::value_type _ValueTypeI;
      typedef typename iterator_traits<_OI>::value_type _ValueTypeO;
      typedef typename iterator_traits<_II>::iterator_category _Category;
      const bool __simple = (__is_scalar<_ValueTypeI>::__value
                      && __is_pointer<_II>::__value
                      && __is_pointer<_OI>::__value
        && __are_same<_ValueTypeI, _ValueTypeO>::__value);

      return std::__copy<__simple, _Category>::copy(__first, __last, __result);
    }

  template<bool, bool>
    struct __copy_normal
    {
      template<typename _II, typename _OI>
        static _OI
        copy_n(_II __first, _II __last, _OI __result)
        { return std::__copy_aux(__first, __last, __result); }
    };

  template<>
    struct __copy_normal<true, false>
    {
      template<typename _II, typename _OI>
        static _OI
        copy_n(_II __first, _II __last, _OI __result)
        { return std::__copy_aux(__first.base(), __last.base(), __result); }
    };

  template<>
    struct __copy_normal<false, true>
    {
      template<typename _II, typename _OI>
        static _OI
        copy_n(_II __first, _II __last, _OI __result)
        { return _OI(std::__copy_aux(__first, __last, __result.base())); }
    };

  template<>
    struct __copy_normal<true, true>
    {
      template<typename _II, typename _OI>
        static _OI
        copy_n(_II __first, _II __last, _OI __result)
        { return _OI(std::__copy_aux(__first.base(), __last.base(),
         __result.base())); }
    };
# 373 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _InputIterator, typename _OutputIterator>
    inline _OutputIterator
    copy(_InputIterator __first, _InputIterator __last,
  _OutputIterator __result)
    {

     
     

      ;

       const bool __in = __is_normal_iterator<_InputIterator>::__value;
       const bool __out = __is_normal_iterator<_OutputIterator>::__value;
       return std::__copy_normal<__in, __out>::copy_n(__first, __last,
            __result);
    }

  template<bool, typename>
    struct __copy_backward
    {
      template<typename _BI1, typename _BI2>
        static _BI2
        copy_b(_BI1 __first, _BI1 __last, _BI2 __result)
        {
   while (__first != __last)
     *--__result = *--__last;
   return __result;
 }
    };

  template<bool _BoolType>
    struct __copy_backward<_BoolType, random_access_iterator_tag>
    {
      template<typename _BI1, typename _BI2>
        static _BI2
        copy_b(_BI1 __first, _BI1 __last, _BI2 __result)
        {
   typename iterator_traits<_BI1>::difference_type __n;
   for (__n = __last - __first; __n > 0; --__n)
     *--__result = *--__last;
   return __result;
 }
    };

  template<>
    struct __copy_backward<true, random_access_iterator_tag>
    {
      template<typename _Tp>
        static _Tp*
        copy_b(const _Tp* __first, const _Tp* __last, _Tp* __result)
        {
   const ptrdiff_t _Num = __last - __first;
   std::memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
   return __result - _Num;
 }
    };

  template<typename _BI1, typename _BI2>
    inline _BI2
    __copy_backward_aux(_BI1 __first, _BI1 __last, _BI2 __result)
    {
      typedef typename iterator_traits<_BI1>::value_type _ValueType1;
      typedef typename iterator_traits<_BI2>::value_type _ValueType2;
      typedef typename iterator_traits<_BI1>::iterator_category _Category;
      const bool __simple = (__is_scalar<_ValueType1>::__value
                      && __is_pointer<_BI1>::__value
                      && __is_pointer<_BI2>::__value
        && __are_same<_ValueType1, _ValueType2>::__value);

      return std::__copy_backward<__simple, _Category>::copy_b(__first, __last,
              __result);
    }

  template<bool, bool>
    struct __copy_backward_normal
    {
      template<typename _BI1, typename _BI2>
        static _BI2
        copy_b_n(_BI1 __first, _BI1 __last, _BI2 __result)
        { return std::__copy_backward_aux(__first, __last, __result); }
    };

  template<>
    struct __copy_backward_normal<true, false>
    {
      template<typename _BI1, typename _BI2>
        static _BI2
        copy_b_n(_BI1 __first, _BI1 __last, _BI2 __result)
        { return std::__copy_backward_aux(__first.base(), __last.base(),
       __result); }
    };

  template<>
    struct __copy_backward_normal<false, true>
    {
      template<typename _BI1, typename _BI2>
        static _BI2
        copy_b_n(_BI1 __first, _BI1 __last, _BI2 __result)
        { return _BI2(std::__copy_backward_aux(__first, __last,
            __result.base())); }
    };

  template<>
    struct __copy_backward_normal<true, true>
    {
      template<typename _BI1, typename _BI2>
        static _BI2
        copy_b_n(_BI1 __first, _BI1 __last, _BI2 __result)
        { return _BI2(std::__copy_backward_aux(__first.base(), __last.base(),
            __result.base())); }
    };
# 502 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template <typename _BI1, typename _BI2>
    inline _BI2
    copy_backward(_BI1 __first, _BI1 __last, _BI2 __result)
    {

     
     
     


      ;

      const bool __bi1 = __is_normal_iterator<_BI1>::__value;
      const bool __bi2 = __is_normal_iterator<_BI2>::__value;
      return std::__copy_backward_normal<__bi1, __bi2>::copy_b_n(__first, __last,
         __result);
    }

  template<bool>
    struct __fill
    {
      template<typename _ForwardIterator, typename _Tp>
        static void
        fill(_ForwardIterator __first, _ForwardIterator __last,
      const _Tp& __value)
        {
   for (; __first != __last; ++__first)
     *__first = __value;
 }
    };

  template<>
    struct __fill<true>
    {
      template<typename _ForwardIterator, typename _Tp>
        static void
        fill(_ForwardIterator __first, _ForwardIterator __last,
      const _Tp& __value)
        {
   const _Tp __tmp = __value;
   for (; __first != __last; ++__first)
     *__first = __tmp;
 }
    };
# 558 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _ForwardIterator, typename _Tp>
    void
    fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value)
    {

     

      ;

      const bool __scalar = __is_scalar<_Tp>::__value;
      std::__fill<__scalar>::fill(__first, __last, __value);
    }


  inline void
  fill(unsigned char* __first, unsigned char* __last, const unsigned char& __c)
  {
    ;
    const unsigned char __tmp = __c;
    std::memset(__first, __tmp, __last - __first);
  }

  inline void
  fill(signed char* __first, signed char* __last, const signed char& __c)
  {
    ;
    const signed char __tmp = __c;
    std::memset(__first, static_cast<unsigned char>(__tmp), __last - __first);
  }

  inline void
  fill(char* __first, char* __last, const char& __c)
  {
    ;
    const char __tmp = __c;
    std::memset(__first, static_cast<unsigned char>(__tmp), __last - __first);
  }

  template<bool>
    struct __fill_n
    {
      template<typename _OutputIterator, typename _Size, typename _Tp>
        static _OutputIterator
        fill_n(_OutputIterator __first, _Size __n, const _Tp& __value)
        {
   for (; __n > 0; --__n, ++__first)
     *__first = __value;
   return __first;
 }
    };

  template<>
    struct __fill_n<true>
    {
      template<typename _OutputIterator, typename _Size, typename _Tp>
        static _OutputIterator
        fill_n(_OutputIterator __first, _Size __n, const _Tp& __value)
        {
   const _Tp __tmp = __value;
   for (; __n > 0; --__n, ++__first)
     *__first = __tmp;
   return __first;
 }
    };
# 634 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _OutputIterator, typename _Size, typename _Tp>
    _OutputIterator
    fill_n(_OutputIterator __first, _Size __n, const _Tp& __value)
    {

     

      const bool __scalar = __is_scalar<_Tp>::__value;
      return std::__fill_n<__scalar>::fill_n(__first, __n, __value);
    }

  template<typename _Size>
    inline unsigned char*
    fill_n(unsigned char* __first, _Size __n, const unsigned char& __c)
    {
      std::fill(__first, __first + __n, __c);
      return __first + __n;
    }

  template<typename _Size>
    inline signed char*
    fill_n(char* __first, _Size __n, const signed char& __c)
    {
      std::fill(__first, __first + __n, __c);
      return __first + __n;
    }

  template<typename _Size>
    inline char*
    fill_n(char* __first, _Size __n, const char& __c)
    {
      std::fill(__first, __first + __n, __c);
      return __first + __n;
    }
# 681 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _InputIterator1, typename _InputIterator2>
    pair<_InputIterator1, _InputIterator2>
    mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
      _InputIterator2 __first2)
    {

     
     
     


      ;

      while (__first1 != __last1 && *__first1 == *__first2)
        {
   ++__first1;
   ++__first2;
        }
      return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
    }
# 716 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _BinaryPredicate>
    pair<_InputIterator1, _InputIterator2>
    mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
      _InputIterator2 __first2, _BinaryPredicate __binary_pred)
    {

     
     
      ;

      while (__first1 != __last1 && __binary_pred(*__first1, *__first2))
        {
   ++__first1;
   ++__first2;
        }
      return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
    }
# 746 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _InputIterator1, typename _InputIterator2>
    inline bool
    equal(_InputIterator1 __first1, _InputIterator1 __last1,
   _InputIterator2 __first2)
    {

     
     
     


      ;

      for (; __first1 != __last1; ++__first1, ++__first2)
 if (!(*__first1 == *__first2))
   return false;
      return true;
    }
# 778 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _BinaryPredicate>
    inline bool
    equal(_InputIterator1 __first1, _InputIterator1 __last1,
   _InputIterator2 __first2,
   _BinaryPredicate __binary_pred)
    {

     
     
      ;

      for (; __first1 != __last1; ++__first1, ++__first2)
 if (!__binary_pred(*__first1, *__first2))
   return false;
      return true;
    }
# 810 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _InputIterator1, typename _InputIterator2>
    bool
    lexicographical_compare(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2)
    {

     
     
     


     


      ;
      ;

      for (; __first1 != __last1 && __first2 != __last2;
    ++__first1, ++__first2)
 {
   if (*__first1 < *__first2)
     return true;
   if (*__first2 < *__first1)
     return false;
 }
      return __first1 == __last1 && __first2 != __last2;
    }
# 850 "/usr/include/c++/4.0.0/bits/stl_algobase.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _Compare>
    bool
    lexicographical_compare(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2,
       _Compare __comp)
    {

     
     
      ;
      ;

      for (; __first1 != __last1 && __first2 != __last2;
    ++__first1, ++__first2)
 {
   if (__comp(*__first1, *__first2))
     return true;
   if (__comp(*__first2, *__first1))
     return false;
 }
      return __first1 == __last1 && __first2 != __last2;
    }

  inline bool
  lexicographical_compare(const unsigned char* __first1,
     const unsigned char* __last1,
     const unsigned char* __first2,
     const unsigned char* __last2)
  {
    ;
    ;

    const size_t __len1 = __last1 - __first1;
    const size_t __len2 = __last2 - __first2;
    const int __result = std::memcmp(__first1, __first2,
         std::min(__len1, __len2));
    return __result != 0 ? __result < 0 : __len1 < __len2;
  }

  inline bool
  lexicographical_compare(const char* __first1, const char* __last1,
     const char* __first2, const char* __last2)
  {
    ;
    ;


    return std::lexicographical_compare((const signed char*) __first1,
     (const signed char*) __last1,
     (const signed char*) __first2,
     (const signed char*) __last2);






  }

}
# 47 "/usr/include/c++/4.0.0/bits/char_traits.h" 2 3


namespace __gnu_cxx
{
# 61 "/usr/include/c++/4.0.0/bits/char_traits.h" 3
  template <class _CharT>
    struct _Char_types
    {
      typedef unsigned long int_type;
      typedef std::streampos pos_type;
      typedef std::streamoff off_type;
      typedef std::mbstate_t state_type;
    };
# 86 "/usr/include/c++/4.0.0/bits/char_traits.h" 3
  template<typename _CharT>
    struct char_traits
    {
      typedef _CharT char_type;
      typedef typename _Char_types<_CharT>::int_type int_type;
      typedef typename _Char_types<_CharT>::pos_type pos_type;
      typedef typename _Char_types<_CharT>::off_type off_type;
      typedef typename _Char_types<_CharT>::state_type state_type;

      static void
      assign(char_type& __c1, const char_type& __c2)
      { __c1 = __c2; }

      static bool
      eq(const char_type& __c1, const char_type& __c2)
      { return __c1 == __c2; }

      static bool
      lt(const char_type& __c1, const char_type& __c2)
      { return __c1 < __c2; }

      static int
      compare(const char_type* __s1, const char_type* __s2, std::size_t __n);

      static std::size_t
      length(const char_type* __s);

      static const char_type*
      find(const char_type* __s, std::size_t __n, const char_type& __a);

      static char_type*
      move(char_type* __s1, const char_type* __s2, std::size_t __n);

      static char_type*
      copy(char_type* __s1, const char_type* __s2, std::size_t __n);

      static char_type*
      assign(char_type* __s, std::size_t __n, char_type __a);

      static char_type
      to_char_type(const int_type& __c)
      { return static_cast<char_type>(__c); }

      static int_type
      to_int_type(const char_type& __c)
      { return static_cast<int_type>(__c); }

      static bool
      eq_int_type(const int_type& __c1, const int_type& __c2)
      { return __c1 == __c2; }

      static int_type
      eof()
      { return static_cast<int_type>((-1)); }

      static int_type
      not_eof(const int_type& __c)
      { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); }
    };

  template<typename _CharT>
    int
    char_traits<_CharT>::
    compare(const char_type* __s1, const char_type* __s2, std::size_t __n)
    {
      for (size_t __i = 0; __i < __n; ++__i)
 if (lt(__s1[__i], __s2[__i]))
   return -1;
 else if (lt(__s2[__i], __s1[__i]))
   return 1;
      return 0;
    }

  template<typename _CharT>
    std::size_t
    char_traits<_CharT>::
    length(const char_type* __p)
    {
      std::size_t __i = 0;
      while (!eq(__p[__i], char_type()))
        ++__i;
      return __i;
    }

  template<typename _CharT>
    const typename char_traits<_CharT>::char_type*
    char_traits<_CharT>::
    find(const char_type* __s, std::size_t __n, const char_type& __a)
    {
      for (std::size_t __i = 0; __i < __n; ++__i)
        if (eq(__s[__i], __a))
          return __s + __i;
      return 0;
    }

  template<typename _CharT>
    typename char_traits<_CharT>::char_type*
    char_traits<_CharT>::
    move(char_type* __s1, const char_type* __s2, std::size_t __n)
    {
      return static_cast<_CharT*>(std::memmove(__s1, __s2,
            __n * sizeof(char_type)));
    }

  template<typename _CharT>
    typename char_traits<_CharT>::char_type*
    char_traits<_CharT>::
    copy(char_type* __s1, const char_type* __s2, std::size_t __n)
    {
      std::copy(__s2, __s2 + __n, __s1);
      return __s1;
    }

  template<typename _CharT>
    typename char_traits<_CharT>::char_type*
    char_traits<_CharT>::
    assign(char_type* __s, std::size_t __n, char_type __a)
    {
      std::fill_n(__s, __n, __a);
      return __s;
    }
}

namespace std
{
# 224 "/usr/include/c++/4.0.0/bits/char_traits.h" 3
  template<class _CharT>
    struct char_traits : public __gnu_cxx::char_traits<_CharT>
    { };



  template<>
    struct char_traits<char>
    {
      typedef char char_type;
      typedef int int_type;
      typedef streampos pos_type;
      typedef streamoff off_type;
      typedef mbstate_t state_type;

      static void
      assign(char_type& __c1, const char_type& __c2)
      { __c1 = __c2; }

      static bool
      eq(const char_type& __c1, const char_type& __c2)
      { return __c1 == __c2; }

      static bool
      lt(const char_type& __c1, const char_type& __c2)
      { return __c1 < __c2; }

      static int
      compare(const char_type* __s1, const char_type* __s2, size_t __n)
      { return memcmp(__s1, __s2, __n); }

      static size_t
      length(const char_type* __s)
      { return strlen(__s); }

      static const char_type*
      find(const char_type* __s, size_t __n, const char_type& __a)
      { return static_cast<const char_type*>(memchr(__s, __a, __n)); }

      static char_type*
      move(char_type* __s1, const char_type* __s2, size_t __n)
      { return static_cast<char_type*>(memmove(__s1, __s2, __n)); }

      static char_type*
      copy(char_type* __s1, const char_type* __s2, size_t __n)
      { return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }

      static char_type*
      assign(char_type* __s, size_t __n, char_type __a)
      { return static_cast<char_type*>(memset(__s, __a, __n)); }

      static char_type
      to_char_type(const int_type& __c)
      { return static_cast<char_type>(__c); }



      static int_type
      to_int_type(const char_type& __c)
      { return static_cast<int_type>(static_cast<unsigned char>(__c)); }

      static bool
      eq_int_type(const int_type& __c1, const int_type& __c2)
      { return __c1 == __c2; }

      static int_type
      eof() { return static_cast<int_type>((-1)); }

      static int_type
      not_eof(const int_type& __c)
      { return (__c == eof()) ? 0 : __c; }
  };




  template<>
    struct char_traits<wchar_t>
    {
      typedef wchar_t char_type;
      typedef wint_t int_type;
      typedef streamoff off_type;
      typedef wstreampos pos_type;
      typedef mbstate_t state_type;

      static void
      assign(char_type& __c1, const char_type& __c2)
      { __c1 = __c2; }

      static bool
      eq(const char_type& __c1, const char_type& __c2)
      { return __c1 == __c2; }

      static bool
      lt(const char_type& __c1, const char_type& __c2)
      { return __c1 < __c2; }

      static int
      compare(const char_type* __s1, const char_type* __s2, size_t __n)
      { return wmemcmp(__s1, __s2, __n); }

      static size_t
      length(const char_type* __s)
      { return wcslen(__s); }

      static const char_type*
      find(const char_type* __s, size_t __n, const char_type& __a)
      { return wmemchr(__s, __a, __n); }

      static char_type*
      move(char_type* __s1, const char_type* __s2, size_t __n)
      { return wmemmove(__s1, __s2, __n); }

      static char_type*
      copy(char_type* __s1, const char_type* __s2, size_t __n)
      { return wmemcpy(__s1, __s2, __n); }

      static char_type*
      assign(char_type* __s, size_t __n, char_type __a)
      { return wmemset(__s, __a, __n); }

      static char_type
      to_char_type(const int_type& __c) { return char_type(__c); }

      static int_type
      to_int_type(const char_type& __c) { return int_type(__c); }

      static bool
      eq_int_type(const int_type& __c1, const int_type& __c2)
      { return __c1 == __c2; }

      static int_type
      eof() { return static_cast<int_type>(((__darwin_wint_t)-1)); }

      static int_type
      not_eof(const int_type& __c)
      { return eq_int_type(__c, eof()) ? 0 : __c; }
  };


}
# 47 "/usr/include/c++/4.0.0/string" 2 3
# 1 "/usr/include/c++/4.0.0/memory" 1 3
# 51 "/usr/include/c++/4.0.0/memory" 3
       
# 52 "/usr/include/c++/4.0.0/memory" 3


# 1 "/usr/include/c++/4.0.0/bits/allocator.h" 1 3
# 52 "/usr/include/c++/4.0.0/bits/allocator.h" 3
# 1 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++allocator.h" 1 3
# 34 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++allocator.h" 3
# 1 "/usr/include/c++/4.0.0/ext/new_allocator.h" 1 3
# 37 "/usr/include/c++/4.0.0/ext/new_allocator.h" 3
# 1 "/usr/include/c++/4.0.0/new" 1 3
# 42 "/usr/include/c++/4.0.0/new" 3
# 1 "/usr/include/c++/4.0.0/exception" 1 3
# 40 "/usr/include/c++/4.0.0/exception" 3
#pragma GCC visibility push(default)

extern "C++" {

namespace std
{
# 54 "/usr/include/c++/4.0.0/exception" 3
  class exception
  {
  public:
    exception() throw() { }
    virtual ~exception() throw();


    virtual const char* what() const throw();
  };



  class bad_exception : public exception
  {
  public:
    bad_exception() throw() { }


    virtual ~bad_exception() throw();
  };


  typedef void (*terminate_handler) ();

  typedef void (*unexpected_handler) ();


  terminate_handler set_terminate(terminate_handler) throw();


  void terminate() __attribute__ ((__noreturn__));


  unexpected_handler set_unexpected(unexpected_handler) throw();


  void unexpected() __attribute__ ((__noreturn__));
# 102 "/usr/include/c++/4.0.0/exception" 3
  bool uncaught_exception() throw();
}

namespace __gnu_cxx
{
# 117 "/usr/include/c++/4.0.0/exception" 3
  void __verbose_terminate_handler ();
}

}

#pragma GCC visibility pop
# 43 "/usr/include/c++/4.0.0/new" 2 3

#pragma GCC visibility push(default)

extern "C++" {

namespace std
{





  class bad_alloc : public exception
  {
  public:
    bad_alloc() throw() { }


    virtual ~bad_alloc() throw();
  };

  struct nothrow_t { };
  extern const nothrow_t nothrow;


  typedef void (*new_handler)();

  new_handler set_new_handler(new_handler) throw();
}
# 84 "/usr/include/c++/4.0.0/new" 3
void* operator new(std::size_t) throw (std::bad_alloc);
void* operator new[](std::size_t) throw (std::bad_alloc);
void operator delete(void*) throw();
void operator delete[](void*) throw();
void* operator new(std::size_t, const std::nothrow_t&) throw();
void* operator new[](std::size_t, const std::nothrow_t&) throw();
void operator delete(void*, const std::nothrow_t&) throw();
void operator delete[](void*, const std::nothrow_t&) throw();


inline void* operator new(std::size_t, void* __p) throw() { return __p; }
inline void* operator new[](std::size_t, void* __p) throw() { return __p; }


inline void operator delete (void*, void*) throw() { }
inline void operator delete[](void*, void*) throw() { }

}

#pragma GCC visibility pop
# 38 "/usr/include/c++/4.0.0/ext/new_allocator.h" 2 3


namespace __gnu_cxx
{







  template<typename _Tp>
    class new_allocator
    {
    public:
      typedef size_t size_type;
      typedef ptrdiff_t difference_type;
      typedef _Tp* pointer;
      typedef const _Tp* const_pointer;
      typedef _Tp& reference;
      typedef const _Tp& const_reference;
      typedef _Tp value_type;

      template<typename _Tp1>
        struct rebind
        { typedef new_allocator<_Tp1> other; };

      new_allocator() throw() { }

      new_allocator(const new_allocator&) throw() { }

      template<typename _Tp1>
        new_allocator(const new_allocator<_Tp1>&) throw() { }

      ~new_allocator() throw() { }

      pointer
      address(reference __x) const { return &__x; }

      const_pointer
      address(const_reference __x) const { return &__x; }



      pointer
      allocate(size_type __n, const void* = 0)
      {
 if (__builtin_expect(__n > this->max_size(), false))
   std::__throw_bad_alloc();

 return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
      }


      void
      deallocate(pointer __p, size_type)
      { ::operator delete(__p); }

      size_type
      max_size() const throw()
      { return size_t(-1) / sizeof(_Tp); }



      void
      construct(pointer __p, const _Tp& __val)
      { ::new(__p) _Tp(__val); }

      void
      destroy(pointer __p) { __p->~_Tp(); }
    };

  template<typename _Tp>
    inline bool
    operator==(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
    { return true; }

  template<typename _Tp>
    inline bool
    operator!=(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
    { return false; }
}
# 35 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/c++allocator.h" 2 3
# 53 "/usr/include/c++/4.0.0/bits/allocator.h" 2 3

namespace std
{
  template<typename _Tp>
    class allocator;


  template<>
    class allocator<void>
    {
    public:
      typedef size_t size_type;
      typedef ptrdiff_t difference_type;
      typedef void* pointer;
      typedef const void* const_pointer;
      typedef void value_type;

      template<typename _Tp1>
        struct rebind
        { typedef allocator<_Tp1> other; };
    };







  template<typename _Tp>
    class allocator: public __gnu_cxx::new_allocator<_Tp>
    {
   public:
      typedef size_t size_type;
      typedef ptrdiff_t difference_type;
      typedef _Tp* pointer;
      typedef const _Tp* const_pointer;
      typedef _Tp& reference;
      typedef const _Tp& const_reference;
      typedef _Tp value_type;

      template<typename _Tp1>
        struct rebind
        { typedef allocator<_Tp1> other; };

      allocator() throw() { }

      allocator(const allocator& __a) throw()
      : __gnu_cxx::new_allocator<_Tp>(__a) { }

      template<typename _Tp1>
        allocator(const allocator<_Tp1>&) throw() { }

      ~allocator() throw() { }


    };

  template<typename _T1, typename _T2>
    inline bool
    operator==(const allocator<_T1>&, const allocator<_T2>&)
    { return true; }

  template<typename _T1, typename _T2>
    inline bool
    operator!=(const allocator<_T1>&, const allocator<_T2>&)
    { return false; }





  extern template class allocator<char>;
  extern template class allocator<wchar_t>;




}
# 55 "/usr/include/c++/4.0.0/memory" 2 3
# 1 "/usr/include/c++/4.0.0/bits/stl_construct.h" 1 3
# 67 "/usr/include/c++/4.0.0/bits/stl_construct.h" 3
namespace std
{






  template<typename _T1, typename _T2>
    inline void
    _Construct(_T1* __p, const _T2& __value)
    {


      ::new(static_cast<void*>(__p)) _T1(__value);
    }







  template<typename _T1>
    inline void
    _Construct(_T1* __p)
    {


      ::new(static_cast<void*>(__p)) _T1();
    }






  template<typename _Tp>
    inline void
    _Destroy(_Tp* __pointer)
    { __pointer->~_Tp(); }
# 116 "/usr/include/c++/4.0.0/bits/stl_construct.h" 3
  template<typename _ForwardIterator>
    inline void
    __destroy_aux(_ForwardIterator __first, _ForwardIterator __last,
    __false_type)
    {
      for (; __first != __last; ++__first)
 std::_Destroy(&*__first);
    }
# 134 "/usr/include/c++/4.0.0/bits/stl_construct.h" 3
  template<typename _ForwardIterator>
    inline void
    __destroy_aux(_ForwardIterator, _ForwardIterator, __true_type)
    { }
# 146 "/usr/include/c++/4.0.0/bits/stl_construct.h" 3
  template<typename _ForwardIterator>
    inline void
    _Destroy(_ForwardIterator __first, _ForwardIterator __last)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
                       _Value_type;
      typedef typename std::__is_scalar<_Value_type>::__type
                _Has_trivial_destructor;

      std::__destroy_aux(__first, __last, _Has_trivial_destructor());
    }
# 166 "/usr/include/c++/4.0.0/bits/stl_construct.h" 3
  template <typename _Tp> class allocator;

  template<typename _ForwardIterator, typename _Allocator>
    void
    _Destroy(_ForwardIterator __first, _ForwardIterator __last,
      _Allocator __alloc)
    {
      for (; __first != __last; ++__first)
 __alloc.destroy(&*__first);
    }

  template<typename _ForwardIterator, typename _Allocator, typename _Tp>
    inline void
    _Destroy(_ForwardIterator __first, _ForwardIterator __last,
      allocator<_Tp>)
    {
      _Destroy(__first, __last);
    }


}
# 56 "/usr/include/c++/4.0.0/memory" 2 3

# 1 "/usr/include/c++/4.0.0/bits/stl_uninitialized.h" 1 3
# 66 "/usr/include/c++/4.0.0/bits/stl_uninitialized.h" 3
namespace std
{

  template<typename _InputIterator, typename _ForwardIterator>
    inline _ForwardIterator
    __uninitialized_copy_aux(_InputIterator __first, _InputIterator __last,
        _ForwardIterator __result,
        __true_type)
    { return std::copy(__first, __last, __result); }

  template<typename _InputIterator, typename _ForwardIterator>
    inline _ForwardIterator
    __uninitialized_copy_aux(_InputIterator __first, _InputIterator __last,
        _ForwardIterator __result,
        __false_type)
    {
      _ForwardIterator __cur = __result;
      try
 {
   for (; __first != __last; ++__first, ++__cur)
     std::_Construct(&*__cur, *__first);
   return __cur;
 }
      catch(...)
 {
   std::_Destroy(__result, __cur);
   throw;
 }
    }
# 105 "/usr/include/c++/4.0.0/bits/stl_uninitialized.h" 3
  template<typename _InputIterator, typename _ForwardIterator>
    inline _ForwardIterator
    uninitialized_copy(_InputIterator __first, _InputIterator __last,
         _ForwardIterator __result)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType;
      typedef typename std::__is_scalar<_ValueType>::__type _Is_POD;
      return std::__uninitialized_copy_aux(__first, __last, __result,
        _Is_POD());
    }

  inline char*
  uninitialized_copy(const char* __first, const char* __last, char* __result)
  {
    std::memmove(__result, __first, __last - __first);
    return __result + (__last - __first);
  }

  inline wchar_t*
  uninitialized_copy(const wchar_t* __first, const wchar_t* __last,
       wchar_t* __result)
  {
    std::memmove(__result, __first, sizeof(wchar_t) * (__last - __first));
    return __result + (__last - __first);
  }



  template<typename _ForwardIterator, typename _Tp>
    inline void
    __uninitialized_fill_aux(_ForwardIterator __first,
        _ForwardIterator __last,
        const _Tp& __x, __true_type)
    { std::fill(__first, __last, __x); }

  template<typename _ForwardIterator, typename _Tp>
    void
    __uninitialized_fill_aux(_ForwardIterator __first, _ForwardIterator __last,
        const _Tp& __x, __false_type)
    {
      _ForwardIterator __cur = __first;
      try
 {
   for (; __cur != __last; ++__cur)
     std::_Construct(&*__cur, __x);
 }
      catch(...)
 {
   std::_Destroy(__first, __cur);
   throw;
 }
    }
# 167 "/usr/include/c++/4.0.0/bits/stl_uninitialized.h" 3
  template<typename _ForwardIterator, typename _Tp>
    inline void
    uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last,
         const _Tp& __x)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType;
      typedef typename std::__is_scalar<_ValueType>::__type _Is_POD;
      std::__uninitialized_fill_aux(__first, __last, __x, _Is_POD());
    }



  template<typename _ForwardIterator, typename _Size, typename _Tp>
    inline void
    __uninitialized_fill_n_aux(_ForwardIterator __first, _Size __n,
          const _Tp& __x, __true_type)
    { std::fill_n(__first, __n, __x); }

  template<typename _ForwardIterator, typename _Size, typename _Tp>
    void
    __uninitialized_fill_n_aux(_ForwardIterator __first, _Size __n,
          const _Tp& __x, __false_type)
    {
      _ForwardIterator __cur = __first;
      try
 {
   for (; __n > 0; --__n, ++__cur)
     std::_Construct(&*__cur, __x);
 }
      catch(...)
 {
   std::_Destroy(__first, __cur);
   throw;
 }
    }
# 212 "/usr/include/c++/4.0.0/bits/stl_uninitialized.h" 3
  template<typename _ForwardIterator, typename _Size, typename _Tp>
    inline void
    uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType;
      typedef typename std::__is_scalar<_ValueType>::__type _Is_POD;
      std::__uninitialized_fill_n_aux(__first, __n, __x, _Is_POD());
    }







  template<typename _InputIterator, typename _ForwardIterator,
    typename _Allocator>
    _ForwardIterator
    __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
      _ForwardIterator __result,
      _Allocator __alloc)
    {
      _ForwardIterator __cur = __result;
      try
 {
   for (; __first != __last; ++__first, ++__cur)
     __alloc.construct(&*__cur, *__first);
   return __cur;
 }
      catch(...)
 {
   std::_Destroy(__result, __cur, __alloc);
   throw;
 }
    }

  template<typename _InputIterator, typename _ForwardIterator, typename _Tp>
    inline _ForwardIterator
    __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
      _ForwardIterator __result,
      allocator<_Tp>)
    {
      return std::uninitialized_copy(__first, __last, __result);
    }

  template<typename _ForwardIterator, typename _Tp, typename _Allocator>
    void
    __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
      const _Tp& __x, _Allocator __alloc)
    {
      _ForwardIterator __cur = __first;
      try
 {
   for (; __cur != __last; ++__cur)
     __alloc.construct(&*__cur, __x);
 }
      catch(...)
 {
   std::_Destroy(__first, __cur, __alloc);
   throw;
 }
    }

  template<typename _ForwardIterator, typename _Tp, typename _Tp2>
    inline void
    __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
      const _Tp& __x, allocator<_Tp2>)
    {
      std::uninitialized_fill(__first, __last, __x);
    }

  template<typename _ForwardIterator, typename _Size, typename _Tp,
    typename _Allocator>
    void
    __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
        const _Tp& __x,
        _Allocator __alloc)
    {
      _ForwardIterator __cur = __first;
      try
 {
   for (; __n > 0; --__n, ++__cur)
     __alloc.construct(&*__cur, __x);
 }
      catch(...)
 {
   std::_Destroy(__first, __cur, __alloc);
   throw;
 }
    }

  template<typename _ForwardIterator, typename _Size, typename _Tp,
    typename _Tp2>
    void
    __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
        const _Tp& __x,
        allocator<_Tp2>)
    {
      std::uninitialized_fill_n(__first, __n, __x);
    }
# 323 "/usr/include/c++/4.0.0/bits/stl_uninitialized.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _ForwardIterator, typename _Allocator>
    inline _ForwardIterator
    __uninitialized_copy_copy(_InputIterator1 __first1,
         _InputIterator1 __last1,
         _InputIterator2 __first2,
         _InputIterator2 __last2,
         _ForwardIterator __result,
         _Allocator __alloc)
    {
      _ForwardIterator __mid = std::__uninitialized_copy_a(__first1, __last1,
          __result,
          __alloc);
      try
 {
   return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc);
 }
      catch(...)
 {
   std::_Destroy(__result, __mid, __alloc);
   throw;
 }
    }




  template<typename _ForwardIterator, typename _Tp, typename _InputIterator,
    typename _Allocator>
    inline _ForwardIterator
    __uninitialized_fill_copy(_ForwardIterator __result, _ForwardIterator __mid,
         const _Tp& __x, _InputIterator __first,
         _InputIterator __last,
         _Allocator __alloc)
    {
      std::__uninitialized_fill_a(__result, __mid, __x, __alloc);
      try
 {
   return std::__uninitialized_copy_a(__first, __last, __mid, __alloc);
 }
      catch(...)
 {
   std::_Destroy(__result, __mid, __alloc);
   throw;
 }
    }




  template<typename _InputIterator, typename _ForwardIterator, typename _Tp,
    typename _Allocator>
    inline void
    __uninitialized_copy_fill(_InputIterator __first1, _InputIterator __last1,
         _ForwardIterator __first2,
         _ForwardIterator __last2, const _Tp& __x,
         _Allocator __alloc)
    {
      _ForwardIterator __mid2 = std::__uninitialized_copy_a(__first1, __last1,
           __first2,
           __alloc);
      try
 {
   std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc);
 }
      catch(...)
 {
   std::_Destroy(__first2, __mid2, __alloc);
   throw;
 }
    }

}
# 58 "/usr/include/c++/4.0.0/memory" 2 3
# 1 "/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h" 1 3
# 64 "/usr/include/c++/4.0.0/bits/stl_raw_storage_iter.h" 3
namespace std
{




  template <class _ForwardIterator, class _Tp>
    class raw_storage_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _ForwardIterator _M_iter;

    public:
      explicit
      raw_storage_iterator(_ForwardIterator __x)
      : _M_iter(__x) {}

      raw_storage_iterator&
      operator*() { return *this; }

      raw_storage_iterator&
      operator=(const _Tp& __element)
      {
 std::_Construct(&*_M_iter, __element);
 return *this;
      }

      raw_storage_iterator<_ForwardIterator, _Tp>&
      operator++()
      {
 ++_M_iter;
 return *this;
      }

      raw_storage_iterator<_ForwardIterator, _Tp>
      operator++(int)
      {
 raw_storage_iterator<_ForwardIterator, _Tp> __tmp = *this;
 ++_M_iter;
 return __tmp;
      }
    };
}
# 59 "/usr/include/c++/4.0.0/memory" 2 3

# 1 "/usr/include/c++/4.0.0/limits" 1 3
# 45 "/usr/include/c++/4.0.0/limits" 3
       
# 46 "/usr/include/c++/4.0.0/limits" 3
# 149 "/usr/include/c++/4.0.0/limits" 3
namespace std
{





  enum float_round_style
  {
    round_indeterminate = -1,
    round_toward_zero = 0,
    round_to_nearest = 1,
    round_toward_infinity = 2,
    round_toward_neg_infinity = 3
  };







  enum float_denorm_style
  {

    denorm_indeterminate = -1,

    denorm_absent = 0,

    denorm_present = 1
  };
# 191 "/usr/include/c++/4.0.0/limits" 3
  struct __numeric_limits_base
  {


    static const bool is_specialized = false;




    static const int digits = 0;

    static const int digits10 = 0;

    static const bool is_signed = false;





    static const bool is_integer = false;




    static const bool is_exact = false;


    static const int radix = 0;



    static const int min_exponent = 0;


    static const int min_exponent10 = 0;



    static const int max_exponent = 0;


    static const int max_exponent10 = 0;


    static const bool has_infinity = false;


    static const bool has_quiet_NaN = false;


    static const bool has_signaling_NaN = false;

    static const float_denorm_style has_denorm = denorm_absent;


    static const bool has_denorm_loss = false;



    static const bool is_iec559 = false;



    static const bool is_bounded = false;




    static const bool is_modulo = false;


    static const bool traps = false;

    static const bool tinyness_before = false;



    static const float_round_style round_style = round_toward_zero;
  };
# 284 "/usr/include/c++/4.0.0/limits" 3
  template<typename _Tp>
    struct numeric_limits : public __numeric_limits_base
    {


      static _Tp min() throw() { return static_cast<_Tp>(0); }

      static _Tp max() throw() { return static_cast<_Tp>(0); }


      static _Tp epsilon() throw() { return static_cast<_Tp>(0); }

      static _Tp round_error() throw() { return static_cast<_Tp>(0); }

      static _Tp infinity() throw() { return static_cast<_Tp>(0); }

      static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); }


      static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); }



      static _Tp denorm_min() throw() { return static_cast<_Tp>(0); }
    };





  template<>
    struct numeric_limits<bool>
    {
      static const bool is_specialized = true;

      static bool min() throw()
      { return false; }
      static bool max() throw()
      { return true; }

      static const int digits = 1;
      static const int digits10 = 0;
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static bool epsilon() throw()
      { return false; }
      static bool round_error() throw()
      { return false; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static bool infinity() throw()
      { return false; }
      static bool quiet_NaN() throw()
      { return false; }
      static bool signaling_NaN() throw()
      { return false; }
      static bool denorm_min() throw()
      { return false; }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = false;




      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<char>
    {
      static const bool is_specialized = true;

      static char min() throw()
      { return (((char)(-1) < 0) ? (char)1 << (sizeof(char) * 8 - ((char)(-1) < 0)) : (char)0); }
      static char max() throw()
      { return (((char)(-1) < 0) ? ((char)1 << (sizeof(char) * 8 - ((char)(-1) < 0))) - 1 : ~(char)0); }

      static const int digits = (sizeof(char) * 8 - ((char)(-1) < 0));
      static const int digits10 = ((sizeof(char) * 8 - ((char)(-1) < 0)) * 643 / 2136);
      static const bool is_signed = ((char)(-1) < 0);
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static char epsilon() throw()
      { return 0; }
      static char round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static char infinity() throw()
      { return char(); }
      static char quiet_NaN() throw()
      { return char(); }
      static char signaling_NaN() throw()
      { return char(); }
      static char denorm_min() throw()
      { return static_cast<char>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<signed char>
    {
      static const bool is_specialized = true;

      static signed char min() throw()
      { return -127 - 1; }
      static signed char max() throw()
      { return 127; }

      static const int digits = (sizeof(signed char) * 8 - ((signed char)(-1) < 0));
      static const int digits10 = ((sizeof(signed char) * 8 - ((signed char)(-1) < 0)) * 643 / 2136);
      static const bool is_signed = true;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static signed char epsilon() throw()
      { return 0; }
      static signed char round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static signed char infinity() throw()
      { return static_cast<signed char>(0); }
      static signed char quiet_NaN() throw()
      { return static_cast<signed char>(0); }
      static signed char signaling_NaN() throw()
      { return static_cast<signed char>(0); }
      static signed char denorm_min() throw()
      { return static_cast<signed char>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<unsigned char>
    {
      static const bool is_specialized = true;

      static unsigned char min() throw()
      { return 0; }
      static unsigned char max() throw()
      { return 127 * 2U + 1; }

      static const int digits = (sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0));
      static const int digits10 = ((sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0)) * 643 / 2136);
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static unsigned char epsilon() throw()
      { return 0; }
      static unsigned char round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static unsigned char infinity() throw()
      { return static_cast<unsigned char>(0); }
      static unsigned char quiet_NaN() throw()
      { return static_cast<unsigned char>(0); }
      static unsigned char signaling_NaN() throw()
      { return static_cast<unsigned char>(0); }
      static unsigned char denorm_min() throw()
      { return static_cast<unsigned char>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<wchar_t>
    {
      static const bool is_specialized = true;

      static wchar_t min() throw()
      { return (((wchar_t)(-1) < 0) ? (wchar_t)1 << (sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) : (wchar_t)0); }
      static wchar_t max() throw()
      { return (((wchar_t)(-1) < 0) ? ((wchar_t)1 << (sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0))) - 1 : ~(wchar_t)0); }

      static const int digits = (sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0));
      static const int digits10 = ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) * 643 / 2136);
      static const bool is_signed = ((wchar_t)(-1) < 0);
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static wchar_t epsilon() throw()
      { return 0; }
      static wchar_t round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static wchar_t infinity() throw()
      { return wchar_t(); }
      static wchar_t quiet_NaN() throw()
      { return wchar_t(); }
      static wchar_t signaling_NaN() throw()
      { return wchar_t(); }
      static wchar_t denorm_min() throw()
      { return wchar_t(); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<short>
    {
      static const bool is_specialized = true;

      static short min() throw()
      { return -32767 - 1; }
      static short max() throw()
      { return 32767; }

      static const int digits = (sizeof(short) * 8 - ((short)(-1) < 0));
      static const int digits10 = ((sizeof(short) * 8 - ((short)(-1) < 0)) * 643 / 2136);
      static const bool is_signed = true;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static short epsilon() throw()
      { return 0; }
      static short round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static short infinity() throw()
      { return short(); }
      static short quiet_NaN() throw()
      { return short(); }
      static short signaling_NaN() throw()
      { return short(); }
      static short denorm_min() throw()
      { return short(); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<unsigned short>
    {
      static const bool is_specialized = true;

      static unsigned short min() throw()
      { return 0; }
      static unsigned short max() throw()
      { return 32767 * 2U + 1; }

      static const int digits = (sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0));
      static const int digits10 = ((sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0)) * 643 / 2136);
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static unsigned short epsilon() throw()
      { return 0; }
      static unsigned short round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static unsigned short infinity() throw()
      { return static_cast<unsigned short>(0); }
      static unsigned short quiet_NaN() throw()
      { return static_cast<unsigned short>(0); }
      static unsigned short signaling_NaN() throw()
      { return static_cast<unsigned short>(0); }
      static unsigned short denorm_min() throw()
      { return static_cast<unsigned short>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<int>
    {
      static const bool is_specialized = true;

      static int min() throw()
      { return -2147483647 - 1; }
      static int max() throw()
      { return 2147483647; }

      static const int digits = (sizeof(int) * 8 - ((int)(-1) < 0));
      static const int digits10 = ((sizeof(int) * 8 - ((int)(-1) < 0)) * 643 / 2136);
      static const bool is_signed = true;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static int epsilon() throw()
      { return 0; }
      static int round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static int infinity() throw()
      { return static_cast<int>(0); }
      static int quiet_NaN() throw()
      { return static_cast<int>(0); }
      static int signaling_NaN() throw()
      { return static_cast<int>(0); }
      static int denorm_min() throw()
      { return static_cast<int>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<unsigned int>
    {
      static const bool is_specialized = true;

      static unsigned int min() throw()
      { return 0; }
      static unsigned int max() throw()
      { return 2147483647 * 2U + 1; }

      static const int digits = (sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0));
      static const int digits10 = ((sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0)) * 643 / 2136);
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static unsigned int epsilon() throw()
      { return 0; }
      static unsigned int round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static unsigned int infinity() throw()
      { return static_cast<unsigned int>(0); }
      static unsigned int quiet_NaN() throw()
      { return static_cast<unsigned int>(0); }
      static unsigned int signaling_NaN() throw()
      { return static_cast<unsigned int>(0); }
      static unsigned int denorm_min() throw()
      { return static_cast<unsigned int>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<long>
    {
      static const bool is_specialized = true;

      static long min() throw()
      { return -2147483647L - 1; }
      static long max() throw()
      { return 2147483647L; }

      static const int digits = (sizeof(long) * 8 - ((long)(-1) < 0));
      static const int digits10 = ((sizeof(long) * 8 - ((long)(-1) < 0)) * 643 / 2136);
      static const bool is_signed = true;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static long epsilon() throw()
      { return 0; }
      static long round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static long infinity() throw()
      { return static_cast<long>(0); }
      static long quiet_NaN() throw()
      { return static_cast<long>(0); }
      static long signaling_NaN() throw()
      { return static_cast<long>(0); }
      static long denorm_min() throw()
      { return static_cast<long>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<unsigned long>
    {
      static const bool is_specialized = true;

      static unsigned long min() throw()
      { return 0; }
      static unsigned long max() throw()
      { return 2147483647L * 2UL + 1; }

      static const int digits = (sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0));
      static const int digits10 = ((sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0)) * 643 / 2136);
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static unsigned long epsilon() throw()
      { return 0; }
      static unsigned long round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static unsigned long infinity() throw()
      { return static_cast<unsigned long>(0); }
      static unsigned long quiet_NaN() throw()
      { return static_cast<unsigned long>(0); }
      static unsigned long signaling_NaN() throw()
      { return static_cast<unsigned long>(0); }
      static unsigned long denorm_min() throw()
      { return static_cast<unsigned long>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<long long>
    {
      static const bool is_specialized = true;

      static long long min() throw()
      { return -9223372036854775807LL - 1; }
      static long long max() throw()
      { return 9223372036854775807LL; }

      static const int digits = (sizeof(long long) * 8 - ((long long)(-1) < 0));
      static const int digits10 = ((sizeof(long long) * 8 - ((long long)(-1) < 0)) * 643 / 2136);
      static const bool is_signed = true;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static long long epsilon() throw()
      { return 0; }
      static long long round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static long long infinity() throw()
      { return static_cast<long long>(0); }
      static long long quiet_NaN() throw()
      { return static_cast<long long>(0); }
      static long long signaling_NaN() throw()
      { return static_cast<long long>(0); }
      static long long denorm_min() throw()
      { return static_cast<long long>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<unsigned long long>
    {
      static const bool is_specialized = true;

      static unsigned long long min() throw()
      { return 0; }
      static unsigned long long max() throw()
      { return 9223372036854775807LL * 2ULL + 1; }

      static const int digits = (sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0));
      static const int digits10 = ((sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0)) * 643 / 2136);
      static const bool is_signed = false;
      static const bool is_integer = true;
      static const bool is_exact = true;
      static const int radix = 2;
      static unsigned long long epsilon() throw()
      { return 0; }
      static unsigned long long round_error() throw()
      { return 0; }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static unsigned long long infinity() throw()
      { return static_cast<unsigned long long>(0); }
      static unsigned long long quiet_NaN() throw()
      { return static_cast<unsigned long long>(0); }
      static unsigned long long signaling_NaN() throw()
      { return static_cast<unsigned long long>(0); }
      static unsigned long long denorm_min() throw()
      { return static_cast<unsigned long long>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = true;
      static const bool is_modulo = true;

      static const bool traps = true;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };


  template<>
    struct numeric_limits<float>
    {
      static const bool is_specialized = true;

      static float min() throw()
      { return 1.17549435e-38F; }
      static float max() throw()
      { return 3.40282347e+38F; }

      static const int digits = 24;
      static const int digits10 = 6;
      static const bool is_signed = true;
      static const bool is_integer = false;
      static const bool is_exact = false;
      static const int radix = 2;
      static float epsilon() throw()
      { return 1.19209290e-7F; }
      static float round_error() throw()
      { return 0.5F; }

      static const int min_exponent = (-125);
      static const int min_exponent10 = (-37);
      static const int max_exponent = 128;
      static const int max_exponent10 = 38;

      static const bool has_infinity = 1;
      static const bool has_quiet_NaN = 1;
      static const bool has_signaling_NaN = has_quiet_NaN;
      static const float_denorm_style has_denorm
 = bool(1.40129846e-45F) ? denorm_present : denorm_absent;
      static const bool has_denorm_loss = false;

      static float infinity() throw()
      { return __builtin_huge_valf (); }
      static float quiet_NaN() throw()
      { return __builtin_nanf (""); }
      static float signaling_NaN() throw()
      { return __builtin_nansf (""); }
      static float denorm_min() throw()
      { return 1.40129846e-45F; }

      static const bool is_iec559
 = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
      static const bool is_bounded = true;
      static const bool is_modulo = false;

      static const bool traps = false;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_to_nearest;
    };






  template<>
    struct numeric_limits<double>
    {
      static const bool is_specialized = true;

      static double min() throw()
      { return 2.2250738585072014e-308; }
      static double max() throw()
      { return 1.7976931348623157e+308; }

      static const int digits = 53;
      static const int digits10 = 15;
      static const bool is_signed = true;
      static const bool is_integer = false;
      static const bool is_exact = false;
      static const int radix = 2;
      static double epsilon() throw()
      { return 2.2204460492503131e-16; }
      static double round_error() throw()
      { return 0.5; }

      static const int min_exponent = (-1021);
      static const int min_exponent10 = (-307);
      static const int max_exponent = 1024;
      static const int max_exponent10 = 308;

      static const bool has_infinity = 1;
      static const bool has_quiet_NaN = 1;
      static const bool has_signaling_NaN = has_quiet_NaN;
      static const float_denorm_style has_denorm
 = bool(4.9406564584124654e-324) ? denorm_present : denorm_absent;
      static const bool has_denorm_loss = false;

      static double infinity() throw()
      { return __builtin_huge_val(); }
      static double quiet_NaN() throw()
      { return __builtin_nan (""); }
      static double signaling_NaN() throw()
      { return __builtin_nans (""); }
      static double denorm_min() throw()
      { return 4.9406564584124654e-324; }

      static const bool is_iec559
 = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
      static const bool is_bounded = true;
      static const bool is_modulo = false;

      static const bool traps = false;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_to_nearest;
    };






  template<>
    struct numeric_limits<long double>
    {
      static const bool is_specialized = true;

      static long double min() throw()
      { return 2.00416836000897277799610805135016e-292L; }
      static long double max() throw()
      { return 1.79769313486231580793728971405301e+308L; }

      static const int digits = 106;
      static const int digits10 = 31;
      static const bool is_signed = true;
      static const bool is_integer = false;
      static const bool is_exact = false;
      static const int radix = 2;
      static long double epsilon() throw()
      { return 4.94065645841246544176568792868221e-324L; }
      static long double round_error() throw()
      { return 0.5L; }

      static const int min_exponent = (-968);
      static const int min_exponent10 = (-291);
      static const int max_exponent = 1024;
      static const int max_exponent10 = 308;

      static const bool has_infinity = 1;
      static const bool has_quiet_NaN = 1;
      static const bool has_signaling_NaN = has_quiet_NaN;
      static const float_denorm_style has_denorm
 = bool(4.94065645841246544176568792868221e-324L) ? denorm_present : denorm_absent;
      static const bool has_denorm_loss
 = false;

      static long double infinity() throw()
      { return __builtin_huge_vall (); }
      static long double quiet_NaN() throw()
      { return __builtin_nanl (""); }
      static long double signaling_NaN() throw()
      { return __builtin_nansl (""); }
      static long double denorm_min() throw()
      { return 4.94065645841246544176568792868221e-324L; }

      static const bool is_iec559
 = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
      static const bool is_bounded = true;
      static const bool is_modulo = false;

      static const bool traps = false;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_to_nearest;
    };





}
# 61 "/usr/include/c++/4.0.0/memory" 2 3

namespace std
{
# 72 "/usr/include/c++/4.0.0/memory" 3
  template<typename _Tp>
    pair<_Tp*, ptrdiff_t>
    __get_temporary_buffer(ptrdiff_t __len, _Tp*)
    {
      const ptrdiff_t __max = numeric_limits<ptrdiff_t>::max() / sizeof(_Tp);
      if (__len > __max)
 __len = __max;

      while (__len > 0)
 {
   _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp),
       nothrow));
   if (__tmp != 0)
     return pair<_Tp*, ptrdiff_t>(__tmp, __len);
   __len /= 2;
 }
      return pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0);
    }
# 108 "/usr/include/c++/4.0.0/memory" 3
  template<typename _Tp>
    inline pair<_Tp*, ptrdiff_t>
    get_temporary_buffer(ptrdiff_t __len)
    { return std::__get_temporary_buffer(__len, static_cast<_Tp*>(0)); }
# 120 "/usr/include/c++/4.0.0/memory" 3
  template<typename _Tp>
    void
    return_temporary_buffer(_Tp* __p)
    { ::operator delete(__p, nothrow); }
# 132 "/usr/include/c++/4.0.0/memory" 3
  template<typename _Tp1>
    struct auto_ptr_ref
    {
      _Tp1* _M_ptr;

      explicit
      auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { }
    };
# 173 "/usr/include/c++/4.0.0/memory" 3
  template<typename _Tp>
    class auto_ptr
    {
    private:
      _Tp* _M_ptr;

    public:

      typedef _Tp element_type;







      explicit
      auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { }
# 199 "/usr/include/c++/4.0.0/memory" 3
      auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { }
# 211 "/usr/include/c++/4.0.0/memory" 3
      template<typename _Tp1>
        auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { }
# 222 "/usr/include/c++/4.0.0/memory" 3
      auto_ptr&
      operator=(auto_ptr& __a) throw()
      {
 reset(__a.release());
 return *this;
      }
# 239 "/usr/include/c++/4.0.0/memory" 3
      template<typename _Tp1>
        auto_ptr&
        operator=(auto_ptr<_Tp1>& __a) throw()
        {
   reset(__a.release());
   return *this;
 }
# 259 "/usr/include/c++/4.0.0/memory" 3
      ~auto_ptr() { delete _M_ptr; }
# 269 "/usr/include/c++/4.0.0/memory" 3
      element_type&
      operator*() const throw()
      {
 ;
 return *_M_ptr;
      }







      element_type*
      operator->() const throw()
      {
 ;
 return _M_ptr;
      }
# 299 "/usr/include/c++/4.0.0/memory" 3
      element_type*
      get() const throw() { return _M_ptr; }
# 313 "/usr/include/c++/4.0.0/memory" 3
      element_type*
      release() throw()
      {
 element_type* __tmp = _M_ptr;
 _M_ptr = 0;
 return __tmp;
      }
# 328 "/usr/include/c++/4.0.0/memory" 3
      void
      reset(element_type* __p = 0) throw()
      {
 if (__p != _M_ptr)
   {
     delete _M_ptr;
     _M_ptr = __p;
   }
      }
# 349 "/usr/include/c++/4.0.0/memory" 3
      auto_ptr(auto_ptr_ref<element_type> __ref) throw()
      : _M_ptr(__ref._M_ptr) { }

      auto_ptr&
      operator=(auto_ptr_ref<element_type> __ref) throw()
      {
 if (__ref._M_ptr != this->get())
   {
     delete _M_ptr;
     _M_ptr = __ref._M_ptr;
   }
 return *this;
      }

      template<typename _Tp1>
        operator auto_ptr_ref<_Tp1>() throw()
        { return auto_ptr_ref<_Tp1>(this->release()); }

      template<typename _Tp1>
        operator auto_ptr<_Tp1>() throw()
        { return auto_ptr<_Tp1>(this->release()); }
  };
}
# 48 "/usr/include/c++/4.0.0/string" 2 3



# 1 "/usr/include/c++/4.0.0/bits/stl_function.h" 1 3
# 64 "/usr/include/c++/4.0.0/bits/stl_function.h" 3
namespace std
{
# 101 "/usr/include/c++/4.0.0/bits/stl_function.h" 3
  template <class _Arg, class _Result>
    struct unary_function
    {
      typedef _Arg argument_type;


      typedef _Result result_type;
    };




  template <class _Arg1, class _Arg2, class _Result>
    struct binary_function
    {
      typedef _Arg1 first_argument_type;


      typedef _Arg2 second_argument_type;
      typedef _Result result_type;
    };
# 133 "/usr/include/c++/4.0.0/bits/stl_function.h" 3
  template <class _Tp>
    struct plus : public binary_function<_Tp, _Tp, _Tp>
    {
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x + __y; }
    };


  template <class _Tp>
    struct minus : public binary_function<_Tp, _Tp, _Tp>
    {
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x - __y; }
    };


  template <class _Tp>
    struct multiplies : public binary_function<_Tp, _Tp, _Tp>
    {
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x * __y; }
    };


  template <class _Tp>
    struct divides : public binary_function<_Tp, _Tp, _Tp>
    {
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x / __y; }
    };


  template <class _Tp>
    struct modulus : public binary_function<_Tp, _Tp, _Tp>
    {
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x % __y; }
    };


  template <class _Tp>
    struct negate : public unary_function<_Tp, _Tp>
    {
      _Tp
      operator()(const _Tp& __x) const
      { return -__x; }
    };
# 195 "/usr/include/c++/4.0.0/bits/stl_function.h" 3
  template <class _Tp>
    struct equal_to : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x == __y; }
    };


  template <class _Tp>
    struct not_equal_to : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x != __y; }
    };


  template <class _Tp>
    struct greater : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x > __y; }
    };


  template <class _Tp>
    struct less : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x < __y; }
    };


  template <class _Tp>
    struct greater_equal : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x >= __y; }
    };


  template <class _Tp>
    struct less_equal : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x <= __y; }
    };
# 256 "/usr/include/c++/4.0.0/bits/stl_function.h" 3
  template <class _Tp>
    struct logical_and : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x && __y; }
    };


  template <class _Tp>
    struct logical_or : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x || __y; }
    };


  template <class _Tp>
    struct logical_not : public unary_function<_Tp, bool>
    {
      bool
      operator()(const _Tp& __x) const
      { return !__x; }
    };
# 311 "/usr/include/c++/4.0.0/bits/stl_function.h" 3
  template <class _Predicate>
    class unary_negate
    : public unary_function<typename _Predicate::argument_type, bool>
    {
    protected:
      _Predicate _M_pred;
    public:
      explicit
      unary_negate(const _Predicate& __x) : _M_pred(__x) {}

      bool
      operator()(const typename _Predicate::argument_type& __x) const
      { return !_M_pred(__x); }
    };


  template <class _Predicate>
    inline unary_negate<_Predicate>
    not1(const _Predicate& __pred)
    { return unary_negate<_Predicate>(__pred); }


  template <class _Predicate>
    class binary_negate
    : public binary_function<typename _Predicate::first_argument_type,
        typename _Predicate::second_argument_type,
        bool>
    {
    protected:
      _Predicate _M_pred;
    public:
      explicit
      binary_negate(const _Predicate& __x)
      : _M_pred(__x) { }

      bool
      operator()(const typename _Predicate::first_argument_type& __x,
   const typename _Predicate::second_argument_type& __y) const
      { return !_M_pred(__x, __y); }
    };


  template <class _Predicate>
    inline binary_negate<_Predicate>
    not2(const _Predicate& __pred)
    { return binary_negate<_Predicate>(__pred); }
# 391 "/usr/include/c++/4.0.0/bits/stl_function.h" 3
  template <class _Operation>
    class binder1st
    : public unary_function<typename _Operation::second_argument_type,
       typename _Operation::result_type>
    {
    protected:
      _Operation op;
      typename _Operation::first_argument_type value;
    public:
      binder1st(const _Operation& __x,
  const typename _Operation::first_argument_type& __y)
      : op(__x), value(__y) {}

      typename _Operation::result_type
      operator()(const typename _Operation::second_argument_type& __x) const
      { return op(value, __x); }



      typename _Operation::result_type
      operator()(typename _Operation::second_argument_type& __x) const
      { return op(value, __x); }
    };


  template <class _Operation, class _Tp>
    inline binder1st<_Operation>
    bind1st(const _Operation& __fn, const _Tp& __x)
    {
      typedef typename _Operation::first_argument_type _Arg1_type;
      return binder1st<_Operation>(__fn, _Arg1_type(__x));
    }


  template <class _Operation>
    class binder2nd
    : public unary_function<typename _Operation::first_argument_type,
       typename _Operation::result_type>
    {
    protected:
      _Operation op;
      typename _Operation::second_argument_type value;
    public:
      binder2nd(const _Operation& __x,
  const typename _Operation::second_argument_type& __y)
      : op(__x), value(__y) {}

      typename _Operation::result_type
      operator()(const typename _Operation::first_argument_type& __x) const
      { return op(__x, value); }



      typename _Operation::result_type
      operator()(typename _Operation::first_argument_type& __x) const
      { return op(__x, value); }
    };


  template <class _Operation, class _Tp>
    inline binder2nd<_Operation>
    bind2nd(const _Operation& __fn, const _Tp& __x)
    {
      typedef typename _Operation::second_argument_type _Arg2_type;
      return binder2nd<_Operation>(__fn, _Arg2_type(__x));
    }
# 480 "/usr/include/c++/4.0.0/bits/stl_function.h" 3
  template <class _Arg, class _Result>
    class pointer_to_unary_function : public unary_function<_Arg, _Result>
    {
    protected:
      _Result (*_M_ptr)(_Arg);
    public:
      pointer_to_unary_function() {}

      explicit
      pointer_to_unary_function(_Result (*__x)(_Arg))
      : _M_ptr(__x) {}

      _Result
      operator()(_Arg __x) const
      { return _M_ptr(__x); }
    };


  template <class _Arg, class _Result>
    inline pointer_to_unary_function<_Arg, _Result>
    ptr_fun(_Result (*__x)(_Arg))
    { return pointer_to_unary_function<_Arg, _Result>(__x); }


  template <class _Arg1, class _Arg2, class _Result>
    class pointer_to_binary_function
    : public binary_function<_Arg1, _Arg2, _Result>
    {
    protected:
      _Result (*_M_ptr)(_Arg1, _Arg2);
    public:
      pointer_to_binary_function() {}

      explicit
      pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
      : _M_ptr(__x) {}

      _Result
      operator()(_Arg1 __x, _Arg2 __y) const
      { return _M_ptr(__x, __y); }
    };


  template <class _Arg1, class _Arg2, class _Result>
    inline pointer_to_binary_function<_Arg1, _Arg2, _Result>
    ptr_fun(_Result (*__x)(_Arg1, _Arg2))
    { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); }


  template <class _Tp>
    struct _Identity : public unary_function<_Tp,_Tp>
    {
      _Tp&
      operator()(_Tp& __x) const
      { return __x; }

      const _Tp&
      operator()(const _Tp& __x) const
      { return __x; }
    };

  template <class _Pair>
    struct _Select1st : public unary_function<_Pair,
           typename _Pair::first_type>
    {
      typename _Pair::first_type&
      operator()(_Pair& __x) const
      { return __x.first; }

      const typename _Pair::first_type&
      operator()(const _Pair& __x) const
      { return __x.first; }
    };

  template <class _Pair>
    struct _Select2nd : public unary_function<_Pair,
           typename _Pair::second_type>
    {
      typename _Pair::second_type&
      operator()(_Pair& __x) const
      { return __x.second; }

      const typename _Pair::second_type&
      operator()(const _Pair& __x) const
      { return __x.second; }
    };
# 590 "/usr/include/c++/4.0.0/bits/stl_function.h" 3
  template <class _Ret, class _Tp>
    class mem_fun_t : public unary_function<_Tp*, _Ret>
    {
    public:
      explicit
      mem_fun_t(_Ret (_Tp::*__pf)())
      : _M_f(__pf) {}

      _Ret
      operator()(_Tp* __p) const
      { return (__p->*_M_f)(); }
    private:
      _Ret (_Tp::*_M_f)();
    };


  template <class _Ret, class _Tp>
    class const_mem_fun_t : public unary_function<const _Tp*, _Ret>
    {
    public:
      explicit
      const_mem_fun_t(_Ret (_Tp::*__pf)() const)
      : _M_f(__pf) {}

      _Ret
      operator()(const _Tp* __p) const
      { return (__p->*_M_f)(); }
    private:
      _Ret (_Tp::*_M_f)() const;
    };


  template <class _Ret, class _Tp>
    class mem_fun_ref_t : public unary_function<_Tp, _Ret>
    {
    public:
      explicit
      mem_fun_ref_t(_Ret (_Tp::*__pf)())
      : _M_f(__pf) {}

      _Ret
      operator()(_Tp& __r) const
      { return (__r.*_M_f)(); }
    private:
      _Ret (_Tp::*_M_f)();
  };


  template <class _Ret, class _Tp>
    class const_mem_fun_ref_t : public unary_function<_Tp, _Ret>
    {
    public:
      explicit
      const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const)
      : _M_f(__pf) {}

      _Ret
      operator()(const _Tp& __r) const
      { return (__r.*_M_f)(); }
    private:
      _Ret (_Tp::*_M_f)() const;
    };


  template <class _Ret, class _Tp, class _Arg>
    class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret>
    {
    public:
      explicit
      mem_fun1_t(_Ret (_Tp::*__pf)(_Arg))
      : _M_f(__pf) {}

      _Ret
      operator()(_Tp* __p, _Arg __x) const
      { return (__p->*_M_f)(__x); }
    private:
      _Ret (_Tp::*_M_f)(_Arg);
    };


  template <class _Ret, class _Tp, class _Arg>
    class const_mem_fun1_t : public binary_function<const _Tp*, _Arg, _Ret>
    {
    public:
      explicit
      const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const)
      : _M_f(__pf) {}

      _Ret
      operator()(const _Tp* __p, _Arg __x) const
      { return (__p->*_M_f)(__x); }
    private:
      _Ret (_Tp::*_M_f)(_Arg) const;
    };


  template <class _Ret, class _Tp, class _Arg>
    class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
    {
    public:
      explicit
      mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg))
      : _M_f(__pf) {}

      _Ret
      operator()(_Tp& __r, _Arg __x) const
      { return (__r.*_M_f)(__x); }
    private:
      _Ret (_Tp::*_M_f)(_Arg);
    };


  template <class _Ret, class _Tp, class _Arg>
    class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
    {
    public:
      explicit
      const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const)
      : _M_f(__pf) {}

      _Ret
      operator()(const _Tp& __r, _Arg __x) const
      { return (__r.*_M_f)(__x); }
    private:
      _Ret (_Tp::*_M_f)(_Arg) const;
    };


  template <class _Tp>
    class mem_fun_t<void, _Tp> : public unary_function<_Tp*, void>
    {
    public:
      explicit
      mem_fun_t(void (_Tp::*__pf)())
      : _M_f(__pf) {}

      void
      operator()(_Tp* __p) const
      { (__p->*_M_f)(); }
    private:
      void (_Tp::*_M_f)();
    };


  template <class _Tp>
    class const_mem_fun_t<void, _Tp> : public unary_function<const _Tp*, void>
    {
    public:
      explicit
      const_mem_fun_t(void (_Tp::*__pf)() const)
      : _M_f(__pf) {}

      void
      operator()(const _Tp* __p) const
      { (__p->*_M_f)(); }
    private:
      void (_Tp::*_M_f)() const;
    };


  template <class _Tp>
    class mem_fun_ref_t<void, _Tp> : public unary_function<_Tp, void>
    {
    public:
      explicit
      mem_fun_ref_t(void (_Tp::*__pf)())
      : _M_f(__pf) {}

      void
      operator()(_Tp& __r) const
      { (__r.*_M_f)(); }
    private:
      void (_Tp::*_M_f)();
    };


  template <class _Tp>
    class const_mem_fun_ref_t<void, _Tp> : public unary_function<_Tp, void>
    {
    public:
      explicit
      const_mem_fun_ref_t(void (_Tp::*__pf)() const)
      : _M_f(__pf) {}

      void
      operator()(const _Tp& __r) const
      { (__r.*_M_f)(); }
    private:
      void (_Tp::*_M_f)() const;
    };


  template <class _Tp, class _Arg>
    class mem_fun1_t<void, _Tp, _Arg> : public binary_function<_Tp*, _Arg, void>
    {
    public:
      explicit
      mem_fun1_t(void (_Tp::*__pf)(_Arg))
      : _M_f(__pf) {}

      void
      operator()(_Tp* __p, _Arg __x) const
      { (__p->*_M_f)(__x); }
    private:
      void (_Tp::*_M_f)(_Arg);
    };


  template <class _Tp, class _Arg>
    class const_mem_fun1_t<void, _Tp, _Arg>
    : public binary_function<const _Tp*, _Arg, void>
    {
    public:
      explicit
      const_mem_fun1_t(void (_Tp::*__pf)(_Arg) const)
      : _M_f(__pf) {}

      void
      operator()(const _Tp* __p, _Arg __x) const
      { (__p->*_M_f)(__x); }
    private:
      void (_Tp::*_M_f)(_Arg) const;
    };


  template <class _Tp, class _Arg>
    class mem_fun1_ref_t<void, _Tp, _Arg>
    : public binary_function<_Tp, _Arg, void>
    {
    public:
      explicit
      mem_fun1_ref_t(void (_Tp::*__pf)(_Arg))
      : _M_f(__pf) {}

      void
      operator()(_Tp& __r, _Arg __x) const
      { (__r.*_M_f)(__x); }
    private:
      void (_Tp::*_M_f)(_Arg);
    };


  template <class _Tp, class _Arg>
    class const_mem_fun1_ref_t<void, _Tp, _Arg>
    : public binary_function<_Tp, _Arg, void>
    {
    public:
      explicit
      const_mem_fun1_ref_t(void (_Tp::*__pf)(_Arg) const)
      : _M_f(__pf) {}

      void
      operator()(const _Tp& __r, _Arg __x) const
      { (__r.*_M_f)(__x); }
    private:
      void (_Tp::*_M_f)(_Arg) const;
    };



  template <class _Ret, class _Tp>
    inline mem_fun_t<_Ret, _Tp>
    mem_fun(_Ret (_Tp::*__f)())
    { return mem_fun_t<_Ret, _Tp>(__f); }

  template <class _Ret, class _Tp>
    inline const_mem_fun_t<_Ret, _Tp>
    mem_fun(_Ret (_Tp::*__f)() const)
    { return const_mem_fun_t<_Ret, _Tp>(__f); }

  template <class _Ret, class _Tp>
    inline mem_fun_ref_t<_Ret, _Tp>
    mem_fun_ref(_Ret (_Tp::*__f)())
    { return mem_fun_ref_t<_Ret, _Tp>(__f); }

  template <class _Ret, class _Tp>
    inline const_mem_fun_ref_t<_Ret, _Tp>
    mem_fun_ref(_Ret (_Tp::*__f)() const)
    { return const_mem_fun_ref_t<_Ret, _Tp>(__f); }

  template <class _Ret, class _Tp, class _Arg>
    inline mem_fun1_t<_Ret, _Tp, _Arg>
    mem_fun(_Ret (_Tp::*__f)(_Arg))
    { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); }

  template <class _Ret, class _Tp, class _Arg>
    inline const_mem_fun1_t<_Ret, _Tp, _Arg>
    mem_fun(_Ret (_Tp::*__f)(_Arg) const)
    { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); }

  template <class _Ret, class _Tp, class _Arg>
    inline mem_fun1_ref_t<_Ret, _Tp, _Arg>
    mem_fun_ref(_Ret (_Tp::*__f)(_Arg))
    { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }

  template <class _Ret, class _Tp, class _Arg>
    inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg>
    mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const)
    { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }



}
# 52 "/usr/include/c++/4.0.0/string" 2 3
# 1 "/usr/include/c++/4.0.0/bits/basic_string.h" 1 3
# 43 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
       
# 44 "/usr/include/c++/4.0.0/bits/basic_string.h" 3

# 1 "/usr/include/c++/4.0.0/bits/atomicity.h" 1 3
# 38 "/usr/include/c++/4.0.0/bits/atomicity.h" 3
# 1 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/atomic_word.h" 1 3
# 33 "/usr/include/c++/4.0.0/powerpc-apple-darwin8/bits/atomic_word.h" 3
typedef int _Atomic_word;
# 39 "/usr/include/c++/4.0.0/bits/atomicity.h" 2 3

namespace __gnu_cxx
{
  _Atomic_word
  __attribute__ ((__unused__))
  __exchange_and_add(volatile _Atomic_word* __mem, int __val);

  void
  __attribute__ ((__unused__))
  __atomic_add(volatile _Atomic_word* __mem, int __val);
}
# 46 "/usr/include/c++/4.0.0/bits/basic_string.h" 2 3


namespace std
{
# 109 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    class basic_string
    {

    public:
      typedef _Traits traits_type;
      typedef typename _Traits::char_type value_type;
      typedef _Alloc allocator_type;
      typedef typename _Alloc::size_type size_type;
      typedef typename _Alloc::difference_type difference_type;
      typedef typename _Alloc::reference reference;
      typedef typename _Alloc::const_reference const_reference;
      typedef typename _Alloc::pointer pointer;
      typedef typename _Alloc::const_pointer const_pointer;
      typedef __gnu_cxx::__normal_iterator<pointer, basic_string> iterator;
      typedef __gnu_cxx::__normal_iterator<const_pointer, basic_string>
                                                            const_iterator;
      typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
      typedef std::reverse_iterator<iterator> reverse_iterator;

    private:
# 144 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      struct _Rep_base
      {
 size_type _M_length;
 size_type _M_capacity;
 _Atomic_word _M_refcount;
      };

      struct _Rep : _Rep_base
      {

 typedef typename _Alloc::template rebind<char>::other _Raw_bytes_alloc;
# 169 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
 static const size_type _S_max_size;
 static const _CharT _S_terminal;



        static size_type _S_empty_rep_storage[];

        static _Rep&
        _S_empty_rep()
        { return *reinterpret_cast<_Rep*>(&_S_empty_rep_storage); }

        bool
 _M_is_leaked() const
        { return this->_M_refcount < 0; }

        bool
 _M_is_shared() const
        { return this->_M_refcount > 0; }

        void
 _M_set_leaked()
        { this->_M_refcount = -1; }

        void
 _M_set_sharable()
        { this->_M_refcount = 0; }

 void
 _M_set_length_and_sharable(size_type __n)
 {
   this->_M_set_sharable();
   this->_M_length = __n;
   this->_M_refdata()[__n] = _S_terminal;

 }

 _CharT*
 _M_refdata() throw()
 { return reinterpret_cast<_CharT*>(this + 1); }

 _CharT*
 _M_grab(const _Alloc& __alloc1, const _Alloc& __alloc2)
 {
   return (!_M_is_leaked() && __alloc1 == __alloc2)
           ? _M_refcopy() : _M_clone(__alloc1);
 }


 static _Rep*
 _S_create(size_type, size_type, const _Alloc&);

 void
 _M_dispose(const _Alloc& __a)
 {

   if (__builtin_expect(this != &_S_empty_rep(), false))

     if (__gnu_cxx::__exchange_and_add(&this->_M_refcount, -1) <= 0)
       _M_destroy(__a);
 }

 void
 _M_destroy(const _Alloc&) throw();

 _CharT*
 _M_refcopy() throw()
 {

   if (__builtin_expect(this != &_S_empty_rep(), false))

            __gnu_cxx::__atomic_add(&this->_M_refcount, 1);
   return _M_refdata();
 }

 _CharT*
 _M_clone(const _Alloc&, size_type __res = 0);
      };


      struct _Alloc_hider : _Alloc
      {
 _Alloc_hider(_CharT* __dat, const _Alloc& __a)
 : _Alloc(__a), _M_p(__dat) { }

 _CharT* _M_p;
      };

    public:




      static const size_type npos = static_cast<size_type>(-1);

    private:

      mutable _Alloc_hider _M_dataplus;

      _CharT*
      _M_data() const
      { return _M_dataplus._M_p; }

      _CharT*
      _M_data(_CharT* __p)
      { return (_M_dataplus._M_p = __p); }

      _Rep*
      _M_rep() const
      { return &((reinterpret_cast<_Rep*> (_M_data()))[-1]); }



      iterator
      _M_ibegin() const
      { return iterator(_M_data()); }

      iterator
      _M_iend() const
      { return iterator(_M_data() + this->size()); }

      void
      _M_leak()
      {
 if (!_M_rep()->_M_is_leaked())
   _M_leak_hard();
      }

      size_type
      _M_check(size_type __pos, const char* __s) const
      {
 if (__pos > this->size())
   __throw_out_of_range((__s));
 return __pos;
      }

      void
      _M_check_length(size_type __n1, size_type __n2, const char* __s) const
      {
 if (this->max_size() - (this->size() - __n1) < __n2)
   __throw_length_error((__s));
      }


      size_type
      _M_limit(size_type __pos, size_type __off) const
      {
 const bool __testoff = __off < this->size() - __pos;
 return __testoff ? __off : this->size() - __pos;
      }


      bool
      _M_disjunct(const _CharT* __s) const
      {
 return (less<const _CharT*>()(__s, _M_data())
  || less<const _CharT*>()(_M_data() + this->size(), __s));
      }



      static void
      _M_copy(_CharT* __d, const _CharT* __s, size_type __n)
      {
 if (__n == 1)
   traits_type::assign(*__d, *__s);
 else
   traits_type::copy(__d, __s, __n);
      }

      static void
      _M_move(_CharT* __d, const _CharT* __s, size_type __n)
      {
 if (__n == 1)
   traits_type::assign(*__d, *__s);
 else
   traits_type::move(__d, __s, __n);
      }

      static void
      _M_assign(_CharT* __d, size_type __n, _CharT __c)
      {
 if (__n == 1)
   traits_type::assign(*__d, __c);
 else
   traits_type::assign(__d, __n, __c);
      }



      template<class _Iterator>
        static void
        _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2)
        {
   for (; __k1 != __k2; ++__k1, ++__p)
     traits_type::assign(*__p, *__k1);
 }

      static void
      _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2)
      { _S_copy_chars(__p, __k1.base(), __k2.base()); }

      static void
      _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2)
      { _S_copy_chars(__p, __k1.base(), __k2.base()); }

      static void
      _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2)
      { _M_copy(__p, __k1, __k2 - __k1); }

      static void
      _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2)
      { _M_copy(__p, __k1, __k2 - __k1); }

      void
      _M_mutate(size_type __pos, size_type __len1, size_type __len2);

      void
      _M_leak_hard();

      static _Rep&
      _S_empty_rep()
      { return _Rep::_S_empty_rep(); }

    public:







      inline
      basic_string();




      explicit
      basic_string(const _Alloc& __a);






      basic_string(const basic_string& __str);






      basic_string(const basic_string& __str, size_type __pos,
     size_type __n = npos);







      basic_string(const basic_string& __str, size_type __pos,
     size_type __n, const _Alloc& __a);
# 442 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string(const _CharT* __s, size_type __n,
     const _Alloc& __a = _Alloc());





      basic_string(const _CharT* __s, const _Alloc& __a = _Alloc());






      basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc());







      template<class _InputIterator>
        basic_string(_InputIterator __beg, _InputIterator __end,
       const _Alloc& __a = _Alloc());




      ~basic_string()
      { _M_rep()->_M_dispose(this->get_allocator()); }





      basic_string&
      operator=(const basic_string& __str)
      { return this->assign(__str); }





      basic_string&
      operator=(const _CharT* __s)
      { return this->assign(__s); }
# 497 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      operator=(_CharT __c)
      {
 this->assign(1, __c);
 return *this;
      }






      iterator
      begin()
      {
 _M_leak();
 return iterator(_M_data());
      }





      const_iterator
      begin() const
      { return const_iterator(_M_data()); }





      iterator
      end()
      {
 _M_leak();
 return iterator(_M_data() + this->size());
      }





      const_iterator
      end() const
      { return const_iterator(_M_data() + this->size()); }






      reverse_iterator
      rbegin()
      { return reverse_iterator(this->end()); }






      const_reverse_iterator
      rbegin() const
      { return const_reverse_iterator(this->end()); }






      reverse_iterator
      rend()
      { return reverse_iterator(this->begin()); }






      const_reverse_iterator
      rend() const
      { return const_reverse_iterator(this->begin()); }

    public:



      size_type
      size() const
      { return _M_rep()->_M_length; }



      size_type
      length() const
      { return _M_rep()->_M_length; }


      size_type
      max_size() const
      { return _Rep::_S_max_size; }
# 608 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      void
      resize(size_type __n, _CharT __c);
# 621 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      void
      resize(size_type __n)
      { this->resize(__n, _CharT()); }





      size_type
      capacity() const
      { return _M_rep()->_M_capacity; }
# 650 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      void
      reserve(size_type __res_arg = 0);




      void
      clear()
      { _M_mutate(0, this->size(), 0); }




      bool
      empty() const
      { return this->size() == 0; }
# 678 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      const_reference
      operator[] (size_type __pos) const
      {
 ;
 return _M_data()[__pos];
      }
# 695 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      reference
      operator[](size_type __pos)
      {
 ;
 _M_leak();
 return _M_data()[__pos];
      }
# 713 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      const_reference
      at(size_type __n) const
      {
 if (__n >= this->size())
   __throw_out_of_range(("basic_string::at"));
 return _M_data()[__n];
      }
# 732 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      reference
      at(size_type __n)
      {
 if (__n >= size())
   __throw_out_of_range(("basic_string::at"));
 _M_leak();
 return _M_data()[__n];
      }







      basic_string&
      operator+=(const basic_string& __str)
      { return this->append(__str); }






      basic_string&
      operator+=(const _CharT* __s)
      { return this->append(__s); }






      basic_string&
      operator+=(_CharT __c)
      {
 this->push_back(__c);
 return *this;
      }






      basic_string&
      append(const basic_string& __str);
# 792 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      append(const basic_string& __str, size_type __pos, size_type __n);







      basic_string&
      append(const _CharT* __s, size_type __n);






      basic_string&
      append(const _CharT* __s)
      {
 ;
 return this->append(__s, traits_type::length(__s));
      }
# 824 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      append(size_type __n, _CharT __c);
# 835 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      template<class _InputIterator>
        basic_string&
        append(_InputIterator __first, _InputIterator __last)
        { return this->replace(_M_iend(), _M_iend(), __first, __last); }





      void
      push_back(_CharT __c)
      {
 const size_type __len = 1 + this->size();
 if (__len > this->capacity() || _M_rep()->_M_is_shared())
   this->reserve(__len);
 traits_type::assign(_M_data()[this->size()], __c);
 _M_rep()->_M_set_length_and_sharable(__len);
      }






      basic_string&
      assign(const basic_string& __str);
# 874 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      assign(const basic_string& __str, size_type __pos, size_type __n)
      { return this->assign(__str._M_data()
       + __str._M_check(__pos, "basic_string::assign"),
       __str._M_limit(__pos, __n)); }
# 890 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      assign(const _CharT* __s, size_type __n);
# 902 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      assign(const _CharT* __s)
      {
 ;
 return this->assign(__s, traits_type::length(__s));
      }
# 918 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      assign(size_type __n, _CharT __c)
      { return _M_replace_aux(size_type(0), this->size(), __n, __c); }
# 930 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      template<class _InputIterator>
        basic_string&
        assign(_InputIterator __first, _InputIterator __last)
        { return this->replace(_M_ibegin(), _M_iend(), __first, __last); }
# 947 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      void
      insert(iterator __p, size_type __n, _CharT __c)
      { this->replace(__p, __p, __n, __c); }
# 962 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      template<class _InputIterator>
        void
        insert(iterator __p, _InputIterator __beg, _InputIterator __end)
        { this->replace(__p, __p, __beg, __end); }
# 978 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      insert(size_type __pos1, const basic_string& __str)
      { return this->insert(__pos1, __str, size_type(0), __str.size()); }
# 1000 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      insert(size_type __pos1, const basic_string& __str,
      size_type __pos2, size_type __n)
      { return this->insert(__pos1, __str._M_data()
       + __str._M_check(__pos2, "basic_string::insert"),
       __str._M_limit(__pos2, __n)); }
# 1023 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      insert(size_type __pos, const _CharT* __s, size_type __n);
# 1041 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      insert(size_type __pos, const _CharT* __s)
      {
 ;
 return this->insert(__pos, __s, traits_type::length(__s));
      }
# 1064 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      insert(size_type __pos, size_type __n, _CharT __c)
      { return _M_replace_aux(_M_check(__pos, "basic_string::insert"),
         size_type(0), __n, __c); }
# 1081 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      iterator
      insert(iterator __p, _CharT __c)
      {
 ;
 const size_type __pos = __p - _M_ibegin();
 _M_replace_aux(__pos, size_type(0), size_type(1), __c);
 _M_rep()->_M_set_leaked();
 return this->_M_ibegin() + __pos;
      }
# 1105 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      erase(size_type __pos = 0, size_type __n = npos)
      {
 _M_mutate(_M_check(__pos, "basic_string::erase"),
    _M_limit(__pos, __n), size_type(0));
 return *this;
      }
# 1121 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      iterator
      erase(iterator __position)
      {
 ;

 const size_type __pos = __position - _M_ibegin();
 _M_mutate(__pos, size_type(1), size_type(0));
 _M_rep()->_M_set_leaked();
 return _M_ibegin() + __pos;
      }
# 1141 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      iterator
      erase(iterator __first, iterator __last)
      {
 ;

        const size_type __pos = __first - _M_ibegin();
 _M_mutate(__pos, __last - __first, size_type(0));
 _M_rep()->_M_set_leaked();
 return _M_ibegin() + __pos;
      }
# 1168 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      replace(size_type __pos, size_type __n, const basic_string& __str)
      { return this->replace(__pos, __n, __str._M_data(), __str.size()); }
# 1190 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      replace(size_type __pos1, size_type __n1, const basic_string& __str,
       size_type __pos2, size_type __n2)
      { return this->replace(__pos1, __n1, __str._M_data()
        + __str._M_check(__pos2, "basic_string::replace"),
        __str._M_limit(__pos2, __n2)); }
# 1214 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      replace(size_type __pos, size_type __n1, const _CharT* __s,
       size_type __n2);
# 1233 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      replace(size_type __pos, size_type __n1, const _CharT* __s)
      {
 ;
 return this->replace(__pos, __n1, __s, traits_type::length(__s));
      }
# 1256 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)
      { return _M_replace_aux(_M_check(__pos, "basic_string::replace"),
         _M_limit(__pos, __n1), __n2, __c); }
# 1274 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      replace(iterator __i1, iterator __i2, const basic_string& __str)
      { return this->replace(__i1, __i2, __str._M_data(), __str.size()); }
# 1292 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      replace(iterator __i1, iterator __i2, const _CharT* __s, size_type __n)
      {
 ;

 return this->replace(__i1 - _M_ibegin(), __i2 - __i1, __s, __n);
      }
# 1313 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      replace(iterator __i1, iterator __i2, const _CharT* __s)
      {
 ;
 return this->replace(__i1, __i2, __s, traits_type::length(__s));
      }
# 1334 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string&
      replace(iterator __i1, iterator __i2, size_type __n, _CharT __c)
      {
 ;

 return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __c);
      }
# 1356 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      template<class _InputIterator>
        basic_string&
        replace(iterator __i1, iterator __i2,
  _InputIterator __k1, _InputIterator __k2)
        {
   ;

   ;
   typedef typename std::__is_integer<_InputIterator>::__type _Integral;
   return _M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral());
 }



      basic_string&
      replace(iterator __i1, iterator __i2, _CharT* __k1, _CharT* __k2)
      {
 ;

 ;
 return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
        __k1, __k2 - __k1);
      }

      basic_string&
      replace(iterator __i1, iterator __i2,
       const _CharT* __k1, const _CharT* __k2)
      {
 ;

 ;
 return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
        __k1, __k2 - __k1);
      }

      basic_string&
      replace(iterator __i1, iterator __i2, iterator __k1, iterator __k2)
      {
 ;

 ;
 return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
        __k1.base(), __k2 - __k1);
      }

      basic_string&
      replace(iterator __i1, iterator __i2,
       const_iterator __k1, const_iterator __k2)
      {
 ;

 ;
 return this->replace(__i1 - _M_ibegin(), __i2 - __i1,
        __k1.base(), __k2 - __k1);
      }

    private:
      template<class _Integer>
 basic_string&
 _M_replace_dispatch(iterator __i1, iterator __i2, _Integer __n,
       _Integer __val, __true_type)
        { return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __val); }

      template<class _InputIterator>
 basic_string&
 _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1,
       _InputIterator __k2, __false_type);

      basic_string&
      _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
       _CharT __c);

      basic_string&
      _M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s,
        size_type __n2);



      template<class _InIterator>
        static _CharT*
        _S_construct_aux(_InIterator __beg, _InIterator __end,
    const _Alloc& __a, __false_type)
 {
          typedef typename iterator_traits<_InIterator>::iterator_category _Tag;
          return _S_construct(__beg, __end, __a, _Tag());
 }

      template<class _InIterator>
        static _CharT*
        _S_construct_aux(_InIterator __beg, _InIterator __end,
    const _Alloc& __a, __true_type)
 { return _S_construct(static_cast<size_type>(__beg),
         static_cast<value_type>(__end), __a); }

      template<class _InIterator>
        static _CharT*
        _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a)
 {
   typedef typename std::__is_integer<_InIterator>::__type _Integral;
   return _S_construct_aux(__beg, __end, __a, _Integral());
        }


      template<class _InIterator>
        static _CharT*
         _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a,
        input_iterator_tag);



      template<class _FwdIterator>
        static _CharT*
        _S_construct(_FwdIterator __beg, _FwdIterator __end, const _Alloc& __a,
       forward_iterator_tag);

      static _CharT*
      _S_construct(size_type __req, _CharT __c, const _Alloc& __a);

    public:
# 1487 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      copy(_CharT* __s, size_type __n, size_type __pos = 0) const;
# 1497 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      void
      swap(basic_string& __s);
# 1507 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      const _CharT*
      c_str() const
      { return _M_data(); }







      const _CharT*
      data() const
      { return _M_data(); }




      allocator_type
      get_allocator() const
      { return _M_dataplus; }
# 1539 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find(const _CharT* __s, size_type __pos, size_type __n) const;
# 1552 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find(const basic_string& __str, size_type __pos = 0) const
      { return this->find(__str.data(), __pos, __str.size()); }
# 1566 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find(const _CharT* __s, size_type __pos = 0) const
      {
 ;
 return this->find(__s, __pos, traits_type::length(__s));
      }
# 1583 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find(_CharT __c, size_type __pos = 0) const;
# 1596 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      rfind(const basic_string& __str, size_type __pos = npos) const
      { return this->rfind(__str.data(), __pos, __str.size()); }
# 1611 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      rfind(const _CharT* __s, size_type __pos, size_type __n) const;
# 1624 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      rfind(const _CharT* __s, size_type __pos = npos) const
      {
 ;
 return this->rfind(__s, __pos, traits_type::length(__s));
      }
# 1641 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      rfind(_CharT __c, size_type __pos = npos) const;
# 1654 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_first_of(const basic_string& __str, size_type __pos = 0) const
      { return this->find_first_of(__str.data(), __pos, __str.size()); }
# 1669 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_first_of(const _CharT* __s, size_type __pos, size_type __n) const;
# 1682 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_first_of(const _CharT* __s, size_type __pos = 0) const
      {
 ;
 return this->find_first_of(__s, __pos, traits_type::length(__s));
      }
# 1701 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_first_of(_CharT __c, size_type __pos = 0) const
      { return this->find(__c, __pos); }
# 1715 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_last_of(const basic_string& __str, size_type __pos = npos) const
      { return this->find_last_of(__str.data(), __pos, __str.size()); }
# 1730 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_last_of(const _CharT* __s, size_type __pos, size_type __n) const;
# 1743 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_last_of(const _CharT* __s, size_type __pos = npos) const
      {
 ;
 return this->find_last_of(__s, __pos, traits_type::length(__s));
      }
# 1762 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_last_of(_CharT __c, size_type __pos = npos) const
      { return this->rfind(__c, __pos); }
# 1776 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_first_not_of(const basic_string& __str, size_type __pos = 0) const
      { return this->find_first_not_of(__str.data(), __pos, __str.size()); }
# 1791 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_first_not_of(const _CharT* __s, size_type __pos,
   size_type __n) const;
# 1805 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_first_not_of(const _CharT* __s, size_type __pos = 0) const
      {
 ;
 return this->find_first_not_of(__s, __pos, traits_type::length(__s));
      }
# 1822 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_first_not_of(_CharT __c, size_type __pos = 0) const;
# 1835 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_last_not_of(const basic_string& __str, size_type __pos = npos) const
      { return this->find_last_not_of(__str.data(), __pos, __str.size()); }
# 1851 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_last_not_of(const _CharT* __s, size_type __pos,
         size_type __n) const;
# 1864 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_last_not_of(const _CharT* __s, size_type __pos = npos) const
      {
 ;
 return this->find_last_not_of(__s, __pos, traits_type::length(__s));
      }
# 1881 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      size_type
      find_last_not_of(_CharT __c, size_type __pos = npos) const;
# 1896 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      basic_string
      substr(size_type __pos = 0, size_type __n = npos) const
      { return basic_string(*this,
       _M_check(__pos, "basic_string::substr"), __n); }
# 1912 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      int
      compare(const basic_string& __str) const
      {
 const size_type __size = this->size();
 const size_type __osize = __str.size();
 const size_type __len = std::min(__size, __osize);

 int __r = traits_type::compare(_M_data(), __str.data(), __len);
 if (!__r)
   __r = __size - __osize;
 return __r;
      }
# 1940 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      int
      compare(size_type __pos, size_type __n, const basic_string& __str) const;
# 1962 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      int
      compare(size_type __pos1, size_type __n1, const basic_string& __str,
       size_type __pos2, size_type __n2) const;
# 1977 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      int
      compare(const _CharT* __s) const;
# 1997 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      int
      compare(size_type __pos, size_type __n1, const _CharT* __s) const;
# 2020 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
      int
      compare(size_type __pos, size_type __n1, const _CharT* __s,
       size_type __n2) const;
  };

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline basic_string<_CharT, _Traits, _Alloc>::
    basic_string()

    : _M_dataplus(_S_empty_rep()._M_refdata(), _Alloc()) { }
# 2041 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>
    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    {
      basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
      __str.append(__rhs);
      return __str;
    }







  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT,_Traits,_Alloc>
    operator+(const _CharT* __lhs,
       const basic_string<_CharT,_Traits,_Alloc>& __rhs);







  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT,_Traits,_Alloc>
    operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs);







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline basic_string<_CharT, _Traits, _Alloc>
    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      const _CharT* __rhs)
    {
      basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
      __str.append(__rhs);
      return __str;
    }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline basic_string<_CharT, _Traits, _Alloc>
    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs)
    {
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
      typedef typename __string_type::size_type __size_type;
      __string_type __str(__lhs);
      __str.append(__size_type(1), __rhs);
      return __str;
    }
# 2112 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) == 0; }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator==(const _CharT* __lhs,
        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) == 0; }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
        const _CharT* __rhs)
    { return __lhs.compare(__rhs) == 0; }
# 2149 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) != 0; }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator!=(const _CharT* __lhs,
        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) != 0; }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
        const _CharT* __rhs)
    { return __lhs.compare(__rhs) != 0; }
# 2186 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) < 0; }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
       const _CharT* __rhs)
    { return __lhs.compare(__rhs) < 0; }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator<(const _CharT* __lhs,
       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) > 0; }
# 2223 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) > 0; }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
       const _CharT* __rhs)
    { return __lhs.compare(__rhs) > 0; }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator>(const _CharT* __lhs,
       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) < 0; }
# 2260 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) <= 0; }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
        const _CharT* __rhs)
    { return __lhs.compare(__rhs) <= 0; }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator<=(const _CharT* __lhs,
        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) >= 0; }
# 2297 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) >= 0; }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
        const _CharT* __rhs)
    { return __lhs.compare(__rhs) >= 0; }







  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator>=(const _CharT* __lhs,
      const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) <= 0; }
# 2334 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    inline void
    swap(basic_string<_CharT, _Traits, _Alloc>& __lhs,
  basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { __lhs.swap(__rhs); }
# 2351 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __is,
        basic_string<_CharT, _Traits, _Alloc>& __str);
# 2365 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __os,
        const basic_string<_CharT, _Traits, _Alloc>& __str);
# 2383 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_istream<_CharT, _Traits>&
    getline(basic_istream<_CharT, _Traits>& __is,
     basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim);
# 2400 "/usr/include/c++/4.0.0/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    inline basic_istream<_CharT, _Traits>&
    getline(basic_istream<_CharT, _Traits>& __is,
     basic_string<_CharT, _Traits, _Alloc>& __str);

  template<>
    basic_istream<char>&
    getline(basic_istream<char>& __in, basic_string<char>& __str,
     char __delim);


  template<>
    basic_istream<wchar_t>&
    getline(basic_istream<wchar_t>& __in, basic_string<wchar_t>& __str,
     wchar_t __delim);

}
# 53 "/usr/include/c++/4.0.0/string" 2 3


# 1 "/usr/include/c++/4.0.0/algorithm" 1 3
# 63 "/usr/include/c++/4.0.0/algorithm" 3
       
# 64 "/usr/include/c++/4.0.0/algorithm" 3




# 1 "/usr/include/c++/4.0.0/bits/stl_algo.h" 1 3
# 64 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
# 1 "/usr/include/c++/4.0.0/bits/stl_heap.h" 1 3
# 65 "/usr/include/c++/4.0.0/bits/stl_heap.h" 3
namespace std
{



  template<typename _RandomAccessIterator, typename _Distance>
    bool
    __is_heap(_RandomAccessIterator __first, _Distance __n)
    {
      _Distance __parent = 0;
      for (_Distance __child = 1; __child < __n; ++__child)
 {
   if (__first[__parent] < __first[__child])
     return false;
   if ((__child & 1) == 0)
     ++__parent;
 }
      return true;
    }

  template<typename _RandomAccessIterator, typename _Distance,
           typename _StrictWeakOrdering>
    bool
    __is_heap(_RandomAccessIterator __first, _StrictWeakOrdering __comp,
       _Distance __n)
    {
      _Distance __parent = 0;
      for (_Distance __child = 1; __child < __n; ++__child)
 {
   if (__comp(__first[__parent], __first[__child]))
     return false;
   if ((__child & 1) == 0)
     ++__parent;
 }
      return true;
    }

  template<typename _RandomAccessIterator>
    bool
    __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    { return std::__is_heap(__first, std::distance(__first, __last)); }

  template<typename _RandomAccessIterator, typename _StrictWeakOrdering>
    bool
    __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
     _StrictWeakOrdering __comp)
    { return std::__is_heap(__first, __comp, std::distance(__first, __last)); }



  template<typename _RandomAccessIterator, typename _Distance, typename _Tp>
    void
    __push_heap(_RandomAccessIterator __first,
  _Distance __holeIndex, _Distance __topIndex, _Tp __value)
    {
      _Distance __parent = (__holeIndex - 1) / 2;
      while (__holeIndex > __topIndex && *(__first + __parent) < __value)
 {
   *(__first + __holeIndex) = *(__first + __parent);
   __holeIndex = __parent;
   __parent = (__holeIndex - 1) / 2;
 }
      *(__first + __holeIndex) = __value;
    }
# 139 "/usr/include/c++/4.0.0/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator>
    inline void
    push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
   _ValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
   _DistanceType;


     

     
      ;


      std::__push_heap(__first, _DistanceType((__last - __first) - 1),
         _DistanceType(0), _ValueType(*(__last - 1)));
    }

  template<typename _RandomAccessIterator, typename _Distance, typename _Tp,
     typename _Compare>
    void
    __push_heap(_RandomAccessIterator __first, _Distance __holeIndex,
  _Distance __topIndex, _Tp __value, _Compare __comp)
    {
      _Distance __parent = (__holeIndex - 1) / 2;
      while (__holeIndex > __topIndex
      && __comp(*(__first + __parent), __value))
 {
   *(__first + __holeIndex) = *(__first + __parent);
   __holeIndex = __parent;
   __parent = (__holeIndex - 1) / 2;
 }
      *(__first + __holeIndex) = __value;
    }
# 187 "/usr/include/c++/4.0.0/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
    inline void
    push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
       _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
   _ValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
   _DistanceType;


     

      ;
      ;

      std::__push_heap(__first, _DistanceType((__last - __first) - 1),
         _DistanceType(0), _ValueType(*(__last - 1)), __comp);
    }

  template<typename _RandomAccessIterator, typename _Distance, typename _Tp>
    void
    __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
    _Distance __len, _Tp __value)
    {
      const _Distance __topIndex = __holeIndex;
      _Distance __secondChild = 2 * __holeIndex + 2;
      while (__secondChild < __len)
 {
   if (*(__first + __secondChild) < *(__first + (__secondChild - 1)))
     __secondChild--;
   *(__first + __holeIndex) = *(__first + __secondChild);
   __holeIndex = __secondChild;
   __secondChild = 2 * (__secondChild + 1);
 }
      if (__secondChild == __len)
 {
   *(__first + __holeIndex) = *(__first + (__secondChild - 1));
   __holeIndex = __secondChild - 1;
 }
      std::__push_heap(__first, __holeIndex, __topIndex, __value);
    }

  template<typename _RandomAccessIterator, typename _Tp>
    inline void
    __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
        _RandomAccessIterator __result, _Tp __value)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _Distance;
      *__result = *__first;
      std::__adjust_heap(__first, _Distance(0), _Distance(__last - __first),
    __value);
    }
# 251 "/usr/include/c++/4.0.0/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator>
    inline void
    pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;


     

     
      ;
      ;

      std::__pop_heap(__first, __last - 1, __last - 1,
        _ValueType(*(__last - 1)));
    }

  template<typename _RandomAccessIterator, typename _Distance,
    typename _Tp, typename _Compare>
    void
    __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
    _Distance __len, _Tp __value, _Compare __comp)
    {
      const _Distance __topIndex = __holeIndex;
      _Distance __secondChild = 2 * __holeIndex + 2;
      while (__secondChild < __len)
 {
   if (__comp(*(__first + __secondChild),
       *(__first + (__secondChild - 1))))
     __secondChild--;
   *(__first + __holeIndex) = *(__first + __secondChild);
   __holeIndex = __secondChild;
   __secondChild = 2 * (__secondChild + 1);
 }
      if (__secondChild == __len)
 {
   *(__first + __holeIndex) = *(__first + (__secondChild - 1));
   __holeIndex = __secondChild - 1;
 }
      std::__push_heap(__first, __holeIndex, __topIndex, __value, __comp);
    }

  template<typename _RandomAccessIterator, typename _Tp, typename _Compare>
    inline void
    __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
        _RandomAccessIterator __result, _Tp __value, _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _Distance;
      *__result = *__first;
      std::__adjust_heap(__first, _Distance(0), _Distance(__last - __first),
    __value, __comp);
    }
# 317 "/usr/include/c++/4.0.0/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
    inline void
    pop_heap(_RandomAccessIterator __first,
      _RandomAccessIterator __last, _Compare __comp)
    {

     

      ;
      ;

      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;
      std::__pop_heap(__first, __last - 1, __last - 1,
        _ValueType(*(__last - 1)), __comp);
    }
# 342 "/usr/include/c++/4.0.0/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator>
    void
    make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
   _ValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
   _DistanceType;


     

     
      ;

      if (__last - __first < 2)
 return;

      const _DistanceType __len = __last - __first;
      _DistanceType __parent = (__len - 2) / 2;
      while (true)
 {
   std::__adjust_heap(__first, __parent, __len,
        _ValueType(*(__first + __parent)));
   if (__parent == 0)
     return;
   __parent--;
 }
    }
# 382 "/usr/include/c++/4.0.0/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
    inline void
    make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
       _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
   _ValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
   _DistanceType;


     

      ;

      if (__last - __first < 2)
 return;

      const _DistanceType __len = __last - __first;
      _DistanceType __parent = (__len - 2) / 2;
      while (true)
 {
   std::__adjust_heap(__first, __parent, __len,
        _ValueType(*(__first + __parent)), __comp);
   if (__parent == 0)
     return;
   __parent--;
 }
    }
# 420 "/usr/include/c++/4.0.0/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator>
    void
    sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {

     

     

      ;


      while (__last - __first > 1)
 std::pop_heap(__first, __last--);
    }
# 446 "/usr/include/c++/4.0.0/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
    void
    sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
       _Compare __comp)
    {

     

      ;
      ;

      while (__last - __first > 1)
 std::pop_heap(__first, __last--, __comp);
    }

}
# 65 "/usr/include/c++/4.0.0/bits/stl_algo.h" 2 3
# 1 "/usr/include/c++/4.0.0/bits/stl_tempbuf.h" 1 3
# 66 "/usr/include/c++/4.0.0/bits/stl_tempbuf.h" 3
namespace std
{







  template<typename _ForwardIterator, typename _Tp>
    class _Temporary_buffer
    {

     

 public:
      typedef _Tp value_type;
      typedef value_type* pointer;
      typedef pointer iterator;
      typedef ptrdiff_t size_type;

    protected:
      size_type _M_original_len;
      size_type _M_len;
      pointer _M_buffer;

      void
      _M_initialize_buffer(const _Tp&, __true_type) { }

      void
      _M_initialize_buffer(const _Tp& val, __false_type)
      { std::uninitialized_fill_n(_M_buffer, _M_len, val); }

    public:

      size_type
      size() const
      { return _M_len; }


      size_type
      requested_size() const
      { return _M_original_len; }


      iterator
      begin()
      { return _M_buffer; }


      iterator
      end()
      { return _M_buffer + _M_len; }





      _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last);

      ~_Temporary_buffer()
      {
 std::_Destroy(_M_buffer, _M_buffer + _M_len);
 std::return_temporary_buffer(_M_buffer);
      }

    private:

      _Temporary_buffer(const _Temporary_buffer&);

      void
      operator=(const _Temporary_buffer&);
    };


  template<typename _ForwardIterator, typename _Tp>
    _Temporary_buffer<_ForwardIterator, _Tp>::
    _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
    : _M_original_len(std::distance(__first, __last)),
      _M_len(0), _M_buffer(0)
    {

      typedef typename std::__is_scalar<_Tp>::__type _Trivial;

      try
 {
   pair<pointer, size_type> __p(get_temporary_buffer<
           value_type>(_M_original_len));
   _M_buffer = __p.first;
   _M_len = __p.second;
   if (_M_len > 0)
     _M_initialize_buffer(*__first, _Trivial());
 }
      catch(...)
 {
   std::return_temporary_buffer(_M_buffer);
   _M_buffer = 0;
   _M_len = 0;
   throw;
 }
    }
}
# 66 "/usr/include/c++/4.0.0/bits/stl_algo.h" 2 3




namespace std
{
# 84 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _Tp>
    inline const _Tp&
    __median(const _Tp& __a, const _Tp& __b, const _Tp& __c)
    {

     
      if (__a < __b)
 if (__b < __c)
   return __b;
 else if (__a < __c)
   return __c;
 else
   return __a;
      else if (__a < __c)
 return __a;
      else if (__b < __c)
 return __c;
      else
 return __b;
    }
# 118 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _Tp, typename _Compare>
    inline const _Tp&
    __median(const _Tp& __a, const _Tp& __b, const _Tp& __c, _Compare __comp)
    {

     
      if (__comp(__a, __b))
 if (__comp(__b, __c))
   return __b;
 else if (__comp(__a, __c))
   return __c;
 else
   return __a;
      else if (__comp(__a, __c))
 return __a;
      else if (__comp(__b, __c))
 return __c;
      else
 return __b;
    }
# 150 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Function>
    _Function
    for_each(_InputIterator __first, _InputIterator __last, _Function __f)
    {

     
      ;
      for ( ; __first != __last; ++__first)
 __f(*__first);
      return __f;
    }






  template<typename _InputIterator, typename _Tp>
    inline _InputIterator
    find(_InputIterator __first, _InputIterator __last,
  const _Tp& __val, input_iterator_tag)
    {
      while (__first != __last && !(*__first == __val))
 ++__first;
      return __first;
    }






  template<typename _InputIterator, typename _Predicate>
    inline _InputIterator
    find_if(_InputIterator __first, _InputIterator __last,
     _Predicate __pred, input_iterator_tag)
    {
      while (__first != __last && !__pred(*__first))
 ++__first;
      return __first;
    }






  template<typename _RandomAccessIterator, typename _Tp>
    _RandomAccessIterator
    find(_RandomAccessIterator __first, _RandomAccessIterator __last,
  const _Tp& __val, random_access_iterator_tag)
    {
      typename iterator_traits<_RandomAccessIterator>::difference_type
 __trip_count = (__last - __first) >> 2;

      for ( ; __trip_count > 0 ; --__trip_count)
 {
   if (*__first == __val)
     return __first;
   ++__first;

   if (*__first == __val)
     return __first;
   ++__first;

   if (*__first == __val)
     return __first;
   ++__first;

   if (*__first == __val)
     return __first;
   ++__first;
 }

      switch (__last - __first)
 {
 case 3:
   if (*__first == __val)
     return __first;
   ++__first;
 case 2:
   if (*__first == __val)
     return __first;
   ++__first;
 case 1:
   if (*__first == __val)
     return __first;
   ++__first;
 case 0:
 default:
   return __last;
 }
    }






  template<typename _RandomAccessIterator, typename _Predicate>
    _RandomAccessIterator
    find_if(_RandomAccessIterator __first, _RandomAccessIterator __last,
     _Predicate __pred, random_access_iterator_tag)
    {
      typename iterator_traits<_RandomAccessIterator>::difference_type
 __trip_count = (__last - __first) >> 2;

      for ( ; __trip_count > 0 ; --__trip_count)
 {
   if (__pred(*__first))
     return __first;
   ++__first;

   if (__pred(*__first))
     return __first;
   ++__first;

   if (__pred(*__first))
     return __first;
   ++__first;

   if (__pred(*__first))
     return __first;
   ++__first;
 }

      switch (__last - __first)
 {
 case 3:
   if (__pred(*__first))
     return __first;
   ++__first;
 case 2:
   if (__pred(*__first))
     return __first;
   ++__first;
 case 1:
   if (__pred(*__first))
     return __first;
   ++__first;
 case 0:
 default:
   return __last;
 }
    }
# 304 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Tp>
    inline _InputIterator
    find(_InputIterator __first, _InputIterator __last,
  const _Tp& __val)
    {

     
     

      ;
      return std::find(__first, __last, __val,
         std::__iterator_category(__first));
    }
# 326 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Predicate>
    inline _InputIterator
    find_if(_InputIterator __first, _InputIterator __last,
     _Predicate __pred)
    {

     
     

      ;
      return std::find_if(__first, __last, __pred,
     std::__iterator_category(__first));
    }
# 348 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator>
    _ForwardIterator
    adjacent_find(_ForwardIterator __first, _ForwardIterator __last)
    {

     
     

      ;
      if (__first == __last)
 return __last;
      _ForwardIterator __next = __first;
      while(++__next != __last)
 {
   if (*__first == *__next)
     return __first;
   __first = __next;
 }
      return __last;
    }
# 379 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _BinaryPredicate>
    _ForwardIterator
    adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
    _BinaryPredicate __binary_pred)
    {

     
     


      ;
      if (__first == __last)
 return __last;
      _ForwardIterator __next = __first;
      while(++__next != __last)
 {
   if (__binary_pred(*__first, *__next))
     return __first;
   __first = __next;
 }
      return __last;
    }
# 410 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Tp>
    typename iterator_traits<_InputIterator>::difference_type
    count(_InputIterator __first, _InputIterator __last, const _Tp& __value)
    {

     
     

     
      ;
      typename iterator_traits<_InputIterator>::difference_type __n = 0;
      for ( ; __first != __last; ++__first)
 if (*__first == __value)
   ++__n;
      return __n;
    }
# 435 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Predicate>
    typename iterator_traits<_InputIterator>::difference_type
    count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
    {

     
     

      ;
      typename iterator_traits<_InputIterator>::difference_type __n = 0;
      for ( ; __first != __last; ++__first)
 if (__pred(*__first))
   ++__n;
      return __n;
    }
# 474 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2>
    _ForwardIterator1
    search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
    _ForwardIterator2 __first2, _ForwardIterator2 __last2)
    {

     
     
     


      ;
      ;

      if (__first1 == __last1 || __first2 == __last2)
 return __first1;


      _ForwardIterator2 __tmp(__first2);
      ++__tmp;
      if (__tmp == __last2)
 return std::find(__first1, __last1, *__first2);


      _ForwardIterator2 __p1, __p;
      __p1 = __first2; ++__p1;
      _ForwardIterator1 __current = __first1;

      while (__first1 != __last1)
 {
   __first1 = std::find(__first1, __last1, *__first2);
   if (__first1 == __last1)
     return __last1;

   __p = __p1;
   __current = __first1;
   if (++__current == __last1)
     return __last1;

   while (*__current == *__p)
     {
       if (++__p == __last2)
  return __first1;
       if (++__current == __last1)
  return __last1;
     }
   ++__first1;
 }
      return __first1;
    }
# 545 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2,
    typename _BinaryPredicate>
    _ForwardIterator1
    search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
    _ForwardIterator2 __first2, _ForwardIterator2 __last2,
    _BinaryPredicate __predicate)
    {

     
     
     


      ;
      ;


      if (__first1 == __last1 || __first2 == __last2)
 return __first1;


      _ForwardIterator2 __tmp(__first2);
      ++__tmp;
      if (__tmp == __last2)
 {
   while (__first1 != __last1 && !__predicate(*__first1, *__first2))
     ++__first1;
   return __first1;
 }


      _ForwardIterator2 __p1, __p;
      __p1 = __first2; ++__p1;
      _ForwardIterator1 __current = __first1;

      while (__first1 != __last1)
 {
   while (__first1 != __last1)
     {
       if (__predicate(*__first1, *__first2))
  break;
       ++__first1;
     }
   while (__first1 != __last1 && !__predicate(*__first1, *__first2))
     ++__first1;
   if (__first1 == __last1)
     return __last1;

   __p = __p1;
   __current = __first1;
   if (++__current == __last1)
     return __last1;

   while (__predicate(*__current, *__p))
     {
       if (++__p == __last2)
  return __first1;
       if (++__current == __last1)
  return __last1;
     }
   ++__first1;
 }
      return __first1;
    }
# 623 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Integer, typename _Tp>
    _ForwardIterator
    search_n(_ForwardIterator __first, _ForwardIterator __last,
      _Integer __count, const _Tp& __val)
    {

     
     

     
      ;

      if (__count <= 0)
 return __first;
      else
 {
   __first = std::find(__first, __last, __val);
   while (__first != __last)
     {
       typename iterator_traits<_ForwardIterator>::difference_type
  __n = __count;
       _ForwardIterator __i = __first;
       ++__i;
       while (__i != __last && __n != 1 && *__i == __val)
  {
    ++__i;
    --__n;
  }
       if (__n == 1)
  return __first;
       else
  __first = std::find(__i, __last, __val);
     }
   return __last;
 }
    }
# 675 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Integer, typename _Tp,
           typename _BinaryPredicate>
    _ForwardIterator
    search_n(_ForwardIterator __first, _ForwardIterator __last,
      _Integer __count, const _Tp& __val,
      _BinaryPredicate __binary_pred)
    {

     
     

      ;

      if (__count <= 0)
 return __first;
      else
 {
   while (__first != __last)
     {
       if (__binary_pred(*__first, __val))
  break;
       ++__first;
     }
   while (__first != __last)
     {
       typename iterator_traits<_ForwardIterator>::difference_type
  __n = __count;
       _ForwardIterator __i = __first;
       ++__i;
       while (__i != __last && __n != 1 && __binary_pred(*__i, __val))
  {
    ++__i;
    --__n;
  }
       if (__n == 1)
  return __first;
       else
  {
    while (__i != __last)
      {
        if (__binary_pred(*__i, __val))
   break;
        ++__i;
      }
    __first = __i;
  }
     }
   return __last;
 }
    }
# 737 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2>
    _ForwardIterator2
    swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
  _ForwardIterator2 __first2)
    {

     

     

     


     


      ;

      for ( ; __first1 != __last1; ++__first1, ++__first2)
 std::iter_swap(__first1, __first2);
      return __first2;
    }
# 775 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator,
    typename _UnaryOperation>
    _OutputIterator
    transform(_InputIterator __first, _InputIterator __last,
       _OutputIterator __result, _UnaryOperation __unary_op)
    {

     
     


      ;

      for ( ; __first != __last; ++__first, ++__result)
 *__result = __unary_op(*__first);
      return __result;
    }
# 810 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _BinaryOperation>
    _OutputIterator
    transform(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _OutputIterator __result,
       _BinaryOperation __binary_op)
    {

     
     
     


      ;

      for ( ; __first1 != __last1; ++__first1, ++__first2, ++__result)
 *__result = __binary_op(*__first1, *__first2);
      return __result;
    }
# 842 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp>
    void
    replace(_ForwardIterator __first, _ForwardIterator __last,
     const _Tp& __old_value, const _Tp& __new_value)
    {

     

     

     

      ;

      for ( ; __first != __last; ++__first)
 if (*__first == __old_value)
   *__first = __new_value;
    }
# 873 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Predicate, typename _Tp>
    void
    replace_if(_ForwardIterator __first, _ForwardIterator __last,
        _Predicate __pred, const _Tp& __new_value)
    {

     

     

     

      ;

      for ( ; __first != __last; ++__first)
 if (__pred(*__first))
   *__first = __new_value;
    }
# 906 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator, typename _Tp>
    _OutputIterator
    replace_copy(_InputIterator __first, _InputIterator __last,
   _OutputIterator __result,
   const _Tp& __old_value, const _Tp& __new_value)
    {

     
     

     

      ;

      for ( ; __first != __last; ++__first, ++__result)
 *__result = *__first == __old_value ? __new_value : *__first;
      return __result;
    }
# 939 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator,
    typename _Predicate, typename _Tp>
    _OutputIterator
    replace_copy_if(_InputIterator __first, _InputIterator __last,
      _OutputIterator __result,
      _Predicate __pred, const _Tp& __new_value)
    {

     
     

     

      ;

      for ( ; __first != __last; ++__first, ++__result)
 *__result = __pred(*__first) ? __new_value : *__first;
      return __result;
    }
# 970 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Generator>
    void
    generate(_ForwardIterator __first, _ForwardIterator __last,
      _Generator __gen)
    {

     
     

      ;

      for ( ; __first != __last; ++__first)
 *__first = __gen();
    }
# 996 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _OutputIterator, typename _Size, typename _Generator>
    _OutputIterator
    generate_n(_OutputIterator __first, _Size __n, _Generator __gen)
    {

     



      for ( ; __n > 0; --__n, ++__first)
 *__first = __gen();
      return __first;
    }
# 1023 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator, typename _Tp>
    _OutputIterator
    remove_copy(_InputIterator __first, _InputIterator __last,
  _OutputIterator __result, const _Tp& __value)
    {

     
     

     

      ;

      for ( ; __first != __last; ++__first)
 if (!(*__first == __value))
   {
     *__result = *__first;
     ++__result;
   }
      return __result;
    }
# 1059 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator,
    typename _Predicate>
    _OutputIterator
    remove_copy_if(_InputIterator __first, _InputIterator __last,
     _OutputIterator __result, _Predicate __pred)
    {

     
     

     

      ;

      for ( ; __first != __last; ++__first)
 if (!__pred(*__first))
   {
     *__result = *__first;
     ++__result;
   }
      return __result;
    }
# 1098 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp>
    _ForwardIterator
    remove(_ForwardIterator __first, _ForwardIterator __last,
    const _Tp& __value)
    {

     

     

      ;

      __first = std::find(__first, __last, __value);
      _ForwardIterator __i = __first;
      return __first == __last ? __first
          : std::remove_copy(++__i, __last,
        __first, __value);
    }
# 1133 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Predicate>
    _ForwardIterator
    remove_if(_ForwardIterator __first, _ForwardIterator __last,
       _Predicate __pred)
    {

     

     

      ;

      __first = std::find_if(__first, __last, __pred);
      _ForwardIterator __i = __first;
      return __first == __last ? __first
          : std::remove_copy_if(++__i, __last,
           __first, __pred);
    }
# 1159 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator>
    _OutputIterator
    __unique_copy(_InputIterator __first, _InputIterator __last,
    _OutputIterator __result,
    output_iterator_tag)
    {

      typename iterator_traits<_InputIterator>::value_type __value = *__first;
      *__result = __value;
      while (++__first != __last)
 if (!(__value == *__first))
   {
     __value = *__first;
     *++__result = __value;
   }
      return ++__result;
    }
# 1184 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _ForwardIterator>
    _ForwardIterator
    __unique_copy(_InputIterator __first, _InputIterator __last,
    _ForwardIterator __result,
    forward_iterator_tag)
    {

      *__result = *__first;
      while (++__first != __last)
 if (!(*__result == *__first))
   *++__result = *__first;
      return ++__result;
    }
# 1206 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator,
    typename _BinaryPredicate>
    _OutputIterator
    __unique_copy(_InputIterator __first, _InputIterator __last,
    _OutputIterator __result,
    _BinaryPredicate __binary_pred,
    output_iterator_tag)
    {

     



      typename iterator_traits<_InputIterator>::value_type __value = *__first;
      *__result = __value;
      while (++__first != __last)
 if (!__binary_pred(__value, *__first))
   {
     __value = *__first;
     *++__result = __value;
   }
      return ++__result;
    }
# 1238 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _ForwardIterator,
    typename _BinaryPredicate>
    _ForwardIterator
    __unique_copy(_InputIterator __first, _InputIterator __last,
    _ForwardIterator __result,
    _BinaryPredicate __binary_pred,
    forward_iterator_tag)
    {

     



      *__result = *__first;
      while (++__first != __last)
 if (!__binary_pred(*__result, *__first)) *++__result = *__first;
      return ++__result;
    }
# 1270 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator>
    inline _OutputIterator
    unique_copy(_InputIterator __first, _InputIterator __last,
  _OutputIterator __result)
    {

     
     

     

      ;

      typedef typename iterator_traits<_OutputIterator>::iterator_category
 _IterType;

      if (__first == __last) return __result;
      return std::__unique_copy(__first, __last, __result, _IterType());
    }
# 1305 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator,
    typename _BinaryPredicate>
    inline _OutputIterator
    unique_copy(_InputIterator __first, _InputIterator __last,
  _OutputIterator __result,
  _BinaryPredicate __binary_pred)
    {

     
     

      ;

      typedef typename iterator_traits<_OutputIterator>::iterator_category
 _IterType;

      if (__first == __last) return __result;
      return std::__unique_copy(__first, __last, __result,
    __binary_pred, _IterType());
    }
# 1339 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator>
    _ForwardIterator
    unique(_ForwardIterator __first, _ForwardIterator __last)
    {

     

     

      ;


      __first = std::adjacent_find(__first, __last);
      if (__first == __last)
 return __last;


      _ForwardIterator __dest = __first;
      ++__first;
      while (++__first != __last)
 if (!(*__dest == *__first))
   *++__dest = *__first;
      return ++__dest;
    }
# 1378 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _BinaryPredicate>
    _ForwardIterator
    unique(_ForwardIterator __first, _ForwardIterator __last,
           _BinaryPredicate __binary_pred)
    {

     

     


      ;


      __first = std::adjacent_find(__first, __last, __binary_pred);
      if (__first == __last)
 return __last;


      _ForwardIterator __dest = __first;
      ++__first;
      while (++__first != __last)
 if (!__binary_pred(*__dest, *__first))
   *++__dest = *__first;
      return ++__dest;
    }
# 1412 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator>
    void
    __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last,
       bidirectional_iterator_tag)
    {
      while (true)
 if (__first == __last || __first == --__last)
   return;
 else
   {
     std::iter_swap(__first, __last);
     ++__first;
   }
    }
# 1434 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator>
    void
    __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last,
       random_access_iterator_tag)
    {
      if (__first == __last)
 return;
      --__last;
      while (__first < __last)
 {
   std::iter_swap(__first, __last);
   ++__first;
   --__last;
 }
    }
# 1461 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator>
    inline void
    reverse(_BidirectionalIterator __first, _BidirectionalIterator __last)
    {

     

      ;
      std::__reverse(__first, __last, std::__iterator_category(__first));
    }
# 1487 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator, typename _OutputIterator>
    _OutputIterator
    reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last,
        _OutputIterator __result)
    {

     

     

      ;

      while (__first != __last)
 {
   --__last;
   *__result = *__last;
   ++__result;
 }
      return __result;
    }
# 1515 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _EuclideanRingElement>
    _EuclideanRingElement
    __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n)
    {
      while (__n != 0)
 {
   _EuclideanRingElement __t = __m % __n;
   __m = __n;
   __n = __t;
 }
      return __m;
    }






  template<typename _ForwardIterator>
    void
    __rotate(_ForwardIterator __first,
      _ForwardIterator __middle,
      _ForwardIterator __last,
      forward_iterator_tag)
    {
      if (__first == __middle || __last == __middle)
 return;

      _ForwardIterator __first2 = __middle;
      do
 {
   swap(*__first, *__first2);
   ++__first;
   ++__first2;
   if (__first == __middle)
     __middle = __first2;
 }
      while (__first2 != __last);

      __first2 = __middle;

      while (__first2 != __last)
 {
   swap(*__first, *__first2);
   ++__first;
   ++__first2;
   if (__first == __middle)
     __middle = __first2;
   else if (__first2 == __last)
     __first2 = __middle;
 }
    }






  template<typename _BidirectionalIterator>
    void
    __rotate(_BidirectionalIterator __first,
      _BidirectionalIterator __middle,
      _BidirectionalIterator __last,
       bidirectional_iterator_tag)
    {

     


      if (__first == __middle || __last == __middle)
 return;

      std::__reverse(__first, __middle, bidirectional_iterator_tag());
      std::__reverse(__middle, __last, bidirectional_iterator_tag());

      while (__first != __middle && __middle != __last)
 {
   swap(*__first, *--__last);
   ++__first;
 }

      if (__first == __middle)
 std::__reverse(__middle, __last, bidirectional_iterator_tag());
      else
 std::__reverse(__first, __middle, bidirectional_iterator_tag());
    }






  template<typename _RandomAccessIterator>
    void
    __rotate(_RandomAccessIterator __first,
      _RandomAccessIterator __middle,
      _RandomAccessIterator __last,
      random_access_iterator_tag)
    {

     


      if (__first == __middle || __last == __middle)
 return;

      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _Distance;
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;

      const _Distance __n = __last - __first;
      const _Distance __k = __middle - __first;
      const _Distance __l = __n - __k;

      if (__k == __l)
 {
   std::swap_ranges(__first, __middle, __middle);
   return;
 }

      const _Distance __d = __gcd(__n, __k);

      for (_Distance __i = 0; __i < __d; __i++)
 {
   const _ValueType __tmp = *__first;
   _RandomAccessIterator __p = __first;

   if (__k < __l)
     {
       for (_Distance __j = 0; __j < __l / __d; __j++)
  {
    if (__p > __first + __l)
      {
        *__p = *(__p - __l);
        __p -= __l;
      }

    *__p = *(__p + __k);
    __p += __k;
  }
     }
   else
     {
       for (_Distance __j = 0; __j < __k / __d - 1; __j ++)
  {
    if (__p < __last - __k)
      {
        *__p = *(__p + __k);
        __p += __k;
      }
    *__p = * (__p - __l);
    __p -= __l;
  }
     }

   *__p = __tmp;
   ++__first;
 }
    }
# 1694 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator>
    inline void
    rotate(_ForwardIterator __first, _ForwardIterator __middle,
    _ForwardIterator __last)
    {

     

      ;
      ;

      typedef typename iterator_traits<_ForwardIterator>::iterator_category
 _IterType;
      std::__rotate(__first, __middle, __last, _IterType());
    }
# 1727 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _OutputIterator>
    _OutputIterator
    rotate_copy(_ForwardIterator __first, _ForwardIterator __middle,
                _ForwardIterator __last, _OutputIterator __result)
    {

     
     

      ;
      ;

      return std::copy(__first, __middle, copy(__middle, __last, __result));
    }
# 1752 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator>
    inline void
    random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {

     

      ;

      if (__first != __last)
 for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
   std::iter_swap(__i, __first + (std::rand() % ((__i - __first) + 1)));
    }
# 1779 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator, typename _RandomNumberGenerator>
    void
    random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
     _RandomNumberGenerator& __rand)
    {

     

      ;

      if (__first == __last)
 return;
      for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
 std::iter_swap(__i, __first + __rand((__i - __first) + 1));
    }







  template<typename _ForwardIterator, typename _Predicate>
    _ForwardIterator
    __partition(_ForwardIterator __first, _ForwardIterator __last,
  _Predicate __pred,
  forward_iterator_tag)
    {
      if (__first == __last)
 return __first;

      while (__pred(*__first))
 if (++__first == __last)
   return __first;

      _ForwardIterator __next = __first;

      while (++__next != __last)
 if (__pred(*__next))
   {
     swap(*__first, *__next);
     ++__first;
   }

      return __first;
    }






  template<typename _BidirectionalIterator, typename _Predicate>
    _BidirectionalIterator
    __partition(_BidirectionalIterator __first, _BidirectionalIterator __last,
  _Predicate __pred,
  bidirectional_iterator_tag)
    {
      while (true)
 {
   while (true)
     if (__first == __last)
       return __first;
     else if (__pred(*__first))
       ++__first;
     else
       break;
   --__last;
   while (true)
     if (__first == __last)
       return __first;
     else if (!__pred(*__last))
       --__last;
     else
       break;
   std::iter_swap(__first, __last);
   ++__first;
 }
    }
# 1873 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Predicate>
    inline _ForwardIterator
    partition(_ForwardIterator __first, _ForwardIterator __last,
       _Predicate __pred)
    {

     

     

      ;

      return std::__partition(__first, __last, __pred,
         std::__iterator_category(__first));
    }







  template<typename _ForwardIterator, typename _Predicate, typename _Distance>
    _ForwardIterator
    __inplace_stable_partition(_ForwardIterator __first,
          _ForwardIterator __last,
          _Predicate __pred, _Distance __len)
    {
      if (__len == 1)
 return __pred(*__first) ? __last : __first;
      _ForwardIterator __middle = __first;
      std::advance(__middle, __len / 2);
      _ForwardIterator __begin = std::__inplace_stable_partition(__first,
         __middle,
         __pred,
         __len / 2);
      _ForwardIterator __end = std::__inplace_stable_partition(__middle, __last,
              __pred,
              __len
              - __len / 2);
      std::rotate(__begin, __middle, __end);
      std::advance(__begin, std::distance(__middle, __end));
      return __begin;
    }






  template<typename _ForwardIterator, typename _Pointer, typename _Predicate,
    typename _Distance>
    _ForwardIterator
    __stable_partition_adaptive(_ForwardIterator __first,
    _ForwardIterator __last,
    _Predicate __pred, _Distance __len,
    _Pointer __buffer,
    _Distance __buffer_size)
    {
      if (__len <= __buffer_size)
 {
   _ForwardIterator __result1 = __first;
   _Pointer __result2 = __buffer;
   for ( ; __first != __last ; ++__first)
     if (__pred(*__first))
       {
  *__result1 = *__first;
  ++__result1;
       }
     else
       {
  *__result2 = *__first;
  ++__result2;
       }
   std::copy(__buffer, __result2, __result1);
   return __result1;
 }
      else
 {
   _ForwardIterator __middle = __first;
   std::advance(__middle, __len / 2);
   _ForwardIterator __begin =
     std::__stable_partition_adaptive(__first, __middle, __pred,
          __len / 2, __buffer,
          __buffer_size);
   _ForwardIterator __end =
     std::__stable_partition_adaptive(__middle, __last, __pred,
          __len - __len / 2,
          __buffer, __buffer_size);
   std::rotate(__begin, __middle, __end);
   std::advance(__begin, std::distance(__middle, __end));
   return __begin;
 }
    }
# 1984 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Predicate>
    _ForwardIterator
    stable_partition(_ForwardIterator __first, _ForwardIterator __last,
       _Predicate __pred)
    {

     

     

      ;

      if (__first == __last)
 return __first;
      else
 {
   typedef typename iterator_traits<_ForwardIterator>::value_type
     _ValueType;
   typedef typename iterator_traits<_ForwardIterator>::difference_type
     _DistanceType;

   _Temporary_buffer<_ForwardIterator, _ValueType> __buf(__first,
        __last);
 if (__buf.size() > 0)
   return
     std::__stable_partition_adaptive(__first, __last, __pred,
       _DistanceType(__buf.requested_size()),
       __buf.begin(), __buf.size());
 else
   return
     std::__inplace_stable_partition(__first, __last, __pred,
      _DistanceType(__buf.requested_size()));
 }
    }






  template<typename _RandomAccessIterator, typename _Tp>
    _RandomAccessIterator
    __unguarded_partition(_RandomAccessIterator __first,
     _RandomAccessIterator __last, _Tp __pivot)
    {
      while (true)
 {
   while (*__first < __pivot)
     ++__first;
   --__last;
   while (__pivot < *__last)
     --__last;
   if (!(__first < __last))
     return __first;
   std::iter_swap(__first, __last);
   ++__first;
 }
    }






  template<typename _RandomAccessIterator, typename _Tp, typename _Compare>
    _RandomAccessIterator
    __unguarded_partition(_RandomAccessIterator __first,
     _RandomAccessIterator __last,
     _Tp __pivot, _Compare __comp)
    {
      while (true)
 {
   while (__comp(*__first, __pivot))
     ++__first;
   --__last;
   while (__comp(__pivot, *__last))
     --__last;
   if (!(__first < __last))
     return __first;
   std::iter_swap(__first, __last);
   ++__first;
 }
    }







  enum { _S_threshold = 16 };






  template<typename _RandomAccessIterator, typename _Tp>
    void
    __unguarded_linear_insert(_RandomAccessIterator __last, _Tp __val)
    {
      _RandomAccessIterator __next = __last;
      --__next;
      while (__val < *__next)
 {
   *__last = *__next;
   __last = __next;
   --__next;
 }
      *__last = __val;
    }






  template<typename _RandomAccessIterator, typename _Tp, typename _Compare>
    void
    __unguarded_linear_insert(_RandomAccessIterator __last, _Tp __val,
         _Compare __comp)
    {
      _RandomAccessIterator __next = __last;
      --__next;
      while (__comp(__val, *__next))
 {
   *__last = *__next;
   __last = __next;
   --__next;
 }
      *__last = __val;
    }






  template<typename _RandomAccessIterator>
    void
    __insertion_sort(_RandomAccessIterator __first,
       _RandomAccessIterator __last)
    {
      if (__first == __last)
 return;

      for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
 {
   typename iterator_traits<_RandomAccessIterator>::value_type
     __val = *__i;
   if (__val < *__first)
     {
       std::copy_backward(__first, __i, __i + 1);
       *__first = __val;
     }
   else
     std::__unguarded_linear_insert(__i, __val);
 }
    }






  template<typename _RandomAccessIterator, typename _Compare>
    void
    __insertion_sort(_RandomAccessIterator __first,
       _RandomAccessIterator __last, _Compare __comp)
    {
      if (__first == __last) return;

      for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
 {
   typename iterator_traits<_RandomAccessIterator>::value_type
     __val = *__i;
   if (__comp(__val, *__first))
     {
       std::copy_backward(__first, __i, __i + 1);
       *__first = __val;
     }
   else
     std::__unguarded_linear_insert(__i, __val, __comp);
 }
    }






  template<typename _RandomAccessIterator>
    inline void
    __unguarded_insertion_sort(_RandomAccessIterator __first,
          _RandomAccessIterator __last)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;

      for (_RandomAccessIterator __i = __first; __i != __last; ++__i)
 std::__unguarded_linear_insert(__i, _ValueType(*__i));
    }






  template<typename _RandomAccessIterator, typename _Compare>
    inline void
    __unguarded_insertion_sort(_RandomAccessIterator __first,
          _RandomAccessIterator __last, _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;

      for (_RandomAccessIterator __i = __first; __i != __last; ++__i)
 std::__unguarded_linear_insert(__i, _ValueType(*__i), __comp);
    }






  template<typename _RandomAccessIterator>
    void
    __final_insertion_sort(_RandomAccessIterator __first,
      _RandomAccessIterator __last)
    {
      if (__last - __first > _S_threshold)
 {
   std::__insertion_sort(__first, __first + _S_threshold);
   std::__unguarded_insertion_sort(__first + _S_threshold, __last);
 }
      else
 std::__insertion_sort(__first, __last);
    }






  template<typename _RandomAccessIterator, typename _Compare>
    void
    __final_insertion_sort(_RandomAccessIterator __first,
      _RandomAccessIterator __last, _Compare __comp)
    {
      if (__last - __first > _S_threshold)
 {
   std::__insertion_sort(__first, __first + _S_threshold, __comp);
   std::__unguarded_insertion_sort(__first + _S_threshold, __last,
       __comp);
 }
      else
 std::__insertion_sort(__first, __last, __comp);
    }






  template<typename _Size>
    inline _Size
    __lg(_Size __n)
    {
      _Size __k;
      for (__k = 0; __n != 1; __n >>= 1)
 ++__k;
      return __k;
    }
# 2273 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator>
    void
    partial_sort(_RandomAccessIterator __first,
   _RandomAccessIterator __middle,
   _RandomAccessIterator __last)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;


     

     
      ;
      ;

      std::make_heap(__first, __middle);
      for (_RandomAccessIterator __i = __middle; __i < __last; ++__i)
 if (*__i < *__first)
   std::__pop_heap(__first, __middle, __i, _ValueType(*__i));
      std::sort_heap(__first, __middle);
    }
# 2314 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
    void
    partial_sort(_RandomAccessIterator __first,
   _RandomAccessIterator __middle,
   _RandomAccessIterator __last,
   _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;


     

     

      ;
      ;

      std::make_heap(__first, __middle, __comp);
      for (_RandomAccessIterator __i = __middle; __i < __last; ++__i)
 if (__comp(*__i, *__first))
   std::__pop_heap(__first, __middle, __i, _ValueType(*__i), __comp);
      std::sort_heap(__first, __middle, __comp);
    }
# 2356 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _RandomAccessIterator>
    _RandomAccessIterator
    partial_sort_copy(_InputIterator __first, _InputIterator __last,
        _RandomAccessIterator __result_first,
        _RandomAccessIterator __result_last)
    {
      typedef typename iterator_traits<_InputIterator>::value_type
 _InputValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _OutputValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _DistanceType;


     
     

     
     
      ;
      ;

      if (__result_first == __result_last)
 return __result_last;
      _RandomAccessIterator __result_real_last = __result_first;
      while(__first != __last && __result_real_last != __result_last)
 {
   *__result_real_last = *__first;
   ++__result_real_last;
   ++__first;
 }
      std::make_heap(__result_first, __result_real_last);
      while (__first != __last)
 {
   if (*__first < *__result_first)
     std::__adjust_heap(__result_first, _DistanceType(0),
          _DistanceType(__result_real_last
          - __result_first),
          _InputValueType(*__first));
   ++__first;
 }
      std::sort_heap(__result_first, __result_real_last);
      return __result_real_last;
    }
# 2420 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _RandomAccessIterator, typename _Compare>
    _RandomAccessIterator
    partial_sort_copy(_InputIterator __first, _InputIterator __last,
        _RandomAccessIterator __result_first,
        _RandomAccessIterator __result_last,
        _Compare __comp)
    {
      typedef typename iterator_traits<_InputIterator>::value_type
 _InputValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _OutputValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _DistanceType;


     
     

     

     

      ;
      ;

      if (__result_first == __result_last)
 return __result_last;
      _RandomAccessIterator __result_real_last = __result_first;
      while(__first != __last && __result_real_last != __result_last)
 {
   *__result_real_last = *__first;
   ++__result_real_last;
   ++__first;
 }
      std::make_heap(__result_first, __result_real_last, __comp);
      while (__first != __last)
 {
   if (__comp(*__first, *__result_first))
     std::__adjust_heap(__result_first, _DistanceType(0),
          _DistanceType(__result_real_last
          - __result_first),
          _InputValueType(*__first),
          __comp);
   ++__first;
 }
      std::sort_heap(__result_first, __result_real_last, __comp);
      return __result_real_last;
    }






  template<typename _RandomAccessIterator, typename _Size>
    void
    __introsort_loop(_RandomAccessIterator __first,
       _RandomAccessIterator __last,
       _Size __depth_limit)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;

      while (__last - __first > _S_threshold)
 {
   if (__depth_limit == 0)
     {
       std::partial_sort(__first, __last, __last);
       return;
     }
   --__depth_limit;
   _RandomAccessIterator __cut =
     std::__unguarded_partition(__first, __last,
           _ValueType(std::__median(*__first,
        *(__first
          + (__last
             - __first)
          / 2),
        *(__last
          - 1))));
   std::__introsort_loop(__cut, __last, __depth_limit);
   __last = __cut;
 }
    }






  template<typename _RandomAccessIterator, typename _Size, typename _Compare>
    void
    __introsort_loop(_RandomAccessIterator __first,
       _RandomAccessIterator __last,
       _Size __depth_limit, _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;

      while (__last - __first > _S_threshold)
 {
   if (__depth_limit == 0)
     {
       std::partial_sort(__first, __last, __last, __comp);
       return;
     }
   --__depth_limit;
   _RandomAccessIterator __cut =
     std::__unguarded_partition(__first, __last,
           _ValueType(std::__median(*__first,
        *(__first
          + (__last
             - __first)
          / 2),
        *(__last - 1),
        __comp)),
           __comp);
   std::__introsort_loop(__cut, __last, __depth_limit, __comp);
   __last = __cut;
 }
    }
# 2555 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator>
    inline void
    sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;


     

     
      ;

      if (__first != __last)
 {
   std::__introsort_loop(__first, __last, __lg(__last - __first) * 2);
   std::__final_insertion_sort(__first, __last);
 }
    }
# 2589 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
    inline void
    sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
  _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;


     

     

      ;

      if (__first != __last)
 {
   std::__introsort_loop(__first, __last, __lg(__last - __first) * 2,
    __comp);
   std::__final_insertion_sort(__first, __last, __comp);
 }
    }
# 2622 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp>
    _ForwardIterator
    lower_bound(_ForwardIterator __first, _ForwardIterator __last,
  const _Tp& __val)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;
      typedef typename iterator_traits<_ForwardIterator>::difference_type
 _DistanceType;






     
     
     
      ;

      _DistanceType __len = std::distance(__first, __last);
      _DistanceType __half;
      _ForwardIterator __middle;

      while (__len > 0)
 {
   __half = __len >> 1;
   __middle = __first;
   std::advance(__middle, __half);
   if (*__middle < __val)
     {
       __first = __middle;
       ++__first;
       __len = __len - __half - 1;
     }
   else
     __len = __half;
 }
      return __first;
    }
# 2677 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp, typename _Compare>
    _ForwardIterator
    lower_bound(_ForwardIterator __first, _ForwardIterator __last,
  const _Tp& __val, _Compare __comp)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;
      typedef typename iterator_traits<_ForwardIterator>::difference_type
 _DistanceType;


     
     

      ;

      _DistanceType __len = std::distance(__first, __last);
      _DistanceType __half;
      _ForwardIterator __middle;

      while (__len > 0)
 {
   __half = __len >> 1;
   __middle = __first;
   std::advance(__middle, __half);
   if (__comp(*__middle, __val))
     {
       __first = __middle;
       ++__first;
       __len = __len - __half - 1;
     }
   else
     __len = __half;
 }
      return __first;
    }
# 2724 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp>
    _ForwardIterator
    upper_bound(_ForwardIterator __first, _ForwardIterator __last,
  const _Tp& __val)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;
      typedef typename iterator_traits<_ForwardIterator>::difference_type
 _DistanceType;



     
     
     
      ;

      _DistanceType __len = std::distance(__first, __last);
      _DistanceType __half;
      _ForwardIterator __middle;

      while (__len > 0)
 {
   __half = __len >> 1;
   __middle = __first;
   std::advance(__middle, __half);
   if (__val < *__middle)
     __len = __half;
   else
     {
       __first = __middle;
       ++__first;
       __len = __len - __half - 1;
     }
 }
      return __first;
    }
# 2776 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp, typename _Compare>
    _ForwardIterator
    upper_bound(_ForwardIterator __first, _ForwardIterator __last,
  const _Tp& __val, _Compare __comp)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;
      typedef typename iterator_traits<_ForwardIterator>::difference_type
 _DistanceType;


     
     

      ;

      _DistanceType __len = std::distance(__first, __last);
      _DistanceType __half;
      _ForwardIterator __middle;

      while (__len > 0)
 {
   __half = __len >> 1;
   __middle = __first;
   std::advance(__middle, __half);
   if (__comp(__val, *__middle))
     __len = __half;
   else
     {
       __first = __middle;
       ++__first;
       __len = __len - __half - 1;
     }
 }
      return __first;
    }






  template<typename _BidirectionalIterator, typename _Distance>
    void
    __merge_without_buffer(_BidirectionalIterator __first,
      _BidirectionalIterator __middle,
      _BidirectionalIterator __last,
      _Distance __len1, _Distance __len2)
    {
      if (__len1 == 0 || __len2 == 0)
 return;
      if (__len1 + __len2 == 2)
 {
   if (*__middle < *__first)
     std::iter_swap(__first, __middle);
   return;
 }
      _BidirectionalIterator __first_cut = __first;
      _BidirectionalIterator __second_cut = __middle;
      _Distance __len11 = 0;
      _Distance __len22 = 0;
      if (__len1 > __len2)
 {
   __len11 = __len1 / 2;
   std::advance(__first_cut, __len11);
   __second_cut = std::lower_bound(__middle, __last, *__first_cut);
   __len22 = std::distance(__middle, __second_cut);
 }
      else
 {
   __len22 = __len2 / 2;
   std::advance(__second_cut, __len22);
   __first_cut = std::upper_bound(__first, __middle, *__second_cut);
   __len11 = std::distance(__first, __first_cut);
 }
      std::rotate(__first_cut, __middle, __second_cut);
      _BidirectionalIterator __new_middle = __first_cut;
      std::advance(__new_middle, std::distance(__middle, __second_cut));
      std::__merge_without_buffer(__first, __first_cut, __new_middle,
      __len11, __len22);
      std::__merge_without_buffer(__new_middle, __second_cut, __last,
      __len1 - __len11, __len2 - __len22);
    }






  template<typename _BidirectionalIterator, typename _Distance,
    typename _Compare>
    void
    __merge_without_buffer(_BidirectionalIterator __first,
                           _BidirectionalIterator __middle,
      _BidirectionalIterator __last,
      _Distance __len1, _Distance __len2,
      _Compare __comp)
    {
      if (__len1 == 0 || __len2 == 0)
 return;
      if (__len1 + __len2 == 2)
 {
   if (__comp(*__middle, *__first))
     std::iter_swap(__first, __middle);
   return;
 }
      _BidirectionalIterator __first_cut = __first;
      _BidirectionalIterator __second_cut = __middle;
      _Distance __len11 = 0;
      _Distance __len22 = 0;
      if (__len1 > __len2)
 {
   __len11 = __len1 / 2;
   std::advance(__first_cut, __len11);
   __second_cut = std::lower_bound(__middle, __last, *__first_cut,
       __comp);
   __len22 = std::distance(__middle, __second_cut);
 }
      else
 {
   __len22 = __len2 / 2;
   std::advance(__second_cut, __len22);
   __first_cut = std::upper_bound(__first, __middle, *__second_cut,
      __comp);
   __len11 = std::distance(__first, __first_cut);
 }
      std::rotate(__first_cut, __middle, __second_cut);
      _BidirectionalIterator __new_middle = __first_cut;
      std::advance(__new_middle, std::distance(__middle, __second_cut));
      std::__merge_without_buffer(__first, __first_cut, __new_middle,
      __len11, __len22, __comp);
      std::__merge_without_buffer(__new_middle, __second_cut, __last,
      __len1 - __len11, __len2 - __len22, __comp);
    }






  template<typename _RandomAccessIterator>
    void
    __inplace_stable_sort(_RandomAccessIterator __first,
     _RandomAccessIterator __last)
    {
      if (__last - __first < 15)
 {
   std::__insertion_sort(__first, __last);
   return;
 }
      _RandomAccessIterator __middle = __first + (__last - __first) / 2;
      std::__inplace_stable_sort(__first, __middle);
      std::__inplace_stable_sort(__middle, __last);
      std::__merge_without_buffer(__first, __middle, __last,
      __middle - __first,
      __last - __middle);
    }






  template<typename _RandomAccessIterator, typename _Compare>
    void
    __inplace_stable_sort(_RandomAccessIterator __first,
     _RandomAccessIterator __last, _Compare __comp)
    {
      if (__last - __first < 15)
 {
   std::__insertion_sort(__first, __last, __comp);
   return;
 }
      _RandomAccessIterator __middle = __first + (__last - __first) / 2;
      std::__inplace_stable_sort(__first, __middle, __comp);
      std::__inplace_stable_sort(__middle, __last, __comp);
      std::__merge_without_buffer(__first, __middle, __last,
      __middle - __first,
      __last - __middle,
      __comp);
    }
# 2974 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator>
    _OutputIterator
    merge(_InputIterator1 __first1, _InputIterator1 __last1,
   _InputIterator2 __first2, _InputIterator2 __last2,
   _OutputIterator __result)
    {

     
     
     

     


     

      ;
      ;

      while (__first1 != __last1 && __first2 != __last2)
 {
   if (*__first2 < *__first1)
     {
       *__result = *__first2;
       ++__first2;
     }
   else
     {
       *__result = *__first1;
       ++__first1;
     }
   ++__result;
 }
      return std::copy(__first2, __last2, std::copy(__first1, __last1,
          __result));
    }
# 3032 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _Compare>
    _OutputIterator
    merge(_InputIterator1 __first1, _InputIterator1 __last1,
   _InputIterator2 __first2, _InputIterator2 __last2,
   _OutputIterator __result, _Compare __comp)
    {

     
     
     


     

     


      ;
      ;

      while (__first1 != __last1 && __first2 != __last2)
 {
   if (__comp(*__first2, *__first1))
     {
       *__result = *__first2;
       ++__first2;
     }
   else
     {
       *__result = *__first1;
       ++__first1;
     }
   ++__result;
 }
      return std::copy(__first2, __last2, std::copy(__first1, __last1,
          __result));
    }

  template<typename _RandomAccessIterator1, typename _RandomAccessIterator2,
    typename _Distance>
    void
    __merge_sort_loop(_RandomAccessIterator1 __first,
        _RandomAccessIterator1 __last,
        _RandomAccessIterator2 __result,
        _Distance __step_size)
    {
      const _Distance __two_step = 2 * __step_size;

      while (__last - __first >= __two_step)
 {
   __result = std::merge(__first, __first + __step_size,
    __first + __step_size, __first + __two_step,
    __result);
   __first += __two_step;
 }

      __step_size = std::min(_Distance(__last - __first), __step_size);
      std::merge(__first, __first + __step_size, __first + __step_size, __last,
   __result);
    }

  template<typename _RandomAccessIterator1, typename _RandomAccessIterator2,
    typename _Distance, typename _Compare>
    void
    __merge_sort_loop(_RandomAccessIterator1 __first,
        _RandomAccessIterator1 __last,
        _RandomAccessIterator2 __result, _Distance __step_size,
        _Compare __comp)
    {
      const _Distance __two_step = 2 * __step_size;

      while (__last - __first >= __two_step)
 {
   __result = std::merge(__first, __first + __step_size,
    __first + __step_size, __first + __two_step,
    __result,
    __comp);
   __first += __two_step;
 }
      __step_size = std::min(_Distance(__last - __first), __step_size);

      std::merge(__first, __first + __step_size,
   __first + __step_size, __last,
   __result,
   __comp);
    }

  enum { _S_chunk_size = 7 };

  template<typename _RandomAccessIterator, typename _Distance>
    void
    __chunk_insertion_sort(_RandomAccessIterator __first,
      _RandomAccessIterator __last,
      _Distance __chunk_size)
    {
      while (__last - __first >= __chunk_size)
 {
   std::__insertion_sort(__first, __first + __chunk_size);
   __first += __chunk_size;
 }
      std::__insertion_sort(__first, __last);
    }

  template<typename _RandomAccessIterator, typename _Distance, typename _Compare>
    void
    __chunk_insertion_sort(_RandomAccessIterator __first,
      _RandomAccessIterator __last,
      _Distance __chunk_size, _Compare __comp)
    {
      while (__last - __first >= __chunk_size)
 {
   std::__insertion_sort(__first, __first + __chunk_size, __comp);
   __first += __chunk_size;
 }
      std::__insertion_sort(__first, __last, __comp);
    }

  template<typename _RandomAccessIterator, typename _Pointer>
    void
    __merge_sort_with_buffer(_RandomAccessIterator __first,
        _RandomAccessIterator __last,
                             _Pointer __buffer)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _Distance;

      const _Distance __len = __last - __first;
      const _Pointer __buffer_last = __buffer + __len;

      _Distance __step_size = _S_chunk_size;
      std::__chunk_insertion_sort(__first, __last, __step_size);

      while (__step_size < __len)
 {
   std::__merge_sort_loop(__first, __last, __buffer, __step_size);
   __step_size *= 2;
   std::__merge_sort_loop(__buffer, __buffer_last, __first, __step_size);
   __step_size *= 2;
 }
    }

  template<typename _RandomAccessIterator, typename _Pointer, typename _Compare>
    void
    __merge_sort_with_buffer(_RandomAccessIterator __first,
        _RandomAccessIterator __last,
                             _Pointer __buffer, _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _Distance;

      const _Distance __len = __last - __first;
      const _Pointer __buffer_last = __buffer + __len;

      _Distance __step_size = _S_chunk_size;
      std::__chunk_insertion_sort(__first, __last, __step_size, __comp);

      while (__step_size < __len)
 {
   std::__merge_sort_loop(__first, __last, __buffer,
     __step_size, __comp);
   __step_size *= 2;
   std::__merge_sort_loop(__buffer, __buffer_last, __first,
     __step_size, __comp);
   __step_size *= 2;
 }
    }






  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
    typename _BidirectionalIterator3>
    _BidirectionalIterator3
    __merge_backward(_BidirectionalIterator1 __first1,
       _BidirectionalIterator1 __last1,
       _BidirectionalIterator2 __first2,
       _BidirectionalIterator2 __last2,
       _BidirectionalIterator3 __result)
    {
      if (__first1 == __last1)
 return std::copy_backward(__first2, __last2, __result);
      if (__first2 == __last2)
 return std::copy_backward(__first1, __last1, __result);
      --__last1;
      --__last2;
      while (true)
 {
   if (*__last2 < *__last1)
     {
       *--__result = *__last1;
       if (__first1 == __last1)
  return std::copy_backward(__first2, ++__last2, __result);
       --__last1;
     }
   else
     {
       *--__result = *__last2;
       if (__first2 == __last2)
  return std::copy_backward(__first1, ++__last1, __result);
       --__last2;
     }
 }
    }






  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
    typename _BidirectionalIterator3, typename _Compare>
    _BidirectionalIterator3
    __merge_backward(_BidirectionalIterator1 __first1,
       _BidirectionalIterator1 __last1,
       _BidirectionalIterator2 __first2,
       _BidirectionalIterator2 __last2,
       _BidirectionalIterator3 __result,
       _Compare __comp)
    {
      if (__first1 == __last1)
 return std::copy_backward(__first2, __last2, __result);
      if (__first2 == __last2)
 return std::copy_backward(__first1, __last1, __result);
      --__last1;
      --__last2;
      while (true)
 {
   if (__comp(*__last2, *__last1))
     {
       *--__result = *__last1;
       if (__first1 == __last1)
  return std::copy_backward(__first2, ++__last2, __result);
       --__last1;
     }
   else
     {
       *--__result = *__last2;
       if (__first2 == __last2)
  return std::copy_backward(__first1, ++__last1, __result);
       --__last2;
     }
 }
    }






  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
    typename _Distance>
    _BidirectionalIterator1
    __rotate_adaptive(_BidirectionalIterator1 __first,
        _BidirectionalIterator1 __middle,
        _BidirectionalIterator1 __last,
        _Distance __len1, _Distance __len2,
        _BidirectionalIterator2 __buffer,
        _Distance __buffer_size)
    {
      _BidirectionalIterator2 __buffer_end;
      if (__len1 > __len2 && __len2 <= __buffer_size)
 {
   __buffer_end = std::copy(__middle, __last, __buffer);
   std::copy_backward(__first, __middle, __last);
   return std::copy(__buffer, __buffer_end, __first);
 }
      else if (__len1 <= __buffer_size)
 {
   __buffer_end = std::copy(__first, __middle, __buffer);
   std::copy(__middle, __last, __first);
   return std::copy_backward(__buffer, __buffer_end, __last);
 }
      else
 {
   std::rotate(__first, __middle, __last);
   std::advance(__first, std::distance(__middle, __last));
   return __first;
 }
    }






  template<typename _BidirectionalIterator, typename _Distance,
    typename _Pointer>
    void
    __merge_adaptive(_BidirectionalIterator __first,
                     _BidirectionalIterator __middle,
       _BidirectionalIterator __last,
       _Distance __len1, _Distance __len2,
       _Pointer __buffer, _Distance __buffer_size)
    {
      if (__len1 <= __len2 && __len1 <= __buffer_size)
 {
   _Pointer __buffer_end = std::copy(__first, __middle, __buffer);
   std::merge(__buffer, __buffer_end, __middle, __last, __first);
 }
      else if (__len2 <= __buffer_size)
 {
   _Pointer __buffer_end = std::copy(__middle, __last, __buffer);
   std::__merge_backward(__first, __middle, __buffer,
    __buffer_end, __last);
 }
      else
 {
   _BidirectionalIterator __first_cut = __first;
   _BidirectionalIterator __second_cut = __middle;
   _Distance __len11 = 0;
   _Distance __len22 = 0;
   if (__len1 > __len2)
     {
       __len11 = __len1 / 2;
       std::advance(__first_cut, __len11);
       __second_cut = std::lower_bound(__middle, __last,
           *__first_cut);
       __len22 = std::distance(__middle, __second_cut);
     }
   else
     {
       __len22 = __len2 / 2;
       std::advance(__second_cut, __len22);
       __first_cut = std::upper_bound(__first, __middle,
          *__second_cut);
       __len11 = std::distance(__first, __first_cut);
     }
   _BidirectionalIterator __new_middle =
     std::__rotate_adaptive(__first_cut, __middle, __second_cut,
       __len1 - __len11, __len22, __buffer,
       __buffer_size);
   std::__merge_adaptive(__first, __first_cut, __new_middle, __len11,
    __len22, __buffer, __buffer_size);
   std::__merge_adaptive(__new_middle, __second_cut, __last,
    __len1 - __len11,
    __len2 - __len22, __buffer, __buffer_size);
 }
    }






  template<typename _BidirectionalIterator, typename _Distance, typename _Pointer,
    typename _Compare>
    void
    __merge_adaptive(_BidirectionalIterator __first,
                     _BidirectionalIterator __middle,
       _BidirectionalIterator __last,
       _Distance __len1, _Distance __len2,
       _Pointer __buffer, _Distance __buffer_size,
       _Compare __comp)
    {
      if (__len1 <= __len2 && __len1 <= __buffer_size)
 {
   _Pointer __buffer_end = std::copy(__first, __middle, __buffer);
   std::merge(__buffer, __buffer_end, __middle, __last, __first, __comp);
 }
      else if (__len2 <= __buffer_size)
 {
   _Pointer __buffer_end = std::copy(__middle, __last, __buffer);
   std::__merge_backward(__first, __middle, __buffer, __buffer_end,
    __last, __comp);
 }
      else
 {
   _BidirectionalIterator __first_cut = __first;
   _BidirectionalIterator __second_cut = __middle;
   _Distance __len11 = 0;
   _Distance __len22 = 0;
   if (__len1 > __len2)
     {
       __len11 = __len1 / 2;
       std::advance(__first_cut, __len11);
       __second_cut = std::lower_bound(__middle, __last, *__first_cut,
           __comp);
       __len22 = std::distance(__middle, __second_cut);
     }
   else
     {
       __len22 = __len2 / 2;
       std::advance(__second_cut, __len22);
       __first_cut = std::upper_bound(__first, __middle, *__second_cut,
          __comp);
       __len11 = std::distance(__first, __first_cut);
     }
   _BidirectionalIterator __new_middle =
     std::__rotate_adaptive(__first_cut, __middle, __second_cut,
       __len1 - __len11, __len22, __buffer,
       __buffer_size);
   std::__merge_adaptive(__first, __first_cut, __new_middle, __len11,
    __len22, __buffer, __buffer_size, __comp);
   std::__merge_adaptive(__new_middle, __second_cut, __last,
    __len1 - __len11,
    __len2 - __len22, __buffer,
    __buffer_size, __comp);
 }
    }
# 3452 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator>
    void
    inplace_merge(_BidirectionalIterator __first,
    _BidirectionalIterator __middle,
    _BidirectionalIterator __last)
    {
      typedef typename iterator_traits<_BidirectionalIterator>::value_type
          _ValueType;
      typedef typename iterator_traits<_BidirectionalIterator>::difference_type
          _DistanceType;


     

     
      ;
      ;

      if (__first == __middle || __middle == __last)
 return;

      _DistanceType __len1 = std::distance(__first, __middle);
      _DistanceType __len2 = std::distance(__middle, __last);

      _Temporary_buffer<_BidirectionalIterator, _ValueType> __buf(__first,
          __last);
      if (__buf.begin() == 0)
 std::__merge_without_buffer(__first, __middle, __last, __len1, __len2);
      else
 std::__merge_adaptive(__first, __middle, __last, __len1, __len2,
         __buf.begin(), _DistanceType(__buf.size()));
    }
# 3506 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator, typename _Compare>
    void
    inplace_merge(_BidirectionalIterator __first,
    _BidirectionalIterator __middle,
    _BidirectionalIterator __last,
    _Compare __comp)
    {
      typedef typename iterator_traits<_BidirectionalIterator>::value_type
          _ValueType;
      typedef typename iterator_traits<_BidirectionalIterator>::difference_type
          _DistanceType;


     

     

      ;
      ;

      if (__first == __middle || __middle == __last)
 return;

      const _DistanceType __len1 = std::distance(__first, __middle);
      const _DistanceType __len2 = std::distance(__middle, __last);

      _Temporary_buffer<_BidirectionalIterator, _ValueType> __buf(__first,
          __last);
      if (__buf.begin() == 0)
 std::__merge_without_buffer(__first, __middle, __last, __len1,
        __len2, __comp);
      else
 std::__merge_adaptive(__first, __middle, __last, __len1, __len2,
         __buf.begin(), _DistanceType(__buf.size()),
         __comp);
    }

  template<typename _RandomAccessIterator, typename _Pointer,
    typename _Distance>
    void
    __stable_sort_adaptive(_RandomAccessIterator __first,
      _RandomAccessIterator __last,
                           _Pointer __buffer, _Distance __buffer_size)
    {
      const _Distance __len = (__last - __first + 1) / 2;
      const _RandomAccessIterator __middle = __first + __len;
      if (__len > __buffer_size)
 {
   std::__stable_sort_adaptive(__first, __middle,
          __buffer, __buffer_size);
   std::__stable_sort_adaptive(__middle, __last,
          __buffer, __buffer_size);
 }
      else
 {
   std::__merge_sort_with_buffer(__first, __middle, __buffer);
   std::__merge_sort_with_buffer(__middle, __last, __buffer);
 }
      std::__merge_adaptive(__first, __middle, __last,
       _Distance(__middle - __first),
       _Distance(__last - __middle),
       __buffer, __buffer_size);
    }

  template<typename _RandomAccessIterator, typename _Pointer,
    typename _Distance, typename _Compare>
    void
    __stable_sort_adaptive(_RandomAccessIterator __first,
      _RandomAccessIterator __last,
                           _Pointer __buffer, _Distance __buffer_size,
                           _Compare __comp)
    {
      const _Distance __len = (__last - __first + 1) / 2;
      const _RandomAccessIterator __middle = __first + __len;
      if (__len > __buffer_size)
 {
   std::__stable_sort_adaptive(__first, __middle, __buffer,
          __buffer_size, __comp);
   std::__stable_sort_adaptive(__middle, __last, __buffer,
          __buffer_size, __comp);
 }
      else
 {
   std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp);
   std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp);
 }
      std::__merge_adaptive(__first, __middle, __last,
       _Distance(__middle - __first),
       _Distance(__last - __middle),
       __buffer, __buffer_size,
       __comp);
    }
# 3615 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator>
    inline void
    stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _DistanceType;


     

     
      ;

      _Temporary_buffer<_RandomAccessIterator, _ValueType>
 buf(__first, __last);
      if (buf.begin() == 0)
 std::__inplace_stable_sort(__first, __last);
      else
 std::__stable_sort_adaptive(__first, __last, buf.begin(),
        _DistanceType(buf.size()));
    }
# 3656 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
    inline void
    stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
  _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _DistanceType;


     

     


      ;

      _Temporary_buffer<_RandomAccessIterator, _ValueType> buf(__first, __last);
      if (buf.begin() == 0)
 std::__inplace_stable_sort(__first, __last, __comp);
      else
 std::__stable_sort_adaptive(__first, __last, buf.begin(),
        _DistanceType(buf.size()), __comp);
    }
# 3697 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator>
    void
    nth_element(_RandomAccessIterator __first,
  _RandomAccessIterator __nth,
  _RandomAccessIterator __last)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;


     

     
      ;
      ;

      while (__last - __first > 3)
 {
   _RandomAccessIterator __cut =
     std::__unguarded_partition(__first, __last,
           _ValueType(std::__median(*__first,
        *(__first
          + (__last
             - __first)
          / 2),
        *(__last
          - 1))));
   if (__cut <= __nth)
     __first = __cut;
   else
     __last = __cut;
 }
      std::__insertion_sort(__first, __last);
    }
# 3748 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
    void
    nth_element(_RandomAccessIterator __first,
  _RandomAccessIterator __nth,
  _RandomAccessIterator __last,
       _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;


     

     

      ;
      ;

      while (__last - __first > 3)
 {
   _RandomAccessIterator __cut =
     std::__unguarded_partition(__first, __last,
           _ValueType(std::__median(*__first,
        *(__first
          + (__last
             - __first)
          / 2),
        *(__last - 1),
             __comp)), __comp);
   if (__cut <= __nth)
     __first = __cut;
   else
     __last = __cut;
 }
      std::__insertion_sort(__first, __last, __comp);
    }
# 3801 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp>
    pair<_ForwardIterator, _ForwardIterator>
    equal_range(_ForwardIterator __first, _ForwardIterator __last,
  const _Tp& __val)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;
      typedef typename iterator_traits<_ForwardIterator>::difference_type
 _DistanceType;



     
     
     
      ;

      _DistanceType __len = std::distance(__first, __last);
      _DistanceType __half;
      _ForwardIterator __middle, __left, __right;

      while (__len > 0)
 {
   __half = __len >> 1;
   __middle = __first;
   std::advance(__middle, __half);
   if (*__middle < __val)
     {
       __first = __middle;
       ++__first;
       __len = __len - __half - 1;
     }
   else if (__val < *__middle)
     __len = __half;
   else
     {
       __left = std::lower_bound(__first, __middle, __val);
       std::advance(__first, __len);
       __right = std::upper_bound(++__middle, __first, __val);
       return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
     }
 }
      return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
    }
# 3863 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp, typename _Compare>
    pair<_ForwardIterator, _ForwardIterator>
    equal_range(_ForwardIterator __first, _ForwardIterator __last,
  const _Tp& __val,
  _Compare __comp)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;
      typedef typename iterator_traits<_ForwardIterator>::difference_type
 _DistanceType;


     
     

     

      ;

      _DistanceType __len = std::distance(__first, __last);
      _DistanceType __half;
      _ForwardIterator __middle, __left, __right;

      while (__len > 0)
 {
   __half = __len >> 1;
   __middle = __first;
   std::advance(__middle, __half);
   if (__comp(*__middle, __val))
     {
       __first = __middle;
       ++__first;
       __len = __len - __half - 1;
     }
   else if (__comp(__val, *__middle))
     __len = __half;
   else
     {
       __left = std::lower_bound(__first, __middle, __val, __comp);
       std::advance(__first, __len);
       __right = std::upper_bound(++__middle, __first, __val, __comp);
       return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
     }
 }
      return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
    }
# 3921 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp>
    bool
    binary_search(_ForwardIterator __first, _ForwardIterator __last,
                  const _Tp& __val)
    {


     
     

     
      ;

      _ForwardIterator __i = std::lower_bound(__first, __last, __val);
      return __i != __last && !(__val < *__i);
    }
# 3953 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp, typename _Compare>
    bool
    binary_search(_ForwardIterator __first, _ForwardIterator __last,
                  const _Tp& __val, _Compare __comp)
    {

     
     

     

      ;

      _ForwardIterator __i = std::lower_bound(__first, __last, __val, __comp);
      return __i != __last && !__comp(__val, *__i);
    }
# 3991 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2>
    bool
    includes(_InputIterator1 __first1, _InputIterator1 __last1,
      _InputIterator2 __first2, _InputIterator2 __last2)
    {

     
     
     


     

      ;
      ;

      while (__first1 != __last1 && __first2 != __last2)
 if (*__first2 < *__first1)
   return false;
 else if(*__first1 < *__first2)
   ++__first1;
 else
   ++__first1, ++__first2;

      return __first2 == __last2;
    }
# 4037 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _Compare>
    bool
    includes(_InputIterator1 __first1, _InputIterator1 __last1,
      _InputIterator2 __first2, _InputIterator2 __last2, _Compare __comp)
    {

     
     
     


     


      ;
      ;

      while (__first1 != __last1 && __first2 != __last2)
 if (__comp(*__first2, *__first1))
   return false;
 else if(__comp(*__first1, *__first2))
   ++__first1;
 else
   ++__first1, ++__first2;

      return __first2 == __last2;
    }
# 4083 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator>
    _OutputIterator
    set_union(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2,
       _OutputIterator __result)
    {

     
     
     

     


     

      ;
      ;

      while (__first1 != __last1 && __first2 != __last2)
 {
   if (*__first1 < *__first2)
     {
       *__result = *__first1;
       ++__first1;
     }
   else if (*__first2 < *__first1)
     {
       *__result = *__first2;
       ++__first2;
     }
   else
     {
       *__result = *__first1;
       ++__first1;
       ++__first2;
     }
   ++__result;
 }
      return std::copy(__first2, __last2, std::copy(__first1, __last1,
          __result));
    }
# 4145 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _Compare>
    _OutputIterator
    set_union(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2,
       _OutputIterator __result, _Compare __comp)
    {

     
     
     


     

     


      ;
      ;

      while (__first1 != __last1 && __first2 != __last2)
 {
   if (__comp(*__first1, *__first2))
     {
       *__result = *__first1;
       ++__first1;
     }
   else if (__comp(*__first2, *__first1))
     {
       *__result = *__first2;
       ++__first2;
     }
   else
     {
       *__result = *__first1;
       ++__first1;
       ++__first2;
     }
   ++__result;
 }
      return std::copy(__first2, __last2, std::copy(__first1, __last1,
          __result));
    }
# 4206 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator>
    _OutputIterator
    set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2,
       _OutputIterator __result)
    {

     
     
     

     


     

      ;
      ;

      while (__first1 != __last1 && __first2 != __last2)
 if (*__first1 < *__first2)
   ++__first1;
 else if (*__first2 < *__first1)
   ++__first2;
 else
   {
     *__result = *__first1;
     ++__first1;
     ++__first2;
     ++__result;
   }
      return __result;
    }
# 4260 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _Compare>
    _OutputIterator
    set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2,
       _OutputIterator __result, _Compare __comp)
    {

     
     
     


     

     


      ;
      ;

      while (__first1 != __last1 && __first2 != __last2)
 if (__comp(*__first1, *__first2))
   ++__first1;
 else if (__comp(*__first2, *__first1))
   ++__first2;
 else
   {
     *__result = *__first1;
     ++__first1;
     ++__first2;
     ++__result;
   }
      return __result;
    }
# 4314 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator>
    _OutputIterator
    set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
     _InputIterator2 __first2, _InputIterator2 __last2,
     _OutputIterator __result)
    {

     
     
     

     


     

      ;
      ;

      while (__first1 != __last1 && __first2 != __last2)
 if (*__first1 < *__first2)
   {
     *__result = *__first1;
     ++__first1;
     ++__result;
   }
 else if (*__first2 < *__first1)
   ++__first2;
 else
   {
     ++__first1;
     ++__first2;
   }
      return std::copy(__first1, __last1, __result);
    }
# 4372 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _Compare>
    _OutputIterator
    set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
     _InputIterator2 __first2, _InputIterator2 __last2,
     _OutputIterator __result, _Compare __comp)
    {

     
     
     


     

     


      ;
      ;

      while (__first1 != __last1 && __first2 != __last2)
 if (__comp(*__first1, *__first2))
   {
     *__result = *__first1;
     ++__first1;
     ++__result;
   }
 else if (__comp(*__first2, *__first1))
   ++__first2;
 else
   {
     ++__first1;
     ++__first2;
   }
      return std::copy(__first1, __last1, __result);
    }
# 4426 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator>
    _OutputIterator
    set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
        _InputIterator2 __first2, _InputIterator2 __last2,
        _OutputIterator __result)
    {

     
     
     

     


     

      ;
      ;

      while (__first1 != __last1 && __first2 != __last2)
 if (*__first1 < *__first2)
   {
     *__result = *__first1;
     ++__first1;
     ++__result;
   }
 else if (*__first2 < *__first1)
   {
     *__result = *__first2;
     ++__first2;
     ++__result;
   }
 else
   {
     ++__first1;
     ++__first2;
   }
      return std::copy(__first2, __last2, std::copy(__first1,
          __last1, __result));
    }
# 4487 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _Compare>
    _OutputIterator
    set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
        _InputIterator2 __first2, _InputIterator2 __last2,
        _OutputIterator __result,
        _Compare __comp)
    {

     
     
     


     

     


      ;
      ;

      while (__first1 != __last1 && __first2 != __last2)
 if (__comp(*__first1, *__first2))
   {
     *__result = *__first1;
     ++__first1;
     ++__result;
   }
 else if (__comp(*__first2, *__first1))
   {
     *__result = *__first2;
     ++__first2;
     ++__result;
   }
 else
   {
     ++__first1;
     ++__first2;
   }
      return std::copy(__first2, __last2, std::copy(__first1,
          __last1, __result));
    }
# 4540 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator>
    _ForwardIterator
    max_element(_ForwardIterator __first, _ForwardIterator __last)
    {

     
     

      ;

      if (__first == __last)
 return __first;
      _ForwardIterator __result = __first;
      while (++__first != __last)
 if (*__result < *__first)
   __result = __first;
      return __result;
    }
# 4567 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Compare>
    _ForwardIterator
    max_element(_ForwardIterator __first, _ForwardIterator __last,
  _Compare __comp)
    {

     
     


      ;

      if (__first == __last) return __first;
      _ForwardIterator __result = __first;
      while (++__first != __last)
 if (__comp(*__result, *__first)) __result = __first;
      return __result;
    }







  template<typename _ForwardIterator>
    _ForwardIterator
    min_element(_ForwardIterator __first, _ForwardIterator __last)
    {

     
     

      ;

      if (__first == __last)
 return __first;
      _ForwardIterator __result = __first;
      while (++__first != __last)
 if (*__first < *__result)
   __result = __first;
      return __result;
    }
# 4619 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Compare>
    _ForwardIterator
    min_element(_ForwardIterator __first, _ForwardIterator __last,
  _Compare __comp)
    {

     
     


      ;

      if (__first == __last)
 return __first;
      _ForwardIterator __result = __first;
      while (++__first != __last)
 if (__comp(*__first, *__result))
   __result = __first;
      return __result;
    }
# 4654 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator>
    bool
    next_permutation(_BidirectionalIterator __first,
       _BidirectionalIterator __last)
    {

     

     

      ;

      if (__first == __last)
 return false;
      _BidirectionalIterator __i = __first;
      ++__i;
      if (__i == __last)
 return false;
      __i = __last;
      --__i;

      for(;;)
 {
   _BidirectionalIterator __ii = __i;
   --__i;
   if (*__i < *__ii)
     {
       _BidirectionalIterator __j = __last;
       while (!(*__i < *--__j))
  {}
       std::iter_swap(__i, __j);
       std::reverse(__ii, __last);
       return true;
     }
   if (__i == __first)
     {
       std::reverse(__first, __last);
       return false;
     }
 }
    }
# 4710 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator, typename _Compare>
    bool
    next_permutation(_BidirectionalIterator __first,
       _BidirectionalIterator __last, _Compare __comp)
    {

     

     


      ;

      if (__first == __last)
 return false;
      _BidirectionalIterator __i = __first;
      ++__i;
      if (__i == __last)
 return false;
      __i = __last;
      --__i;

      for(;;)
 {
   _BidirectionalIterator __ii = __i;
   --__i;
   if (__comp(*__i, *__ii))
     {
       _BidirectionalIterator __j = __last;
       while (!__comp(*__i, *--__j))
  {}
       std::iter_swap(__i, __j);
       std::reverse(__ii, __last);
       return true;
     }
   if (__i == __first)
     {
       std::reverse(__first, __last);
       return false;
     }
 }
    }
# 4765 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator>
    bool
    prev_permutation(_BidirectionalIterator __first,
       _BidirectionalIterator __last)
    {

     

     

      ;

      if (__first == __last)
 return false;
      _BidirectionalIterator __i = __first;
      ++__i;
      if (__i == __last)
 return false;
      __i = __last;
      --__i;

      for(;;)
 {
   _BidirectionalIterator __ii = __i;
   --__i;
   if (*__ii < *__i)
     {
       _BidirectionalIterator __j = __last;
       while (!(*--__j < *__i))
  {}
       std::iter_swap(__i, __j);
       std::reverse(__ii, __last);
       return true;
     }
   if (__i == __first)
     {
       std::reverse(__first, __last);
       return false;
     }
 }
    }
# 4821 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator, typename _Compare>
    bool
    prev_permutation(_BidirectionalIterator __first,
       _BidirectionalIterator __last, _Compare __comp)
    {

     

     


      ;

      if (__first == __last)
 return false;
      _BidirectionalIterator __i = __first;
      ++__i;
      if (__i == __last)
 return false;
      __i = __last;
      --__i;

      for(;;)
 {
   _BidirectionalIterator __ii = __i;
   --__i;
   if (__comp(*__ii, *__i))
     {
       _BidirectionalIterator __j = __last;
       while (!__comp(*--__j, *__i))
  {}
       std::iter_swap(__i, __j);
       std::reverse(__ii, __last);
       return true;
     }
   if (__i == __first)
     {
       std::reverse(__first, __last);
       return false;
     }
 }
    }
# 4880 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _ForwardIterator>
    _InputIterator
    find_first_of(_InputIterator __first1, _InputIterator __last1,
    _ForwardIterator __first2, _ForwardIterator __last2)
    {

     
     
     


      ;
      ;

      for ( ; __first1 != __last1; ++__first1)
 for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
   if (*__first1 == *__iter)
     return __first1;
      return __last1;
    }
# 4916 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _ForwardIterator,
    typename _BinaryPredicate>
    _InputIterator
    find_first_of(_InputIterator __first1, _InputIterator __last1,
    _ForwardIterator __first2, _ForwardIterator __last2,
    _BinaryPredicate __comp)
    {

     
     
     


      ;
      ;

      for ( ; __first1 != __last1; ++__first1)
 for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
   if (__comp(*__first1, *__iter))
     return __first1;
      return __last1;
    }
# 4946 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2>
    _ForwardIterator1
    __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
        _ForwardIterator2 __first2, _ForwardIterator2 __last2,
        forward_iterator_tag, forward_iterator_tag)
    {
      if (__first2 == __last2)
 return __last1;
      else
 {
   _ForwardIterator1 __result = __last1;
   while (1)
     {
       _ForwardIterator1 __new_result
  = std::search(__first1, __last1, __first2, __last2);
       if (__new_result == __last1)
  return __result;
       else
  {
    __result = __new_result;
    __first1 = __new_result;
    ++__first1;
  }
     }
 }
    }

  template<typename _ForwardIterator1, typename _ForwardIterator2,
    typename _BinaryPredicate>
    _ForwardIterator1
    __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
        _ForwardIterator2 __first2, _ForwardIterator2 __last2,
        forward_iterator_tag, forward_iterator_tag,
        _BinaryPredicate __comp)
    {
      if (__first2 == __last2)
 return __last1;
      else
 {
   _ForwardIterator1 __result = __last1;
   while (1)
     {
       _ForwardIterator1 __new_result
  = std::search(__first1, __last1, __first2, __last2, __comp);
       if (__new_result == __last1)
  return __result;
       else
  {
    __result = __new_result;
    __first1 = __new_result;
    ++__first1;
  }
     }
 }
    }


  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2>
    _BidirectionalIterator1
    __find_end(_BidirectionalIterator1 __first1,
        _BidirectionalIterator1 __last1,
        _BidirectionalIterator2 __first2,
        _BidirectionalIterator2 __last2,
        bidirectional_iterator_tag, bidirectional_iterator_tag)
    {

     

     


      typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1;
      typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2;

      _RevIterator1 __rlast1(__first1);
      _RevIterator2 __rlast2(__first2);
      _RevIterator1 __rresult = std::search(_RevIterator1(__last1), __rlast1,
         _RevIterator2(__last2), __rlast2);

      if (__rresult == __rlast1)
 return __last1;
      else
 {
   _BidirectionalIterator1 __result = __rresult.base();
   std::advance(__result, -std::distance(__first2, __last2));
   return __result;
 }
    }

  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
    typename _BinaryPredicate>
    _BidirectionalIterator1
    __find_end(_BidirectionalIterator1 __first1,
        _BidirectionalIterator1 __last1,
        _BidirectionalIterator2 __first2,
        _BidirectionalIterator2 __last2,
        bidirectional_iterator_tag, bidirectional_iterator_tag,
        _BinaryPredicate __comp)
    {

     

     


      typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1;
      typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2;

      _RevIterator1 __rlast1(__first1);
      _RevIterator2 __rlast2(__first2);
      _RevIterator1 __rresult = std::search(_RevIterator1(__last1), __rlast1,
         _RevIterator2(__last2), __rlast2,
         __comp);

      if (__rresult == __rlast1)
 return __last1;
      else
 {
   _BidirectionalIterator1 __result = __rresult.base();
   std::advance(__result, -std::distance(__first2, __last2));
   return __result;
 }
    }
# 5096 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2>
    inline _ForwardIterator1
    find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
      _ForwardIterator2 __first2, _ForwardIterator2 __last2)
    {

     
     
     


      ;
      ;

      return std::__find_end(__first1, __last1, __first2, __last2,
        std::__iterator_category(__first1),
        std::__iterator_category(__first2));
    }
# 5141 "/usr/include/c++/4.0.0/bits/stl_algo.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2,
    typename _BinaryPredicate>
    inline _ForwardIterator1
    find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
      _ForwardIterator2 __first2, _ForwardIterator2 __last2,
      _BinaryPredicate __comp)
    {

     
     
     


      ;
      ;

      return std::__find_end(__first1, __last1, __first2, __last2,
        std::__iterator_category(__first1),
        std::__iterator_category(__first2),
        __comp);
    }

}
# 69 "/usr/include/c++/4.0.0/algorithm" 2 3
# 56 "/usr/include/c++/4.0.0/string" 2 3
# 1 "/usr/include/c++/4.0.0/bits/basic_string.tcc" 1 3
# 46 "/usr/include/c++/4.0.0/bits/basic_string.tcc" 3
       
# 47 "/usr/include/c++/4.0.0/bits/basic_string.tcc" 3

namespace std
{
  template<typename _Type>
    inline bool
    __is_null_pointer(_Type* __ptr)
    { return __ptr == 0; }

  template<typename _Type>
    inline bool
    __is_null_pointer(_Type)
    { return false; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    const typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    _Rep::_S_max_size = (((npos - sizeof(_Rep_base))/sizeof(_CharT)) - 1) / 4;

  template<typename _CharT, typename _Traits, typename _Alloc>
    const _CharT
    basic_string<_CharT, _Traits, _Alloc>::
    _Rep::_S_terminal = _CharT();

  template<typename _CharT, typename _Traits, typename _Alloc>
    const typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::npos;



  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_empty_rep_storage[
    (sizeof(_Rep_base) + sizeof(_CharT) + sizeof(size_type) - 1) /
      sizeof(size_type)];





  template<typename _CharT, typename _Traits, typename _Alloc>
    template<typename _InIterator>
      _CharT*
      basic_string<_CharT, _Traits, _Alloc>::
      _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a,
     input_iterator_tag)
      {

 if (__beg == __end && __a == _Alloc())
   return _S_empty_rep()._M_refdata();


 _CharT __buf[128];
 size_type __len = 0;
 while (__beg != __end && __len < sizeof(__buf) / sizeof(_CharT))
   {
     __buf[__len++] = *__beg;
     ++__beg;
   }
 _Rep* __r = _Rep::_S_create(__len, size_type(0), __a);
 _M_copy(__r->_M_refdata(), __buf, __len);
 try
   {
     while (__beg != __end)
       {
  if (__len == __r->_M_capacity)
    {

      _Rep* __another = _Rep::_S_create(__len + 1, __len, __a);
      _M_copy(__another->_M_refdata(), __r->_M_refdata(), __len);
      __r->_M_destroy(__a);
      __r = __another;
    }
  __r->_M_refdata()[__len++] = *__beg;
  ++__beg;
       }
   }
 catch(...)
   {
     __r->_M_destroy(__a);
     throw;
   }
 __r->_M_set_length_and_sharable(__len);
 return __r->_M_refdata();
      }

  template<typename _CharT, typename _Traits, typename _Alloc>
    template <typename _InIterator>
      _CharT*
      basic_string<_CharT, _Traits, _Alloc>::
      _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a,
     forward_iterator_tag)
      {

 if (__beg == __end && __a == _Alloc())
   return _S_empty_rep()._M_refdata();


 if (__builtin_expect(__is_null_pointer(__beg) && __beg != __end, 0))
   __throw_logic_error(("basic_string::_S_construct NULL not valid"));

 const size_type __dnew = static_cast<size_type>(std::distance(__beg,
              __end));

 _Rep* __r = _Rep::_S_create(__dnew, size_type(0), __a);
 try
   { _S_copy_chars(__r->_M_refdata(), __beg, __end); }
 catch(...)
   {
     __r->_M_destroy(__a);
     throw;
   }
 __r->_M_set_length_and_sharable(__dnew);
 return __r->_M_refdata();
      }

  template<typename _CharT, typename _Traits, typename _Alloc>
    _CharT*
    basic_string<_CharT, _Traits, _Alloc>::
    _S_construct(size_type __n, _CharT __c, const _Alloc& __a)
    {

      if (__n == 0 && __a == _Alloc())
 return _S_empty_rep()._M_refdata();


      _Rep* __r = _Rep::_S_create(__n, size_type(0), __a);
      if (__n)
 _M_assign(__r->_M_refdata(), __n, __c);

      __r->_M_set_length_and_sharable(__n);
      return __r->_M_refdata();
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const basic_string& __str)
    : _M_dataplus(__str._M_rep()->_M_grab(_Alloc(__str.get_allocator()),
       __str.get_allocator()),
    __str.get_allocator())
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const _Alloc& __a)
    : _M_dataplus(_S_construct(size_type(), _CharT(), __a), __a)
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const basic_string& __str, size_type __pos, size_type __n)
    : _M_dataplus(_S_construct(__str._M_data()
          + __str._M_check(__pos,
      "basic_string::basic_string"),
          __str._M_data() + __str._M_limit(__pos, __n)
          + __pos, _Alloc()), _Alloc())
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const basic_string& __str, size_type __pos,
   size_type __n, const _Alloc& __a)
    : _M_dataplus(_S_construct(__str._M_data()
          + __str._M_check(__pos,
      "basic_string::basic_string"),
          __str._M_data() + __str._M_limit(__pos, __n)
          + __pos, __a), __a)
    { }


  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const _CharT* __s, size_type __n, const _Alloc& __a)
    : _M_dataplus(_S_construct(__s, __s + __n, __a), __a)
    { }


  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const _CharT* __s, const _Alloc& __a)
    : _M_dataplus(_S_construct(__s, __s ? __s + traits_type::length(__s) :
          __s + npos, __a), __a)
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(size_type __n, _CharT __c, const _Alloc& __a)
    : _M_dataplus(_S_construct(__n, __c, __a), __a)
    { }


  template<typename _CharT, typename _Traits, typename _Alloc>
    template<typename _InputIterator>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a)
    : _M_dataplus(_S_construct(__beg, __end, __a), __a)
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    assign(const basic_string& __str)
    {
      if (_M_rep() != __str._M_rep())
 {

   const allocator_type __a = this->get_allocator();
   _CharT* __tmp = __str._M_rep()->_M_grab(__a, __str.get_allocator());
   _M_rep()->_M_dispose(__a);
   _M_data(__tmp);
 }
      return *this;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    assign(const _CharT* __s, size_type __n)
    {
      ;
      _M_check_length(this->size(), __n, "basic_string::assign");
      if (_M_disjunct(__s) || _M_rep()->_M_is_shared())
 return _M_replace_safe(size_type(0), this->size(), __s, __n);
      else
 {

   const size_type __pos = __s - _M_data();
   if (__pos >= __n)
     _M_copy(_M_data(), __s, __n);
   else if (__pos)
     _M_move(_M_data(), __s, __n);
   _M_rep()->_M_set_length_and_sharable(__n);
   return *this;
 }
     }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    append(size_type __n, _CharT __c)
    {
      if (__n)
 {
   _M_check_length(size_type(0), __n, "basic_string::append");
   const size_type __len = __n + this->size();
   if (__len > this->capacity() || _M_rep()->_M_is_shared())
     this->reserve(__len);
   _M_assign(_M_data() + this->size(), __n, __c);
   _M_rep()->_M_set_length_and_sharable(__len);
 }
      return *this;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    append(const _CharT* __s, size_type __n)
    {
      ;
      if (__n)
 {
   _M_check_length(size_type(0), __n, "basic_string::append");
   const size_type __len = __n + this->size();
   if (__len > this->capacity() || _M_rep()->_M_is_shared())
     {
       if (_M_disjunct(__s))
  this->reserve(__len);
       else
  {
    const size_type __off = __s - _M_data();
    this->reserve(__len);
    __s = _M_data() + __off;
  }
     }
   _M_copy(_M_data() + this->size(), __s, __n);
   _M_rep()->_M_set_length_and_sharable(__len);
 }
      return *this;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    append(const basic_string& __str)
    {
      const size_type __size = __str.size();
      if (__size)
 {
   const size_type __len = __size + this->size();
   if (__len > this->capacity() || _M_rep()->_M_is_shared())
     this->reserve(__len);
   _M_copy(_M_data() + this->size(), __str._M_data(), __size);
   _M_rep()->_M_set_length_and_sharable(__len);
 }
      return *this;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    append(const basic_string& __str, size_type __pos, size_type __n)
    {
      __str._M_check(__pos, "basic_string::append");
      __n = __str._M_limit(__pos, __n);
      if (__n)
 {
   const size_type __len = __n + this->size();
   if (__len > this->capacity() || _M_rep()->_M_is_shared())
     this->reserve(__len);
   _M_copy(_M_data() + this->size(), __str._M_data() + __pos, __n);
   _M_rep()->_M_set_length_and_sharable(__len);
 }
      return *this;
    }

   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>&
     basic_string<_CharT, _Traits, _Alloc>::
     insert(size_type __pos, const _CharT* __s, size_type __n)
     {
       ;
       _M_check(__pos, "basic_string::insert");
       _M_check_length(size_type(0), __n, "basic_string::insert");
       if (_M_disjunct(__s) || _M_rep()->_M_is_shared())
         return _M_replace_safe(__pos, size_type(0), __s, __n);
       else
         {

           const size_type __off = __s - _M_data();
           _M_mutate(__pos, 0, __n);
           __s = _M_data() + __off;
           _CharT* __p = _M_data() + __pos;
           if (__s + __n <= __p)
             _M_copy(__p, __s, __n);
           else if (__s >= __p)
             _M_copy(__p, __s + __n, __n);
           else
             {
        const size_type __nleft = __p - __s;
               _M_copy(__p, __s, __nleft);
               _M_copy(__p + __nleft, __p + __n, __n - __nleft);
             }
           return *this;
         }
     }

   template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>&
     basic_string<_CharT, _Traits, _Alloc>::
     replace(size_type __pos, size_type __n1, const _CharT* __s,
      size_type __n2)
     {
       ;
       _M_check(__pos, "basic_string::replace");
       __n1 = _M_limit(__pos, __n1);
       _M_check_length(__n1, __n2, "basic_string::replace");
       bool __left;
       if (_M_disjunct(__s) || _M_rep()->_M_is_shared())
         return _M_replace_safe(__pos, __n1, __s, __n2);
       else if ((__left = __s + __n2 <= _M_data() + __pos)
  || _M_data() + __pos + __n1 <= __s)
  {

    size_type __off = __s - _M_data();
    __left ? __off : (__off += __n2 - __n1);
    _M_mutate(__pos, __n1, __n2);
    _M_copy(_M_data() + __pos, _M_data() + __off, __n2);
    return *this;
  }
       else
  {

    const basic_string __tmp(__s, __n2);
    return _M_replace_safe(__pos, __n1, __tmp._M_data(), __n2);
  }
     }

  template<typename _CharT, typename _Traits, typename _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::_Rep::
    _M_destroy(const _Alloc& __a) throw ()
    {
      const size_type __size = sizeof(_Rep_base) +
                        (this->_M_capacity + 1) * sizeof(_CharT);
      _Raw_bytes_alloc(__a).deallocate(reinterpret_cast<char*>(this), __size);
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::
    _M_leak_hard()
    {

      if (_M_rep() == &_S_empty_rep())
 return;

      if (_M_rep()->_M_is_shared())
 _M_mutate(0, 0, 0);
      _M_rep()->_M_set_leaked();
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::
    _M_mutate(size_type __pos, size_type __len1, size_type __len2)
    {
      const size_type __old_size = this->size();
      const size_type __new_size = __old_size + __len2 - __len1;
      const size_type __how_much = __old_size - __pos - __len1;

      if (__new_size > this->capacity() || _M_rep()->_M_is_shared())
 {

   const allocator_type __a = get_allocator();
   _Rep* __r = _Rep::_S_create(__new_size, this->capacity(), __a);

   if (__pos)
     _M_copy(__r->_M_refdata(), _M_data(), __pos);
   if (__how_much)
     _M_copy(__r->_M_refdata() + __pos + __len2,
      _M_data() + __pos + __len1, __how_much);

   _M_rep()->_M_dispose(__a);
   _M_data(__r->_M_refdata());
 }
      else if (__how_much && __len1 != __len2)
 {

   _M_move(_M_data() + __pos + __len2,
    _M_data() + __pos + __len1, __how_much);
 }
      _M_rep()->_M_set_length_and_sharable(__new_size);
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::
    reserve(size_type __res)
    {
      if (__res != this->capacity() || _M_rep()->_M_is_shared())
        {

   if (__res < this->size())
     __res = this->size();
   const allocator_type __a = get_allocator();
   _CharT* __tmp = _M_rep()->_M_clone(__a, __res - this->size());
   _M_rep()->_M_dispose(__a);
   _M_data(__tmp);
        }
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::
    swap(basic_string& __s)
    {
      if (_M_rep()->_M_is_leaked())
 _M_rep()->_M_set_sharable();
      if (__s._M_rep()->_M_is_leaked())
 __s._M_rep()->_M_set_sharable();
      if (this->get_allocator() == __s.get_allocator())
 {
   _CharT* __tmp = _M_data();
   _M_data(__s._M_data());
   __s._M_data(__tmp);
 }

      else
 {
   const basic_string __tmp1(_M_ibegin(), _M_iend(),
        __s.get_allocator());
   const basic_string __tmp2(__s._M_ibegin(), __s._M_iend(),
        this->get_allocator());
   *this = __tmp2;
   __s = __tmp1;
 }
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::_Rep*
    basic_string<_CharT, _Traits, _Alloc>::_Rep::
    _S_create(size_type __capacity, size_type __old_capacity,
       const _Alloc& __alloc)
    {


      if (__capacity > _S_max_size)
 __throw_length_error(("basic_string::_S_create"));
# 558 "/usr/include/c++/4.0.0/bits/basic_string.tcc" 3
      const size_type __pagesize = 4096;
      const size_type __malloc_header_size = 4 * sizeof(void*);







      if (__capacity > __old_capacity && __capacity < 2 * __old_capacity)
 __capacity = 2 * __old_capacity;




      size_type __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);

      const size_type __adj_size = __size + __malloc_header_size;
      if (__adj_size > __pagesize && __capacity > __old_capacity)
 {
   const size_type __extra = __pagesize - __adj_size % __pagesize;
   __capacity += __extra / sizeof(_CharT);

   if (__capacity > _S_max_size)
     __capacity = _S_max_size;
   __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);
 }



      void* __place = _Raw_bytes_alloc(__alloc).allocate(__size);
      _Rep *__p = new (__place) _Rep;
      __p->_M_capacity = __capacity;
      return __p;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    _CharT*
    basic_string<_CharT, _Traits, _Alloc>::_Rep::
    _M_clone(const _Alloc& __alloc, size_type __res)
    {

      const size_type __requested_cap = this->_M_length + __res;
      _Rep* __r = _Rep::_S_create(__requested_cap, this->_M_capacity,
      __alloc);
      if (this->_M_length)
 _M_copy(__r->_M_refdata(), _M_refdata(), this->_M_length);

      __r->_M_set_length_and_sharable(this->_M_length);
      return __r->_M_refdata();
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::
    resize(size_type __n, _CharT __c)
    {
      const size_type __size = this->size();
      _M_check_length(__size, __n, "basic_string::resize");
      if (__size < __n)
 this->append(__n - __size, __c);
      else if (__n < __size)
 this->erase(__n);

    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    template<typename _InputIterator>
      basic_string<_CharT, _Traits, _Alloc>&
      basic_string<_CharT, _Traits, _Alloc>::
      _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1,
     _InputIterator __k2, __false_type)
      {
 const basic_string __s(__k1, __k2);
 const size_type __n1 = __i2 - __i1;
 _M_check_length(__n1, __s.size(), "basic_string::_M_replace_dispatch");
 return _M_replace_safe(__i1 - _M_ibegin(), __n1, __s._M_data(),
          __s.size());
      }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
     _CharT __c)
    {
      _M_check_length(__n1, __n2, "basic_string::_M_replace_aux");
      _M_mutate(__pos1, __n1, __n2);
      if (__n2)
 _M_assign(_M_data() + __pos1, __n2, __c);
      return *this;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    _M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s,
      size_type __n2)
    {
      _M_mutate(__pos1, __n1, __n2);
      if (__n2)
 _M_copy(_M_data() + __pos1, __s, __n2);
      return *this;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>
    operator+(const _CharT* __lhs,
       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    {
      ;
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
      typedef typename __string_type::size_type __size_type;
      const __size_type __len = _Traits::length(__lhs);
      __string_type __str;
      __str.reserve(__len + __rhs.size());
      __str.append(__lhs, __len);
      __str.append(__rhs);
      return __str;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>
    operator+(_CharT __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    {
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
      typedef typename __string_type::size_type __size_type;
      __string_type __str;
      const __size_type __len = __rhs.size();
      __str.reserve(__len + 1);
      __str.append(__size_type(1), __lhs);
      __str.append(__rhs);
      return __str;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    copy(_CharT* __s, size_type __n, size_type __pos) const
    {
      _M_check(__pos, "basic_string::copy");
      __n = _M_limit(__pos, __n);
      ;
      if (__n)
 _M_copy(__s, _M_data() + __pos, __n);

      return __n;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find(const _CharT* __s, size_type __pos, size_type __n) const
    {
      ;
      size_type __ret = npos;
      const size_type __size = this->size();
      if (__pos + __n <= __size)
 {
   const _CharT* __data = _M_data();
   const _CharT* __p = std::search(__data + __pos, __data + __size,
       __s, __s + __n, traits_type::eq);
   if (__p != __data + __size || __n == 0)
     __ret = __p - __data;
 }
      return __ret;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find(_CharT __c, size_type __pos) const
    {
      size_type __ret = npos;
      const size_type __size = this->size();
      if (__pos < __size)
 {
   const _CharT* __data = _M_data();
   const size_type __n = __size - __pos;
   const _CharT* __p = traits_type::find(__data + __pos, __n, __c);
   if (__p)
     __ret = __p - __data;
 }
      return __ret;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    rfind(const _CharT* __s, size_type __pos, size_type __n) const
    {
      ;
      const size_type __size = this->size();
      if (__n <= __size)
 {
   __pos = std::min(size_type(__size - __n), __pos);
   const _CharT* __data = _M_data();
   do
     {
       if (traits_type::compare(__data + __pos, __s, __n) == 0)
  return __pos;
     }
   while (__pos-- > 0);
 }
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    rfind(_CharT __c, size_type __pos) const
    {
      size_type __size = this->size();
      if (__size)
 {
   if (--__size > __pos)
     __size = __pos;
   for (++__size; __size-- > 0; )
     if (traits_type::eq(_M_data()[__size], __c))
       return __size;
 }
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
    {
      ;
      for (; __n && __pos < this->size(); ++__pos)
 {
   const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]);
   if (__p)
     return __pos;
 }
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
    {
      ;
      size_type __size = this->size();
      if (__size && __n)
 {
   if (--__size > __pos)
     __size = __pos;
   do
     {
       if (traits_type::find(__s, __n, _M_data()[__size]))
  return __size;
     }
   while (__size-- != 0);
 }
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const
    {
      ;
      for (; __pos < this->size(); ++__pos)
 if (!traits_type::find(__s, __n, _M_data()[__pos]))
   return __pos;
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_first_not_of(_CharT __c, size_type __pos) const
    {
      for (; __pos < this->size(); ++__pos)
 if (!traits_type::eq(_M_data()[__pos], __c))
   return __pos;
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const
    {
      ;
      size_type __size = this->size();
      if (__size)
 {
   if (--__size > __pos)
     __size = __pos;
   do
     {
       if (!traits_type::find(__s, __n, _M_data()[__size]))
  return __size;
     }
   while (__size--);
 }
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_last_not_of(_CharT __c, size_type __pos) const
    {
      size_type __size = this->size();
      if (__size)
 {
   if (--__size > __pos)
     __size = __pos;
   do
     {
       if (!traits_type::eq(_M_data()[__size], __c))
  return __size;
     }
   while (__size--);
 }
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    int
    basic_string<_CharT, _Traits, _Alloc>::
    compare(size_type __pos, size_type __n, const basic_string& __str) const
    {
      _M_check(__pos, "basic_string::compare");
      __n = _M_limit(__pos, __n);
      const size_type __osize = __str.size();
      const size_type __len = std::min(__n, __osize);
      int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len);
      if (!__r)
 __r = __n - __osize;
      return __r;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    int
    basic_string<_CharT, _Traits, _Alloc>::
    compare(size_type __pos1, size_type __n1, const basic_string& __str,
     size_type __pos2, size_type __n2) const
    {
      _M_check(__pos1, "basic_string::compare");
      __str._M_check(__pos2, "basic_string::compare");
      __n1 = _M_limit(__pos1, __n1);
      __n2 = __str._M_limit(__pos2, __n2);
      const size_type __len = std::min(__n1, __n2);
      int __r = traits_type::compare(_M_data() + __pos1,
         __str.data() + __pos2, __len);
      if (!__r)
 __r = __n1 - __n2;
      return __r;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    int
    basic_string<_CharT, _Traits, _Alloc>::
    compare(const _CharT* __s) const
    {
      ;
      const size_type __size = this->size();
      const size_type __osize = traits_type::length(__s);
      const size_type __len = std::min(__size, __osize);
      int __r = traits_type::compare(_M_data(), __s, __len);
      if (!__r)
 __r = __size - __osize;
      return __r;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    int
    basic_string <_CharT, _Traits, _Alloc>::
    compare(size_type __pos, size_type __n1, const _CharT* __s) const
    {
      ;
      _M_check(__pos, "basic_string::compare");
      __n1 = _M_limit(__pos, __n1);
      const size_type __osize = traits_type::length(__s);
      const size_type __len = std::min(__n1, __osize);
      int __r = traits_type::compare(_M_data() + __pos, __s, __len);
      if (!__r)
 __r = __n1 - __osize;
      return __r;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    int
    basic_string <_CharT, _Traits, _Alloc>::
    compare(size_type __pos, size_type __n1, const _CharT* __s,
     size_type __n2) const
    {
      ;
      _M_check(__pos, "basic_string::compare");
      __n1 = _M_limit(__pos, __n1);
      const size_type __len = std::min(__n1, __n2);
      int __r = traits_type::compare(_M_data() + __pos, __s, __len);
      if (!__r)
 __r = __n1 - __n2;
      return __r;
    }





  extern template class basic_string<char>;
  extern template
    basic_istream<char>&
    operator>>(basic_istream<char>&, string&);
  extern template
    basic_ostream<char>&
    operator<<(basic_ostream<char>&, const string&);
  extern template
    basic_istream<char>&
    getline(basic_istream<char>&, string&, char);
  extern template
    basic_istream<char>&
    getline(basic_istream<char>&, string&);


  extern template class basic_string<wchar_t>;
  extern template
    basic_istream<wchar_t>&
    operator>>(basic_istream<wchar_t>&, wstring&);
  extern template
    basic_ostream<wchar_t>&
    operator<<(basic_ostream<wchar_t>&, const wstring&);
  extern template
    basic_istream<wchar_t>&
    getline(basic_istream<wchar_t>&, wstring&, wchar_t);
  extern template
    basic_istream<wchar_t>&
    getline(basic_istream<wchar_t>&, wstring&);


}
# 57 "/usr/include/c++/4.0.0/string" 2 3
# 29 "FusionString.h" 2

# 1 "FusionVector.h" 1
# 26 "FusionVector.h"
       

# 1 "/usr/include/c++/4.0.0/vector" 1 3
# 63 "/usr/include/c++/4.0.0/vector" 3
       
# 64 "/usr/include/c++/4.0.0/vector" 3






# 1 "/usr/include/c++/4.0.0/bits/stl_vector.h" 1 3
# 68 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
namespace std
{





  template<typename _Tp, typename _Alloc>
    struct _Vector_base
    {
      struct _Vector_impl
      : public _Alloc
      {
 _Tp* _M_start;
 _Tp* _M_finish;
 _Tp* _M_end_of_storage;
 _Vector_impl(_Alloc const& __a)
 : _Alloc(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0)
 { }
      };

    public:
      typedef _Alloc allocator_type;

      allocator_type
      get_allocator() const
      { return *static_cast<const _Alloc*>(&this->_M_impl); }

      _Vector_base(const allocator_type& __a)
      : _M_impl(__a)
      { }

      _Vector_base(size_t __n, const allocator_type& __a)
      : _M_impl(__a)
      {
 this->_M_impl._M_start = this->_M_allocate(__n);
 this->_M_impl._M_finish = this->_M_impl._M_start;
 this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
      }

      ~_Vector_base()
      { _M_deallocate(this->_M_impl._M_start, this->_M_impl._M_end_of_storage
        - this->_M_impl._M_start); }

    public:
      _Vector_impl _M_impl;

      _Tp*
      _M_allocate(size_t __n)
      { return _M_impl.allocate(__n); }

      void
      _M_deallocate(_Tp* __p, size_t __n)
      {
 if (__p)
   _M_impl.deallocate(__p, __n);
      }
    };
# 147 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
  template<typename _Tp, typename _Alloc = allocator<_Tp> >
    class vector : protected _Vector_base<_Tp, _Alloc>
    {

     

      typedef _Vector_base<_Tp, _Alloc> _Base;
      typedef vector<_Tp, _Alloc> vector_type;

    public:
      typedef _Tp value_type;
      typedef typename _Alloc::pointer pointer;
      typedef typename _Alloc::const_pointer const_pointer;
      typedef typename _Alloc::reference reference;
      typedef typename _Alloc::const_reference const_reference;
      typedef __gnu_cxx::__normal_iterator<pointer, vector_type> iterator;
      typedef __gnu_cxx::__normal_iterator<const_pointer, vector_type>
      const_iterator;
      typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
      typedef std::reverse_iterator<iterator> reverse_iterator;
      typedef size_t size_type;
      typedef ptrdiff_t difference_type;
      typedef typename _Base::allocator_type allocator_type;

    protected:





      using _Base::_M_allocate;
      using _Base::_M_deallocate;
      using _Base::_M_impl;

    public:





      explicit
      vector(const allocator_type& __a = allocator_type())
      : _Base(__a)
      { }
# 199 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      vector(size_type __n, const value_type& __value,
      const allocator_type& __a = allocator_type())
      : _Base(__n, __a)
      {
 std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
          this->get_allocator());
 this->_M_impl._M_finish = this->_M_impl._M_start + __n;
      }
# 215 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      explicit
      vector(size_type __n)
      : _Base(__n, allocator_type())
      {
 std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, value_type(),
          this->get_allocator());
 this->_M_impl._M_finish = this->_M_impl._M_start + __n;
      }
# 233 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      vector(const vector& __x)
      : _Base(__x.size(), __x.get_allocator())
      { this->_M_impl._M_finish =
   std::__uninitialized_copy_a(__x.begin(), __x.end(),
          this->_M_impl._M_start,
          this->get_allocator());
      }
# 256 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      template<typename _InputIterator>
        vector(_InputIterator __first, _InputIterator __last,
        const allocator_type& __a = allocator_type())
 : _Base(__a)
        {

   typedef typename std::__is_integer<_InputIterator>::__type _Integral;
   _M_initialize_dispatch(__first, __last, _Integral());
 }







      ~vector()
      { std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
        this->get_allocator());
      }
# 285 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      vector&
      operator=(const vector& __x);
# 298 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      void
      assign(size_type __n, const value_type& __val)
      { _M_fill_assign(__n, __val); }
# 314 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      template<typename _InputIterator>
        void
        assign(_InputIterator __first, _InputIterator __last)
        {

   typedef typename std::__is_integer<_InputIterator>::__type _Integral;
   _M_assign_dispatch(__first, __last, _Integral());
 }


      using _Base::get_allocator;







      iterator
      begin()
      { return iterator (this->_M_impl._M_start); }






      const_iterator
      begin() const
      { return const_iterator (this->_M_impl._M_start); }






      iterator
      end()
      { return iterator (this->_M_impl._M_finish); }






      const_iterator
      end() const
      { return const_iterator (this->_M_impl._M_finish); }






      reverse_iterator
      rbegin()
      { return reverse_iterator(end()); }






      const_reverse_iterator
      rbegin() const
      { return const_reverse_iterator(end()); }






      reverse_iterator
      rend()
      { return reverse_iterator(begin()); }






      const_reverse_iterator
      rend() const
      { return const_reverse_iterator(begin()); }



      size_type
      size() const
      { return size_type(end() - begin()); }


      size_type
      max_size() const
      { return size_type(-1) / sizeof(value_type); }
# 421 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      void
      resize(size_type __new_size, const value_type& __x)
      {
 if (__new_size < size())
   erase(begin() + __new_size, end());
 else
   insert(end(), __new_size - size(), __x);
      }
# 440 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      void
      resize(size_type __new_size)
      { resize(__new_size, value_type()); }





      size_type
      capacity() const
      { return size_type(const_iterator(this->_M_impl._M_end_of_storage)
    - begin()); }





      bool
      empty() const
      { return begin() == end(); }
# 478 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      void
      reserve(size_type __n);
# 493 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      reference
      operator[](size_type __n)
      { return *(begin() + __n); }
# 508 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      const_reference
      operator[](size_type __n) const
      { return *(begin() + __n); }

    protected:

      void
      _M_range_check(size_type __n) const
      {
 if (__n >= this->size())
   __throw_out_of_range(("vector::_M_range_check"));
      }

    public:
# 533 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      reference
      at(size_type __n)
      {
 _M_range_check(__n);
 return (*this)[__n];
      }
# 551 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      const_reference
      at(size_type __n) const
      {
 _M_range_check(__n);
 return (*this)[__n];
      }





      reference
      front()
      { return *begin(); }





      const_reference
      front() const
      { return *begin(); }





      reference
      back()
      { return *(end() - 1); }





      const_reference
      back() const
      { return *(end() - 1); }
# 601 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      void
      push_back(const value_type& __x)
      {
 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
   {
     this->_M_impl.construct(this->_M_impl._M_finish, __x);
     ++this->_M_impl._M_finish;
   }
 else
   _M_insert_aux(end(), __x);
      }
# 622 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      void
      pop_back()
      {
 --this->_M_impl._M_finish;
 this->_M_impl.destroy(this->_M_impl._M_finish);
      }
# 640 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      iterator
      insert(iterator __position, const value_type& __x);
# 656 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      void
      insert(iterator __position, size_type __n, const value_type& __x)
      { _M_fill_insert(__position, __n, __x); }
# 674 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      template<typename _InputIterator>
        void
        insert(iterator __position, _InputIterator __first,
        _InputIterator __last)
        {

   typedef typename std::__is_integer<_InputIterator>::__type _Integral;
   _M_insert_dispatch(__position, __first, __last, _Integral());
 }
# 699 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      iterator
      erase(iterator __position);
# 720 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      iterator
      erase(iterator __first, iterator __last);
# 732 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
      void
      swap(vector& __x)
      {
 std::swap(this->_M_impl._M_start, __x._M_impl._M_start);
 std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish);
 std::swap(this->_M_impl._M_end_of_storage,
    __x._M_impl._M_end_of_storage);
      }







      void
      clear()
      { erase(begin(), end()); }

    protected:






      template<typename _ForwardIterator>
        pointer
        _M_allocate_and_copy(size_type __n,
        _ForwardIterator __first, _ForwardIterator __last)
        {
   pointer __result = this->_M_allocate(__n);
   try
     {
       std::__uninitialized_copy_a(__first, __last, __result,
       this->get_allocator());
       return __result;
     }
   catch(...)
     {
       _M_deallocate(__result, __n);
       throw;
     }
 }





      template<typename _Integer>
        void
        _M_initialize_dispatch(_Integer __n, _Integer __value, __true_type)
        {
   this->_M_impl._M_start = _M_allocate(__n);
   this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
   std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
     this->get_allocator());
   this->_M_impl._M_finish = this->_M_impl._M_end_of_storage;
 }


      template<typename _InputIterator>
        void
        _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
          __false_type)
        {
   typedef typename iterator_traits<_InputIterator>::iterator_category
     _IterCategory;
   _M_range_initialize(__first, __last, _IterCategory());
 }


      template<typename _InputIterator>
        void
        _M_range_initialize(_InputIterator __first,
       _InputIterator __last, input_iterator_tag)
        {
   for (; __first != __last; ++__first)
     push_back(*__first);
 }


      template<typename _ForwardIterator>
        void
        _M_range_initialize(_ForwardIterator __first,
       _ForwardIterator __last, forward_iterator_tag)
        {
   const size_type __n = std::distance(__first, __last);
   this->_M_impl._M_start = this->_M_allocate(__n);
   this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
   this->_M_impl._M_finish =
     std::__uninitialized_copy_a(__first, __last,
     this->_M_impl._M_start,
     this->get_allocator());
 }






      template<typename _Integer>
        void
        _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
        {
   _M_fill_assign(static_cast<size_type>(__n),
    static_cast<value_type>(__val));
 }


      template<typename _InputIterator>
        void
        _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
      __false_type)
        {
   typedef typename iterator_traits<_InputIterator>::iterator_category
     _IterCategory;
   _M_assign_aux(__first, __last, _IterCategory());
 }


      template<typename _InputIterator>
        void
        _M_assign_aux(_InputIterator __first, _InputIterator __last,
        input_iterator_tag);


      template<typename _ForwardIterator>
        void
        _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
        forward_iterator_tag);



      void
      _M_fill_assign(size_type __n, const value_type& __val);





      template<typename _Integer>
        void
        _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val,
      __true_type)
        {
   _M_fill_insert(__pos, static_cast<size_type>(__n),
    static_cast<value_type>(__val));
 }


      template<typename _InputIterator>
        void
        _M_insert_dispatch(iterator __pos, _InputIterator __first,
      _InputIterator __last, __false_type)
        {
   typedef typename iterator_traits<_InputIterator>::iterator_category
     _IterCategory;
   _M_range_insert(__pos, __first, __last, _IterCategory());
 }


      template<typename _InputIterator>
        void
        _M_range_insert(iterator __pos, _InputIterator __first,
   _InputIterator __last, input_iterator_tag);


      template<typename _ForwardIterator>
        void
        _M_range_insert(iterator __pos, _ForwardIterator __first,
   _ForwardIterator __last, forward_iterator_tag);



      void
      _M_fill_insert(iterator __pos, size_type __n, const value_type& __x);


      void
      _M_insert_aux(iterator __position, const value_type& __x);
    };
# 926 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
  template<typename _Tp, typename _Alloc>
    inline bool
    operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
    { return (__x.size() == __y.size()
       && std::equal(__x.begin(), __x.end(), __y.begin())); }
# 943 "/usr/include/c++/4.0.0/bits/stl_vector.h" 3
  template<typename _Tp, typename _Alloc>
    inline bool
    operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
    { return std::lexicographical_compare(__x.begin(), __x.end(),
       __y.begin(), __y.end()); }


  template<typename _Tp, typename _Alloc>
    inline bool
    operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
    { return !(__x == __y); }


  template<typename _Tp, typename _Alloc>
    inline bool
    operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
    { return __y < __x; }


  template<typename _Tp, typename _Alloc>
    inline bool
    operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
    { return !(__y < __x); }


  template<typename _Tp, typename _Alloc>
    inline bool
    operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
    { return !(__x < __y); }


  template<typename _Tp, typename _Alloc>
    inline void
    swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y)
    { __x.swap(__y); }
}
# 71 "/usr/include/c++/4.0.0/vector" 2 3
# 1 "/usr/include/c++/4.0.0/bits/stl_bvector.h" 1 3
# 64 "/usr/include/c++/4.0.0/bits/stl_bvector.h" 3
namespace std
{
  typedef unsigned long _Bit_type;
  enum { _S_word_bit = int(8 * sizeof(_Bit_type)) };

  struct _Bit_reference
  {
    _Bit_type * _M_p;
    _Bit_type _M_mask;

    _Bit_reference(_Bit_type * __x, _Bit_type __y)
    : _M_p(__x), _M_mask(__y) { }

    _Bit_reference() : _M_p(0), _M_mask(0) { }

    operator bool() const
    { return !!(*_M_p & _M_mask); }

    _Bit_reference&
    operator=(bool __x)
    {
      if (__x)
 *_M_p |= _M_mask;
      else
 *_M_p &= ~_M_mask;
      return *this;
    }

    _Bit_reference&
    operator=(const _Bit_reference& __x)
    { return *this = bool(__x); }

    bool
    operator==(const _Bit_reference& __x) const
    { return bool(*this) == bool(__x); }

    bool
    operator<(const _Bit_reference& __x) const
    { return !bool(*this) && bool(__x); }

    void
    flip()
    { *_M_p ^= _M_mask; }
  };

  struct _Bit_iterator_base : public iterator<random_access_iterator_tag, bool>
  {
    _Bit_type * _M_p;
    unsigned int _M_offset;

    _Bit_iterator_base(_Bit_type * __x, unsigned int __y)
    : _M_p(__x), _M_offset(__y) { }

    void
    _M_bump_up()
    {
      if (_M_offset++ == _S_word_bit - 1)
 {
   _M_offset = 0;
   ++_M_p;
 }
    }

    void
    _M_bump_down()
    {
      if (_M_offset-- == 0)
 {
   _M_offset = _S_word_bit - 1;
   --_M_p;
 }
    }

    void
    _M_incr(ptrdiff_t __i)
    {
      difference_type __n = __i + _M_offset;
      _M_p += __n / _S_word_bit;
      __n = __n % _S_word_bit;
      if (__n < 0)
 {
   _M_offset = static_cast<unsigned int>(__n + _S_word_bit);
   --_M_p;
 }
      else
 _M_offset = static_cast<unsigned int>(__n);
    }

    bool
    operator==(const _Bit_iterator_base& __i) const
    { return _M_p == __i._M_p && _M_offset == __i._M_offset; }

    bool
    operator<(const _Bit_iterator_base& __i) const
    {
      return _M_p < __i._M_p
      || (_M_p == __i._M_p && _M_offset < __i._M_offset);
    }

    bool
    operator!=(const _Bit_iterator_base& __i) const
    { return !(*this == __i); }

    bool
    operator>(const _Bit_iterator_base& __i) const
    { return __i < *this; }

    bool
    operator<=(const _Bit_iterator_base& __i) const
    { return !(__i < *this); }

    bool
    operator>=(const _Bit_iterator_base& __i) const
    { return !(*this < __i); }
  };

  inline ptrdiff_t
  operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
  {
    return _S_word_bit * (__x._M_p - __y._M_p) + __x._M_offset - __y._M_offset;
  }

  struct _Bit_iterator : public _Bit_iterator_base
  {
    typedef _Bit_reference reference;
    typedef _Bit_reference* pointer;
    typedef _Bit_iterator iterator;

    _Bit_iterator() : _Bit_iterator_base(0, 0) { }

    _Bit_iterator(_Bit_type * __x, unsigned int __y)
    : _Bit_iterator_base(__x, __y) { }

    reference
    operator*() const
    { return reference(_M_p, 1UL << _M_offset); }

    iterator&
    operator++()
    {
      _M_bump_up();
      return *this;
    }

    iterator
    operator++(int)
    {
      iterator __tmp = *this;
      _M_bump_up();
      return __tmp;
    }

    iterator&
    operator--()
    {
      _M_bump_down();
      return *this;
    }

    iterator
    operator--(int)
    {
      iterator __tmp = *this;
      _M_bump_down();
      return __tmp;
    }

    iterator&
    operator+=(difference_type __i)
    {
      _M_incr(__i);
      return *this;
    }

    iterator&
    operator-=(difference_type __i)
    {
      *this += -__i;
      return *this;
    }

    iterator
    operator+(difference_type __i) const
    {
      iterator __tmp = *this;
      return __tmp += __i;
    }

    iterator
    operator-(difference_type __i) const
    {
      iterator __tmp = *this;
      return __tmp -= __i;
    }

    reference
    operator[](difference_type __i)
    { return *(*this + __i); }
  };

  inline _Bit_iterator
  operator+(ptrdiff_t __n, const _Bit_iterator& __x)
  { return __x + __n; }

  struct _Bit_const_iterator : public _Bit_iterator_base
  {
    typedef bool reference;
    typedef bool const_reference;
    typedef const bool* pointer;
    typedef _Bit_const_iterator const_iterator;

    _Bit_const_iterator() : _Bit_iterator_base(0, 0) { }

    _Bit_const_iterator(_Bit_type * __x, unsigned int __y)
    : _Bit_iterator_base(__x, __y) { }

    _Bit_const_iterator(const _Bit_iterator& __x)
    : _Bit_iterator_base(__x._M_p, __x._M_offset) { }

    const_reference
    operator*() const
    { return _Bit_reference(_M_p, 1UL << _M_offset); }

    const_iterator&
    operator++()
    {
      _M_bump_up();
      return *this;
    }

    const_iterator
    operator++(int)
    {
      const_iterator __tmp = *this;
      _M_bump_up();
      return __tmp;
    }

    const_iterator&
    operator--()
    {
      _M_bump_down();
      return *this;
    }

    const_iterator
    operator--(int)
    {
      const_iterator __tmp = *this;
      _M_bump_down();
      return __tmp;
    }

    const_iterator&
    operator+=(difference_type __i)
    {
      _M_incr(__i);
      return *this;
    }

    const_iterator&
    operator-=(difference_type __i)
    {
      *this += -__i;
      return *this;
    }

    const_iterator
    operator+(difference_type __i) const
    {
      const_iterator __tmp = *this;
      return __tmp += __i;
    }

    const_iterator
    operator-(difference_type __i) const
    {
      const_iterator __tmp = *this;
      return __tmp -= __i;
    }

    const_reference
    operator[](difference_type __i)
    { return *(*this + __i); }
  };

  inline _Bit_const_iterator
  operator+(ptrdiff_t __n, const _Bit_const_iterator& __x)
  { return __x + __n; }

  template<class _Alloc>
    class _Bvector_base
    {
      typedef typename _Alloc::template rebind<_Bit_type>::other
        _Bit_alloc_type;

      struct _Bvector_impl : public _Bit_alloc_type
      {
 _Bit_iterator _M_start;
 _Bit_iterator _M_finish;
 _Bit_type* _M_end_of_storage;
 _Bvector_impl(const _Bit_alloc_type& __a)
 : _Bit_alloc_type(__a), _M_start(), _M_finish(), _M_end_of_storage(0)
 { }
      };

    public:
      typedef _Alloc allocator_type;

      allocator_type
      get_allocator() const
      { return *static_cast<const _Bit_alloc_type*>(&this->_M_impl); }

      _Bvector_base(const allocator_type& __a) : _M_impl(__a) { }

      ~_Bvector_base()
      { this->_M_deallocate(); }

    protected:
      _Bvector_impl _M_impl;

      _Bit_type*
      _M_allocate(size_t __n)
      { return _M_impl.allocate((__n + _S_word_bit - 1) / _S_word_bit); }

      void
      _M_deallocate()
      {
 if (_M_impl._M_start._M_p)
   _M_impl.deallocate(_M_impl._M_start._M_p,
        _M_impl._M_end_of_storage - _M_impl._M_start._M_p);
      }
    };
}




namespace std
{
# 422 "/usr/include/c++/4.0.0/bits/stl_bvector.h" 3
template<typename _Alloc>
  class vector<bool, _Alloc> : public _Bvector_base<_Alloc>
  {
  public:
    typedef bool value_type;
    typedef size_t size_type;
    typedef ptrdiff_t difference_type;
    typedef _Bit_reference reference;
    typedef bool const_reference;
    typedef _Bit_reference* pointer;
    typedef const bool* const_pointer;

    typedef _Bit_iterator iterator;
    typedef _Bit_const_iterator const_iterator;

    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
    typedef std::reverse_iterator<iterator> reverse_iterator;

    typedef typename _Bvector_base<_Alloc>::allocator_type allocator_type;

    allocator_type get_allocator() const
    { return _Bvector_base<_Alloc>::get_allocator(); }

  protected:
    using _Bvector_base<_Alloc>::_M_allocate;
    using _Bvector_base<_Alloc>::_M_deallocate;

  protected:
    void
    _M_initialize(size_type __n)
    {
      _Bit_type* __q = this->_M_allocate(__n);
      this->_M_impl._M_end_of_storage = (__q
      + ((__n + _S_word_bit - 1)
         / _S_word_bit));
      this->_M_impl._M_start = iterator(__q, 0);
      this->_M_impl._M_finish = this->_M_impl._M_start + difference_type(__n);
    }

    void
    _M_insert_aux(iterator __position, bool __x)
    {
      if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_of_storage)
 {
   std::copy_backward(__position, this->_M_impl._M_finish,
        this->_M_impl._M_finish + 1);
   *__position = __x;
   ++this->_M_impl._M_finish;
 }
      else
 {
   const size_type __len = size() ? 2 * size()
                                  : static_cast<size_type>(_S_word_bit);
   _Bit_type * __q = this->_M_allocate(__len);
   iterator __i = std::copy(begin(), __position, iterator(__q, 0));
   *__i++ = __x;
   this->_M_impl._M_finish = std::copy(__position, end(), __i);
   this->_M_deallocate();
   this->_M_impl._M_end_of_storage = (__q + ((__len + _S_word_bit - 1)
          / _S_word_bit));
   this->_M_impl._M_start = iterator(__q, 0);
 }
    }

    template<class _InputIterator>
      void
      _M_initialize_range(_InputIterator __first, _InputIterator __last,
     input_iterator_tag)
      {
 this->_M_impl._M_start = iterator();
 this->_M_impl._M_finish = iterator();
 this->_M_impl._M_end_of_storage = 0;
 for (; __first != __last; ++__first)
   push_back(*__first);
      }

    template<class _ForwardIterator>
      void
      _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last,
     forward_iterator_tag)
      {
 const size_type __n = std::distance(__first, __last);
 _M_initialize(__n);
 std::copy(__first, __last, this->_M_impl._M_start);
      }

    template<class _InputIterator>
      void
      _M_insert_range(iterator __pos, _InputIterator __first,
        _InputIterator __last, input_iterator_tag)
      {
 for (; __first != __last; ++__first)
   {
     __pos = insert(__pos, *__first);
     ++__pos;
   }
      }

    template<class _ForwardIterator>
      void
      _M_insert_range(iterator __position, _ForwardIterator __first,
        _ForwardIterator __last, forward_iterator_tag)
      {
 if (__first != __last)
   {
     size_type __n = std::distance(__first, __last);
     if (capacity() - size() >= __n)
       {
  std::copy_backward(__position, end(),
       this->_M_impl._M_finish
       + difference_type(__n));
  std::copy(__first, __last, __position);
  this->_M_impl._M_finish += difference_type(__n);
       }
     else
       {
  const size_type __len = size() + std::max(size(), __n);
  _Bit_type * __q = this->_M_allocate(__len);
  iterator __i = std::copy(begin(), __position,
      iterator(__q, 0));
  __i = std::copy(__first, __last, __i);
  this->_M_impl._M_finish = std::copy(__position, end(), __i);
  this->_M_deallocate();
  this->_M_impl._M_end_of_storage = (__q
         + ((__len + _S_word_bit - 1)
            / _S_word_bit));
  this->_M_impl._M_start = iterator(__q, 0);
       }
   }
      }

  public:
    iterator
    begin()
    { return this->_M_impl._M_start; }

    const_iterator
    begin() const
    { return this->_M_impl._M_start; }

    iterator
    end()
    { return this->_M_impl._M_finish; }

    const_iterator
    end() const
    { return this->_M_impl._M_finish; }

    reverse_iterator
    rbegin()
    { return reverse_iterator(end()); }

    const_reverse_iterator
    rbegin() const
    { return const_reverse_iterator(end()); }

    reverse_iterator
    rend()
    { return reverse_iterator(begin()); }

    const_reverse_iterator
    rend() const
    { return const_reverse_iterator(begin()); }

    size_type
    size() const
    { return size_type(end() - begin()); }

    size_type
    max_size() const
    { return size_type(-1); }

    size_type
    capacity() const
    { return size_type(const_iterator(this->_M_impl._M_end_of_storage, 0)
         - begin()); }
    bool
    empty() const
    { return begin() == end(); }

    reference
    operator[](size_type __n)
    { return *(begin() + difference_type(__n)); }

    const_reference
    operator[](size_type __n) const
    { return *(begin() + difference_type(__n)); }

    void
    _M_range_check(size_type __n) const
    {
      if (__n >= this->size())
        __throw_out_of_range(("vector<bool>::_M_range_check"));
    }

    reference
    at(size_type __n)
    { _M_range_check(__n); return (*this)[__n]; }

    const_reference
    at(size_type __n) const
    { _M_range_check(__n); return (*this)[__n]; }

    explicit
    vector(const allocator_type& __a = allocator_type())
    : _Bvector_base<_Alloc>(__a) { }

    vector(size_type __n, bool __value,
    const allocator_type& __a = allocator_type())
    : _Bvector_base<_Alloc>(__a)
    {
      _M_initialize(__n);
      std::fill(this->_M_impl._M_start._M_p, this->_M_impl._M_end_of_storage,
  __value ? ~0 : 0);
    }

    explicit
    vector(size_type __n)
    : _Bvector_base<_Alloc>(allocator_type())
    {
      _M_initialize(__n);
      std::fill(this->_M_impl._M_start._M_p,
  this->_M_impl._M_end_of_storage, 0);
    }

    vector(const vector& __x)
    : _Bvector_base<_Alloc>(__x.get_allocator())
    {
      _M_initialize(__x.size());
      std::copy(__x.begin(), __x.end(), this->_M_impl._M_start);
    }


    template<class _Integer>
      void
      _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type)
      {
 _M_initialize(__n);
 std::fill(this->_M_impl._M_start._M_p,
    this->_M_impl._M_end_of_storage, __x ? ~0 : 0);
      }

    template<class _InputIterator>
      void
      _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
        __false_type)
      { _M_initialize_range(__first, __last,
       std::__iterator_category(__first)); }

    template<class _InputIterator>
      vector(_InputIterator __first, _InputIterator __last,
      const allocator_type& __a = allocator_type())
      : _Bvector_base<_Alloc>(__a)
      {
 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
 _M_initialize_dispatch(__first, __last, _Integral());
      }

    ~vector() { }

    vector&
    operator=(const vector& __x)
    {
      if (&__x == this)
 return *this;
      if (__x.size() > capacity())
 {
   this->_M_deallocate();
   _M_initialize(__x.size());
 }
      std::copy(__x.begin(), __x.end(), begin());
      this->_M_impl._M_finish = begin() + difference_type(__x.size());
      return *this;
    }






    void
    _M_fill_assign(size_t __n, bool __x)
    {
      if (__n > size())
 {
   std::fill(this->_M_impl._M_start._M_p,
      this->_M_impl._M_end_of_storage, __x ? ~0 : 0);
   insert(end(), __n - size(), __x);
 }
      else
 {
   erase(begin() + __n, end());
   std::fill(this->_M_impl._M_start._M_p,
      this->_M_impl._M_end_of_storage, __x ? ~0 : 0);
 }
    }

    void
    assign(size_t __n, bool __x)
    { _M_fill_assign(__n, __x); }

    template<class _InputIterator>
      void
      assign(_InputIterator __first, _InputIterator __last)
      {
 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
 _M_assign_dispatch(__first, __last, _Integral());
      }

    template<class _Integer>
      void
      _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
      { _M_fill_assign((size_t) __n, (bool) __val); }

    template<class _InputIterator>
      void
      _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
    __false_type)
      { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }

    template<class _InputIterator>
      void
      _M_assign_aux(_InputIterator __first, _InputIterator __last,
      input_iterator_tag)
      {
 iterator __cur = begin();
 for (; __first != __last && __cur != end(); ++__cur, ++__first)
   *__cur = *__first;
 if (__first == __last)
   erase(__cur, end());
 else
   insert(end(), __first, __last);
      }

    template<class _ForwardIterator>
      void
      _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
      forward_iterator_tag)
      {
 const size_type __len = std::distance(__first, __last);
 if (__len < size())
   erase(std::copy(__first, __last, begin()), end());
 else
   {
     _ForwardIterator __mid = __first;
     std::advance(__mid, size());
     std::copy(__first, __mid, begin());
     insert(end(), __mid, __last);
   }
      }

    void
    reserve(size_type __n)
    {
      if (__n > this->max_size())
 __throw_length_error(("vector::reserve"));
      if (this->capacity() < __n)
 {
   _Bit_type* __q = this->_M_allocate(__n);
   this->_M_impl._M_finish = std::copy(begin(), end(),
           iterator(__q, 0));
   this->_M_deallocate();
   this->_M_impl._M_start = iterator(__q, 0);
   this->_M_impl._M_end_of_storage = (__q + (__n + _S_word_bit - 1)
          / _S_word_bit);
 }
    }

    reference
    front()
    { return *begin(); }

    const_reference
    front() const
    { return *begin(); }

    reference
    back()
    { return *(end() - 1); }

    const_reference
    back() const
    { return *(end() - 1); }

    void
    push_back(bool __x)
    {
      if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_of_storage)
        *this->_M_impl._M_finish++ = __x;
      else
        _M_insert_aux(end(), __x);
    }

    void
    swap(vector<bool, _Alloc>& __x)
    {
      std::swap(this->_M_impl._M_start, __x._M_impl._M_start);
      std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish);
      std::swap(this->_M_impl._M_end_of_storage,
  __x._M_impl._M_end_of_storage);
    }


    static void
    swap(reference __x, reference __y)
    {
      bool __tmp = __x;
      __x = __y;
      __y = __tmp;
    }

    iterator
    insert(iterator __position, bool __x = bool())
    {
      const difference_type __n = __position - begin();
      if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_of_storage
   && __position == end())
        *this->_M_impl._M_finish++ = __x;
      else
        _M_insert_aux(__position, __x);
      return begin() + __n;
    }



    template<class _Integer>
      void
      _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,
    __true_type)
      { _M_fill_insert(__pos, __n, __x); }

    template<class _InputIterator>
      void
      _M_insert_dispatch(iterator __pos,
    _InputIterator __first, _InputIterator __last,
    __false_type)
      { _M_insert_range(__pos, __first, __last,
   std::__iterator_category(__first)); }

    template<class _InputIterator>
      void
      insert(iterator __position,
      _InputIterator __first, _InputIterator __last)
      {
 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
 _M_insert_dispatch(__position, __first, __last, _Integral());
      }

    void
    _M_fill_insert(iterator __position, size_type __n, bool __x)
    {
      if (__n == 0)
 return;
      if (capacity() - size() >= __n)
 {
   std::copy_backward(__position, end(),
        this->_M_impl._M_finish + difference_type(__n));
   std::fill(__position, __position + difference_type(__n), __x);
   this->_M_impl._M_finish += difference_type(__n);
 }
      else
 {
   const size_type __len = size() + std::max(size(), __n);
   _Bit_type * __q = this->_M_allocate(__len);
   iterator __i = std::copy(begin(), __position, iterator(__q, 0));
   std::fill_n(__i, __n, __x);
   this->_M_impl._M_finish = std::copy(__position, end(),
           __i + difference_type(__n));
   this->_M_deallocate();
   this->_M_impl._M_end_of_storage = (__q + ((__len + _S_word_bit - 1)
          / _S_word_bit));
   this->_M_impl._M_start = iterator(__q, 0);
 }
    }

    void
    insert(iterator __position, size_type __n, bool __x)
    { _M_fill_insert(__position, __n, __x); }

    void
    pop_back()
    { --this->_M_impl._M_finish; }

    iterator
    erase(iterator __position)
    {
      if (__position + 1 != end())
        std::copy(__position + 1, end(), __position);
      --this->_M_impl._M_finish;
      return __position;
    }

    iterator
    erase(iterator __first, iterator __last)
    {
      this->_M_impl._M_finish = std::copy(__last, end(), __first);
      return __first;
    }

    void
    resize(size_type __new_size, bool __x = bool())
    {
      if (__new_size < size())
        erase(begin() + difference_type(__new_size), end());
      else
        insert(end(), __new_size - size(), __x);
    }

    void
    flip()
    {
      for (_Bit_type * __p = this->_M_impl._M_start._M_p;
    __p != this->_M_impl._M_end_of_storage; ++__p)
        *__p = ~*__p;
    }

    void
    clear()
    { erase(begin(), end()); }
  };
}
# 72 "/usr/include/c++/4.0.0/vector" 2 3


# 1 "/usr/include/c++/4.0.0/bits/vector.tcc" 1 3
# 64 "/usr/include/c++/4.0.0/bits/vector.tcc" 3
namespace std
{
  template<typename _Tp, typename _Alloc>
    void
    vector<_Tp, _Alloc>::
    reserve(size_type __n)
    {
      if (__n > this->max_size())
 __throw_length_error(("vector::reserve"));
      if (this->capacity() < __n)
 {
   const size_type __old_size = size();
   pointer __tmp = _M_allocate_and_copy(__n,
            this->_M_impl._M_start,
            this->_M_impl._M_finish);
   std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
   this->get_allocator());
   _M_deallocate(this->_M_impl._M_start,
   this->_M_impl._M_end_of_storage
   - this->_M_impl._M_start);
   this->_M_impl._M_start = __tmp;
   this->_M_impl._M_finish = __tmp + __old_size;
   this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
 }
    }

  template<typename _Tp, typename _Alloc>
    typename vector<_Tp, _Alloc>::iterator
    vector<_Tp, _Alloc>::
    insert(iterator __position, const value_type& __x)
    {
      const size_type __n = __position - begin();
      if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage
   && __position == end())
 {
   this->_M_impl.construct(this->_M_impl._M_finish, __x);
   ++this->_M_impl._M_finish;
 }
      else
        _M_insert_aux(__position, __x);
      return begin() + __n;
    }

  template<typename _Tp, typename _Alloc>
    typename vector<_Tp, _Alloc>::iterator
    vector<_Tp, _Alloc>::
    erase(iterator __position)
    {
      if (__position + 1 != end())
        std::copy(__position + 1, end(), __position);
      --this->_M_impl._M_finish;
      this->_M_impl.destroy(this->_M_impl._M_finish);
      return __position;
    }

  template<typename _Tp, typename _Alloc>
    typename vector<_Tp, _Alloc>::iterator
    vector<_Tp, _Alloc>::
    erase(iterator __first, iterator __last)
    {
      iterator __i(std::copy(__last, end(), __first));
      std::_Destroy(__i, end(), this->get_allocator());
      this->_M_impl._M_finish = this->_M_impl._M_finish - (__last - __first);
      return __first;
    }

  template<typename _Tp, typename _Alloc>
    vector<_Tp, _Alloc>&
    vector<_Tp, _Alloc>::
    operator=(const vector<_Tp, _Alloc>& __x)
    {
      if (&__x != this)
 {
   const size_type __xlen = __x.size();
   if (__xlen > capacity())
     {
       pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(),
         __x.end());
       std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
       this->get_allocator());
       _M_deallocate(this->_M_impl._M_start,
       this->_M_impl._M_end_of_storage
       - this->_M_impl._M_start);
       this->_M_impl._M_start = __tmp;
       this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __xlen;
     }
   else if (size() >= __xlen)
     {
       iterator __i(std::copy(__x.begin(), __x.end(), begin()));
       std::_Destroy(__i, end(), this->get_allocator());
     }
   else
     {
       std::copy(__x.begin(), __x.begin() + size(),
   this->_M_impl._M_start);
       std::__uninitialized_copy_a(__x.begin() + size(),
       __x.end(), this->_M_impl._M_finish,
       this->get_allocator());
     }
   this->_M_impl._M_finish = this->_M_impl._M_start + __xlen;
 }
      return *this;
    }

  template<typename _Tp, typename _Alloc>
    void
    vector<_Tp, _Alloc>::
    _M_fill_assign(size_t __n, const value_type& __val)
    {
      if (__n > capacity())
 {
   vector __tmp(__n, __val, get_allocator());
   __tmp.swap(*this);
 }
      else if (__n > size())
 {
   std::fill(begin(), end(), __val);
   std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
     __n - size(), __val,
     this->get_allocator());
   this->_M_impl._M_finish += __n - size();
 }
      else
        erase(fill_n(begin(), __n, __val), end());
    }

  template<typename _Tp, typename _Alloc>
    template<typename _InputIterator>
      void
      vector<_Tp, _Alloc>::
      _M_assign_aux(_InputIterator __first, _InputIterator __last,
      input_iterator_tag)
      {
 iterator __cur(begin());
 for (; __first != __last && __cur != end(); ++__cur, ++__first)
   *__cur = *__first;
 if (__first == __last)
   erase(__cur, end());
 else
   insert(end(), __first, __last);
      }

  template<typename _Tp, typename _Alloc>
    template<typename _ForwardIterator>
      void
      vector<_Tp, _Alloc>::
      _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
      forward_iterator_tag)
      {
 const size_type __len = std::distance(__first, __last);

 if (__len > capacity())
   {
     pointer __tmp(_M_allocate_and_copy(__len, __first, __last));
     std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
     this->get_allocator());
     _M_deallocate(this->_M_impl._M_start,
     this->_M_impl._M_end_of_storage
     - this->_M_impl._M_start);
     this->_M_impl._M_start = __tmp;
     this->_M_impl._M_finish = this->_M_impl._M_start + __len;
     this->_M_impl._M_end_of_storage = this->_M_impl._M_finish;
   }
 else if (size() >= __len)
   {
     iterator __new_finish(std::copy(__first, __last,
           this->_M_impl._M_start));
     std::_Destroy(__new_finish, end(), this->get_allocator());
     this->_M_impl._M_finish = __new_finish.base();
   }
 else
   {
     _ForwardIterator __mid = __first;
     std::advance(__mid, size());
     std::copy(__first, __mid, this->_M_impl._M_start);
     this->_M_impl._M_finish =
       std::__uninitialized_copy_a(__mid, __last,
       this->_M_impl._M_finish,
       this->get_allocator());
   }
      }

  template<typename _Tp, typename _Alloc>
    void
    vector<_Tp, _Alloc>::
    _M_insert_aux(iterator __position, const _Tp& __x)
    {
      if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
 {
   this->_M_impl.construct(this->_M_impl._M_finish,
      *(this->_M_impl._M_finish - 1));
   ++this->_M_impl._M_finish;
   _Tp __x_copy = __x;
   std::copy_backward(__position,
        iterator(this->_M_impl._M_finish-2),
        iterator(this->_M_impl._M_finish-1));
   *__position = __x_copy;
 }
      else
 {
   const size_type __old_size = size();
   if (__old_size == this->max_size())
     __throw_length_error(("vector::_M_insert_aux"));




   size_type __len = __old_size != 0 ? 2 * __old_size : 1;
   if (__len < __old_size)
     __len = this->max_size();

   iterator __new_start(this->_M_allocate(__len));
   iterator __new_finish(__new_start);
   try
     {
       __new_finish =
  std::__uninitialized_copy_a(iterator(this->_M_impl._M_start),
         __position,
         __new_start,
         this->get_allocator());
       this->_M_impl.construct(__new_finish.base(), __x);
       ++__new_finish;
       __new_finish =
  std::__uninitialized_copy_a(__position,
         iterator(this->_M_impl._M_finish),
         __new_finish,
         this->get_allocator());
     }
   catch(...)
     {
       std::_Destroy(__new_start, __new_finish, this->get_allocator());
       _M_deallocate(__new_start.base(),__len);
       throw;
     }
   std::_Destroy(begin(), end(), this->get_allocator());
   _M_deallocate(this->_M_impl._M_start,
   this->_M_impl._M_end_of_storage
   - this->_M_impl._M_start);
   this->_M_impl._M_start = __new_start.base();
   this->_M_impl._M_finish = __new_finish.base();
   this->_M_impl._M_end_of_storage = __new_start.base() + __len;
 }
    }

  template<typename _Tp, typename _Alloc>
    void
    vector<_Tp, _Alloc>::
    _M_fill_insert(iterator __position, size_type __n, const value_type& __x)
    {
      if (__n != 0)
 {
   if (size_type(this->_M_impl._M_end_of_storage
   - this->_M_impl._M_finish) >= __n)
     {
       value_type __x_copy = __x;
       const size_type __elems_after = end() - __position;
       iterator __old_finish(this->_M_impl._M_finish);
       if (__elems_after > __n)
  {
    std::__uninitialized_copy_a(this->_M_impl._M_finish - __n,
           this->_M_impl._M_finish,
           this->_M_impl._M_finish,
           this->get_allocator());
    this->_M_impl._M_finish += __n;
    std::copy_backward(__position, __old_finish - __n,
         __old_finish);
    std::fill(__position, __position + __n, __x_copy);
  }
       else
  {
    std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
      __n - __elems_after,
      __x_copy,
      this->get_allocator());
    this->_M_impl._M_finish += __n - __elems_after;
    std::__uninitialized_copy_a(__position, __old_finish,
           this->_M_impl._M_finish,
           this->get_allocator());
    this->_M_impl._M_finish += __elems_after;
    std::fill(__position, __old_finish, __x_copy);
  }
     }
   else
     {
       const size_type __old_size = size();
       if (this->max_size() - __old_size < __n)
  __throw_length_error(("vector::_M_fill_insert"));


       size_type __len = __old_size + std::max(__old_size, __n);
       if (__len < __old_size)
  __len = this->max_size();

       iterator __new_start(this->_M_allocate(__len));
       iterator __new_finish(__new_start);
       try
  {
    __new_finish =
      std::__uninitialized_copy_a(begin(), __position,
      __new_start,
      this->get_allocator());
    std::__uninitialized_fill_n_a(__new_finish, __n, __x,
      this->get_allocator());
    __new_finish += __n;
    __new_finish =
      std::__uninitialized_copy_a(__position, end(), __new_finish,
      this->get_allocator());
  }
       catch(...)
  {
    std::_Destroy(__new_start, __new_finish,
    this->get_allocator());
    _M_deallocate(__new_start.base(), __len);
    throw;
  }
       std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
       this->get_allocator());
       _M_deallocate(this->_M_impl._M_start,
       this->_M_impl._M_end_of_storage
       - this->_M_impl._M_start);
       this->_M_impl._M_start = __new_start.base();
       this->_M_impl._M_finish = __new_finish.base();
       this->_M_impl._M_end_of_storage = __new_start.base() + __len;
     }
 }
    }

  template<typename _Tp, typename _Alloc> template<typename _InputIterator>
    void
    vector<_Tp, _Alloc>::
    _M_range_insert(iterator __pos, _InputIterator __first,
      _InputIterator __last, input_iterator_tag)
    {
      for (; __first != __last; ++__first)
 {
   __pos = insert(__pos, *__first);
   ++__pos;
 }
    }

  template<typename _Tp, typename _Alloc>
    template<typename _ForwardIterator>
      void
      vector<_Tp, _Alloc>::
      _M_range_insert(iterator __position, _ForwardIterator __first,
        _ForwardIterator __last, forward_iterator_tag)
      {
 if (__first != __last)
   {
     const size_type __n = std::distance(__first, __last);
     if (size_type(this->_M_impl._M_end_of_storage
     - this->_M_impl._M_finish) >= __n)
       {
  const size_type __elems_after = end() - __position;
  iterator __old_finish(this->_M_impl._M_finish);
  if (__elems_after > __n)
    {
      std::__uninitialized_copy_a(this->_M_impl._M_finish - __n,
      this->_M_impl._M_finish,
      this->_M_impl._M_finish,
      this->get_allocator());
      this->_M_impl._M_finish += __n;
      std::copy_backward(__position, __old_finish - __n,
           __old_finish);
      std::copy(__first, __last, __position);
    }
  else
    {
      _ForwardIterator __mid = __first;
      std::advance(__mid, __elems_after);
      std::__uninitialized_copy_a(__mid, __last,
      this->_M_impl._M_finish,
      this->get_allocator());
      this->_M_impl._M_finish += __n - __elems_after;
      std::__uninitialized_copy_a(__position, __old_finish,
      this->_M_impl._M_finish,
      this->get_allocator());
      this->_M_impl._M_finish += __elems_after;
      std::copy(__first, __mid, __position);
    }
       }
     else
       {
  const size_type __old_size = size();
  if (this->max_size() - __old_size < __n)
    __throw_length_error(("vector::_M_range_insert"));


  size_type __len = __old_size + std::max(__old_size, __n);
  if (__len < __old_size)
    __len = this->max_size();

  iterator __new_start(this->_M_allocate(__len));
  iterator __new_finish(__new_start);
  try
    {
      __new_finish =
        std::__uninitialized_copy_a(iterator(this->_M_impl._M_start),
        __position,
        __new_start,
        this->get_allocator());
      __new_finish =
        std::__uninitialized_copy_a(__first, __last, __new_finish,
        this->get_allocator());
      __new_finish =
        std::__uninitialized_copy_a(__position,
        iterator(this->_M_impl._M_finish),
        __new_finish,
        this->get_allocator());
    }
  catch(...)
    {
      std::_Destroy(__new_start,__new_finish,
      this->get_allocator());
      _M_deallocate(__new_start.base(), __len);
      throw;
    }
  std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
         this->get_allocator());
  _M_deallocate(this->_M_impl._M_start,
         this->_M_impl._M_end_of_storage
         - this->_M_impl._M_start);
  this->_M_impl._M_start = __new_start.base();
  this->_M_impl._M_finish = __new_finish.base();
  this->_M_impl._M_end_of_storage = __new_start.base() + __len;
       }
   }
      }
}
# 75 "/usr/include/c++/4.0.0/vector" 2 3
# 29 "FusionVector.h" 2



namespace Fusion {







 template <class type> class Vector : public std::vector<type> {
 public:
  Vector(uint32_t initialSize = 0)
  { Vector::reserve(initialSize); }

  Vector(const Vector<type>& t) { *this = t; }

  ~Vector() { }

  uint32_t getNum() const { return (uint32_t)Vector::size(); }
  void setNum(uint32_t n) { Vector::resize(n); }
  type& append()
  {
   size_t i = std::vector<type>::size();
   std::vector<type>::resize( i + 1 );
   return std::vector<type>::operator [](i);
  }
  type& append(const type& v)
  {
   int32_t i = (int32_t)std::vector<type>::size();
   std::vector<type>::insert(Vector::end(), v);
   return std::vector<type>::operator [](i);
  }



  void insert(uint32_t i)
  {
   std::vector<type>::insert(Vector::begin()+i, type());
  }
  void insert(uint32_t i, const type& v)
  {
   std::vector<type>::insert(Vector::begin()+i, v);
  }
  void clear()
  {
   std::vector<type>::clear();
  }
  void removeIndex(uint32_t i, uint32_t n=1)
  {
   std::vector<type>::erase(Vector::begin()+i, Vector::begin()+i+n);
  }
  void removeItem(type& v)
  {
   int32_t i = find(v);
   if (i >= 0)
    removeIndex(i);
  }

  void insert(uint32_t i, const Vector<type>& v)
  {
   for (uint32_t n = getNum(); n > 0; ++i, --n)
    insert(i, v[i]);
  }

  Vector<type>& operator =(const Vector<type>& t)
  {
   std::vector<type>::operator =(t);
   return *this;
  }


  type& operator [](uint32_t i)
  {
   return std::vector<type>::operator [](i);
  }

  const type& operator [](uint32_t i) const
  {
   return std::vector<type>::operator [](i);
  }


  int32_t find(const type& val) const
  {
   for (uint32_t i = 0; i < getNum(); ++i) {
    if ((*this)[i] == val)
     return (int32_t) i;
   }
   return -1;
  }

 };

}
# 31 "FusionString.h" 2

namespace Fusion {
# 42 "FusionString.h"
class String : public std::basic_string<char> {
public:

                   String() { }
                   String(const String& str) : std::basic_string<char>(str) { }
                   String(const char* str, int32_t n = -1)
 {
  if (str == __null)
   assign("");
  else if (n < 0)
   assign(str);
  else
   assign(str, n);
 }
 String(const UString& str);
    String(double num, const char *format = __null);

                   ~String() { }

                      int getLength() const { return (int)size(); }
                      const char* getString() const { return data(); }

                   bool isEmpty() const { return getString()[0] == '\0'; }

                      operator const char *() const { return getString(); }
                      operator double() const { return toDouble(); }
                      operator int32_t() const { return toInt32(); }
                      operator uint32_t() const { return toUInt32(); }

                   double toDouble() const
 { uint32_t next; return toDouble(next); }

 double toDouble(uint32_t& next) const;

                   int32_t toInt32(uint32_t radix = 0) const
 { uint32_t next; return toInt32(next, radix); }

 int32_t toInt32(uint32_t& next, uint32_t radix = 0) const;

                   uint32_t toUInt32(uint32_t radix = 0) const
 { uint32_t next; return toUInt32(next, radix); }

 uint32_t toUInt32(uint32_t& next, uint32_t radix = 0) const;

 static bool toLegalNumber(const char* s, double& num);
 static bool toLegalInt32(const char* s, int32_t& num);

                   String & operator =(const String& str)
 {
  using namespace std;
  basic_string<char>::operator =(str);
  return *this;
 }

                   String & operator =(const std::basic_string<char>& str)
 {
  using namespace std;
  basic_string<char>::operator =(str);
  return *this;
 }

                   String & operator =(const char* str)
 {
  using namespace std;
  basic_string<char>::operator =(str ? str : "");
  return *this;
 }

                      String & operator =(double d)
 {
  String s(d);
  *this = s;
  return *this;
 }

                      String & operator +=(const String& str)
 {
  using namespace std;
  basic_string<char>::operator +=(str);
  return *this;
 }

                      String & operator +=(const char* str)
 {
  using namespace std;
  basic_string<char>::operator +=(str);
  return *this;
 }

                   String& append(char c)
 {
  using namespace std;
  basic_string<char>::operator +=(c);
  return *this;
 }

                      char operator [](int i) const
    {
  using namespace std;
  return basic_string<char>::operator [](i);
 }

                      char operator [](uint32_t i) const
    {
  using namespace std;
  return basic_string<char>::operator [](i);
 }

                   friend bool operator ==(const String &str, const char *s) { return s ? (str.compare(s) == 0) : false; }
                   friend bool operator ==(const char *s, const String &str) { return s ? (str.compare(s) == 0) : false; }
                      friend bool operator ==(const String &str1, const String &str2) { return str1.compare(str2.getString()) == 0; }

                   friend bool operator !=(const String &str, const char *s) { return s ? (str.compare(s) != 0) : true; }
                   friend bool operator !=(const char *s, const String &str) { return s ? (str.compare(s) != 0) : true; }
                      friend bool operator !=(const String &str1, const String &str2) { return str1.compare(str2.getString()) != 0; }

                   friend bool operator <(const String &str, const char *s) { return s ? (str.compare(s) < 0) : false; }
                   friend bool operator <(const char *s, const String &str) { return s ? (str.compare(s) > 0) : true; }
                      friend bool operator <(const String &str1, const String &str2) { return str1.compare(str2.getString()) < 0; }

                   friend bool operator <=(const String &str, const char *s) { return s ? (str.compare(s) <= 0) : false; }
                   friend bool operator <=(const char *s, const String &str) { return s ? (str.compare(s) >= 0) : true; }
                      friend bool operator <=(const String &str1, const String &str2) { return str1.compare(str2.getString()) <= 0; }

                   friend bool operator >(const String &str, const char *s) { return s ? (str.compare(s) > 0) : true; }
                   friend bool operator >(const char *s, const String &str) { return s ? (str.compare(s) < 0) : false; }
                      friend bool operator >(const String &str1, const String &str2) { return str1.compare(str2.getString()) > 0; }

                   friend bool operator >=(const String &str, const char *s) { return s ? (str.compare(s) >= 0) : true; }
                   friend bool operator >=(const char *s, const String &str) { return s ? (str.compare(s) <= 0) : false; }
                      friend bool operator >=(const String &str1, const String &str2) { return str1.compare(str2.getString()) >= 0; }




                      void deleteSubString(int startChar, int endChar = -1)
 {
  std::basic_string<char>::replace(startChar, endChar, "");
 }


 String replace(const String& from, const String& to, int32_t first = -1, int32_t last = -1);




    String getSubString(int startChar, int endChar = -1) const;


    String resolveFileName(const String& fileBase) const;
 String getFileBase() const;
 String getFileTail() const;

 bool isspace(uint32_t index) const;
 String tolower() const;
 String toupper() const;
 int32_t first(const String& str) const;
 int32_t first(int c) const;
 int32_t last(int c) const;


 static String join(const Vector<String>& array, const String& sep=String(","));
 const Vector<String>& split(const String& sep, Vector<String>& array) const;

 static String format(const char* fmt, ...);
 static String vformat(const char* fmt, va_list args);
};
# 218 "FusionString.h"
class UString : public std::basic_string<wchar_t> {
  public:
                      UString() { }
                   UString(const wchar_t* str, int32_t n = -1)
 {
  if (str == __null)
   assign(L"");
  else if (n < 0)
   assign(str);
  else
   assign(str, n);
 }
                   UString(const UString &str) : std::basic_string<wchar_t>(str) { }

    UString(const String& str);

                   virtual ~UString() { }

                      int getLength() const { return (int)size(); }
                      const wchar_t * getString() const { return data(); }

                      operator const wchar_t *() const { return getString(); }

                      UString & operator =(const UString& str)
 {
  using namespace std;
  wstring::operator =(str);
  return *this;
 }

                      UString & operator =(const wchar_t* str)
 {
  using namespace std;
  wstring::operator =(str ? str : L"");
  return *this;
 }

                      UString & operator =(double d)
 {
  UString s(d);
  *this = s;
  return *this;
 }

                      UString & operator +=(const UString& str)
 {
  using namespace std;
  wstring::operator +=(str);
  return *this;
 }

                      UString & operator +=(const wchar_t* str)
 {
  using namespace std;
  wstring::operator +=(str);
  return *this;
 }

                   UString& append(wchar_t c)
 {
  using namespace std;
  wstring::operator +=(c);
  return *this;
 }

                      wchar_t operator [](int i) const
    {
  using namespace std;
  return wstring::operator [](i);
 }

                      wchar_t operator [](uint32_t i) const
    {
  using namespace std;
  return wstring::operator [](i);
 }

                      bool isEmpty() const { return empty(); }

                   friend bool operator ==(const UString &str, const wchar_t *s) { return s ? (str.compare(s) == 0) : false; }
                   friend bool operator ==(const wchar_t *s, const UString &str) { return s ? (str.compare(s) == 0) : false; }
                      friend bool operator ==(const UString &str1, const UString &str2) { return str1.compare(str2.getString()) == 0; }

                   friend bool operator !=(const UString &str, const wchar_t *s) { return s ? (str.compare(s) != 0) : true; }
                   friend bool operator !=(const wchar_t *s, const UString &str) { return s ? (str.compare(s) != 0) : true; }
                      friend bool operator !=(const UString &str1, const UString &str2) { return str1.compare(str2.getString()) != 0; }

                   friend bool operator <(const UString &str, const wchar_t *s) { return s ? (str.compare(s) < 0) : false; }
                   friend bool operator <(const wchar_t *s, const UString &str) { return s ? (str.compare(s) > 0) : true; }
                      friend bool operator <(const UString &str1, const UString &str2) { return str1.compare(str2.getString()) < 0; }

                   friend bool operator <=(const UString &str, const wchar_t *s) { return s ? (str.compare(s) <= 0) : false; }
                   friend bool operator <=(const wchar_t *s, const UString &str) { return s ? (str.compare(s) >= 0) : true; }
                      friend bool operator <=(const UString &str1, const UString &str2) { return str1.compare(str2.getString()) <= 0; }

                   friend bool operator >(const UString &str, const wchar_t *s) { return s ? (str.compare(s) > 0) : true; }
                   friend bool operator >(const wchar_t *s, const UString &str) { return s ? (str.compare(s) < 0) : false; }
                      friend bool operator >(const UString &str1, const UString &str2) { return str1.compare(str2.getString()) > 0; }

                   friend bool operator >=(const UString &str, const wchar_t *s) { return s ? (str.compare(s) >= 0) : true; }
                   friend bool operator >=(const wchar_t *s, const UString &str) { return s ? (str.compare(s) <= 0) : false; }
                      friend bool operator >=(const UString &str1, const UString &str2) { return str1.compare(str2.getString()) >= 0; }

                   static int scompare(const wchar_t* s1, const wchar_t* s2)
 {
  while(*s1 && *s2) {
   if (*s1 < *s2) {
    return -1;
   }
   if (*s1++ > *s2++)
    return 1;
  }
  if (*s1) {
   return 1;
  }
  if (*s2) {
   return -1;
  }
  return 0;
 }
                   static int slength(const wchar_t* s)
 {
  int n = 0;
  while (*s++) {
   ++n;
  }
  return n;
 }
                   static wchar_t* scopy(const wchar_t* s)
 {
  int n = slength(s)+1;
  wchar_t* news = new wchar_t[n];
  memcpy(news, s, sizeof(wchar_t)*n);
  return news;
 }
};

}
# 29 "FusionValue.h" 2
# 1 "FusionVec2f.h" 1
# 26 "FusionVec2f.h"
       



typedef struct OpaqueJSClass* JSClassRef;

namespace Fusion {
# 43 "FusionVec2f.h"
 class Vec2f {
 public:
  static Object getClass();
  static Object create(Args& args);
  static Object create(const Vec2f& v);
  static JSClassRef getJSClass();


  Vec2f() { myVec[0] = 0; myVec[1] = 0; }

  ~Vec2f() { }


  Vec2f(const float v[2]) { setValue(v); }


  Vec2f(float x, float y) { setValue(x, y); }


  float dot(const Vec2f &v) const;


  const float *getValue() const { return myVec; }


  void getValue(float &x, float &y) const;


  float length() const;


  void negate();


  float normalize();


  Vec2f & setValue(const float v[2]);


  Vec2f & setValue(float x, float y);


  float & operator [](int i) { return (myVec[i]); }
  const float & operator [](int i) const { return (myVec[i]); }


  Vec2f & operator *=(float d);
  Vec2f & operator /=(float d)
  { return *this *= (1.0f / d); }


  Vec2f & operator +=(const Vec2f &u);
  Vec2f & operator -=(const Vec2f &u);


  Vec2f operator -() const;


  friend Vec2f operator *(const Vec2f &v, float d);
  friend Vec2f operator *(float d, const Vec2f &v)
  { return v * d; }
  friend Vec2f operator /(const Vec2f &v, float d)
  { return v * (1.0f / d); }


  friend Vec2f operator +(const Vec2f &v1, const Vec2f &v2);
  friend Vec2f operator -(const Vec2f &v1, const Vec2f &v2);


  friend int operator ==(const Vec2f &v1, const Vec2f &v2);
  friend int operator !=(const Vec2f &v1, const Vec2f &v2)
  { return !(v1 == v2); }


  friend bool operator <(const Vec2f &v1, const Vec2f &v2);



  bool equals(const Vec2f v, float tolerance) const;

 protected:
  float myVec[2];
 };

}
# 30 "FusionValue.h" 2
# 1 "FusionVec3f.h" 1
# 26 "FusionVec3f.h"
       



typedef struct OpaqueJSClass* JSClassRef;

namespace Fusion {
# 43 "FusionVec3f.h"
 class Vec3f {
 public:
  static Object getClass();
  static Object create(Args& args);
  static Object create(const Vec3f& v);
  static JSClassRef getJSClass();


  Vec3f() { myVec[0]=0; myVec[1]=0; myVec[2]=0; }

  ~Vec3f() { }


  Vec3f(const float v[3])
  { myVec[0] = v[0]; myVec[1] = v[1]; myVec[2] = v[2]; }


  Vec3f(float x, float y, float z)
  { myVec[0] = x; myVec[1] = y; myVec[2] = z; }


  Vec3f cross(const Vec3f &v) const;


  float dot(const Vec3f &v) const;


  const float *getValue() const { return myVec; }


  void getValue(float &x, float &y, float &z) const;


  float length() const;


  float normalize();


  void negate();


  Vec3f & setValue(const float v[3])
  { myVec[0] = v[0]; myVec[1] = v[1]; myVec[2] = v[2]; return *this; }


  Vec3f & setValue(float x, float y, float z)
  { myVec[0] = x; myVec[1] = y; myVec[2] = z; return *this; }



  Vec3f & setValue(const Vec3f &barycentic,
   const Vec3f &v0, const Vec3f &v1, const Vec3f &v2);


  float & operator [](int i) { return (myVec[i]); }
  const float & operator [](int i) const { return (myVec[i]); }

  Vec3f operator -() const
  {
   return Vec3f(-myVec[0], -myVec[1], -myVec[2]);
  }


  Vec3f & operator *=(float d);
  Vec3f & operator /=(float d)
  { return *this *= (float)(1.0 / d); }


  Vec3f & operator +=(Vec3f v);
  Vec3f & operator -=(Vec3f v);


  friend Vec3f operator *(const Vec3f &v, float d)
  {
   return Vec3f(v.myVec[0] * d,
    v.myVec[1] * d,
    v.myVec[2] * d);
  }

  friend Vec3f operator *(float d, const Vec3f &v)
  { return v * d; }
  friend Vec3f operator /(const Vec3f &v, float d)
  { return v * (1.0f / d); }


  friend Vec3f operator +(const Vec3f &v1, const Vec3f &v2)
  {
   return Vec3f(v1.myVec[0] + v2.myVec[0],
    v1.myVec[1] + v2.myVec[1],
    v1.myVec[2] + v2.myVec[2]);
  }

  Vec3f operator -(const Vec3f &v2) const
  {
   return Vec3f(myVec[0] - v2.myVec[0],
    myVec[1] - v2.myVec[1],
    myVec[2] - v2.myVec[2]);
  }


  friend int operator ==(const Vec3f &v1, const Vec3f &v2)
  {
   return (v1.myVec[0] == v2.myVec[0] &&
    v1.myVec[1] == v2.myVec[1] &&
    v1.myVec[2] == v2.myVec[2]);
  }

  friend int operator !=(const Vec3f &v1, const Vec3f &v2)
  { return !(v1 == v2); }


  friend bool operator <(const Vec3f &v1, const Vec3f &v2)
  {
   if (v1.myVec[0] != v2.myVec[0]) {
    return (v1.myVec[0] < v2.myVec[0]);
   }

   if (v1.myVec[1] != v2.myVec[1]) {
    return (v1.myVec[1] < v2.myVec[1]);
   }

   return (v1.myVec[2] < v2.myVec[2]);
  }



  bool equals(const Vec3f v, float tolerance) const;



  Vec3f getClosestAxis() const;

 protected:
  float myVec[3];
 };

}
# 31 "FusionValue.h" 2
# 1 "FusionVec4f.h" 1
# 26 "FusionVec4f.h"
       



typedef struct OpaqueJSClass* JSClassRef;

namespace Fusion {
# 43 "FusionVec4f.h"
 class Vec4f {
 public:
  static Object getClass();
  static Object create(Args& args);
  static Object create(const Vec4f& v);
  static JSClassRef getJSClass();


  Vec4f() { myVec[0] = 0; myVec[1] = 0; myVec[2] = 0; myVec[3] = 0; }

  ~Vec4f() { }


  Vec4f(const float v[4])
  { myVec[0] = v[0]; myVec[1] = v[1]; myVec[2] = v[2]; myVec[3] = v[3]; }


  Vec4f(float x, float y, float z, float w)
  { myVec[0] = x; myVec[1] = y; myVec[2] = z; myVec[3] = w; }



  Vec3f cross(const Vec4f &v) const;



  float dot(const Vec4f &v) const;


  Vec3f divideByW() const;


  const float *getValue() const { return myVec; }


  void getValue(float &x, float &y, float &z, float& w) const;



  float length() const;


  float normalize();


  void negate();


  Vec4f & setValue(const float v[4])
  { myVec[0] = v[0]; myVec[1] = v[1]; myVec[2] = v[2]; myVec[3] = v[3]; return *this; }


  Vec4f & setValue(float x, float y, float z, float w)
  { myVec[0] = x; myVec[1] = y; myVec[2] = z; myVec[3] = w; return *this; }



  float & operator [](int i) { return (myVec[i]); }
  const float & operator [](int i) const { return (myVec[i]); }


  Vec4f & operator *=(float d);
  Vec4f & operator /=(float d)
  { return *this *= (float)(1.0 / d); }


  Vec4f & operator +=(Vec4f v);
  Vec4f & operator -=(Vec4f v);


  Vec4f operator -() const;


  friend Vec4f operator *(const Vec4f &v, float d)
  {
   return Vec4f(v.myVec[0] * d,
    v.myVec[1] * d,
    v.myVec[2] * d,
    v.myVec[3] * d);
  }

  friend Vec4f operator *(float d, const Vec4f &v)
  { return v * d; }
  friend Vec4f operator /(const Vec4f &v, float d)
  { return v * (1.0f / d); }


  friend Vec4f operator +(const Vec4f &v1, const Vec4f &v2)
  {
   return Vec4f(v1.myVec[0] + v2.myVec[0],
    v1.myVec[1] + v2.myVec[1],
    v1.myVec[2] + v2.myVec[2],
    v1.myVec[3] + v2.myVec[3]);
  }

  Vec4f operator -(const Vec4f &v2) const
  {
   return Vec4f(myVec[0] - v2.myVec[0],
    myVec[1] - v2.myVec[1],
    myVec[2] - v2.myVec[2],
    myVec[3] - v2.myVec[3]);
  }


  friend int operator ==(const Vec4f &v1, const Vec4f &v2)
  {
   return (v1.myVec[0] == v2.myVec[0] &&
    v1.myVec[1] == v2.myVec[1] &&
    v1.myVec[2] == v2.myVec[2] &&
    v1.myVec[3] == v2.myVec[3]);
  }

  friend int operator !=(const Vec4f &v1, const Vec4f &v2)
  { return !(v1 == v2); }


  friend bool operator <(const Vec4f &v1, const Vec4f &v2)
  {
   if (v1.myVec[0] != v2.myVec[0]) {
    return (v1.myVec[0] < v2.myVec[0]);
   }

   if (v1.myVec[1] != v2.myVec[1]) {
    return (v1.myVec[1] < v2.myVec[1]);
   }

   if (v1.myVec[2] != v2.myVec[2]) {
    return (v1.myVec[2] < v2.myVec[2]);
   }

   return (v1.myVec[3] < v2.myVec[3]);
  }



  bool equals(const Vec4f& v, float tolerance) const;

 protected:
  float myVec[4];
 };

}
# 32 "FusionValue.h" 2
# 1 "FusionMatrix.h" 1
# 26 "FusionMatrix.h"
       



typedef unsigned int uint32_t;
typedef struct OpaqueJSClass* JSClassRef;

namespace Fusion {

 class String;





 class Matrix {
 public:
  static Object getClass();
  static Object create(Args& args);
  static Object create(const Matrix& v);
  static JSClassRef getJSClass();




  Matrix() { makeIdentity(); }




  Matrix(const Matrix& mat) { setValue(mat); }




  const float *getValue() const { return &(myMat[0][0]); }





  bool getValue(Vec3f& translation, Rotation& rotation, Vec3f& scale, Vec3f& shear);




  void setValue(const Matrix& mat);




  void setValue(const float *mat);





  void setValue(const Vec3f& translation, const Rotation& rotation, const Vec3f& scale,
   const Rotation& scaleOrientation, const Vec3f& center);




  void setValue(const Vec3f& eye, const Vec3f& center, const Vec3f& up);




  void makeIdentity();




  void setRotate(const Rotation& rot);




  void setTranslate(const Vec3f& trans);




  void setScale(const Vec3f& scale);




  void setTexRotate(float angle);




  void setTexTranslate(const Vec2f& trans);




  void setTexScale(const Vec2f& scale);




  float* operator [](int i) { return &myMat[i][0]; }
  const float* operator [](int i) const { return &myMat[i][0]; }




  Matrix & multRight(const Matrix& mat);
  Matrix & operator *=(const Matrix& mat) { return multRight(mat); }




  Matrix & multLeft(const Matrix& mat);




  void multVecMatrix(const Vec3f &src, Vec3f &dst) const;
  void multVecMatrix(const Vec2f &src, Vec2f &dst) const;
  void multVecMatrix(const Vec3f &src, Vec4f &dst) const;
  void multVecMatrix(const Vec2f &src, Vec4f &dst) const;
  void multVecMatrix(const Vec4f &src, Vec4f &dst) const;




  void multMatrixVec(const Vec3f &src, Vec3f &dst) const;






  void multDirMatrix(const Vec3f &src, Vec3f &dst) const;




  friend Matrix operator *(const Matrix& mat1, const Matrix& mat2)
  {
   Matrix product = mat1;

   product *= mat2;

   return product;
  }




  Matrix & operator =(const Matrix &mat) { setValue(mat); return *this; }
  Matrix & operator =(const float *mat) { setValue(mat); return *this; }




  friend int operator ==(const Matrix &m1, const Matrix &m2)
  {
   return (m1.myMat[0][0] == m2.myMat[0][0] &&
     m1.myMat[0][1] == m2.myMat[0][1] &&
     m1.myMat[0][2] == m2.myMat[0][2] &&
     m1.myMat[0][3] == m2.myMat[0][3] &&
     m1.myMat[1][0] == m2.myMat[1][0] &&
     m1.myMat[1][1] == m2.myMat[1][1] &&
     m1.myMat[1][2] == m2.myMat[1][2] &&
     m1.myMat[1][3] == m2.myMat[1][3] &&
     m1.myMat[2][0] == m2.myMat[2][0] &&
     m1.myMat[2][1] == m2.myMat[2][1] &&
     m1.myMat[2][2] == m2.myMat[2][2] &&
     m1.myMat[2][3] == m2.myMat[2][3] &&
     m1.myMat[3][0] == m2.myMat[3][0] &&
     m1.myMat[3][1] == m2.myMat[3][1] &&
     m1.myMat[3][2] == m2.myMat[3][2] &&
     m1.myMat[3][3] == m2.myMat[3][3]);
  }

  friend int operator !=(const Matrix &m1, const Matrix &m2)
  { return !(m1 == m2); }

  friend int operator <(const Matrix &m1, const Matrix &m2)
  {
   return (m1.myMat[0][0] < m2.myMat[0][0] &&
     m1.myMat[0][1] < m2.myMat[0][1] &&
     m1.myMat[0][2] < m2.myMat[0][2] &&
     m1.myMat[0][3] < m2.myMat[0][3] &&
     m1.myMat[1][0] < m2.myMat[1][0] &&
     m1.myMat[1][1] < m2.myMat[1][1] &&
     m1.myMat[1][2] < m2.myMat[1][2] &&
     m1.myMat[1][3] < m2.myMat[1][3] &&
     m1.myMat[2][0] < m2.myMat[2][0] &&
     m1.myMat[2][1] < m2.myMat[2][1] &&
     m1.myMat[2][2] < m2.myMat[2][2] &&
     m1.myMat[2][3] < m2.myMat[2][3] &&
     m1.myMat[3][0] < m2.myMat[3][0] &&
     m1.myMat[3][1] < m2.myMat[3][1] &&
     m1.myMat[3][2] < m2.myMat[3][2] &&
     m1.myMat[3][3] < m2.myMat[3][3]);
  }




  Matrix inverse() const;




  Matrix transpose() const;

  static const Matrix& getIdentityMatrix();

  static void cleanSingletons();

 private:

  bool ludcmp(Matrix& a, uint32_t indx[4], float& d) const;
  void lubksb(Matrix& a, uint32_t indx[4], float b[4]) const;

  float myMat[4][4];

  static Matrix *myIdentityMatrix;
 };

}
# 33 "FusionValue.h" 2
# 1 "FusionRotation.h" 1
# 26 "FusionRotation.h"
       




typedef struct OpaqueJSClass* JSClassRef;

namespace Fusion {
# 44 "FusionRotation.h"
 class Rotation {
 public:
  static Object getClass();
  static Object create(Args& args);
  static Object create(const Rotation& v);
  static JSClassRef getJSClass();


  Rotation() : myAxis(0,0,1), myAngle(0) { }


  Rotation(const Vec3f &axis, float radians)
  { setValue(axis, radians); }


  Rotation(const Vec3f &rotateFrom, const Vec3f &rotateTo)
  { setValue(rotateFrom, rotateTo); }


  Rotation(const Vec2f &rotateFrom, const Vec2f &rotateTo)
  { setValue(rotateFrom, rotateTo); }

  static Rotation fromQuaternion(float q0, float q1, float q2, float q3)
  { Rotation r; r.setQuaternion(q0, q1, q2, q3); return r; }


  void getQuaternion(float quat[4]) const;


  void getQuaternion(float &q0, float &q1,
     float &q2, float &q3) const;


  void getValue(Vec3f &axis, float &radians) const;


  const Vec3f& getAxis() const { return myAxis; }


  float getAngle() const { return myAngle; }


  Rotation & invert();


  Rotation inverse() const
  { Rotation q = *this; return q.invert(); }


  Rotation & setQuaternion(const float q[4]);


  Rotation & setQuaternion(float q0, float q1, float q2, float q3);


  Rotation & setValue(const Vec3f &axis, float radians);


  Rotation & setValue(const Vec3f &rotateFrom,
     const Vec3f &rotateTo);




  Rotation & setValue(const Vec2f &rotateFrom, const Vec2f &rotateTo);


  float & operator [](int i)
  { return (i <= 0) ? (myAxis[0]) : ((i >= 3) ? myAngle : (myAxis[i])); }
  const float & operator [](int i) const
  {
  if (i <= 0)
   return myAxis[0];
  else if (i >= 3)
   return myAngle;
  else return myAxis[i];
  }


  Rotation & operator *=(const Rotation &q);


  friend int operator ==(const Rotation &q1, const Rotation &q2);
  friend int operator !=(const Rotation &q1, const Rotation &q2)
  { return !(q1 == q2); }


  friend bool operator <(const Rotation &q1, const Rotation &q2);



  bool equals(const Rotation &r, float tolerance) const;


  friend Rotation operator *(const Rotation &q1, const Rotation &q2);

  void multVec(const Vec3f &src, Vec3f &dst) const;



  void scaleAngle( float scaleFactor );



  static Rotation slerp(const Rotation &rot0,
     const Rotation &rot1, float t);


  static Rotation identity()
  { return Rotation(Vec3f(0.0f, 0.0f, 1.0f), 0.0f); }

 private:
  Vec3f myAxis;
  float myAngle;

  void toQuaternion(float quat[4]) const;


  float norm(const float quat[4]) const;


  void normalize(const float quat[4], float normQuat[4]);
 };
}
# 34 "FusionValue.h" 2
# 1 "FusionColor3f.h" 1
# 26 "FusionColor3f.h"
       




typedef struct OpaqueJSClass* JSClassRef;

namespace Fusion {
# 44 "FusionColor3f.h"
 class Color3f : public Vec3f {
 public:
  static Object getClass();
  static Object create(Args& args);
  static Object create(const Color3f& v);
  static JSClassRef getJSClass();


  Color3f();


  Color3f(const Vec3f vec3f) { setValue(vec3f.getValue()); }


  Color3f(const float rgb[3]) { setValue(rgb); }


  Color3f(float r, float g, float b) { setValue(r, g, b); }
# 70 "FusionColor3f.h"
  Color3f & setHSVValue(float h, float s, float v);


  Color3f & setHSVValue(const float hsv[3])
    { return setHSVValue(hsv[0], hsv[1], hsv[2]); }


  void getHSVValue(float &h, float &s, float &v) const
  {
   float hsv[3];
   getHSVValue(hsv, getValue());
   h = hsv[0];
   s = hsv[1];
   v = hsv[2];
  }


  void getHSVValue(float hsv[3]) const
  {
   getHSVValue(hsv, getValue());
  }

  static void getHSVValue(float* hsv, const float* rgb);

  static void interpolate(float t, float* v, const float* c1, const float* c2)
  {
   float hsv1[3];
   float hsv2[3];

   getHSVValue(hsv1, c1);
   getHSVValue(hsv2, c2);


   float diff = hsv2[0] - hsv1[0];

   if (diff > 0) {
    if (diff < 0.5) {
     v[0] = diff * t + hsv1[0];
    }
    else {
     float h = hsv1[0] - (1-diff)*t;
     v[0] = (h < 0) ? (h+1) : h;
    }
   }
   else {
    if (diff > -0.5) {
     v[0] = diff * t + hsv1[0];
    }
    else {

     float h = hsv1[0] + (1+diff)*t;
     v[0] = (h > 1) ? (h-1) : h;
    }
   }


   v[1] = (1-t) * hsv1[1] + t * hsv2[1];
   v[2] = (1-t) * hsv1[2] + t * hsv2[2];
  }

 };

}
# 35 "FusionValue.h" 2
# 1 "FusionColor4f.h" 1
# 25 "FusionColor4f.h"
       




typedef struct OpaqueJSClass* JSClassRef;

namespace Fusion {
# 43 "FusionColor4f.h"
 class Color4f : public Vec4f {
 public:
  static Object getClass();
  static Object create(Args& args);
  static Object create(const Color4f& v);
  static JSClassRef getJSClass();


  Color4f();


  Color4f(const Vec4f vec4f) { setValue(vec4f.getValue()); }


  Color4f(const float rgba[4]) { setValue(rgba); }


  Color4f(float r, float g, float b, float a) { setValue(r, g, b, a); }
# 69 "FusionColor4f.h"
  Color4f & setHSVAValue(float h, float s, float v, float a);


  Color4f & setHSVAValue(const float hsva[4])
    { return setHSVAValue(hsva[0], hsva[1], hsva[2], hsva[3]); }


  void getHSVAValue(float &h, float &s, float &v, float &a) const;


  void getHSVAValue(float hsva[4]) const
     { getHSVAValue(hsva[0], hsva[1], hsva[2], hsva[3]); }

 };

}
# 36 "FusionValue.h" 2

# 1 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JavaScriptCore.h" 1 3
# 30 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JavaScriptCore.h" 3
# 1 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSBase.h" 1 3
# 35 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSBase.h" 3
typedef const struct OpaqueJSContext* JSContextRef;


typedef struct OpaqueJSContext* JSGlobalContextRef;


typedef struct OpaqueJSString* JSStringRef;


typedef struct OpaqueJSClass* JSClassRef;


typedef struct OpaqueJSPropertyNameArray* JSPropertyNameArrayRef;


typedef struct OpaqueJSPropertyNameAccumulator* JSPropertyNameAccumulatorRef;





typedef const struct OpaqueJSValue* JSValueRef;


typedef struct OpaqueJSValue* JSObjectRef;


extern "C" {
# 78 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSBase.h" 3
JSValueRef JSEvaluateScript(JSContextRef ctx, JSStringRef script, JSObjectRef thisObject, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception);
# 90 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSBase.h" 3
bool JSCheckScriptSyntax(JSContextRef ctx, JSStringRef script, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception);
# 103 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSBase.h" 3
void JSGarbageCollect(JSContextRef ctx);


}
# 31 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JavaScriptCore.h" 2 3
# 1 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSContextRef.h" 1 3
# 30 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSContextRef.h" 3
# 1 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 1 3
# 31 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
# 1 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 1 3
# 44 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
typedef enum {
    kJSTypeUndefined,
    kJSTypeNull,
    kJSTypeBoolean,
    kJSTypeNumber,
    kJSTypeString,
    kJSTypeObject
} JSType;


extern "C" {
# 64 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
JSType JSValueGetType(JSContextRef ctx, JSValueRef value);
# 73 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
bool JSValueIsUndefined(JSContextRef ctx, JSValueRef value);
# 82 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
bool JSValueIsNull(JSContextRef ctx, JSValueRef value);
# 91 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
bool JSValueIsBoolean(JSContextRef ctx, JSValueRef value);
# 100 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
bool JSValueIsNumber(JSContextRef ctx, JSValueRef value);
# 109 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
bool JSValueIsString(JSContextRef ctx, JSValueRef value);
# 118 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
bool JSValueIsObject(JSContextRef ctx, JSValueRef value);
# 128 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
bool JSValueIsObjectOfClass(JSContextRef ctx, JSValueRef value, JSClassRef jsClass);
# 141 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
bool JSValueIsEqual(JSContextRef ctx, JSValueRef a, JSValueRef b, JSValueRef* exception);
# 151 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
bool JSValueIsStrictEqual(JSContextRef ctx, JSValueRef a, JSValueRef b);
# 162 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
bool JSValueIsInstanceOfConstructor(JSContextRef ctx, JSValueRef value, JSObjectRef constructor, JSValueRef* exception);
# 172 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
JSValueRef JSValueMakeUndefined(JSContextRef ctx);







JSValueRef JSValueMakeNull(JSContextRef ctx);
# 189 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
JSValueRef JSValueMakeBoolean(JSContextRef ctx, bool boolean);
# 198 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
JSValueRef JSValueMakeNumber(JSContextRef ctx, double number);
# 208 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
JSValueRef JSValueMakeString(JSContextRef ctx, JSStringRef string);
# 219 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
bool JSValueToBoolean(JSContextRef ctx, JSValueRef value);
# 229 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
double JSValueToNumber(JSContextRef ctx, JSValueRef value, JSValueRef* exception);
# 239 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
JSStringRef JSValueToStringCopy(JSContextRef ctx, JSValueRef value, JSValueRef* exception);
# 249 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
JSObjectRef JSValueToObject(JSContextRef ctx, JSValueRef value, JSValueRef* exception);
# 261 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
void JSValueProtect(JSContextRef ctx, JSValueRef value);
# 271 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSValueRef.h" 3
void JSValueUnprotect(JSContextRef ctx, JSValueRef value);


}
# 32 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 2 3





extern "C" {
# 47 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
enum {
    kJSPropertyAttributeNone = 0,
    kJSPropertyAttributeReadOnly = 1 << 1,
    kJSPropertyAttributeDontEnum = 1 << 2,
    kJSPropertyAttributeDontDelete = 1 << 3
};





typedef unsigned JSPropertyAttributes;






enum {
    kJSClassAttributeNone = 0,
    kJSClassAttributeNoPrototype = 1 << 1
};





typedef unsigned JSClassAttributes;
# 88 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef void
(*JSObjectInitializeCallback) (JSContextRef ctx, JSObjectRef object);
# 102 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef void
(*JSObjectFinalizeCallback) (JSObjectRef object);
# 122 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef bool
(*JSObjectHasPropertyCallback) (JSContextRef ctx, JSObjectRef object, JSStringRef propertyName);
# 139 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef JSValueRef
(*JSObjectGetPropertyCallback) (JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception);
# 157 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef bool
(*JSObjectSetPropertyCallback) (JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSValueRef* exception);
# 174 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef bool
(*JSObjectDeletePropertyCallback) (JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception);
# 191 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef void
(*JSObjectGetPropertyNamesCallback) (JSContextRef ctx, JSObjectRef object, JSPropertyNameAccumulatorRef propertyNames);
# 212 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef JSValueRef
(*JSObjectCallAsFunctionCallback) (JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);
# 232 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef JSObjectRef
(*JSObjectCallAsConstructorCallback) (JSContextRef ctx, JSObjectRef constructor, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);
# 253 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef bool
(*JSObjectHasInstanceCallback) (JSContextRef ctx, JSObjectRef constructor, JSValueRef possibleInstance, JSValueRef* exception);
# 272 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef JSValueRef
(*JSObjectConvertToTypeCallback) (JSContextRef ctx, JSObjectRef object, JSType type, JSValueRef* exception);
# 283 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef struct {
    const char* const name;
    JSObjectGetPropertyCallback getProperty;
    JSObjectSetPropertyCallback setProperty;
    JSPropertyAttributes attributes;
} JSStaticValue;
# 297 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef struct {
    const char* const name;
    JSObjectCallAsFunctionCallback callAsFunction;
    JSPropertyAttributes attributes;
} JSStaticFunction;
# 336 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
typedef struct {
    int version;
    JSClassAttributes attributes;

    const char* className;
    JSClassRef parentClass;

    JSStaticValue* staticValues;
    JSStaticFunction* staticFunctions;

    JSObjectInitializeCallback initialize;
    JSObjectFinalizeCallback finalize;
    JSObjectHasPropertyCallback hasProperty;
    JSObjectGetPropertyCallback getProperty;
    JSObjectSetPropertyCallback setProperty;
    JSObjectDeletePropertyCallback deleteProperty;
    JSObjectGetPropertyNamesCallback getPropertyNames;
    JSObjectCallAsFunctionCallback callAsFunction;
    JSObjectCallAsConstructorCallback callAsConstructor;
    JSObjectHasInstanceCallback hasInstance;
    JSObjectConvertToTypeCallback convertToType;
} JSClassDefinition;
# 368 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
extern const JSClassDefinition kJSClassDefinitionEmpty;







JSClassRef JSClassCreate(JSClassDefinition* definition);







JSClassRef JSClassRetain(JSClassRef jsClass);






void JSClassRelease(JSClassRef jsClass);
# 406 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
JSObjectRef JSObjectMake(JSContextRef ctx, JSClassRef jsClass, void* data);
# 422 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
JSObjectRef JSObjectMakeWithPrototype(JSContextRef ctx, JSClassRef jsClass, void* data, JSValueRef prototype);
# 432 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
JSObjectRef JSObjectMakeFunctionWithCallback(JSContextRef ctx, JSStringRef name, JSObjectCallAsFunctionCallback callAsFunction);
# 443 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
JSObjectRef JSObjectMakeConstructor(JSContextRef ctx, JSClassRef jsClass, JSObjectCallAsConstructorCallback callAsConstructor);
# 459 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
JSObjectRef JSObjectMakeFunction(JSContextRef ctx, JSStringRef name, unsigned parameterCount, const JSStringRef parameterNames[], JSStringRef body, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception);
# 468 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
JSValueRef JSObjectGetPrototype(JSContextRef ctx, JSObjectRef object);
# 477 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
void JSObjectSetPrototype(JSContextRef ctx, JSObjectRef object, JSValueRef value);
# 486 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
bool JSObjectHasProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName);
# 497 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
JSValueRef JSObjectGetProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception);
# 509 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
void JSObjectSetProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSPropertyAttributes attributes, JSValueRef* exception);
# 520 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
bool JSObjectDeleteProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception);
# 532 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
JSValueRef JSObjectGetPropertyAtIndex(JSContextRef ctx, JSObjectRef object, unsigned propertyIndex, JSValueRef* exception);
# 544 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
void JSObjectSetPropertyAtIndex(JSContextRef ctx, JSObjectRef object, unsigned propertyIndex, JSValueRef value, JSValueRef* exception);







void* JSObjectGetPrivate(JSObjectRef object);
# 562 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
bool JSObjectSetPrivate(JSObjectRef object, void* data);
# 571 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
bool JSObjectIsFunction(JSContextRef ctx, JSObjectRef object);
# 584 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
JSValueRef JSObjectCallAsFunction(JSContextRef ctx, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);
# 593 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
bool JSObjectIsConstructor(JSContextRef ctx, JSObjectRef object);
# 605 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
JSObjectRef JSObjectCallAsConstructor(JSContextRef ctx, JSObjectRef object, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);
# 614 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
JSPropertyNameArrayRef JSObjectCopyPropertyNames(JSContextRef ctx, JSObjectRef object);







JSPropertyNameArrayRef JSPropertyNameArrayRetain(JSPropertyNameArrayRef array);






void JSPropertyNameArrayRelease(JSPropertyNameArrayRef array);







size_t JSPropertyNameArrayGetCount(JSPropertyNameArrayRef array);
# 646 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSObjectRef.h" 3
JSStringRef JSPropertyNameArrayGetNameAtIndex(JSPropertyNameArrayRef array, size_t index);







void JSPropertyNameAccumulatorAddName(JSPropertyNameAccumulatorRef accumulator, JSStringRef propertyName);


}
# 31 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSContextRef.h" 2 3





extern "C" {
# 48 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSContextRef.h" 3
JSGlobalContextRef JSGlobalContextCreate(JSClassRef globalObjectClass);







JSGlobalContextRef JSGlobalContextRetain(JSGlobalContextRef ctx);






void JSGlobalContextRelease(JSGlobalContextRef ctx);







JSObjectRef JSContextGetGlobalObject(JSContextRef ctx);


}
# 32 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JavaScriptCore.h" 2 3
# 1 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSStringRef.h" 1 3
# 36 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSStringRef.h" 3
extern "C" {







    typedef unsigned short JSChar;
# 56 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSStringRef.h" 3
JSStringRef JSStringCreateWithCharacters(const JSChar* chars, size_t numChars);






JSStringRef JSStringCreateWithUTF8CString(const char* string);







JSStringRef JSStringRetain(JSStringRef string);





void JSStringRelease(JSStringRef string);







size_t JSStringGetLength(JSStringRef string);
# 94 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSStringRef.h" 3
const JSChar* JSStringGetCharactersPtr(JSStringRef string);
# 106 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSStringRef.h" 3
size_t JSStringGetMaximumUTF8CStringSize(JSStringRef string);
# 120 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSStringRef.h" 3
size_t JSStringGetUTF8CString(JSStringRef string, char* buffer, size_t bufferSize);
# 129 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSStringRef.h" 3
bool JSStringIsEqual(JSStringRef a, JSStringRef b);







bool JSStringIsEqualToUTF8CString(JSStringRef a, const char* b);
# 150 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JSStringRef.h" 3
JSStringRef JSStringCreateWithCFString(CFStringRef string);







CFStringRef JSStringCopyCFString(CFAllocatorRef alloc, JSStringRef string);



}
# 33 "/System/Library/Frameworks/JavaScriptCore.framework/Headers/JavaScriptCore.h" 2 3
# 38 "FusionValue.h" 2

namespace Fusion {
# 49 "FusionValue.h"
 class Id {
 public:
  Id()
  {
   myIsInt = true;
   myValue.i = 0;
  }

  Id(int32_t i)
  {
   myIsInt = true;
   myValue.i = 0;
   setValue(i);
  }

  Id(uint32_t i)
  {
   myIsInt = true;
   myValue.i = 0;
   setValue(i);
  }

  Id(const String& s)
  {
   myIsInt = true;
   myValue.i = 0;
   setValue(s.getString());
  }

  Id(const char* s)
  {
   myIsInt = true;
   myValue.i = 0;
   setValue(s);
  }

  Id(const Id& id)
  {
   myIsInt = true;
   setValue(id);
  }

  virtual ~Id() { if (!myIsInt && myValue.s != __null) delete myValue.s; }

  Id & operator =(const Id& v)
  {
   setValue(v);
   return *this;
  }

  void setValue(int32_t i) { myValue.i = i; }
  void setValue(const char* s)
  {
   if (!myIsInt && myValue.s != __null) {
    delete myValue.s;
   }


   size_t len = strlen(s)+1;
   myValue.s = new char[len];
   memcpy(myValue.s, s, len);
   myIsInt = false;
  }

  void setValue(const Id& id)
  {
   if (id.isInt()) {
    setValue(id.getInt());
   }
   else {
    setValue(id.getBuffer());
   }
  }

  bool isInt() const { return myIsInt; }
  bool isString() const { return !isInt(); }

  int32_t getInt() const;
  const char* getBuffer() const { return myIsInt ? __null : myValue.s; }

  friend bool operator ==(const Id& id1, const Id& id2)
  {
   if (id1.myIsInt) {
    if (id2.myIsInt) {
     return id1.myValue.i == id2.myValue.i;
    }
    return String(id1.myValue.i).getString() == id2.myValue.s;
   }
   if (id2.myIsInt) {
    return id1.myValue.s == String(id2.myValue.i).getString();
   }
   return strcmp(id1.myValue.s, id2.myValue.s) == 0;
  }

  friend bool operator ==(const Id& id1, const String& id2)
  { return id1 == id2.getString(); }

  friend bool operator ==(const Id& id1, const char* id2)
  {
   if (id1.myIsInt) {
    return String(id1.myValue.i) == id2;
   }
   return strcmp(id1.myValue.s, id2) == 0;
  }

  friend bool operator ==(const String& id1, const Id& id2)
  { return id1.getString() == id2; }

  friend bool operator ==(const char* id1, const Id& id2)
  {
   if (id2.myIsInt) {
    return String(id2.myValue.i) == id1;
   }
   return strcmp(id2.myValue.s, id1) == 0;
  }

  friend bool operator !=(const Id& id1, const Id& id2)
  { return !(id1 == id2); }

  friend bool operator !=(const Id& id1, const String& id2)
  { return !(id1 == id2); }

  friend bool operator !=(const Id& id1, const char* id2)
  { return !(id1 == id2); }

  friend bool operator !=(const String& id1, const Id& id2)
  { return !(id1 == id2); }

  friend bool operator !=(const char* id1, const Id& id2)
  { return !(id1 == id2); }

 private:
  bool myIsInt;
  union {
   int32_t i;
   char* s;
  } myValue;
 };
# 196 "FusionValue.h"
 class Value {
  friend class Args;

 public:
  enum ValueType { T_BOOLEAN, T_INT32, T_INT64, T_NUMBER, T_STRING,
       T_OBJECT, T_VALUE, T_STRINGREF, T_ID_S, T_ID_I, T_MATRIX,
       T_VEC2F, T_VEC3F, T_VEC4F, T_ROTATION, T_COLOR3F, T_COLOR4F,
       T_NULL, T_UNDEFINED };

  Value() : myType(T_INT32) { setValue(); }
  Value(const Base* obj) : myType(T_INT32) { setValue(obj); }
  Value(double v) : myType(T_INT32) { setValue(v); }
  Value(int32_t v) : myType(T_INT32) { setValue(v); }
  Value(int64_t v) : myType(T_INT32) { setValue(v); }
  Value(const Id& v) : myType(T_INT32) { setValue(v); }
  Value(const String& s) : myType(T_INT32) { setValue(s); }
  Value(const char* s) : myType(T_INT32) { setValue(s); }
  Value(const Object& obj) : myType(T_INT32) { setValue(obj); }
  Value(const Value& v) : myType(T_INT32) { setValue(v); }
  Value(const Vec2f& v) : myType(T_INT32) { setValue(v); }
  Value(const Vec3f& v) : myType(T_INT32) { setValue(v); }
  Value(const Vec4f& v) : myType(T_INT32) { setValue(v); }
  Value(const Rotation& v) : myType(T_INT32) { setValue(v); }
  Value(const Color3f& v) : myType(T_INT32) { setValue(v); }
  Value(const Color4f& v) : myType(T_INT32) { setValue(v); }
  Value(const Matrix& v) : myType(T_INT32) { setValue(v); }

  Value(JSObjectRef obj) : myType(T_INT32) { setValue(obj); }
  Value(JSValueRef val) : myType(T_INT32) { setValue(val); }
  Value(JSStringRef val) : myType(T_INT32) { setValue(val); }

  Value(const String& name, JSObjectCallAsFunctionCallback f) : myType(T_INT32) { setValue(name, f); }


  virtual ~Value() { _clearValue(); }


  Value(int8_t v) { myType = T_INT32; setValue((int32_t) v); }
  Value(uint8_t v) { myType = T_INT32; setValue((int32_t) v); }
  Value(int16_t v) { myType = T_INT32; setValue((int32_t) v); }
  Value(uint16_t v) { myType = T_INT32; setValue((int32_t) v); }
  Value(uint32_t v) { myType = T_INT32; setValue((int32_t) v); }
  Value(uint64_t v) { myType = T_INT32; setValue((int64_t) v); }
  Value(float v) { myType = T_INT32; setValue(v); }

  operator int8_t() const { return (int8_t) getInt32(); }
  operator uint8_t() const { return (uint8_t) getInt32(); }
  operator int16_t() const { return (int16_t) getInt32(); }
  operator uint16_t() const { return (uint16_t) getInt32(); }
  operator int32_t() const { return (int32_t) getInt32(); }
  operator uint32_t() const { return (uint32_t) getInt32(); }
  operator int64_t() const { return (int64_t) getInt64(); }
  operator uint64_t() const { return (uint64_t) getInt64(); }
  operator float() const { return (float) getNumber(); }
  operator double() const { return getNumber(); }
  operator String() const { return getString(); }
  operator Id() const { return getId(); }
  operator ResultType() const { return (ResultType) getInt32(); }
  operator Vec2f() const { Vec2f v; getValue(v); return v; }
  operator Vec3f() const { Vec3f v; getValue(v); return v; }
  operator Vec4f() const { Vec4f v; getValue(v); return v; }
  operator Rotation() const { Rotation v; getValue(v); return v; }
  operator Color3f() const { Color3f v; getValue(v); return v; }
  operator Color4f() const { Color4f v; getValue(v); return v; }
  operator Matrix() const { Matrix m; getValue(m); return m; }
  operator Base*() const { return getBase(); }
  operator bool() const { return getBoolean(); }

  Value & operator =(const Value& v)
  {
   setValue(v);
   return *this;
  }

  bool operator ==(const char* s) const { return isEqual(s); }
  bool operator !=(const char* s) const { return !isEqual(s); }

  bool isNull() const { return myType == T_NULL || _isNullValue(); }
  bool isUndefined() const { return myType == T_UNDEFINED || _isUndefinedValue(); }
  bool isBoolean() const { return myType == T_BOOLEAN || _isBooleanValue(); }
  bool isInt32() const { return myType == T_INT32 || _isNumberValue(); }
  bool isInt64() const { return myType == T_INT64 || _isNumberValue(); }
  bool isId() const { return myType == T_ID_S || myType == T_ID_I; }
  bool isNumber() const { return myType == T_NUMBER || _isNumberValue(); }
  bool isObject() const { return myType == T_OBJECT || _isObjectValue(); }
  bool isString() const { return myType == T_STRING || myType == T_ID_S || myType == T_STRINGREF || _isStringValue(); }
  bool isVec2f() const { return getType() == T_VEC2F; }
  bool isVec3f() const { return getType() == T_VEC3F; }
  bool isVec4f() const { return getType() == T_VEC4F; }
  bool isRotation() const { return getType() == T_ROTATION; }
  bool isColor3f() const { return getType() == T_COLOR3F; }
  bool isColor4f() const { return getType() == T_COLOR4F; }
  bool isMatrix() const { return getType() == T_MATRIX; }

  virtual uint32_t getElementSize() const;
  virtual uint32_t getNum() const;
  virtual void setNum(uint32_t n);
  virtual bool hasProperty(const Id& id) const;
  virtual Value getProperty(const Id& id) const;
  virtual void setProperty(const Id&, const Value&);

  virtual Value callProperty(const String& id) const;
  virtual Value callProperty(const String& id, const Value& val) const;
  virtual Value callProperty(const String& id, const Value& val1, const Value& val2) const;
  virtual Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3) const;
  virtual Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3,
  const Value& val4) const;
  virtual Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3,
  const Value& val4, const Value& val5) const;
  virtual Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3,
  const Value& val4, const Value& val5, const Value& val6) const;
  virtual Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3,
  const Value& val4, const Value& val5, const Value& val6, const Value& val7) const;

  virtual Value callProperty(const String& id, Args& args) const;

  virtual Value callValue(const Object& self) const;
  virtual Value callValue(const Object& self, const Value& val) const;
  virtual Value callValue(const Object& self, const Value& val1, const Value& val2) const;
  virtual Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3) const;
  virtual Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3,
  const Value& val4) const;
  virtual Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3,
  const Value& val4, const Value& val5) const;
  virtual Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3,
  const Value& val4, const Value& val5, const Value& val6) const;
  virtual Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3,
  const Value& val4, const Value& val5, const Value& val6, const Value& val7) const;

  virtual Value callValue(const Object& self, Args& args) const;

  virtual void setValue() { _clearValue(); myType = T_UNDEFINED; }

  virtual void setValue(double v)
  {
   _clearValue();
   myType = T_NUMBER;
   myValue.d = v;
  }

  virtual void setValue(int32_t v)
  {
   _clearValue();
   myType = T_INT32;
   myValue.i = v;
  }

  virtual void setValue(int64_t v)
  {
   _clearValue();
   myType = T_INT64;
   myValue.i64 = v;
  }

  virtual void setValue(const Id& id)
  {
   _clearValue();
   if (id.isInt()) {
    myType = T_ID_I;
    myValue.i = id.getInt();
   }
   else {
    myType = T_ID_S;


    size_t len = strlen(id.getBuffer())+1;
    myValue.us = new char[len];
    memcpy(myValue.us, id.getBuffer(), len);
   }
  }

  virtual void setValue(const String& s) { setValue(s.getString()); }

  virtual void setValue(const char* s)
  {
   _clearValue();
   myType = T_STRING;


   size_t len = strlen(s)+1;
   myValue.us = new char[len];
   memcpy(myValue.us, s, len);
  }

  virtual void setValue(bool v)
  {
   _clearValue();
   myType = T_BOOLEAN;
   myValue.i = v ? 1 : 0;
  }

  virtual void setValue(JSValueRef val);
  virtual void setValue(void* p) { union { void* p; double d; } u; u.p = p; setValue(u.d); }
  virtual void setValue(const Base* obj) { setValue(const_cast<Base*>(obj)); }
  virtual void setValue(Base* obj);
  virtual void setValue(const Object& obj) { setValue(const_cast<Object&>(obj)); }
  virtual void setValue(Object& obj);
  virtual void setValue(JSObjectRef obj) { _clearValue(); myType = T_OBJECT; myValue.obj = obj; }
  virtual void setValue(JSStringRef val) { _clearValue(); myType = T_STRINGREF; myValue.strref = val; }
  virtual void setValue(const String& name, JSObjectCallAsFunctionCallback f);

  virtual void setValue(const Vec2f& v)
  {
   _clearValue();
   myType = T_VEC2F;
   myValue.vec[0] = v[0];
   myValue.vec[1] = v[1];
  }

  virtual void setValue(const Vec3f& v)
  {
   _clearValue();
   myType = T_VEC3F;
   myValue.vec[0] = v[0];
   myValue.vec[1] = v[1];
   myValue.vec[2] = v[2];
  }

  virtual void setValue(const Vec4f& v)
  {
   _clearValue();
   myType = T_VEC4F;
   myValue.vec[0] = v[0];
   myValue.vec[1] = v[1];
   myValue.vec[2] = v[2];
   myValue.vec[3] = v[3];
  }

  virtual void setValue(const Rotation& v)
  {
   _clearValue();
   myType = T_ROTATION;
   myValue.vec[0] = v[0];
   myValue.vec[1] = v[1];
   myValue.vec[2] = v[2];
   myValue.vec[3] = v[3];
  }

  virtual void setValue(const Color3f& v)
  {
   _clearValue();
   myType = T_COLOR3F;
   myValue.vec[0] = v[0];
   myValue.vec[1] = v[1];
   myValue.vec[2] = v[2];
  }

  virtual void setValue(const Color4f& v)
  {
   _clearValue();
   myType = T_COLOR4F;
   myValue.vec[0] = v[0];
   myValue.vec[1] = v[1];
   myValue.vec[2] = v[2];
   myValue.vec[3] = v[3];
  }

  virtual void setValue(const Matrix& m)
  {

   if (getType() == T_MATRIX) {
    *(myValue.mat) = m;
   }
   else {
    _clearValue();
    myType = T_MATRIX;
    myValue.mat = new Matrix(m);
   }
  }

  virtual void setValue(const Value& v)
  {
   _clearValue();
   myType = v.myType;
   switch(myType) {
    case T_BOOLEAN: myValue.i = v.myValue.i; break;
    case T_INT32:
    case T_ID_I: myValue.i = v.myValue.i; break;
    case T_INT64: myValue.i64 = v.myValue.i64; break;
    case T_ID_S:
    case T_STRING: myType = T_INT32; setValue(v.myValue.us); myType = T_STRING; break;
    case T_STRINGREF: myValue.strref = v.myValue.strref; break;
    case T_NUMBER: myValue.d = v.myValue.d; break;
    case T_VALUE: myValue.val = v.myValue.val; break;
    case T_OBJECT: myValue.obj = v.myValue.obj; break;
    case T_UNDEFINED:
    case T_NULL: break;
    case T_VEC2F: memcpy(myValue.vec, v.myValue.vec, sizeof(float)*2); break;
    case T_VEC3F: memcpy(myValue.vec, v.myValue.vec, sizeof(float)*3); break;
    case T_VEC4F: memcpy(myValue.vec, v.myValue.vec, sizeof(float)*4); break;
    case T_ROTATION: memcpy(myValue.vec, v.myValue.vec, sizeof(float)*4); break;
    case T_COLOR3F: memcpy(myValue.vec, v.myValue.vec, sizeof(float)*3); break;
    case T_COLOR4F: memcpy(myValue.vec, v.myValue.vec, sizeof(float)*4); break;
    case T_MATRIX: myValue.mat = new Matrix(*(v.myValue.mat)); break;
   }
  }

  virtual Id getId() const;
  virtual bool getBoolean() const;
  virtual double getNumber() const;
  virtual int32_t getInt32() const;
  virtual int64_t getInt64() const;
  virtual bool getString(String& s) const;
  virtual String getString() const;
  virtual void getString(const char*&);
  virtual float* getFloatV();
  virtual const float* getFloatV() const { return const_cast<Value*>(this)->getFloatV(); }
  virtual int32_t* getInt32V();
  virtual const int32_t* getInt32V() const { return const_cast<Value*>(this)->getInt32V(); }
  virtual void* getPointer() const { union { void* p; double d; } u; u.d = getNumber(); return u.p; }
  virtual Object getObject() const;

  virtual bool getValue(bool& v) const { v = getBoolean(); return true; }
  virtual bool getValue(int32_t& v) const { v = getInt32(); return true; }
  virtual bool getValue(float& v) const { v = (float) getNumber(); return true; }
  virtual bool getValue(double& v) const { v = getNumber(); return true; }
  virtual bool getValue(String& v) const { getString(v); return true; }

  virtual bool getValue(Vec2f& v) const;
  virtual bool getValue(Vec3f& v) const;
  virtual bool getValue(Vec4f& v) const;
  virtual bool getValue(Rotation& v) const;
  virtual bool getValue(Color3f& v) const;
  virtual bool getValue(Color4f& v) const;
  virtual bool getValue(Matrix& m) const;

  virtual JSValueRef getValueRef() const;
  virtual Base* getBase() const;

  virtual JSObjectRef getObjectRef() const;

  ValueType getType() const { return myType; }

  void showException() const;

  static void parseString(const String& str, Vector<Value>& vec);

  static JSStringRef stringRef(const char* s) { return JSStringCreateWithUTF8CString(s); }

  bool isEqual(const char* s) const
  {
   if (myType == T_STRINGREF)
    return JSStringIsEqualToUTF8CString(myValue.strref,s);
   else
    return getString() == s;
  }

  class Iterator {
   public:
   Iterator(const Object& obj);
   ~Iterator() { if (myObject) JSPropertyNameArrayRelease(myArray); }

   bool done() { return myIndex >= mySize; }
   void next() { myIndex++; }
   JSStringRef name() { return JSPropertyNameArrayGetNameAtIndex(myArray, myIndex); }
   Value value();


   private:
   JSObjectRef myObject;
   JSPropertyNameArrayRef myArray;
   size_t mySize;
   size_t myIndex;
  };

 protected:
  Value _makeVector(ValueType type) const;

  bool _isUndefinedValue() const;
  bool _isNullValue() const;
  bool _isBooleanValue() const;
  bool _isNumberValue() const;
  bool _isObjectValue() const;
  bool _isStringValue() const;

  void _clearValue()
  {
   switch(myType) {
    case T_MATRIX:
     delete myValue.mat;
     myValue.mat = __null;
     break;
    case T_ID_S:
    case T_STRING:
     if (myValue.us != __null) {
      delete myValue.us;
      myValue.us = __null;
     }
     break;
   }
  }

 private:
  static JSContextRef _getContext();

  ValueType myType;
  union {
   int32_t i;
   double d;
   int64_t i64;
   JSObjectRef obj;
   JSValueRef val;
   JSStringRef strref;
   void* ptr;
   char* us;
   Matrix* mat;
   float vec[4];
  } myValue;
 };

}
# 29 "FusionObject.h" 2
# 1 "FusionArgs.h" 1
# 25 "FusionArgs.h"
       






namespace Fusion {
# 43 "FusionArgs.h"
 class Args {
 public:
  Args() { _initialize(); }
  Args(size_t nargs, const JSValueRef* args)
  {
   myIsAlloced = false;
   myIsReadOnly = true;
   myArgs = const_cast<JSValueRef*>(args);
   myArgCount = nargs;
   myMaxArgCount = nargs;
  }

  Args(const Args& a);
  virtual ~Args()
  {
   if (myIsAlloced)
    delete myArgs;
  }


  const Value operator [](int i) const { return (i>=0 && i<myArgCount) ? Value(myArgs[i]) : Value(); }

  void push(const Value& v);

  size_t getNum() const { return myArgCount; }
  const JSValueRef* getArgs() const { return myArgs; }

 private:
  void _initialize()
  {
   myIsAlloced = false;
   myIsReadOnly = false;
   myArgs = myStaticArgs;
   myArgCount = 0;
   myMaxArgCount = 8;
  }

  bool myIsAlloced, myIsReadOnly;
  JSValueRef* myArgs;
  JSValueRef myStaticArgs[8];
  size_t myArgCount, myMaxArgCount;
 };

}
# 30 "FusionObject.h" 2

namespace Fusion {
# 52 "FusionObject.h"
 class Object {
  friend class Args;

 public:
  Object() : myObject(__null) { }
  Object(JSObjectRef obj) : myObject(obj) { }
  Object(Value& val) : myObject(val.getObjectRef()) { }
  ~Object() { }

  void setValue(JSObjectRef obj) { myObject = obj; }

  bool hasProperty(const Id& id) const;
  Value getProperty(const Id& id) const;
  void setProperty(const Id& id, const Value& val);
  uint32_t getNum() const { return Value(*this).getNum(); }

  Value callProperty(const String& id) const { return Value(*this).callProperty(id); }
  Value callProperty(const String& id, const Value& val) const { return Value(*this).callProperty(id,val); }
  Value callProperty(const String& id, const Value& val1, const Value& val2) const { return Value(*this).callProperty(id,val1,val2); }
  Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3) const { return Value(*this).callProperty(id,val1,val2,val3); }
  Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4) const { return Value(*this).callProperty(id,val1,val2,val3,val4); }
  Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5) const { return Value(*this).callProperty(id,val1,val2,val3,val4,val5); }
  Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5, const Value& val6) const { return Value(*this).callProperty(id,val1,val2,val3,val4,val5,val6); }
  Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5, const Value& val6, const Value& val7) const { return Value(*this).callProperty(id,val1,val2,val3,val4,val5,val6,val7); }
  Value callProperty(const String& id, Args& args) const;

  Value callValue(const Object& self) const { return Value(*this).callValue(self); }
  Value callValue(const Object& self, const Value& val) const { return Value(*this).callValue(self,val); }
  Value callValue(const Object& self, const Value& val1, const Value& val2) const { return Value(*this).callValue(self,val1,val2); }
  Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3) const { return Value(*this).callValue(self,val1,val2,val3); }
  Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4) const { return Value(*this).callValue(self,val1,val2,val3,val4); }
  Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5) const { return Value(*this).callValue(self,val1,val2,val3,val4,val5); }
  Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5, const Value& val6) const { return Value(*this).callValue(self,val1,val2,val3,val4,val5,val6); }
  Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5, const Value& val6, const Value& val7) const { return Value(*this).callValue(self,val1,val2,val3,val4,val5,val6,val7); }
  Value callValue(const Object& self, Args& args) const;

  Object create() const
  {
   Args args;
   return create(args);
  }
  Object create(const Value& val) const
  {
   Args args;
   args.push(val);
   return create(args);
  }
  Object create(const Value& val1, const Value& val2) const
  {
   Args args;
   args.push(val1); args.push(val2);
   return create(args);
  }
  Object create(const Value& val1, const Value& val2, const Value& val3) const
  {
   Args args;
   args.push(val1); args.push(val2); args.push(val3);
   return create(args);
  }
  Object create(const Value& val1, const Value& val2, const Value& val3,
           const Value& val4) const
  {
   Args args;
   args.push(val1); args.push(val2); args.push(val3); args.push(val4);
   return create(args);
  }
  Object create(const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5) const
  {
   Args args;
   args.push(val1); args.push(val2); args.push(val3); args.push(val4); args.push(val5);
   return create(args);
  }
  Object create(const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5, const Value& val6) const
  {
   Args args;
   args.push(val1); args.push(val2); args.push(val3); args.push(val4); args.push(val5); args.push(val6);
   return create(args);
  }
  Object create(const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5, const Value& val6, const Value& val7) const

  {
   Args args;
   args.push(val1); args.push(val2); args.push(val3); args.push(val4); args.push(val5); args.push(val6); args.push(val7);
   return create(args);
  }
  Object create(Args& args) const;

  String toString() const;
  uint32_t getElementSize() const;

  bool isPrototypeOf(Object& obj) const;

  bool isObject() const { return myObject != __null; }

  Value getValue(HintType=HINT_NONE) const;
  float* getFloatV();
  const float* getFloatV() const { return const_cast<Object*>(this)->getFloatV(); }
  int32_t* getInt32V();
  const int32_t* getInt32V() const { return const_cast<Object*>(this)->getInt32V(); }

  JSObjectRef getObjectRef() const { return myObject; }
  Base* getBase() { return Value(getObjectRef()).getBase(); }

  static Object global();

  Value load(const String& filename);
  Value load(DataStream& ds, const char* name, int lineno);
  Value eval(const char* str, bool isExpr, const char* name, int lineno);

  static void log(LogLevelType level, const char* module, const char* fmt, ... );

  static JSContextRef context() { return _context(false); }
  static void destroyContext();

  private:
  static JSContextRef _context(bool nullify)
  {
   static JSContextRef ctx = __null;
   if (nullify) {
    ctx = __null;
    return __null;
   }

   if (ctx == __null) {
    ctx = _createContext();
    _initContext();
   }
   return ctx;
  }

  static JSContextRef _createContext();
  static void _initContext();

  typedef void (Object::*BaseFunc)();
  typedef void (*StaticFunc)();

  void _registerFunction(const char* name, BaseFunc func, JSObjectCallAsFunctionCallback thunk);
  void _registerStaticFunction(const char* name, StaticFunc func, JSObjectCallAsFunctionCallback thunk);

  template<typename Callee>
  static bool _getCallee(JSObjectRef jsobj, Callee*& obj)
  {
   obj = dynamic_cast<Callee*>((Base*) (JSObjectGetPrivate(jsobj)));
   if (obj == __null) {
    log(L_ERROR, "fusion", "this variable is null, function requires instance.");
    return false;
   }
   return true;
  }


# 1 "thunks.h" 1
public:




template<typename Callee>
 void registerFunction(const char* name, void (Callee::*func)(Args& args))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), voidargsthunk<Callee>); }

template<typename Callee>
 void registerFunction(const char* name, void (Callee::*func)())
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidthunk<Callee>); }

template<typename Callee, typename P1>
 void registerFunction(const char* name, void (Callee::*func)(P1))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidthunk<Callee, P1>); }

template<typename Callee, typename P1, typename P2>
 void registerFunction(const char* name, void (Callee::*func)(P1, P2))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidthunk<Callee, P1, P2>); }

template<typename Callee, typename P1, typename P2, typename P3>
 void registerFunction(const char* name, void (Callee::*func)(P1, P2, P3))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidthunk<Callee, P1, P2, P3>); }

template<typename Callee, typename P1, typename P2, typename P3, typename P4>
 void registerFunction(const char* name, void (Callee::*func)(P1, P2, P3, P4))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidthunk<Callee, P1, P2, P3, P4>); }

template<typename Callee, typename P1, typename P2, typename P3, typename P4, typename P5>
 void registerFunction(const char* name, void (Callee::*func)(P1, P2, P3, P4, P5))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidthunk<Callee, P1, P2, P3, P4, P5>); }

template<typename Callee, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
 void registerFunction(const char* name, void (Callee::*func)(P1, P2, P3, P4, P5, P6))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidthunk<Callee, P1, P2, P3, P4, P5, P6>); }

template<typename Callee, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
 void registerFunction(const char* name, void (Callee::*func)(P1, P2, P3, P4, P5, P6, P7))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidthunk<Callee, P1, P2, P3, P4, P5, P6, P7>); }


template<typename Callee, typename RT>
 void registerFunction(const char* name, RT (Callee::*func)(Args& args))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), argsthunk<Callee, RT>); }

template<typename Callee, typename RT>
 void registerFunction(const char* name, RT (Callee::*func)())
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::thunk<Callee, RT>); }

template<typename Callee, typename RT, typename P1>
 void registerFunction(const char* name, RT (Callee::*func)(P1))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::thunk<Callee, RT, P1>); }

template<typename Callee, typename RT, typename P1, typename P2>
 void registerFunction(const char* name, RT (Callee::*func)(P1, P2))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::thunk<Callee, RT, P1, P2>); }

template<typename Callee, typename RT, typename P1, typename P2, typename P3>
 void registerFunction(const char* name, RT (Callee::*func)(P1, P2, P3))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::thunk<Callee, RT, P1, P2, P3>); }

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4>
 void registerFunction(const char* name, RT (Callee::*func)(P1, P2, P3, P4))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::thunk<Callee, RT, P1, P2, P3, P4>); }

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4, typename P5>
 void registerFunction(const char* name, RT (Callee::*func)(P1, P2, P3, P4, P5))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::thunk<Callee, RT, P1, P2, P3, P4, P5>); }

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
 void registerFunction(const char* name, RT (Callee::*func)(P1, P2, P3, P4, P5, P6))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::thunk<Callee, RT, P1, P2, P3, P4, P5, P6>); }

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
 void registerFunction(const char* name, RT (Callee::*func)(P1, P2, P3, P4, P5, P6, P7))
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::thunk<Callee, RT, P1, P2, P3, P4, P5, P6, P7>); }


template<typename Callee>
 void registerFunction(const char* name, void (Callee::*func)(Args& args) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), argsthunk<Callee>); }

template<typename Callee>
 void registerFunction(const char* name, void (Callee::*func)() const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidconstthunk<Callee>); }

template<typename Callee, typename P1>
 void registerFunction(const char* name, void (Callee::*func)(P1) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidconstthunk<Callee, P1>); }

template<typename Callee, typename P1, typename P2>
 void registerFunction(const char* name, void (Callee::*func)(P1, P2) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidconstthunk<Callee, P1, P2>); }

template<typename Callee, typename P1, typename P2, typename P3>
 void registerFunction(const char* name, void (Callee::*func)(P1, P2, P3) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidconstthunk<Callee, P1, P2, P3>); }

template<typename Callee, typename P1, typename P2, typename P3, typename P4>
 void registerFunction(const char* name, void (Callee::*func)(P1, P2, P3, P4) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidconstthunk<Callee, P1, P2, P3, P4>); }

template<typename Callee, typename P1, typename P2, typename P3, typename P4, typename P5>
 void registerFunction(const char* name, void (Callee::*func)(P1, P2, P3, P4, P5) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidconstthunk<Callee, P1, P2, P3, P4, P5>); }

template<typename Callee, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
 void registerFunction(const char* name, void (Callee::*func)(P1, P2, P3, P4, P5, P6) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidconstthunk<Callee, P1, P2, P3, P4, P5, P6>); }

template<typename Callee, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
 void registerFunction(const char* name, void (Callee::*func)(P1, P2, P3, P4, P5, P6, P7) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::voidconstthunk<Callee, P1, P2, P3, P4, P5, P6, P7>); }


template<typename Callee, typename RT>
 void registerFunction(const char* name, RT (Callee::*func)(Args& args) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), constargsthunk<Callee, RT>); }

template<typename Callee, typename RT>
 void registerFunction(const char* name, RT (Callee::*func)() const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::constthunk<Callee, RT>); }

template<typename Callee, typename RT, typename P1>
 void registerFunction(const char* name, RT (Callee::*func)(P1) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::constthunk<Callee, RT, P1>); }

template<typename Callee, typename RT, typename P1, typename P2>
 void registerFunction(const char* name, RT (Callee::*func)(P1, P2) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::constthunk<Callee, RT, P1, P2>); }

template<typename Callee, typename RT, typename P1, typename P2, typename P3>
 void registerFunction(const char* name, RT (Callee::*func)(P1, P2, P3) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::constthunk<Callee, RT, P1, P2, P3>); }

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4>
 void registerFunction(const char* name, RT (Callee::*func)(P1, P2, P3, P4) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::constthunk<Callee, RT, P1, P2, P3, P4>); }

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4, typename P5>
 void registerFunction(const char* name, RT (Callee::*func)(P1, P2, P3, P4, P5) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::constthunk<Callee, RT, P1, P2, P3, P4, P5>); }

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
 void registerFunction(const char* name, RT (Callee::*func)(P1, P2, P3, P4, P5, P6) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::constthunk<Callee, RT, P1, P2, P3, P4, P5, P6>); }

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
 void registerFunction(const char* name, RT (Callee::*func)(P1, P2, P3, P4, P5, P6, P7) const)
{ _registerFunction(name, reinterpret_cast<BaseFunc>(func), &Object::constthunk<Callee, RT, P1, P2, P3, P4, P5, P6, P7>); }


 void registerStaticFunction(const char* name, void (*func)(Args& args))
{ _registerStaticFunction(name, reinterpret_cast<void (*)()>(func), &Object::staticvoidargsthunk); }

 void registerStaticFunction(const char* name, void (*func)())
{ _registerStaticFunction(name, reinterpret_cast<void (*)()>(func), &Object::staticvoidthunk); }

template<typename P1>
 void registerStaticFunction(const char* name, void (*func)(P1))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticvoidthunk<P1>); }

template<typename P1, typename P2>
 void registerStaticFunction(const char* name, void (*func)(P1, P2))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticvoidthunk<P1, P2>); }

template<typename P1, typename P2, typename P3>
 void registerStaticFunction(const char* name, void (*func)(P1, P2, P3))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticvoidthunk<P1, P2, P3>); }

template<typename P1, typename P2, typename P3, typename P4>
 void registerStaticFunction(const char* name, void (*func)(P1, P2, P3, P4))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticvoidthunk<P1, P2, P3, P4>); }

template<typename P1, typename P2, typename P3, typename P4, typename P5>
 void registerStaticFunction(const char* name, void (*func)(P1, P2, P3, P4, P5))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticvoidthunk<P1, P2, P3, P4, P5>); }

template<typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
 void registerStaticFunction(const char* name, void (*func)(P1, P2, P3, P4, P5, P6))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticvoidthunk<P1, P2, P3, P4, P5, P6>); }

template<typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
 void registerStaticFunction(const char* name, void (*func)(P1, P2, P3, P4, P5, P6, P7))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticvoidthunk<P1, P2, P3, P4, P5, P6, P7>); }


template<typename RT>
 void registerStaticFunction(const char* name, RT (*func)(Args& args))
{ _registerStaticFunction(name, reinterpret_cast<BaseFunc>(func), &Object::staticargsthunk<RT>); }

template<typename RT>
 void registerStaticFunction(const char* name, RT (*func)())
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticthunk<RT>); }

template<typename RT, typename P1>
 void registerStaticFunction(const char* name, RT (*func)(P1))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticthunk<RT, P1>); }

template<typename RT, typename P1, typename P2>
 void registerStaticFunction(const char* name, RT (*func)(P1, P2))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticthunk<RT, P1, P2>); }

template<typename RT, typename P1, typename P2, typename P3>
 void registerStaticFunction(const char* name, RT (*func)(P1, P2, P3))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticthunk<RT, P1, P2, P3>); }

template<typename RT, typename P1, typename P2, typename P3, typename P4>
 void registerStaticFunction(const char* name, RT (*func)(P1, P2, P3, P4))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticthunk<RT, P1, P2, P3, P4>); }

template<typename RT, typename P1, typename P2, typename P3, typename P4, typename P5>
 void registerStaticFunction(const char* name, RT (*func)(P1, P2, P3, P4, P5))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticthunk<RT, P1, P2, P3, P4, P5>); }

template<typename RT, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
 void registerStaticFunction(const char* name, RT (*func)(P1, P2, P3, P4, P5, P6))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticthunk<RT, P1, P2, P3, P4, P5, P6>); }

template<typename RT, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
 void registerStaticFunction(const char* name, RT (*func)(P1, P2, P3, P4, P5, P6, P7))
{ _registerStaticFunction(name, reinterpret_cast<StaticFunc>(func), &Object::staticthunk<RT, P1, P2, P3, P4, P5, P6, P7>); }

private:




template<typename Callee>
static JSValueRef voidargsthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(Args& args);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 (obj->*(u.f))(args);
 return __null;
}

template<typename Callee>
static JSValueRef voidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)();
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 (obj->*(u.f))();
 return __null;
}

template<typename Callee, typename P1>
static JSValueRef voidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0];
 (obj->*(u.f))((P1) p1);
 return __null;
}

template<typename Callee, typename P1, typename P2>
static JSValueRef voidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1, P2);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1];
 (obj->*(u.f))((P1) p1, (P2) p2);
 return __null;
}

template<typename Callee, typename P1, typename P2, typename P3>
static JSValueRef voidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1, P2, P3);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2];
 (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3);
 return __null;
}

template<typename Callee, typename P1, typename P2, typename P3, typename P4>
static JSValueRef voidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1, P2, P3, P4);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3];
 (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4);
 return __null;
}

template<typename Callee, typename P1, typename P2, typename P3, typename P4, typename P5>
static JSValueRef voidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1, P2, P3, P4, P5);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4];
 (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5);
 return __null;
}

template<typename Callee, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
static JSValueRef voidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1, P2, P3, P4, P5, P6);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4]; Value p6 = args[5];
 (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5, (P6) p6);
 return __null;
}

template<typename Callee, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
static JSValueRef voidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1, P2, P3, P4, P5, P6, P7);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4]; Value p6 = args[5]; Value p7 = args[6];
 (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5, (P6) p6, (P7) p7);
 return __null;
}


template<typename Callee, typename RT>
static JSValueRef argsthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(Args& args);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 RT rt = (obj->*(u.f))(args);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT>
static JSValueRef thunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)();
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 RT rt = (obj->*(u.f))();
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1>
static JSValueRef thunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1];
 RT rt = (obj->*(u.f))((P1) p1);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1, typename P2>
static JSValueRef thunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1, P2);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1];
 RT rt = (obj->*(u.f))((P1) p1, (P2) p2);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1, typename P2, typename P3>
static JSValueRef thunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1, P2, P3);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2];
 RT rt = (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4>
static JSValueRef thunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1, P2, P3, P4);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3];
 RT rt = (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4, typename P5>
static JSValueRef thunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1, P2, P3, P4, P5);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4];
 RT rt = (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
static JSValueRef thunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1, P2, P3, P4, P5, P6);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4]; Value p6 = args[5];
 RT rt = (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5, (P6) p6);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
static JSValueRef thunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1, P2, P3, P4, P5, P6, P7);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4]; Value p6 = args[5]; Value p7 = args[6];
 RT rt = (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5, (P6) p6, (P7) p7);
 return Value(rt).getValueRef();
}


template<typename Callee>
static JSValueRef voidconstargsthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(Args& args) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 (obj->*(u.f))(args);
 return __null;
}

template<typename Callee>
static JSValueRef voidconstthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)() const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 (obj->*(u.f))();
 return __null;
}

template<typename Callee, typename P1>
static JSValueRef voidconstthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1];
 (obj->*(u.f))((P1) p1);
 return __null;
}

template<typename Callee, typename P1, typename P2>
static JSValueRef voidconstthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1, P2) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1];
 (obj->*(u.f))((P1) p1, (P2) p2);
 return __null;
}

template<typename Callee, typename P1, typename P2, typename P3>
static JSValueRef voidconstthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1, P2, P3) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2];
 (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3);
 return __null;
}

template<typename Callee, typename P1, typename P2, typename P3, typename P4>
static JSValueRef voidconstthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1, P2, P3, P4) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3];
 (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4);
 return __null;
}

template<typename Callee, typename P1, typename P2, typename P3, typename P4, typename P5>
static JSValueRef voidconstthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1, P2, P3, P4, P5) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4];
 (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5);
 return __null;
}

template<typename Callee, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
static JSValueRef voidconstthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1, P2, P3, P4, P5, P6) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4]; Value p6 = args[5];
 (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5, (P6) p6);
 return __null;
}

template<typename Callee, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
static JSValueRef voidconstthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (Callee::*F)(P1, P2, P3, P4, P5, P6, P7) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4]; Value p6 = args[5]; Value p7 = args[6];
 (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5, (P6) p6, (P7) p7);
 return __null;
}


template<typename Callee, typename RT>
static JSValueRef constargsthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(Args& args) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 RT rt = (obj->*(u.f))(args);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT>
static JSValueRef constthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)() const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 RT rt = (obj->*(u.f))();
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1>
static JSValueRef constthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0];
 RT rt = (obj->*(u.f))((P1) p1);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1, typename P2>
static JSValueRef constthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1, P2) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1];
 RT rt = (obj->*(u.f))((P1) p1, (P2) p2);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1, typename P2, typename P3>
static JSValueRef constthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1, P2, P3) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2];
 RT rt = (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4>
static JSValueRef constthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1, P2, P3, P4) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3];
 RT rt = (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4, typename P5>
static JSValueRef constthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1, P2, P3, P4, P5) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4];
 RT rt = (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
static JSValueRef constthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1, P2, P3, P4, P5, P6) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4]; Value p6 = args[5];
 RT rt = (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5, (P6) p6);
 return Value(rt).getValueRef();
}

template<typename Callee, typename RT, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
static JSValueRef constthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (Callee::*F)(P1, P2, P3, P4, P5, P6, P7) const;
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Callee *obj;
 if (!_getCallee<Callee>(thisObject, obj)) return Value().getValueRef();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4]; Value p6 = args[5]; Value p7 = args[6];
 RT rt = (obj->*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5, (P6) p6, (P7) p7);
 return Value(rt).getValueRef();
}


static JSValueRef staticvoidargsthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (*F)(Args& args);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 (*(u.f))(args);
 return __null;
}

static JSValueRef staticvoidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (*F)();
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 (*(u.f))();
 return __null;
}

template<typename P1>
static JSValueRef staticvoidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (*F)(P1);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0];
 (*(u.f))((P1) p1);
 return __null;
}

template<typename P1, typename P2>
static JSValueRef staticvoidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (*F)(P1, P2);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1];
 (*(u.f))((P1) p1, (P2) p2);
 return __null;
}

template<typename P1, typename P2, typename P3>
static JSValueRef staticvoidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (*F)(P1, P2, P3);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2];
 (*(u.f))((P1) p1, (P2) p2, (P3) p3);
 return __null;
}

template<typename P1, typename P2, typename P3, typename P4>
static JSValueRef staticvoidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (*F)(P1, P2, P3, P4);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3];
 (*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4);
 return __null;
}

template<typename P1, typename P2, typename P3, typename P4, typename P5>
static JSValueRef staticvoidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (*F)(P1, P2, P3, P4, P5);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4];
 (*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5);
 return __null;
}

template<typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
static JSValueRef staticvoidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (*F)(P1, P2, P3, P4, P5, P6);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4]; Value p6 = args[5];
 (*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5, (P6) p6);
 return __null;
}

template<typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
static JSValueRef staticvoidthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef void (*F)(P1, P2, P3, P4, P5, P6, P7);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4]; Value p6 = args[5]; Value p7 = args[6];
 (*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5, (P6) p6, (P7) p7);
 return __null;
}


template<typename RT>
static JSValueRef staticargsthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (*F)(Args& args);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 RT rt = (*(u.f))(args);
 return Value(rt).getValueRef();
}

template<typename RT>
static JSValueRef staticthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (*F)();
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 RT rt = (*(u.f))();
 return Value(rt).getValueRef();
}

template<typename RT, typename P1>
static JSValueRef staticthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (*F)(P1);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0];
 RT rt = (*(u.f))((P1) p1);
 return Value(rt).getValueRef();
}

template<typename RT, typename P1, typename P2>
static JSValueRef staticthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (*F)(P1, P2);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1];
 RT rt = (*(u.f))((P1) p1, (P2) p2);
 return Value(rt).getValueRef();
}

template<typename RT, typename P1, typename P2, typename P3>
static JSValueRef staticthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (*F)(P1, P2, P3);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2];
 RT rt = (*(u.f))((P1) p1, (P2) p2, (P3) p3);
 return Value(rt).getValueRef();
}

template<typename RT, typename P1, typename P2, typename P3, typename P4>
static JSValueRef staticthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (*F)(P1, P2, P3, P4);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3];
 RT rt = (*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4);
 return Value(rt).getValueRef();
}

template<typename RT, typename P1, typename P2, typename P3, typename P4, typename P5>
static JSValueRef staticthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (*F)(P1, P2, P3, P4, P5);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4];
 RT rt = (*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5);
 return Value(rt).getValueRef();
}

template<typename RT, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
static JSValueRef staticthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (*F)(P1, P2, P3, P4, P5, P6);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4]; Value p6 = args[5];
 RT rt = (*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5, (P6) p6);
 return Value(rt).getValueRef();
}

template<typename RT, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
static JSValueRef staticthunk(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
 typedef RT (*F)(P1, P2, P3, P4, P5, P6, P7);
 union { F f; double d; } u;
 u.d = Object(function).getProperty("_f").getNumber();
 Args args(argumentCount, arguments);
 Value p1 = args[0]; Value p2 = args[1]; Value p3 = args[2]; Value p4 = args[3]; Value p5 = args[4]; Value p6 = args[5]; Value p7 = args[6];
 RT rt = (*(u.f))((P1) p1, (P2) p2, (P3) p3, (P4) p4, (P5) p5, (P6) p6, (P7) p7);
 return Value(rt).getValueRef();
}
# 215 "FusionObject.h" 2

 protected:
# 254 "FusionObject.h"
  static JSValueRef _include(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);


  static JSValueRef _preload(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);


  static JSValueRef _print(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);

  static void _importProps(Object& dest, const Object& src, const Object& importList1, const Object& importList2);

 private:
  JSObjectRef myObject;
 };

}
# 12 "CasEngine.h" 2
# 1 "FusionBase.h" 1
# 25 "FusionBase.h"
       

# 1 "/usr/include/c++/4.0.0/cstdarg" 1 3
# 46 "/usr/include/c++/4.0.0/cstdarg" 3
       
# 47 "/usr/include/c++/4.0.0/cstdarg" 3
# 55 "/usr/include/c++/4.0.0/cstdarg" 3
namespace std
{
  using ::va_list;
}
# 28 "FusionBase.h" 2





namespace Fusion {
# 126 "FusionBase.h"
 class Base {
  friend class Args;

 protected:
  Base(JSObjectRef self, const Args& args) : myObjectRef(self)
  {

   JSObjectSetPrivate(self, this);
  }
  virtual ~Base() { }

 public:
  JSObjectRef getObjectRef() { return myObjectRef; }

  static Base* staticCreate()
  {
   Args args;
   Object proto = getClass();
   return _staticCreate(args, newObject, getJSClass(), proto);
  }

  static Base* staticCreate(const Fusion::Args& args)
  {
   Object proto = getClass();
   return _staticCreate(args, newObject, getJSClass(), proto);
  }

  static Object getClass()
  {
   static JSObjectRef proto = __null;
   if (proto == __null) {
    proto = _createClass(getJSClass());
    Object protoobj(proto);
    protoobj.setProperty("__name", getTypeName()); initializeClass(protoobj);

   }
   return Object(proto);
  }
  static JSClassRef getJSClass()
  {
   static JSClassRef jsClass;
   if (!jsClass) {
    JSClassDefinition definition = kJSClassDefinitionEmpty;
    definition.attributes = kJSClassAttributeNoPrototype;
    definition.finalize = _finalize;
    definition.className = getTypeName();
    definition.hasProperty = __hasProperty;
    definition.getProperty = __getProperty;
    definition.setProperty = __setProperty;
    definition.deleteProperty = __deleteProperty;
    definition.getPropertyNames = __getPropertyNames;
    definition.hasInstance = __hasInstance;
    definition.convertToType = __convertToType;
    definition.callAsFunction = ctor_func;
    definition.callAsConstructor = ctor;
    jsClass = JSClassCreate(&definition);
   }
   return jsClass;
  }
  static JSObjectRef ctor(JSContextRef ctx, JSObjectRef constructor, size_t nargs, const JSValueRef* args, JSValueRef* exp)
  {
   Args a(nargs, args);
   Object proto = getClass();
   return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef();
  }
  static JSValueRef ctor_func(JSContextRef ctx, JSObjectRef func, JSObjectRef thisObj, size_t nargs,
                       const JSValueRef* args, JSValueRef* exp)
  {
   Args a(nargs, args);
   Object proto = getClass();
   return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef();
  }
  virtual const char* getName() const { return getTypeName(); }
  static const char* getTypeName() { return "Base"; }




  static void initializeClass(Object& obj);


  virtual void addChild(const Value& obj) { }

  static JSObjectRef _createClass(JSClassRef cl, JSObjectRef parent = __null)
  {
   JSObjectRef proto = JSObjectMake(Object::context(), cl, __null);
   if (parent != __null)
    JSObjectSetPrototype(Object::context(),proto,parent);
   return proto;
  }

  bool hasProperty(const Id& id) const { return Object(myObjectRef).hasProperty(id); }
  Value getProperty(const Id& id) const { return Object(myObjectRef).getProperty(id); }
  void setProperty(const Id& id, const Value& val) { Object(myObjectRef).setProperty(id, val); }

  Value callProperty(const String& id) const { return Value(this).callProperty(id); }
  Value callProperty(const String& id, const Value& val) const { return Value(this).callProperty(id,val); }
  Value callProperty(const String& id, const Value& val1, const Value& val2) const { return Value(this).callProperty(id,val1,val2); }
  Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3) const { return Value(this).callProperty(id,val1,val2,val3); }
  Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4) const { return Value(this).callProperty(id,val1,val2,val3,val4); }
  Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5) const { return Value(this).callProperty(id,val1,val2,val3,val4,val5); }
  Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5, const Value& val6) const { return Value(this).callProperty(id,val1,val2,val3,val4,val5,val6); }
  Value callProperty(const String& id, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5, const Value& val6, const Value& val7) const { return Value(this).callProperty(id,val1,val2,val3,val4,val5,val6,val7); }
  Value callProperty(const String& id, Args& args) const { return Object(myObjectRef).callProperty(id, args); }

  Value callValue(const Object& self) const { return Value(this).callValue(self); }
  Value callValue(const Object& self, const Value& val) const { return Value(this).callValue(self,val); }
  Value callValue(const Object& self, const Value& val1, const Value& val2) const { return Value(this).callValue(self,val1,val2); }
  Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3) const { return Value(this).callValue(self,val1,val2,val3); }
  Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4) const { return Value(this).callValue(self,val1,val2,val3,val4); }
  Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5) const { return Value(this).callValue(self,val1,val2,val3,val4,val5); }
  Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5, const Value& val6) const { return Value(this).callValue(self,val1,val2,val3,val4,val5,val6); }
  Value callValue(const Object& self, const Value& val1, const Value& val2, const Value& val3,
           const Value& val4, const Value& val5, const Value& val6, const Value& val7) const { return Value(this).callValue(self,val1,val2,val3,val4,val5,val6,val7); }
  Value callValue(const Object& self, Args& args) const { return Object(myObjectRef).callValue(self, args); }

  Base* create() const
  {
   Args args;
   return create(args);
  }
  Base* create(const Value& val) const
  {
   Args args;
   args.push(val);
   return create(args);
  }
  Base* create(const Value& val1, const Value& val2) const
  {
   Args args;
   args.push(val1); args.push(val2);
   return create(args);
  }
  Base* create(const Value& val1, const Value& val2, const Value& val3) const
  {
   Args args;
   args.push(val1); args.push(val2); args.push(val3);
   return create(args);
  }
  Base* create(const Value& val1, const Value& val2, const Value& val3,
  const Value& val4) const
  {
   Args args;
   args.push(val1); args.push(val2); args.push(val3); args.push(val4);
   return create(args);
  }
  Base* create(const Value& val1, const Value& val2, const Value& val3,
  const Value& val4, const Value& val5) const
  {
   Args args;
   args.push(val1); args.push(val2); args.push(val3); args.push(val4); args.push(val5);
   return create(args);
  }
  Base* create(const Value& val1, const Value& val2, const Value& val3,
  const Value& val4, const Value& val5, const Value& val6) const
  {
   Args args;
   args.push(val1); args.push(val2); args.push(val3); args.push(val4); args.push(val5); args.push(val6);
   return create(args);
  }
  Base* create(const Value& val1, const Value& val2, const Value& val3,
  const Value& val4, const Value& val5, const Value& val6, const Value& val7) const

  {
   Args args;
   args.push(val1); args.push(val2); args.push(val3); args.push(val4); args.push(val5); args.push(val6); args.push(val7);
   return create(args);
  }

  Base* create(const Args& args) const { return _create(args); }

  bool isOfType(const Object& obj) const
  {
   return __hasInstance(Object::context(), obj.getObjectRef(), Value(this).getValueRef(), __null);
  }

  void addAttrs(const Value& attrs);
  void addArgsToObject(const Args& args) { _initialize(args); }

  protected:
# 323 "FusionBase.h"
  virtual void _initialize(const Args& args);
  static void _finalize(JSObjectRef obj);

  static Base* _staticCreate(const Args& args, Base* (*newObject)(JSObjectRef self, const Args& args), JSClassRef cl, Object& proto);
  virtual Base* _create(const Args& args) const { return staticCreate(args); }

  static bool __hasProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName);
  static JSValueRef __getProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception);
  static bool __setProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSValueRef* exception);
  static bool __deleteProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception);
  static bool __hasInstance(JSContextRef context, JSObjectRef constructor, JSValueRef possibleValue, JSValueRef* exception);
  static JSValueRef __convertToType(JSContextRef context, JSObjectRef object, JSType type, JSValueRef* exception);

  static void __getPropertyNames(JSContextRef context, JSObjectRef object, JSPropertyNameAccumulatorRef propertyNames)
  {
  }

  virtual String toString() const;

  Value& parent() { return myParent; }


  virtual bool _hasProperty(const Value& name) { return false; }
  virtual Value _getProperty(const Value& name) { return Value(); }
  virtual bool _setProperty(const Value& name, const Value& value) { return false; }

  private:
  static Base* newObject(JSObjectRef self, const Args& args) { return new Base(self, args); }

  JSObjectRef myObjectRef;




  Value myParent;
 };

}
# 13 "CasEngine.h" 2
# 1 "FusionOrderedArray.h" 1
# 26 "FusionOrderedArray.h"
       



namespace Fusion {







template <class key, class val> class OrderedArray {
public:
 typedef struct {
  key k;
  val v;
 } Item;

    OrderedArray(uint32_t initialSize = 0) : myArray(initialSize) { }

    OrderedArray(const OrderedArray<key,val>& t) { *this = t; }

    ~OrderedArray() { }

    uint32_t getNum() const { return myArray.getNum(); }

    int32_t insert(const key& k)
 {

  int32_t i;
  if (!_find(k, i, true))
   myArray.insert(i);
  myArray[i].k = k;
  return i;
 }

    int32_t insert(const key& k, const val& v)
 {
  int32_t i = insert(k);
  if (i < 0)
   return -1;
  myArray[i].v = v;
  return i;
 }
 void clear() { myArray.clear(); }
    void removeIndex(uint32_t i, uint32_t n=1) { myArray.removeIndex(i,n); }
    void removeKey(const key& k)
 {
  int32_t i;
  if (_find(k, i, false))
   removeIndex(i);
 }

    OrderedArray<key,val>& operator =(const OrderedArray<key,val>& t)
    {
  myArray = t.myArray;
  return *this;
    }


    val& operator [](uint32_t i) { (__builtin_expect(!(i<getNum()), 0) ? __assert_rtn(__func__, "FusionOrderedArray.h", 87, "i<getNum()") : (void)0); return myArray[i].v; }
    const val& operator [](uint32_t i) const { (__builtin_expect(!(i<getNum()), 0) ? __assert_rtn(__func__, "FusionOrderedArray.h", 88, "i<getNum()") : (void)0); return myArray[i].v; }
    const key& getKey(uint32_t i) const { (__builtin_expect(!(i<getNum()), 0) ? __assert_rtn(__func__, "FusionOrderedArray.h", 89, "i<getNum()") : (void)0); return myArray[i].k; }

    int32_t find(const key& _val) const
    {
  int32_t i;
  return _find(_val, i, false) ? i : -1;
    }

private:
 bool _find(const key& k, int32_t& i, bool findInsertPoint) const
 {



  if (!findInsertPoint) {

   switch(getNum()) {
    case 6: if (k == myArray[5].k) { i = 5; return true; }
    case 5: if (k == myArray[4].k) { i = 4; return true; }
    case 4: if (k == myArray[3].k) { i = 3; return true; }
    case 3: if (k == myArray[2].k) { i = 2; return true; }
    case 2: if (k == myArray[1].k) { i = 1; return true; }
    case 1: if (k == myArray[0].k) { i = 0; return true; }
    case 0: i = 0; return false;
   }
  }

  uint32_t num = getNum();
  if (num == 0) {
   i = 0;
   return false;
  }

  const Item* lo = &(myArray[0]);
  const Item* hi = &(myArray[num - 1]);
  const Item* mid;
  uint32_t half;
  const Item* result = __null;
  bool found;

  while (1) {
   if (half = num / 2)
   {
    mid = lo + (num & 1 ? half : (half - 1));
    if (k == mid->k) {
     result = mid;
     found = true;
     break;
    }
    else if (k < mid->k) {
     hi = mid - 1;
     num = (num & 1) ? half : half-1;
    }
    else {
     lo = mid + 1;
     num = half;
    }
   }
   else {
    result = lo;
    if (k == lo->k)
     found = true;
    else {
     found = false;
     if (k > lo->k)
      result++;
    }

    break;
   }
  }

  i = (int32_t)(result - &(myArray[0]));
  return found;
 }

 Vector<Item> myArray;
};

}
# 14 "CasEngine.h" 2

namespace Cas {
 class Layer;


 class Cas : public Fusion::Base
 {
  protected:
  virtual ~Cas() { }

  public:
  Cas(JSObjectRef self, const Fusion::Args& args) : Fusion::Base(self, args) { }

  public: static void initializeClass(Fusion::Object& obj); static Fusion::Object getClass() { static JSObjectRef proto = __null; if (proto == __null) { proto = _createClass(getJSClass(), Base::getClass().getObjectRef()); Fusion::Object protoobj(proto); protoobj.setProperty("__name", getTypeName()); initializeClass(protoobj); } return Fusion::Object(proto); } static Fusion::Base* staticCreate() { Fusion::Args args; Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } static Fusion::Base* staticCreate(const Fusion::Args& args) { Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } virtual Fusion::Base* _create(const Fusion::Args& args) const { return staticCreate(args); } static JSClassRef getJSClass() { static JSClassRef jsClass; if (!jsClass) { JSClassDefinition definition = kJSClassDefinitionEmpty; definition.attributes = kJSClassAttributeNoPrototype; definition.finalize = _finalize; definition.hasProperty = __hasProperty; definition.getProperty = __getProperty; definition.setProperty = __setProperty; definition.deleteProperty = __deleteProperty; definition.getPropertyNames = __getPropertyNames; definition.hasInstance = __hasInstance; definition.convertToType = __convertToType; definition.callAsFunction = ctor_func; definition.callAsConstructor = ctor; definition.className = getTypeName(); definition.parentClass = Base::getJSClass(); jsClass = JSClassCreate(&definition); } return jsClass; } static JSObjectRef ctor(JSContextRef ctx, JSObjectRef constructor, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } static JSValueRef ctor_func(JSContextRef ctx, JSObjectRef func, JSObjectRef thisObj, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } virtual const char* getName() const { return getTypeName(); } static const char* getTypeName() { return "Cas"; } private: static Fusion::Base* newObject(JSObjectRef self, const Fusion::Args& args) { return new Cas(self, args); } public:

  virtual bool _hasProperty(const Fusion::Value& name);
  virtual Fusion::Value _getProperty(const Fusion::Value& name);

  void addEventHandler(const Fusion::String& type, Fusion::Base* handler);
  void removeEventHandler(const Fusion::String& type, Fusion::Base* handler);
  void removeAllEventHandlers(Fusion::Base* handler);
  void sendEvent(double ts, const Fusion::String& cl, const Fusion::String& typestring,
                      const Fusion::Value& val);
  void render(double ts);
  Fusion::Object makeClass(Fusion::Args& args);
  Fusion::Value find(const Fusion::Value& container, const Fusion::String& name);

  private:
  Fusion::OrderedArray< Fusion::String, Fusion::Vector<Fusion::Base*> > myEventHandlers;
 };

 class Engine {
  public:
  Engine(const char* resourcePath, CGLContextObj context);
  ~Engine();

  void setFileBase(const char* fileBase);
  Fusion::Value load(const char* url);
  void render(double t);
  float lastFPS();
  float averageFPS();
  Fusion::Object global() { return myGlobal; }

  void sendEvent(double ts, const Fusion::String& cl, const Fusion::String& typestring);
  void sendEvent(double ts, const Fusion::String& cl, const Fusion::String& typestring,
                     const Fusion::Value& val);
  void mouseMoved(double ts, float x, float y);

  void* rootLayer();

  static Fusion::Value handleAsProperty(const Fusion::Value& obj, Fusion::String& name);

  private:
  Fusion::Object myGlobal;
  Layer* myRootLayer;
  Fusion::Value myRoot;
 };



 class XMLBase : public Fusion::Base
 {
  protected:
  virtual ~XMLBase() { }

  public:
  XMLBase(JSObjectRef self, const Fusion::Args& args) : Fusion::Base(self, args), myEventProps(__null) { }

  public: static void initializeClass(Fusion::Object& obj); static Fusion::Object getClass() { static JSObjectRef proto = __null; if (proto == __null) { proto = _createClass(getJSClass(), Base::getClass().getObjectRef()); Fusion::Object protoobj(proto); protoobj.setProperty("__name", getTypeName()); initializeClass(protoobj); } return Fusion::Object(proto); } static Fusion::Base* staticCreate() { Fusion::Args args; Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } static Fusion::Base* staticCreate(const Fusion::Args& args) { Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } virtual Fusion::Base* _create(const Fusion::Args& args) const { return staticCreate(args); } static JSClassRef getJSClass() { static JSClassRef jsClass; if (!jsClass) { JSClassDefinition definition = kJSClassDefinitionEmpty; definition.attributes = kJSClassAttributeNoPrototype; definition.finalize = _finalize; definition.hasProperty = __hasProperty; definition.getProperty = __getProperty; definition.setProperty = __setProperty; definition.deleteProperty = __deleteProperty; definition.getPropertyNames = __getPropertyNames; definition.hasInstance = __hasInstance; definition.convertToType = __convertToType; definition.callAsFunction = ctor_func; definition.callAsConstructor = ctor; definition.className = getTypeName(); definition.parentClass = Base::getJSClass(); jsClass = JSClassCreate(&definition); } return jsClass; } static JSObjectRef ctor(JSContextRef ctx, JSObjectRef constructor, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } static JSValueRef ctor_func(JSContextRef ctx, JSObjectRef func, JSObjectRef thisObj, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } virtual const char* getName() const { return getTypeName(); } static const char* getTypeName() { return "XMLBase"; } private: static Fusion::Base* newObject(JSObjectRef self, const Fusion::Args& args) { return new XMLBase(self, args); } public:


  virtual void addChild(const Fusion::Value& obj)
  {

   Fusion::String name;
   Fusion::Value val = Engine::handleAsProperty(obj, name);
   setProperty(name, val);
  }

  virtual bool _hasProperty(const Fusion::Value& name);
  virtual bool _setProperty(const Fusion::Value& name, const Fusion::Value& value);

  void addEventProperty(Fusion::Value& container, const Fusion::String& prop, Fusion::Value& func);
  void removeEventProperty(const Fusion::String& prop);

  private:
  Fusion::OrderedArray<Fusion::String, Fusion::Value>* myEventProps;
 };
}
# 10 "CasAnimation.h" 2

namespace Cas {




 class Animation : public XMLBase
 {
  protected:
  virtual ~Animation() { }

  public:
  enum TimingFunction { TF_EXPLICIT, TF_LINEAR, TF_EASEIN, TF_EASEOUT, TF_EASEINEASEOUT };

  Animation(JSObjectRef self, const Fusion::Args& args) : XMLBase(self,args), myAnimation(__null), myTimingFunction(TF_LINEAR) { }

  public: static void initializeClass(Fusion::Object& obj); static Fusion::Object getClass() { static JSObjectRef proto = __null; if (proto == __null) { proto = _createClass(getJSClass(), XMLBase::getClass().getObjectRef()); Fusion::Object protoobj(proto); protoobj.setProperty("__name", getTypeName()); initializeClass(protoobj); } return Fusion::Object(proto); } static Fusion::Base* staticCreate() { Fusion::Args args; Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } static Fusion::Base* staticCreate(const Fusion::Args& args) { Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } virtual Fusion::Base* _create(const Fusion::Args& args) const { return staticCreate(args); } static JSClassRef getJSClass() { static JSClassRef jsClass; if (!jsClass) { JSClassDefinition definition = kJSClassDefinitionEmpty; definition.attributes = kJSClassAttributeNoPrototype; definition.finalize = _finalize; definition.hasProperty = __hasProperty; definition.getProperty = __getProperty; definition.setProperty = __setProperty; definition.deleteProperty = __deleteProperty; definition.getPropertyNames = __getPropertyNames; definition.hasInstance = __hasInstance; definition.convertToType = __convertToType; definition.callAsFunction = ctor_func; definition.callAsConstructor = ctor; definition.className = getTypeName(); definition.parentClass = XMLBase::getJSClass(); jsClass = JSClassCreate(&definition); } return jsClass; } static JSObjectRef ctor(JSContextRef ctx, JSObjectRef constructor, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } static JSValueRef ctor_func(JSContextRef ctx, JSObjectRef func, JSObjectRef thisObj, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } virtual const char* getName() const { return getTypeName(); } static const char* getTypeName() { return "Animation"; } private: static Fusion::Base* newObject(JSObjectRef self, const Fusion::Args& args) { return new Animation(self, args); } public:


  virtual bool _hasProperty(const Fusion::Value& name);
  virtual Fusion::Value _getProperty(const Fusion::Value& name);
  virtual bool _setProperty(const Fusion::Value& name, const Fusion::Value& value);

  void setAnimation(void* anim) { myAnimation = anim; }
  void* animation();

  private:
  void* myAnimation;
  TimingFunction myTimingFunction;

 };





 class PropertyAnimation : public Animation
 {
  protected:
  virtual ~PropertyAnimation() { }

  public:
  PropertyAnimation(JSObjectRef self, const Fusion::Args& args);

  public: static void initializeClass(Fusion::Object& obj); static Fusion::Object getClass() { static JSObjectRef proto = __null; if (proto == __null) { proto = _createClass(getJSClass(), Animation::getClass().getObjectRef()); Fusion::Object protoobj(proto); protoobj.setProperty("__name", getTypeName()); initializeClass(protoobj); } return Fusion::Object(proto); } static Fusion::Base* staticCreate() { Fusion::Args args; Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } static Fusion::Base* staticCreate(const Fusion::Args& args) { Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } virtual Fusion::Base* _create(const Fusion::Args& args) const { return staticCreate(args); } static JSClassRef getJSClass() { static JSClassRef jsClass; if (!jsClass) { JSClassDefinition definition = kJSClassDefinitionEmpty; definition.attributes = kJSClassAttributeNoPrototype; definition.finalize = _finalize; definition.hasProperty = __hasProperty; definition.getProperty = __getProperty; definition.setProperty = __setProperty; definition.deleteProperty = __deleteProperty; definition.getPropertyNames = __getPropertyNames; definition.hasInstance = __hasInstance; definition.convertToType = __convertToType; definition.callAsFunction = ctor_func; definition.callAsConstructor = ctor; definition.className = getTypeName(); definition.parentClass = Animation::getJSClass(); jsClass = JSClassCreate(&definition); } return jsClass; } static JSObjectRef ctor(JSContextRef ctx, JSObjectRef constructor, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } static JSValueRef ctor_func(JSContextRef ctx, JSObjectRef func, JSObjectRef thisObj, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } virtual const char* getName() const { return getTypeName(); } static const char* getTypeName() { return "PropertyAnimation"; } private: static Fusion::Base* newObject(JSObjectRef self, const Fusion::Args& args) { return new PropertyAnimation(self, args); } public:


  virtual bool _hasProperty(const Fusion::Value& name);
  virtual Fusion::Value _getProperty(const Fusion::Value& name);
  virtual bool _setProperty(const Fusion::Value& name, const Fusion::Value& value);
 };





 class BasicAnimation : public PropertyAnimation
 {
  protected:
  virtual ~BasicAnimation() { }

  public:
  BasicAnimation(JSObjectRef self, const Fusion::Args& args);

  public: static void initializeClass(Fusion::Object& obj); static Fusion::Object getClass() { static JSObjectRef proto = __null; if (proto == __null) { proto = _createClass(getJSClass(), PropertyAnimation::getClass().getObjectRef()); Fusion::Object protoobj(proto); protoobj.setProperty("__name", getTypeName()); initializeClass(protoobj); } return Fusion::Object(proto); } static Fusion::Base* staticCreate() { Fusion::Args args; Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } static Fusion::Base* staticCreate(const Fusion::Args& args) { Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } virtual Fusion::Base* _create(const Fusion::Args& args) const { return staticCreate(args); } static JSClassRef getJSClass() { static JSClassRef jsClass; if (!jsClass) { JSClassDefinition definition = kJSClassDefinitionEmpty; definition.attributes = kJSClassAttributeNoPrototype; definition.finalize = _finalize; definition.hasProperty = __hasProperty; definition.getProperty = __getProperty; definition.setProperty = __setProperty; definition.deleteProperty = __deleteProperty; definition.getPropertyNames = __getPropertyNames; definition.hasInstance = __hasInstance; definition.convertToType = __convertToType; definition.callAsFunction = ctor_func; definition.callAsConstructor = ctor; definition.className = getTypeName(); definition.parentClass = PropertyAnimation::getJSClass(); jsClass = JSClassCreate(&definition); } return jsClass; } static JSObjectRef ctor(JSContextRef ctx, JSObjectRef constructor, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } static JSValueRef ctor_func(JSContextRef ctx, JSObjectRef func, JSObjectRef thisObj, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } virtual const char* getName() const { return getTypeName(); } static const char* getTypeName() { return "BasicAnimation"; } private: static Fusion::Base* newObject(JSObjectRef self, const Fusion::Args& args) { return new BasicAnimation(self, args); } public:


  virtual bool _hasProperty(const Fusion::Value& name);
  virtual Fusion::Value _getProperty(const Fusion::Value& name);
  virtual bool _setProperty(const Fusion::Value& name, const Fusion::Value& value);

  private:
  void* myAnimation;
 };





 class JSAnimation : public Animation
 {
  protected:
  virtual ~JSAnimation() { }

  public:
  JSAnimation(JSObjectRef self, const Fusion::Args& args);

  public: static void initializeClass(Fusion::Object& obj); static Fusion::Object getClass() { static JSObjectRef proto = __null; if (proto == __null) { proto = _createClass(getJSClass(), Animation::getClass().getObjectRef()); Fusion::Object protoobj(proto); protoobj.setProperty("__name", getTypeName()); initializeClass(protoobj); } return Fusion::Object(proto); } static Fusion::Base* staticCreate() { Fusion::Args args; Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } static Fusion::Base* staticCreate(const Fusion::Args& args) { Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } virtual Fusion::Base* _create(const Fusion::Args& args) const { return staticCreate(args); } static JSClassRef getJSClass() { static JSClassRef jsClass; if (!jsClass) { JSClassDefinition definition = kJSClassDefinitionEmpty; definition.attributes = kJSClassAttributeNoPrototype; definition.finalize = _finalize; definition.hasProperty = __hasProperty; definition.getProperty = __getProperty; definition.setProperty = __setProperty; definition.deleteProperty = __deleteProperty; definition.getPropertyNames = __getPropertyNames; definition.hasInstance = __hasInstance; definition.convertToType = __convertToType; definition.callAsFunction = ctor_func; definition.callAsConstructor = ctor; definition.className = getTypeName(); definition.parentClass = Animation::getJSClass(); jsClass = JSClassCreate(&definition); } return jsClass; } static JSObjectRef ctor(JSContextRef ctx, JSObjectRef constructor, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } static JSValueRef ctor_func(JSContextRef ctx, JSObjectRef func, JSObjectRef thisObj, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } virtual const char* getName() const { return getTypeName(); } static const char* getTypeName() { return "JSAnimation"; } private: static Fusion::Base* newObject(JSObjectRef self, const Fusion::Args& args) { return new JSAnimation(self, args); } public:


  virtual void _initialize(const Fusion::Args& args) { }

  private:
  void _init(JSObjectRef self, const Fusion::Args& args);
 };





 class Transition : public Animation
 {
  protected:
  virtual ~Transition() { }

  public:
  Transition(JSObjectRef self, const Fusion::Args& args);

  public: static void initializeClass(Fusion::Object& obj); static Fusion::Object getClass() { static JSObjectRef proto = __null; if (proto == __null) { proto = _createClass(getJSClass(), Animation::getClass().getObjectRef()); Fusion::Object protoobj(proto); protoobj.setProperty("__name", getTypeName()); initializeClass(protoobj); } return Fusion::Object(proto); } static Fusion::Base* staticCreate() { Fusion::Args args; Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } static Fusion::Base* staticCreate(const Fusion::Args& args) { Fusion::Object proto = getClass(); return _staticCreate(args, newObject, getJSClass(), proto); } virtual Fusion::Base* _create(const Fusion::Args& args) const { return staticCreate(args); } static JSClassRef getJSClass() { static JSClassRef jsClass; if (!jsClass) { JSClassDefinition definition = kJSClassDefinitionEmpty; definition.attributes = kJSClassAttributeNoPrototype; definition.finalize = _finalize; definition.hasProperty = __hasProperty; definition.getProperty = __getProperty; definition.setProperty = __setProperty; definition.deleteProperty = __deleteProperty; definition.getPropertyNames = __getPropertyNames; definition.hasInstance = __hasInstance; definition.convertToType = __convertToType; definition.callAsFunction = ctor_func; definition.callAsConstructor = ctor; definition.className = getTypeName(); definition.parentClass = Animation::getJSClass(); jsClass = JSClassCreate(&definition); } return jsClass; } static JSObjectRef ctor(JSContextRef ctx, JSObjectRef constructor, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } static JSValueRef ctor_func(JSContextRef ctx, JSObjectRef func, JSObjectRef thisObj, size_t nargs, const JSValueRef args[], JSValueRef* exp) { Fusion::Args a(nargs, args); Fusion::Object proto = getClass(); return _staticCreate(a, newObject, getJSClass(), proto)->getObjectRef(); } virtual const char* getName() const { return getTypeName(); } static const char* getTypeName() { return "Transition"; } private: static Fusion::Base* newObject(JSObjectRef self, const Fusion::Args& args) { return new Transition(self, args); } public:


  virtual bool _hasProperty(const Fusion::Value& name);
  virtual Fusion::Value _getProperty(const Fusion::Value& name);
  virtual bool _setProperty(const Fusion::Value& name, const Fusion::Value& value);

  private:
  void* myAnimation;
 };
}
# 12 "test.mm" 2
# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKAnimation.h" 1 3





# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKObject.h" 1 3





# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKBase.h" 1 3
# 112 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKBase.h" 3
extern "C" {




extern CFTimeInterval LKCurrentTime (void);

}
# 7 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKObject.h" 2 3
# 37 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKObject.h" 3
@class NSArray, NSString;
@protocol NSCoding;

@protocol LKObject <NSCoding>




+ (NSArray *)properties;





+ (id)defaultValueForKey:(NSString *)key;





- (BOOL)shouldArchiveValueForKey:(NSString *)key;

@end
# 7 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKAnimation.h" 2 3
# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKLayer.h" 1 3






# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKTiming.h" 1 3
# 27 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKTiming.h" 3
@class NSString;

@protocol LKTiming




@property CFTimeInterval beginTime;



@property CFTimeInterval duration;





@property float speed;






@property CFTimeInterval timeOffset;



@property float repeatCount;



@property CFTimeInterval repeatDuration;




@property BOOL autoreverses;






@property(bycopy) NSString *fillMode;

@end



extern NSString * const kLKFillModeRemoved;
extern NSString * const kLKFillModeFrozen;
# 8 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKLayer.h" 2 3
# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKTransform.h" 1 3
# 17 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKTransform.h" 3
struct LKTransform
{
  CGFloat m11, m12, m13, m14;
  CGFloat m21, m22, m23, m24;
  CGFloat m31, m32, m33, m34;
  CGFloat m41, m42, m43, m44;
};

typedef struct LKTransform LKTransform;

extern "C" {



extern const LKTransform LKTransformIdentity;



extern bool LKTransformIsIdentity (LKTransform t);



extern bool LKTransformEqualToTransform (LKTransform a, LKTransform b);




extern LKTransform LKTransformMakeTranslation (CGFloat tx,
    CGFloat ty, CGFloat tz);




extern LKTransform LKTransformMakeScale (CGFloat sx, CGFloat sy,
    CGFloat sz);





extern LKTransform LKTransformMakeRotation (CGFloat angle, CGFloat x,
    CGFloat y, CGFloat z);




extern LKTransform LKTransformTranslate (LKTransform t, CGFloat tx,
    CGFloat ty, CGFloat tz);




extern LKTransform LKTransformScale (LKTransform t, CGFloat sx,
    CGFloat sy, CGFloat sz);





extern LKTransform LKTransformRotate (LKTransform t, CGFloat angle,
    CGFloat x, CGFloat y, CGFloat z);



extern LKTransform LKTransformConcat (LKTransform a, LKTransform b);




extern LKTransform LKTransformInvert (LKTransform t);



extern LKTransform LKTransformMakeAffineTransform (CGAffineTransform m);



extern bool LKTransformIsAffine (LKTransform t);





extern CGAffineTransform LKTransformGetAffineTransform (LKTransform t);

}





@interface NSValue (LKTransformAdditions)

+ (NSValue *)valueWithLKTransform:(LKTransform)t;

- (LKTransform)LKTransformValue;

@end
# 9 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKLayer.h" 2 3


@class NSArray, NSDictionary, NSEnumerator, LKAnimation;
@class CIFilter;
@protocol LKAction;



enum LKAutoresizingMask
{
  kLKLayerNotSizable = 0,
  kLKLayerMinXMargin = 1U << 0,
  kLKLayerWidthSizable = 1U << 1,
  kLKLayerMaxXMargin = 1U << 2,
  kLKLayerMinYMargin = 1U << 3,
  kLKLayerHeightSizable = 1U << 4,
  kLKLayerMaxYMargin = 1U << 5
};



@interface LKLayer : NSObject <LKTiming, LKObject>
{
@private
  LKLayer *_superlayer;
  CGPoint _position;
  CGSize _size;
  CFTypeRef _contents;
  CFMutableArrayRef _sublayers;
  LKLayer *_mask;
  id _delegate;
  struct _LKAttrList *_attr;
  uint32_t _flags;
}



+ (id)layer;





@property CGRect bounds;




@property CGPoint position;




@property CGFloat zPosition;




@property LKTransform transform;




- (CGAffineTransform)affineTransform;
- (void)setAffineTransform:(CGAffineTransform)m;






@property CGRect frame;




@property BOOL hidden;




@property BOOL doubleSided;




@property(readonly) LKLayer *superlayer;




- (void)removeFromSuperlayer;






@property(bycopy) NSArray *sublayers;




- (void)addSublayer:(LKLayer *)layer;





- (void)insertSublayer:(LKLayer *)layer atIndex:(unsigned)idx;





- (void)insertSublayer:(LKLayer *)layer below:(LKLayer *)sibling;
- (void)insertSublayer:(LKLayer *)layer above:(LKLayer *)sibling;





- (void)replaceSublayer:(LKLayer *)layer with:(LKLayer *)layer2;






@property LKTransform sublayerTransform;
# 148 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKLayer.h" 3
@property LKLayer *mask;







@property BOOL masksToBounds;



- (CGPoint)convertPoint:(CGPoint)p fromLayer:(LKLayer *)l;
- (CGPoint)convertPoint:(CGPoint)p toLayer:(LKLayer *)l;
- (CGRect)convertRect:(CGRect)r fromLayer:(LKLayer *)l;
- (CGRect)convertRect:(CGRect)r toLayer:(LKLayer *)l;

- (CFTimeInterval)convertTime:(CFTimeInterval)t fromLayer:(LKLayer *)l;
- (CFTimeInterval)convertTime:(CFTimeInterval)t toLayer:(LKLayer *)l;







- (LKLayer *)hitTest:(CGPoint)p;



- (BOOL)containsPoint:(CGPoint)p;






@property id contents;





@property BOOL opaque;





- (void)display;





- (void)setNeedsDisplay;
- (void)setNeedsDisplayInRect:(CGRect)r;




@property BOOL needsDisplayOnBoundsChange;






- (void)drawInContext:(CGContextRef)ctx;







- (void)renderInContext:(CGContextRef)ctx;



@property CGColorRef backgroundColor;





@property CGFloat cornerRadius;






@property CGFloat borderWidth;




@property CGColorRef borderColor;




@property float opacity;






@property(bycopy) NSString *contentsGravity;
# 271 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKLayer.h" 3
@property CIFilter *compositingFilter;




@property(bycopy) NSArray *filters;




@property(bycopy) NSArray *backgroundFilters;





@property CGColorRef shadowColor;



@property float shadowOpacity;



@property CGSize shadowOffset;



@property CGFloat shadowRadius;







@property unsigned int autoresizingMask;






@property id layoutManager;







- (CGSize)preferredFrameSize;







- (void)setNeedsLayout;




- (void)layoutIfNeeded;







- (void)layoutSublayers;







- (void)resizeSublayersWithOldSize:(CGSize)size;
- (void)resizeWithOldSuperlayerSize:(CGSize)size;
# 390 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKLayer.h" 3
+ (id<LKAction>)defaultActionForKey:(NSString *)event;
# 405 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKLayer.h" 3
- (id<LKAction>)actionForKey:(NSString *)event;




@property(bycopy) NSDictionary *actions;
# 430 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKLayer.h" 3
- (void)addAnimation:(LKAnimation *)anim forKey:(NSString *)key;



- (void)removeAllAnimations;



- (void)removeAnimationForKey:(NSString *)key;





@property(bycopy) NSString *name;





@property id delegate;
# 462 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKLayer.h" 3
@property(bycopy) NSDictionary *style;

@end



@interface NSObject (LKLayoutManager)





- (CGSize)preferredSizeOfLayer:(LKLayer *)layer;




- (void)invalidateLayoutOfLayer:(LKLayer *)layer;





- (void)layoutSublayersOfLayer:(LKLayer *)layer;

@end



@protocol LKAction






- (void)runActionForKey:(NSString *)event object:(id)anObject
    arguments:(NSDictionary *)dict;

@end



@interface NSObject (LKLayerDelegate)





- (void)displayLayer:(LKLayer *)layer;



- (void)drawLayer:(LKLayer *)layer inContext:(CGContextRef)ctx;
# 524 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKLayer.h" 3
- (id<LKAction>)actionForLayer:(LKLayer *)layer forKey:(NSString *)event;

@end



extern NSString * const kLKGravityCenter;
extern NSString * const kLKGravityTop;
extern NSString * const kLKGravityBottom;
extern NSString * const kLKGravityLeft;
extern NSString * const kLKGravityRight;
extern NSString * const kLKGravityTopLeft;
extern NSString * const kLKGravityTopRight;
extern NSString * const kLKGravityBottomLeft;
extern NSString * const kLKGravityBottomRight;
extern NSString * const kLKGravityResize;
extern NSString * const kLKGravityResizeAspect;



extern NSString * const kLKOnOrderIn;
extern NSString * const kLKOnOrderOut;



extern NSString * const kLKTransition;
# 8 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKAnimation.h" 2 3


@class NSArray, NSString, LKTimingFunction;
@class CIFilter;



@interface LKAnimation : NSObject <NSCopying, LKTiming, LKObject, LKAction>
{
@private
  struct _LKAttrList *_attr;
  uint32_t _flags;
}



+ (id)animation;




@property LKTimingFunction *timingFunction;





@property id delegate;




@property BOOL removedOnCompletion;

@end



@interface NSObject (LKAnimationDelegate)



- (void)animationDidStart:(LKAnimation *)anim;






- (void)animationDidStop:(LKAnimation *)anim finished:(BOOL)flag;

@end




@interface LKPropertyAnimation : LKAnimation




+ (id)animationWithKeyPath:(NSString *)path;



@property(bycopy) NSString *keyPath;







@property BOOL additive;







@property BOOL cumulative;

@end




@interface LKBasicAnimation : LKPropertyAnimation
# 126 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKAnimation.h" 3
@property id fromValue, toValue, byValue;

@end




@interface LKKeyframeAnimation : LKPropertyAnimation




@property(bycopy) NSArray *values;
# 147 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKAnimation.h" 3
@property CGPathRef path;







@property(bycopy) NSArray *keyTimes;






@property(bycopy) NSArray *timingFunctions;





@property(bycopy) NSString *calculationMode;

@end



extern NSString * const kLKAnimationLinear;
extern NSString * const kLKAnimationDiscrete;
extern NSString * const kLKAnimationPaced;




@interface LKTransition : LKAnimation




@property(bycopy) NSString *type;






@property(bycopy) NSString *subtype;






@property float startProgress, endProgress;
# 209 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKAnimation.h" 3
@property CIFilter *filter;

@end



extern NSString * const kLKTransitionFade;
extern NSString * const kLKTransitionMoveIn;
extern NSString * const kLKTransitionPush;
extern NSString * const kLKTransitionReveal;



extern NSString * const kLKTransitionFromRight;
extern NSString * const kLKTransitionFromLeft;
extern NSString * const kLKTransitionFromTop;
extern NSString * const kLKTransitionFromBottom;




@interface LKAnimationGroup : LKAnimation





@property(bycopy) NSArray *animations;

@end
# 13 "test.mm" 2
# 1 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKTimingFunction.h" 1 3
# 9 "/System/Library/Frameworks/QuartzCore.framework/Headers/LKTimingFunction.h" 3
@class NSArray, NSString;







@interface LKTimingFunction : NSObject <NSCoding>
{
@private
  struct LKTimingFunctionPrivate *_priv;
}





+ (id)functionWithName:(NSString *)name;






+ (id)functionWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y;

- (id)initWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y;



- (void)getControlPointAtIndex:(size_t)idx values:(float[2])ptr;

@end



extern NSString * const kLKTimingFunctionLinear;
extern NSString * const kLKTimingFunctionEaseIn;
extern NSString * const kLKTimingFunctionEaseOut;
extern NSString * const kLKTimingFunctionEaseInEaseOut;
# 14 "test.mm" 2

using namespace Cas;


@interface CasScript : NSObject <LKAction>
{
@private
}

@end

@implementation CasScript
- (id)init:(Fusion::Object*) container function:(Fusion::Object *) func node:(Fusion::Object*) node
{
 return self;
}


 - (void)runActionForKey:(NSString *)path object:(id) anObject arguments:(NSDictionary *) dict
{

}
@end

void
Animation::initializeClass(Fusion::Object& obj)
{
}

void*
Animation::animation()
{

 if (myAnimation == __null) {
  LKAnimation* anim = [[LKAnimation alloc]init];
  myAnimation = (void*) anim;
 }
 return myAnimation;
}

bool
Animation::_hasProperty(const Fusion::Value& name)
{
 if (name == "__animation" || name == "timingFunction" || name == "autoreverses" ||
   name == "beginTime" || name == "duration" || name == "repeatCount" || name == "repeatDuration" ||
   name == "speed" || name == "timeOffset")
  return true;
 return XMLBase::_hasProperty(name);
}

Fusion::Value
Animation::_getProperty(const Fusion::Value& name)
{
 if (name == "__animation") {
  Fusion::Value val;
  val.setValue(myAnimation);
  return Fusion::Value(val);
 }
 if (name == "timingFunction") {
  switch(myTimingFunction) {
   default:
   case TF_LINEAR: return "LINEAR";
   case TF_EASEIN: return "EASEIN";
   case TF_EASEOUT: return "EASEOUT";
   case TF_EASEINEASEOUT: return "EASEINEASEOUT";
   case TF_EXPLICIT:
   {
    LKTimingFunction *tf = ((LKAnimation*) myAnimation).timingFunction;
    if (tf == __null)
     return "LINEAR";
    Fusion::Value array = Fusion::Object::global().getProperty("Array").getObject().create();
    for (uint32_t i = 0; i < 3; ++i) {
     float f[2];
     [tf getControlPointAtIndex:i values:f];
     array.callProperty("push", f[0]);
     array.callProperty("push", f[1]);
    }
    return array;
   }
  }
 }

 if (name == "autoreverses") return Fusion::Value((bool) ((LKAnimation*) myAnimation).autoreverses);
 if (name == "beginTime") return Fusion::Value((double) ((LKAnimation*) myAnimation).beginTime);
 if (name == "duration") return Fusion::Value((double) ((LKAnimation*) myAnimation).duration);
 if (name == "repeatCount") return Fusion::Value(((LKAnimation*) myAnimation).repeatCount);
 if (name == "repeatDuration") return Fusion::Value((double) ((LKAnimation*) myAnimation).repeatDuration);
 if (name == "speed") return Fusion::Value(((LKAnimation*) myAnimation).speed);
 if (name == "timeOffset") return Fusion::Value((double) ((LKAnimation*) myAnimation).timeOffset);

 return XMLBase::_getProperty(name);
}

bool
Animation::_setProperty(const Fusion::Value& name, const Fusion::Value& value)
{
 if (name == "timingFunction") {
  Fusion::Vec4f v;
  const NSString* tfname;

  if (value.isString()) {
   Fusion::String tfstr = value.getString();

   if (tfstr == "EASEIN") { myTimingFunction = TF_EASEIN; tfname = kLKTimingFunctionEaseIn; }
   else if (tfstr == "EASEOUT") { myTimingFunction = TF_EASEOUT; tfname = kLKTimingFunctionEaseOut; }
   else if (tfstr == "EASEINEASEOUT") { myTimingFunction = TF_EASEINEASEOUT; tfname = kLKTimingFunctionEaseInEaseOut; }
   else if (tfstr == "LINEAR") { myTimingFunction = TF_LINEAR; tfname = kLKTimingFunctionLinear; }
   else {

    myTimingFunction = TF_EXPLICIT;
    value.getValue(v);
   }
  }
  else {
   value.getValue(v);
   myTimingFunction = TF_EXPLICIT;
  }

  if (myTimingFunction == TF_EXPLICIT)
   ((LKAnimation*) myAnimation).timingFunction = [LKTimingFunction functionWithControlPoints:v[0]:v[1]:v[2]:v[3]];
  else
   ((LKAnimation*) myAnimation).timingFunction = [LKTimingFunction functionWithName: tfname];
 }

 if (name == "autoreverses") {
  ((LKAnimation*) myAnimation).autoreverses = value.getBoolean();
  return true;
 }
 if (name == "beginTime") {
  ((LKAnimation*) myAnimation).beginTime = value.getNumber();
  return true;
 }
 if (name == "duration") {
  ((LKAnimation*) myAnimation).duration = value.getNumber();
  return true;
 }
 if (name == "repeatCount") {
  ((LKAnimation*) myAnimation).repeatCount = (float) value.getNumber();
  return true;
 }
 if (name == "repeatDuration") {
  ((LKAnimation*) myAnimation).repeatDuration = value.getNumber();
  return true;
 }
 if (name == "speed") {
  ((LKAnimation*) myAnimation).speed = (float) value.getNumber();
  return true;
 }
 if (name == "timeOffset") {
  ((LKAnimation*) myAnimation).timeOffset = value.getNumber();
  return true;
 }
 return XMLBase::_setProperty(name, value);
}

void
PropertyAnimation::initializeClass(Fusion::Object& obj)
{
}

PropertyAnimation::PropertyAnimation(JSObjectRef self, const Fusion::Args& args) : Animation(self,args)
{
 LKPropertyAnimation* anim = [[LKPropertyAnimation alloc]init];
 setAnimation((void*) anim);
}

bool
PropertyAnimation::_hasProperty(const Fusion::Value& name)
{
 if (name == "keyPath" || name == "cumulative" || name == "additive")
  return true;
 return Animation::_hasProperty(name);
}

Fusion::Value
PropertyAnimation::_getProperty(const Fusion::Value& name)
{
 if (name == "keyPath") return Fusion::Value(Fusion::String([((LKPropertyAnimation*) animation()).keyPath UTF8String]));
 if (name == "cumulative") return Fusion::Value((bool) ((LKPropertyAnimation*) animation()).cumulative);
 if (name == "additive") return Fusion::Value((bool) ((LKPropertyAnimation*) animation()).additive);

 return Animation::_getProperty(name);
}

bool
PropertyAnimation::_setProperty(const Fusion::Value& name, const Fusion::Value& value)
{
 if (name == "keyPath") {
  ((LKPropertyAnimation*) animation()).keyPath = [NSString stringWithUTF8String:value.getString().getString()];
  return true;
 }
 if (name == "cumulative") {
  ((LKPropertyAnimation*) animation()).cumulative = value.getBoolean();
  return true;
 }
 if (name == "additive") {
  ((LKPropertyAnimation*) animation()).additive = value.getBoolean();
  return true;
 }
 return Animation::_setProperty(name, value);
}

void
BasicAnimation::initializeClass(Fusion::Object& obj)
{
}

BasicAnimation::BasicAnimation(JSObjectRef self, const Fusion::Args& args) : PropertyAnimation(self,args)
{
 LKAnimation* anim = [[LKBasicAnimation alloc]init];
 setAnimation((void*) anim);
}

bool
BasicAnimation::_hasProperty(const Fusion::Value& name)
{
 if (name == "fromValue" || name == "toValue" || name == "byValue")
  return true;
 return PropertyAnimation::_hasProperty(name);
}

Fusion::Value
BasicAnimation::_getProperty(const Fusion::Value& name)
{
 return PropertyAnimation::_getProperty(name);
}

bool
BasicAnimation::_setProperty(const Fusion::Value& name, const Fusion::Value& value)
{
 return PropertyAnimation::_setProperty(name, value);
}

void
JSAnimation::initializeClass(Fusion::Object& obj)
{
}

JSAnimation::JSAnimation(JSObjectRef self, const Fusion::Args& args) : Animation(self,args)
{
 _init(self, args);
}

void
JSAnimation::_init(JSObjectRef self, const Fusion::Args& args)
{

 Fusion::Object container = args[0].getObject();
 Fusion::Object func = args[2].getObject();


 setProperty("__func", func);

 Fusion::Object selfobj = Fusion::Value(self).getObject();
 CasScript* anim = [[CasScript alloc]init:&container function:&func node:&selfobj];
 setAnimation((void*) anim);
}

void
Transition::initializeClass(Fusion::Object& obj)
{
}

Transition::Transition(JSObjectRef self, const Fusion::Args& args) : Animation(self,args)
{
 LKTransition* anim = [[LKTransition alloc]init];
 setAnimation((void*) anim);
}

bool
Transition::_hasProperty(const Fusion::Value& name)
{
 if (name == "endProgress" || name == "startProgress" || name == "subtype" || name == "type")
  return true;
 return Animation::_hasProperty(name);
}

Fusion::Value
Transition::_getProperty(const Fusion::Value& name)
{
 if (name == "endProgress") return Fusion::Value((float) ((LKTransition*) animation()).endProgress);
 if (name == "startProgress") return Fusion::Value((float) ((LKTransition*) animation()).startProgress);
 if (name == "subtype") return Fusion::Value(Fusion::String([((LKTransition*) animation()).subtype UTF8String]));
 if (name == "type") return Fusion::Value(Fusion::String([((LKTransition*) animation()).type UTF8String]));

 return Animation::_getProperty(name);
}

bool
Transition::_setProperty(const Fusion::Value& name, const Fusion::Value& value)
{
 if (name == "endProgress") {
  ((LKTransition*) animation()).endProgress = (float) value.getNumber();
  return true;
 }
 if (name == "startProgress") {
  ((LKTransition*) animation()).startProgress = (float) value.getNumber();
  return true;
 }
 if (name == "subtype") {
  ((LKTransition*) animation()).subtype = [NSString stringWithUTF8String:value.getString().getString()];
  return true;
 }
 if (name == "type") {
  ((LKTransition*) animation()).type = [NSString stringWithUTF8String:value.getString().getString()];
  return true;
 }
 return Animation::_setProperty(name, value);
}
